summaryrefslogtreecommitdiff
path: root/service/pixelated/config/__init__.py
diff options
context:
space:
mode:
Diffstat (limited to 'service/pixelated/config/__init__.py')
-rw-r--r--service/pixelated/config/__init__.py71
1 files changed, 71 insertions, 0 deletions
diff --git a/service/pixelated/config/__init__.py b/service/pixelated/config/__init__.py
index e69de29b..ce720c80 100644
--- a/service/pixelated/config/__init__.py
+++ b/service/pixelated/config/__init__.py
@@ -0,0 +1,71 @@
+#
+# Copyright (c) 2014 ThoughtWorks, Inc.
+#
+# Pixelated is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# Pixelated 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 Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with Pixelated. If not, see <http://www.gnu.org/licenses/>.
+
+from functools import partial
+import sys
+
+from pixelated.config.app import App
+from pixelated.config import app_factory
+from pixelated.config.args import parse as parse_args
+from pixelated.config.config_ua import config_user_agent
+from pixelated.config.dispatcher import config_dispatcher
+from pixelated.config.events_server import init_events_server
+from pixelated.config.loading_page import loading
+from pixelated.config.register import register
+from pixelated.config.debug import init_debugger
+from pixelated.config.leap_cert import init_leap_cert
+from pixelated.config.soledad import init_soledad_and_user_key
+from twisted.internet import reactor
+from twisted.internet.threads import deferToThread
+
+
+def initialize():
+ args = parse_args()
+ app = App()
+
+ init_debugger(args)
+ init_leap_cert(args)
+
+ if args.register:
+ register(*args.register[::-1])
+ sys.exit(0)
+
+ if args.dispatcher or args.dispatcher_stdin:
+ config_dispatcher(app, args)
+ else:
+ config_user_agent(app, args)
+
+ init_events_server()
+
+ def load_app():
+ # welcome to deferred hell. Or maybe you'll be welcomed later, who knows.
+ loading_app = loading(args)
+
+ def init_soledad():
+ return init_soledad_and_user_key(app)
+
+ def stop_loading_app(leap_session):
+ d = loading_app.stopListening()
+ d.addCallback(partial(start_user_agent_app, leap_session))
+
+ def start_user_agent_app(leap_session, _):
+ app_factory.create_app(app, args, leap_session)
+
+ d = deferToThread(init_soledad)
+ d.addCallback(stop_loading_app)
+
+ reactor.callWhenRunning(load_app)
+ reactor.run()