iro/model/pool.py
author Sandro Knauß <knauss@netzguerilla.net>
Mon, 05 Mar 2012 23:52:29 +0100
branchdevel
changeset 218 91f87ad13540
parent 151 ff8448fb07e7
child 258 0a5eb5aac0be
permissions -rw-r--r--
integration tests for smtp
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:
351a02310dd8 model restructuring
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
     4
    def __init__(self):
132
80a334e2aae7 moving pool to controller
Sandro Knauß <knauss@netzguerilla.net>
parents: 117
diff changeset
     5
        self.pool =  None
117
351a02310dd8 model restructuring
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
     6
351a02310dd8 model restructuring
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
     7
data = Data()
351a02310dd8 model restructuring
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
     8
#a valid dbDefer decorator
351a02310dd8 model restructuring
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
     9
132
80a334e2aae7 moving pool to controller
Sandro Knauß <knauss@netzguerilla.net>
parents: 117
diff changeset
    10
def setPool(pool): 
80a334e2aae7 moving pool to controller
Sandro Knauß <knauss@netzguerilla.net>
parents: 117
diff changeset
    11
    data.pool = pool
117
351a02310dd8 model restructuring
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    12
351a02310dd8 model restructuring
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    13
@decorator
351a02310dd8 model restructuring
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    14
def runInDBPool(f,*args,**kwargs):
351a02310dd8 model restructuring
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    15
    """Decorator to run DB queries in Twisted's thread pool"""
151
ff8448fb07e7 runInDBThread and dbdefer can now handle if a valid session is an arg
Sandro Knauß <knauss@netzguerilla.net>
parents: 132
diff changeset
    16
    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
    17
        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
    18
    else:
ff8448fb07e7 runInDBThread and dbdefer can now handle if a valid session is an arg
Sandro Knauß <knauss@netzguerilla.net>
parents: 132
diff changeset
    19
        return data.pool.run(f, *args, **kwargs)
117
351a02310dd8 model restructuring
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    20
351a02310dd8 model restructuring
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    21