--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/iro/main.py Thu Jan 26 01:21:32 2012 +0100
@@ -0,0 +1,29 @@
+from twisted.web import resource, server
+from twisted.internet import reactor
+
+from sqlalchemy import create_engine, pool
+
+import logging
+
+from .model.user import setEngine
+from .model.utils import POOL_SIZE as DB_POOL_SIZE, startPool
+from .view import xmlrpc
+
+def runReactor(reactor, engine, root):
+ setEngine(engine)
+ startPool(reactor)
+
+ reactor.listenTCP(7080, server.Site(root))
+ logging.info("Server is running now...")
+ reactor.run()
+
+
+if __name__ == '__main__':
+ engine = create_engine('mysql://test:test@localhost/test',
+ poolclass = pool.SingletonThreadPool, pool_size=DB_POOL_SIZE, )
+
+
+ root = resource.Resource()
+ root = xmlrpc.appendResource(root)
+
+ runReactor(reactor, engine, root)
--- a/iro/model/utils.py Thu Jan 26 01:20:03 2012 +0100
+++ b/iro/model/utils.py Thu Jan 26 01:21:32 2012 +0100
@@ -1,19 +1,26 @@
from sqlalchemy.orm import sessionmaker
-from twisted.internet import reactor
from twisted.internet import threads
from twisted.python.threadpool import ThreadPool
POOL_SIZE=5 #how many threads should the db connector pool should have
-dbpool = ThreadPool(minthreads=1, maxthreads=POOL_SIZE, name='database')
-dbpool.start()
-reactor.addSystemEventTrigger('before', 'shutdown', dbpool.stop)
+class Data:
+ def __init__(self):
+ self.pool = ThreadPool(minthreads=1, maxthreads=POOL_SIZE, name='database')
+ self.reactor = None
+
+d = Data()
+
+def startPool(reactor):
+ d.pool.start()
+ d.reactor = reactor
+ d.reactor.addSystemEventTrigger('before', 'shutdown', d.pool.stop)
def run_in_db_thread(f):
"""Decorator to run DB queries in Twisted's thread pool"""
def wrapper(*args, **kwargs):
- return threads.deferToThreadPool(reactor, dbpool,f, *args, **kwargs)
+ return threads.deferToThreadPool(d.reactor, d.pool, f, *args, **kwargs)
return wrapper
--- a/iro/view/xmlrpc.py Thu Jan 26 01:20:03 2012 +0100
+++ b/iro/view/xmlrpc.py Thu Jan 26 01:21:32 2012 +0100
@@ -10,21 +10,15 @@
#You should have received a copy of the GNU General Public License
#along with this program; if not, see <http://www.gnu.org/licenses/>.
-from twisted.web import soap, xmlrpc, resource, server
-from twisted.internet import reactor
-
-import logging
-
+from twisted.web import soap, xmlrpc
from ..controller.viewinterface import Interface
from ..error import InterfaceException, ValidateException
class TwistedInterface(Interface):
-
def __init__(self):
Interface.__init__(self)
-
def listMethods(self):
"""Since we override lookupProcedure, its suggested to override
@@ -85,15 +79,16 @@
else:
return None
-def getResource():
- root = resource.Resource()
+def appendResource(root):
root.putChild('RPC2', XMLRPCInterface())
root.putChild('SOAP', SOAPInterface())
return root
-def main():
- reactor.listenTCP(7080, server.Site(getResource()))
+if __name__ == '__main__':
+ from twisted.web import resource, server
+ from twisted.internet import reactor
+
+ root = resource.Resource()
+ root = appendResource(root)
+ reactor.listenTCP(7080, server.Site(root))
reactor.run()
-
-if __name__ == '__main__':
- main()