summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xpb/imlandscape.py101
-rwxr-xr-xpbserver.py11
2 files changed, 112 insertions, 0 deletions
diff --git a/pb/imlandscape.py b/pb/imlandscape.py
new file mode 100755
index 0000000..60f1fef
--- /dev/null
+++ b/pb/imlandscape.py
@@ -0,0 +1,101 @@
+#!/usr/bin/python2.7
+import os
+import sys
+import random
+import re
+import pb.lib.utils as utils
+import urllib
+import urlparse
+from pb.config import *
+
+import base64
+import time
+import string
+import urllib
+from subprocess import Popen, PIPE
+import sha
+import simplejson as json
+
+import mimetypes
+
+class Imlandscape(object):
+ def __init__(self, **kwargs):
+ self.params = {}
+ self.tag = "imlandscape"
+ self.commands = [];
+ self._required_keys = [
+ "heightmap",
+ "imgdata",
+ "texture",
+ "name",
+ ]
+ self.now = utils.now()
+ self.files_created = []
+ for k in self._required_keys:
+ if k in kwargs:
+ self.params[k] = kwargs[k]
+ else:
+ self.params[k] = utils.bool_correct(utils.sanitize(kwargs[k]))
+
+ def _filename_from_url (self, url, name=""):
+ if "?" in url:
+ url = url.split("?")[0]
+ if "/" in url:
+ url = urllib.unquote(url).replace(" ","")
+ filename = url.split("/")[-1]
+ filetype = "png"
+ filename = sanitize(filename[:-4])
+ else:
+ filename = ""
+ if name != "":
+ name = name+"_"
+ return "{}_{}{}_{}.{}".format("imlandscape", name, filename,self.now, "png")
+
+ def _saveImgData(self, imgdata, filename):
+ try:
+# up = urlparse.urlparse(url)
+# head, data = imgdata.split(',', 1)
+# bits = head.split(';')
+ parts = imgdata.split(';')
+ mime_type = parts[0] if parts[0] else 'text/plain'
+ data = parts[1]
+ charset, b64 = 'ASCII', False
+ for part in parts[1]:
+ if part.startswith('charset='):
+ charset = part[8:]
+ elif part == 'base64':
+ b64 = True
+
+ # Do something smart with charset and b64 instead of assuming
+ if b64:
+ plaindata = base64.b64decode(data)
+ else:
+ plaindata = data
+ with open(filename, 'wb') as f:
+ f.write(plaindata)
+ except Exception as e:
+ sys.stderr.write("ERROR: {}\n".format(str(e)));
+
+# def _cleanup(self):
+# cmd = ["rm"]+self.files_created
+# self._call_cmd(cmd)
+
+ def create(self, breakmode=""):
+ self.filepath = self._filename_from_url(self.params.get('texture',""), self.params.get('name',""));
+ self._saveImgData(self.params.get('imgdata'), self.filepath);
+
+if __name__ == "__main__":
+ f = open("/tmp/base64img")
+ data = f.read()
+ f.close()
+ TEST_PARAMS = {
+ "heightmap" : "https%3A%2F%2Fwww.google.com%2Fimages%2Fsrpr%2Flogo11w.png" ,
+ "imgdata" : data,
+ "texture" : "https%3A%2F%2Fwww.google.com%2Fimages%2Fsrpr%2Flogo11w.png",
+ "name" : "pepper",
+ }
+ b = Imlandscape(**TEST_PARAMS)
+ b.create();
+ print b.filepath
+
+
diff --git a/pbserver.py b/pbserver.py
index 36a53a1..9610df1 100755
--- a/pbserver.py
+++ b/pbserver.py
@@ -6,6 +6,7 @@ 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
@@ -172,4 +173,14 @@ def pattern():
raise;
return json.dumps({ 'error' : 'Request could not be processed' })
+@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)