mirror of
https://github.com/galaxyproject/galaxy.git
synced 2026-10-25 10:24:38 +08:00
The MetadataCollection object is now created only once per dataset object instance (and when datatype is changed), instead of each time dataset.metadata is called.
The 'no_value' attribute for a metadata element's spec is returned when the metadata element's value is None.
This commit is contained in:
@@ -151,9 +151,16 @@ class MetadataCollection:
|
||||
"""
|
||||
def __init__(self, parent, spec):
|
||||
self.parent = parent
|
||||
self.bunch = parent._metadata or dict()
|
||||
if spec is None: self.spec = MetadataSpecCollection()
|
||||
else: self.spec = spec
|
||||
|
||||
#set default metadata values
|
||||
if not self.parent._metadata:
|
||||
self.parent._metadata = {}
|
||||
for name, value in self.spec.items():
|
||||
if name not in self.bunch:
|
||||
self.bunch[name] = value.default
|
||||
|
||||
def __iter__(self):
|
||||
return self.bunch.__iter__()
|
||||
def get( self, key, default=None ):
|
||||
@@ -168,19 +175,21 @@ class MetadataCollection:
|
||||
def __nonzero__(self):
|
||||
return self.bunch.__nonzero__()
|
||||
def __getattr__(self, name):
|
||||
if self.bunch.get( name ):
|
||||
return self.bunch.get( name )
|
||||
else:
|
||||
if self.spec.get(name, None):
|
||||
return self.spec[name].default
|
||||
else:
|
||||
return None
|
||||
if name == "bunch":
|
||||
return self.parent._metadata
|
||||
rval = self.bunch.get( name )
|
||||
if rval is None:
|
||||
rval = self.spec.get( name, None )
|
||||
if rval:
|
||||
rval = rval.no_value
|
||||
return rval
|
||||
def __setattr__(self, name, value):
|
||||
if name in ["parent","bunch","spec"]:
|
||||
if name in ["parent","spec"]:
|
||||
self.__dict__[name] = value
|
||||
elif name == "bunch":
|
||||
self.parent._metadata = value
|
||||
else:
|
||||
self.__dict__["bunch"][name] = value
|
||||
self.bunch = self.parent._metadata = dict( self.bunch )
|
||||
self.bunch[name] = value
|
||||
|
||||
MetadataElement = Statement(MetadataElementSpec)
|
||||
|
||||
|
||||
@@ -113,7 +113,7 @@ class HistoryDatasetAssociation( object ):
|
||||
self.peek = peek
|
||||
self.extension = extension
|
||||
self.designation = designation
|
||||
self._metadata = metadata or dict()
|
||||
self.metadata = metadata or dict()
|
||||
self.dbkey = dbkey
|
||||
self.deleted = deleted
|
||||
self.visible = visible
|
||||
@@ -159,9 +159,9 @@ class HistoryDatasetAssociation( object ):
|
||||
return datatypes_registry.get_datatype_by_extension( self.extension )
|
||||
|
||||
def get_metadata( self ):
|
||||
if not self._metadata:
|
||||
self._metadata = dict()
|
||||
return MetadataCollection( self, self.datatype.metadata_spec )
|
||||
if not hasattr( self, '_metadata_collection' ):
|
||||
self._metadata_collection = MetadataCollection( self, self.datatype.metadata_spec )
|
||||
return self._metadata_collection
|
||||
def set_metadata( self, bunch ):
|
||||
# Needs to accept a MetadataCollection, a bunch, or a dict
|
||||
self._metadata = dict( bunch.items() )
|
||||
@@ -191,6 +191,8 @@ class HistoryDatasetAssociation( object ):
|
||||
|
||||
def change_datatype( self, new_ext ):
|
||||
self.clear_associated_files()
|
||||
if hasattr( self, '_metadata_collection' ):
|
||||
del self._metadata_collection
|
||||
datatypes_registry.change_datatype( self, new_ext )
|
||||
def get_size( self ):
|
||||
"""Returns the size of the data on disk"""
|
||||
|
||||
Reference in New Issue
Block a user