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, ))
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')