def get_extension(environ): '''Extract the data format extension from request parameters and check that they are supported''' req = Request(environ) form = req.params if form.has_key('data-format') and form['data-format'] in load_responses().keys(): return form['data-format'] else: return None
def setUp(self): """Load all available responses. At least the DDS, DAS, DODS, HTML, ASC and version responses should be loaded, since they are included in Pydap. Other third-party responses may also be present. """ self.responses = load_responses()
def setUp(self): """Load all available responses. At least the DDS, DAS, DODS, HTML, ASC and version responses should be loaded, since they are included in pydap. Other third-party responses may also be present. """ self.responses = load_responses()
class BaseHandler(object): """ Base class for Pydap handlers. Handlers are WSGI applications that parse the client request and build the corresponding dataset. The dataset is passed to proper Response (DDS, DAS, etc.) """ # load all available responses responses = load_responses() def __init__(self, dataset=None): self.dataset = dataset self.additional_headers = [] def __call__(self, environ, start_response): req = Request(environ) path, response = req.path.rsplit('.', 1) if response == 'das': req.query_string = '' projection, selection = parse_ce(req.query_string) try: # build the dataset and pass it to the proper response, returning a # WSGI app dataset = self.parse(projection, selection) app = self.responses[response](dataset) app.close = self.close # now build a Response and set additional headers res = req.get_response(app) for key, value in self.additional_headers: res.headers.add(key, value) return res(environ, start_response) except HTTPException, exc: # HTTP exceptions are used to redirect the user return exc(environ, start_response) except:
class BaseHandler(object): """Base class for Pydap handlers. Handlers are WSGI applications that parse the client request and build the corresponding dataset. The dataset is passed to proper Response (DDS, DAS, etc.) """ # load all available responses responses = load_responses() def __init__(self, dataset=None): self.dataset = dataset self.additional_headers = [] def __call__(self, environ, start_response): req = Request(environ) path, response = req.path.rsplit('.', 1) if response == 'das': req.query_string = '' projection, selection = parse_ce(req.query_string) buffer_size = environ.get('pydap.buffer_size', BUFFER_SIZE) try: # build the dataset and pass it to the proper response, returning a # WSGI app dataset = self.parse(projection, selection, buffer_size) app = self.responses[response](dataset) app.close = self.close # now build a Response and set additional headers res = req.get_response(app) for key, value in self.additional_headers: res.headers.add(key, value) # CORS for Javascript requests if response in CORS_RESPONSES: res.headers.add('Access-Control-Allow-Origin', '*') res.headers.add('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type') return res(environ, start_response) except: # should the exception be catched? if environ.get('x-wsgiorg.throw_errors'): raise else: res = ErrorResponse(info=sys.exc_info()) return res(environ, start_response) def parse(self, projection, selection, buffer_size=BUFFER_SIZE): """Parse the constraint expression, returning a new dataset.""" if self.dataset is None: raise NotImplementedError( "Subclasses must define a ``dataset`` attribute pointing to a" "``DatasetType`` object.") # make a copy of the dataset, so we can filter sequences inplace dataset = copy.copy(self.dataset) # apply the selection to the dataset, inplace apply_selection(selection, dataset) # wrap data in Arrayterator, to optimize projection/selection dataset = wrap_arrayterator(dataset, buffer_size) # fix projection if projection: projection = fix_shorthand(projection, dataset) else: projection = [[(key, ())] for key in dataset.keys()] dataset = apply_projection(projection, dataset) return dataset def close(self): """Optional method for closing the dataset.""" pass