[h5py] 397/455: Split __getitem__ into 1.6/1.8/ref

Ghislain Vaillant ghisvail-guest at moszumanska.debian.org
Thu Jul 2 18:19:54 UTC 2015


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

ghisvail-guest pushed a commit to annotated tag 1.3.0
in repository h5py.

commit 083deb0e6820235b9996cbd494ca9137d99fa176
Author: andrewcollette <andrew.collette at gmail.com>
Date:   Mon Feb 8 03:12:31 2010 +0000

    Split __getitem__ into 1.6/1.8/ref
---
 h5py/highlevel.py | 55 +++++++++++++++++++++++++++----------------------------
 1 file changed, 27 insertions(+), 28 deletions(-)

diff --git a/h5py/highlevel.py b/h5py/highlevel.py
index a1fe9e7..a2bf178 100644
--- a/h5py/highlevel.py
+++ b/h5py/highlevel.py
@@ -315,7 +315,10 @@ class Group(HLObject, _DictCompat):
                 self._set16(name, obj)
 
     def _get18(self, name):
-        """ HDF5 1.8 __getitem__ """
+        """ HDF5 1.8 __getitem__ 
+
+        Works with string names.  Respects link access properties.
+        """
         
         objinfo = h5o.get_info(self.id, name, lapl=self._lapl)
 
@@ -327,6 +330,25 @@ class Group(HLObject, _DictCompat):
         oid = h5o.open(self.id, name, lapl=self._lapl)
         return cls(self, None, _rawid=oid)
 
+    def _get16(self, name):
+        """ HDF5 1.6 __getitem__ """
+        objinfo = h5g.get_objinfo(self.id, name)
+        
+        cls = {h5g.DATASET: Dataset, h5g.GROUP: Group,
+               h5g.TYPE: Datatype}.get(objinfo.type)
+        if cls is None:
+            raise TypeError("Unknown object type")
+        
+        return cls(self, name)
+        
+    def _getref(self, ref):
+        """ Dereference and open (1.6 and 1.8) """
+        cls = {h5g.DATASET: Dataset, h5g.GROUP: Group,
+               h5g.TYPE: Datatype}.get(h5r.get_obj_type(ref, self.id))
+        if cls is None:
+            raise ValueError("Unrecognized object type")
+    
+        return cls(self, None, _rawid=h5r.dereference(ref, self.id))
 
     def __getitem__(self, name):
         """ Open an object attached to this group. 
@@ -334,34 +356,11 @@ class Group(HLObject, _DictCompat):
         with phil:
 
             if isinstance(name, h5r.Reference):
-
-                if not name:
-                    raise ValueError("Empty reference")
-                kind = h5r.get_obj_type(name, self.id)
-                if kind == h5g.GROUP:
-                    return Group(self, None, _rawid=h5r.dereference(name, self.id))
-                elif kind == h5g.DATASET:
-                    return Dataset(self, None, _rawid=h5r.dereference(name, self.id))
-                elif kind == h5g.TYPE:
-                    return Datatype(self, None, _rawid=h5r.dereference(name, self.id))
-
-                raise ValueError("Unrecognized reference object type")
-
-            if config.API_18:
+                return self._getref(name)
+            elif config.API_18:
                 return self._get18(name)
-
-            info = h5g.get_objinfo(self.id, name)
-
-            if info.type == h5g.DATASET:
-                return Dataset(self, name)
-
-            elif info.type == h5g.GROUP:
-                return Group(self, name)
-
-            elif info.type == h5g.TYPE:
-                return Datatype(self, name)
-
-            raise ValueError("Don't know how to open object of type %d" % info.type)
+            else:
+                return self._get16(name)
 
     def __delitem__(self, name):
         """ Delete (unlink) an item from this group. """

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



More information about the debian-science-commits mailing list