summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDuda Dornelles <ddornell@thoughtworks.com>2014-10-15 16:03:17 +0200
committerDuda Dornelles <ddornell@thoughtworks.com>2014-10-15 16:20:55 +0200
commit6ac2e7a4c23ef2798ca5b4ad0aa84a5fb7b371f8 (patch)
tree3c6e4a3e0ee846cac650d8db76f1697c8fbbee68
parent87628d040390defc2ae303c77f6811f07d7c15ce (diff)
moving things out of user_agent. now it is called runserver and only does basic app setup and delegates to other "classes".
-rw-r--r--service/pixelated/bitmask_libraries/register.py18
-rw-r--r--service/pixelated/config/app_factory.py (renamed from service/pixelated/user_agent.py)75
-rw-r--r--service/pixelated/config/args.py31
-rw-r--r--service/pixelated/config/reactor_manager.py (renamed from service/pixelated/reactor_manager.py)0
-rw-r--r--service/pixelated/controllers/__init__.py1
-rw-r--r--service/pixelated/runserver.py49
-rw-r--r--service/setup.py4
-rw-r--r--service/test/functional/features/environment.py6
-rw-r--r--service/test/support/integration_helper.py10
-rw-r--r--service/test/unit/user_agent_test.py2
10 files changed, 121 insertions, 75 deletions
diff --git a/service/pixelated/bitmask_libraries/register.py b/service/pixelated/bitmask_libraries/register.py
new file mode 100644
index 00000000..79c9069a
--- /dev/null
+++ b/service/pixelated/bitmask_libraries/register.py
@@ -0,0 +1,18 @@
+import getpass
+
+import os
+import os.path
+import pixelated.bitmask_libraries.session as LeapSession
+from pixelated.bitmask_libraries.config import LeapConfig
+from pixelated.bitmask_libraries.provider import LeapProvider
+from pixelated.bitmask_libraries.auth import LeapAuthenticator, LeapCredentials
+
+
+def register_new_user(username, server_name):
+ certs_home = os.path.abspath(os.path.join(os.path.abspath(__file__), "..", "certificates"))
+ config = LeapConfig(certs_home=certs_home)
+ provider = LeapProvider(server_name, config)
+ password = getpass.getpass('Please enter password for %s: ' % username)
+ LeapAuthenticator(provider).register(LeapCredentials(username, password))
+ session = LeapSession.open(username, password, server_name)
+ session.nicknym.generate_openpgp_key()
diff --git a/service/pixelated/user_agent.py b/service/pixelated/config/app_factory.py
index d8c3d4a6..f4aa06d7 100644
--- a/service/pixelated/user_agent.py
+++ b/service/pixelated/config/app_factory.py
@@ -13,48 +13,17 @@
#
# You should have received a copy of the GNU Affero General Public License
# along with Pixelated. If not, see <http://www.gnu.org/licenses/>.
-import argparse
-import getpass
-import os
-import os.path
-import crochet
-from flask import Flask
-from pixelated.adapter.pixelated_mail_sender import PixelatedMailSender
-from pixelated.adapter.pixelated_mailboxes import PixelatedMailBoxes
-import pixelated.reactor_manager as reactor_manager
-import pixelated.bitmask_libraries.session as LeapSession
-from pixelated.bitmask_libraries.config import LeapConfig
-from pixelated.bitmask_libraries.provider import LeapProvider
-from pixelated.bitmask_libraries.auth import LeapAuthenticator, LeapCredentials
from pixelated.adapter.mail_service import MailService
from pixelated.adapter.mail import InputMail
from pixelated.adapter.soledad_querier import SoledadQuerier
from pixelated.adapter.search import SearchEngine
from pixelated.adapter.draft_service import DraftService
from pixelated.adapter.listener import MailboxListener
+import pixelated.bitmask_libraries.session as LeapSession
from pixelated.controllers import *
from pixelated.adapter.tag_service import TagService
-
-
-static_folder = os.path.abspath(os.path.join(os.path.abspath(__file__), "..", "..", "web-ui", "app"))
-# this is a workaround for packaging
-if not os.path.exists(static_folder):
- static_folder = os.path.abspath(os.path.join(os.path.abspath(__file__), "..", "..", "..", "web-ui", "app"))
-if not os.path.exists(static_folder):
- static_folder = os.path.join('/', 'usr', 'share', 'pixelated-user-agent')
-
-app = Flask(__name__, static_url_path='', static_folder=static_folder)
-
-
-def register_new_user(username, server_name):
- certs_home = os.path.abspath(os.path.join(os.path.abspath(__file__), "..", "certificates"))
- config = LeapConfig(certs_home=certs_home)
- provider = LeapProvider(server_name, config)
- password = getpass.getpass('Please enter password for %s: ' % username)
- LeapAuthenticator(provider).register(LeapCredentials(username, password))
- session = LeapSession.open(username, password, server_name)
- session.nicknym.generate_openpgp_key()
+import os
def _setup_routes(app, home_controller, mails_controller, tags_controller, features_controller):
@@ -77,7 +46,7 @@ def _setup_routes(app, home_controller, mails_controller, tags_controller, featu
app.add_url_rule('/features', methods=['GET'], view_func=features_controller.features)
-def start_user_agent(debug_enabled, app):
+def create_app(debug_enabled, app):
with app.app_context():
leap_session = LeapSession.open(app.config['LEAP_USERNAME'], app.config['LEAP_PASSWORD'],
@@ -107,33 +76,11 @@ def start_user_agent(debug_enabled, app):
port=app.config['PORT'], use_reloader=False)
-def setup():
- try:
- default_config_path = os.path.join(os.environ['HOME'], '.pixelated')
-
- parser = argparse.ArgumentParser(description='Pixelated user agent.')
- parser.add_argument('--debug', action='store_true',
- help='DEBUG mode.')
- parser.add_argument('--register', metavar='username', help='register user with name.')
- parser.add_argument('-c', '--config', metavar='configfile', default=default_config_path,
- help='use specified config file. Default is ~/.pixelated.')
-
- args = parser.parse_args()
- debug_enabled = args.debug or os.environ.get('DEBUG', False)
- reactor_manager.start_reactor(logging=debug_enabled)
-
- crochet.setup()
-
- app.config.from_pyfile(args.config)
-
- if args.register:
- server_name = app.config['LEAP_SERVER_NAME']
- register_new_user(args.register, server_name)
- else:
- start_user_agent(debug_enabled, app)
- finally:
- reactor_manager.stop_reactor_on_exit()
-
-
-if __name__ == '__main__':
- setup()
+def get_static_folder():
+ static_folder = os.path.abspath(os.path.join(os.path.abspath(__file__), "..", "..", "..", "web-ui", "app"))
+ # this is a workaround for packaging
+ if not os.path.exists(static_folder):
+ static_folder = os.path.abspath(os.path.join(os.path.abspath(__file__), "..", "..", "..", "..", "web-ui", "app"))
+ if not os.path.exists(static_folder):
+ static_folder = os.path.join('/', 'usr', 'share', 'pixelated-user-agent')
+ return static_folder
diff --git a/service/pixelated/config/args.py b/service/pixelated/config/args.py
new file mode 100644
index 00000000..0e830e0a
--- /dev/null
+++ b/service/pixelated/config/args.py
@@ -0,0 +1,31 @@
+#
+# 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/>.
+
+import argparse
+
+import os
+
+
+def parse():
+ default_config_path = os.path.join(os.environ['HOME'], '.pixelated')
+ parser = argparse.ArgumentParser(description='Pixelated user agent.')
+ parser.add_argument('--debug', action='store_true',
+ help='DEBUG mode.')
+ parser.add_argument('--register', metavar='username', help='register user with name.')
+ parser.add_argument('-c', '--config', metavar='configfile', default=default_config_path,
+ help='use specified config file. Default is ~/.pixelated.')
+ args = parser.parse_args()
+ return args
diff --git a/service/pixelated/reactor_manager.py b/service/pixelated/config/reactor_manager.py
index c9473400..c9473400 100644
--- a/service/pixelated/reactor_manager.py
+++ b/service/pixelated/config/reactor_manager.py
diff --git a/service/pixelated/controllers/__init__.py b/service/pixelated/controllers/__init__.py
index 66502b83..969e8e6f 100644
--- a/service/pixelated/controllers/__init__.py
+++ b/service/pixelated/controllers/__init__.py
@@ -29,4 +29,3 @@ from home_controller import HomeController
from mails_controller import MailsController
from tags_controller import TagsController
from features_controller import FeaturesController
-
diff --git a/service/pixelated/runserver.py b/service/pixelated/runserver.py
new file mode 100644
index 00000000..840d6621
--- /dev/null
+++ b/service/pixelated/runserver.py
@@ -0,0 +1,49 @@
+#
+# 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/>.
+
+import os
+import os.path
+import crochet
+from flask import Flask
+from pixelated.config import app_factory
+import pixelated.config.args as input_args
+import pixelated.bitmask_libraries.register as leap_register
+import pixelated.config.reactor_manager as reactor_manager
+
+
+app = Flask(__name__, static_url_path='', static_folder=app_factory.get_static_folder())
+
+
+def setup():
+ try:
+ args = input_args.parse()
+ debug_enabled = args.debug or os.environ.get('DEBUG', False)
+ reactor_manager.start_reactor(logging=debug_enabled)
+ crochet.setup()
+
+ app.config.from_pyfile(args.config)
+
+ if args.register:
+ server_name = app.config['LEAP_SERVER_NAME']
+ leap_register.register_new_user(args.register, server_name)
+ else:
+ app_factory.create_app(debug_enabled, app)
+ finally:
+ reactor_manager.stop_reactor_on_exit()
+
+
+if __name__ == '__main__':
+ setup()
diff --git a/service/setup.py b/service/setup.py
index eff0f3b6..fd3f5f72 100644
--- a/service/setup.py
+++ b/service/setup.py
@@ -66,7 +66,7 @@ setup(name='pixelated-user-agent',
author='Thoughtworks',
author_email='pixelated-team@thoughtworks.com',
url='http://pixelated-project.github.io',
- packages=['pixelated', 'pixelated.adapter', 'pixelated.bitmask_libraries', 'pixelated.config', 'pixelated.certificates', 'pixelated.support'],
+ packages=['pixelated', 'pixelated.adapter', 'pixelated.bitmask_libraries', 'pixelated.config', 'pixelated.certificates', 'pixelated.support', 'pixelated.controllers'],
test_suite='nose.collector',
install_requires=[
'Twisted',
@@ -86,7 +86,7 @@ setup(name='pixelated-user-agent',
],
entry_points={
'console_scripts': [
- 'pixelated-user-agent = pixelated.user_agent:setup'
+ 'pixelated-user-agent = pixelated.runserver:setup'
]
},
data_files=data_files(),
diff --git a/service/test/functional/features/environment.py b/service/test/functional/features/environment.py
index f65b11a6..86f43d7f 100644
--- a/service/test/functional/features/environment.py
+++ b/service/test/functional/features/environment.py
@@ -18,7 +18,7 @@ import multiprocessing
from selenium import webdriver
from test.support.integration_helper import SoledadTestBase
-import pixelated.user_agent
+import pixelated.runserver
def before_all(context):
@@ -26,10 +26,10 @@ def before_all(context):
context.soledad_test_base.setup_soledad()
context.mailboxes = context.soledad_test_base.pixelated_mailboxes
- context.app = pixelated.user_agent.app
+ context.app = pixelated.runserver.app
context.app.mail_service = context.soledad_test_base.mail_service
- worker = lambda app, port: pixelated.user_agent.app.run(port=4567, use_reloader=False)
+ worker = lambda app, port: pixelated.runserver.app.run(port=4567, use_reloader=False)
context._process = multiprocessing.Process(target=worker, args=(context.app, 4567))
context._process.start()
diff --git a/service/test/support/integration_helper.py b/service/test/support/integration_helper.py
index 0d5d1125..8f2b8192 100644
--- a/service/test/support/integration_helper.py
+++ b/service/test/support/integration_helper.py
@@ -23,11 +23,13 @@ from pixelated.adapter.mail_service import MailService
from pixelated.adapter.search import SearchEngine
from pixelated.adapter.tag_service import TagService
from pixelated.adapter.draft_service import DraftService
-import pixelated.user_agent
from pixelated.adapter.mail import PixelatedMail, InputMail
+import pixelated.runserver
from pixelated.adapter.pixelated_mailboxes import PixelatedMailBoxes
from pixelated.adapter.soledad_querier import SoledadQuerier
from pixelated.controllers import *
+import pixelated.config.app_factory as app_factory
+
soledad_test_folder = "soledad-test"
@@ -146,7 +148,7 @@ class SoledadTestBase:
SearchEngine.INDEX_FOLDER = soledad_test_folder + '/search_index'
- self.client = pixelated.user_agent.app.test_client()
+ self.client = pixelated.runserver.app.test_client()
self._reset_routes(self.client.application)
self.soledad_querier = SoledadQuerier(self.soledad)
@@ -168,8 +170,8 @@ class SoledadTestBase:
search_engine=self.search_engine)
tags_controller = TagsController(search_engine=self.search_engine)
- pixelated.user_agent._setup_routes(self.client.application, home_controller, mails_controller, tags_controller,
- features_controller)
+ app_factory._setup_routes(self.client.application, home_controller, mails_controller, tags_controller,
+ features_controller)
def get_mails_by_tag(self, tag):
response = json.loads(self.client.get("/mails?q=tag:" + tag).data)
diff --git a/service/test/unit/user_agent_test.py b/service/test/unit/user_agent_test.py
index 3572a387..bd875dcc 100644
--- a/service/test/unit/user_agent_test.py
+++ b/service/test/unit/user_agent_test.py
@@ -20,7 +20,7 @@ import sys
import pixelated.user_agent
from mockito import *
import crochet
-import pixelated.reactor_manager as reactor_manager
+import pixelated.config.reactor_manager as reactor_manager
import pixelated.adapter.pixelated_mail
import os