Add a wrapper for metadata inside of DatasetFilenameWrapper to allow proper string substitution in

commandline and templates.
This commit is contained in:
Daniel Blankenberg
2008-09-18 16:48:29 -04:00
parent 5adbb0ef6f
commit 25fd3e140f
2 changed files with 29 additions and 0 deletions
+3
View File
@@ -211,6 +211,9 @@ class SelectParameter( MetadataParameter ):
elif not isinstance(value, list):
MetadataParameter.__setattr__(self, name, [value])
def __iter__( self ):
return iter( self.value )
def __str__(self):
if self.value in [None, []]:
return str(self.spec.no_value)
+26
View File
@@ -1177,6 +1177,31 @@ class DatasetFilenameWrapper( object ):
Wraps a dataset so that __str__ returns the filename, but all other
attributes are accessible.
"""
class MetadataWrapper:
"""
Wraps a Metadata Collection to return MetadataParameters wrapped according to the metadata spec.
Methods implemented to match behavior of a Metadata Collection.
"""
def __init__( self, metadata ):
self.metadata = metadata
def __getattr__( self, name ):
rval = self.metadata.get( name, None )
if name in self.metadata.spec:
rval = self.metadata.spec[name].wrap( rval, self.metadata.parent )
return rval
def __nonzero__( self ):
return self.metadata.__nonzero__()
def __iter__( self ):
return self.metadata.__iter__()
def get( self, key, default=None ):
try:
return getattr( self, key )
except:
return default
def items( self ):
return iter( [ ( k, self.get( k ) ) for k, v in self.metadata.items() ] )
def __init__( self, dataset, datatypes_registry = None, tool = None, name = None ):
if not dataset:
try:
@@ -1187,6 +1212,7 @@ class DatasetFilenameWrapper( object ):
self.dataset = NoneDataset( datatypes_registry = datatypes_registry, ext = ext )
else:
self.dataset = dataset
self.metadata = self.MetadataWrapper( dataset.metadata )
def __str__( self ):
return self.dataset.file_name
def __getattr__( self, key ):