Exemplo n.º 1
0
    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))
Exemplo n.º 2
0
    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))