From d65d6d2441081b4edd6c0802fcb53608d0e03222 Mon Sep 17 00:00:00 2001 From: xqt Date: Tue, 18 Jun 2024 15:25:52 +0200 Subject: [PATCH] [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 --- pywikibot/pagegenerators/_generators.py | 20 +++++++++++++++----- tests/file_tests.py | 14 +++++--------- 2 files changed, 20 insertions(+), 14 deletions(-) diff --git a/pywikibot/pagegenerators/_generators.py b/pywikibot/pagegenerators/_generators.py index af59e3dbec..2e5fcee990 100644 --- a/pywikibot/pagegenerators/_generators.py +++ b/pywikibot/pagegenerators/_generators.py @@ -155,8 +155,7 @@ def NewpagesPageGenerator(site: BaseSite | None = None, 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 @@ def RecentChangesPageGenerator( .. 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`, + :class:`pywikibot.User`, + :class:`pywikibot.FilePage` or + :class:`pywikibot.Category`. + .. versionchanged:: 9.2 + Ignore :class:`pywikibot.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 @@ def upcast(gen): 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 f55d73c551..6650bcc14d 100755 --- a/tests/file_tests.py +++ b/tests/file_tests.py @@ -415,16 +415,12 @@ def test_data_item_when_file_exist_but_without_item(self): ) # 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)