iro/model/offer.py
author Sandro Knauß <knauss@netzguerilla.net>
Thu, 29 Mar 2012 17:21:46 +0200
branchdevel
changeset 259 5d9c24c2cb8d
parent 258 0a5eb5aac0be
child 294 0e75bd39767d
permissions -rw-r--r--
iro.model.utils: adding docstrings

from .dbdefer import dbdefer

import schema
from ..config import configParser
from ..offer import getProvider, Offer

@dbdefer
def extendProvider(session, user, typ, ps):
    """extend and reduce the offer list to allowed routes for **user**.

    - extend the "default" to the default offerlist of the **user**.
    - extend a Provider name to all routes of that provider.

    :param session: a valid session ( created by decorator :func:`iro.model.dbdefer.dbdefer`)
    :param `iro.model.schema.User` user: a user object
    :param string typ: typ of the message
    :param ps: a list of strings or a string, each one offer name or provider name
    :return: a extended an reduced offer list
    """
    user = session.merge(user)
    ret = []
    if ps == "default" or ps == ["default"]:
        ps = (q[0] for q in  user.routes(typ,default=True))
    for p in ps:
        if p not in ret and user.has_right(typ, offer_name = p): 
                ret.append(p)
        elif user.providers(typ).filter(schema.Offer.provider==p).first():
            for r in providers[p].typs[typ]:
                n = user.has_right(typ, provider=p, route=r)
                if n and n not in ret:
                    ret.append(n)
    return ret

@dbdefer
def loadOffers(session):
    """loading Offers from database and configuration file and store them in :attr:`~iro.model.offer.offers` and :attr:`~iro.model.offer.providers`.

    :param session: a valid session ( created by decorator :func:`iro.model.dbdefer.dbdefer`)
    """
    offers.clear()
    providers.clear()
    for provider in ( s for s in configParser.sections() if not s in ["main",]):
        p=getProvider(provider,configParser.get(provider,"typ"),configParser.items(provider))
        for t in p.typs:
            for r in p.typs[t]:
                n = schema.Offer.get(session, provider, r, t).name
                offers[n]=Offer(provider=p,route=r,typ=t,name=n)
        providers[provider]=p

offers={}
"""A dict of all available offers -- key is the offer name"""

providers={}
"""A dict of all available providers -- key is the provider name"""


configParser.registerReload(loadOffers)