Page MenuHomePhabricator

Page.iterlanglinks for a page on commons returns pages on commons
Closed, ResolvedPublic

Description

import pywikibot as p
s=p.Site('commons','commons')
pg=p.Page(s, 'New York City')
for i in pg.iterlanglinks(): print i.site

...
commons:commons
<snip>

There are a few things that are working together to cause this:

iterlanglinks calls Site.pagelanglinks which does:

yield pywikibot.Link.langlinkUnsafe(linkdata['lang'],
                                    linkdata['*'],
                                    source=self)

In langlinkUnsafe, there is:

link._site = pywikibot.Site(lang, source.family.name)

Now, unfortunately for commons:

p.Site('en','commons')

Site("commons", "commons")

Another issue is that https://commons.wikimedia.org/w/api.php?action=query&titles=New%20York%20City&prop=langlinks (the actual API query we make) only returns language codes, not full database names.


Version: core-(2.0)
Severity: normal
Whiteboard: backportable

Details

Reference
bz54745

Event Timeline

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

Then, what site it should return? [[enwikivoyage:New York City]] or [[New York City]]?

In my opinion, there should be an additional parameter which indicates the family we are looking at. The default value would be none, indicating that it should look for its own family. Therefore, in this case, calling langlinks() should get empty list. Calling langlinks(fam='wikipedia') would get the list of pages whose site is Wikipedia. blah blah

Commons is a weird wiki. The langlinks point to Wikipedia. That should be the behavior in the bot too.

Change 138299 had a related patch set uploaded by John Vandenberg:
Bug 54745: Link.langlinkUnsafe interwiki_forward

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

Change 138299 merged by jenkins-bot:
Bug 54745: Link.langlinkUnsafe interwiki_forward

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

Should we change this in compat, too?