jenkins-bot submitted this change.
[bugfix] upcast to FilePage for a proper extension only
- also raise ValueError if no file extension is given
- update pagegenerators_tests TestWantedFactoryGenerator accordingly
and take into account that generator yields a Page instead of a
FilePage.
Bug: T346889
Change-Id: I4f6b52b456655a64bed54780b973d552b7a9eeda
---
M pywikibot/page/_filepage.py
M tests/pagegenerators_tests.py
M pywikibot/data/api/_generators.py
3 files changed, 27 insertions(+), 5 deletions(-)
diff --git a/pywikibot/data/api/_generators.py b/pywikibot/data/api/_generators.py
index 3090ef3..e483ef3 100644
--- a/pywikibot/data/api/_generators.py
+++ b/pywikibot/data/api/_generators.py
@@ -11,6 +11,7 @@
# Distributed under the terms of the MIT license.
#
from abc import ABC, abstractmethod
+from contextlib import suppress
from typing import Union
from warnings import warn
@@ -719,7 +720,8 @@
if ns == 2:
p = pywikibot.User(p)
elif ns == 6:
- p = pywikibot.FilePage(p)
+ with suppress(ValueError):
+ p = pywikibot.FilePage(p)
elif ns == 14:
p = pywikibot.Category(p)
update_page(p, pagedata, self.props)
diff --git a/pywikibot/page/_filepage.py b/pywikibot/page/_filepage.py
index 4cb91fe..f9347ad 100644
--- a/pywikibot/page/_filepage.py
+++ b/pywikibot/page/_filepage.py
@@ -55,9 +55,10 @@
super().__init__(source, title, 6)
if self.namespace() != 6:
raise ValueError(f"'{self.title()}' is not in the file namespace!")
- title = self.title(with_section=False)
- extension = title.rpartition('.')[2].lower()
- if extension not in self.site.file_extensions:
+
+ title = self.title(with_ns=False, with_section=False)
+ _, sep, extension = title.rpartition('.')
+ if not sep or extension.lower() not in self.site.file_extensions:
raise ValueError(
f'{title!r} does not have a valid extension '
f'({", ".join(self.site.file_extensions)}).'
diff --git a/tests/pagegenerators_tests.py b/tests/pagegenerators_tests.py
index 607617b..f6b90b6 100755
--- a/tests/pagegenerators_tests.py
+++ b/tests/pagegenerators_tests.py
@@ -1435,7 +1435,11 @@
"""Test wantedfiles generator."""
self.gf.handle_arg('-wantedfiles:5')
for page in self._generator_with_tests():
- self.assertIsInstance(page, pywikibot.FilePage)
+ self.assertIsInstance(page, pywikibot.Page)
+ if not isinstance(page, pywikibot.FilePage):
+ with self.assertRaisesRegex(ValueError,
+ 'does not have a valid extension'):
+ pywikibot.FilePage(page)
def test_wanted_templates(self):
"""Test wantedtemplates generator."""
To view, visit change 959331. To unsubscribe, or for help writing mail filters, visit settings.