summaryrefslogtreecommitdiff
path: root/Pb/Landscape/__init__.py
blob: 4df06fdac58e45820c6be234b26286716cebf330 (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
from Config import *
import Pb
import base64
from Pb import Pb
import urlparse

class PbLandscape(Pb):
    example_params = {
      'imgdata' : open('Pb/Landscape/_base64img', 'rb').read(),
      'texture' : 'http://someurl.biz/someimg.jpg',
      'heightmap' : 'http://someurl.biz/someimg.jpg',
      'name' : 'donkey'
    }
    def __init__(self, 
      heightmap=None,
      imgdata=None,
      texture=None,
      name="",
    ):
      super(PbLandscape,self).__init__();
      self.params.set_val("heightmap", heightmap, value_type="string");
      self.params.set_val("imgdata", imgdata, value_type="raw");
      self.params.set_val("texture", texture, value_type="string");
      self.params.set_val("username", name, value_type="string");
      self.filename, self.filepath = self._filename_filepath_create(url=self.params.texture, extension="png")

    def _saveImgData(self):
      try:
        up = urlparse.urlparse(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();