summaryrefslogtreecommitdiff
path: root/python/metadata.py
diff options
context:
space:
mode:
authorPeter LaFosse <peter@vector35.com>2017-07-13 18:07:20 -0400
committerPeter LaFosse <peter@vector35.com>2017-07-13 18:07:20 -0400
commit755a1a40c636f5fbd463ffdda646d92ae68ebada (patch)
tree4c81baf88adf1dab224c28f6f4cebd660b98ac54 /python/metadata.py
parent0e6019edc8c5949de4989ef9577c07913946135b (diff)
Make query/store metadata completely duck typed
Diffstat (limited to 'python/metadata.py')
-rw-r--r--python/metadata.py20
1 files changed, 15 insertions, 5 deletions
diff --git a/python/metadata.py b/python/metadata.py
index 2817d777..554bbcf4 100644
--- a/python/metadata.py
+++ b/python/metadata.py
@@ -71,8 +71,16 @@ class Metadata(object):
elif self.is_array:
return list(self)
elif self.is_dict:
- return dict(self)
- raise NotImplementedError()
+ return self.get_dict()
+ raise TypeError()
+
+ def get_dict(self):
+ if not self.is_dict:
+ raise TypeError()
+ result = {}
+ for key in self:
+ result[key] = self[key]
+ return result
@property
def type(self):
@@ -130,7 +138,7 @@ class Metadata(object):
def __iter__(self):
if self.is_array:
for i in xrange(core.BNMetadataSize(self.handle)):
- yield Metadata(handle=core.BNMetadataGetForIndex(self.handle, i))
+ yield Metadata(handle=core.BNMetadataGetForIndex(self.handle, i)).value
elif self.is_dict:
result = core.BNMetadataGetValueStore(self.handle)
try:
@@ -147,14 +155,16 @@ class Metadata(object):
raise ValueError("Metadata object only supports integers for indexing")
if value >= len(self):
raise IndexError("Index value out of range")
- return Metadata(handle=core.BNMetadataGetForIndex(self.handle, value))
+ return Metadata(handle=core.BNMetadataGetForIndex(self.handle, value)).value
if self.is_dict:
if not isinstance(value, str):
raise ValueError("Metadata object only supports strings for indexing")
handle = core.BNMetadataGetForKey(self.handle, value)
if handle is None:
raise KeyError(value)
- return Metadata(handle=handle)
+ return Metadata(handle=handle).value
+
+ raise NotImplementedError("Metadata object doesn't support indexing")
def __str__(self):
if self.is_string: