John Vandenberg has uploaded a new change for review.
https://gerrit.wikimedia.org/r/234722
Change subject: Allow fromDBName from site
......................................................................
Allow fromDBName from site
When meta.wikimedia.org has large lag times, testConstructors halts.
Change-Id: I01a9864e5dc29f399b35ba21e7a90326d02acf61
---
M pywikibot/site.py
M tests/site_tests.py
2 files changed, 50 insertions(+), 28 deletions(-)
git pull ssh://gerrit.wikimedia.org:29418/pywikibot/core
refs/changes/22/234722/1
diff --git a/pywikibot/site.py b/pywikibot/site.py
index 3f3fe9f..6a87601 100644
--- a/pywikibot/site.py
+++ b/pywikibot/site.py
@@ -1654,9 +1654,20 @@
self.tokens = TokenWallet(self)
@classmethod
- def fromDBName(cls, dbname):
+ def fromDBName(cls, dbname, site=None):
+ """
+ Create a site from a database name using the sitematrix.
+
+ @param dbname: database name
+ @type dbname: str
+ @param site: Site to load sitematrix from. (Default meta.wikimedia.org)
+ @type site: APISite
+ @return: site object for the database name
+ @rtype: APISite
+ """
# TODO this only works for some WMF sites
- site = pywikibot.Site('meta', 'meta')
+ if not site:
+ site = pywikibot.Site('meta', 'meta')
req = site._request(expiry=datetime.timedelta(days=10),
parameters={'action': 'sitematrix'})
data = req.submit()
diff --git a/tests/site_tests.py b/tests/site_tests.py
index 5b23525..fc49d0d 100644
--- a/tests/site_tests.py
+++ b/tests/site_tests.py
@@ -243,20 +243,31 @@
def testConstructors(self):
"""Test cases for site constructors."""
+ if isinstance(self.site.family, pywikibot.family.WikimediaFamily):
+ site = self.site
+ else:
+ site = None
self.assertEqual(pywikibot.site.APISite.fromDBName('enwiki'),
- pywikibot.Site('en', 'wikipedia'))
+ pywikibot.Site('en', 'wikipedia'),
+ site)
self.assertEqual(pywikibot.site.APISite.fromDBName('eswikisource'),
- pywikibot.Site('es', 'wikisource'))
+ pywikibot.Site('es', 'wikisource'),
+ site)
self.assertEqual(pywikibot.site.APISite.fromDBName('dewikinews'),
- pywikibot.Site('de', 'wikinews'))
+ pywikibot.Site('de', 'wikinews'),
+ site)
self.assertEqual(pywikibot.site.APISite.fromDBName('ukwikivoyage'),
- pywikibot.Site('uk', 'wikivoyage'))
+ pywikibot.Site('uk', 'wikivoyage'),
+ site)
self.assertEqual(pywikibot.site.APISite.fromDBName('metawiki'),
- pywikibot.Site('meta', 'meta'))
+ pywikibot.Site('meta', 'meta'),
+ site)
self.assertEqual(pywikibot.site.APISite.fromDBName('commonswiki'),
- pywikibot.Site('commons', 'commons'))
+ pywikibot.Site('commons', 'commons'),
+ site)
self.assertEqual(pywikibot.site.APISite.fromDBName('wikidatawiki'),
- pywikibot.Site('wikidata', 'wikidata'))
+ pywikibot.Site('wikidata', 'wikidata'),
+ site)
def testLanguageMethods(self):
"""Test cases for languages() and related methods."""
@@ -481,37 +492,37 @@
for page in fwd:
self.assertIsInstance(page, pywikibot.Page)
self.assertTrue(mysite.page_exists(page))
- self.assertEqual(page.namespace(), 0)
+ self.assertEqual(page.namespace, 0)
rev = list(mysite.allpages(reverse=True, start="Aa", total=12))
self.assertLessEqual(len(rev), 12)
for page in rev:
self.assertIsInstance(page, pywikibot.Page)
self.assertTrue(mysite.page_exists(page))
- self.assertEqual(page.namespace(), 0)
+ self.assertEqual(page.namespace, 0)
self.assertLessEqual(page.title(), "Aa")
for page in mysite.allpages(start="Py", total=5):
self.assertIsInstance(page, pywikibot.Page)
self.assertTrue(mysite.page_exists(page))
- self.assertEqual(page.namespace(), 0)
+ self.assertEqual(page.namespace, 0)
self.assertGreaterEqual(page.title(), "Py")
for page in mysite.allpages(prefix="Pre", total=5):
self.assertIsInstance(page, pywikibot.Page)
self.assertTrue(mysite.page_exists(page))
- self.assertEqual(page.namespace(), 0)
+ self.assertEqual(page.namespace, 0)
self.assertTrue(page.title().startswith("Pre"))
for page in mysite.allpages(namespace=1, total=5):
self.assertIsInstance(page, pywikibot.Page)
self.assertTrue(mysite.page_exists(page))
- self.assertEqual(page.namespace(), 1)
+ self.assertEqual(page.namespace, 1)
for page in mysite.allpages(filterredir=True, total=5):
self.assertIsInstance(page, pywikibot.Page)
self.assertTrue(mysite.page_exists(page))
- self.assertEqual(page.namespace(), 0)
+ self.assertEqual(page.namespace, 0)
self.assertTrue(page.isRedirectPage())
for page in mysite.allpages(filterredir=False, total=5):
self.assertIsInstance(page, pywikibot.Page)
self.assertTrue(mysite.page_exists(page))
- self.assertEqual(page.namespace(), 0)
+ self.assertEqual(page.namespace, 0)
self.assertFalse(page.isRedirectPage())
@allowed_failure # T78276
@@ -520,7 +531,7 @@
for page in mysite.allpages(filterlanglinks=True, total=5):
self.assertIsInstance(page, pywikibot.Page)
self.assertTrue(mysite.page_exists(page))
- self.assertEqual(page.namespace(), 0)
+ self.assertEqual(page.namespace, 0)
self.assertNotEqual(page.langlinks(), [])
def test_allpages_langlinks_disabled(self):
@@ -528,7 +539,7 @@
for page in mysite.allpages(filterlanglinks=False, total=5):
self.assertIsInstance(page, pywikibot.Page)
self.assertTrue(mysite.page_exists(page))
- self.assertEqual(page.namespace(), 0)
+ self.assertEqual(page.namespace, 0)
self.assertEqual(page.langlinks(), [])
def test_allpages_pagesize(self):
@@ -575,15 +586,15 @@
self.assertTrue(all(link in uniq for link in fwd))
for page in mysite.alllinks(start="Link", total=5):
self.assertIsInstance(page, pywikibot.Page)
- self.assertEqual(page.namespace(), 0)
+ self.assertEqual(page.namespace, 0)
self.assertGreaterEqual(page.title(), "Link")
for page in mysite.alllinks(prefix="Fix", total=5):
self.assertIsInstance(page, pywikibot.Page)
- self.assertEqual(page.namespace(), 0)
+ self.assertEqual(page.namespace, 0)
self.assertTrue(page.title().startswith("Fix"))
for page in mysite.alllinks(namespace=1, total=5):
self.assertIsInstance(page, pywikibot.Page)
- self.assertEqual(page.namespace(), 1)
+ self.assertEqual(page.namespace, 1)
for page in mysite.alllinks(start="From", namespace=4, fromids=True,
total=5):
self.assertIsInstance(page, pywikibot.Page)
@@ -769,7 +780,7 @@
for link in eu))
for link in mysite.exturlusage(url, namespaces=[2, 3], total=5):
self.assertIsInstance(link, pywikibot.Page)
- self.assertIn(link.namespace(), (2, 3))
+ self.assertIn(link.namespace, (2, 3))
def test_lock_page(self):
"""Test the site.lock_page() and site.unlock_page() method."""
@@ -1170,20 +1181,20 @@
self.assertLessEqual(len(se), 100)
self.assertTrue(all(isinstance(hit, pywikibot.Page)
for hit in se))
- self.assertTrue(all(hit.namespace() == 0 for hit in se))
+ self.assertTrue(all(hit.namespace == 0 for hit in se))
for hit in mysite.search("common", namespaces=4, total=5):
self.assertIsInstance(hit, pywikibot.Page)
- self.assertEqual(hit.namespace(), 4)
+ self.assertEqual(hit.namespace, 4)
for hit in mysite.search("word", namespaces=[5, 6, 7], total=5):
self.assertIsInstance(hit, pywikibot.Page)
- self.assertIn(hit.namespace(), [5, 6, 7])
+ self.assertIn(hit.namespace, [5, 6, 7])
for hit in mysite.search("another", namespaces="8|9|10", total=5):
self.assertIsInstance(hit, pywikibot.Page)
- self.assertIn(hit.namespace(), [8, 9, 10])
+ self.assertIn(hit.namespace, [8, 9, 10])
for hit in mysite.search("wiki", namespaces=0, total=10,
get_redirects=True):
self.assertIsInstance(hit, pywikibot.Page)
- self.assertEqual(hit.namespace(), 0)
+ self.assertEqual(hit.namespace, 0)
except pywikibot.data.api.APIError as e:
if e.code == "gsrsearch-error" and "timed out" in e.info:
raise unittest.SkipTest("gsrsearch returned timeout on site:
%r" % e)
@@ -1690,7 +1701,7 @@
mysite = self.get_site()
for rndpage in mysite.randompages(total=5, namespaces=[6, 7]):
self.assertIsInstance(rndpage, pywikibot.Page)
- self.assertIn(rndpage.namespace(), [6, 7])
+ self.assertIn(rndpage.namespace, [6, 7])
class TestSiteTokens(DefaultSiteTestCase):
--
To view, visit https://gerrit.wikimedia.org/r/234722
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I01a9864e5dc29f399b35ba21e7a90326d02acf61
Gerrit-PatchSet: 1
Gerrit-Project: pywikibot/core
Gerrit-Branch: master
Gerrit-Owner: John Vandenberg <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits