iro/model/schema.py
author Sandro Knauß <knauss@netzguerilla.net>
Fri, 02 Mar 2012 13:46:13 +0100
branchdevel
changeset 210 3763babd5e10
parent 208 5da0f00ef872
child 211 3fc1f400c107
permissions -rw-r--r--
refactoring vRoute
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
92
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
     1
# -*- coding: utf-8 -*- 
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
     2
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
     3
from sqlalchemy import Column, Integer, String, Sequence, Boolean, DateTime, Numeric, Enum
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
     4
from sqlalchemy.ext.declarative import declarative_base
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
     5
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
     6
#relationship
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
     7
from sqlalchemy import ForeignKey
121
ca63b6776231 putting routes logic to schema
Sandro Knauß <knauss@netzguerilla.net>
parents: 117
diff changeset
     8
from sqlalchemy.orm import relationship, backref, object_session
ca63b6776231 putting routes logic to schema
Sandro Knauß <knauss@netzguerilla.net>
parents: 117
diff changeset
     9
127
79966b937274 made bill (aka statistic) function ready
Sandro Knauß <knauss@netzguerilla.net>
parents: 125
diff changeset
    10
from sqlalchemy import and_
153
0e50d10c8b6c handle detached objects
Sandro Knauß <knauss@netzguerilla.net>
parents: 150
diff changeset
    11
from sqlalchemy.orm.exc import DetachedInstanceError 
127
79966b937274 made bill (aka statistic) function ready
Sandro Knauß <knauss@netzguerilla.net>
parents: 125
diff changeset
    12
import sqlalchemy.sql.functions as func
92
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    13
140
75d0eaaa871d start fixing job mangement
Sandro Knauß <knauss@netzguerilla.net>
parents: 136
diff changeset
    14
import job
125
19b3f383c9ce getting job status form db
Sandro Knauß <knauss@netzguerilla.net>
parents: 122
diff changeset
    15
from ..error import JobNotFound
19b3f383c9ce getting job status form db
Sandro Knauß <knauss@netzguerilla.net>
parents: 122
diff changeset
    16
92
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    17
Base = declarative_base()
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    18
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    19
__tables__=["User", "Job", "Message", "Offer", "Userright"]
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    20
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    21
class Userright(Base):
201
843a7bcecbc8 renameing Userright.isDefault(bool) -> default(int)
Sandro Knauß <knauss@netzguerilla.net>
parents: 176
diff changeset
    22
    """Über welche Routen darf ein Benutzer Daten verschicken und welches sind die Standardrouten (<em>default!=None</em>) für den Benuter. Geordnert werden die Standardrouten nach default."""
92
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    23
    __tablename__ = 'userright'
94
4349f10d77a6 updatating schema for mysql
Sandro Knauß <knauss@netzguerilla.net>
parents: 92
diff changeset
    24
    user_name = Column('user', String(100), ForeignKey('apiuser.name'), primary_key=True)
4349f10d77a6 updatating schema for mysql
Sandro Knauß <knauss@netzguerilla.net>
parents: 92
diff changeset
    25
    offer_name = Column('offer', String(100), ForeignKey('offer.name'), primary_key=True)
201
843a7bcecbc8 renameing Userright.isDefault(bool) -> default(int)
Sandro Knauß <knauss@netzguerilla.net>
parents: 176
diff changeset
    26
    default = Column(Integer)
92
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    27
    offer = relationship("Offer")
127
79966b937274 made bill (aka statistic) function ready
Sandro Knauß <knauss@netzguerilla.net>
parents: 125
diff changeset
    28
    user = relationship("User")
92
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    29
201
843a7bcecbc8 renameing Userright.isDefault(bool) -> default(int)
Sandro Knauß <knauss@netzguerilla.net>
parents: 176
diff changeset
    30
    def __init__(self, offer, default=None):
117
351a02310dd8 model restructuring
Sandro Knauß <knauss@netzguerilla.net>
parents: 94
diff changeset
    31
        self.offer = offer
