示例#1
0
	def commands_group(self, id, item):
		itemType = 'stats' if item.has_key('ids') else 'insert'
		itemGroup = item['ids'] if itemType == 'stats' else None

		if itemType == 'insert':
			response = (dict(
				id=id
			))

			if not isinstance(item['group'], DictType):
				raise ReceiverError('Value "group" must be dictonary type')

			if (not item['group'].get('id')):
				raise ReceiverError('Value "group" must be contains "id" field')
			else:
				item['group']['id'] = int(item['group']['id'])

			if 'status' in item['group'] and not item['group']['status'] in GROUP_STATUSES_NAMES:
				raise ReceiverError('Value "group" must be contains valid "status" field, values {0}'.format(GROUP_STATUSES.values()))

			# Check group
			group = groups.get(item['group']['id'])
			if group is None:
				# Insert 
				group = Group.fromDict(dict(id=item['group'].pop('id'), **item['group']))
			else:
				if 'status' in item['group']:
					# Update status
					groups.status(group.id, item['group']['status'])
				else:
					self.send(dict(
						error='Group already "{0}" exists'.format(group.id),
						id=itemId,
					))

			response['group'] = (dict(
				id=groups.add(group),
				status=group.status,
			))

			self.send(response)
		elif itemType == 'stats':
			itemGroup = (itemGroup,) if not isinstance(itemGroup, (TupleType, ListType)) else itemGroup
			itemGroup = map(int, itemGroup)
			
			self.send(dict(
				groups=dict(((group.id, group.toDict()) for group in map(groups.get, itemGroup) if group)),
				id=id,
			))
		else:
			self.send(dict(
				error='Unknown type "{0}"'.format(itemType),
				id=itemId,
			))
示例#2
0
	def load(self):
		log.msg(self, 'load')

		if os.path.exists(self.file):
			# Load
			with open(self.file, 'rb') as fp:
				next, data = mload(fp)

				log.msg(self, 'load', len(data))

				self.next = self.counter(next)
				self.data = dict(((group['id'], Group.fromDict(group)) for group in data))

		log.msg(self, 'load ok')