diff options
| -rw-r--r-- | lib/Param/Bool/__init__.py | 3 | ||||
| -rw-r--r-- | lib/Param/String/__init__.py | 5 | ||||
| -rw-r--r-- | lib/Pb/__init__.py | 3 | ||||
| -rw-r--r-- | lib/Server/__init__.py | 33 | ||||
| -rw-r--r-- | tests/test_break.py | 29 |
5 files changed, 55 insertions, 18 deletions
diff --git a/lib/Param/Bool/__init__.py b/lib/Param/Bool/__init__.py index 8ccca00..7b779cb 100644 --- a/lib/Param/Bool/__init__.py +++ b/lib/Param/Bool/__init__.py @@ -1,5 +1,6 @@ from Param import Param import re +import sys class ParamBool(Param): def __init__(self, value, classname=""): super(ParamBool, self).__init__(classname=classname) @@ -8,7 +9,7 @@ class ParamBool(Param): else: self.value = False def _bool_correct(self, b): - if type(b) == str: + if type(b) == str or type(b) == unicode: if re.match(r'true', b, re.IGNORECASE): return True elif re.match(r'false', b, re.IGNORECASE): diff --git a/lib/Param/String/__init__.py b/lib/Param/String/__init__.py index df65c9d..8f08e49 100644 --- a/lib/Param/String/__init__.py +++ b/lib/Param/String/__init__.py @@ -1,6 +1,6 @@ from Param import Param import re - +import sys class ParamString(Param): def __init__(self, value, classname=""): super(ParamString, self).__init__(classname=classname) @@ -8,8 +8,7 @@ class ParamString(Param): try: self.value = self.sanitize(value) except Exception as e: - self.err_warn("Unable to sanitize: %s" % str(value)) - self.err_warn(str(e)) + self.err_warn("Unable to sanitize: %s\nreason:%s" % (str(value), str(e))) else: self.value = "" def sanitize (self, s): diff --git a/lib/Pb/__init__.py b/lib/Pb/__init__.py index 1b3c79e..bfb9d36 100644 --- a/lib/Pb/__init__.py +++ b/lib/Pb/__init__.py @@ -165,10 +165,9 @@ class Pb(object): 'oldfile' : None, 'newfile' : self.filename, 'dataobj' : json.dumps(dict(self._input_kwargs)), - 'cmd' : ";".join(self.commands), + 'cmd' : "; ".join(self.commands), 'tag' : self._tag, } - sys.stderr.write(str(_insert_data)) db.insert_cmd(**_insert_data) except Exception as e: self.err_warn("Problem sending to database:\n %s" % str(e)) diff --git a/lib/Server/__init__.py b/lib/Server/__init__.py index c3688c2..6e6d8a7 100644 --- a/lib/Server/__init__.py +++ b/lib/Server/__init__.py @@ -1,5 +1,5 @@ from flask import Flask -from flask import abort, redirect, url_for +from flask import abort, redirect, url_for, request, jsonify import sys, os sys.path.append("./lib") from Pb import * @@ -8,9 +8,9 @@ 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.route('/<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): @@ -21,29 +21,38 @@ class Server(object): self._classname_aliases = { 'generate' : 'PbGenerate', 'imgrid' : 'PbGrid', + 'imbreak' : 'PbBreak', + '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: - filter(lambda c: c.__name__ == pb_classname, Pb.__subclasses__())[0] + 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): + 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: - im = pb_class(**(dict(request.forms))) - im.create(); - return im.file_json(); + pb = pb_class(**request_form) + pb.create(); + pb.file_s3move() + pb.db_send(); + return pb.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])) + sys.stderr.write(str(e)) + for i in request_form.keys(): + sys.stderr.write("{}:{}\n".format(i, request_form[i])) raise; - return json.dumps({ 'error' : 'Request could not be processed' }) + return jsonify({ 'error' : 'Request could not be processed' }) def run(self): self.app.run() diff --git a/tests/test_break.py b/tests/test_break.py index e69de29..6f0c710 100644 --- a/tests/test_break.py +++ b/tests/test_break.py @@ -0,0 +1,29 @@ +#!/usr/bin/python2.7 +import requests, sys +import simplejson as json +URL_BASE = "http://127.0.0.1:5000" + +example_params = { + "url" : "http://i.asdf.us/im/de/HolyMountain2_1322275112_seamonkey.gif", + "breaktype" : "RGB_WASH", + "finalformat" : "png", + "breakmode" : "extreme", + "breakangle" : "10", + "username" : "donkey", + "expanded" : "false" +} + +def post_request(url, data): + r = requests.post(url, data=data) + if r.status_code != 200: + sys.stderr.write("ERROR: %s\n" % r.status_code) + sys.stderr.write("REASON: %s\n" % r.reason) + sys.exit(1) + return json.loads(r.text) + +def test(api_name, params): + return post_request("%s/%s" % (URL_BASE, api_name), params) + +if __name__ == "__main__": + print test("PbBreak", example_params) + |
