Last modified: 2014-09-30 22:00:13 UTC
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")
The cache key has been this way since the beginning of pwb20 http://git.wikimedia.org/blobdiff/pywikibot%2Fcore.git/c636fd0db2b41a618bcbcffc02c126dd96cc0d64/pywikibot%2F__init__.py It only became a problem since the DataSite class was added in 2012 http://git.wikimedia.org/commit/pywikibot%2Fcore.git/aa0ebedcd6a9b3e13af7f40cce7a59925523de5b
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