summaryrefslogtreecommitdiff
path: root/lib/pb/landscape/__init__.py
blob: df8d143d0d1a9b83d1b16c4f3edb517684023ee3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
from config import *
import base64
from pb import Pb
import urlparse, re

class PbLandscape(Pb):
    example_params = {
        'imgdata' : open('lib/pb/landscape/_base64img', 'rb').read(),
        'texture' : 'http://someurl.biz/someimg.jpg',
        'heightmap' : 'http://someurl.biz/someimg.jpg',
        'name' : 'donkey'
    }
    def __init__(self, **kwargs):
        super(PbLandscape, self).__init__(**kwargs)
        _definitions = {
            'heightmap': {'type': 'string'},
            'imgdata': {'type': 'raw'},
            'texture': {'type': 'string'},
            'username': {'type': 'string'},
        }
        self.params.definitions_import(_definitions, kwargs, classname=self.__class__.__name__)
        _namepart = re.sub(r'https?:?/?/?', '', str(self.params.texture))
        self.filename, self.filepath = self._filename_filepath_create(url=_namepart, extension="png")

        self._db_url_param = str(self.params.texture)

    def _saveImgData(self):
        try:
            up = urlparse.urlparse(str(self.params.imgdata))
            head, data = up.path.split(',', 1)
            bits = head.split(';')
            #mime_type = bits[0] if bits[0] else 'text/plain'
            #charset, b64 = 'ASCII', False
            #for bit in bits[1]:
            #    if bit.startswith('charset='):
            #        charset = bit[8:]
            #    elif bit == 'base64':
            #        b64 = True

            # Do something smart with charset and b64 instead of assuming
            plaindata = base64.b64decode(data)

            with open(self.filepath, 'wb') as f:
                f.write(plaindata)
        except Exception as e:
            self.err_warn(str(e))

    def create(self, breakmode=""):
        self._saveImgData()
        super(PbLandscape, self).create()