iro/model/schema.py
branchdevel
changeset 148 11e0fdc1a58c
parent 140 75d0eaaa871d
child 150 c6896c3374c4
equal deleted inserted replaced
147:e96e50ae6352 148:11e0fdc1a58c
    98 
    98 
    99     def __repr__(self):
    99     def __repr__(self):
   100         return "<User('%s','%s')>"%(self.name,self.apikey)
   100         return "<User('%s','%s')>"%(self.name,self.apikey)
   101     
   101     
   102     def routes(self, typ, isDefault = None):
   102     def routes(self, typ, isDefault = None):
       
   103         '''returns a query object to get all possible routes for a given typ'''
   103         filters=[User.name == self.name,
   104         filters=[User.name == self.name,
   104                 Offer.typ == typ, 
   105                 Offer.typ == typ, 
   105                 ]
   106                 ]
   106         if isDefault is not None:
   107         if isDefault is not None:
   107             filters.append(Userright.isDefault==isDefault)
   108             filters.append(Userright.isDefault==isDefault)
   108         return object_session(self).query(Userright.offer_name).join(Offer,User).filter(and_(*filters))
   109         return object_session(self).query(Userright.offer_name).join(Offer,User).filter(and_(*filters))
   109     
   110    
       
   111     def providers(self, typ, isDefault = None):
       
   112         '''return a query object for all possible providers for a given typ'''
       
   113         filters=[User.name == self.name,
       
   114                 Offer.typ == typ, 
       
   115                 ]
       
   116         if isDefault is not None:
       
   117             filters.append(Userright.isDefault==isDefault)
       
   118         return object_session(self).query(Offer.provider).join(Userright,User).filter(and_(*filters))
       
   119 
       
   120     def has_right(self, typ, offer_name = None, provider = None, route = None):
       
   121         '''returns offer_name, if the user is allowed to use offer otherwise None
       
   122             !if there are more than one possible solution it only returns the first!'''
       
   123         filters=[User.name == self.name,
       
   124                 Offer.typ == typ, 
       
   125                 ]
       
   126         if offer_name:
       
   127             filters.append(Userright.offer_name==offer_name)
       
   128         if provider:
       
   129             filters.append(Offer.provider==provider)
       
   130         if route:
       
   131             filters.append(Offer.route==route)
       
   132 
       
   133         return object_session(self).query(Userright.offer_name).join(Offer,User).filter(and_(*filters)).scalar()
       
   134 
   110     def job(self, id):
   135     def job(self, id):
   111         job = object_session(self).query(Job).join(User).filter(and_(User.name == self.name, Job.id==id)).first()
   136         job = object_session(self).query(Job).join(User).filter(and_(User.name == self.name, Job.id==id)).first()
   112         if job is None:
   137         if job is None:
   113             raise JobNotFound()
   138             raise JobNotFound()
   114         return job
   139         return job