Compare commits

...

2 commits

2 changed files with 20 additions and 2 deletions

View file

@ -107,7 +107,7 @@ class Item(Base):
aliases = Column(postgresql.JSONB) aliases = Column(postgresql.JSONB)
sitelinks = Column(postgresql.JSONB) sitelinks = Column(postgresql.JSONB)
claims = Column(postgresql.JSONB, nullable=False) claims = Column(postgresql.JSONB, nullable=False)
lastrevid = Column(Integer, nullable=False, unique=True) lastrevid = Column(BigInteger, nullable=False, unique=True)
locations: Mapped[list["ItemLocation"]] = relationship( locations: Mapped[list["ItemLocation"]] = relationship(
"ItemLocation", cascade="all, delete-orphan", backref="item" "ItemLocation", cascade="all, delete-orphan", backref="item"
) )

View file

@ -6,6 +6,8 @@ import json
import typing import typing
from time import sleep from time import sleep
import requests.exceptions
from matcher import model, wikidata, wikidata_api from matcher import model, wikidata, wikidata_api
from matcher.database import init_db, session from matcher.database import init_db, session
@ -81,7 +83,14 @@ def handle_edit(change: Change) -> None:
print(f"{ts}: no need to update {qid}") print(f"{ts}: no need to update {qid}")
return return
for attempt in range(100):
try:
entity = wikidata_api.get_entity(qid) entity = wikidata_api.get_entity(qid)
except requests.exceptions.ConnectionError:
print("connection error, retrying.")
sleep(10)
else:
break
entity_qid = entity.pop("id") entity_qid = entity.pop("id")
if entity_qid != qid: if entity_qid != qid:
print(f"{ts}: item {qid} replaced with redirect") print(f"{ts}: item {qid} replaced with redirect")
@ -123,6 +132,15 @@ def update_database() -> None:
r = wikidata_api.get_recent_changes(rcstart=start, rccontinue=rccontinue) r = wikidata_api.get_recent_changes(rcstart=start, rccontinue=rccontinue)
reply = r.json() reply = r.json()
if (
"error" in reply
and reply["error"]["code"] == "internal_api_error_DBQueryTimeoutError"
):
print(reply)
sleep(10)
continue
if "query" not in reply:
print(reply)
for change in reply["query"]["recentchanges"]: for change in reply["query"]["recentchanges"]:
rctype = change["type"] rctype = change["type"]
timestamp = change["timestamp"] timestamp = change["timestamp"]