summaryrefslogtreecommitdiff
path: root/lib/Pb/Landscape/__init__.py
blob: 153f9ce2b4e2fd4eb000be193edf3783461d727a (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
51
52
from config import *
import Pb
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();
        self._file_dimensions();
        self._file_size_get();