diff options
| author | Pepper <pepper@scannerjammer.com> | 2015-09-27 00:03:42 -0400 |
|---|---|---|
| committer | Pepper <pepper@scannerjammer.com> | 2015-09-27 00:03:42 -0400 |
| commit | 30126dfc2877a82b8af02d68ca3b155068d551dd (patch) | |
| tree | a706d699cd1e1f50c2007e69d6ca9ba96819eaed /lib/server.py | |
| parent | ff31f2c4cf1792df351359f1749f63b3d0cce23b (diff) | |
done linting...just need to wrap up and publish
Diffstat (limited to 'lib/server.py')
| -rw-r--r-- | lib/server.py | 139 |
1 files changed, 67 insertions, 72 deletions
diff --git a/lib/server.py b/lib/server.py index 8506c7a..3a91632 100644 --- a/lib/server.py +++ b/lib/server.py @@ -1,5 +1,6 @@ +"""All webserver logic lives here, including routes""" from flask import Flask -from flask import abort, redirect, url_for, request, jsonify +from flask import request, jsonify import sys, os import cherrypy @@ -8,9 +9,9 @@ from paste.translogger import TransLogger sys.path.append("./lib") from pb import * from config import SERVER_HOST, SERVER_PORT -#http://flask.pocoo.org/docs/0.10/deploying/fastcgi/ this should be the one class InvalidUsage(Exception): + """error class for InvalidUsage""" status_code = 400 def __init__(self, message, status_code=None, payload=None): @@ -26,83 +27,77 @@ class InvalidUsage(Exception): return rv class Server(object): - def __init__(self): - self.app = Flask(__name__) - self._wsgi_server = None - @self.app.route('/test', methods=['GET']) - def test(): - return "HELLO WORLD!" - @self.app.route('/im/api/<pb_classname>', methods=['POST']) - def pb(pb_classname): - return self._response_post(pb_classname, request.form.to_dict()) + """Main server class""" + def __init__(self): + self.app = Flask(__name__) + self._wsgi_server = None + @self.app.route('/test', methods=['GET']) + def test(): + return "HELLO WORLD!" + @self.app.route('/im/api/<pb_classname>', methods=['POST']) + def pb(pb_classname): + return self._response_post(pb_classname, request.form.to_dict()) - @self.app.errorhandler(InvalidUsage) - def handle_invalid_usage(error): - response = jsonify(error.to_dict()) - response.status_code = error.status_code - return response + @self.app.errorhandler(InvalidUsage) + def handle_invalid_usage(error): + response = jsonify(error.to_dict()) + response.status_code = error.status_code + return response - self._classname_aliases = { - 'generate' : 'PbGenerate', - 'imgrid' : 'PbGrid', - 'imbreak' : 'PbBreaker', - 'impattern' : 'PbPattern', - 'imgradient' : 'PbGradient', - 'landscape' : 'PbLandscape', - } + self._classname_aliases = { + 'generate' : 'PbGenerate', + 'imgrid' : 'PbGrid', + 'imbreak' : 'PbBreaker', + 'impattern' : 'PbPattern', + 'imgradient' : 'PbGradient', + 'landscape' : 'PbLandscape', + } - def _find_class_by_name(self, pb_classname): - pb_classname = self._classname_aliases.get(pb_classname, None) or pb_classname - try: - return filter(lambda c: c.__name__ == pb_classname, Pb.__subclasses__())[0] - except IndexError: - raise InvalidUsage('No such api', status_code=410) + def _find_class_by_name(self, pb_classname): + pb_classname = self._classname_aliases.get(pb_classname, None) or pb_classname + try: + return filter(lambda c: c.__name__ == pb_classname, Pb.__subclasses__())[0] + except IndexError: + raise InvalidUsage('No such api', status_code=410) - def _response_post(self, pb_classname, request_form): - pb_class = self._find_class_by_name(pb_classname) - classnames = map(lambda c: c.__name__, Pb.__subclasses__()) - try: - pb = pb_class(**request_form) - pb.create(); - pb.file_s3move() - pb.db_send(); - return jsonify(pb.file_dict()); + def _response_post(self, pb_classname, request_form): + pb_class = self._find_class_by_name(pb_classname) + classnames = map(lambda c: c.__name__, Pb.__subclasses__()) + try: + pb = pb_class(**request_form) + pb.create() + pb.file_s3move() + pb.db_send() + return jsonify(pb.file_dict()) - #FIXME handle BadParamsError and PbError separately - except Exception as e: - sys.stderr.write("%s failure" % pb_class.__name__) - sys.stderr.write("params:\n") - sys.stderr.write(str(e)) - for i in request_form.keys(): - sys.stderr.write("{}:{}\n".format(i, request_form[i])) - raise; - return jsonify({ 'error' : 'Request could not be processed' }) + #FIXME handle BadParamsError and PbError separately + except Exception as e: + sys.stderr.write("%s failure" % pb_class.__name__) + sys.stderr.write("params:\n") + sys.stderr.write(str(e)) + for i in request_form.keys(): + sys.stderr.write("{}:{}\n".format(i, request_form[i])) + raise + return jsonify({'error' : 'Request could not be processed'}) - def run(self, host=SERVER_HOST, port=SERVER_PORT): - self.app.run(host=host, port=port) + def run(self, host=SERVER_HOST, port=SERVER_PORT): + self.app.run(host=host, port=port) + def run_wsgi(self, server_port=SERVER_PORT, host=SERVER_HOST): + #http://fgimian.github.io/blog/2012/12/08/setting-up-a-rock-solid-python-development-web-server/ + # Enable WSGI access logging via Paste + app_logged = TransLogger(self.app) -#http://fgimian.github.io/blog/2012/12/08/setting-up-a-rock-solid-python-development-web-server/ - def run_wsgi(self, server_port=SERVER_PORT, host=SERVER_HOST): - # Enable WSGI access logging via Paste - app_logged = TransLogger(self.app) + # Mount the WSGI callable object (app) on the root directory + cherrypy.tree.graft(app_logged, '/') - # Mount the WSGI callable object (app) on the root directory - cherrypy.tree.graft(app_logged, '/') + # Set the configuration of the web server + cherrypy.config.update({ + 'engine.autoreload_on': True, + 'log.screen': True, + 'server.socket_port': server_port, + 'server.socket_host': host + }) + cherrypy.engine.start() + cherrypy.engine.block() - # Set the configuration of the web server - cherrypy.config.update({ - 'engine.autoreload_on': True, - 'log.screen': True, - 'server.socket_port': server_port, - 'server.socket_host': host - }) - cherrypy.engine.start() - cherrypy.engine.block() - - - def stop(self): - if self._wsgi_server: - return - else: - return |
