--- a/iro/model/offer.py Mon Feb 13 17:16:14 2012 +0100
+++ b/iro/model/offer.py Mon Feb 13 17:16:54 2012 +0100
@@ -1,3 +1,4 @@
+from .dbdefer import dbdefer
from ..config import config
def getPossibleOffers(recipient, os):
@@ -6,6 +7,21 @@
ret.append(offers[offer])
return ret
+@dbdefer
+def extendProvider(session, user, typ, providers):
+ user = session.merge(user)
+ ret = []
+ for p in providers:
+ if p in offers.keys() and p not in ret and user.has_right(typ, offer_name = p):
+ ret.append(p)
+ elif user.has_right(typ,provider=p):
+ rs = [route for route in offers[p].routes if route not in ret]
+ for r in rs:
+ n = user.has_right(typ, provider=p, route=r)
+ if n:
+ ret.append(n)
+ return ret
+
def loadOffers():
pass
--- 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:
--- a/iro/offer/offer.py Mon Feb 13 17:16:14 2012 +0100
+++ b/iro/offer/offer.py Mon Feb 13 17:16:54 2012 +0100
@@ -1,8 +1,9 @@
from ..model.job import Status
class Offer():
- def __init__(self,name):
+ def __init__(self, name, routes):
self.name = name
+ self.routes = routes
def send(self, recipient, message):
return Status(self.name, Status.error, errtext="Error: Test")