def __getitem__(self, index): slice_ = combine_slices(self._slice, fix_slice(index, self.shape)) scheme, netloc, path, query, fragment = urlsplit(self.url) url = urlunsplit(( scheme, netloc, path + '.dods', quote(self.id) + hyperslab(slice_) + '&' + query, fragment)) resp, data = request(url) dds, xdrdata = data.split('\nData:\n', 1) dataset = DDSParser(dds).parse() data = data2 = DapUnpacker(xdrdata, dataset).getvalue() # Retrieve the data from any parent structure(s). for var in walk(dataset): if type(var) in (StructureType, DatasetType): data = data[0] elif var.id == self.id: return data # Some old servers return the wrong response. :-/ # I found a server that would return an array to a request # for an array inside a grid (instead of a structure with # the array); this will take care of it. for var in walk(dataset): if type(var) in (StructureType, DatasetType): data2 = data2[0] elif self.id.endswith(var.id): return data2
def __getitem__(self, index): slice_ = combine_slices(self._slice, fix_slice(index, self.shape)) scheme, netloc, path, query, fragment = urlsplit(self.url) url = urlunsplit((scheme, netloc, path + '.dods', self.id + hyperslab(slice_) + '&' + query, fragment)) resp, data = request(url) dds, xdrdata = data.split('\nData:\n', 1) dataset = DDSParser(dds).parse() data = data2 = DapUnpacker(xdrdata, dataset).getvalue() # Retrieve the data from any parent structure(s). for var in walk(dataset): if type(var) in (StructureType, DatasetType): data = data[0] elif var.id == self.id: return data # Some old servers return the wrong response. :-/ # I found a server that would return an array to a request # for an array inside a grid (instead of a structure with # the array); this will take care of it. for var in walk(dataset): if type(var) in (StructureType, DatasetType): data2 = data2[0] elif self.id.endswith(var.id): return data2
def open_dods(url, get_metadata=False): """ Download data from a DODS response and build a dataset. This function is useful to open "raw" URLs. """ resp, data = request(url) dds, xdrdata = data.split('\nData:\n', 1) dataset = DDSParser(dds).parse() dataset.data = DapUnpacker(xdrdata, dataset).getvalue() if get_metadata: scheme, netloc, path, query, fragment = urlsplit(url) dasurl = urlunsplit( (scheme, netloc, path[:-5] + '.das', query, fragment)) resp, das = request(dasurl) dataset = DASParser(das, dataset).parse() return dataset
def _ddsdas(url): """ Build the dataset from the DDS+DAS responses. This function builds the dataset object from the DDS and DAS responses, adding Proxy objects to the variables. """ scheme, netloc, path, query, fragment = urlsplit(url) ddsurl = urlunsplit( (scheme, netloc, path + '.dds', query, fragment)) dasurl = urlunsplit( (scheme, netloc, path + '.das', query, fragment)) respdds, dds = request(ddsurl) respdas, das = request(dasurl) # Build the dataset structure and attributes. dataset = DDSParser(dds).parse() dataset = DASParser(das, dataset).parse() return dataset
def __iter__(self): scheme, netloc, path, query, fragment = urlsplit(self.url) id_ = ','.join('%s.%s' % (self.id, child) for child in self.children) or self.id url = urlunsplit(( scheme, netloc, path + '.dods', quote(id_) + hyperslab(self._slice) + '&' + query, fragment)) resp, data = request(url) dds, xdrdata = data.split('\nData:\n', 1) dataset = DDSParser(dds).parse() dataset.data = DapUnpacker(xdrdata, dataset).getvalue() dataset._set_id() # Strip any projections from the request id. id_ = re.sub('\[.*?\]', '', self.id) # And return the proper data. for var in walk(dataset): if var.id == id_: data = var.data if isinstance(var, SequenceType): order = [var.keys().index(k) for k in self.children] data = reorder(order, data, var._nesting_level) return iter(data)
def __iter__(self): scheme, netloc, path, query, fragment = urlsplit(self.url) id_ = ','.join('%s.%s' % (self.id, child) for child in self.children) or self.id url = urlunsplit( (scheme, netloc, path + '.dods', id_ + hyperslab(self._slice) + '&' + query, fragment)) resp, data = request(url) dds, xdrdata = data.split('\nData:\n', 1) dataset = DDSParser(dds).parse() dataset.data = DapUnpacker(xdrdata, dataset).getvalue() dataset._set_id() # Strip any projections from the request id. id_ = re.sub('\[.*?\]', '', self.id) # And return the proper data. for var in walk(dataset): if var.id == id_: data = var.data if isinstance(var, SequenceType): order = [var.keys().index(k) for k in self.children] data = reorder(order, data, var._nesting_level) return iter(data)