| author | Sandro Knauß <knauss@netzguerilla.net> |
| Thu, 29 Mar 2012 17:21:46 +0200 | |
| branch | devel |
| changeset 259 | 5d9c24c2cb8d |
| parent 258 | 0a5eb5aac0be |
| child 294 | 0e75bd39767d |
| permissions | -rw-r--r-- |
| 117 | 1 |
from decorator import decorator |
|
151
ff8448fb07e7
runInDBThread and dbdefer can now handle if a valid session is an arg
Sandro Knauß <knauss@netzguerilla.net>
parents:
132
diff
changeset
|
2 |
import sqlalchemy |
| 117 | 3 |
class Data: |
|
258
0a5eb5aac0be
iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents:
151
diff
changeset
|
4 |
"""A very simple class to save the thread pool for database requests""" |
| 117 | 5 |
def __init__(self): |
|
132
80a334e2aae7
moving pool to controller
Sandro Knauß <knauss@netzguerilla.net>
parents:
117
diff
changeset
|
6 |
self.pool = None |
| 117 | 7 |
|
8 |
data = Data() |
|
|
258
0a5eb5aac0be
iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents:
151
diff
changeset
|
9 |
"""holds connection to the actual thread pool for the database requests""" |
| 117 | 10 |
|
|
132
80a334e2aae7
moving pool to controller
Sandro Knauß <knauss@netzguerilla.net>
parents:
117
diff
changeset
|
11 |
def setPool(pool): |
|
258
0a5eb5aac0be
iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents:
151
diff
changeset
|
12 |
"""setting the thread pool""" |
|
132
80a334e2aae7
moving pool to controller
Sandro Knauß <knauss@netzguerilla.net>
parents:
117
diff
changeset
|
13 |
data.pool = pool |
| 117 | 14 |
|
15 |
@decorator |
|
16 |
def runInDBPool(f,*args,**kwargs): |
|
|
258
0a5eb5aac0be
iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents:
151
diff
changeset
|
17 |
"""Decorator to run DB queries in Twisted's thread pool. |
|
0a5eb5aac0be
iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents:
151
diff
changeset
|
18 |
|
|
0a5eb5aac0be
iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents:
151
diff
changeset
|
19 |
If last argument is a session object, the function is called directly. |
|
0a5eb5aac0be
iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents:
151
diff
changeset
|
20 |
""" |
|
151
ff8448fb07e7
runInDBThread and dbdefer can now handle if a valid session is an arg
Sandro Knauß <knauss@netzguerilla.net>
parents:
132
diff
changeset
|
21 |
if isinstance(args[-1],sqlalchemy.orm.session.Session): |
|
ff8448fb07e7
runInDBThread and dbdefer can now handle if a valid session is an arg
Sandro Knauß <knauss@netzguerilla.net>
parents:
132
diff
changeset
|
22 |
return f(*args,**kwargs) |
|
ff8448fb07e7
runInDBThread and dbdefer can now handle if a valid session is an arg
Sandro Knauß <knauss@netzguerilla.net>
parents:
132
diff
changeset
|
23 |
else: |
|
ff8448fb07e7
runInDBThread and dbdefer can now handle if a valid session is an arg
Sandro Knauß <knauss@netzguerilla.net>
parents:
132
diff
changeset
|
24 |
return data.pool.run(f, *args, **kwargs) |
| 117 | 25 |
|
26 |