Page MenuHomePhabricator

Site cache does not distinguish between classes
Closed, ResolvedPublic

Description

pywikibot has a cache of Site objects in the method pywikibot.Site. It uses a key of (family_name, site_code, username). If the site is a data repository, and first access of the site is via APISite.data_repository(), a DataSite object will be cached, and subsequent requests for an APISite will return a DataSite instead of an APISite.

DataSite is an APISite, but it has many methods marked as NotImplemented.

Steps to reproduce:

  1. Set the user-config.py default site to ar.wikipedia
  2. Instantiate a Wikidata client site object for ar.wikipedia
  3. Request the Wikidata repo object
  4. Instantiate a Wikidata repo site object for wikidata.wikidata

Expected results:
The object returned from step 4 will be an APISite

Actual results:
The object returned from step 4 will be a DataSite

$ python pwb.py shell
Welcome to the Pywikibot interactive shell!

import pywikibot
s = pywikibot.Site('ar', 'wikipedia')
ds = s.data_repository()
ds

DataSite("wikidata", "wikidata")

s2 = pywikibot.Site('wikidata', 'wikidata')
s2

DataSite("wikidata", "wikidata")


Version: core-(2.0)
Severity: major

Details

Reference
bz71451

Event Timeline

bzimport raised the priority of this task from to Needs Triage.Nov 22 2014, 3:49 AM
bzimport set Reference to bz71451.
bzimport added a subscriber: Unknown Object (????).

fwiw, this bug was exposed by running more tests on different default site configurations.

https://travis-ci.org/wikimedia/pywikibot-core/jobs/36525125

Change 163784 had a related patch set uploaded by John Vandenberg:
Use Site interface in cache key

https://gerrit.wikimedia.org/r/163784

Change 163784 merged by jenkins-bot:
Use Site interface in cache key

https://gerrit.wikimedia.org/r/163784