[hdf-compass] 42/295: added support for GridType in Pydap, cleaned up "key" issues with check_key function.

Ghislain Vaillant ghisvail-guest at moszumanska.debian.org
Sun May 8 10:35:24 UTC 2016


This is an automated email from the git hooks/post-receive script.

ghisvail-guest pushed a commit to branch debian/master
in repository hdf-compass.

commit 72aa24f0cd0f6414f051a73f4608b90eef68faca
Author: Matt Comerford <matthew.comerford at colorado.edu>
Date:   Wed Aug 20 15:04:34 2014 -0600

    added support for GridType in Pydap, cleaned up "key" issues with check_key function.
---
 opendap_model/__init__.py | 119 ++++++++++++++++++++++++++++++++++++----------
 1 file changed, 95 insertions(+), 24 deletions(-)

diff --git a/opendap_model/__init__.py b/opendap_model/__init__.py
index 7e99063..82d7c0b 100644
--- a/opendap_model/__init__.py
+++ b/opendap_model/__init__.py
@@ -1,5 +1,5 @@
 """
-    HDF Compass plugin for accessing an OpENDAP server.
+HDF Compass plugin for accessing an OpENDAP server.
 """
 
 import numpy as np
@@ -11,14 +11,29 @@ from pydap.proxy import ArrayProxy
 import compass_model
 
 
+def check_key(key, dataset):
+    if not '/' in key:
+        return key, dataset
+    new_dataset = dataset[key.split('/')[0]]
+    return key.split('/')[1], new_dataset
+
+
 class Server(compass_model.Store):
 
     """
         Represents the remote OpENDAP derver to be accessed
     """
-
     def __contains__(self, key):
-        return key in self._dataset
+        if key.count('/') not in (0, 1):
+            return False
+
+        if '/' not in key:
+            return key in self.dataset
+
+        new_dset = self.dataset[key.split('/')[0]]
+        new_key = key.rsplit('/')[1]
+
+        return new_key in new_dset
 
     @staticmethod
     def canhandle(url):
@@ -32,8 +47,9 @@ class Server(compass_model.Store):
             raise ValueError(url)
         self._url = url
         self._valid = True
-        self._dataset = open_url(self._url)
-        self._dataset.setdefault('')
+        self._dataset = open_url(self.url)
+
+        self.dataset.setdefault('')
 
     def close(self):
         self._valid = False
@@ -47,7 +63,7 @@ class Server(compass_model.Store):
 
     @property
     def displayname(self):
-        return self._dataset.name
+        return self.dataset.name
 
     @property
     def root(self):
@@ -62,28 +78,28 @@ class Server(compass_model.Store):
         return self._dataset
 
 
-class Structure(compass_model.Container):
+class Dataset(compass_model.Container):
 
     """
-        Represents Structure/StructureType Object in OpENDAP/Pydap
+        Represents Dataset/DatasetType Object in OpENDAP/Pydap.
     """
 
-    classkind = "Structure"
+    classkind = "Dataset"
 
     def __len__(self):
         return len(self._dset.data)
 
     def __getitem__(self, index):
         name = self._dset.keys()[index]
+
         return self.store[pp.join(self.key, name)]
 
     def __iter__(self):
-        for name in self._dset.keys():
-            yield self.store[pp.join(self.key, name)]
+        pass
 
     @staticmethod
     def canhandle(store, key):
-        return key in store.dataset and isinstance(store.dataset, dap.model.StructureType)
+        return isinstance(store.dataset, dap.model.DatasetType)
 
     def __init__(self, store, key):
         self._store = store
@@ -101,20 +117,70 @@ class Structure(compass_model.Container):
 
     @property
     def displayname(self):
+        return self.dset.name
+
+    @property
+    def description(self):
+        return "A Pydap DatasetType Object."
+
+    @property
+    def dset(self):
+        return self._dset
+
+
+class Grid(compass_model.Container):
+
+    """
+        Represents Structure/StructureType Object in OpENDAP/Pydap.
+    """
+
+    classkind = "Grid"
+
+    def __len__(self):
+        return len(self._dset.data)
+
+    def __getitem__(self, index):
+        name = self._dset.keys()[index]
+        return self.store[pp.join(self.key, name)]
+
+    def __iter__(self):
+        pass
+
+    @staticmethod
+    def canhandle(store, key):
+        new_key, new_dset = check_key(key, store.dataset)
+        return new_key in new_dset and isinstance(new_dset[new_key], dap.model.GridType)
+
+    def __init__(self, store, key):
+        self._store = store
+        self._key = key
+        self._url = store.url
+        self._dset = store.dataset[key]
+
+    @property
+    def key(self):
+        return self._key
+
+    @property
+    def store(self):
+        return self._store
+
+    @property
+    def displayname(self):
         return self._dset.name
 
     @property
     def description(self):
-        return "Testing Structure Implementation"
+        return "A Pydap GridType Object."
 
 
 class Base(compass_model.Array):
 
     """
-        Represents Array/BaseType Object in OpENDAP/Pydap
+        Represents Array/BaseType Object in OpENDAP/Pydap.
     """
 
-    classkind = "BaseType - NumPy Array"
+    classkind = "NumPy Array"
 
     @property
     def shape(self):
@@ -131,18 +197,22 @@ class Base(compass_model.Array):
 
     @staticmethod
     def canhandle(store, key):
-        return key in store.dataset and isinstance(store.dataset[key], dap.model.BaseType)
+        new_key, new_dset = check_key(key, store.dataset)
+        return new_key in new_dset and isinstance(new_dset[new_key], dap.model.BaseType)
 
     def __init__(self, store, key):
+        new_key, new_dset = check_key(key, store.dataset)
+
         self._store = store
-        self._key = key
+        self._key = new_key
         self._url = store.url
-        self._data = None
+        self._id = new_dset[new_key].id
+
+        self._shape = new_dset[new_key].shape
+        self._dtype = new_dset[new_key].type
+        self._name = new_dset[new_key].name
 
-        self._id = store.dataset[key].id
-        self._shape = store.dataset[key].shape
-        self._dtype = store.dataset[key].type
-        self._name = store.dataset[key].name
+        self._data = None
 
     @property
     def key(self):
@@ -158,10 +228,11 @@ class Base(compass_model.Array):
 
     @property
     def description(self):
-        return "A Descriptive String"
+        return "A Pydap BaseType Object."
 
 # Register Handlers
-Server.push(Structure)
+Server.push(Dataset)
+Server.push(Grid)
 Server.push(Base)
 
 compass_model.push(Server)

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/debian-science/packages/hdf-compass.git



More information about the debian-science-commits mailing list