201
843a7bcecbc8 renameing Userright.isDefault(bool) -> default(int)
Sandro Knauß <knauss@netzguerilla.net>
parents: 176
diff changeset
    32
        self.default = default
117
351a02310dd8 model restructuring
Sandro Knauß <knauss@netzguerilla.net>
parents: 94
diff changeset
    33
127
79966b937274 made bill (aka statistic) function ready
Sandro Knauß <knauss@netzguerilla.net>
parents: 125
diff changeset
    34
    @property
79966b937274 made bill (aka statistic) function ready
Sandro Knauß <knauss@netzguerilla.net>
parents: 125
diff changeset
    35
    def bill(self):
79966b937274 made bill (aka statistic) function ready
Sandro Knauß <knauss@netzguerilla.net>
parents: 125
diff changeset
    36
        '''getting a list of unbilled messages grouped by Job.info'''
79966b937274 made bill (aka statistic) function ready
Sandro Knauß <knauss@netzguerilla.net>
parents: 125
diff changeset
    37
        query = [ func.count(Message.id).label('anz'),      # anz of messages
79966b937274 made bill (aka statistic) function ready
Sandro Knauß <knauss@netzguerilla.net>
parents: 125
diff changeset
    38
                  func.sum(Message.price).label("price"),   # price of the messages
79966b937274 made bill (aka statistic) function ready
Sandro Knauß <knauss@netzguerilla.net>
parents: 125
diff changeset
    39
                  Job.info.label('info'),                   # info tag
79966b937274 made bill (aka statistic) function ready
Sandro Knauß <knauss@netzguerilla.net>
parents: 125
diff changeset
    40
                  ]
79966b937274 made bill (aka statistic) function ready
Sandro Knauß <knauss@netzguerilla.net>
parents: 125
diff changeset
    41
79966b937274 made bill (aka statistic) function ready
Sandro Knauß <knauss@netzguerilla.net>
parents: 125
diff changeset
    42
        filters = [ Message.isBilled==False,                # only unbilled messages
79966b937274 made bill (aka statistic) function ready
Sandro Knauß <knauss@netzguerilla.net>
parents: 125
diff changeset
    43
                   Job.user==self.user,                     # only jobs connected to user
79966b937274 made bill (aka statistic) function ready
Sandro Knauß <knauss@netzguerilla.net>
parents: 125
diff changeset
    44
                   Message.offer==self.offer,               # only messages in the right offer
136
ca926774e16c now using job.id - integer autoincrement
Sandro Knauß <knauss@netzguerilla.net>
parents: 135
diff changeset
    45
                   Message.job_id==Job.id,                  # join Message and Job
127
79966b937274 made bill (aka statistic) function ready
Sandro Knauß <knauss@netzguerilla.net>
parents: 125
diff changeset
    46
                ]
79966b937274 made bill (aka statistic) function ready
Sandro Knauß <knauss@netzguerilla.net>
parents: 125
diff changeset
    47
        return object_session(self).query(*query).filter(and_(*filters)).group_by(Job.info)
79966b937274 made bill (aka statistic) function ready
Sandro Knauß <knauss@netzguerilla.net>
parents: 125
diff changeset
    48
92
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    49
class Offer(Base):
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    50
    """Alle Routen über die SMS, Faxe und Mails verschickt werden könnnen. <em>provider</em>, <em>typ</em> und <em>route</em> werden verwendet, um die entsprechenden Zugangsdaten laden zu können."""
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    51
    __tablename__ = "offer"
94
4349f10d77a6 updatating schema for mysql
Sandro Knauß <knauss@netzguerilla.net>
parents: 92
diff changeset
    52
    name = Column(String(100), primary_key=True)
4349f10d77a6 updatating schema for mysql
Sandro Knauß <knauss@netzguerilla.net>
parents: 92
diff changeset
    53
    provider = Column(String(100))
4349f10d77a6 updatating schema for mysql
Sandro Knauß <knauss@netzguerilla.net>
parents: 92
diff changeset
    54
    route = Column(String(100))
4349f10d77a6 updatating schema for mysql
Sandro Knauß <knauss@netzguerilla.net>
parents: 92
diff changeset
    55
    typ = Column(String(100))
