iro/model/pool.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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
117
351a02310dd8 model restructuring
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
     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
351a02310dd8 model restructuring
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
     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
351a02310dd8 model restructuring
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
     5
    def __init__(self):
132
80a334e2aae7 moving pool to controller
Sandro Knauß <knauss@netzguerilla.net>
parents: 117
diff changeset
     6
        self.pool =  None
117
351a02310dd8 model restructuring
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
     7
351a02310dd8 model restructuring
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
     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
351a02310dd8 model restructuring
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    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
351a02310dd8 model restructuring
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    14
351a02310dd8 model restructuring
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    15
@decorator
351a02310dd8 model restructuring
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    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
351a02310dd8 model restructuring
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    25
351a02310dd8 model restructuring
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    26