jenkins-bot has submitted this change and it was merged.
Change subject: [FIX] Sametitle: Don't discard invalid namespaces ......................................................................
[FIX] Sametitle: Don't discard invalid namespaces
If the namespace was invalid, sametitle would've still just compared the text after the 'namespace' so a page title like 'Foo:Bar' would result in 'namespace main' and 'name is Bar' although it should've been 'name is Foo:Bar' because 'Foo' is not a valid namespace.
Also modified the tests so this will be more visible in the future.
Change-Id: Idd42d63125fa2470374c0392e26cceac9e49bb30 --- M pywikibot/site.py M tests/site_tests.py 2 files changed, 24 insertions(+), 15 deletions(-)
Approvals: John Vandenberg: Looks good to me, approved jenkins-bot: Verified
diff --git a/pywikibot/site.py b/pywikibot/site.py index 009adeb..d83a098 100644 --- a/pywikibot/site.py +++ b/pywikibot/site.py @@ -818,11 +818,13 @@ """ def ns_split(title): """Separate the namespace from the name.""" - if ':' not in title: - title = ':' + title - ns, _, name = title.partition(':') - ns = Namespace.lookup_name(ns, self.namespaces) or default_ns - return ns, name + ns, delim, name = title.partition(':') + if delim: + ns = Namespace.lookup_name(ns, self.namespaces) + if not delim or not ns: + return default_ns, title + else: + return ns, name
if title1 == title2: return True diff --git a/tests/site_tests.py b/tests/site_tests.py index e738859..82e11f5 100644 --- a/tests/site_tests.py +++ b/tests/site_tests.py @@ -1905,7 +1905,7 @@ self.assertEqual(item.id, 'Q5296')
-class TestSameTitleSite(TestCase): +class TestSametitleSite(TestCase):
"""Test APISite.sametitle on sites with known behaviour."""
@@ -1924,27 +1924,34 @@ } }
- def check(self, site, case_sensitive): - self.assertEqual(site.sametitle('Foo', 'foo'), not case_sensitive) - self.assertTrue(site.sametitle('File:Foo', 'Image:Foo')) - self.assertTrue(site.sametitle(':Foo', 'Foo')) - self.assertFalse(site.sametitle('User:Foo', 'Foo')) - def test_enwp(self): - self.check(self.get_site('enwp'), False) + self.assertTrue(self.get_site('enwp').sametitle('Foo', 'foo')) self.assertFalse(self.get_site('enwp').sametitle( 'Template:Test template', 'Template:Test Template'))
def test_dewp(self): site = self.get_site('dewp') - self.check(site, False) + self.assertTrue(site.sametitle('Foo', 'foo')) self.assertTrue(site.sametitle('Benutzer:Foo', 'User:Foo')) self.assertTrue(site.sametitle('Benutzerin:Foo', 'User:Foo')) self.assertTrue(site.sametitle('Benutzerin:Foo', 'Benutzer:Foo'))
def test_enwt(self): - self.check(self.get_site('enwt'), True) + self.assertFalse(self.get_site('enwt').sametitle('Foo', 'foo'))
+ def test_general(self, code): + site = self.get_site(code) + self.assertTrue(site.sametitle('File:Foo', 'Image:Foo')) + self.assertTrue(site.sametitle(':Foo', 'Foo')) + self.assertFalse(site.sametitle('User:Foo', 'Foo')) + self.assertFalse(site.sametitle('User:Foo', 'Project:Foo')) + + self.assertTrue(site.sametitle('Namespace:', 'Namespace:')) + + self.assertFalse(site.sametitle('Invalid:Foo', 'Foo')) + self.assertFalse(site.sametitle('Invalid1:Foo', 'Invalid2:Foo')) + self.assertFalse(site.sametitle('Invalid:Foo', ':Foo')) + self.assertFalse(site.sametitle('Invalid:Foo', 'Invalid:foo'))
if __name__ == '__main__': try: