def test_load_namespace_unversioned_version(self): """Test that reading a namespace file with version=unversioned string works but raises a warning.""" # create namespace with version key (remove it later) ns_dict = { 'doc': 'a test namespace', 'name': 'test_ns', 'schema': [ {'source': self.specs_path} ], 'version': '0.0.1' } namespace = SpecNamespace.build_namespace(**ns_dict) namespace['version'] = str(SpecNamespace.UNVERSIONED) # work around lack of setter to remove version key # write the namespace to file without version key to_dump = {'namespaces': [namespace]} with open(self.namespace_path, 'w') as tmp: yaml.safe_dump(json.loads(json.dumps(to_dump)), tmp, default_flow_style=False) # load the namespace from file ns_catalog = NamespaceCatalog() msg = "Loaded namespace 'test_ns' is unversioned. Please notify the extension author." with self.assertWarnsWith(UserWarning, msg): ns_catalog.load_namespaces(self.namespace_path) self.assertEqual(ns_catalog.get_namespace('test_ns').version, SpecNamespace.UNVERSIONED)
def test_load_namespace_none_version(self): """Test that reading a namespace file without a version works but raises a warning.""" # create namespace with version key (remove it later) ns_dict = { 'doc': 'a test namespace', 'name': 'test_ns', 'schema': [{ 'source': self.specs_path }], 'version': '0.0.1' } namespace = SpecNamespace.build_namespace(**ns_dict) namespace[ 'version'] = None # work around lack of setter to remove version key # write the namespace to file without version key to_dump = {'namespaces': [namespace]} with open(self.namespace_path, 'w') as tmp: yaml_obj = yaml.YAML(typ='safe', pure=True) yaml_obj.default_flow_style = False yaml_obj.dump(json.loads(json.dumps(to_dump)), tmp) # load the namespace from file ns_catalog = NamespaceCatalog() msg = ( "Loaded namespace 'test_ns' is missing the required key 'version'. Version will be set to " "'%s'. Please notify the extension author." % SpecNamespace.UNVERSIONED) with self.assertWarnsWith(UserWarning, msg): ns_catalog.load_namespaces(self.namespace_path) self.assertEqual( ns_catalog.get_namespace('test_ns').version, SpecNamespace.UNVERSIONED)
def test_get_namespace_missing_version(self): """Test that SpecNamespace.version returns the constant for a missing version if version gets removed.""" # create namespace with version key (remove it later) ns_dict = { 'doc': 'a test namespace', 'name': 'test_ns', 'schema': [ {'source': self.specs_path} ], 'version': '0.0.1' } namespace = SpecNamespace.build_namespace(**ns_dict) namespace['version'] = None # work around lack of setter to remove version key self.assertEqual(namespace.version, SpecNamespace.UNVERSIONED)
def test_build_namespace_missing_version(self): """Test that building/creating a SpecNamespace without a version works but raises a warning.""" # create namespace without version key ns_dict = { 'doc': 'a test namespace', 'name': 'test_ns', 'schema': [ {'source': self.specs_path} ], } msg = ("Loaded namespace 'test_ns' is missing the required key 'version'. Version will be set to " "'%s'. Please notify the extension author." % SpecNamespace.UNVERSIONED) with self.assertWarnsWith(UserWarning, msg): namespace = SpecNamespace.build_namespace(**ns_dict) self.assertEqual(namespace.version, SpecNamespace.UNVERSIONED)
def setUp(self): self.attributes = [ AttributeSpec('attribute1', 'my first attribute', 'text'), AttributeSpec('attribute2', 'my second attribute', 'text') ] self.dset1_attributes = [ AttributeSpec('attribute3', 'my third attribute', 'text'), AttributeSpec('attribute4', 'my fourth attribute', 'text') ] self.dset2_attributes = [ AttributeSpec('attribute5', 'my fifth attribute', 'text'), AttributeSpec('attribute6', 'my sixth attribute', 'text') ] self.datasets = [ DatasetSpec('my first dataset', # noqa: F405 'int', name='dataset1', attributes=self.dset1_attributes, linkable=True), DatasetSpec('my second dataset', # noqa: F405 'int', name='dataset2', dims=(None, None), attributes=self.dset2_attributes, linkable=True, data_type_def='VoltageArray') ] self.spec = GroupSpec('A test group', # noqa: F405 name='root_constructor_datatype', datasets=self.datasets, attributes=self.attributes, linkable=False, data_type_def='EphysData') dset1_attributes_ext = [ AttributeSpec('dset1_extra_attribute', 'an extra attribute for the first dataset', 'text') ] self.ext_datasets = [ DatasetSpec('my first dataset extension', # noqa: F405 'int', name='dataset1', attributes=dset1_attributes_ext, linkable=True), ] self.ext_attributes = [ AttributeSpec('ext_extra_attribute', 'an extra attribute for the group', 'text'), ] self.ext_spec = GroupSpec('A test group extension', # noqa: F405 name='root_constructor_datatype', datasets=self.ext_datasets, attributes=self.ext_attributes, linkable=False, data_type_inc='EphysData', data_type_def='SpikeData') to_dump = {'groups': [self.spec, self.ext_spec]} self.specs_path = 'test_load_namespace.specs.yaml' self.namespace_path = 'test_load_namespace.namespace.yaml' with open(self.specs_path, 'w') as tmp: yaml.safe_dump(json.loads(json.dumps(to_dump)), tmp, default_flow_style=False) ns_dict = { 'doc': 'a test namespace', 'name': self.NS_NAME, 'schema': [ {'source': self.specs_path} ] } self.namespace = SpecNamespace.build_namespace(**ns_dict) # noqa: F405 to_dump = {'namespaces': [self.namespace]} with open(self.namespace_path, 'w') as tmp: yaml.safe_dump(json.loads(json.dumps(to_dump)), tmp, default_flow_style=False) self.ns_catalog = NamespaceCatalog() # noqa: F405