def test_ncname(self): self.assertEqual('A123', NCName('A123')) x = NCName('A1.B_C-') self.assertEqual('A1.B_C-', x) self.assertIsInstance(x, str) self.assertIsInstance(x, NCName) self.assertEqual(x, NCName(x)) x = str(x) self.assertIsInstance(x, str) self.assertFalse(isinstance(x, NCName)) with self.assertRaises(ValueError): NCName('1') with self.assertRaises(ValueError): NCName('A12!')
def _fix_elements(self): super()._fix_elements() self.id_prefixes = [ v if isinstance(v, NCName) else NCName(v) for v in self.id_prefixes ] if not isinstance(self.name, ElementName): self.name = ElementName(self.name) for k, v in self.local_names.items(): if not isinstance(v, LocalName): self.local_names[k] = LocalName(k, v) self.mappings = [ v if isinstance(v, URIorCURIE) else URIorCURIE(v) for v in self.mappings ] for k, v in self.alt_descriptions.items(): if not isinstance(v, AltDescription): self.alt_descriptions[k] = AltDescription(k, v) self.examples = [ v if isinstance(v, Example) else Example(**v) for v in self.examples ] self.in_subset = [ v if isinstance(v, SubsetDefinitionName) else SubsetDefinitionName(v) for v in self.in_subset ] if self.from_schema is not None and not isinstance( self.from_schema, URI): self.from_schema = URI(self.from_schema) self.see_also = [ v if isinstance(v, URIorCURIE) else URIorCURIE(v) for v in self.see_also ]
def __setitem__(self, key, value): k = NCName(key) v = Namespace(str(value)) if k in self: if self[k] != v: raise ValueError(f"Namespace {k} is already mapped to {self[k]}") else: super().__setitem__(k, v)
def __post_init__(self, **kwargs: Dict[str, Any]): self.id_prefixes = [ v if isinstance(v, NCName) else NCName(v) for v in self.id_prefixes ] if self.name is None: raise ValueError(f"name must be supplied") if not isinstance(self.name, ElementName): self.name = ElementName(self.name) if self.definition_uri is not None and not isinstance( self.definition_uri, URIorCURIE): self.definition_uri = URIorCURIE(self.definition_uri) for k, v in self.local_names.items(): if not isinstance(v, LocalName): self.local_names[k] = LocalName(k, v) self.mappings = [ v if isinstance(v, URIorCURIE) else URIorCURIE(v) for v in self.mappings ] for k, v in self.alt_descriptions.items(): if not isinstance(v, AltDescription): self.alt_descriptions[k] = AltDescription(k, v) self.examples = [ v if isinstance(v, Example) else Example(**v) for v in self.examples ] self.in_subset = [ v if isinstance(v, SubsetDefinitionName) else SubsetDefinitionName(v) for v in self.in_subset ] if self.from_schema is not None and not isinstance( self.from_schema, URI): self.from_schema = URI(self.from_schema) self.see_also = [ v if isinstance(v, URIorCURIE) else URIorCURIE(v) for v in self.see_also ] self.exact_mappings = [ v if isinstance(v, URIorCURIE) else URIorCURIE(v) for v in self.exact_mappings ] self.close_mappings = [ v if isinstance(v, URIorCURIE) else URIorCURIE(v) for v in self.close_mappings ] self.related_mappings = [ v if isinstance(v, URIorCURIE) else URIorCURIE(v) for v in self.related_mappings ] if self.deprecated_element_has_exact_replacement is not None and not isinstance( self.deprecated_element_has_exact_replacement, URIorCURIE): self.deprecated_element_has_exact_replacement = URIorCURIE( self.deprecated_element_has_exact_replacement) if self.deprecated_element_has_possible_replacement is not None and not isinstance( self.deprecated_element_has_possible_replacement, URIorCURIE): self.deprecated_element_has_possible_replacement = URIorCURIE( self.deprecated_element_has_possible_replacement) super().__post_init__(**kwargs)
def __post_init__(self, **kwargs: Dict[str, Any]): if self.id is None: raise ValueError(f"id must be supplied") if not isinstance(self.id, C1Id): self.id = C1Id(self.id) if self.hasCurie is not None and not isinstance(self.hasCurie, Curie): self.hasCurie = Curie(self.hasCurie) if self.hasURI is not None and not isinstance(self.hasURI, URI): self.hasURI = URI(self.hasURI) if self.hasNcName is not None and not isinstance( self.hasNcName, NCName): self.hasNcName = NCName(self.hasNcName) if self.id2 is not None and not isinstance(self.id2, NodeIdentifier): self.id2 = NodeIdentifier(self.id2) super().__post_init__(**kwargs)
def __post_init__(self, **kwargs: Dict[str, Any]): if self.default_prefix is None: self.default_prefix = sfx(str(self.id)) if self.name is None: raise ValueError(f"name must be supplied") if not isinstance(self.name, SchemaDefinitionName): self.name = SchemaDefinitionName(self.name) if self.id is None: raise ValueError(f"id must be supplied") if not isinstance(self.id, URI): self.id = URI(self.id) self.imports = [ v if isinstance(v, URIorCURIE) else URIorCURIE(v) for v in self.imports ] for k, v in self.prefixes.items(): if not isinstance(v, Prefix): self.prefixes[k] = Prefix(k, v) self.emit_prefixes = [ v if isinstance(v, NCName) else NCName(v) for v in self.emit_prefixes ] if self.default_range is not None and not isinstance( self.default_range, TypeDefinitionName): self.default_range = TypeDefinitionName(self.default_range) for k, v in self.subsets.items(): if not isinstance(v, SubsetDefinition): self.subsets[k] = SubsetDefinition(name=k, **({} if v is None else v)) for k, v in self.types.items(): if not isinstance(v, TypeDefinition): self.types[k] = TypeDefinition(name=k, **({} if v is None else v)) for k, v in self.slots.items(): if not isinstance(v, SlotDefinition): self.slots[k] = SlotDefinition(name=k, **({} if v is None else v)) for k, v in self.classes.items(): if not isinstance(v, ClassDefinition): self.classes[k] = ClassDefinition(name=k, **({} if v is None else v)) if self.source_file_date is not None and not isinstance( self.source_file_date, XSDDateTime): self.source_file_date = XSDDateTime(self.source_file_date) if self.generation_date is not None and not isinstance( self.generation_date, XSDDateTime): self.generation_date = XSDDateTime(self.generation_date) super().__post_init__(**kwargs)
def add_prefixmap(self, map_name: str, include_defaults: bool= True) -> None: """ Add a prefixcommons map. Only prefixes that have not been previously defined are added. :param map_name: prefixcommons map name :param include_defaults: if True, take defaults from the map. :return: """ for k, v in curie_util.read_biocontext(map_name).items(): if not k: if include_defaults and not self._default: self._default = v elif k not in self: if NCName.is_valid(k): self[k] = v else: print(f"Warning: biocontext map {map_name} has illegal prefix: {k}", file=sys.stderr)
def _fix_elements(self): super()._fix_elements() if self.name is not None and not isinstance(self.name, SchemaDefinitionName): self.name = SchemaDefinitionName(self.name) if self.id is not None and not isinstance(self.id, URI): self.id = URI(self.id) self.imports = [ v if isinstance(v, URI) else URI(v) for v in self.imports ] for k, v in self.prefixes.items(): if not isinstance(v, Prefix): self.prefixes[k] = Prefix(k, v) self.emit_prefixes = [ v if isinstance(v, NCName) else NCName(v) for v in self.emit_prefixes ] if self.default_range is not None and not isinstance( self.default_range, DefinitionName): self.default_range = DefinitionName(self.default_range) for k, v in self.subsets.items(): if not isinstance(v, SubsetDefinition): self.subsets[k] = SubsetDefinition(name=k, **({} if v is None else v)) for k, v in self.types.items(): if not isinstance(v, TypeDefinition): self.types[k] = TypeDefinition(name=k, **({} if v is None else v)) for k, v in self.slots.items(): if not isinstance(v, SlotDefinition): self.slots[k] = SlotDefinition(name=k, **({} if v is None else v)) for k, v in self.classes.items(): if not isinstance(v, ClassDefinition): self.classes[k] = ClassDefinition(name=k, **({} if v is None else v)) if self.source_file_date is not None and not isinstance( self.source_file_date, XSDDate): self.source_file_date = XSDDate(self.source_file_date) if self.generation_date is not None and not isinstance( self.generation_date, XSDDate): self.generation_date = XSDDate(self.generation_date)
def uri_for(self, uri_or_curie: Any) -> URIRef: """ Map a curie or URI into a full URIRef. :param uri_or_curie: "NCNAME ':' suffix" or plain URI :return: Corresponding URI """ uri_or_curie = str(uri_or_curie) if '://' in uri_or_curie: return URIRef(uri_or_curie) if ':' in uri_or_curie: prefix, local = str(uri_or_curie).split(':', 1) if not prefix: prefix = self._default_key elif not NCName.is_valid(prefix): raise ValueError(f"Not a valid CURIE: {uri_or_curie}") else: prefix, local = self._base_key, uri_or_curie if prefix not in self: raise ValueError(f"Unknown CURIE prefix: {prefix}") return URIRef(self.join(self[prefix], local))