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

class PbLandscape(Pb):
    def __init__(self, 
      heightmap=None,
      imgdata=None,
      texture=None,
      name=None,
    ):
      self._required_keys = [
          "heightmap",
          "imgdata",
          "texture",
          "name",
      ]

    def _saveImgData(self, imgdata, filename):
      try:
        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 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);