def _get(path, cache): if cache['type'] == 's3': # pragma: no cover s3bucket = S3Connection().bucket(cache['bucket']) s3key = s3bucket.key(os.path.join('%(folder)s' % cache, path)) return s3key.get().body else: p = os.path.join(cache['folder'], path) if not os.path.isfile(p): # pragma: no cover return None with open(p, 'rb') as file: return file.read()
def _get(self, path, **kwargs): global s3bucket try: s3key = s3bucket.key(os.path.join('%(folder)s' % self.cache, path)) responce = s3key.get() return responce.body, responce.headers['Content-Type'] except: s3bucket = S3Connection().bucket(self.cache['bucket']) s3key = s3bucket.key(os.path.join('%(folder)s' % self.cache, path)) responce = s3key.get() return responce.body, responce.headers['Content-Type']
def _send(data, path, mime_type, cache): if cache['type'] == 's3': # pragma: no cover s3bucket = S3Connection().bucket(cache['bucket']) s3key = s3bucket.key(os.path.join('%(folder)s' % cache, path)) s3key.body = data s3key['Content-Encoding'] = 'utf-8' s3key['Content-Type'] = mime_type s3key.put() else: folder = cache['folder'] or '' filename = os.path.join(folder, path) directory = os.path.dirname(filename) if not os.path.exists(directory): os.makedirs(directory) f = open(filename, 'wb') f.write(data) f.close()
def __init__(self, bucket, tile_layout, dry_run=False, **kwargs): self.s3bucket = S3Connection().bucket(bucket) self.tile_layout = tile_layout self.dry_run = dry_run TileStore.__init__(self, **kwargs)
def __init__(self, config_file): self.filters = {} self.max_zoom_seed = {} logger.info("Config file: '%s'" % config_file) self.tilegeneration = TileGeneration(config_file) if not self.tilegeneration.validate_apache_config(): # pragma: no cover raise "Apache configuration error" self.expires_hours = self.tilegeneration.config['apache']['expires'] self.static_allow_extension = self.tilegeneration.config['server']['static_allow_extension'] \ if 'static_allow_extension' in self.tilegeneration.config['server'] \ else ['jpeg', 'png', 'xml', 'js', 'html', 'css'] self.cache = self.tilegeneration.caches[ self.tilegeneration.config['server']['cache'] if 'cache' in self.tilegeneration.config['server'] else self.tilegeneration.config['generation']['default_cache'] ] if self.cache['type'] == 's3': # pragma: no cover s3bucket = S3Connection().bucket(self.cache['bucket']) def _get(self, path, **kwargs): global s3bucket try: s3key = s3bucket.key(os.path.join('%(folder)s' % self.cache, path)) responce = s3key.get() return responce.body, responce.headers['Content-Type'] except: s3bucket = S3Connection().bucket(self.cache['bucket']) s3key = s3bucket.key(os.path.join('%(folder)s' % self.cache, path)) responce = s3key.get() return responce.body, responce.headers['Content-Type'] else: folder = self.cache['folder'] or '' def _get(self, path, **kwargs): if path.split('.')[-1] not in self.static_allow_extension: # pragma: no cover return self.error(403, "Extension not allowed", **kwargs), None p = os.path.join(folder, path) if not os.path.isfile(p): # pragma: no cover return self.error(404, path + " not found", **kwargs), None with open(p, 'rb') as file: data = file.read() mime = mimetypes.guess_type(p) return data, mime[0] # get capabilities or other static files self._get = types.MethodType(_get, self) if not self.tilegeneration.validate_mapcache_config(): # pragma: no cover raise "Mapcache configuration error" mapcache_base = self.tilegeneration.config['server']['mapcache_base'] if \ 'mapcache_base' in self.tilegeneration.config['server'] else \ 'http://localhost/' self.mapcache_baseurl = mapcache_base + self.tilegeneration.config['mapcache']['location'] + '/wmts' self.mapcache_header = self.tilegeneration.config['server']['mapcache_headers'] if \ 'mapcache_headers' in self.tilegeneration.config['server'] else {} geoms_redirect = bool(self.tilegeneration.config['server']['geoms_redirect']) if \ 'geoms_redirect' in self.tilegeneration.config['server'] else False self.layers = self.tilegeneration.config['server']['layers'] if \ 'layers' in self.tilegeneration.config['server'] else \ self.tilegeneration.layers.keys() self.stores = {} for layer_name in self.layers: layer = self.tilegeneration.layers[layer_name] # build geoms redirect if geoms_redirect: self.filters[layer_name] = self.tilegeneration.get_geoms_filter( layer=layer, grid=layer['grid_ref'], geoms=self.tilegeneration.get_geoms( layer, extent=layer['bbox'] if 'bbox' in layer else layer['grid_ref']['bbox'], ), ) if 'min_resolution_seed' in layer: max_zoom_seed = -1 for zoom, resolution in enumerate(layer['grid_ref']['resolutions']): if resolution > layer['min_resolution_seed']: max_zoom_seed = zoom self.max_zoom_seed[layer_name] = max_zoom_seed else: self.max_zoom_seed[layer_name] = sys.maxint # build stores store_defs = [{ 'ref': [layer_name], 'dimensions': [], }] for dimension in layer['dimensions']: new_store_defs = [] for store_def in store_defs: for value in dimension['values']: new_store_defs.append({ 'ref': store_def['ref'] + [value], 'dimensions': store_def['dimensions'] + [(dimension['name'], value)], }) store_defs = new_store_defs for store_def in store_defs: self.stores['/'.join(store_def['ref'])] = \ self.tilegeneration.get_store(self.cache, layer, store_def['dimensions'], read_only=True)