I created a new user to make some changes as a bot. That user was registered with wikidata.
I then made a new paws notebook to make some edits. The code that I tried to run was as follows:
import pywikibot
import json
site = pywikibot.Site("wikidata", "wikidata")
repo = site.data_repository()
def mark_as_part_of_current_landtag(politican_item_id):
item = pywikibot.ItemPage(repo, politican_item_id)
claims = item.get()['claims']['P39']
legislaturperiode = u'P2937'
landtag_period = u"Q30321703" # 17th NRW
# Q17781726 is: Mitglied des Lantags Nordrhein-Westfahlen
landtag_membership = next(claim for claim in claims if claim.target.id == 'Q17781726')
qualifier = pywikibot.Claim(repo, legislaturperiode)
target = pywikibot.ItemPage(repo, landtag_period)
qualifier.setTarget(target)
landtag_membership.addQualifier(qualifier)
item.editEntity(summary='pyWikibot politican in Wahlperiode')
mark_as_part_of_current_landtag("Q1620526")Essentially I am trying to add a qualifier to an existing claim. Unfortunately this fails with the following output:
WARNING: API error mwoauth-invalid-authorization-invalid-user: The authorization headers in your request are for a user that does not exist here
---------------------------------------------------------------------------
NoUsername Traceback (most recent call last)
<ipython-input-2-9a2c8d299850> in <module>()
22 item.editEntity(summary='pyWikibot politican in Wahlperiode')
23
---> 24 mark_as_part_of_current_landtag("Q1620526")
<ipython-input-2-9a2c8d299850> in mark_as_part_of_current_landtag(politican_item_id)
6 def mark_as_part_of_current_landtag(politican_item_id):
7 item = pywikibot.ItemPage(repo, politican_item_id)
----> 8 claims = item.get()['claims']['P39']
9
10 legislaturperiode = u'P2937'
/srv/paws/pwb/pywikibot/page.py in get(self, force, get_redirect, *args, **kwargs)
4043 @raise NotImplementedError: a value in args or kwargs
4044 """
-> 4045 data = super(ItemPage, self).get(force, *args, **kwargs)
4046
4047 if self.isRedirectPage() and not get_redirect:
/srv/paws/pwb/pywikibot/page.py in get(self, force, *args, **kwargs)
3646 self.claims[pid] = []
3647 for claim in self._content['claims'][pid]:
-> 3648 c = Claim.fromJSON(self.repo, claim)
3649 c.on_item = self
3650 self.claims[pid].append(c)
/srv/paws/pwb/pywikibot/page.py in fromJSON(cls, site, data)
4477 # The default covers string, url types
4478 claim.target = Claim.TARGET_CONVERTER.get(
-> 4479 claim.type, lambda value, site: value)(value, site)
4480 if 'rank' in data: # References/Qualifiers don't have ranks
4481 claim.rank = data['rank']
/srv/paws/pwb/pywikibot/page.py in <lambda>(value, site)
4417 PropertyPage(site, 'P' + str(value['numeric-id'])),
4418 'commonsMedia': lambda value, site:
-> 4419 FilePage(pywikibot.Site('commons', 'commons'), value),
4420 'globe-coordinate': pywikibot.Coordinate.fromWikibase,
4421 'time': lambda value, site: pywikibot.WbTime.fromWikibase(value),
/srv/paws/pwb/pywikibot/tools/__init__.py in wrapper(*__args, **__kw)
1446 cls, depth)
1447 del __kw[old_arg]
-> 1448 return obj(*__args, **__kw)
1449
1450 if not __debug__:
/srv/paws/pwb/pywikibot/page.py in __init__(self, source, title)
2301 """Constructor."""
2302 self._file_revisions = {} # dictionary to cache File history.
-> 2303 super(FilePage, self).__init__(source, title, 6)
2304 if self.namespace() != 6:
2305 raise ValueError(u"'%s' is not in the file namespace!" % title)
/srv/paws/pwb/pywikibot/tools/__init__.py in wrapper(*__args, **__kw)
1446 cls, depth)
1447 del __kw[old_arg]
-> 1448 return obj(*__args, **__kw)
1449
1450 if not __debug__:
/srv/paws/pwb/pywikibot/page.py in __init__(self, source, title, ns)
2177 raise ValueError(u'Title must be specified and not empty '
2178 'if source is a Site.')
-> 2179 super(Page, self).__init__(source, title, ns)
2180
2181 @deprecate_arg("get_redirect", None)
/srv/paws/pwb/pywikibot/page.py in __init__(self, source, title, ns)
161
162 if isinstance(source, pywikibot.site.BaseSite):
--> 163 self._link = Link(title, source=source, defaultNamespace=ns)
164 self._revisions = {}
165 elif isinstance(source, Page):
/srv/paws/pwb/pywikibot/page.py in __init__(self, text, source, defaultNamespace)
5084 # See bug T104864, defaultNamespace might have been deleted.
5085 try:
-> 5086 self._defaultns = self._source.namespaces[defaultNamespace]
5087 except KeyError:
5088 self._defaultns = defaultNamespace
/srv/paws/pwb/pywikibot/site.py in namespaces(self)
1012 """Return dict of valid namespaces on this wiki."""
1013 if not hasattr(self, '_namespaces'):
-> 1014 self._namespaces = NamespacesDict(self._build_namespaces())
1015 return self._namespaces
1016
/srv/paws/pwb/pywikibot/site.py in _build_namespaces(self)
2610 # For versions lower than 1.14, APISite needs to override
2611 # the defaults defined in Namespace.
-> 2612 is_mw114 = MediaWikiVersion(self.version()) >= MediaWikiVersion('1.14')
2613
2614 for nsdata in self.siteinfo.get('namespaces', cache=False).values():
/srv/paws/pwb/pywikibot/site.py in version(self)
2723 if not version:
2724 try:
-> 2725 version = self.siteinfo.get('generator', expiry=1).split(' ')[1]
2726 except pywikibot.data.api.APIError:
2727 # May occur if you are not logged in (no API read permissions).
/srv/paws/pwb/pywikibot/site.py in get(self, key, get_default, cache, expiry)
1674 elif not Siteinfo._is_expired(cached[1], expiry):
1675 return copy.deepcopy(cached[0])
-> 1676 preloaded = self._get_general(key, expiry)
1677 if not preloaded:
1678 preloaded = self._get_siteinfo(key, expiry)[key]
/srv/paws/pwb/pywikibot/site.py in _get_general(self, key, expiry)
1620 u"', '".join(props)), _logger)
1621 props += ['general']
-> 1622 default_info = self._get_siteinfo(props, expiry)
1623 for prop in props:
1624 self._cache[prop] = default_info[prop]
/srv/paws/pwb/pywikibot/site.py in _get_siteinfo(self, prop, expiry)
1546 # warnings are handled later
1547 request._warning_handler = warn_handler
-> 1548 data = request.submit()
1549 except api.APIError as e:
1550 if e.code == 'siunknown_siprop':
/srv/paws/pwb/pywikibot/data/api.py in submit(self)
2340 cached_available = self._load_cache()
2341 if not cached_available:
-> 2342 self._data = super(CachedRequest, self).submit()
2343 self._write_cache(self._data)
2344 else:
/srv/paws/pwb/pywikibot/data/api.py in submit(self)
2173 continue
2174 raise NoUsername('Failed OAuth authentication for %s: %s'
-> 2175 % (self.site, info))
2176 # raise error
2177 try:
NoUsername: Failed OAuth authentication for commons:commons: The authorization headers in your request are for a user that does not exist hereAfter I registered the account with wikimedia commons as well the edit worked as expected. I made a new account to verify the bug with which I have not registered for commons yet, hoping it might help you debug. It is called Bug_example_bot.
Maybe I am just misunderstanding this but I do not see the connection why I would need to be registered with commons to make changes with wikidata...