Xqt submitted this change.

View Change

Approvals: jenkins-bot: Verified Xqt: Looks good to me, approved
[FEAT] Add inverse claims to harvested targets

Bug: T173238
Co-Authored-by: Elliott Eggleston <ejegg@ejegg.com>
Change-Id: I2d46dd991a6866a181480f128e142eb75c631ed0
---
M scripts/harvest_template.py
1 file changed, 20 insertions(+), 1 deletion(-)

diff --git a/scripts/harvest_template.py b/scripts/harvest_template.py
index e07362b..be5a471 100755
--- a/scripts/harvest_template.py
+++ b/scripts/harvest_template.py
@@ -43,6 +43,8 @@

-multi If set, try to match multiple values from parameter.

+-inverse Import this property as the inverse claim.
+
Examples
--------

@@ -139,6 +141,7 @@
'exists': '',
'islink': False,
'multi': False,
+ 'inverse': None,
}


@@ -156,6 +159,7 @@
'exists': '',
'islink': False,
'multi': False,
+ 'inverse': None,
}

def __init__(self, template_title, fields, **kwargs) -> None:
@@ -175,6 +179,9 @@
:keyword multi: Whether multiple values should be extracted from a
single parameter
:type multi: bool
+ :keyword inverse: a property to populate on the target, pointing to
+ the page item
+ :type inverse: str
"""
super().__init__(**kwargs)
self.fields = {}
@@ -327,13 +334,25 @@

exists_arg = set(self._get_option_with_fallback(options, 'exists'))
do_multi = self._get_option_with_fallback(options, 'multi')
+ inverse_prop = self._get_option_with_fallback(options, 'inverse')

for target in handler(value, item, field):
claim = ppage.newClaim()
claim.setTarget(target)
# A generator might yield pages from multiple sites
added = self.user_add_claim_unless_exists(
- item, claim, ''.join(exists_arg), site, pywikibot.info)
+ item, claim, exists_arg, site, pywikibot.info)
+
+ if (added and inverse_prop
+ and isinstance(target, pywikibot.ItemPage)):
+ inverse_ppage = pywikibot.PropertyPage(self.repo, inverse_prop)
+ if inverse_ppage.type != 'wikibase-item':
+ raise ValueError("{} does not have 'wikibase-item' type"
+ .format(inverse_ppage))
+ inverse_claim = inverse_ppage.newClaim()
+ inverse_claim.setTarget(item)
+ self.user_add_claim_unless_exists(
+ target, inverse_claim, exists_arg, site, pywikibot.info)

# Stop after the first match if not supposed to add
# multiple values

To view, visit change 811248. To unsubscribe, or for help writing mail filters, visit settings.

Gerrit-Project: pywikibot/core
Gerrit-Branch: master
Gerrit-Change-Id: I2d46dd991a6866a181480f128e142eb75c631ed0
Gerrit-Change-Number: 811248
Gerrit-PatchSet: 4
Gerrit-Owner: Matěj Suchánek <matejsuchanek97@gmail.com>
Gerrit-Reviewer: Xqt <info@gno.de>
Gerrit-Reviewer: jenkins-bot
Gerrit-MessageType: merged