| author | Sandro Knauß <knauss@netzguerilla.net> |
| Thu, 29 Mar 2012 17:21:46 +0200 | |
| branch | devel |
| changeset 259 | 5d9c24c2cb8d |
| parent 258 | 0a5eb5aac0be |
| child 263 | 52284710c0b4 |
| permissions | -rw-r--r-- |
| 92 | 1 |
# -*- coding: utf-8 -*- |
2 |
||
3 |
from sqlalchemy import Column, Integer, String, Sequence, Boolean, DateTime, Numeric, Enum |
|
4 |
from sqlalchemy.ext.declarative import declarative_base |
|
5 |
||
6 |
#relationship |
|
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 | 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 | 17 |
Base = declarative_base() |
18 |
||
19 |
class Userright(Base): |
|
|
258
0a5eb5aac0be
iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents:
219
diff
changeset
|
20 |
"""Allowed offers for one user. Default routes are sorted by **default** value.""" |
| 92 | 21 |
__tablename__ = 'userright' |
|
94
4349f10d77a6
updatating schema for mysql
Sandro Knauß <knauss@netzguerilla.net>
parents:
92
diff
changeset
|
22 |
user_name = Column('user', String(100), ForeignKey('apiuser.name'), primary_key=True) |
|
258
0a5eb5aac0be
iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents:
219
diff
changeset
|
23 |
"""username""" |
|
94
4349f10d77a6
updatating schema for mysql
Sandro Knauß <knauss@netzguerilla.net>
parents:
92
diff
changeset
|
24 |
offer_name = Column('offer', String(100), ForeignKey('offer.name'), primary_key=True) |
|
258
0a5eb5aac0be
iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents:
219
diff
changeset
|
25 |
"""offername""" |
|
201
843a7bcecbc8
renameing Userright.isDefault(bool) -> default(int)
Sandro Knauß <knauss@netzguerilla.net>
parents:
176
diff
changeset
|
26 |
default = Column(Integer) |
|
258
0a5eb5aac0be
iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents:
219
diff
changeset
|
27 |
"""sorting defaults routes with this value""" |
| 92 | 28 |
offer = relationship("Offer") |
|
258
0a5eb5aac0be
iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents:
219
diff
changeset
|
29 |
"""connected :class:`Offer` object""" |
|
127
79966b937274
made bill (aka statistic) function ready
Sandro Knauß <knauss@netzguerilla.net>
parents:
125
diff
changeset
|
30 |
user = relationship("User") |
|
258
0a5eb5aac0be
iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents:
219
diff
changeset
|
31 |
"""connected :class:`User` object""" |
| 92 | 32 |
|
|
201
843a7bcecbc8
renameing Userright.isDefault(bool) -> default(int)
Sandro Knauß <knauss@netzguerilla.net>
parents:
176
diff
changeset
|
33 |
def __init__(self, offer, default=None): |
|
258
0a5eb5aac0be
iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents:
219
diff
changeset
|
34 |
"""Constructor of Userright class. |
|
0a5eb5aac0be
iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents:
219
diff
changeset
|
35 |
|
|
0a5eb5aac0be
iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents:
219
diff
changeset
|
36 |
:param `Offer` offer: a offer object |
|
0a5eb5aac0be
iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents:
219
diff
changeset
|
37 |
:param integer default: default value |
|
0a5eb5aac0be
iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents:
219
diff
changeset
|
38 |
""" |
|
0a5eb5aac0be
iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents:
219
diff
changeset
|
39 |
|
| 117 | 40 |
self.offer = offer |
|
201
843a7bcecbc8
renameing Userright.isDefault(bool) -> default(int)
Sandro Knauß <knauss@netzguerilla.net>
parents:
176
diff
changeset
|
41 |
self.default = default |
| 117 | 42 |
|
|
127
79966b937274
made bill (aka statistic) function ready
Sandro Knauß <knauss@netzguerilla.net>
parents:
125
diff
changeset
|
43 |
@property |
|
79966b937274
made bill (aka statistic) function ready
Sandro Knauß <knauss@netzguerilla.net>
parents:
125
diff
changeset
|
44 |
def bill(self): |
|
258
0a5eb5aac0be
iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents:
219
diff
changeset
|
45 |
"""returns a list of unbilled messages grouped by Job.info""" |
|
127
79966b937274
made bill (aka statistic) function ready
Sandro Knauß <knauss@netzguerilla.net>
parents:
125
diff
changeset
|
46 |
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
|
47 |
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
|
48 |
Job.info.label('info'), # info tag |
|
79966b937274
made bill (aka statistic) function ready
Sandro Knauß <knauss@netzguerilla.net>
parents:
125
diff
changeset
|
49 |
] |
|
79966b937274
made bill (aka statistic) function ready
Sandro Knauß <knauss@netzguerilla.net>
parents:
125
diff
changeset
|
50 |
|
|
79966b937274
made bill (aka statistic) function ready
Sandro Knauß <knauss@netzguerilla.net>
parents:
125
diff
changeset
|
51 |
filters = [ Message.isBilled==False, # only unbilled messages |
|
79966b937274
made bill (aka statistic) function ready
Sandro Knauß <knauss@netzguerilla.net>
parents:
125
diff
changeset
|
52 |
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
|
53 |
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
|
54 |
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
|
55 |
] |
|
79966b937274
made bill (aka statistic) function ready
Sandro Knauß <knauss@netzguerilla.net>
parents:
125
diff
changeset
|
56 |
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
|
57 |
|
| 92 | 58 |
class Offer(Base): |
|
258
0a5eb5aac0be
iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents:
219
diff
changeset
|
59 |
"""All possible Offers over a Message can be sended. **provider**, **typ** and **route** are used to get the data form configuration file.""" |
| 92 | 60 |
__tablename__ = "offer" |
|
94
4349f10d77a6
updatating schema for mysql
Sandro Knauß <knauss@netzguerilla.net>
parents:
92
diff
changeset
|
61 |
name = Column(String(100), primary_key=True) |
|
258
0a5eb5aac0be
iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents:
219
diff
changeset
|
62 |
"""name of the offer""" |
|
94
4349f10d77a6
updatating schema for mysql
Sandro Knauß <knauss@netzguerilla.net>
parents:
92
diff
changeset
|
63 |
provider = Column(String(100)) |
|
258
0a5eb5aac0be
iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents:
219
diff
changeset
|
64 |
"""provider name""" |
|
94
4349f10d77a6
updatating schema for mysql
Sandro Knauß <knauss@netzguerilla.net>
parents:
92
diff
changeset
|
65 |
route = Column(String(100)) |
|
258
0a5eb5aac0be
iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents:
219
diff
changeset
|
66 |
"""route of the provider""" |
|
94
4349f10d77a6
updatating schema for mysql
Sandro Knauß <knauss@netzguerilla.net>
parents:
92
diff
changeset
|
67 |
typ = Column(String(100)) |
|
258
0a5eb5aac0be
iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents:
219
diff
changeset
|
68 |
"""typ of message""" |
|
0a5eb5aac0be
iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents:
219
diff
changeset
|
69 |
|
|
0a5eb5aac0be
iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents:
219
diff
changeset
|
70 |
def __init__(self, **kwargs): |
|
0a5eb5aac0be
iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents:
219
diff
changeset
|
71 |
Base.__init__(self,**kwargs) |
|
122
b55754aa4f96
nun typs query into session object
Sandro Knauß <knauss@netzguerilla.net>
parents:
121
diff
changeset
|
72 |
|
|
176
71f1108758ef
more logic to schema.
Sandro Knauß <knauss@netzguerilla.net>
parents:
153
diff
changeset
|
73 |
@classmethod |
|
71f1108758ef
more logic to schema.
Sandro Knauß <knauss@netzguerilla.net>
parents:
153
diff
changeset
|
74 |
def get(cls, session, provider, route, typ): |
|
258
0a5eb5aac0be
iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents:
219
diff
changeset
|
75 |
"""returns a Offer object.""" |
|
176
71f1108758ef
more logic to schema.
Sandro Knauß <knauss@netzguerilla.net>
parents:
153
diff
changeset
|
76 |
return session.query(cls).filter(and_(cls.provider==provider, cls.route==route, cls.typ==typ)).first() |
| 92 | 77 |
|
|
205
02ae72e8bab9
implementing vRoutes
Sandro Knauß <knauss@netzguerilla.net>
parents:
203
diff
changeset
|
78 |
@classmethod |
|
02ae72e8bab9
implementing vRoutes
Sandro Knauß <knauss@netzguerilla.net>
parents:
203
diff
changeset
|
79 |
def routes(cls, session, typ): |
|
258
0a5eb5aac0be
iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents:
219
diff
changeset
|
80 |
"""returns a query object of all possible offers. |
|
0a5eb5aac0be
iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents:
219
diff
changeset
|
81 |
|
|
0a5eb5aac0be
iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents:
219
diff
changeset
|
82 |
:param string typ: get all offers that support this typ |
|
0a5eb5aac0be
iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents:
219
diff
changeset
|
83 |
""" |
|
205
02ae72e8bab9
implementing vRoutes
Sandro Knauß <knauss@netzguerilla.net>
parents:
203
diff
changeset
|
84 |
return session.query(cls).filter_by(typ=typ) |
|
02ae72e8bab9
implementing vRoutes
Sandro Knauß <knauss@netzguerilla.net>
parents:
203
diff
changeset
|
85 |
|
|
208
5da0f00ef872
session.typs -> Offer.typs
Sandro Knauß <knauss@netzguerilla.net>
parents:
205
diff
changeset
|
86 |
@classmethod |
|
5da0f00ef872
session.typs -> Offer.typs
Sandro Knauß <knauss@netzguerilla.net>
parents:
205
diff
changeset
|
87 |
def typs(cls, session): |
|
258
0a5eb5aac0be
iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents:
219
diff
changeset
|
88 |
"""returns a list of all possible types. |
|
0a5eb5aac0be
iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents:
219
diff
changeset
|
89 |
""" |
|
208
5da0f00ef872
session.typs -> Offer.typs
Sandro Knauß <knauss@netzguerilla.net>
parents:
205
diff
changeset
|
90 |
return session.query(cls.typ).distinct() |
|
205
02ae72e8bab9
implementing vRoutes
Sandro Knauß <knauss@netzguerilla.net>
parents:
203
diff
changeset
|
91 |
|
|
211
3fc1f400c107
adding Offer.provider
Sandro Knauß <knauss@netzguerilla.net>
parents:
208
diff
changeset
|
92 |
@classmethod |
|
3fc1f400c107
adding Offer.provider
Sandro Knauß <knauss@netzguerilla.net>
parents:
208
diff
changeset
|
93 |
def providers(cls, session, typ): |
|
258
0a5eb5aac0be
iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents:
219
diff
changeset
|
94 |
"""returns a list of all possible providers. |
|
0a5eb5aac0be
iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents:
219
diff
changeset
|
95 |
|
|
0a5eb5aac0be
iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents:
219
diff
changeset
|
96 |
:param string typ: get all providers that support this typ |
|
0a5eb5aac0be
iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents:
219
diff
changeset
|
97 |
""" |
|
211
3fc1f400c107
adding Offer.provider
Sandro Knauß <knauss@netzguerilla.net>
parents:
208
diff
changeset
|
98 |
return session.query(cls.provider).filter_by(typ=typ).distinct() |
|
3fc1f400c107
adding Offer.provider
Sandro Knauß <knauss@netzguerilla.net>
parents:
208
diff
changeset
|
99 |
|
| 92 | 100 |
class Message(Base): |
|
258
0a5eb5aac0be
iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents:
219
diff
changeset
|
101 |
"""A message that has created costs. |
|
0a5eb5aac0be
iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents:
219
diff
changeset
|
102 |
|
|
0a5eb5aac0be
iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents:
219
diff
changeset
|
103 |
**isBilled** is False since the bill is paid. |
|
0a5eb5aac0be
iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents:
219
diff
changeset
|
104 |
""" |
| 92 | 105 |
__tablename__ = "message" |
106 |
id = Column(Integer, Sequence('message_id_seq'), primary_key=True) |
|
|
258
0a5eb5aac0be
iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents:
219
diff
changeset
|
107 |
"""primary key of the message""" |
|
0a5eb5aac0be
iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents:
219
diff
changeset
|
108 |
|
|
94
4349f10d77a6
updatating schema for mysql
Sandro Knauß <knauss@netzguerilla.net>
parents:
92
diff
changeset
|
109 |
recipient = Column(String(100)) |
|
258
0a5eb5aac0be
iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents:
219
diff
changeset
|
110 |
"""string representation of the recipient""" |
|
0a5eb5aac0be
iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents:
219
diff
changeset
|
111 |
|
| 92 | 112 |
isBilled = Column(Boolean) |
|
258
0a5eb5aac0be
iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents:
219
diff
changeset
|
113 |
"""is bill paid?""" |
|
0a5eb5aac0be
iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents:
219
diff
changeset
|
114 |
|
| 92 | 115 |
date = Column(DateTime) |
|
258
0a5eb5aac0be
iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents:
219
diff
changeset
|
116 |
"""date of sending the message""" |
|
0a5eb5aac0be
iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents:
219
diff
changeset
|
117 |
|
|
127
79966b937274
made bill (aka statistic) function ready
Sandro Knauß <knauss@netzguerilla.net>
parents:
125
diff
changeset
|
118 |
price = Column(Numeric(8,4)) |
|
258
0a5eb5aac0be
iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents:
219
diff
changeset
|
119 |
"""price of sending the message""" |
|
0a5eb5aac0be
iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents:
219
diff
changeset
|
120 |
|
|
215
5bacdb7e94d1
smstrade.StatusCode update
Sandro Knauß <knauss@netzguerilla.net>
parents:
211
diff
changeset
|
121 |
count = Column(Integer) |
|
258
0a5eb5aac0be
iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents:
219
diff
changeset
|
122 |
"""Count of sended messages""" |
|
215
5bacdb7e94d1
smstrade.StatusCode update
Sandro Knauß <knauss@netzguerilla.net>
parents:
211
diff
changeset
|
123 |
exID = Column(String(100)) |
|
258
0a5eb5aac0be
iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents:
219
diff
changeset
|
124 |
"""external API id """ |
|
0a5eb5aac0be
iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents:
219
diff
changeset
|
125 |
|
|
136
ca926774e16c
now using job.id - integer autoincrement
Sandro Knauß <knauss@netzguerilla.net>
parents:
135
diff
changeset
|
126 |
job_id = Column("job", String(40), ForeignKey('job.id')) |
|
258
0a5eb5aac0be
iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents:
219
diff
changeset
|
127 |
"""id of the connected job""" |
| 92 | 128 |
job = relationship("Job", backref=backref('messages')) |
|
258
0a5eb5aac0be
iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents:
219
diff
changeset
|
129 |
"""connected :class:`Job` object""" |
|
0a5eb5aac0be
iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents:
219
diff
changeset
|
130 |
|
|
94
4349f10d77a6
updatating schema for mysql
Sandro Knauß <knauss@netzguerilla.net>
parents:
92
diff
changeset
|
131 |
offer_id = Column("offer",String(100), ForeignKey('offer.name')) |
|
258
0a5eb5aac0be
iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents:
219
diff
changeset
|
132 |
"""sended message over this offer woth ithe offer.name""" |
|
0a5eb5aac0be
iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents:
219
diff
changeset
|
133 |
|
| 92 | 134 |
offer = relationship("Offer", backref=backref('messages')) |
|
258
0a5eb5aac0be
iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents:
219
diff
changeset
|
135 |
"""connected :class:`Offer` object""" |
|
0a5eb5aac0be
iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents:
219
diff
changeset
|
136 |
|
|
0a5eb5aac0be
iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents:
219
diff
changeset
|
137 |
def __init__(self, **kwargs): |
|
0a5eb5aac0be
iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents:
219
diff
changeset
|
138 |
Base.__init__(self,**kwargs) |
| 92 | 139 |
|
140 |
||
141 |
class Job(Base): |
|
|
258
0a5eb5aac0be
iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents:
219
diff
changeset
|
142 |
"""A complete Job. |
|
0a5eb5aac0be
iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents:
219
diff
changeset
|
143 |
|
|
0a5eb5aac0be
iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents:
219
diff
changeset
|
144 |
- **status** show the status of the job (``init``, ``started``, ``sending``, ``sended`` or ``error``). |
|
0a5eb5aac0be
iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents:
219
diff
changeset
|
145 |
- **info** is used to make it possible to create diffrent billing groups for user. |
|
0a5eb5aac0be
iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents:
219
diff
changeset
|
146 |
""" |
| 92 | 147 |
__tablename__ = "job" |
|
136
ca926774e16c
now using job.id - integer autoincrement
Sandro Knauß <knauss@netzguerilla.net>
parents:
135
diff
changeset
|
148 |
id = Column(Integer, Sequence('job_id_seq'), primary_key=True) |
|
258
0a5eb5aac0be
iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents:
219
diff
changeset
|
149 |
"""job id""" |
|
94
4349f10d77a6
updatating schema for mysql
Sandro Knauß <knauss@netzguerilla.net>
parents:
92
diff
changeset
|
150 |
info = Column(String(100)) |
|
258
0a5eb5aac0be
iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents:
219
diff
changeset
|
151 |
"""job info, for billing porpuse""" |
| 92 | 152 |
status = Column(Enum("init","started","sending","sended","error")) |
|
258
0a5eb5aac0be
iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents:
219
diff
changeset
|
153 |
"""status of a job""" |
|
94
4349f10d77a6
updatating schema for mysql
Sandro Knauß <knauss@netzguerilla.net>
parents:
92
diff
changeset
|
154 |
user_id = Column("user", String(100), ForeignKey('apiuser.name')) |
|
258
0a5eb5aac0be
iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents:
219
diff
changeset
|
155 |
"""connected user id""" |
|
0a5eb5aac0be
iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents:
219
diff
changeset
|
156 |
|
| 92 | 157 |
user = relationship("User", backref=backref('jobs')) |
|
258
0a5eb5aac0be
iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents:
219
diff
changeset
|
158 |
"""connected :class:`User` object""" |
|
0a5eb5aac0be
iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents:
219
diff
changeset
|
159 |
|
|
0a5eb5aac0be
iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents:
219
diff
changeset
|
160 |
def __init__(self, **kwargs): |
|
0a5eb5aac0be
iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents:
219
diff
changeset
|
161 |
""" |
|
0a5eb5aac0be
iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents:
219
diff
changeset
|
162 |
.. automethod:: __repr__ |
|
0a5eb5aac0be
iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents:
219
diff
changeset
|
163 |
""" |
|
0a5eb5aac0be
iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents:
219
diff
changeset
|
164 |
Base.__init__(self,**kwargs) |
| 92 | 165 |
|
|
140
75d0eaaa871d
start fixing job mangement
Sandro Knauß <knauss@netzguerilla.net>
parents:
136
diff
changeset
|
166 |
@property |
|
75d0eaaa871d
start fixing job mangement
Sandro Knauß <knauss@netzguerilla.net>
parents:
136
diff
changeset
|
167 |
def extend(self): |
|
258
0a5eb5aac0be
iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents:
219
diff
changeset
|
168 |
"""returns the connected :class:`iro.model.job.ExJob`""" |
|
140
75d0eaaa871d
start fixing job mangement
Sandro Knauß <knauss@netzguerilla.net>
parents:
136
diff
changeset
|
169 |
return job.exJobs[self.id] |
|
75d0eaaa871d
start fixing job mangement
Sandro Knauß <knauss@netzguerilla.net>
parents:
136
diff
changeset
|
170 |
|
|
75d0eaaa871d
start fixing job mangement
Sandro Knauß <knauss@netzguerilla.net>
parents:
136
diff
changeset
|
171 |
|
| 135 | 172 |
def __repr__(self): |
|
258
0a5eb5aac0be
iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents:
219
diff
changeset
|
173 |
"""string representation of the Job class. |
|
0a5eb5aac0be
iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents:
219
diff
changeset
|
174 |
|
|
0a5eb5aac0be
iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents:
219
diff
changeset
|
175 |
:return: ``<Job('id' ,'info', 'status', 'user_id')>`` |
|
0a5eb5aac0be
iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents:
219
diff
changeset
|
176 |
""" |
|
153
0e50d10c8b6c
handle detached objects
Sandro Knauß <knauss@netzguerilla.net>
parents:
150
diff
changeset
|
177 |
try: |
|
258
0a5eb5aac0be
iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents:
219
diff
changeset
|
178 |
return "<Job('%s' ,'%s', '%s', '%s')>"%(self.id,self.info, self.status, self.user_id) |
|
153
0e50d10c8b6c
handle detached objects
Sandro Knauß <knauss@netzguerilla.net>
parents:
150
diff
changeset
|
179 |
except DetachedInstanceError: |
|
0e50d10c8b6c
handle detached objects
Sandro Knauß <knauss@netzguerilla.net>
parents:
150
diff
changeset
|
180 |
return Base.__repr__(self) |
| 135 | 181 |
|
|
176
71f1108758ef
more logic to schema.
Sandro Knauß <knauss@netzguerilla.net>
parents:
153
diff
changeset
|
182 |
@classmethod |
|
71f1108758ef
more logic to schema.
Sandro Knauß <knauss@netzguerilla.net>
parents:
153
diff
changeset
|
183 |
def get(cls, session, id): |
|
258
0a5eb5aac0be
iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents:
219
diff
changeset
|
184 |
"""returns a job object from a given id""" |
|
176
71f1108758ef
more logic to schema.
Sandro Knauß <knauss@netzguerilla.net>
parents:
153
diff
changeset
|
185 |
return session.query(cls).filter_by(id=id).first() |
|
71f1108758ef
more logic to schema.
Sandro Knauß <knauss@netzguerilla.net>
parents:
153
diff
changeset
|
186 |
|
| 92 | 187 |
class User(Base): |
|
258
0a5eb5aac0be
iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents:
219
diff
changeset
|
188 |
"""One user in iro""" |
| 92 | 189 |
__tablename__ = "apiuser" |
|
258
0a5eb5aac0be
iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents:
219
diff
changeset
|
190 |
|
|
94
4349f10d77a6
updatating schema for mysql
Sandro Knauß <knauss@netzguerilla.net>
parents:
92
diff
changeset
|
191 |
name = Column(String(100), primary_key=True) |
|
258
0a5eb5aac0be
iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents:
219
diff
changeset
|
192 |
"""Username""" |
|
0a5eb5aac0be
iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents:
219
diff
changeset
|
193 |
|
| 92 | 194 |
ng_kunde = Column(Integer) |
|
258
0a5eb5aac0be
iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents:
219
diff
changeset
|
195 |
"""Connection to the netzguerilla userdatabase""" |
|
0a5eb5aac0be
iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents:
219
diff
changeset
|
196 |
|
|
94
4349f10d77a6
updatating schema for mysql
Sandro Knauß <knauss@netzguerilla.net>
parents:
92
diff
changeset
|
197 |
apikey = Column(String(50),unique=True) |
|
258
0a5eb5aac0be
iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents:
219
diff
changeset
|
198 |
"""apikey only [0-9a-f]""" |
|
0a5eb5aac0be
iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents:
219
diff
changeset
|
199 |
|
| 92 | 200 |
rights = relationship('Userright') |
|
258
0a5eb5aac0be
iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents:
219
diff
changeset
|
201 |
"""all allowed offers to send with.""" |
|
0a5eb5aac0be
iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents:
219
diff
changeset
|
202 |
|
| 92 | 203 |
def __init__(self, name, apikey): |
|
258
0a5eb5aac0be
iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents:
219
diff
changeset
|
204 |
"""Constructor of User class. |
|
0a5eb5aac0be
iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents:
219
diff
changeset
|
205 |
|
|
0a5eb5aac0be
iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents:
219
diff
changeset
|
206 |
:param string name: username |
|
0a5eb5aac0be
iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents:
219
diff
changeset
|
207 |
:param string apikey: apikey for the user |
|
0a5eb5aac0be
iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents:
219
diff
changeset
|
208 |
|
|
0a5eb5aac0be
iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents:
219
diff
changeset
|
209 |
.. automethod:: __repr__ |
|
0a5eb5aac0be
iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents:
219
diff
changeset
|
210 |
""" |
| 92 | 211 |
self.name=name |
212 |
self.apikey=apikey |
|
213 |
||
214 |
def __repr__(self): |
|
|
258
0a5eb5aac0be
iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents:
219
diff
changeset
|
215 |
"""string representation of the user class. |
|
0a5eb5aac0be
iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents:
219
diff
changeset
|
216 |
|
|
0a5eb5aac0be
iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents:
219
diff
changeset
|
217 |
:return: ``<User('name', 'apikey')>`` |
|
0a5eb5aac0be
iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents:
219
diff
changeset
|
218 |
""" |
|
153
0e50d10c8b6c
handle detached objects
Sandro Knauß <knauss@netzguerilla.net>
parents:
150
diff
changeset
|
219 |
try: |
|
0e50d10c8b6c
handle detached objects
Sandro Knauß <knauss@netzguerilla.net>
parents:
150
diff
changeset
|
220 |
return "<User('%s','%s')>"%(self.name,self.apikey) |
|
0e50d10c8b6c
handle detached objects
Sandro Knauß <knauss@netzguerilla.net>
parents:
150
diff
changeset
|
221 |
except DetachedInstanceError: |
|
0e50d10c8b6c
handle detached objects
Sandro Knauß <knauss@netzguerilla.net>
parents:
150
diff
changeset
|
222 |
return Base.__repr__(self) |
|
121
ca63b6776231
putting routes logic to schema
Sandro Knauß <knauss@netzguerilla.net>
parents:
117
diff
changeset
|
223 |
|
|
201
843a7bcecbc8
renameing Userright.isDefault(bool) -> default(int)
Sandro Knauß <knauss@netzguerilla.net>
parents:
176
diff
changeset
|
224 |
def routes(self, typ, default = False): |
|
258
0a5eb5aac0be
iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents:
219
diff
changeset
|
225 |
"""returns a query object to get all possible routes for a given typ |
|
0a5eb5aac0be
iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents:
219
diff
changeset
|
226 |
|
|
0a5eb5aac0be
iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents:
219
diff
changeset
|
227 |
:param string typ: the typ |
|
0a5eb5aac0be
iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents:
219
diff
changeset
|
228 |
:param boolean default: use only default routes |
|
0a5eb5aac0be
iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents:
219
diff
changeset
|
229 |
""" |
|
121
ca63b6776231
putting routes logic to schema
Sandro Knauß <knauss@netzguerilla.net>
parents:
117
diff
changeset
|
230 |
filters=[User.name == self.name, |
|
ca63b6776231
putting routes logic to schema
Sandro Knauß <knauss@netzguerilla.net>
parents:
117
diff
changeset
|
231 |
Offer.typ == typ, |
|
ca63b6776231
putting routes logic to schema
Sandro Knauß <knauss@netzguerilla.net>
parents:
117
diff
changeset
|
232 |
] |
|
201
843a7bcecbc8
renameing Userright.isDefault(bool) -> default(int)
Sandro Knauß <knauss@netzguerilla.net>
parents:
176
diff
changeset
|
233 |
if default: |
|
843a7bcecbc8
renameing Userright.isDefault(bool) -> default(int)
Sandro Knauß <knauss@netzguerilla.net>
parents:
176
diff
changeset
|
234 |
filters.append(Userright.default != None) |
|
203
b543ab9a9724
tests for Userright.default added
Sandro Knauß <knauss@netzguerilla.net>
parents:
201
diff
changeset
|
235 |
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
|
236 |
|
|
201
843a7bcecbc8
renameing Userright.isDefault(bool) -> default(int)
Sandro Knauß <knauss@netzguerilla.net>
parents:
176
diff
changeset
|
237 |
def providers(self, typ, default = False): |
|
258
0a5eb5aac0be
iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents:
219
diff
changeset
|
238 |
"""return a query object for all possible providers for a given typ |
|
0a5eb5aac0be
iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents:
219
diff
changeset
|
239 |
|
|
0a5eb5aac0be
iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents:
219
diff
changeset
|
240 |
:param string typ: the typ |
|
0a5eb5aac0be
iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents:
219
diff
changeset
|
241 |
:param boolean default: use only default routes |
|
0a5eb5aac0be
iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents:
219
diff
changeset
|
242 |
""" |
|
148
11e0fdc1a58c
fill extendProvider with life
Sandro Knauß <knauss@netzguerilla.net>
parents:
140
diff
changeset
|
243 |
filters=[User.name == self.name, |
|
11e0fdc1a58c
fill extendProvider with life
Sandro Knauß <knauss@netzguerilla.net>
parents:
140
diff
changeset
|
244 |
Offer.typ == typ, |
|
11e0fdc1a58c
fill extendProvider with life
Sandro Knauß <knauss@netzguerilla.net>
parents:
140
diff
changeset
|
245 |
] |
|
201
843a7bcecbc8
renameing Userright.isDefault(bool) -> default(int)
Sandro Knauß <knauss@netzguerilla.net>
parents:
176
diff
changeset
|
246 |
if default: |
|
843a7bcecbc8
renameing Userright.isDefault(bool) -> default(int)
Sandro Knauß <knauss@netzguerilla.net>
parents:
176
diff
changeset
|
247 |
filters.append(Userright.default != None) |
|
148
11e0fdc1a58c
fill extendProvider with life
Sandro Knauß <knauss@netzguerilla.net>
parents:
140
diff
changeset
|
248 |
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
|
249 |
|
|
11e0fdc1a58c
fill extendProvider with life
Sandro Knauß <knauss@netzguerilla.net>
parents:
140
diff
changeset
|
250 |
def has_right(self, typ, offer_name = None, provider = None, route = None): |
|
258
0a5eb5aac0be
iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents:
219
diff
changeset
|
251 |
"""if a user has the right to use a offer, provider e. al. (arguments are and connected). |
|
0a5eb5aac0be
iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents:
219
diff
changeset
|
252 |
|
|
0a5eb5aac0be
iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents:
219
diff
changeset
|
253 |
:param string typ: the typ |
|
0a5eb5aac0be
iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents:
219
diff
changeset
|
254 |
:param string offer_name: offer name |
|
0a5eb5aac0be
iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents:
219
diff
changeset
|
255 |
:param string provider: provider name |
|
0a5eb5aac0be
iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents:
219
diff
changeset
|
256 |
:param string route: a route name |
|
0a5eb5aac0be
iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents:
219
diff
changeset
|
257 |
:return: offer_name or None (not allwoed) |
|
0a5eb5aac0be
iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents:
219
diff
changeset
|
258 |
:raises: :class:`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
|
259 |
filters=[User.name == self.name, |
|
11e0fdc1a58c
fill extendProvider with life
Sandro Knauß <knauss@netzguerilla.net>
parents:
140
diff
changeset
|
260 |
Offer.typ == typ, |
|
11e0fdc1a58c
fill extendProvider with life
Sandro Knauß <knauss@netzguerilla.net>
parents:
140
diff
changeset
|
261 |
] |
|
11e0fdc1a58c
fill extendProvider with life
Sandro Knauß <knauss@netzguerilla.net>
parents:
140
diff
changeset
|
262 |
if offer_name: |
|
11e0fdc1a58c
fill extendProvider with life
Sandro Knauß <knauss@netzguerilla.net>
parents:
140
diff
changeset
|
263 |
filters.append(Userright.offer_name==offer_name) |
|
11e0fdc1a58c
fill extendProvider with life
Sandro Knauß <knauss@netzguerilla.net>
parents:
140
diff
changeset
|
264 |
if provider: |
|
11e0fdc1a58c
fill extendProvider with life
Sandro Knauß <knauss@netzguerilla.net>
parents:
140
diff
changeset
|
265 |
filters.append(Offer.provider==provider) |
|
11e0fdc1a58c
fill extendProvider with life
Sandro Knauß <knauss@netzguerilla.net>
parents:
140
diff
changeset
|
266 |
if route: |
|
11e0fdc1a58c
fill extendProvider with life
Sandro Knauß <knauss@netzguerilla.net>
parents:
140
diff
changeset
|
267 |
filters.append(Offer.route==route) |
|
11e0fdc1a58c
fill extendProvider with life
Sandro Knauß <knauss@netzguerilla.net>
parents:
140
diff
changeset
|
268 |
|
|
11e0fdc1a58c
fill extendProvider with life
Sandro Knauß <knauss@netzguerilla.net>
parents:
140
diff
changeset
|
269 |
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
|
270 |
|
|
125
19b3f383c9ce
getting job status form db
Sandro Knauß <knauss@netzguerilla.net>
parents:
122
diff
changeset
|
271 |
def job(self, id): |
|
258
0a5eb5aac0be
iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents:
219
diff
changeset
|
272 |
"""returns a job object. |
|
0a5eb5aac0be
iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents:
219
diff
changeset
|
273 |
|
|
0a5eb5aac0be
iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents:
219
diff
changeset
|
274 |
:param integer id: id of a Job |
|
0a5eb5aac0be
iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents:
219
diff
changeset
|
275 |
:return: :class:`Job` |
|
0a5eb5aac0be
iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents:
219
diff
changeset
|
276 |
:raises: :exc:`iro.error.JobNotFound` |
|
0a5eb5aac0be
iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents:
219
diff
changeset
|
277 |
""" |
|
136
ca926774e16c
now using job.id - integer autoincrement
Sandro Knauß <knauss@netzguerilla.net>
parents:
135
diff
changeset
|
278 |
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
|
279 |
if job is None: |
|
19b3f383c9ce
getting job status form db
Sandro Knauß <knauss@netzguerilla.net>
parents:
122
diff
changeset
|
280 |
raise JobNotFound() |
|
19b3f383c9ce
getting job status form db
Sandro Knauß <knauss@netzguerilla.net>
parents:
122
diff
changeset
|
281 |
return job |