def _render_mapfile(self, mapfile, query): start_time = time.time() m = self.map_obj(mapfile) m.resize(query.size[0], query.size[1]) m.srs = '+init=%s' % str(query.srs.srs_code.lower()) envelope = mapnik.Box2d(*query.bbox) m.zoom_to_box(envelope) data = None try: if self.layers: i = 0 for layer in m.layers[:]: if layer.name != 'Unkown' and layer.name not in self.layers: del m.layers[i] else: i += 1 img = mapnik.Image(query.size[0], query.size[1]) if self.scale_factor: mapnik.render(m, img, self.scale_factor) else: mapnik.render(m, img) data = img.tostring(str(query.format)) finally: size = None if data: size = len(data) log_request('%s:%s:%s:%s' % (mapfile, query.bbox, query.srs.srs_code, query.size), status='200' if data else '500', size=size, method='API', duration=time.time()-start_time) return ImageSource(BytesIO(data), size=query.size, image_opts=ImageOptions(format=query.format))
def _render_mapfile(self, mapfile, query): start_time = time.time() m = self.map_obj(mapfile) m.resize(query.size[0], query.size[1]) m.srs = '+init=%s' % str(query.srs.srs_code.lower()) envelope = mapnik.Box2d(*query.bbox) m.zoom_to_box(envelope) data = None try: if self.layers: i = 0 for layer in m.layers[:]: if layer.name != 'Unkown' and layer.name not in self.layers: del m.layers[i] else: i += 1 img = mapnik.Image(query.size[0], query.size[1]) mapnik.render(m, img) data = img.tostring(str(query.format)) finally: size = None if data: size = len(data) log_request('%s:%s:%s:%s' % (mapfile, query.bbox, query.srs.srs_code, query.size), status='200' if data else '500', size=size, method='API', duration=time.time()-start_time) return ImageSource(BytesIO(data), size=query.size, image_opts=ImageOptions(transparent=self.transparent, format=query.format))
def _render_mapfile(self, mapfile, query): start_time = time.time() data = None try: m = self.mapnik.Map(query.size[0], query.size[1]) self.mapnik.load_map(m, str(mapfile)) m.srs = '+init=%s' % str(query.srs.srs_code.lower()) envelope = self.mapnik.Envelope(*query.bbox) m.zoom_to_box(envelope) if self.layers: i = 0 for layer in m.layers[:]: if layer.name != 'Unkown' and layer.name not in self.layers: del m.layers[i] else: i += 1 img = self.mapnik.Image(query.size[0], query.size[1]) self.mapnik.render(m, img) data = img.tostring(str(query.format)) finally: size = None if data: size = len(data) log_request('%s:%s:%s:%s' % (mapfile, query.bbox, query.srs.srs_code, query.size), status='200' if data else '500', size=size, method='API', duration=time.time()-start_time) return ImageSource(StringIO(data), size=query.size, image_opts=ImageOptions(transparent=self.transparent, format=query.format))
def open(self, url, data=None): assert data is None, 'POST requests not supported by CGIClient' parsed_url = urlparse.urlparse(url) environ = os.environ.copy() environ.update({ 'QUERY_STRING': parsed_url.query, 'REQUEST_METHOD': 'GET', 'GATEWAY_INTERFACE': 'CGI/1.1', 'SERVER_ADDR': '127.0.0.1', 'SERVER_NAME': 'localhost', 'SERVER_PROTOCOL': 'HTTP/1.0', 'SERVER_SOFTWARE': 'MapProxy', }) start_time = time.time() try: p = subprocess.Popen([self.script], env=environ, stdout=subprocess.PIPE, cwd=self.working_directory or os.path.dirname(self.script)) except OSError as ex: if ex.errno == errno.ENOENT: raise SourceError('CGI script not found (%s)' % (self.script, )) elif ex.errno == errno.EACCES: raise SourceError('No permission for CGI script (%s)' % (self.script, )) else: raise stdout = p.communicate()[0] ret = p.wait() if ret != 0: raise HTTPClientError('Error during CGI call (exit code: %d)' % (ret, )) if self.no_headers: content = stdout headers = dict() else: headers, content = split_cgi_response(stdout) status_match = re.match('(\d\d\d) ', headers.get('Status', '')) if status_match: status_code = status_match.group(1) else: status_code = '-' size = len(content) content = IOwithHeaders(BytesIO(content), headers) log_request('%s:%s' % (self.script, parsed_url.query), status_code, size=size, method='CGI', duration=time.time() - start_time) return content
def open(self, url, data=None): code = None result = None try: req = urllib2.Request(url, data=data) except ValueError as e: err = self.handle_url_exception(url, 'URL not correct', e.args[0]) reraise_exception(err, sys.exc_info()) for key, value in self.header_list: req.add_header(key, value) try: start_time = time.time() if self._timeout is not None: result = self.opener.open(req, timeout=self._timeout) else: result = self.opener.open(req) except HTTPError as e: code = e.code err = self.handle_url_exception(url, 'HTTP Error', str(code), response_code=code) reraise_exception(err, sys.exc_info()) except URLError as e: if isinstance(e.reason, ssl.SSLError): err = self.handle_url_exception( url, 'Could not verify connection to URL', e.reason.args[1]) reraise_exception(err, sys.exc_info()) try: reason = e.reason.args[1] except (AttributeError, IndexError): reason = e.reason err = self.handle_url_exception(url, 'No response from URL', reason) reraise_exception(err, sys.exc_info()) except ValueError as e: err = self.handle_url_exception(url, 'URL not correct', e.args[0]) reraise_exception(err, sys.exc_info()) except Exception as e: err = self.handle_url_exception(url, 'Internal HTTP error', repr(e)) reraise_exception(err, sys.exc_info()) else: code = getattr(result, 'code', 200) if code == 204: raise HTTPClientError('HTTP Error "204 No Content"', response_code=204) return result finally: log_request(url, code, result, duration=time.time() - start_time, method=req.get_method())
def open(self, url, data=None): assert data is None, 'POST requests not supported by CGIClient' parsed_url = urlparse.urlparse(url) environ = os.environ.copy() environ.update({ 'QUERY_STRING': parsed_url.query, 'REQUEST_METHOD': 'GET', 'GATEWAY_INTERFACE': 'CGI/1.1', 'SERVER_ADDR': '127.0.0.1', 'SERVER_NAME': 'localhost', 'SERVER_PROTOCOL': 'HTTP/1.0', 'SERVER_SOFTWARE': 'MapProxy', }) start_time = time.time() try: p = subprocess.Popen([self.script], env=environ, stdout=subprocess.PIPE, cwd=self.working_directory or os.path.dirname(self.script) ) except OSError as ex: if ex.errno == errno.ENOENT: raise SourceError('CGI script not found (%s)' % (self.script,)) elif ex.errno == errno.EACCES: raise SourceError('No permission for CGI script (%s)' % (self.script,)) else: raise stdout = p.communicate()[0] ret = p.wait() if ret != 0: raise HTTPClientError('Error during CGI call (exit code: %d)' % (ret, )) if self.no_headers: content = stdout headers = dict() else: headers, content = split_cgi_response(stdout) status_match = re.match('(\d\d\d) ', headers.get('Status', '')) if status_match: status_code = status_match.group(1) else: status_code = '-' size = len(content) content = IOwithHeaders(BytesIO(content), headers) log_request('%s:%s' % (self.script, parsed_url.query), status_code, size=size, method='CGI', duration=time.time()-start_time) return content
def _create_renderd_tile(self, tile_coord): start_time = time.time() result = self._send_tile_request(self.tile_mgr.identifier, [tile_coord]) duration = time.time()-start_time address = '%s:%s:%r' % (self.renderd_address, self.tile_mgr.identifier, tile_coord) if result['status'] == 'error': log_request(address, 500, None, duration=duration, method='RENDERD') raise SourceError("Error from renderd: %s" % result.get('error_message', 'unknown error from renderd')) log_request(address, 200, None, duration=duration, method='RENDERD')
def open(self, url, data=None): code = None result = None try: req = urllib2.Request(url, data=data) except ValueError as e: reraise_exception(HTTPClientError('URL not correct "%s": %s' % (url, e.args[0])), sys.exc_info()) for key, value in self.header_list: req.add_header(key, value) try: start_time = time.time() if self._timeout is not None: result = self.opener.open(req, timeout=self._timeout) else: result = self.opener.open(req) except HTTPError as e: code = e.code reraise_exception(HTTPClientError('HTTP Error "%s": %d' % (url, e.code), response_code=code), sys.exc_info()) except URLError as e: if isinstance(e.reason, ssl.SSLError): e = HTTPClientError('Could not verify connection to URL "%s": %s' % (url, e.reason.args[1])) reraise_exception(e, sys.exc_info()) try: reason = e.reason.args[1] except (AttributeError, IndexError): reason = e.reason reraise_exception(HTTPClientError('No response from URL "%s": %s' % (url, reason)), sys.exc_info()) except ValueError as e: reraise_exception(HTTPClientError('URL not correct "%s": %s' % (url, e.args[0])), sys.exc_info()) except Exception as e: reraise_exception(HTTPClientError('Internal HTTP error "%s": %r' % (url, e)), sys.exc_info()) else: code = getattr(result, 'code', 200) if code == 204: raise HTTPClientError('HTTP Error "204 No Content"', response_code=204) return result finally: log_request(url, code, result, duration=time.time()-start_time, method=req.get_method())
def _create_renderd_tile(self, tile_coord): start_time = time.time() result = self._send_tile_request(self.tile_mgr.identifier, [tile_coord]) duration = time.time() - start_time address = '%s:%s:%r' % (self.renderd_address, self.tile_mgr.identifier, tile_coord) if result['status'] == 'error': log_request(address, 500, None, duration=duration, method='RENDERD') raise SourceError( "Error from renderd: %s" % result.get('error_message', 'unknown error from renderd')) log_request(address, 200, None, duration=duration, method='RENDERD')
HTTPClientError('URL not correct "%s": %s' % (url, e.args[0])), sys.exc_info()) except Exception, e: reraise_exception( HTTPClientError('Internal HTTP error "%s": %r' % (url, e)), sys.exc_info()) else: code = getattr(result, 'code', 200) if code == 204: raise HTTPClientError('HTTP Error "204 No Content"', response_code=204) return result finally: log_request(url, code, result, duration=time.time() - start_time, method=req.get_method()) def open_image(self, url, data=None): resp = self.open(url, data=data) if 'content-type' in resp.headers: if not resp.headers['content-type'].lower().startswith('image'): raise HTTPClientError('response is not an image: (%s)' % (resp.read())) return ImageSource(resp) def auth_data_from_url(url): """ >>> auth_data_from_url('http://localhost/bar')
reason = e.reason reraise_exception(HTTPClientError('No response from URL "%s": %s' % (url, reason)), sys.exc_info()) except ValueError, e: reraise_exception(HTTPClientError('URL not correct "%s": %s' % (url, e.args[0])), sys.exc_info()) except Exception, e: reraise_exception(HTTPClientError('Internal HTTP error "%s": %r' % (url, e)), sys.exc_info()) else: code = getattr(result, 'code', 200) if code == 204: raise HTTPClientError('HTTP Error "204 No Content"', response_code=204) return result finally: log_request(url, code, result, duration=time.time()-start_time, method=req.get_method()) def open_image(self, url, data=None): resp = self.open(url, data=data) if 'content-type' in resp.headers: if not resp.headers['content-type'].lower().startswith('image'): raise HTTPClientError('response is not an image: (%s)' % (resp.read())) return ImageSource(resp) def auth_data_from_url(url): """ >>> auth_data_from_url('http://localhost/bar') ('http://localhost/bar', (None, None)) >>> auth_data_from_url('http://bar@localhost/bar') ('http://localhost/bar', ('bar', None)) >>> auth_data_from_url('http://*****:*****@localhost/bar')