122
b55754aa4f96 nun typs query into session object
Sandro Knauß <knauss@netzguerilla.net>
parents: 121
diff changeset
    56
  
176
71f1108758ef more logic to schema.
Sandro Knauß <knauss@netzguerilla.net>
parents: 153
diff changeset
    57
    @classmethod
71f1108758ef more logic to schema.
Sandro Knauß <knauss@netzguerilla.net>
parents: 153
diff changeset
    58
    def get(cls, session, provider, route, typ):
71f1108758ef more logic to schema.
Sandro Knauß <knauss@netzguerilla.net>
parents: 153
diff changeset
    59
        return session.query(cls).filter(and_(cls.provider==provider, cls.route==route, cls.typ==typ)).first()
92
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    60
205
02ae72e8bab9 implementing vRoutes
Sandro Knauß <knauss@netzguerilla.net>
parents: 203
diff changeset
    61
    @classmethod
02ae72e8bab9 implementing vRoutes
Sandro Knauß <knauss@netzguerilla.net>
parents: 203
diff changeset
    62
    def routes(cls, session, typ):
02ae72e8bab9 implementing vRoutes
Sandro Knauß <knauss@netzguerilla.net>
parents: 203
diff changeset
    63
        return session.query(cls).filter_by(typ=typ)
02ae72e8bab9 implementing vRoutes
Sandro Knauß <knauss@netzguerilla.net>
parents: 203
diff changeset
    64
208
5da0f00ef872 session.typs -> Offer.typs
Sandro Knauß <knauss@netzguerilla.net>
parents: 205
diff changeset
    65
    @classmethod
5da0f00ef872 session.typs -> Offer.typs
Sandro Knauß <knauss@netzguerilla.net>
parents: 205
diff changeset
    66
    def typs(cls, session):
5da0f00ef872 session.typs -> Offer.typs
Sandro Knauß <knauss@netzguerilla.net>
parents: 205
diff changeset
    67
        return session.query(cls.typ).distinct()
205
02ae72e8bab9 implementing vRoutes
Sandro Knauß <knauss@netzguerilla.net>
parents: 203
diff changeset
    68
92
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    69
class Message(Base):
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    70
    """Wenn ein Vorgang von Iro Kosten erzeugt hat wird eine neue Zeile eingefügt. Solange nicht bezahlt wurde ist <em>isBilled=0</em>."""
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    71
    __tablename__ = "message"
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    72
    id = Column(Integer, Sequence('message_id_seq'), primary_key=True)
94
4349f10d77a6 updatating schema for mysql
Sandro Knauß <knauss@netzguerilla.net>
parents: 92
diff changeset
    73
    recipient = Column(String(100))
92
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    74
    isBilled = Column(Boolean)
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    75
    date = Column(DateTime)
127
79966b937274 made bill (aka statistic) function ready
Sandro Knauß <knauss@netzguerilla.net>
parents: 125
diff changeset
    76
    price = Column(Numeric(8,4))
136
ca926774e16c now using job.id - integer autoincrement
Sandro Knauß <knauss@netzguerilla.net>
parents: 135
diff changeset
    77
    job_id = Column("job", String(40), ForeignKey('job.id'))
92
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    78
    job = relationship("Job", backref=backref('messages'))
94
4349f10d77a6 updatating schema for mysql
Sandro Knauß <knauss@netzguerilla.net>
parents: 92
diff changeset
    79
    offer_id = Column("offer",String(100), ForeignKey('offer.name'))
92
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    80
    offer = relationship("Offer", backref=backref('messages'))
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    81
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    82
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    83
class Job(Base):
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    84
    """Ein kompletter Auftrag, der an Iro zum verschicken übergeben wird. Status zeigt den generellen Status des Auftrages an (<em>init</em>, <em>started</em>, <em>sending</em>, <em>sended</em> oder <em>error</em>). <em>info</em> wird verwendet um dem Benutzer eine Möglickeit zu geben verschiede Auftragsgruppen zu erstellen."""
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    85
    __tablename__ = "job"
