Skip to content

Commit 6f3483e

Browse files
authored
always set metadata version to current implemented specification (#67)
1 parent 0e5ade7 commit 6f3483e

File tree

1 file changed

+24
-10
lines changed

1 file changed

+24
-10
lines changed

sigmf/sigmffile.py

Lines changed: 24 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
SIGMF_METADATA_EXT,
2626
SigMFArchive,
2727
)
28-
from .error import SigMFAccessError, SigMFFileError
28+
from .error import SigMFAccessError, SigMFError, SigMFFileError
2929
from .utils import dict_merge
3030

3131

@@ -45,7 +45,7 @@ def __repr__(self):
4545
return f"SigMFFile({self})"
4646

4747
def __iter__(self):
48-
'''special method to iterate through samples'''
48+
"""special method to iterate through samples"""
4949
self.iter_position = 0
5050
return self
5151

@@ -182,14 +182,7 @@ def __init__(self, metadata=None, data_file=None, global_info=None, skip_checksu
182182
self._memmap = None
183183
self.is_complex_data = False # numpy.iscomplexobj(self._memmap) is not adequate for fixed-point complex case
184184

185-
if metadata is None:
186-
self._metadata = {self.GLOBAL_KEY: {}, self.CAPTURE_KEY: [], self.ANNOTATION_KEY: []}
187-
self._metadata[self.GLOBAL_KEY][self.NUM_CHANNELS_KEY] = 1
188-
self._metadata[self.GLOBAL_KEY][self.VERSION_KEY] = __specification__
189-
elif isinstance(metadata, dict):
190-
self._metadata = metadata
191-
else:
192-
self._metadata = json.loads(metadata)
185+
self.set_metadata(metadata)
193186
if global_info is not None:
194187
self.set_global_info(global_info)
195188
if data_file is not None:
@@ -271,6 +264,27 @@ def get_schema(self):
271264
assert isinstance(self.schema, dict)
272265
return self.schema
273266

267+
def set_metadata(self, metadata):
268+
"""
269+
Read provided metadata as either None (empty), string, bytes, or dictionary.
270+
"""
271+
if metadata is None:
272+
# Create empty
273+
self._metadata = {self.GLOBAL_KEY: {}, self.CAPTURE_KEY: [], self.ANNOTATION_KEY: []}
274+
elif isinstance(metadata, dict):
275+
self._metadata = metadata
276+
elif isinstance(metadata, (str, bytes)):
277+
self._metadata = json.loads(metadata)
278+
else:
279+
raise SigMFError("Unable to interpret provided metadata.")
280+
281+
# if num_channels missing, default to 1
282+
if self.get_global_field(self.NUM_CHANNELS_KEY) is None:
283+
self.set_global_field(self.NUM_CHANNELS_KEY, 1)
284+
285+
# set specification version to current implemented version
286+
self.set_global_field(self.VERSION_KEY, __specification__)
287+
274288
def set_global_info(self, new_global):
275289
"""
276290
Overwrite the global info with a new dictionary.

0 commit comments

Comments
 (0)