From abf2bbf6a85cd1fd9cfe3efe17a76e283ff42790 Mon Sep 17 00:00:00 2001 From: j Date: Sat, 9 Aug 2014 18:33:59 +0200 Subject: [PATCH] remove flask app --- oml/__main__.py | 3 +-- oml/app.py | 16 +++++++++++----- oml/downloads.py | 3 +-- oml/item/handlers.py | 11 ++++++----- oml/item/scan.py | 1 - oml/localnodes.py | 15 +++++++-------- oml/node/nodeapi.py | 14 +++++++------- oml/node/server.py | 34 +++++++++++++++++----------------- oml/nodes.py | 6 ++---- oml/oxtornado.py | 8 ++++---- oml/server.py | 27 +++++++++++++-------------- oml/tasks.py | 3 +-- 12 files changed, 70 insertions(+), 71 deletions(-) diff --git a/oml/__main__.py b/oml/__main__.py index c1a15c9..bfeb8ee 100644 --- a/oml/__main__.py +++ b/oml/__main__.py @@ -10,7 +10,6 @@ import app import server if len(sys.argv) > 1 and sys.argv[1] == 'server': - import server server.run() else: - app.manager.run() + app.run() diff --git a/oml/app.py b/oml/app.py index 0ceea7b..0dbfc86 100644 --- a/oml/app.py +++ b/oml/app.py @@ -2,17 +2,13 @@ # vi:si:et:sw=4:sts=4:ts=4 from __future__ import division -from flask import Flask -from flask.ext.script import Manager, Shell -from flask.ext.migrate import Migrate, MigrateCommand import logging - import settings +import db import changelog - import item.models import user.models import item.person @@ -21,6 +17,7 @@ import api import commands +''' app = Flask('openmedialibrary', static_folder=settings.static_path) @@ -42,3 +39,12 @@ manager.add_command('update_static', commands.UpdateStatic) def main(path=None): return app.send_static_file('html/oml.html') +''' +def run(): + import sys + command = sys.argv[1] if len(sys.argv) > 1 else None + if command and getattr(commands, "command_%s"%command): + getattr(commands, "command_%s"%command)(sys.argv[1:]) + else: + print 'usage: ... fixme' + sys.exit(1) diff --git a/oml/downloads.py b/oml/downloads.py index bc46250..ed22dbd 100644 --- a/oml/downloads.py +++ b/oml/downloads.py @@ -15,8 +15,7 @@ logger = logging.getLogger('oml.downloads') class Downloads(Thread): - def __init__(self, app): - self._app = app + def __init__(self): self._running = True Thread.__init__(self) self.daemon = True diff --git a/oml/item/handlers.py b/oml/item/handlers.py index 74d8240..6f67e39 100644 --- a/oml/item/handlers.py +++ b/oml/item/handlers.py @@ -10,16 +10,17 @@ from datetime import datetime import tornado.web from models import Item import settings +import db class OMLHandler(tornado.web.RequestHandler): - def initialize(self, app): - self._app = app + def initialize(self): + pass class EpubHandler(OMLHandler): def get(self, id, filename): - with self._app.app_context(): + with db.session(): item = Item.get(id) path = item.get_path() if not item or item.info['extension'] != 'epub' or not path: @@ -54,7 +55,7 @@ class FileHandler(OMLHandler): self.get(id, include_body=False) def get(self, id, include_body=True): - with self._app.app_context(): + with db.session(): item = Item.get(id) path = item.get_path() if item else None if not item or not path: @@ -70,7 +71,7 @@ class FileHandler(OMLHandler): class ReaderHandler(OMLHandler): def get(self, id): - with self._app.app_context(): + with db.session(): item = Item.get(id) if not item: self.set_status(404) diff --git a/oml/item/scan.py b/oml/item/scan.py index 1708cb3..69d9e56 100644 --- a/oml/item/scan.py +++ b/oml/item/scan.py @@ -9,7 +9,6 @@ import time import ox -from app import app import settings import db from item.models import File diff --git a/oml/localnodes.py b/oml/localnodes.py index 28be079..9e3be08 100644 --- a/oml/localnodes.py +++ b/oml/localnodes.py @@ -13,6 +13,8 @@ import time from utils import valid, get_public_ipv6, get_local_ipv4, get_interface from settings import preferences, server, USER_ID, sk import state +import db +import user.models logger = logging.getLogger('oml.localnodes') @@ -36,10 +38,9 @@ class LocalNodesBase(Thread): _PORT = 9851 _TTL = 1 - def __init__(self, app, nodes): + def __init__(self, nodes): self._active = True self._nodes = nodes - self._app = app Thread.__init__(self) if not server['localnode_discovery']: return @@ -113,8 +114,7 @@ class LocalNodesBase(Thread): logger.debug('NEW NODE %s', data) if can_connect(data): self._nodes[data['id']] = data - with self._app.app_context(): - import user.models + with db.session(): u = user.models.User.get_or_create(data['id']) u.info['username'] = data['username'] u.info['local'] = data @@ -196,13 +196,12 @@ class LocalNodes(object): _nodes4 = None _nodes6 = None - def __init__(self, app): + def __init__(self): self._nodes = {} - self._app = app if not server['localnode_discovery']: return - self._nodes4 = LocalNodes4(app, self._nodes) - self._nodes6 = LocalNodes6(app, self._nodes) + self._nodes4 = LocalNodes4(self._nodes) + self._nodes6 = LocalNodes6(self._nodes) def get(self, user_id): if user_id in self._nodes: diff --git a/oml/node/nodeapi.py b/oml/node/nodeapi.py index 6eba014..7312975 100644 --- a/oml/node/nodeapi.py +++ b/oml/node/nodeapi.py @@ -12,7 +12,7 @@ from websocket import trigger_event import logging logger = logging.getLogger('oml.node.nodeapi') -def api_pullChanges(app, remote_id, user_id=None, from_=None, to=None): +def api_pullChanges(remote_id, user_id=None, from_=None, to=None): if user_id and not from_ and not to: from_ = user_id user_id = None @@ -34,7 +34,7 @@ def api_pullChanges(app, remote_id, user_id=None, from_=None, to=None): state.nodes.queue('add', remote_id) return [c.json() for c in qs] -def api_pushChanges(app, user_id, changes): +def api_pushChanges(user_id, changes): user = User.get(user_id) if not Changelog.apply_changes(user, changes): logger.debug('FAILED TO APPLY CHANGE') @@ -42,7 +42,7 @@ def api_pushChanges(app, user_id, changes): return False return True -def api_requestPeering(app, user_id, username, message): +def api_requestPeering(user_id, username, message): user = User.get_or_create(user_id) if not user.info: user.info = {} @@ -61,7 +61,7 @@ def api_requestPeering(app, user_id, username, message): return True return False -def api_acceptPeering(app, user_id, username, message): +def api_acceptPeering(user_id, username, message): user = User.get(user_id) logger.debug('incoming acceptPeering event: pending: %s', user.pending) if user and user.peered: @@ -77,7 +77,7 @@ def api_acceptPeering(app, user_id, username, message): return True return False -def api_rejectPeering(app, user_id, message): +def api_rejectPeering(user_id, message): user = User.get(user_id) if user: if not user.info: @@ -88,7 +88,7 @@ def api_rejectPeering(app, user_id, message): return True return False -def api_removePeering(app, user_id, message): +def api_removePeering(user_id, message): user = User.get(user_id) if user: user.info['message'] = message @@ -97,7 +97,7 @@ def api_removePeering(app, user_id, message): return True return False -def api_cancelPeering(app, user_id, message): +def api_cancelPeering(user_id, message): user = User.get(user_id) if user: user.info['message'] = message diff --git a/oml/node/server.py b/oml/node/server.py index 40ce7e8..226c08a 100644 --- a/oml/node/server.py +++ b/oml/node/server.py @@ -26,9 +26,8 @@ logger = logging.getLogger('oml.node.server') class NodeHandler(tornado.web.RequestHandler): - def initialize(self, app): - self.app = app - + def initialize(self): + pass @tornado.web.asynchronous @tornado.gen.coroutine @@ -63,7 +62,7 @@ class NodeHandler(tornado.web.RequestHandler): 'ip': self.request.remote_addr } else: - content = yield tornado.gen.Task(api_call, self.app, action, key, args) + content = yield tornado.gen.Task(api_call, action, key, args) if content is None: content = {'status': 'not peered'} logger.debug('PEER %s IS UNKNOWN SEND 403', key) @@ -81,13 +80,13 @@ class NodeHandler(tornado.web.RequestHandler): self.write('Open Media Library') @run_async -def api_call(app, action, key, args, callback): +def api_call(action, key, args, callback): with db.session(): u = user.models.User.get(key) if action in ( 'requestPeering', 'acceptPeering', 'rejectPeering', 'removePeering' ) or (u and u.peered): - content = getattr(nodeapi, 'api_' + action)(app, key, *args) + content = getattr(nodeapi, 'api_' + action)(key, *args) else: if u and u.pending: logger.debug('ignore request from pending peer[%s] %s (%s)', key, action, args) @@ -98,12 +97,13 @@ def api_call(app, action, key, args, callback): class ShareHandler(tornado.web.RequestHandler): - def initialize(self, app): - self.app = app + def initialize(self): + pass def get(self, id): - with self.app.app_context(): - import item.models + import db + import item.models + with db.session(): i = item.models.Item.get(id) if not i: self.set_status(404) @@ -123,14 +123,14 @@ class ShareHandler(tornado.web.RequestHandler): break self.write(data) -def publish_node(app): +def publish_node(): update_online() if state.online: with db.session(): for u in user.models.User.query.filter_by(queued=True): logger.debug('adding queued node... %s', u.id) state.nodes.queue('add', u.id) - state.check_nodes = PeriodicCallback(lambda: check_nodes(app), 120000) + state.check_nodes = PeriodicCallback(check_nodes, 120000) state.check_nodes.start() state._online = PeriodicCallback(update_online, 60000) state._online.start() @@ -159,7 +159,7 @@ def update_online(): 'online': state.online }) -def check_nodes(app): +def check_nodes(): if state.online: with db.session(): for u in user.models.User.query.filter_by(queued=True): @@ -167,10 +167,10 @@ def check_nodes(app): logger.debug('queued peering message for %s trying to connect...', u.id) state.nodes.queue('add', u.id) -def start(app): +def start(): application = Application([ - (r"/get/(.*)", ShareHandler, dict(app=app)), - (r".*", NodeHandler, dict(app=app)), + (r"/get/(.*)", ShareHandler), + (r".*", NodeHandler), ], gzip=True) if not os.path.exists(settings.ssl_cert_path): settings.server['cert'] = cert.generate_ssl() @@ -180,5 +180,5 @@ def start(app): "keyfile": settings.ssl_key_path }) http_server.listen(settings.server['node_port'], settings.server['node_address']) - state.main.add_callback(publish_node, app) + state.main.add_callback(publish_node) return http_server diff --git a/oml/nodes.py b/oml/nodes.py index 446e69d..1260929 100644 --- a/oml/nodes.py +++ b/oml/nodes.py @@ -42,7 +42,6 @@ class Node(Thread): def __init__(self, nodes, user): self._nodes = nodes - self._app = nodes._app self.user_id = user.id key = str(user.id) self.vk = ed25519.VerifyingKey(key, encoding=ENCODING) @@ -358,11 +357,10 @@ class Nodes(Thread): _nodes = {} _local = None - def __init__(self, app): - self._app = app + def __init__(self): self._q = Queue() self._running = True - self._local = LocalNodes(app) + self._local = LocalNodes() Thread.__init__(self) self.daemon = True self.start() diff --git a/oml/oxtornado.py b/oml/oxtornado.py index d0c1f0e..c157eee 100644 --- a/oml/oxtornado.py +++ b/oml/oxtornado.py @@ -72,7 +72,7 @@ def trim(docstring): @run_async -def api_task(app, request, callback): +def api_task(request, callback): action = request.arguments.get('action', [None])[0] data = request.arguments.get('data', ['{}'])[0] data = json.loads(data) if data else {} @@ -98,8 +98,8 @@ def api_task(app, request, callback): callback(response) class ApiHandler(tornado.web.RequestHandler): - def initialize(self, app): - self._app = app + def initialize(self): + pass def get(self): self.write('use POST') @@ -113,7 +113,7 @@ class ApiHandler(tornado.web.RequestHandler): self.write('') return - response = yield tornado.gen.Task(api_task, self._app, self.request) + response = yield tornado.gen.Task(api_task, self.request) if not 'status' in response: response = json_response(response) response = json_dumps(response) diff --git a/oml/server.py b/oml/server.py index 7a62438..1b94879 100644 --- a/oml/server.py +++ b/oml/server.py @@ -8,7 +8,6 @@ from tornado.web import StaticFileHandler, Application from tornado.httpserver import HTTPServer from tornado.ioloop import IOLoop -from app import app import settings import websocket import logging @@ -49,14 +48,14 @@ def run(): handlers = [ (r'/(favicon.ico)', StaticFileHandler, {'path': static_path}), (r'/static/(.*)', StaticFileHandler, {'path': static_path}), - (r'/(.*)/epub/(.*)', EpubHandler, dict(app=app)), - (r'/(.*?)/reader/', ReaderHandler, dict(app=app)), - (r'/(.*?)/pdf/', FileHandler, dict(app=app)), - (r'/(.*?)/txt/', FileHandler, dict(app=app)), - (r'/(.*)/(cover|preview)(\d*).jpg', IconHandler, dict(app=app)), - (r'/api/', oxtornado.ApiHandler, dict(app=app)), + (r'/(.*)/epub/(.*)', EpubHandler), + (r'/(.*?)/reader/', ReaderHandler), + (r'/(.*?)/pdf/', FileHandler), + (r'/(.*?)/txt/', FileHandler), + (r'/(.*)/(cover|preview)(\d*).jpg', IconHandler), + (r'/api/', oxtornado.ApiHandler), (r'/ws', websocket.Handler), - (r"(.*)", MainHandler, dict(app=app)), + (r"(.*)", MainHandler), ] http_server = HTTPServer(Application(handlers, **options)) @@ -69,21 +68,21 @@ def run(): state.main = IOLoop.instance() state.cache = Cache(ttl=10) - state.tasks = tasks.Tasks(app) + state.tasks = tasks.Tasks() def start_node(): import user import downloads import nodes import db - state.node = node.server.start(app) - state.nodes = nodes.Nodes(app) - state.downloads = downloads.Downloads(app) - def add_users(app): + state.node = node.server.start() + state.nodes = nodes.Nodes() + state.downloads = downloads.Downloads() + def add_users(): with db.session(): for p in user.models.User.query.filter_by(peered=True): state.nodes.queue('add', p.id) - state.main.add_callback(add_users, app) + state.main.add_callback(add_users) state.main.add_callback(start_node) if ':' in settings.server['address']: host = '[%s]' % settings.server['address'] diff --git a/oml/tasks.py b/oml/tasks.py index 54a99f9..1aca1f2 100644 --- a/oml/tasks.py +++ b/oml/tasks.py @@ -13,10 +13,9 @@ logger = logging.getLogger('oml.websocket') class Tasks(Thread): - def __init__(self, app): + def __init__(self): self.q = Queue() self.connected = True - self._app = app Thread.__init__(self) self.daemon = True self.start()