diff options
Diffstat (limited to 'pbserver_other.py')
| -rwxr-xr-x | pbserver_other.py | 227 |
1 files changed, 227 insertions, 0 deletions
diff --git a/pbserver_other.py b/pbserver_other.py new file mode 100755 index 0000000..30095d3 --- /dev/null +++ b/pbserver_other.py @@ -0,0 +1,227 @@ +#!/usr/bin/python2.7 +from bottle import route, run, post, request, static_file + +from pb.gradient import Gradient +from pb.imgrid import Imgrid +from pb.breaker import Breaker +from pb.pattern import Pattern +from pb.generate import Generate +from pb.imlandscape import Imlandscape + +from pb.config import AWS_SECRET_ACCESS_KEY, AWS_ACCESS_KEY_ID, BUCKET_NAME, BIN_IDENTIFY +import pb.lib.utils as utils + +import os +import sys +import pb.lib.db as db + +import sha +from subprocess import call, Popen, PIPE +import simplejson as json + +from boto.s3.connection import S3Connection +from boto.s3.key import Key +# +try: + DB = db.db () +except Exception as e: + sys.stderr.write("Could not connect to db:\n{}".format(e)) + sys.exit(1); +BASE_URL = "http://i.asdf.us" + +def hashdir(filename): + return sha.new(filename).hexdigest()[:2] + +def bin_identify (filepath): + ident = Popen([BIN_IDENTIFY, filepath], stdout=PIPE).communicate()[0] + partz = ident.split(" ") + width,height = partz[2].split("x") + return [ width, height ] + +def cleanup(filepath): + try: + call(['rm', filepath]) + except Exception as e: + sys.stderr.write(str(e)) + raise + +def s3move(filename,objectname): + try: + conn = S3Connection(AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, is_secure=False) + b = conn.get_bucket(BUCKET_NAME) + k = Key(b) + k.key = objectname + k.set_contents_from_filename(filename) + k.set_acl('public-read') + k.storage_class = 'REDUCED_REDUNDANCY' + except Exception as e: + sys.stderr.write(str(e)); + raise(e) + +def insert_cmd (date, remote_addr, username, url, directory, oldfile, newfile, cmd, dataobj, tag): + try: + sql = "INSERT INTO im_cmd " + sql += "(date, remote_addr, name, url, dir, oldfile, newfile, cmd, dataobj, tag) " + sql += "VALUES(%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)" + #or "NULL" + args = (date, remote_addr, username, url, directory, oldfile, newfile, cmd, dataobj, tag) + #args = (now(), os.environ['REMOTE_ADDR'], name, url, dir, oldfile, newfile, " ".join(cmd),dataobj) + DB.execute(sql, args) + except Exception as e: + sys.stderr.write(str(e)) + return + + +def format_im_data(im, insert_url="NULL"): + directory = hashdir(im.filename) + dimensions = bin_identify(im.filepath) + size = utils.file_size(im.filepath) + objectname = "im/{}/{}".format(directory, im.filename) + try: + s3move(im.filepath, objectname) + cleanup(im.filepath) + insert_cmd( + im.now, + request.environ.get('REMOTE_ADDR'), + im.params['username'] or "NULL", + insert_url, + directory, + "NULL", + im.filename, + ";".join(im.commands), + json.dumps(im.params), + im.tag, + ) + return json.dumps({ + 'url' : "{}/{}".format(BASE_URL, objectname), + 'size' : size, + 'width' : "{}px".format(dimensions[0]), + 'height' : "{}px".format(dimensions[1]), + }) + except Exception as e: + sys.stderr.write(str(e)) + raise; + + +def return_image(im, insert_url="NULL"): + return format_im_data(im, insert_url) + + +def return_jsonp(im, insert_url="NULL"): + return "{}({})".format(im.get("callback"), format_im_data(im, insert_url)) + + +@post('/im/api/imgradient') +def gradient(): + try: + im = Gradient(**(dict(request.forms))) + im.create(); + return return_image(im) + except Exception as e: + sys.stderr.write("imgradient failure\n") + 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' }) + +@post('/im/api/imgrid') +def imgrid(): + try: + im = Imgrid(**(dict(request.forms))) + im.create(); + url= "NULL" + for elem in [ im.params.imageinstead , im.params.bgimage, im.params.planebgimage ]: + if elem: + url = elem['url'] + break + return return_image(im, url) + except Exception as e: + sys.stderr.write(str(e)) + return json.dumps({ 'error' : 'Request could not be processed' }) + +@post('/im/api/generate') +def generate(): + try: + im = Generate(**(dict(request.forms))) + im.create(); + return return_image(im) + except Exception as e: + sys.stderr.write(str(e)) + return json.dumps({ 'error' : 'Request could not be processed' }) + +@post('/im/api/imbreak') +def breaker(): + try: + im = Breaker(**(dict(request.forms))) + im.create(); + return return_image(im, im.params['url']) + except Exception as e: + sys.stderr.write(str(e)) + return json.dumps({ 'error' : 'Request could not be processed' }) + +@post('/im/api/impattern') +def pattern(): + try: + im = Pattern(**(dict(request.forms))) + im.create(); + return return_image(im, im.params['image_url']) + except Exception as e: + sys.stderr.write(str(e)+"\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' }) + +<<<<<<< HEAD +#static routes +@route('/im/<filename>') +def server_static(filename): + return static_file(filename, root='frontend/im/') +@route('/im') +def server_static(): + return static_file("index.html", root='frontend/im/') +@route('/imgrid') +def server_static(): + return static_file("index.html", root='frontend/imgrid/') +@route('/imgradient') +def server_static(): + return static_file("index.html", root='frontend/imgradient/') +@route('/imlandscape') +def server_static(): + return static_file("index.html", root='frontend/imlandscape/') +@route('/impattern') +def server_static(): + return static_file("index.html", root='frontend/impattern/') +@route('/imbreak') +def server_static(): + return static_file("index.html", root='frontend/imbreak/') +@route('/') +def server_static(): + return static_file("index.html", root='frontend/im/') +@route('/css/<filename>') +def server_static(filename): + return static_file(filename, root='frontend/css/') +@route('/js/<filename>') +def server_static(filename): + return static_file(filename, root='frontend/js/') +@route('/img/<filename>') +def server_static(filename): + return static_file(filename, root='frontend/img/') + + +#run(host='0.0.0.0', server='flup', port=8999, debug=True) +run(host='0.0.0.0', port=8999, debug=True) +======= +@post('/im/api/imlandscape') +def imlandscape(): + try: + im = Imlandscape(**(dict(request.forms))) + im.create(); + sys.stderr.write(str(im.params)) + return return_image(im, im.params['texture']) + except Exception as e: + sys.stderr.write(str(e)) + return json.dumps({ 'error' : 'Request could not be processed' }) +run(host='0.0.0.0', server='flup', port=8999, debug=True) +>>>>>>> 8c860adf26be12d230cd146c6aae85efcb163a24 |
