# HG changeset patch # User Sandro Knauß # Date 1329149814 -3600 # Node ID 11e0fdc1a58cd5727f00fdb9b489abf6ad6be677 # Parent e96e50ae6352d92de38f33464dc3a2db7fdea3f8 fill extendProvider with life diff -r e96e50ae6352 -r 11e0fdc1a58c iro/model/offer.py --- 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 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: diff -r e96e50ae6352 -r 11e0fdc1a58c iro/offer/offer.py --- 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")