From a7963cd18a6084e985cc679b7ae0349de6cf8b04 Mon Sep 17 00:00:00 2001 From: Myst <1592048+LeMyst@users.noreply.github.com> Date: Sun, 7 Jan 2024 11:05:05 +0100 Subject: [PATCH] Draft --- wikibaseintegrator/models/claims.py | 21 +++++++++++++++++---- wikibaseintegrator/wbi_enums.py | 12 ++++++++++-- 2 files changed, 27 insertions(+), 6 deletions(-) diff --git a/wikibaseintegrator/models/claims.py b/wikibaseintegrator/models/claims.py index a542b56f..acad89c1 100644 --- a/wikibaseintegrator/models/claims.py +++ b/wikibaseintegrator/models/claims.py @@ -83,12 +83,25 @@ def add(self, claims: Claims | list[Claim] | Claim, action_if_exists: ActionIfEx if property not in self.claims: self.claims[property] = [] - if action_if_exists == ActionIfExists.KEEP: + if ActionIfExists.KEEP in action_if_exists: if len(self.claims[property]) == 0: self.claims[property].append(claim) - elif action_if_exists == ActionIfExists.FORCE_APPEND: - self.claims[property].append(claim) - elif action_if_exists == ActionIfExists.APPEND_OR_REPLACE: + elif action_if_exists == ActionIfExists.APPEND: + # TODO: Check if merging ref is necessary + if claim not in self.claims[property]: + self.claims[property].append(claim) + elif action_if_exists == ActionIfExists.REPLACE: + if claim not in self.claims[property]: + self.claims[property].append(claim) + elif ActionIfExists.APPEND in action_if_exists and ActionIfExists.REPLACE in action_if_exists: + if claim not in self.claims[property]: # APPEND + self.claims[property].append(claim) + else: + # Force replace the claim if already present + # TODO: Check if merging ref is necessary + self.claims[property][self.claims[property].index(claim)].update(claim) + elif action_if_exists == ActionIfExists.MERGE_REFS_OR_APPEND: + # If the claim value does not exist, append it if claim not in self.claims[property]: self.claims[property].append(claim) else: diff --git a/wikibaseintegrator/wbi_enums.py b/wikibaseintegrator/wbi_enums.py index 22e13ede..f9e592ba 100644 --- a/wikibaseintegrator/wbi_enums.py +++ b/wikibaseintegrator/wbi_enums.py @@ -1,7 +1,7 @@ -from enum import Enum, auto +from enum import Enum, auto, Flag -class ActionIfExists(Enum): +class ActionIfExists(Flag): """ Action to take if a statement with a property already exists on the entity. @@ -17,6 +17,10 @@ class ActionIfExists(Enum): class WikibaseDatatype(Enum): + """ + Data types define how the statement will behave, and what kind of data they take. + More info: https://www.wikidata.org/wiki/Help:Data_type + """ COMMONSMEDIA = 'commonsMedia' EDTF = 'edtf' EXTERNALID = 'external-id' @@ -39,6 +43,10 @@ class WikibaseDatatype(Enum): class WikibaseRank(Enum): + """ + Ranks provide a mechanism for annotating multiple values for a statement. + More info: https://www.wikidata.org/wiki/Help:Ranking + """ DEPRECATED = "deprecated" NORMAL = "normal" PREFERRED = "preferred"