Exemplo n.º 1
0
    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
Exemplo n.º 2
0
    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
Exemplo n.º 3
0
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
Exemplo n.º 4
0
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
Exemplo n.º 5
0
    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)
Exemplo n.º 6
0
    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)