diff --git a/pyproject.toml b/pyproject.toml index b6c302755..13bf48852 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -110,9 +110,6 @@ ignore_missing_imports = true # TODO: deac show_column_numbers = true strict = true exclude = [ - "src/dsp_tools/commands/xmlupload/models/value.py", # TODO: activate this - "src/dsp_tools/commands/xmlupload/models/permission.py", # TODO: activate this - "src/dsp_tools/commands/xmlupload/models/xmlresource.py", # TODO: activate this "src/dsp_tools/models/helpers.py", # TODO: activate this "src/dsp_tools/models/langstring.py", # TODO: activate this "src/dsp_tools/commands/project/models/group.py", # TODO: activate this diff --git a/src/dsp_tools/commands/excel2xml/excel2xml_lib.py b/src/dsp_tools/commands/excel2xml/excel2xml_lib.py index 3ddeab23a..601075462 100644 --- a/src/dsp_tools/commands/excel2xml/excel2xml_lib.py +++ b/src/dsp_tools/commands/excel2xml/excel2xml_lib.py @@ -16,10 +16,10 @@ from lxml.builder import E # pylint: disable=no-name-in-module from dsp_tools.commands.excel2xml.propertyelement import PropertyElement -from dsp_tools.commands.xmlupload.models.value import UriValue from dsp_tools.models.exceptions import BaseError from dsp_tools.models.helpers import DateTimeStamp from dsp_tools.utils.shared import check_notna, simplify_name, validate_xml_against_schema +from dsp_tools.utils.uri_util import is_uri xml_namespace_map = {None: "https://dasch.swiss/schema", "xsi": "http://www.w3.org/2001/XMLSchema-instance"} @@ -1419,13 +1419,11 @@ def make_uri_prop( # check value type for val in values: - try: - UriValue(str(val.value)) - except BaseError: + if not is_uri(str(val.value)): raise BaseError( f"Failed validation in resource '{calling_resource}', property '{name}': " f"'{val.value}' is not a valid URI." - ) from None + ) # make xml structure of the valid values prop_ = etree.Element( diff --git a/src/dsp_tools/commands/xmlupload/models/permission.py b/src/dsp_tools/commands/xmlupload/models/permission.py index 98e2a3814..c09ab13b7 100644 --- a/src/dsp_tools/commands/xmlupload/models/permission.py +++ b/src/dsp_tools/commands/xmlupload/models/permission.py @@ -1,4 +1,5 @@ # pylint: disable=missing-class-docstring,missing-function-docstring +from __future__ import annotations from enum import Enum, unique from typing import Optional, Union @@ -14,7 +15,7 @@ class PermissionValue(Enum): D = 8 CR = 16 - def __str__(self): + def __str__(self) -> str: tmp = { 1: "RV", 2: "V", @@ -26,7 +27,7 @@ def __str__(self): class Permissions: - _permissions: Union[dict[PermissionValue, list[str]], None] + _permissions: dict[PermissionValue, list[str]] def __init__(self, permissions: Optional[dict[PermissionValue, list[str]]] = None): if permissions is None: @@ -57,7 +58,7 @@ def __str__(self) -> str: tmpstr += str(permission) + " " + ",".join(groups) return tmpstr - def add(self, key: PermissionValue, val: str): + def add(self, key: PermissionValue, val: str) -> None: if self._permissions.get(key) is None: self._permissions[key] = [val] else: @@ -72,7 +73,7 @@ def toJsonLdObj(self) -> str: return tmpstr @classmethod - def fromString(cls, permstr: str): + def fromString(cls, permstr: str) -> Permissions: tmpstr = permstr.split("|") permissions: dict[PermissionValue, list[str]] = {} for s in tmpstr: diff --git a/src/dsp_tools/commands/xmlupload/models/value.py b/src/dsp_tools/commands/xmlupload/models/value.py index 1d0afbc65..dfb6e35aa 100644 --- a/src/dsp_tools/commands/xmlupload/models/value.py +++ b/src/dsp_tools/commands/xmlupload/models/value.py @@ -1,35 +1,28 @@ -# pylint: disable=missing-class-docstring,missing-function-docstring from __future__ import annotations from dataclasses import dataclass -from typing import Any, Optional, Union import regex -from dsp_tools.commands.project.models.listnode import ListNode from dsp_tools.commands.xmlupload.iri_resolver import IriResolver -from dsp_tools.commands.xmlupload.models.permission import Permissions, PermissionValue from dsp_tools.models.exceptions import BaseError -from dsp_tools.models.helpers import Actions, IriTest -from dsp_tools.models.langstring import LangString @dataclass -class KnoraStandoffXml: - """Used to handle XML strings for standoff markup""" +class FormattedTextValue: + """Represents a formatted text value with standard standoff markup""" xmlstr: str def as_xml(self) -> str: + """Returns the formatted text value as XML (with XML declaration and wrapped in a element)""" return f'\n{self.xmlstr}' def find_internal_ids(self) -> set[str]: + """Returns a set of all internal ids found in the text value""" return set(regex.findall(pattern='href="IRI:(.*?):IRI"', string=self.xmlstr)) - def replace(self, fromStr: str, toStr: str) -> None: - self.xmlstr = self.xmlstr.replace(fromStr, toStr) - - def with_iris(self, iri_resolver: IriResolver) -> KnoraStandoffXml: + def with_iris(self, iri_resolver: IriResolver) -> FormattedTextValue: """ Returns a copy of this object, where all internal ids are replaced with iris according to the provided mapping. """ @@ -39,995 +32,4 @@ def with_iris(self, iri_resolver: IriResolver) -> KnoraStandoffXml: if not iri: raise BaseError(f"Internal ID {internal_id} could not be resolved to an IRI") s = s.replace(f'href="IRI:{internal_id}:IRI"', f'href="{iri}"') - return KnoraStandoffXml(s) - - -class Value: - """ - Represents a value - """ - - _iri: Optional[str] - _comment: Optional[str] - _permissions: Optional[Permissions] - _upermission: Optional[PermissionValue] - _ark_url: Optional[str] - _vark_url: Optional[str] - - def __init__( - self, - iri: Optional[str] = None, - comment: Optional[LangString] = None, - permissions: Optional[Permissions] = None, - upermission: Optional[PermissionValue] = None, - ark_url: Optional[str] = None, - vark_url: Optional[str] = None, - ): - self._iri = iri - self._comment = str(comment) if comment else None - self._permissions = permissions - self._upermission = upermission - self._ark_url = ark_url - self._vark_url = vark_url - - def __str__(self): - if self._iri: - tmpstr = "(iri: " + self._iri - else: - tmpstr = "(iri: -" - if self._permissions: - tmpstr = ", permissions: " + str(self._permissions) - if self._comment: - tmpstr += ", comment: " + self._comment - tmpstr += ")" - return tmpstr - - @property - def iri(self) -> str: - return self._iri - - @property - def ark_url(self) -> str: - return self._ark_url - - @property - def vark_url(self) -> str: - return self._vark_url - - @property - def permissions(self) -> str: - return self._permissions - - @property - def upermission(self) -> str: - return self._upermission - - @property - def comment(self): - return self._comment - - def toJsonLdObj(self, action: Actions) -> dict[str, Any]: - tmp = {} - if action == Actions.Create: - if self._permissions: - tmp["knora-api:hasPermissions"] = self.permissions.toJsonLdObj() - if self._comment: - tmp["knora-api:valueHasComment"] = self._comment - return tmp - - @staticmethod - def get_typed_value(key: str, jsonld_obj: Any) -> Union[str, float]: - try: - tmp = jsonld_obj[key] - if tmp.get("@type") == "xsd:decimal": - result = float(tmp["@value"]) - elif tmp.get("@type") == "xsd:integer": - result = int(tmp["@value"]) - elif tmp.get("@type") == "xsd:boolean": - result = bool(tmp["@value"]) - elif tmp.get("@type") == "xsd:anyURI": - result = str(tmp["@value"]) - elif tmp.get("@type") == "xsd:dateTimeStamp": - result = str(tmp["@value"]) - elif tmp.get("@id"): - result = tmp["@id"] - else: - raise BaseError(f'Invalid data type in JSON-LD: "{tmp["@type"]}') - return result - except KeyError as kerr: - raise BaseError("Error in JSON-LD returned!") from kerr - - @staticmethod - def getFromJsonLd(jsonld_obj) -> dict[str, Any]: - return { - "iri": jsonld_obj.get("@id"), - "comment": jsonld_obj.get("knora-api:valueHasComment"), - "ark_url": Value.get_typed_value("knora-api:arkUrl", jsonld_obj), - "vark_url": Value.get_typed_value("knora-api:versionArkUrl", jsonld_obj), - "permissions": Permissions.fromString(jsonld_obj.get("knora-api:hasPermissions")), - "upermission": PermissionValue[jsonld_obj.get("knora-api:userHasPermission", jsonld_obj)], - } - - -class TextValue(Value): - _value: Union[str, KnoraStandoffXml] - _mapping: str - - def __init__( - self, - value: Union[str, KnoraStandoffXml], - mapping: Optional[str] = None, - comment: Optional[LangString] = None, - permissions: Optional[Permissions] = None, - upermission: Optional[PermissionValue] = None, - iri: Optional[str] = None, - ark_url: Optional[str] = None, - vark_url: Optional[str] = None, - ): - self._value = value - self._mapping = mapping - super().__init__( - iri=iri, - comment=comment, - permissions=permissions, - upermission=upermission, - ark_url=ark_url, - vark_url=vark_url, - ) - - @property - def value(self) -> str: - return self._value - - @property - def mapping(self) -> str: - return self._mapping - - @classmethod - def fromJsonLdObj(cls, jsonld_obj: Any) -> dict[str, Any]: - tmp = Value.getFromJsonLd(jsonld_obj) - - if jsonld_obj.get("knora-api:textValueAsXml") is not None: - tmp["mapping"] = jsonld_obj.get("knora-api:textValueHasMapping") - tmp["value"] = jsonld_obj.get("knora-api:textValueAsXml") - else: - tmp["mapping"] = None - tmp["value"] = jsonld_obj.get("knora-api:valueAsString") - return cls(**tmp) - - def toJsonLdObj(self, action: Actions) -> dict[str, Any]: - tmp = super().toJsonLdObj(action) - if action == Actions.Create: - tmp["@type"] = "knora-api:TextValue" - if isinstance(self._value, KnoraStandoffXml): - tmp["knora-api:textValueAsXml"] = self._value - tmp["knora-api:textValueHasMapping"] = { - "@id": "http://rdfh.ch/standoff/mappings/StandardMapping" - if self._mapping is None - else self._mapping - } - else: - tmp["knora-api:valueAsString"] = str(self._value) - return tmp - - def __str__(self) -> str: - return str(self._value) - - -class ColorValue(Value): - _value: str - - def __init__( - self, - value: str, - comment: Optional[LangString] = None, - permissions: Optional[Permissions] = None, - upermission: Optional[PermissionValue] = None, - iri: Optional[str] = None, - ark_url: Optional[str] = None, - vark_url: Optional[str] = None, - ): - # - # a color value as used in HTML (e.g. "#aaccff" - # - m = regex.match("^#(?:[0-9a-fA-F]{3}){1,2}$", str(value)) - if not m: - raise BaseError("Invalid ColorValue format! " + str(value)) - self._value = str(value) - super().__init__( - iri=iri, - comment=comment, - permissions=permissions, - upermission=upermission, - ark_url=ark_url, - vark_url=vark_url, - ) - - @property - def value(self) -> str: - return self._value - - @classmethod - def fromJsonLdObj(cls, jsonld_obj: Any) -> dict[str, Any]: - tmp = Value.getFromJsonLd(jsonld_obj) - tmp["value"] = jsonld_obj.get("knora-api:colorValueAsColor") - return cls(**tmp) - - def toJsonLdObj(self, action: Actions) -> dict[str, Any]: - tmp = super().toJsonLdObj(action) - if action == Actions.Create: - tmp["@type"] = "knora-api:ColorValue" - tmp["knora-api:colorValueAsColor"] = self._value - return tmp - - def __str__(self) -> str: - return self._value + " " + super().__str__() - - -class DateValue(Value): # pylint: disable=too-many-instance-attributes - _calendar: str - _e1: str - _y1: int - _m1: int - _d1: int - _e2: str - _y2: int - _m2: int - _d2: int - - def __init__( - self, - value: str, - comment: Optional[LangString] = None, - permissions: Optional[Permissions] = None, - upermission: Optional[PermissionValue] = None, - iri: Optional[str] = None, - ark_url: Optional[str] = None, - vark_url: Optional[str] = None, - ): - # - # A DSP date value - # - m = regex.match( - r"^(GREGORIAN:|JULIAN:)?(CE:|BCE:)?(\d{4})(-\d{1,2})?(-\d{1,2})?" - r"((:CE|:BCE)?(:\d{4})(-\d{1,2})?(-\d{1,2})?)?$", - str(value), - ) - if not m: - raise BaseError(f'Invalid date format: "{value}"!') - dp = m.groups() - self._calendar = "GREGORIAN" if dp[0] is None else dp[0].strip("-: ") - self._e1 = "CE" if dp[1] is None else dp[1].strip("-: ") - self._y1 = None if dp[2] is None else int(dp[2].strip("-: ")) - self._m1 = None if dp[3] is None else int(dp[3].strip("-: ")) - self._d1 = None if dp[4] is None else int(dp[4].strip("-: ")) - self._e2 = "CE" if dp[6] is None else dp[6].strip("-: ") - self._y2 = None if dp[7] is None else int(dp[7].strip("-: ")) - self._m2 = None if dp[8] is None else int(dp[8].strip("-: ")) - self._d2 = None if dp[9] is None else int(dp[9].strip("-: ")) - if self._y1 is None: - raise BaseError("Invalid date format! " + str(value)) - - super().__init__( - iri=iri, - comment=comment, - permissions=permissions, - upermission=upermission, - ark_url=ark_url, - vark_url=vark_url, - ) - - @property - def value(self) -> str: - datestr = "" - if self._calendar: - datestr += self._calendar + ":" - if self._e1: - datestr += self._e1 + ":" - if self._y1: - datestr += str(self._y1) + "-" - if self._m1: - datestr += str(self._m1) + "-" - if self._d1: - datestr += str(self._d1) - if self._e2: - datestr += ":" + str(self._e2) - if self._y2: - datestr += ":" + str(self._y2) - if self._m2: - datestr += "-" + str(self._m2) - if self._d2: - datestr += "-" + str(self._d2) - return datestr - - @classmethod - def fromJsonLdObj(cls, jsonld_obj: Any) -> dict[str, Any]: - tmp = Value.getFromJsonLd(jsonld_obj) - - datestr = "" - datestr += ( - jsonld_obj.get("knora-api:dateValueHasCalendar") + ":" - if jsonld_obj.get("knora-api:dateValueHasCalendar") is not None - else "" - ) - datestr += ( - jsonld_obj.get("knora-api:dateValueHasStartEra") + ":" - if jsonld_obj.get("knora-api:dateValueHasStartEra") is not None - else "" - ) - datestr += ( - str(jsonld_obj.get("knora-api:dateValueHasStartYear")) - if jsonld_obj.get("knora-api:dateValueHasStartYear") is not None - else "" - ) - datestr += ( - "-" + str(jsonld_obj.get("knora-api:dateValueHasStartMonth")) - if jsonld_obj.get("knora-api:dateValueHasStartMonth") is not None - else "" - ) - datestr += ( - "-" + str(jsonld_obj.get("knora-api:dateValueHasStartDay")) - if jsonld_obj.get("knora-api:dateValueHasStartDay") is not None - else "" - ) - datestr += ( - ":" + jsonld_obj.get("knora-api:dateValueHasEndEra") - if jsonld_obj.get("knora-api:dateValueHasEndEra") is not None - else "" - ) - datestr += ( - ":" + str(jsonld_obj.get("knora-api:dateValueHasEndYear")) - if jsonld_obj.get("knora-api:dateValueHasEndYear") is not None - else "" - ) - datestr += ( - "-" + str(jsonld_obj.get("knora-api:dateValueHasEndMonth")) - if jsonld_obj.get("knora-api:dateValueHasEndMonth") is not None - else "" - ) - datestr += ( - "-" + str(jsonld_obj.get("knora-api:dateValueHasEndDay")) - if jsonld_obj.get("knora-api:dateValueHasEndDay") is not None - else "" - ) - tmp["value"] = datestr - return cls(**tmp) - - def toJsonLdObj(self, action: Actions) -> dict[str, Any]: - tmp = super().toJsonLdObj(action) - if action == Actions.Create: - tmp["@type"] = "knora-api:DateValue" - tmp["knora-api:dateValueHasCalendar"] = self._calendar - tmp["knora-api:dateValueHasStartEra"] = self._e1 - tmp["knora-api:dateValueHasStartYear"] = self._y1 - if self._m1: - tmp["knora-api:dateValueHasStartMonth"] = self._m1 - if self._d1: - tmp["knora-api:dateValueHasStartDay"] = self._d1 - tmp["knora-api:dateValueHasEndEra"] = self._e2 - if self._y2: - tmp["knora-api:dateValueHasEndYear"] = self._y2 - else: - tmp["knora-api:dateValueHasEndYear"] = self._y1 - if self._m2: - tmp["knora-api:dateValueHasEndMonth"] = self._m2 - if self._d2: - tmp["knora-api:dateValueHasEndDay"] = self._d2 - return tmp - - def __str__(self): - datestr = "" - if self._calendar: - datestr += self._calendar + ":" - if self._e1: - datestr += self._e1 + ":" - if self._y1: - datestr += str(self._y1) + "-" - if self._m1: - datestr += str(self._m1) + "-" - if self._d1: - datestr += str(self._d1) - if self._e2: - datestr += ":" + str(self._e2) - if self._y2: - datestr += ":" + str(self._y2) - if self._m2: - datestr += "-" + str(self._m2) - if self._d2: - datestr += "-" + str(self._d2) - return datestr + " " + super().__str__() - - -class DecimalValue(Value): - _value: float - - def __init__( - self, - value: Union[float, int, str], - comment: Optional[LangString] = None, - permissions: Optional[Permissions] = None, - upermission: Optional[PermissionValue] = None, - iri: Optional[str] = None, - ark_url: Optional[str] = None, - vark_url: Optional[str] = None, - ): - self._value = value - if isinstance(value, str): - m = regex.match(r"^[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?$", value) - if m: - self._value = float(value) - else: - raise BaseError('String does not represent decimal/float number! "' + value + '"') - elif isinstance(value, float): - self._value = value - elif isinstance(value, int): - self._value = float(value) - else: - raise BaseError('String does not represent decimal/float number! "' + value + '"') - super().__init__( - iri=iri, - comment=comment, - permissions=permissions, - upermission=upermission, - ark_url=ark_url, - vark_url=vark_url, - ) - - @property - def value(self) -> float: - return self._value - - @classmethod - def fromJsonLdObj(cls, jsonld_obj: Any) -> dict[str, Any]: - tmp = Value.getFromJsonLd(jsonld_obj) - tmp["value"] = Value.get_typed_value("knora-api:decimalValueAsDecimal", jsonld_obj) - return cls(**tmp) - - def toJsonLdObj(self, action: Actions) -> dict[str, Any]: - tmp = super().toJsonLdObj(action) - if action == Actions.Create: - tmp["@type"] = "knora-api:DecimalValue" - tmp["knora-api:decimalValueAsDecimal"] = {"@type": "xsd:decimal", "@value": str(self._value)} - return tmp - - def __str__(self) -> str: - return str(self._value) + " " + super().__str__() - - -class GeomValue(Value): - _value: str - - def __init__( - self, - value: str, - comment: Optional[LangString] = None, - permissions: Optional[Permissions] = None, - upermission: Optional[PermissionValue] = None, - iri: Optional[str] = None, - ark_url: Optional[str] = None, - vark_url: Optional[str] = None, - ): - self._value = str(value) - super().__init__( - iri=iri, - comment=comment, - permissions=permissions, - upermission=upermission, - ark_url=ark_url, - vark_url=vark_url, - ) - - @property - def value(self) -> str: - return self._value - - @classmethod - def fromJsonLdObj(cls, jsonld_obj: Any) -> dict[str, Any]: - tmp = Value.getFromJsonLd(jsonld_obj) - tmp["value"] = jsonld_obj.get("knora-api:geometryValueAsGeometry") - return cls(**tmp) - - def toJsonLdObj(self, action: Actions) -> dict[str, Any]: - tmp = super().toJsonLdObj(action) - if action == Actions.Create: - tmp["@type"] = "knora-api:GeomValue" - tmp["knora-api:geometryValueAsGeometry"] = self._value - return tmp - - def __str__(self) -> str: - return self._value + " " + super().__str__() - - -class GeonameValue(Value): - _value: str - - def __init__( - self, - value: str, - comment: Optional[LangString] = None, - permissions: Optional[Permissions] = None, - upermission: Optional[PermissionValue] = None, - iri: Optional[str] = None, - ark_url: Optional[str] = None, - vark_url: Optional[str] = None, - ): - self._value = str(value) - super().__init__( - iri=iri, - comment=comment, - permissions=permissions, - upermission=upermission, - ark_url=ark_url, - vark_url=vark_url, - ) - - @property - def value(self) -> str: - return self._value - - @classmethod - def fromJsonLdObj(cls, jsonld_obj: Any) -> dict[str, Any]: - tmp = Value.getFromJsonLd(jsonld_obj) - tmp["value"] = jsonld_obj.get("knora-api:geonameValueAsGeonameCode") - return cls(**tmp) - - def toJsonLdObj(self, action: Actions) -> dict[str, Any]: - tmp = super().toJsonLdObj(action) - if action == Actions.Create: - tmp["@type"] = "knora-api:GeonameValue" - tmp["knora-api:geonameValueAsGeonameCode"] = self._value - return tmp - - def __str__(self) -> str: - return self._value + " " + super().__str__() - - -class IntValue(Value): - _value: int - - def __init__( - self, - value: Union[int, str], - comment: Optional[LangString] = None, - permissions: Optional[Permissions] = None, - upermission: Optional[PermissionValue] = None, - iri: Optional[str] = None, - ark_url: Optional[str] = None, - vark_url: Optional[str] = None, - ): - if isinstance(value, str): - m = regex.match("^[-+]?[0-9]+$", value) - if m and m.span()[1] == len(str(value)): - self._value = int(value) - else: - raise BaseError('String does not represent integer number! "' + value + '"') - elif isinstance(value, int): - self._value = value - super().__init__( - iri=iri, - comment=comment, - permissions=permissions, - upermission=upermission, - ark_url=ark_url, - vark_url=vark_url, - ) - - @property - def value(self) -> int: - return self._value - - @classmethod - def fromJsonLdObj(cls, jsonld_obj: Any) -> dict[str, Any]: - tmp = Value.getFromJsonLd(jsonld_obj) - tmp["value"] = jsonld_obj.get("knora-api:intValueAsInt") - return cls(**tmp) - - def toJsonLdObj(self, action: Actions) -> dict[str, Any]: - tmp = super().toJsonLdObj(action) - if action == Actions.Create: - tmp["@type"] = "knora-api:IntValue" - tmp["knora-api:intValueAsInt"] = self._value - return tmp - - def __str__(self) -> str: - return str(self._value) + " " + super().__str__() - - -class BooleanValue(Value): - _value: bool - - def __init__( - self, - value: Union[bool, int, str], - comment: Optional[LangString] = None, - permissions: Optional[Permissions] = None, - upermission: Optional[PermissionValue] = None, - iri: Optional[str] = None, - ark_url: Optional[str] = None, - vark_url: Optional[str] = None, - ): - if isinstance(value, bool): - self._value = value - else: - if value == 1 or value.upper() == "TRUE" or value == "1": - self._value = True - elif value == 0 or value.upper() == "FALSE" or value == "0": - self._value = False - else: - raise BaseError(f"ERROR Invalid boolean format {value}!") - - super().__init__( - iri=iri, - comment=comment, - permissions=permissions, - upermission=upermission, - ark_url=ark_url, - vark_url=vark_url, - ) - - @property - def value(self) -> bool: - return self._value - - @classmethod - def fromJsonLdObj(cls, jsonld_obj: Any) -> dict[str, Any]: - tmp = Value.getFromJsonLd(jsonld_obj) - tmp["value"] = jsonld_obj.get("knora-api:booleanValueAsBoolean") - return cls(**tmp) - - def toJsonLdObj(self, action: Actions) -> dict[str, Any]: - tmp = super().toJsonLdObj(action) - if action == Actions.Create: - tmp["@type"] = "knora-api:BooleanValue" - tmp["knora-api:booleanValueAsBoolean"] = self._value - return tmp - - def __str__(self) -> str: - return str(self._value) + " " + super().__str__() - - -class UriValue(Value): - _value: str - - def __init__( - self, - value: str, - comment: Optional[LangString] = None, - permissions: Optional[Permissions] = None, - upermission: Optional[PermissionValue] = None, - iri: Optional[str] = None, - ark_url: Optional[str] = None, - vark_url: Optional[str] = None, - ): - # URI = scheme ":" ["//" host [":" port]] path ["?" query] ["#" fragment] - scheme = r"(?[a-z][a-z0-9+.\-]*)" - host = r"(?[\w_.\-~:\[\]]+)" - port = r"(?:\d{0,6})" - path = r"(?/[\w_.\-~:%()]*)" - query = r"(?\?[\w_.\-:%=*&]+)" - fragment = r"(?#[\w_.\-~:/]*)" - m = regex.match(rf"{scheme}:(//{host}{port}?){path}*{query}*{fragment}?", str(value), flags=regex.UNICODE) - if m: - self._value = str(value) - else: - raise BaseError('Invalid IRI/URI! "' + value + '"') - super().__init__( - iri=iri, - comment=comment, - permissions=permissions, - upermission=upermission, - ark_url=ark_url, - vark_url=vark_url, - ) - - @property - def value(self) -> str: - return self._value - - @classmethod - def fromJsonLdObj(cls, jsonld_obj: Any) -> dict[str, Any]: - tmp = Value.getFromJsonLd(jsonld_obj) - tmp["value"] = Value.get_typed_value("knora-api:uriValueAsUri", jsonld_obj) - return cls(**tmp) - - def toJsonLdObj(self, action: Actions) -> dict[str, Any]: - tmp = super().toJsonLdObj(action) - if action == Actions.Create: - tmp["@type"] = "knora-api:UriValue" - tmp["knora-api:uriValueAsUri"] = {"@type": "xsd:anyURI", "@value": self._value} - return tmp - - def __str__(self) -> str: - return self._value + " " + super().__str__() - - -class TimeValue(Value): - _value: str - - def __init__( - self, - value: str, - comment: Optional[LangString] = None, - permissions: Optional[Permissions] = None, - upermission: Optional[PermissionValue] = None, - iri: Optional[str] = None, - ark_url: Optional[str] = None, - vark_url: Optional[str] = None, - ): - m = regex.match( - r"^\d{4}-[0-1]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d(.\d{1,12})?(Z|[+-][0-1]\d:[0-5]\d)$", - str(value), - ) - if m: - self._value = str(value) - else: - raise BaseError('Invalid time value! "' + value + '"') - super().__init__( - iri=iri, - comment=comment, - permissions=permissions, - upermission=upermission, - ark_url=ark_url, - vark_url=vark_url, - ) - - @property - def value(self) -> str: - return self._value - - @classmethod - def fromJsonLdObj(cls, jsonld_obj: Any) -> dict[str, Any]: - tmp = Value.getFromJsonLd(jsonld_obj) - tmp["value"] = Value.get_typed_value("knora-api:timeValueAsTimeStamp", jsonld_obj) - return cls(**tmp) - - def toJsonLdObj(self, action: Actions) -> dict[str, Any]: - tmp = super().toJsonLdObj(action) - if action == Actions.Create: - tmp["@type"] = "knora-api:TimeValue" - tmp["knora-api:timeValueAsTimeStamp"] = {"@type": "xsd:dateTimeStamp", "@value": self._value} - return tmp - - def __str__(self) -> str: - return self._value + " " + super().__str__() - - -class IntervalValue(Value): - _iv_start: str - _iv_end: str - - def __init__( - self, - value: Optional[str] = None, - iv_start: Optional[float] = None, - iv_end: Optional[float] = None, - comment: Optional[LangString] = None, - permissions: Optional[Permissions] = None, - upermission: Optional[PermissionValue] = None, - iri: Optional[str] = None, - ark_url: Optional[str] = None, - vark_url: Optional[str] = None, - ): - if value is not None: - startval, endval = value.split(":") - self._iv_start = float(startval) - self._iv_end = float(endval) - else: - if iv_start is None or iv_end is None: - raise BaseError('"value" or "iv_start" and "iv_end" must be given to constructor!') - self._iv_start = iv_start - self._iv_end = iv_end - super().__init__( - iri=iri, - comment=comment, - permissions=permissions, - upermission=upermission, - ark_url=ark_url, - vark_url=vark_url, - ) - - @property - def value(self) -> str: - return str(self._iv_start) + ":" + str(self._iv_end) - - @property - def iv_start(self) -> float: - return self._iv_start - - @property - def iv_end(self) -> float: - return self._iv_end - - @classmethod - def fromJsonLdObj(cls, jsonld_obj: Any) -> dict[str, Any]: - tmp = Value.getFromJsonLd(jsonld_obj) - start = Value.get_typed_value("knora-api:intervalValueHasStart", jsonld_obj) - end = Value.get_typed_value("knora-api:intervalValueHasEnd", jsonld_obj) - tmp["value"] = str(start) + ":" + str(end) - return cls(**tmp) - - def toJsonLdObj(self, action: Actions) -> dict[str, Any]: - tmp = super().toJsonLdObj(action) - if action == Actions.Create: - tmp["@type"] = "knora-api:IntervalValue" - tmp["knora-api:intervalValueHasStart"] = {"@type": "xsd:decimal", "@value": str(self._iv_start)} - tmp["knora-api:intervalValueHasEnd"] = {"@type": "xsd:decimal", "@value": str(self._iv_end)} - return tmp - - def __str__(self) -> str: - interval = str(self._iv_start) + ":" + str(self._iv_end) - return interval + " " + super().__str__() - - -class ListValue(Value): - _value: str - - def __init__( - self, - value: str, - lists: list[ListNode] = None, - comment: Optional[LangString] = None, - permissions: Optional[Permissions] = None, - upermission: Optional[PermissionValue] = None, - iri: Optional[str] = None, - ark_url: Optional[str] = None, - vark_url: Optional[str] = None, - ): - def find_listnode(nodes: list[ListNode], name: str) -> Optional[str]: - for node in nodes: - if node.name == name: - return node.iri - else: - if node.children is not None: - node_id = find_listnode(node.children, name) - if node_id is not None: - return node_id - return None - - if IriTest.test(str(value)): - self._value = str(value) - else: - tmp = str(value).split(":") - if len(tmp) > 1: - if tmp[0]: - listname = tmp[0] - nodename = tmp[1] - else: - raise BaseError('Invalid list node: "' + str(value) + '" !') - else: - raise BaseError('Invalid list node: "' + str(value) + '" !') - if lists is None: - raise BaseError("Lists from ResourceInstanceFactory must be provided!") - node_iri = None - for list_item in lists: - if list_item.name == listname: - node_iri = find_listnode(list_item.children, nodename) - if node_iri is not None: - self._value = node_iri - else: - raise BaseError(f'Listnode "{value}" not found') - super().__init__( - iri=iri, - comment=comment, - permissions=permissions, - upermission=upermission, - ark_url=ark_url, - vark_url=vark_url, - ) - - @property - def value(self) -> str: - return self._value - - @classmethod - def fromJsonLdObj(cls, jsonld_obj: Any) -> dict[str, Any]: - tmp = Value.getFromJsonLd(jsonld_obj) - tmp["value"] = Value.get_typed_value("knora-api:listValueAsListNode", jsonld_obj) - return cls(**tmp) - - def toJsonLdObj(self, action: Actions) -> dict[str, Any]: - tmp = super().toJsonLdObj(action) - if action == Actions.Create: - tmp["@type"] = "knora-api:ListValue" - tmp["knora-api:listValueAsListNode"] = {"@id": self._value} - return tmp - - def __str__(self) -> str: - return self._value + " " + super().__str__() - - -class LinkValue(Value): - _value: str - _restype: str - _reslabel: str - - def __init__( - self, - value: str, - restype: Optional[str] = None, - reslabel: Optional[str] = None, - comment: Optional[LangString] = None, - permissions: Optional[Permissions] = None, - upermission: Optional[PermissionValue] = None, - iri: Optional[str] = None, - ark_url: Optional[str] = None, - vark_url: Optional[str] = None, - ): - m = regex.match("^(http)s?://([\\w\\.\\-~]+)?(:\\d{,6})?(/[\\w\\-~]+)*(#[\\w\\-~]*)?", str(value)) - if m: - self._value = str(value) - else: - raise BaseError('Target of link is not a IRI: "' + str(value) + '"') - self._restype = restype - self._reslabel = reslabel - super().__init__( - iri=iri, - comment=comment, - permissions=permissions, - upermission=upermission, - ark_url=ark_url, - vark_url=vark_url, - ) - - @property - def value(self) -> str: - return self._value - - @property - def restype(self) -> str: - return self._restype - - @property - def reslabel(self) -> str: - return self._reslabel - - @classmethod - def fromJsonLdObj(cls, jsonld_obj: Any) -> dict[str, Any]: - tmp = Value.getFromJsonLd(jsonld_obj) - linked_resource = jsonld_obj.get("knora-api:linkValueHasTarget") - if linked_resource is not None: - tmp["value"] = linked_resource["@id"] - tmp["restype"] = linked_resource["@type"] - tmp["reslabel"] = linked_resource["rdfs:label"] - return cls(**tmp) - - def toJsonLdObj(self, action: Actions) -> dict[str, Any]: - tmp = super().toJsonLdObj(action) - if action == Actions.Create: - tmp["@type"] = "knora-api:LinkValue" - tmp["knora-api:linkValueHasTargetIri"] = {"@id": self._value} - return tmp - - def __str__(self) -> str: - return self._value + " " + super().__str__() - - -def fromJsonLdObj(jsonld_obj: str) -> Value: - switcher = { - "knora-api:TextValue": TextValue, - "knora-api:ColorValue": ColorValue, - "knora-api:DateValue": DateValue, - "knora-api:DecimalValue": DecimalValue, - "knora-api:GeomValue": GeomValue, - "knora-api:GeonameValue": GeonameValue, - "knora-api:IntValue": IntValue, - "knora-api:BooleanValue": BooleanValue, - "knora-api:UriValue": UriValue, - "knora-api:TimeValue": TimeValue, - "knora-api:IntervalValue": IntervalValue, - "knora-api:ListValue": ListValue, - "knora-api:LinkValue": LinkValue, - } - return switcher[jsonld_obj.get("@type")].fromJsonLdObj(jsonld_obj) - - -def make_value( - value: Union[Value, str], comment: Optional[str] = None, permissions: Optional[Permissions] = None -) -> dict[str, Any]: - res = {} - res["value"] = value - if comment: - res["comment"] = comment - if permissions: - res["permissions"] = permissions - return res + return FormattedTextValue(s) diff --git a/src/dsp_tools/commands/xmlupload/models/xmlresource.py b/src/dsp_tools/commands/xmlupload/models/xmlresource.py index e7e680100..03374881f 100644 --- a/src/dsp_tools/commands/xmlupload/models/xmlresource.py +++ b/src/dsp_tools/commands/xmlupload/models/xmlresource.py @@ -1,14 +1,11 @@ from dataclasses import dataclass -from typing import Optional, Union +from typing import Optional -import regex from lxml import etree from dsp_tools.commands.xmlupload.models.permission import Permissions -from dsp_tools.commands.xmlupload.models.value import KnoraStandoffXml from dsp_tools.commands.xmlupload.models.xmlbitstream import XMLBitstream from dsp_tools.commands.xmlupload.models.xmlproperty import XMLProperty -from dsp_tools.models.exceptions import BaseError from dsp_tools.models.helpers import DateTimeStamp @@ -107,87 +104,6 @@ def get_props_with_links(self) -> list[XMLProperty]: break return link_properties - def get_resptrs(self) -> list[str]: - """ - Get a list of all resource IDs/IRIs that are referenced by this resource. - - Returns: - List of resources identified by their unique id's (as given in the XML) - """ - resptrs: list[str] = [] - for prop in self.properties: - if prop.valtype == "resptr": - for value in prop.values: - resptrs.append(value.value) - elif prop.valtype == "text": - for value in prop.values: - if value.resrefs: - resptrs.extend(value.resrefs) - return resptrs - - def get_internal_resptrs(self) -> set[str]: - """ - Get a set of all resource IDs that are referenced by this resource by means of an internal ID. - Returns: - Set of resources identified by their unique id's (as given in the XML) - """ - return {x for x in self.get_resptrs() if not regex.search(r"https?://rdfh.ch/[a-fA-F0-9]{4}/[\w-]{22}", x)} - - def get_propvals( - self, - resiri_lookup: dict[str, str], - permissions_lookup: dict[str, Permissions], - ) -> dict[str, Union[list[Union[str, dict[str, str]]], str, dict[str, str]]]: - """ - Get a dictionary of the property names and their values. Replace the internal ids by their IRI first. - - Args: - resiri_lookup: Is used to solve internal unique id's of resources to real IRI's - permissions_lookup: Is used to resolve the permission id's to permission sets - - Returns: - A dict of values with the property name as key and a single value. This dict represents the JSON structure - that Knora.create_resource() expects. - """ - prop_data = {} - for prop in self.properties: - vals: list[Union[str, dict[str, str]]] = [] - for value in prop.values: - if prop.valtype == "resptr": # we have a resptr, therefore simple lookup or IRI - iri = resiri_lookup.get(value.value) - if iri: - v = iri - else: - v = value.value # if we do not find the id, we assume it's a valid DSP IRI - elif prop.valtype == "text": - if isinstance(value.value, KnoraStandoffXml): - res_ids = value.value.find_internal_ids() - for res_id in res_ids: - iri = resiri_lookup.get(res_id) - if not iri: - raise BaseError( - f"Resource '{self.id}' cannot be created, because it contains a salsah-Link to " - f"the following invalid resource: '{res_id}'" - ) - value.value.replace(f"IRI:{res_id}:IRI", iri) - v = value.value - else: - v = value.value - - if value.comment is None and value.permissions is None: - # no comment or permissions - vals.append(v) - else: - # we have comment or permissions - tmp = {"value": v} - if value.comment: - tmp["comment"] = value.comment - if value.permissions: - tmp["permissions"] = permissions_lookup.get(value.permissions) - vals.append(tmp) - prop_data[prop.name] = vals if len(vals) > 1 else vals[0] - return prop_data - def get_bitstream_information( self, internal_file_name_bitstream: str, diff --git a/src/dsp_tools/commands/xmlupload/models/xmlvalue.py b/src/dsp_tools/commands/xmlupload/models/xmlvalue.py index d9202beb4..aa9d1f398 100644 --- a/src/dsp_tools/commands/xmlupload/models/xmlvalue.py +++ b/src/dsp_tools/commands/xmlupload/models/xmlvalue.py @@ -3,13 +3,13 @@ import regex from lxml import etree -from dsp_tools.commands.xmlupload.models.value import KnoraStandoffXml +from dsp_tools.commands.xmlupload.models.value import FormattedTextValue class XMLValue: # pylint: disable=too-few-public-methods """Represents a value of a resource property in the XML used for data import""" - value: Union[str, KnoraStandoffXml] + value: Union[str, FormattedTextValue] resrefs: Optional[list[str]] comment: Optional[str] permissions: Optional[str] @@ -27,7 +27,7 @@ def __init__( if val_type == "text" and node.get("encoding") == "xml": xmlstr_orig = etree.tostring(node, encoding="unicode", method="xml") xmlstr_cleaned = self._cleanup_formatted_text(xmlstr_orig) - self.value = KnoraStandoffXml(xmlstr_cleaned) + self.value = FormattedTextValue(xmlstr_cleaned) self.resrefs = list(self.value.find_internal_ids()) elif val_type == "text" and node.get("encoding") == "utf8": str_orig = "".join(node.itertext()) diff --git a/src/dsp_tools/commands/xmlupload/resource_create_client.py b/src/dsp_tools/commands/xmlupload/resource_create_client.py index ceb2bb33a..6d9480896 100644 --- a/src/dsp_tools/commands/xmlupload/resource_create_client.py +++ b/src/dsp_tools/commands/xmlupload/resource_create_client.py @@ -6,7 +6,7 @@ from dsp_tools.commands.xmlupload.ark2iri import convert_ark_v0_to_resource_iri from dsp_tools.commands.xmlupload.iri_resolver import IriResolver from dsp_tools.commands.xmlupload.models.permission import Permissions -from dsp_tools.commands.xmlupload.models.value import KnoraStandoffXml +from dsp_tools.commands.xmlupload.models.value import FormattedTextValue from dsp_tools.commands.xmlupload.models.xmlproperty import XMLProperty from dsp_tools.commands.xmlupload.models.xmlresource import BitstreamInfo, XMLResource from dsp_tools.commands.xmlupload.models.xmlvalue import XMLValue @@ -316,7 +316,7 @@ def _make_text_value(value: XMLValue, iri_resolver: IriResolver) -> dict[str, An "@type": "knora-api:TextValue", "knora-api:valueAsString": s, } - case KnoraStandoffXml() as xml: + case FormattedTextValue() as xml: xml_with_iris = xml.with_iris(iri_resolver) return { "@type": "knora-api:TextValue", @@ -349,11 +349,11 @@ def _make_uri_value(value: XMLValue) -> dict[str, Any]: } -def _assert_is_string(value: str | KnoraStandoffXml) -> str: +def _assert_is_string(value: str | FormattedTextValue) -> str: match value: case str() as s: return s - case KnoraStandoffXml() as xml: + case FormattedTextValue() as xml: raise BaseError(f"Expected string value, but got XML value: {xml.as_xml()}") case _: assert_never(value) diff --git a/src/dsp_tools/commands/xmlupload/stash/stash_circular_references.py b/src/dsp_tools/commands/xmlupload/stash/stash_circular_references.py index 19981764b..8acd5564f 100644 --- a/src/dsp_tools/commands/xmlupload/stash/stash_circular_references.py +++ b/src/dsp_tools/commands/xmlupload/stash/stash_circular_references.py @@ -6,7 +6,7 @@ from lxml import etree from dsp_tools.commands.xmlupload.models.permission import Permissions -from dsp_tools.commands.xmlupload.models.value import KnoraStandoffXml +from dsp_tools.commands.xmlupload.models.value import FormattedTextValue from dsp_tools.commands.xmlupload.models.xmlproperty import XMLProperty from dsp_tools.commands.xmlupload.models.xmlresource import XMLResource from dsp_tools.commands.xmlupload.stash.construct_and_analyze_graph import ( @@ -38,7 +38,7 @@ def _stash_standoff( continue # value.value is a KnoraStandoffXml text with problematic links. # stash it, then replace the problematic text with a UUID - standoff_xml = cast(KnoraStandoffXml, value.value) + standoff_xml = cast(FormattedTextValue, value.value) uuid = str(uuid4()) standoff_stash_item = StandoffStashItem( res_id=res_id, @@ -47,7 +47,7 @@ def _stash_standoff( prop_name=link_prop.name, value=standoff_xml, ) - value.value = KnoraStandoffXml(uuid) + value.value = FormattedTextValue(uuid) stashed_items.append(standoff_stash_item) return stashed_items diff --git a/src/dsp_tools/commands/xmlupload/stash/stash_models.py b/src/dsp_tools/commands/xmlupload/stash/stash_models.py index 9ef698a66..a91f83275 100644 --- a/src/dsp_tools/commands/xmlupload/stash/stash_models.py +++ b/src/dsp_tools/commands/xmlupload/stash/stash_models.py @@ -3,7 +3,7 @@ from dataclasses import dataclass from itertools import groupby -from dsp_tools.commands.xmlupload.models.value import KnoraStandoffXml +from dsp_tools.commands.xmlupload.models.value import FormattedTextValue @dataclass(frozen=True) @@ -14,7 +14,7 @@ class StandoffStashItem: res_type: str uuid: str prop_name: str - value: KnoraStandoffXml + value: FormattedTextValue @dataclass(frozen=True) diff --git a/src/dsp_tools/commands/xmlupload/stash/upload_stashed_xml_texts.py b/src/dsp_tools/commands/xmlupload/stash/upload_stashed_xml_texts.py index 08ea55abd..a3349cf68 100644 --- a/src/dsp_tools/commands/xmlupload/stash/upload_stashed_xml_texts.py +++ b/src/dsp_tools/commands/xmlupload/stash/upload_stashed_xml_texts.py @@ -6,7 +6,7 @@ from urllib.parse import quote_plus from dsp_tools.commands.xmlupload.iri_resolver import IriResolver -from dsp_tools.commands.xmlupload.models.value import KnoraStandoffXml +from dsp_tools.commands.xmlupload.models.value import FormattedTextValue from dsp_tools.commands.xmlupload.stash.stash_models import StandoffStash, StandoffStashItem from dsp_tools.models.exceptions import BaseError from dsp_tools.utils.connection import Connection @@ -66,7 +66,7 @@ def _create_XMLResource_json_object_to_update( res_type: str, link_prop_name: str, value_iri: str, - new_xmltext: KnoraStandoffXml, + new_xmltext: FormattedTextValue, context: dict[str, str], ) -> str: """ diff --git a/src/dsp_tools/utils/uri_util.py b/src/dsp_tools/utils/uri_util.py new file mode 100644 index 000000000..8c767914e --- /dev/null +++ b/src/dsp_tools/utils/uri_util.py @@ -0,0 +1,14 @@ +import regex + + +def is_uri(s: str) -> bool: + """Checks if the given string is a valid URI.""" + # URI = scheme ":" ["//" host [":" port]] path ["?" query] ["#" fragment] + scheme = r"(?[a-z][a-z0-9+.\-]*)" + host = r"(?[\w_.\-~:\[\]]+)" + port = r"(?:\d{0,6})" + path = r"(?/[\w_.\-~:%()]*)" + query = r"(?\?[\w_.\-:%=*&]+)" + fragment = r"(?#[\w_.\-~:/]*)" + m = regex.match(rf"{scheme}:(//{host}{port}?){path}*{query}*{fragment}?", s, flags=regex.UNICODE) + return m is not None diff --git a/test/unittests/commands/xmlupload/stash/test_upload_stash_with_mock.py b/test/unittests/commands/xmlupload/stash/test_upload_stash_with_mock.py index e6f98410c..b7aad7b39 100644 --- a/test/unittests/commands/xmlupload/stash/test_upload_stash_with_mock.py +++ b/test/unittests/commands/xmlupload/stash/test_upload_stash_with_mock.py @@ -3,7 +3,7 @@ from uuid import uuid4 from dsp_tools.commands.xmlupload.iri_resolver import IriResolver -from dsp_tools.commands.xmlupload.models.value import KnoraStandoffXml +from dsp_tools.commands.xmlupload.models.value import FormattedTextValue from dsp_tools.commands.xmlupload.stash.stash_models import ( LinkValueStash, LinkValueStashItem, @@ -119,7 +119,7 @@ def test_upload_text_value_stash(self) -> None: standoff_stash=StandoffStash.make( [ StandoffStashItem( - "001", "sometype", value_uuid, property_name, KnoraStandoffXml("

