jenkins-bot submitted this change.

View Change

Approvals: Zache-tool: Looks good to me, approved jenkins-bot: Verified
[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.

Gerrit-MessageType: merged
Gerrit-Project: pywikibot/core
Gerrit-Branch: master
Gerrit-Change-Id: Ife4b1a7e648f770df98d6141902a28e0d7cb62f5
Gerrit-Change-Number: 1047079
Gerrit-PatchSet: 3
Gerrit-Owner: Xqt <info@gno.de>
Gerrit-Reviewer: JJMC89 <JJMC89.Wikimedia@gmail.com>
Gerrit-Reviewer: Zache-tool <kimmo.virtanen@gmail.com>
Gerrit-Reviewer: jenkins-bot