Skip to content

fix(download): fixed RecursionError when multiple async tasks use rich Progress concurrently - #586

Merged
fllesser merged 1 commit into
masterfrom
fllesser/issue585
Aug 27, 2026
Merged

fix(download): fixed RecursionError when multiple async tasks use rich Progress concurrently#586
fllesser merged 1 commit into
masterfrom
fllesser/issue585

Conversation

@fllesser

Copy link
Copy Markdown
Owner

No description provided.

@codecov

codecov Bot commented Aug 26, 2026

Copy link
Copy Markdown

❌ 2 Tests Failed:

Tests completed Failed Passed Skipped
45 2 43 3
View the top 2 failed test(s) by shortest run time
tests.parsers.test_weibo::test_repost
Stack Traces | 1.12s run time
tests/parsers/test_weibo.py:60: in test_repost
    await asyncio.gather(*[parse_repost(url) for url in urls])
tests/parsers/test_weibo.py:46: in parse_repost
    parse_result = await parser.parse(keyword, searched)
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.../nonebot_plugin_parser/parsers/base.py:89: in parse
    return await self._handlers[keyword](self, searched)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.../parsers/weibo/__init__.py:50: in _parse_m_weibo_cn
    return await self.parse_weibo_id(wid)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.../parsers/weibo/__init__.py:193: in parse_weibo_id
    weibo_data = common.decoder.decode(response.content).data
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
E   msgspec.ValidationError: Object missing required field `data`
tests.parsers.test_ytdlp::test_download_video
Stack Traces | 5.24s run time
.venv/lib/python3.14........................................../site-packages/yt_dlp/YoutubeDL.py:3589: in process_info
    success, real_download = self.dl(temp_filename, info_dict)
                             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.14........................................../site-packages/yt_dlp/YoutubeDL.py:3324: in dl
    return fd.download(name, new_info, subtitle)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.14.../yt_dlp/downloader/common.py:480: in download
    ret = self.real_download(filename, info_dict)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.14.../yt_dlp/downloader/http.py:362: in real_download
    establish_connection()
.venv/lib/python3.14.../yt_dlp/downloader/http.py:119: in establish_connection
    ctx.data = self.ydl.urlopen(request)
               ^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.14........................................../site-packages/yt_dlp/YoutubeDL.py:4305: in urlopen
    return self._request_director.send(req)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.14.../yt_dlp/networking/common.py:117: in send
    response = handler.send(request)
               ^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.14.../yt_dlp/networking/_helper.py:194: in wrapper
    return func(self, *args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.14.../yt_dlp/networking/common.py:359: in send
    return self._send(request)
           ^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.14.../yt_dlp/networking/_requests.py:361: in _send
    raise HTTPError(res, redirect_loop=max_redirects_exceeded)
E   yt_dlp.networking.exceptions.HTTPError: HTTP Error 403: Forbidden

During handling of the above exception, another exception occurred:
tests/parsers/test_ytdlp.py:17: in test_download_video
    video_path = await yt_dlp_downloader.download_video(TIKTOK_URL)
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.../nonebot_plugin_parser/download/ytdlp.py:107: in download_video
    await asyncio.to_thread(ydl.download, [url])
../.........../_temp/uv-python-dir/cpython-3.14.7-linux-x86_64-gnu/lib/python3.14/asyncio/threads.py:26: in to_thread
    return await loop.run_in_executor(None, func_call)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
../.........../_temp/uv-python-dir/cpython-3.14.7-linux-x86_64-gnu/lib/python3.14....../concurrent/futures/thread.py:86: in run
    result = ctx.run(self.task)
             ^^^^^^^^^^^^^^^^^^
../.........../_temp/uv-python-dir/cpython-3.14.7-linux-x86_64-gnu/lib/python3.14....../concurrent/futures/thread.py:73: in run
    return fn(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.14........................................../site-packages/yt_dlp/YoutubeDL.py:3715: in download
    self.__download_wrapper(self.extract_info)(
.venv/lib/python3.14........................................../site-packages/yt_dlp/YoutubeDL.py:3688: in wrapper
    res = func(*args, **kwargs)
          ^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.14........................................../site-packages/yt_dlp/YoutubeDL.py:1721: in extract_info
    return self.__extract_info(url, self.get_info_extractor(key), download, extra_info, process)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.14........................................../site-packages/yt_dlp/YoutubeDL.py:1732: in wrapper
    return func(self, *args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.14........................................../site-packages/yt_dlp/YoutubeDL.py:1888: in __extract_info
    return self.process_ie_result(ie_result, download, extra_info)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.14........................................../site-packages/yt_dlp/YoutubeDL.py:1947: in process_ie_result
    ie_result = self.process_video_result(ie_result, download=download)
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.14........................................../site-packages/yt_dlp/YoutubeDL.py:3135: in process_video_result
    self.process_info(new_info)
.venv/lib/python3.14........................................../site-packages/yt_dlp/YoutubeDL.py:195: in wrapper
    return func(self, *args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.14........................................../site-packages/yt_dlp/YoutubeDL.py:3598: in process_info
    self.report_error(f'unable to download video data: {err}')
.venv/lib/python3.14........................................../site-packages/yt_dlp/YoutubeDL.py:1166: in report_error
    self.trouble(f'{self._format_err("ERROR:", self.Styles.ERROR)} {message}', *args, **kwargs)
.venv/lib/python3.14........................................../site-packages/yt_dlp/YoutubeDL.py:1104: in trouble
    raise DownloadError(message, exc_info)
E   yt_dlp.utils.DownloadError: ERROR: unable to download video data: HTTP Error 403: Forbidden

To view more test analytics, go to the Test Analytics Dashboard
📋 Got 3 mins? Take this short survey to help us improve Test Analytics.

@github-actions

Copy link
Copy Markdown
类型 PIL 耗时(秒) HTML 耗时(秒) 渲染所用图片总大小(MB) PIL 导出图片大小(MB) HTML 导出图片大小(MB)
微博视频2 0.01121 0.82196 0.01280 0.03541 0.18327
微博视频 0.01199 0.82642 0.01280 0.03432 0.18050
微博纯文2 0.03320 0.91785 0.00638 0.11973 0.35898
哔哩哔哩动态(包含emoji) 0.28012 1.94077 0.01244 0.18507 0.55960
bilibili-read 0.36452 2.74942 0.19652 1.34762 3.55924
微博图集(2张) 0.36930 1.18815 4.88308 0.64458 2.21195
微博图集(4张) 0.45386 1.84852 2.34023 0.72816 2.45148
B站动态 0.54933 3.11211 0.00653 1.34777 3.51336
微博图集(9张) 1.31277 2.14529 10.98936 0.98579 3.08158

@fllesser
fllesser merged commit 884f805 into master Aug 27, 2026
15 of 16 checks passed
@fllesser
fllesser deleted the fllesser/issue585 branch August 27, 2026 10:47
@fllesser fllesser added the bug Something isn't working label Aug 27, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bug Something isn't working

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant