diff -r e96e50ae6352 -r 11e0fdc1a58c iro/model/schema.py --- a/iro/model/schema.py Mon Feb 13 17:16:14 2012 +0100 +++ b/iro/model/schema.py Mon Feb 13 17:16:54 2012 +0100 @@ -100,13 +100,38 @@ return ""%(self.name,self.apikey) def routes(self, typ, isDefault = None): + '''returns a query object to get all possible routes for a given typ''' filters=[User.name == self.name, Offer.typ == typ, ] if isDefault is not None: filters.append(Userright.isDefault==isDefault) return object_session(self).query(Userright.offer_name).join(Offer,User).filter(and_(*filters)) - + + def providers(self, typ, isDefault = None): + '''return a query object for all possible providers for a given typ''' + filters=[User.name == self.name, + Offer.typ == typ, + ] + if isDefault is not None: + filters.append(Userright.isDefault==isDefault) + return object_session(self).query(Offer.provider).join(Userright,User).filter(and_(*filters)) + + def has_right(self, typ, offer_name = None, provider = None, route = None): + '''returns offer_name, if the user is allowed to use offer otherwise None + !if there are more than one possible solution it only returns the first!''' + filters=[User.name == self.name, + Offer.typ == typ, + ] + if offer_name: + filters.append(Userright.offer_name==offer_name) + if provider: + filters.append(Offer.provider==provider) + if route: + filters.append(Offer.route==route) + + return object_session(self).query(Userright.offer_name).join(Offer,User).filter(and_(*filters)).scalar() + def job(self, id): job = object_session(self).query(Job).join(User).filter(and_(User.name == self.name, Job.id==id)).first() if job is None: