25
25
from ..nifti1 import Nifti1Extensions
26
26
from ..nifti2 import Nifti2Image , Nifti2Header
27
27
from ..arrayproxy import reshape_dataobj
28
+ from ..caret import CaretMetaData
28
29
from warnings import warn
29
30
30
31
@@ -102,7 +103,7 @@ def _underscore(string):
102
103
return re .sub (r'([a-z0-9])([A-Z])' , r'\1_\2' , string ).lower ()
103
104
104
105
105
- class Cifti2MetaData (xml . XmlSerializable , MutableMapping ):
106
+ class Cifti2MetaData (CaretMetaData ):
106
107
""" A list of name-value pairs
107
108
108
109
* Description - Provides a simple method for user-supplied metadata that
@@ -121,25 +122,27 @@ class Cifti2MetaData(xml.XmlSerializable, MutableMapping):
121
122
----------
122
123
data : list of (name, value) tuples
123
124
"""
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 )
128
142
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
143
146
144
147
def difference_update (self , metadata ):
145
148
"""Remove metadata key-value pairs
@@ -159,17 +162,6 @@ def difference_update(self, metadata):
159
162
for k in pairs :
160
163
del self .data [k ]
161
164
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
-
173
165
174
166
class Cifti2LabelTable (xml .XmlSerializable , MutableMapping ):
175
167
r""" CIFTI-2 label table: a sequence of ``Cifti2Label``\s
0 commit comments