def __init__(self): self.top = [] self.by_name = {} self.by_key = {} for gk,group in categories.iteritems(): if 'name' not in group: raise ValueError('No name in group %s' % gk) if len(group['name']): group_name = _(group['name']) else: group_name = '' if group['name'] in self.by_name: raise ValueError('Name in use %s' % group['name']) if gk in self.by_key: raise ValueError('Key in use %s' % ck) g = TransactionCategory( name=group_name, key=gk, ) subcats = [] for ck, subc in group['subcats'].iteritems(): if 'name' not in subc: raise ValueError('No name in category %s' % ck) if subc['name'] in self.by_name: raise ValueError('Name in use %s' % subc['name']) if ck in self.by_key: raise ValueError('Key in use %s' % ck) tc = TransactionCategory( name=_(subc['name']), key=ck, hardcoded=True, ) subcats.append(tc) self.by_name[tc.name] = tc self.by_key[tc.key] = tc subcats.sort(lambda x, y: cmp(x.name, y.name)) g.subcats = subcats self.top.append(g) self.by_name[g.name] = g self.by_key[g.key] = g self.top.sort(lambda x, y: cmp(x.name, y.name))
def __init__(self, db = None, model = None, user_uid = None): self.top = [] self.by_name = {} self.by_key = {} self.custom = None if db and model and user_uid: self.custom = db.query(model.TransactionCategory).filter_by(user_uid=user_uid) for gk,group in categories.iteritems(): if 'name' not in group: raise ValueError('No name in group %s' % gk) if len(group['name']): group_name = _(group['name']) else: group_name = '' if group['name'] in self.by_name: raise ValueError('Name in use %s' % group['name']) if gk in self.by_key: raise ValueError('Key in use %s' % ck) g = TransactionCategory( name=group_name, key=gk, ) subcats = [] for ck, subc in group['subcats'].iteritems(): if 'name' not in subc: raise ValueError('No name in category %s' % ck) if subc['name'] in self.by_name: raise ValueError('Name in use %s' % subc['name']) if ck in self.by_key: raise ValueError('Key in use %s' % ck) tc = TransactionCategory( name=_(subc['name']), key=ck, hardcoded=True, ) subcats.append(tc) self.by_name[tc.name] = tc self.by_key[tc.key] = tc # Append user's custom (from database) if any if self.custom: for custom_category in self.custom: if custom_category.parent == g.key: custom_category.key = custom_category.name subcats.append(custom_category) self.by_name[custom_category.name] = custom_category self.by_key[custom_category.key] = custom_category subcats.sort(lambda x, y: cmp(x.name, y.name)) g.subcats = subcats self.top.append(g) self.by_name[g.name] = g self.by_key[g.key] = g self.top.sort(lambda x, y: cmp(x.name, y.name))