Source code for wikibaseintegrator.models.qualifiers

from __future__ import annotations

from typing import TYPE_CHECKING

from wikibaseintegrator.models.basemodel import BaseModel
from wikibaseintegrator.models.snaks import Snak
from wikibaseintegrator.wbi_enums import ActionIfExists

if TYPE_CHECKING:
    from wikibaseintegrator.models.claims import Claim


[docs] class Qualifiers(BaseModel):
[docs] def __init__(self) -> None: self.qualifiers: dict[str, list[Snak]] = {}
@property def qualifiers(self): return self.__qualifiers @qualifiers.setter def qualifiers(self, value): assert isinstance(value, dict) self.__qualifiers = value
[docs] def set(self, qualifiers: Qualifiers | list[Snak | Claim] | None) -> Qualifiers: if isinstance(qualifiers, list) or isinstance(qualifiers, Qualifiers): for qualifier in qualifiers: self.add(qualifier) elif qualifiers is None: self.qualifiers = {} else: self.qualifiers = qualifiers return self
[docs] def get(self, property: str | int) -> list[Snak]: if isinstance(property, int): property = 'P' + str(property) if property in self.qualifiers: return self.qualifiers[property] return []
# TODO: implement action_if_exists
[docs] def add(self, qualifier: Snak | Claim, action_if_exists: ActionIfExists = ActionIfExists.REPLACE_ALL) -> Qualifiers: from wikibaseintegrator.models.claims import Claim if isinstance(qualifier, Claim): qualifier = Snak().from_json(qualifier.get_json()['mainsnak']) if qualifier is not None: assert isinstance(qualifier, Snak) property = qualifier.property_number if property not in self.qualifiers: self.qualifiers[property] = [] self.qualifiers[property].append(qualifier) return self
[docs] def remove(self, qualifier: Snak | Claim) -> Qualifiers: from wikibaseintegrator.models.claims import Claim if isinstance(qualifier, Claim): qualifier = Snak().from_json(qualifier.get_json()['mainsnak']) if qualifier is not None: assert isinstance(qualifier, Snak) if qualifier in self.qualifiers[qualifier.property_number]: self.qualifiers[qualifier.property_number].remove(qualifier) if len(self.qualifiers[qualifier.property_number]) == 0: del self.qualifiers[qualifier.property_number] return self
[docs] def clear(self, property: str | int | None = None) -> Qualifiers: if isinstance(property, int): property = 'P' + str(property) if property is None: self.qualifiers = {} elif property in self.qualifiers: del self.qualifiers[property] return self
[docs] def from_json(self, json_data: dict[str, list]) -> Qualifiers: for property in json_data: for snak in json_data[property]: self.add(qualifier=Snak().from_json(snak)) return self
[docs] def get_json(self) -> dict[str, list]: json_data: dict[str, list] = {} for property in self.qualifiers: if property not in json_data: json_data[property] = [] for qualifier in self.qualifiers[property]: json_data[property].append(qualifier.get_json()) return json_data
def __iter__(self): iterate = [] for qualifier in self.qualifiers.values(): iterate.extend(qualifier) return iter(iterate) def __len__(self): return len(self.qualifiers)