Dvorapa created this task. Dvorapa added a project: Pywikibot. Restricted Application added subscribers: pywikibot-bugs-list, Aklapper.
TASK DESCRIPTION **Steps to reproduce** import pywikibot s=pywikibot.Site('test2', 'wikipedia') for i in s.allpages(namespace=14, filterredir=False): # iterate over all categories if not i.isEmptyCategory() and next(i.categories(total=1), False): # is a subcategory and contains 1 or more subcategories c = i.subcategories(recurse=True) # get subcategories if i in c: # is there a loop? g = set() for j in c: # iterate over members if g: g.add(j) # add loop member if j == i: # found beginning/end of the loop if not g: g.add(i) # start tracking the loop else: print(g) # finish loop break **Expected behavior** This simple code to print category loops worked for years, last time in May 2022 <https://cs.wikipedia.org/w/index.php?title=Wikipedie:%C3%9Adr%C5%BEbov%C3%A9_seznamy/Cykly_v_kategori%C3%ADch/seznam&action=history>. **Current behavior** Lately the code started to fail after a minute of running with this long traceback: $ python cykly-v-kategoriich2.py ERROR: Traceback (most recent call last): File "/home/pavel/pywikibot/pywikibot/data/api/_requests.py", line 681, in _http_request response = http.request(self.site, uri=uri, File "/home/pavel/pywikibot/pywikibot/comms/http.py", line 233, in request r = fetch(baseuri, headers=headers, **kwargs) File "/home/pavel/pywikibot/pywikibot/comms/http.py", line 399, in fetch callback(response) File "/home/pavel/pywikibot/pywikibot/comms/http.py", line 284, in error_handling_callback raise response from None File "/home/pavel/pywikibot/pywikibot/comms/http.py", line 390, in fetch response = session.request(method, uri, File "/usr/lib/python3.10/site-packages/requests/sessions.py", line 587, in request resp = self.send(prep, **send_kwargs) File "/usr/lib/python3.10/site-packages/requests/sessions.py", line 701, in send r = adapter.send(request, **kwargs) File "/usr/lib/python3.10/site-packages/requests/adapters.py", line 489, in send resp = conn.urlopen( File "/usr/lib/python3.10/site-packages/urllib3/connectionpool.py", line 703, in urlopen httplib_response = self._make_request( File "/usr/lib/python3.10/site-packages/urllib3/connectionpool.py", line 449, in _make_request six.raise_from(e, None) File "<string>", line 3, in raise_from File "/usr/lib/python3.10/site-packages/urllib3/connectionpool.py", line 444, in _make_request httplib_response = conn.getresponse() File "/usr/lib/python3.10/http/client.py", line 1374, in getresponse response.begin() File "/usr/lib/python3.10/http/client.py", line 337, in begin self.headers = self.msg = parse_headers(self.fp) File "/usr/lib/python3.10/http/client.py", line 236, in parse_headers return email.parser.Parser(_class=_class).parsestr(hstring) File "/usr/lib/python3.10/email/parser.py", line 67, in parsestr return self.parse(StringIO(text), headersonly=headersonly) File "/usr/lib/python3.10/email/parser.py", line 56, in parse feedparser.feed(data) File "/usr/lib/python3.10/email/feedparser.py", line 176, in feed self._call_parse() File "/usr/lib/python3.10/email/feedparser.py", line 180, in _call_parse self._parse() File "/usr/lib/python3.10/email/feedparser.py", line 295, in _parsegen if self._cur.get_content_maintype() == 'message': File "/usr/lib/python3.10/email/message.py", line 594, in get_content_maintype ctype = self.get_content_type() File "/usr/lib/python3.10/email/message.py", line 578, in get_content_type value = self.get('content-type', missing) File "/usr/lib/python3.10/email/message.py", line 471, in get return self.policy.header_fetch_parse(k, v) File "/usr/lib/python3.10/email/_policybase.py", line 316, in header_fetch_parse return self._sanitize_header(name, value) File "/usr/lib/python3.10/email/_policybase.py", line 287, in _sanitize_header if _has_surrogates(value): File "/usr/lib/python3.10/email/utils.py", line 57, in _has_surrogates s.encode() RecursionError: maximum recursion depth exceeded while calling a Python object WARNING: Waiting 5.0 seconds before retrying. ERROR: Traceback (most recent call last): File "/home/pavel/pywikibot/pywikibot/data/api/_requests.py", line 681, in _http_request response = http.request(self.site, uri=uri, File "/home/pavel/pywikibot/pywikibot/comms/http.py", line 233, in request r = fetch(baseuri, headers=headers, **kwargs) File "/home/pavel/pywikibot/pywikibot/comms/http.py", line 399, in fetch callback(response) File "/home/pavel/pywikibot/pywikibot/comms/http.py", line 284, in error_handling_callback raise response from None File "/home/pavel/pywikibot/pywikibot/comms/http.py", line 390, in fetch response = session.request(method, uri, File "/usr/lib/python3.10/site-packages/requests/sessions.py", line 587, in request resp = self.send(prep, **send_kwargs) File "/usr/lib/python3.10/site-packages/requests/sessions.py", line 701, in send r = adapter.send(request, **kwargs) File "/usr/lib/python3.10/site-packages/requests/adapters.py", line 489, in send resp = conn.urlopen( File "/usr/lib/python3.10/site-packages/urllib3/connectionpool.py", line 703, in urlopen httplib_response = self._make_request( File "/usr/lib/python3.10/site-packages/urllib3/connectionpool.py", line 449, in _make_request six.raise_from(e, None) File "<string>", line 3, in raise_from File "/usr/lib/python3.10/site-packages/urllib3/connectionpool.py", line 444, in _make_request httplib_response = conn.getresponse() File "/usr/lib/python3.10/http/client.py", line 1374, in getresponse response.begin() File "/usr/lib/python3.10/http/client.py", line 337, in begin self.headers = self.msg = parse_headers(self.fp) File "/usr/lib/python3.10/http/client.py", line 236, in parse_headers return email.parser.Parser(_class=_class).parsestr(hstring) File "/usr/lib/python3.10/email/parser.py", line 67, in parsestr return self.parse(StringIO(text), headersonly=headersonly) File "/usr/lib/python3.10/email/parser.py", line 56, in parse feedparser.feed(data) File "/usr/lib/python3.10/email/feedparser.py", line 176, in feed self._call_parse() File "/usr/lib/python3.10/email/feedparser.py", line 180, in _call_parse self._parse() File "/usr/lib/python3.10/email/feedparser.py", line 295, in _parsegen if self._cur.get_content_maintype() == 'message': File "/usr/lib/python3.10/email/message.py", line 594, in get_content_maintype ctype = self.get_content_type() File "/usr/lib/python3.10/email/message.py", line 578, in get_content_type value = self.get('content-type', missing) File "/usr/lib/python3.10/email/message.py", line 471, in get return self.policy.header_fetch_parse(k, v) File "/usr/lib/python3.10/email/_policybase.py", line 316, in header_fetch_parse return self._sanitize_header(name, value) File "/usr/lib/python3.10/email/_policybase.py", line 287, in _sanitize_header if _has_surrogates(value): File "/usr/lib/python3.10/email/utils.py", line 57, in _has_surrogates s.encode() RecursionError: maximum recursion depth exceeded while calling a Python object WARNING: Waiting 10.0 seconds before retrying. ERROR: Traceback (most recent call last): File "/home/pavel/pywikibot/pywikibot/data/api/_requests.py", line 681, in _http_request response = http.request(self.site, uri=uri, File "/home/pavel/pywikibot/pywikibot/comms/http.py", line 233, in request r = fetch(baseuri, headers=headers, **kwargs) File "/home/pavel/pywikibot/pywikibot/comms/http.py", line 399, in fetch callback(response) File "/home/pavel/pywikibot/pywikibot/comms/http.py", line 284, in error_handling_callback raise response from None File "/home/pavel/pywikibot/pywikibot/comms/http.py", line 390, in fetch response = session.request(method, uri, File "/usr/lib/python3.10/site-packages/requests/sessions.py", line 587, in request resp = self.send(prep, **send_kwargs) File "/usr/lib/python3.10/site-packages/requests/sessions.py", line 701, in send r = adapter.send(request, **kwargs) File "/usr/lib/python3.10/site-packages/requests/adapters.py", line 489, in send resp = conn.urlopen( File "/usr/lib/python3.10/site-packages/urllib3/connectionpool.py", line 703, in urlopen httplib_response = self._make_request( File "/usr/lib/python3.10/site-packages/urllib3/connectionpool.py", line 449, in _make_request six.raise_from(e, None) File "<string>", line 3, in raise_from File "/usr/lib/python3.10/site-packages/urllib3/connectionpool.py", line 444, in _make_request httplib_response = conn.getresponse() File "/usr/lib/python3.10/http/client.py", line 1374, in getresponse response.begin() File "/usr/lib/python3.10/http/client.py", line 337, in begin self.headers = self.msg = parse_headers(self.fp) File "/usr/lib/python3.10/http/client.py", line 236, in parse_headers return email.parser.Parser(_class=_class).parsestr(hstring) File "/usr/lib/python3.10/email/parser.py", line 67, in parsestr return self.parse(StringIO(text), headersonly=headersonly) File "/usr/lib/python3.10/email/parser.py", line 56, in parse feedparser.feed(data) File "/usr/lib/python3.10/email/feedparser.py", line 176, in feed self._call_parse() File "/usr/lib/python3.10/email/feedparser.py", line 180, in _call_parse self._parse() File "/usr/lib/python3.10/email/feedparser.py", line 295, in _parsegen if self._cur.get_content_maintype() == 'message': File "/usr/lib/python3.10/email/message.py", line 594, in get_content_maintype ctype = self.get_content_type() File "/usr/lib/python3.10/email/message.py", line 578, in get_content_type value = self.get('content-type', missing) File "/usr/lib/python3.10/email/message.py", line 471, in get return self.policy.header_fetch_parse(k, v) File "/usr/lib/python3.10/email/_policybase.py", line 316, in header_fetch_parse return self._sanitize_header(name, value) File "/usr/lib/python3.10/email/_policybase.py", line 287, in _sanitize_header if _has_surrogates(value): File "/usr/lib/python3.10/email/utils.py", line 57, in _has_surrogates s.encode() RecursionError: maximum recursion depth exceeded while calling a Python object WARNING: Waiting 20.0 seconds before retrying. ERROR: Traceback (most recent call last): File "/home/pavel/pywikibot/pywikibot/data/api/_requests.py", line 681, in _http_request response = http.request(self.site, uri=uri, File "/home/pavel/pywikibot/pywikibot/comms/http.py", line 233, in request r = fetch(baseuri, headers=headers, **kwargs) File "/home/pavel/pywikibot/pywikibot/comms/http.py", line 399, in fetch callback(response) File "/home/pavel/pywikibot/pywikibot/comms/http.py", line 284, in error_handling_callback raise response from None File "/home/pavel/pywikibot/pywikibot/comms/http.py", line 390, in fetch response = session.request(method, uri, File "/usr/lib/python3.10/site-packages/requests/sessions.py", line 587, in request resp = self.send(prep, **send_kwargs) File "/usr/lib/python3.10/site-packages/requests/sessions.py", line 701, in send r = adapter.send(request, **kwargs) File "/usr/lib/python3.10/site-packages/requests/adapters.py", line 489, in send resp = conn.urlopen( File "/usr/lib/python3.10/site-packages/urllib3/connectionpool.py", line 703, in urlopen httplib_response = self._make_request( File "/usr/lib/python3.10/site-packages/urllib3/connectionpool.py", line 449, in _make_request six.raise_from(e, None) File "<string>", line 3, in raise_from File "/usr/lib/python3.10/site-packages/urllib3/connectionpool.py", line 444, in _make_request httplib_response = conn.getresponse() File "/usr/lib/python3.10/http/client.py", line 1374, in getresponse response.begin() File "/usr/lib/python3.10/http/client.py", line 337, in begin self.headers = self.msg = parse_headers(self.fp) File "/usr/lib/python3.10/http/client.py", line 236, in parse_headers return email.parser.Parser(_class=_class).parsestr(hstring) File "/usr/lib/python3.10/email/parser.py", line 67, in parsestr return self.parse(StringIO(text), headersonly=headersonly) File "/usr/lib/python3.10/email/parser.py", line 56, in parse feedparser.feed(data) File "/usr/lib/python3.10/email/feedparser.py", line 176, in feed self._call_parse() File "/usr/lib/python3.10/email/feedparser.py", line 180, in _call_parse self._parse() File "/usr/lib/python3.10/email/feedparser.py", line 295, in _parsegen if self._cur.get_content_maintype() == 'message': File "/usr/lib/python3.10/email/message.py", line 594, in get_content_maintype ctype = self.get_content_type() File "/usr/lib/python3.10/email/message.py", line 578, in get_content_type value = self.get('content-type', missing) File "/usr/lib/python3.10/email/message.py", line 471, in get return self.policy.header_fetch_parse(k, v) File "/usr/lib/python3.10/email/_policybase.py", line 316, in header_fetch_parse return self._sanitize_header(name, value) File "/usr/lib/python3.10/email/_policybase.py", line 287, in _sanitize_header if _has_surrogates(value): File "/usr/lib/python3.10/email/utils.py", line 57, in _has_surrogates s.encode() RecursionError: maximum recursion depth exceeded while calling a Python object WARNING: Waiting 40.0 seconds before retrying. --- Logging error --- Traceback (most recent call last): File "/usr/lib/python3.10/logging/handlers.py", line 75, in emit logging.FileHandler.emit(self, record) File "/usr/lib/python3.10/logging/__init__.py", line 1218, in emit StreamHandler.emit(self, record) File "/usr/lib/python3.10/logging/__init__.py", line 1100, in emit msg = self.format(record) File "/usr/lib/python3.10/logging/__init__.py", line 943, in format return fmt.format(record) File "/home/pavel/pywikibot/pywikibot/tools/_logging.py", line 36, in format return super().format(record).rstrip() File "/usr/lib/python3.10/logging/__init__.py", line 681, in format s = self.formatMessage(record) File "/usr/lib/python3.10/logging/__init__.py", line 650, in formatMessage return self._style.format(record) File "/usr/lib/python3.10/logging/__init__.py", line 440, in format return self._format(record) File "/usr/lib/python3.10/logging/__init__.py", line 436, in _format return self._fmt % values RecursionError: maximum recursion depth exceeded while getting the str of an object During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/home/pavel/pywikibot/cykly-v-kategoriich2.py", line 34, in <module> for j in c: File "/home/pavel/pywikibot/pywikibot/page/_category.py", line 100, in subcategories yield from self.members(member_type='subcat', recurse=recurse, File "/home/pavel/pywikibot/pywikibot/page/_category.py", line 197, in members for member in subcat.members( File "/home/pavel/pywikibot/pywikibot/page/_category.py", line 197, in members for member in subcat.members( File "/home/pavel/pywikibot/pywikibot/page/_category.py", line 197, in members for member in subcat.members( [Previous line repeated 964 more times] File "/home/pavel/pywikibot/pywikibot/page/_category.py", line 196, in members for subcat in self.subcategories(): File "/home/pavel/pywikibot/pywikibot/page/_category.py", line 100, in subcategories yield from self.members(member_type='subcat', recurse=recurse, File "/home/pavel/pywikibot/pywikibot/page/_category.py", line 183, in members for member in self.site.categorymembers(self, total=total, **kwargs): File "/usr/lib/python3.10/_collections_abc.py", line 330, in __next__ return self.send(None) File "/home/pavel/pywikibot/pywikibot/tools/collections.py", line 275, in send return next(self._started_gen) File "/home/pavel/pywikibot/pywikibot/data/api/_generators.py", line 610, in generator self.data = self.request.submit() File "/home/pavel/pywikibot/pywikibot/data/api/_requests.py", line 965, in submit response, use_get = self._http_request(use_get, uri, body, headers, File "/home/pavel/pywikibot/pywikibot/data/api/_requests.py", line 705, in _http_request self.wait() File "/home/pavel/pywikibot/pywikibot/data/api/_requests.py", line 1110, in wait pywikibot.sleep(delay) File "/home/pavel/pywikibot/pywikibot/__init__.py", line 1164, in sleep stopme() File "/home/pavel/pywikibot/pywikibot/__init__.py", line 1177, in stopme _flush(False) File "/home/pavel/pywikibot/pywikibot/__init__.py", line 1237, in _flush log('Dropped throttle(s).') File "/home/pavel/pywikibot/pywikibot/tools/_deprecate.py", line 399, in wrapper return obj(*__args, **__kw) File "/home/pavel/pywikibot/pywikibot/logging.py", line 255, in log logoutput(msg, *args, level=VERBOSE, **kwargs) File "/home/pavel/pywikibot/pywikibot/tools/_deprecate.py", line 399, in wrapper return obj(*__args, **__kw) File "/home/pavel/pywikibot/pywikibot/logging.py", line 152, in logoutput logger.log(level, msg, extra=context, **kwargs) File "/usr/lib/python3.10/logging/__init__.py", line 1547, in log self._log(level, msg, args, **kwargs) File "/usr/lib/python3.10/logging/__init__.py", line 1624, in _log self.handle(record) File "/usr/lib/python3.10/logging/__init__.py", line 1634, in handle self.callHandlers(record) File "/usr/lib/python3.10/logging/__init__.py", line 1696, in callHandlers hdlr.handle(record) File "/usr/lib/python3.10/logging/__init__.py", line 968, in handle self.emit(record) File "/usr/lib/python3.10/logging/handlers.py", line 77, in emit self.handleError(record) File "/usr/lib/python3.10/logging/__init__.py", line 1022, in handleError traceback.print_exception(t, v, tb, None, sys.stderr) File "/usr/lib/python3.10/traceback.py", line 119, in print_exception te = TracebackException(type(value), value, tb, limit=limit, compact=True) File "/usr/lib/python3.10/traceback.py", line 502, in __init__ self.stack = StackSummary.extract( File "/usr/lib/python3.10/traceback.py", line 383, in extract f.line File "/usr/lib/python3.10/traceback.py", line 306, in line self._line = linecache.getline(self.filename, self.lineno) File "/usr/lib/python3.10/linecache.py", line 30, in getline lines = getlines(filename, module_globals) File "/usr/lib/python3.10/linecache.py", line 42, in getlines if len(entry) != 1: RecursionError: maximum recursion depth exceeded while calling a Python object CRITICAL: Exiting due to uncaught exception <class 'RecursionError'> **Configuration** Tested both on Python 3.7.3 and 3.10.8, both my computer (Arch Linux) and Toolforge (Debian Linux) TASK DETAIL https://phabricator.wikimedia.org/T323413 EMAIL PREFERENCES https://phabricator.wikimedia.org/settings/panel/emailpreferences/ To: Dvorapa Cc: Xqt, Aklapper, pywikibot-bugs-list, Dvorapa, PotsdamLamb, Jyoo1011, JohnsonLee01, SHEKH, Dijkstra, Khutuck, Zkhalido, Viztor, Wenyi, Tbscho, MayS, Mdupont, JJMC89, Altostratus, Avicennasis, mys_721tx, jayvdb, Masti, Alchimista
_______________________________________________ pywikibot-bugs mailing list -- pywikibot-bugs@lists.wikimedia.org To unsubscribe send an email to pywikibot-bugs-le...@lists.wikimedia.org