some text

") + "001", "sometype", value_uuid, property_name, FormattedTextValue("

some text

") ), ] ), @@ -170,7 +170,7 @@ def test_not_upload_text_value_stash_if_uuid_not_on_value(self) -> None: standoff_stash=StandoffStash.make( [ StandoffStashItem( - "001", "sometype", value_uuid, property_name, KnoraStandoffXml("

some text

") + "001", "sometype", value_uuid, property_name, FormattedTextValue("

some text

") ), ] ), diff --git a/test/unittests/commands/xmlupload/stash/test_upload_stashed_xml_texts.py b/test/unittests/commands/xmlupload/stash/test_upload_stashed_xml_texts.py index 504e4af2a..141d1f7be 100644 --- a/test/unittests/commands/xmlupload/stash/test_upload_stashed_xml_texts.py +++ b/test/unittests/commands/xmlupload/stash/test_upload_stashed_xml_texts.py @@ -5,12 +5,12 @@ import pytest from dsp_tools.commands.xmlupload.iri_resolver import IriResolver -from dsp_tools.commands.xmlupload.models.value import KnoraStandoffXml +from dsp_tools.commands.xmlupload.models.value import FormattedTextValue class TestXMLUploadStash(TestCase): def test_find_ids_referenced_in_salsah_links_one_link(self) -> None: - one_link_KnoraStandoffXml = KnoraStandoffXml( + one_link_KnoraStandoffXml = FormattedTextValue( xmlstr=( '' '' @@ -22,7 +22,7 @@ def test_find_ids_referenced_in_salsah_links_one_link(self) -> None: self.assertEqual({"r2_id"}, returned_set) def test_find_ids_referenced_in_salsah_links_three_links(self) -> None: - three_link_KnoraStandoffXml = KnoraStandoffXml( + three_link_KnoraStandoffXml = FormattedTextValue( xmlstr=( '' '' @@ -37,7 +37,7 @@ def test_find_ids_referenced_in_salsah_links_three_links(self) -> None: def test__replace_internal_ids_with_iris_one_link(self) -> None: resolver = IriResolver({"r1_id": "r1_iri", "r2_id": "r2_iri", "r3_id": "r3_iri"}) - one_link_KnoraStandoffXml = KnoraStandoffXml( + one_link_KnoraStandoffXml = FormattedTextValue( xmlstr=( '' '' @@ -56,7 +56,7 @@ def test__replace_internal_ids_with_iris_one_link(self) -> None: def test__replace_internal_ids_with_iris_three_links(self) -> None: resolver = IriResolver({"r1_id": "r1_iri", "r2_id": "r2_iri", "r3_id": "r3_iri"}) - three_link_KnoraStandoffXml = KnoraStandoffXml( + three_link_KnoraStandoffXml = FormattedTextValue( xmlstr=( '' '' diff --git a/test/unittests/commands/xmlupload/test_value.py b/test/unittests/commands/xmlupload/test_value.py deleted file mode 100644 index f7b3099b4..000000000 --- a/test/unittests/commands/xmlupload/test_value.py +++ /dev/null @@ -1,38 +0,0 @@ -"""unit tests for date values""" - -# pylint: disable=protected-access,missing-class-docstring,missing-function-docstring - -import unittest - -import pytest - -from dsp_tools.commands.xmlupload.models.value import DateValue -from dsp_tools.models.helpers import Actions - - -class TestValue(unittest.TestCase): - def test_date_value(self) -> None: - date: DateValue = DateValue("JULIAN:BCE:0700:BCE:0600") - self.assertEqual(date._calendar, "JULIAN") - - self.assertEqual(date._e1, "BCE") - self.assertEqual(date._y1, 700) - self.assertEqual(date._m1, None) - self.assertEqual(date._d1, None) - - self.assertEqual(date._e2, "BCE") - self.assertEqual(date._y2, 600) - self.assertEqual(date._m2, None) - self.assertEqual(date._d2, None) - - json_ld = date.toJsonLdObj(Actions.Create) - - self.assertEqual(json_ld["knora-api:dateValueHasCalendar"], "JULIAN") - self.assertEqual(json_ld["knora-api:dateValueHasStartEra"], "BCE") - self.assertEqual(json_ld["knora-api:dateValueHasStartYear"], 700) - self.assertEqual(json_ld["knora-api:dateValueHasEndYear"], 600) - self.assertEqual(json_ld["knora-api:dateValueHasEndEra"], "BCE") - - -if __name__ == "__main__": - pytest.main([__file__]) diff --git a/test/unittests/commands/xmlupload/test_xmlvalue.py b/test/unittests/commands/xmlupload/test_xmlvalue.py index 28cb2168c..79d26710a 100644 --- a/test/unittests/commands/xmlupload/test_xmlvalue.py +++ b/test/unittests/commands/xmlupload/test_xmlvalue.py @@ -3,7 +3,7 @@ import pytest from lxml import etree -from dsp_tools.commands.xmlupload.models.value import KnoraStandoffXml +from dsp_tools.commands.xmlupload.models.value import FormattedTextValue from dsp_tools.commands.xmlupload.models.xmlvalue import XMLValue @@ -69,8 +69,8 @@ def test_cleanup_formatted_text(self) -> None: formatted_node = etree.fromstring(formatted_text_orig) formatted_xml_value = XMLValue(node=formatted_node, val_type="text") xml_value = formatted_xml_value.value - self.assertIsInstance(xml_value, KnoraStandoffXml) - assert isinstance(xml_value, KnoraStandoffXml) + self.assertIsInstance(xml_value, FormattedTextValue) + assert isinstance(xml_value, FormattedTextValue) self.assertEqual(xml_value.xmlstr, formatted_text_expected)