136
ca926774e16c now using job.id - integer autoincrement
Sandro Knauß <knauss@netzguerilla.net>
parents: 135
diff changeset
    86
    id = Column(Integer, Sequence('job_id_seq'), primary_key=True)
94
4349f10d77a6 updatating schema for mysql
Sandro Knauß <knauss@netzguerilla.net>
parents: 92
diff changeset
    87
    info = Column(String(100))
92
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    88
    status = Column(Enum("init","started","sending","sended","error"))
94
4349f10d77a6 updatating schema for mysql
Sandro Knauß <knauss@netzguerilla.net>
parents: 92
diff changeset
    89
    user_id = Column("user", String(100), ForeignKey('apiuser.name'))
92
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    90
    user = relationship("User", backref=backref('jobs'))
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    91
140
75d0eaaa871d start fixing job mangement
Sandro Knauß <knauss@netzguerilla.net>
parents: 136
diff changeset
    92
    @property
75d0eaaa871d start fixing job mangement
Sandro Knauß <knauss@netzguerilla.net>
parents: 136
diff changeset
    93
    def extend(self):
75d0eaaa871d start fixing job mangement
Sandro Knauß <knauss@netzguerilla.net>
parents: 136
diff changeset
    94
        return job.exJobs[self.id]
75d0eaaa871d start fixing job mangement
Sandro Knauß <knauss@netzguerilla.net>
parents: 136
diff changeset
    95
75d0eaaa871d start fixing job mangement
Sandro Knauß <knauss@netzguerilla.net>
parents: 136
diff changeset
    96
135
f8640c663e3e model.job created
Sandro Knauß <knauss@netzguerilla.net>
parents: 127
diff changeset
    97
    def __repr__(self):
153
0e50d10c8b6c handle detached objects
Sandro Knauß <knauss@netzguerilla.net>
parents: 150
diff changeset
    98
        try:
0e50d10c8b6c handle detached objects
Sandro Knauß <knauss@netzguerilla.net>
parents: 150
diff changeset
    99
            return "<Job('%s','%s','%s','%s')>"%(self.id,self.info, self.status, self.user_id)
0e50d10c8b6c handle detached objects
Sandro Knauß <knauss@netzguerilla.net>
parents: 150
diff changeset
   100
        except DetachedInstanceError:
0e50d10c8b6c handle detached objects
Sandro Knauß <knauss@netzguerilla.net>
parents: 150
diff changeset
   101
            return Base.__repr__(self)
135
f8640c663e3e model.job created
Sandro Knauß <knauss@netzguerilla.net>
parents: 127
diff changeset
   102
176
71f1108758ef more logic to schema.
Sandro Knauß <knauss@netzguerilla.net>
parents: 153
diff changeset
   103
    @classmethod
71f1108758ef more logic to schema.
Sandro Knauß <knauss@netzguerilla.net>
parents: 153
diff changeset
   104
    def get(cls, session, id):
71f1108758ef more logic to schema.
Sandro Knauß <knauss@netzguerilla.net>
parents: 153
diff changeset
   105
        return session.query(cls).filter_by(id=id).first()
71f1108758ef more logic to schema.
Sandro Knauß <knauss@netzguerilla.net>
parents: 153
diff changeset
   106
92
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
   107
class User(Base):
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
   108
    """Die Benutzerdatenbank von Iro. <em>ng_kunde</em> ist der verknüpfte netzguerilla.net Benutzer, der die Rechnung zahlt."""
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
   109
    __tablename__ = "apiuser"
94
4349f10d77a6 updatating schema for mysql
Sandro Knauß <knauss@netzguerilla.net>
parents: 92
diff changeset
   110
    name = Column(String(100), primary_key=True)
92
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
   111
    ng_kunde = Column(Integer)
94
4349f10d77a6 updatating schema for mysql
Sandro Knauß <knauss@netzguerilla.net>
parents: 92
diff changeset
   112
    apikey = Column(String(50),unique=True)
92
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
   113
    rights = relationship('Userright')
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
   114
    def __init__(self, name, apikey):
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
   115
        self.name=name
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
   116
        self.apikey=apikey
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
   117
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
   118
    def __repr__(self):
