Page MenuHomePhabricator

Pywikibot crashes when _WbDataPage is initialized with non-existing target
Closed, DuplicatePublicBUG REPORT

Description

  File "C:\Users\admin\Documents\core\pywikibot\bot.py", line 1527, in run
    super(Bot, self).run()
  File "C:\Users\admin\Documents\core\pywikibot\bot.py", line 1399, in run
    for item in self.generator:
  File "C:\Users\admin\Documents\core\pywikibot\pagegenerators.py", line 2265, in PreloadingEntityGenerator
    for i in repo.preload_entities(group, groupsize):
  File "C:\Users\admin\Documents\core\pywikibot\site\__init__.py", line 7975, in preload_entities
    page.get()  # cannot provide get_redirect=True (T145971)
  File "C:\Users\admin\Documents\core\pywikibot\page\__init__.py", line 4857, in get
    data = super(ItemPage, self).get(force, *args, **kwargs)
  File "C:\Users\admin\Documents\core\pywikibot\page\__init__.py", line 4449, in get
    data = WikibaseEntity.get(self, force=force)
  File "C:\Users\admin\Documents\core\pywikibot\page\__init__.py", line 4218, in get
    value = cls.fromJSON(self._content.get(key, {}), self.repo)
  File "C:\Users\admin\Documents\core\pywikibot\page\__init__.py", line 3812, in fromJSON
    this[key] = [Claim.fromJSON(repo, claim) for claim in claims]
  File "C:\Users\admin\Documents\core\pywikibot\page\__init__.py", line 3812, in <listcomp>
    this[key] = [Claim.fromJSON(repo, claim) for claim in claims]
  File "C:\Users\admin\Documents\core\pywikibot\page\__init__.py", line 5387, in fromJSON
    claim.type, lambda value, site: value)(value, site)
  File "C:\Users\admin\Documents\core\pywikibot\__init__.py", line 1055, in fromWikibase
    return cls(page, site)
  File "C:\Users\admin\Documents\core\pywikibot\__init__.py", line 1026, in __init__
    specifics['ending'], specifics['label'])
  File "C:\Users\admin\Documents\core\pywikibot\__init__.py", line 993, in _validate
    raise ValueError('Page must exist.')
ValueError: Page must exist.
CRITICAL: Exiting due to uncaught exception <class 'ValueError'>

An example was Q1126 (before I fixed it). Now it can be reproduced with:

>>> repo = pywikibot.Site('wikidata', 'wikidata')
>>> item = pywikibot.ItemPage(repo, 'Q1093')
>>> item.get()

Having this validation is fine. But it happens when you just load the item. This is similar to T226157 and T246359.