Skip to content

Commit a17f26f

Browse files
author
Ben Cipollini
committed
Remove XmlBasedImage, xmlbasedimages.py=>xmlutils.py
1 parent 10b6381 commit a17f26f

File tree

3 files changed

+50
-70
lines changed

3 files changed

+50
-70
lines changed

nibabel/gifti/gifti.py

Lines changed: 42 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,8 @@
1212

1313
import numpy as np
1414

15-
from .. import xmlbasedimages as xml
15+
from .. import xmlutils as xml
16+
from ..filebasedimages import FileBasedImage
1617
from ..nifti1 import data_type_codes, xform_codes, intent_codes
1718
from .util import (array_index_order_codes, gifti_encoding_codes,
1819
gifti_endian_codes, KIND2FMT)
@@ -385,7 +386,7 @@ def metadata(self):
385386
return self.meta.metadata
386387

387388

388-
class GiftiImage(xml.XmlBasedImage):
389+
class GiftiImage(xml.XmlSerializable, FileBasedImage):
389390
"""
390391
The Gifti spec suggests using the following suffixes to your
391392
filename when saving each specific type of data:
@@ -564,3 +565,42 @@ def to_xml(self, enc='utf-8'):
564565
return b"""<?xml version="1.0" encoding="UTF-8"?>
565566
<!DOCTYPE GIFTI SYSTEM "http://www.nitrc.org/frs/download.php/115/gifti.dtd">
566567
""" + xml.XmlSerializable.to_xml(self, enc)
568+
569+
def to_file_map(self, file_map=None):
570+
""" Save the current image to the specified file_map
571+
572+
Parameters
573+
----------
574+
file_map : string
575+
576+
Returns
577+
-------
578+
None
579+
"""
580+
if file_map is None:
581+
file_map = self.file_map
582+
f = file_map['image'].get_prepare_fileobj('wb')
583+
f.write(self.to_xml())
584+
585+
@classmethod
586+
def from_file_map(klass, file_map, buffer_size=35000000):
587+
""" Load a Gifti image from a file_map
588+
589+
Parameters
590+
file_map : string
591+
592+
Returns
593+
-------
594+
img : GiftiImage
595+
Returns a GiftiImage
596+
"""
597+
parser = klass.parser(buffer_size=buffer_size)
598+
parser.parse(fptr=file_map['image'].get_prepare_fileobj('rb'))
599+
img = parser.img
600+
return img
601+
602+
@classmethod
603+
def from_filename(klass, filename, buffer_size=35000000):
604+
file_map = klass.filespec_to_file_map(filename)
605+
img = klass.from_file_map(file_map, buffer_size=buffer_size)
606+
return img

nibabel/gifti/parse_gifti_fast.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
from .util import (array_index_order_codes, gifti_encoding_codes,
2323
gifti_endian_codes)
2424
from ..nifti1 import data_type_codes, xform_codes, intent_codes
25-
from ..xmlbasedimages import XmlImageParser
25+
from ..xmlutils import XmlParser
2626

2727

2828
def read_data_block(encoding, endian, ordering, datatype, shape, data):
@@ -72,12 +72,14 @@ def read_data_block(encoding, endian, ordering, datatype, shape, data):
7272
return newarr
7373

7474

75-
class GiftiImageParser(XmlImageParser):
75+
class GiftiImageParser(XmlParser):
7676

7777
def __init__(self, encoding=None, buffer_size=35000000, verbose=0):
7878
super(GiftiImageParser, self).__init__(encoding=encoding,
7979
buffer_size=buffer_size,
8080
verbose=verbose)
81+
# output
82+
self.img = None
8183

8284
# finite state machine stack
8385
self.fsm_state = []
@@ -333,7 +335,6 @@ class Outputter(GiftiImageParser):
333335
@np.deprecate_with_doc("Use GiftiImageParser instead.")
334336
def __init__(self, *args, **kwargs):
335337
super(Outputter, self).__init__(*args, **kwargs)
336-
self.img = None
337338

338339

339340
@np.deprecate_with_doc("Use GiftiImageParser.parse() instead.")

nibabel/xmlbasedimages.py renamed to nibabel/xmlutils.py

Lines changed: 4 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,8 @@ class XmlBasedHeader(FileBasedHeader, XmlSerializable):
3535
pass
3636

3737

38-
class XmlImageParser(object):
39-
""" Base class for defining how to parse xml-based images.
38+
class XmlParser(object):
39+
""" Base class for defining how to parse xml-based image snippets.
4040
4141
Image-specific parsers should define:
4242
StartElementHandler
@@ -62,10 +62,9 @@ def __init__(self, encoding=None, buffer_size=35000000, verbose=0):
6262
verbose : int, optional
6363
amount of output during parsing (0=silent, by default).
6464
"""
65-
self.encoding=encoding
65+
self.encoding = encoding
6666
self.buffer_size = buffer_size
6767
self.verbose = verbose
68-
self.img = None
6968

7069
def _create_parser(self):
7170
"""Internal function that allows subclasses to mess
@@ -88,11 +87,7 @@ def parse(self, string=None, fname=None, fptr=None):
8887
file name of an xml document.
8988
9089
fptr : file pointer
91-
open file pointer to an xml document
92-
93-
Returns
94-
-------
95-
img : XmlBasedImage
90+
open file pointer to an xml documents
9691
"""
9792
if int(string is not None) + int(fptr is not None) + int(fname is not None) != 1:
9893
raise ValueError('Exactly one of fptr, fname, string must be specified.')
@@ -107,12 +102,6 @@ def parse(self, string=None, fname=None, fptr=None):
107102
setattr(parser, name, getattr(self, name))
108103
parser.ParseFile(fptr)
109104

110-
if fname is not None:
111-
fptr.close()
112-
self.img.set_filename(fname)
113-
114-
return self.img
115-
116105
def StartElementHandler(self, name, attrs):
117106
raise NotImplementedError
118107

@@ -121,53 +110,3 @@ def EndElementHandler(self, name):
121110

122111
def CharacterDataHandler(self, data):
123112
raise NotImplementedError
124-
125-
126-
class XmlBasedImage(FileBasedImage, XmlSerializable):
127-
"""Basic convenience wrapper around FileBasedImage and XmlSerializable.
128-
129-
Properties
130-
----------
131-
parser : XmlImageParser
132-
class name of the XML parser associated with this image type.
133-
"""
134-
135-
parser = XmlImageParser
136-
header = XmlBasedHeader
137-
138-
def to_file_map(self, file_map=None):
139-
""" Save the current image to the specified file_map
140-
141-
Parameters
142-
----------
143-
file_map : string
144-
145-
Returns
146-
-------
147-
None
148-
"""
149-
if file_map is None:
150-
file_map = self.file_map
151-
f = file_map['image'].get_prepare_fileobj('wb')
152-
f.write(self.to_xml())
153-
154-
@classmethod
155-
def from_file_map(klass, file_map, buffer_size=35000000):
156-
""" Load a Gifti image from a file_map
157-
158-
Parameters
159-
file_map : string
160-
161-
Returns
162-
-------
163-
img : GiftiImage
164-
Returns a GiftiImage
165-
"""
166-
img = klass.parser(buffer_size=buffer_size).parse(
167-
fptr=file_map['image'].get_prepare_fileobj('rb'))
168-
return img
169-
170-
@classmethod
171-
def from_filename(klass, filename, buffer_size=35000000):
172-
file_map = klass.filespec_to_file_map(filename)
173-
return klass.from_file_map(file_map, buffer_size=buffer_size)

0 commit comments

Comments
 (0)