153
0e50d10c8b6c handle detached objects
Sandro Knauß <knauss@netzguerilla.net>
parents: 150
diff changeset
   119
        try:
0e50d10c8b6c handle detached objects
Sandro Knauß <knauss@netzguerilla.net>
parents: 150
diff changeset
   120
            return "<User('%s','%s')>"%(self.name,self.apikey)
0e50d10c8b6c handle detached objects
Sandro Knauß <knauss@netzguerilla.net>
parents: 150
diff changeset
   121
        except DetachedInstanceError:
0e50d10c8b6c handle detached objects
Sandro Knauß <knauss@netzguerilla.net>
parents: 150
diff changeset
   122
            return Base.__repr__(self)
121
ca63b6776231 putting routes logic to schema
Sandro Knauß <knauss@netzguerilla.net>
parents: 117
diff changeset
   123
    
201
843a7bcecbc8 renameing Userright.isDefault(bool) -> default(int)
Sandro Knauß <knauss@netzguerilla.net>
parents: 176
diff changeset
   124
    def routes(self, typ, default = False):
148
11e0fdc1a58c fill extendProvider with life
Sandro Knauß <knauss@netzguerilla.net>
parents: 140
diff changeset
   125
        '''returns a query object to get all possible routes for a given typ'''
121
ca63b6776231 putting routes logic to schema
Sandro Knauß <knauss@netzguerilla.net>
parents: 117
diff changeset
   126
        filters=[User.name == self.name,
ca63b6776231 putting routes logic to schema
Sandro Knauß <knauss@netzguerilla.net>
parents: 117
diff changeset
   127
                Offer.typ == typ, 
ca63b6776231 putting routes logic to schema
Sandro Knauß <knauss@netzguerilla.net>
parents: 117
diff changeset
   128
                ]
201
843a7bcecbc8 renameing Userright.isDefault(bool) -> default(int)
Sandro Knauß <knauss@netzguerilla.net>
parents: 176
diff changeset
   129
        if default:
843a7bcecbc8 renameing Userright.isDefault(bool) -> default(int)
Sandro Knauß <knauss@netzguerilla.net>
parents: 176
diff changeset
   130
            filters.append(Userright.default != None)
203
b543ab9a9724 tests for Userright.default added
Sandro Knauß <knauss@netzguerilla.net>
parents: 201
diff changeset
   131
        return object_session(self).query(Userright.offer_name).join(Offer,User).filter(and_(*filters)).order_by(Userright.default)
148
11e0fdc1a58c fill extendProvider with life
Sandro Knauß <knauss@netzguerilla.net>
parents: 140
diff changeset
   132
   
201
843a7bcecbc8 renameing Userright.isDefault(bool) -> default(int)
Sandro Knauß <knauss@netzguerilla.net>
parents: 176
diff changeset
   133
    def providers(self, typ, default = False):
148
11e0fdc1a58c fill extendProvider with life
Sandro Knauß <knauss@netzguerilla.net>
parents: 140
diff changeset
   134
        '''return a query object for all possible providers for a given typ'''
11e0fdc1a58c fill extendProvider with life
Sandro Knauß <knauss@netzguerilla.net>
parents: 140
diff changeset
   135
        filters=[User.name == self.name,
11e0fdc1a58c fill extendProvider with life
Sandro Knauß <knauss@netzguerilla.net>
parents: 140
diff changeset
   136
                Offer.typ == typ, 
11e0fdc1a58c fill extendProvider with life
Sandro Knauß <knauss@netzguerilla.net>
parents: 140
diff changeset
   137
                ]
201
843a7bcecbc8 renameing Userright.isDefault(bool) -> default(int)
Sandro Knauß <knauss@netzguerilla.net>
parents: 176
diff changeset
   138
        if default:
843a7bcecbc8 renameing Userright.isDefault(bool) -> default(int)
Sandro Knauß <knauss@netzguerilla.net>
parents: 176
diff changeset
   139
            filters.append(Userright.default != None)
