iro/model/schema.py
branchdevel
changeset 148 11e0fdc1a58c
parent 140 75d0eaaa871d
child 150 c6896c3374c4
--- 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: