@@ -95,6 +95,24 @@ def __init__(self, *args, **kwargs):
9595 else :
9696 self .add (* args , ** kwargs )
9797
98+ @property
99+ def meta (self ):
100+ r"""Returns metadata of the session.
101+
102+ Returns
103+ -------
104+ Metadata:
105+ Metadata of the session.
106+ """
107+ return self ._meta
108+
109+ @meta .setter
110+ def meta (self , meta ):
111+ if not isinstance (meta , (list , dict , OrderedDict , Metadata )):
112+ raise TypeError ("Expected list of pairs or dict or OrderedDict or Metadata object "
113+ "instead of {}" .format (type (meta ).__name__ ))
114+ object .__setattr__ (self , '_meta' , meta if isinstance (meta , Metadata ) else Metadata (meta ))
115+
98116 # XXX: behave like a dict and return keys instead?
99117 def __iter__ (self ):
100118 return iter (self .values ())
@@ -303,22 +321,15 @@ def __setitem__(self, key, value):
303321 def __delitem__ (self , key ):
304322 del self ._objects [key ]
305323
306- # TODO: add a a meta property when Python 2.7 will be dropped
307324 def __getattr__ (self , key ):
308- if key == 'meta' :
309- return self ._meta
310- elif key in self ._objects :
325+ if key in self ._objects :
311326 return self ._objects [key ]
312327 else :
313328 raise AttributeError ("'{}' object has no attribute '{}'" .format (self .__class__ .__name__ , key ))
314329
315- # TODO: implement meta.setter when Python 2.7 will be dropped
316330 def __setattr__ (self , key , value ):
317331 if key == 'meta' :
318- if not isinstance (value , (list , dict , OrderedDict , Metadata )):
319- raise TypeError ("Expected list of pairs or dict or OrderedDict or Metadata object "
320- "instead of {}" .format (type (value ).__name__ ))
321- object .__setattr__ (self , '_meta' , value if isinstance (value , Metadata ) else Metadata (value ))
332+ super ().__setattr__ (key , value )
322333 else :
323334 self ._objects [key ] = value
324335
0 commit comments