FelixReimann has uploaded a new change for review. https://gerrit.wikimedia.org/r/81567
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 Claim.qualifiers is changed from dict to list as the property of each claim is available using claim.id. Test edit: https://www.wikidata.org/w/index.php?title=Q10834790&diff=67432217&oldid=67430773 Change-Id: I917a69fff552be8b29a5d186d6b9f8df6eeea61d --- M pywikibot/page.py M pywikibot/site.py 2 files changed, 51 insertions(+), 8 deletions(-) git pull ssh://gerrit.wikimedia.org:29418/pywikibot/core refs/changes/67/81567/1 diff --git a/pywikibot/page.py b/pywikibot/page.py index c13ae4e..1140cbb 100644 --- a/pywikibot/page.py +++ b/pywikibot/page.py @@ -2708,7 +2708,7 @@ if self.isQualifier and self.isReference: raise ValueError(u'Claim cannot be both a qualifier and reference.') self.sources = [] - self.qualifiers = {} + self.qualifiers = [] self.target = None self.snaktype = 'value' self.on_item = None # The item it's on @@ -2747,10 +2747,7 @@ 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.append(qual) return claim @staticmethod @@ -2847,6 +2844,16 @@ self.on_item.lastrevid = data['pageinfo']['lastrevid'] 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) + self.on_item.lastrevid = data['pageinfo']['lastrevid'] + self.qualifiers.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 00a0104..dac99c7 100644 --- a/pywikibot/site.py +++ b/pywikibot/site.py @@ -3442,7 +3442,7 @@ ids=prop.getID(), props='datatype', ) - expiry = datetime.timedelta(days=365*100) + expiry = datetime.timedelta(days=365 * 100) #Store it for 100 years req = api.CachedRequest(expiry, site=self, **params) data = req.submit() @@ -3538,8 +3538,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, ) @@ -3577,6 +3577,42 @@ return data @must_be(group='user') + def editQualifier(self, claim, qualifier, 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 + params['token'] = self.token(claim, 'edit') + #build up the snak + if claim.getSnakType() == 'value': + params['value'] = json.dumps(qualifier._formatDataValue()) + else: + raise NotImplementedError('%s snaktype is not supported yet.' % claim.getSnakType()) + params['snaktype'] = 'value' + params['property'] = qualifier.getID() + + for arg in kwargs: + if arg in ['bot', '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: newchange Gerrit-Change-Id: I917a69fff552be8b29a5d186d6b9f8df6eeea61d Gerrit-PatchSet: 1 Gerrit-Project: pywikibot/core Gerrit-Branch: master Gerrit-Owner: FelixReimann <fe...@fex-it.de> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits