2525from ..nifti1 import Nifti1Extensions
2626from ..nifti2 import Nifti2Image , Nifti2Header
2727from ..arrayproxy import reshape_dataobj
28+ from ..caret import CaretMetaData
2829from warnings import warn
2930
3031
@@ -102,7 +103,7 @@ def _underscore(string):
102103 return re .sub (r'([a-z0-9])([A-Z])' , r'\1_\2' , string ).lower ()
103104
104105
105- class Cifti2MetaData (xml . XmlSerializable , MutableMapping ):
106+ class Cifti2MetaData (CaretMetaData ):
106107 """ A list of name-value pairs
107108
108109 * Description - Provides a simple method for user-supplied metadata that
@@ -121,25 +122,27 @@ class Cifti2MetaData(xml.XmlSerializable, MutableMapping):
121122 ----------
122123 data : list of (name, value) tuples
123124 """
124- def __init__ (self , metadata = None ):
125- self .data = OrderedDict ()
126- if metadata is not None :
127- self .update (metadata )
125+ def __init__ (self , * args , ** kwargs ):
126+ if not args and list (kwargs ) == ["metadata" ]:
127+ md = kwargs .pop ("metadata" )
128+ if not isinstance (md , str ):
129+ warn ("CaretMetaData now has a dict-like interface and will "
130+ "no longer accept the ``metadata`` keyword argument in "
131+ "NiBabel 6.0. See ``pydoc dict`` for initialization options." ,
132+ FutureWarning , stacklevel = 2 )
133+ if md is not None :
134+ args = (md ,)
135+ if args == (None ,):
136+ warn ("CaretMetaData now has a dict-like interface and will no longer "
137+ "accept the positional argument ``None`` in NiBabel 6.0. "
138+ "See ``pydoc dict`` for initialization options." ,
139+ FutureWarning , stacklevel = 2 )
140+ args = ()
141+ super ().__init__ (* args , ** kwargs )
128142
129- def __getitem__ (self , key ):
130- return self .data [key ]
131-
132- def __setitem__ (self , key , value ):
133- self .data [key ] = value
134-
135- def __delitem__ (self , key ):
136- del self .data [key ]
137-
138- def __len__ (self ):
139- return len (self .data )
140-
141- def __iter__ (self ):
142- return iter (self .data )
143+ @property
144+ def data (self ):
145+ return self ._data
143146
144147 def difference_update (self , metadata ):
145148 """Remove metadata key-value pairs
@@ -159,17 +162,6 @@ def difference_update(self, metadata):
159162 for k in pairs :
160163 del self .data [k ]
161164
162- def _to_xml_element (self ):
163- metadata = xml .Element ('MetaData' )
164-
165- for name_text , value_text in self .data .items ():
166- md = xml .SubElement (metadata , 'MD' )
167- name = xml .SubElement (md , 'Name' )
168- name .text = str (name_text )
169- value = xml .SubElement (md , 'Value' )
170- value .text = str (value_text )
171- return metadata
172-
173165
174166class Cifti2LabelTable (xml .XmlSerializable , MutableMapping ):
175167 r""" CIFTI-2 label table: a sequence of ``Cifti2Label``\s
0 commit comments