#!/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