diff options
| author | yo mama <pepper@scannerjammer.com> | 2015-09-22 18:10:24 -0700 |
|---|---|---|
| committer | yo mama <pepper@scannerjammer.com> | 2015-09-22 18:10:24 -0700 |
| commit | 87f7b452be8e9e2a59f178236a510747739c4a37 (patch) | |
| tree | 896a0369d589d7d94532385f85cb81ab040cffaa /lib/Server/__init__.py | |
| parent | 3311bc27f52dc00b9226deb7e683754fa4c8316b (diff) | |
switched to flask
Diffstat (limited to 'lib/Server/__init__.py')
| -rw-r--r-- | lib/Server/__init__.py | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/lib/Server/__init__.py b/lib/Server/__init__.py new file mode 100644 index 0000000..c3688c2 --- /dev/null +++ b/lib/Server/__init__.py @@ -0,0 +1,50 @@ +from flask import Flask +from flask import abort, redirect, url_for +import sys, os +sys.path.append("./lib") +from Pb import * +from Server.InvalidUsage import InvalidUsage + +class Server(object): + def __init__(self): + self.app = Flask(__name__) + @self.app.route('/im/pb/<pb_classname>', methods=['POST']) + def pb(): + self._response_post(pb_classname, request) + + @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', + } + def _find_class_by_name(self, pb_classname): + pb_classname = self._classname_aliases.get(pb_classname, None) or pb_classname + try: + 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): + pb_class = self._find_class_by_name(pb_classname) + classnames = map(lambda c: c.__name__, Pb.__subclasses__()) + try: + im = pb_class(**(dict(request.forms))) + im.create(); + return im.file_json(); + #FIXME handle BadParamsError and PbError separately + except Exception as e: + sys.stderr.write("%s failure" % pb_class.__name__) + sys.stderr.write("params:\n") + for i in request.forms: + sys.stderr.write("{}:{}\n".format(i, request.forms[i])) + raise; + return json.dumps({ 'error' : 'Request could not be processed' }) + + def run(self): + self.app.run() + |
