[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