jenkins-bot has submitted this change and it was merged.
Change subject: add Qualifier write support
......................................................................
add Qualifier write support
qualifier read/write is enabled by
- editQualifier() api method in site.py
- addQualifier() front end method in page.py
Test edits:
https://www.wikidata.org/w/index.php?title=Q10834790&diff=67432217&…
https://www.wikidata.org/w/index.php?title=Q10772647&diff=67447518&…
Change-Id: I917a69fff552be8b29a5d186d6b9f8df6eeea61d
---
M pywikibot/page.py
M pywikibot/site.py
2 files changed, 52 insertions(+), 7 deletions(-)
Approvals:
FelixReimann: Looks good to me, but someone else must approve
Merlijn van Deen: Looks good to me, approved
jenkins-bot: Verified
diff --git a/pywikibot/page.py b/pywikibot/page.py
index eefc5d9..57c3add 100644
--- a/pywikibot/page.py
+++ b/pywikibot/page.py
@@ -2768,7 +2768,7 @@
if self.isQualifier and self.isReference:
raise ValueError(u'Claim cannot be both a qualifier and reference.')
self.sources = []
- self.qualifiers = {}
+ self.qualifiers = collections.defaultdict(list)
self.target = None
self.snaktype = 'value'
self.rank = 'normal'
@@ -2810,10 +2810,8 @@
for prop in data['qualifiers']:
for qualifier in data['qualifiers'][prop]:
qual = Claim.qualifierFromJSON(site, qualifier)
- if prop in claim.qualifiers:
- claim.qualifiers[prop].append(qual)
- else:
- claim.qualifiers[prop] = [qual]
+ claim.qualifiers[prop].append(qual)
+
return claim
@staticmethod
@@ -2935,6 +2933,17 @@
source[claim.getID()].append(claim)
self.sources.append(source)
+ def addQualifier(self, qualifier, **kwargs):
+ """Adds the given qualifier
+
+ @param qualifier: the qualifier to add
+ @type qualifier: Claim
+ """
+ data = self.repo.editQualifier(self, qualifier, **kwargs)
+ qualifier.isQualifier = True
+ self.on_item.lastrevid = data['pageinfo']['lastrevid']
+ self.qualifiers[qualifier.getID()].append(qualifier)
+
def _formatDataValue(self):
"""
Format the target into the proper JSON datavalue that Wikibase wants
diff --git a/pywikibot/site.py b/pywikibot/site.py
index 13477b0..f14132c 100644
--- a/pywikibot/site.py
+++ b/pywikibot/site.py
@@ -3616,8 +3616,8 @@
@param new Whether to create a new one if the "source" already exists
@type new bool
"""
- if claim.isReference:
- raise ValueError("The claim cannot be a reference.")
+ if claim.isReference or claim.isQualifier:
+ raise ValueError("The claim cannot have a source.")
params = dict(action='wbsetreference',
statement=claim.snak,
)
@@ -3668,6 +3668,42 @@
return data
@must_be(group='user')
+ def editQualifier(self, claim, qualifier, new=False, bot=True, **kwargs):
+ """
+ Create/Edit a qualifier
+
+ @param claim: A Claim object to add the qualifier to
+ @type claim: pywikibot.Claim
+ @param qualifier: A Claim object to be used as a qualifier
+ @type qualifier: pywikibot.Claim
+ """
+ if claim.isReference or claim.isQualifier:
+ raise ValueError("The claim cannot have a qualifier.")
+ params = dict(action='wbsetqualifier',
+ claim=claim.snak,
+ )
+ if claim.on_item: # I can't think of when this would be false, but lets be
safe
+ params['baserevid'] = claim.on_item.lastrevid
+ if bot:
+ params['bot'] = 1
+ if not new and hasattr(qualifier, 'hash'):
+ params['snakhash'] = qualifier.hash
+ params['token'] = self.token(claim, 'edit')
+ #build up the snak
+ if qualifier.getSnakType() == 'value':
+ params['value'] = json.dumps(qualifier._formatDataValue())
+ params['snaktype'] = qualifier.getSnakType()
+ params['property'] = qualifier.getID()
+
+ for arg in kwargs:
+ if arg in ['baserevid', 'summary']:
+ params[arg] = kwargs[arg]
+
+ req = api.Request(site=self, **params)
+ data = req.submit()
+ return data
+
+ @must_be(group='user')
def removeClaims(self, claims, bot=True, **kwargs):
params = dict(action='wbremoveclaims')
if bot:
--
To view, visit
https://gerrit.wikimedia.org/r/81567
To unsubscribe, visit
https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: I917a69fff552be8b29a5d186d6b9f8df6eeea61d
Gerrit-PatchSet: 9
Gerrit-Project: pywikibot/core
Gerrit-Branch: master
Gerrit-Owner: FelixReimann <felix(a)fex-it.de>
Gerrit-Reviewer: FelixReimann <felix(a)fex-it.de>
Gerrit-Reviewer: Ladsgroup <ladsgroup(a)gmail.com>
Gerrit-Reviewer: Legoktm <legoktm.wikipedia(a)gmail.com>
Gerrit-Reviewer: Merlijn van Deen <valhallasw(a)arctus.nl>
Gerrit-Reviewer: Mpaa <mpaa.wiki(a)gmail.com>
Gerrit-Reviewer: jenkins-bot