--- 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 "<User('%s','%s')>"%(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: