iro/model/schema.py
branchdevel
changeset 201 843a7bcecbc8
parent 176 71f1108758ef
child 203 b543ab9a9724
equal deleted inserted replaced
200:01c34f22be42 201:843a7bcecbc8
    17 Base = declarative_base()
    17 Base = declarative_base()
    18 
    18 
    19 __tables__=["User", "Job", "Message", "Offer", "Userright"]
    19 __tables__=["User", "Job", "Message", "Offer", "Userright"]
    20 
    20 
    21 class Userright(Base):
    21 class Userright(Base):
    22     """Über welche Routen darf ein Benutzer Daten verschicken und welches sind die Standardrouten (<em>isDefault=1</em>) für den Benuter."""
    22     """Über welche Routen darf ein Benutzer Daten verschicken und welches sind die Standardrouten (<em>default!=None</em>) für den Benuter. Geordnert werden die Standardrouten nach default."""
    23     __tablename__ = 'userright'
    23     __tablename__ = 'userright'
    24     user_name = Column('user', String(100), ForeignKey('apiuser.name'), primary_key=True)
    24     user_name = Column('user', String(100), ForeignKey('apiuser.name'), primary_key=True)
    25     offer_name = Column('offer', String(100), ForeignKey('offer.name'), primary_key=True)
    25     offer_name = Column('offer', String(100), ForeignKey('offer.name'), primary_key=True)
    26     isDefault = Column(Boolean)
    26     default = Column(Integer)
    27     offer = relationship("Offer")
    27     offer = relationship("Offer")
    28     user = relationship("User")
    28     user = relationship("User")
    29 
    29 
    30     def __init__(self, offer, default=False):
    30     def __init__(self, offer, default=None):
    31         self.offer = offer
    31         self.offer = offer
    32         self.isDefault = default
    32         self.default = default
    33 
    33 
    34     @property
    34     @property
    35     def bill(self):
    35     def bill(self):
    36         '''getting a list of unbilled messages grouped by Job.info'''
    36         '''getting a list of unbilled messages grouped by Job.info'''
    37         query = [ func.count(Message.id).label('anz'),      # anz of messages
    37         query = [ func.count(Message.id).label('anz'),      # anz of messages
   111         try:
   111         try:
   112             return "<User('%s','%s')>"%(self.name,self.apikey)
   112             return "<User('%s','%s')>"%(self.name,self.apikey)
   113         except DetachedInstanceError:
   113         except DetachedInstanceError:
   114             return Base.__repr__(self)
   114             return Base.__repr__(self)
   115     
   115     
   116     def routes(self, typ, isDefault = None):
   116     def routes(self, typ, default = False):
   117         '''returns a query object to get all possible routes for a given typ'''
   117         '''returns a query object to get all possible routes for a given typ'''
   118         filters=[User.name == self.name,
   118         filters=[User.name == self.name,
   119                 Offer.typ == typ, 
   119                 Offer.typ == typ, 
   120                 ]
   120                 ]
   121         if isDefault is not None:
   121         if default:
   122             filters.append(Userright.isDefault==isDefault)
   122             filters.append(Userright.default != None)
   123         return object_session(self).query(Userright.offer_name).join(Offer,User).filter(and_(*filters))
   123         return object_session(self).query(Userright.offer_name).join(Offer,User).filter(and_(*filters))
   124    
   124    
   125     def providers(self, typ, isDefault = None):
   125     def providers(self, typ, default = False):
   126         '''return a query object for all possible providers for a given typ'''
   126         '''return a query object for all possible providers for a given typ'''
   127         filters=[User.name == self.name,
   127         filters=[User.name == self.name,
   128                 Offer.typ == typ, 
   128                 Offer.typ == typ, 
   129                 ]
   129                 ]
   130         if isDefault is not None:
   130         if default:
   131             filters.append(Userright.isDefault==isDefault)
   131             filters.append(Userright.default != None)
   132         return object_session(self).query(Offer.provider).join(Userright,User).filter(and_(*filters))
   132         return object_session(self).query(Offer.provider).join(Userright,User).filter(and_(*filters))
   133 
   133 
   134     def has_right(self, typ, offer_name = None, provider = None, route = None):
   134     def has_right(self, typ, offer_name = None, provider = None, route = None):
   135         '''returns offer_name, if the user is allowed to use offer otherwise None
   135         '''returns offer_name, if the user is allowed to use offer otherwise None
   136            ->raise sqlalchemy.orm.exc.MultipleResultsFound if not a single offer match'''
   136            ->raise sqlalchemy.orm.exc.MultipleResultsFound if not a single offer match'''