jenkins-bot submitted this change.
[IMPR] ignore ValueError durig upcast of FilePage due to invalid file extension
Also remove retry loop in
TestFilePageDataItem.test_data_item_when_file_exist_but_without_item
of file_tests which doesn't make any sense because the generator was
empty after the exception. Now let the test fail if an exception might
occur but skip the test if no related FilePage was found.
Bug: T367777
Change-Id: Ife4b1a7e648f770df98d6141902a28e0d7cb62f5
---
M pywikibot/pagegenerators/_generators.py
M tests/file_tests.py
2 files changed, 20 insertions(+), 14 deletions(-)
diff --git a/pywikibot/pagegenerators/_generators.py b/pywikibot/pagegenerators/_generators.py
index af59e3d..2e5fcee 100644
--- a/pywikibot/pagegenerators/_generators.py
+++ b/pywikibot/pagegenerators/_generators.py
@@ -155,8 +155,7 @@
namespaces: NamespaceArgType = (0, ),
total: int | None = None
) -> Generator[pywikibot.page.Page, None, None]:
- """
- Iterate Page objects for all new titles in a single namespace.
+ """Iterate Page objects for all new titles in a single namespace.
:param site: Site for generator results.
:param namespace: namespace to retrieve pages from
@@ -185,8 +184,14 @@
.. versionchanged:: 8.2
The YieldType depends on namespace. It can be
- :class:`pywikibot.Page`, :class:`pywikibot.User`,
- :class:`pywikibot.FilePage` or :class:`pywikibot.Category`.
+ :class:`pywikibot.Page<pywikibot.page.Page>`,
+ :class:`pywikibot.User<pywikibot.page.User>`,
+ :class:`pywikibot.FilePage<pywikibot.page.FilePage>` or
+ :class:`pywikibot.Category<pywikibot.page.Category>`.
+ .. versionchanged:: 9.2
+ Ignore :class:`pywikibot.FilePage<pywikibot.page.FilePage>` if it
+ raises a :exc:`ValueError` during upcast e.g. due to an invaild
+ file extension.
:param site: Site for generator results.
"""
@@ -206,7 +211,12 @@
pageclass = pywikibot.Category
else:
pageclass = pywikibot.Page
- yield pageclass(site, rc['title'])
+ try:
+ yield pageclass(site, rc['title'])
+ except ValueError:
+ if pageclass == pywikibot.FilePage:
+ pywikibot.exception()
+ raise
if site is None:
site = pywikibot.Site()
diff --git a/tests/file_tests.py b/tests/file_tests.py
index f55d73c..6650bcc 100755
--- a/tests/file_tests.py
+++ b/tests/file_tests.py
@@ -415,16 +415,12 @@
)
# Seek to first page without mediainfo.
- # Retry loop is for excepting incorrect files
- for retry in range(5):
- try:
- for page in gen:
- slots = page.latest_revision.slots
- if 'mediainfo' not in slots:
- break
+ for page in gen:
+ slots = page.latest_revision.slots
+ if 'mediainfo' not in slots:
break
- except ValueError:
- pass
+ else:
+ self.skipTest('No page found without mediainfo')
item = page.data_item()
self.assertIsInstance(item, pywikibot.MediaInfo)
To view, visit change 1047079. To unsubscribe, or for help writing mail filters, visit settings.