Source code for wikibaseintegrator.models.snaks
from __future__ import annotations
from collections.abc import Iterator
from typing import Self
from wikibaseintegrator.models.basemodel import BaseModel
from wikibaseintegrator.models.snak import Snak
[docs]
class Snaks(BaseModel):
def __init__(self) -> None:
self.snaks: dict[str, list[Snak]] = {}
[docs]
def get(self, property: str | int) -> list[Snak]:
if isinstance(property, int):
property = 'P' + str(property)
if property in self.snaks:
return self.snaks[property]
return []
[docs]
def add(self, snak: Snak) -> Self:
property = snak.property_number
if property not in self.snaks:
self.snaks[property] = []
self.snaks[property].append(snak)
return self
[docs]
def from_json(self, json_data: dict[str, list]) -> Self:
for property in json_data:
for snak in json_data[property]:
self.add(snak=Snak().from_json(snak))
return self
[docs]
def get_json(self) -> dict[str, list]:
json_data: dict[str, list] = {}
for property, snaks in self.snaks.items():
json_data[property] = [snak.get_json() for snak in snaks]
return json_data
def __eq__(self, other: object) -> bool:
if not isinstance(other, Snaks):
return NotImplemented
return self.snaks == other.snaks
def __iter__(self) -> Iterator[Snak]:
iterate = []
for snak in self.snaks.values():
iterate.extend(snak)
return iter(iterate)
def __len__(self) -> int:
return len(self.snaks)