diff options
-rw-r--r-- | server/src/leap/soledad/server/_resource.py (renamed from server/src/leap/soledad/server/resource.py) | 14 | ||||
-rw-r--r-- | server/src/leap/soledad/server/_wsgi.py (renamed from server/src/leap/soledad/server/application.py) | 12 | ||||
-rw-r--r-- | server/src/leap/soledad/server/auth.py | 5 | ||||
-rw-r--r-- | server/src/leap/soledad/server/entrypoint.py | 39 | ||||
-rw-r--r-- | testing/tests/conftest.py | 2 | ||||
-rw-r--r-- | testing/tests/server/test_auth.py | 2 |
6 files changed, 55 insertions, 19 deletions
diff --git a/server/src/leap/soledad/server/resource.py b/server/src/leap/soledad/server/_resource.py index 67e9ae32..89e252d6 100644 --- a/server/src/leap/soledad/server/resource.py +++ b/server/src/leap/soledad/server/_resource.py @@ -18,23 +18,13 @@ A twisted resource that serves the Soledad Server. """ from twisted.web.resource import Resource -from twisted.web.wsgi import WSGIResource -from twisted.internet import reactor -from twisted.python import threadpool -from leap.soledad.server.application import wsgi_application +from ._wsgi import sync_resource __all__ = ['SoledadResource'] -# setup a wsgi resource with its own threadpool -pool = threadpool.ThreadPool() -reactor.callWhenRunning(pool.start) -reactor.addSystemEventTrigger('after', 'shutdown', pool.stop) -wsgi_resource = WSGIResource(reactor, pool, wsgi_application) - - class SoledadResource(Resource): """ This is a dummy twisted resource, used only to allow different entry points @@ -42,7 +32,7 @@ class SoledadResource(Resource): """ def __init__(self): - self.children = {'': wsgi_resource} + self.children = {'': sync_resource} def getChild(self, path, request): # for now, just "rewind" the path and serve the wsgi resource for all diff --git a/server/src/leap/soledad/server/application.py b/server/src/leap/soledad/server/_wsgi.py index 8fd343b3..13c8d13b 100644 --- a/server/src/leap/soledad/server/application.py +++ b/server/src/leap/soledad/server/_wsgi.py @@ -22,6 +22,8 @@ Use it like this: twistd web --wsgi=leap.soledad.server.application.wsgi_application """ from twisted.internet import reactor +from twisted.python import threadpool +from twisted.web.wsgi import WSGIResource from leap.soledad.server import SoledadApp from leap.soledad.server.gzip_middleware import GzipMiddleware @@ -31,7 +33,7 @@ from leap.soledad.common.couch.state import CouchServerState from leap.soledad.common.log import getLogger -__all__ = ['wsgi_application'] +__all__ = ['init_couch_state', 'sync_resource'] _config = None @@ -65,7 +67,7 @@ wsgi_application = GzipMiddleware(_app) # work. Because of that, we delay couch state initialization until the reactor # is running. -def _init_couch_state(_app): +def init_couch_state(_app): try: _app.state = _get_couch_state() except Exception as e: @@ -74,4 +76,8 @@ def _init_couch_state(_app): reactor.stop() -reactor.callWhenRunning(_init_couch_state, _app) +# setup a wsgi resource with its own threadpool +pool = threadpool.ThreadPool() +reactor.callWhenRunning(pool.start) +reactor.addSystemEventTrigger('after', 'shutdown', pool.stop) +sync_resource = WSGIResource(reactor, pool, wsgi_application) diff --git a/server/src/leap/soledad/server/auth.py b/server/src/leap/soledad/server/auth.py index 1f078bff..e616a94f 100644 --- a/server/src/leap/soledad/server/auth.py +++ b/server/src/leap/soledad/server/auth.py @@ -34,8 +34,9 @@ from twisted.web.iweb import ICredentialFactory from twisted.web.resource import IResource from leap.soledad.common.couch import couch_server -from leap.soledad.server.resource import SoledadResource -from leap.soledad.server.application import get_config + +from ._resource import SoledadResource +from ._wsgi import get_config @implementer(IRealm) diff --git a/server/src/leap/soledad/server/entrypoint.py b/server/src/leap/soledad/server/entrypoint.py new file mode 100644 index 00000000..df2b8934 --- /dev/null +++ b/server/src/leap/soledad/server/entrypoint.py @@ -0,0 +1,39 @@ +# -*- coding: utf-8 -*- +# entrypoint.py +# Copyright (C) 2016 LEAP +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +""" +The entrypoint for Soledad server. +""" +from twisted.internet import reactor + +from .config import load_configuration +from ._resource import SoledadResource +from ._wsgi import init_couch_state + + +# load configuration from file +conf = load_configuration('/etc/soledad/soledad-server.conf') + + +class SoledadEntrypoint(SoledadResource): + + def __init__(self): + SoledadResource.__init__(self, conf) + + +# see the comments in application.py recarding why couch state has to be +# initialized when the reactor is running +reactor.callWhenRunning(init_couch_state, conf['soledad-server']) diff --git a/testing/tests/conftest.py b/testing/tests/conftest.py index 1ff1cbb7..decfb0a9 100644 --- a/testing/tests/conftest.py +++ b/testing/tests/conftest.py @@ -103,7 +103,7 @@ class SoledadServer(object): '--logfile=%s' % self._logfile, '--pidfile=%s' % self._pidfile, 'web', - '--wsgi=leap.soledad.server.application.wsgi_application', + '--class=leap.soledad.server.entrypoint.SoledadEntrypoint', '--port=2424' ]) diff --git a/testing/tests/server/test_auth.py b/testing/tests/server/test_auth.py index 5b215650..8ef35177 100644 --- a/testing/tests/server/test_auth.py +++ b/testing/tests/server/test_auth.py @@ -31,7 +31,7 @@ from twisted.web.test import test_httpauth from leap.soledad.server.auth import SoledadRealm from leap.soledad.server.auth import TokenChecker from leap.soledad.server.auth import TokenCredentialFactory -from leap.soledad.server.resource import SoledadResource +from leap.soledad.server._resource import SoledadResource class SoledadRealmTestCase(unittest.TestCase): |