148
11e0fdc1a58c fill extendProvider with life
Sandro Knauß <knauss@netzguerilla.net>
parents: 140
diff changeset
   140
        return object_session(self).query(Offer.provider).join(Userright,User).filter(and_(*filters))
11e0fdc1a58c fill extendProvider with life
Sandro Knauß <knauss@netzguerilla.net>
parents: 140
diff changeset
   141
11e0fdc1a58c fill extendProvider with life
Sandro Knauß <knauss@netzguerilla.net>
parents: 140
diff changeset
   142
    def has_right(self, typ, offer_name = None, provider = None, route = None):
11e0fdc1a58c fill extendProvider with life
Sandro Knauß <knauss@netzguerilla.net>
parents: 140
diff changeset
   143
        '''returns offer_name, if the user is allowed to use offer otherwise None
150
c6896c3374c4 more offer tests an fixes in model.schema
Sandro Knauß <knauss@netzguerilla.net>
parents: 148
diff changeset
   144
           ->raise sqlalchemy.orm.exc.MultipleResultsFound if not a single offer match'''
148
11e0fdc1a58c fill extendProvider with life
Sandro Knauß <knauss@netzguerilla.net>
parents: 140
diff changeset
   145
        filters=[User.name == self.name,
11e0fdc1a58c fill extendProvider with life
Sandro Knauß <knauss@netzguerilla.net>
parents: 140
diff changeset
   146
                Offer.typ == typ, 
11e0fdc1a58c fill extendProvider with life
Sandro Knauß <knauss@netzguerilla.net>
parents: 140
diff changeset
   147
                ]
11e0fdc1a58c fill extendProvider with life
Sandro Knauß <knauss@netzguerilla.net>
parents: 140
diff changeset
   148
        if offer_name:
11e0fdc1a58c fill extendProvider with life
Sandro Knauß <knauss@netzguerilla.net>
parents: 140
diff changeset
   149
            filters.append(Userright.offer_name==offer_name)
11e0fdc1a58c fill extendProvider with life
Sandro Knauß <knauss@netzguerilla.net>
parents: 140
diff changeset
   150
        if provider:
11e0fdc1a58c fill extendProvider with life
Sandro Knauß <knauss@netzguerilla.net>
parents: 140
diff changeset
   151
            filters.append(Offer.provider==provider)
11e0fdc1a58c fill extendProvider with life
Sandro Knauß <knauss@netzguerilla.net>
parents: 140
diff changeset
   152
        if route:
11e0fdc1a58c fill extendProvider with life
Sandro Knauß <knauss@netzguerilla.net>
parents: 140
diff changeset
   153
            filters.append(Offer.route==route)
11e0fdc1a58c fill extendProvider with life
Sandro Knauß <knauss@netzguerilla.net>
parents: 140
diff changeset
   154
11e0fdc1a58c fill extendProvider with life
Sandro Knauß <knauss@netzguerilla.net>
parents: 140
diff changeset
   155
        return object_session(self).query(Userright.offer_name).join(Offer,User).filter(and_(*filters)).scalar()
11e0fdc1a58c fill extendProvider with life
Sandro Knauß <knauss@netzguerilla.net>
parents: 140
diff changeset
   156
125
19b3f383c9ce getting job status form db
Sandro Knauß <knauss@netzguerilla.net>
parents: 122
diff changeset
   157
    def job(self, id):
136
ca926774e16c now using job.id - integer autoincrement
Sandro Knauß <knauss@netzguerilla.net>
parents: 135
diff changeset
   158
        job = object_session(self).query(Job).join(User).filter(and_(User.name == self.name, Job.id==id)).first()
125
19b3f383c9ce getting job status form db
Sandro Knauß <knauss@netzguerilla.net>
parents: 122
diff changeset
   159
        if job is None:
19b3f383c9ce getting job status form db
Sandro Knauß <knauss@netzguerilla.net>
parents: 122
diff changeset
   160
            raise JobNotFound()
19b3f383c9ce getting job status form db
Sandro Knauß <knauss@netzguerilla.net>
parents: 122
diff changeset
   161
        return job