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

Reply via email to