🎨 代码格式化

This commit is contained in:
HibiKier 2025-07-03 16:49:45 +08:00
parent bd865c5e07
commit 10009f6827
2 changed files with 10 additions and 104 deletions

View File

@ -1,102 +1,14 @@
from collections.abc import AsyncGenerator from collections.abc import AsyncGenerator
from contextlib import asynccontextmanager from contextlib import asynccontextmanager
import os
from pathlib import Path from pathlib import Path
import sys
from typing import Any, Literal from typing import Any, Literal
from nonebot import get_driver
from nonebot_plugin_alconna import UniMessage from nonebot_plugin_alconna import UniMessage
from nonebot_plugin_htmlrender import get_browser from nonebot_plugin_htmlrender import get_browser
from playwright.__main__ import main from playwright.async_api import Page
from playwright.async_api import Browser, Page, Playwright, async_playwright
from zhenxun.configs.config import BotConfig
from zhenxun.services.log import logger
from zhenxun.utils.message import MessageUtils from zhenxun.utils.message import MessageUtils
driver = get_driver()
_playwright: Playwright | None = None
_browser: Browser | None = None
# @driver.on_startup
# async def start_browser():
# global _playwright
# global _browser
# install()
# await check_playwright_env()
# _playwright = await async_playwright().start()
# _browser = await _playwright.chromium.launch()
# @driver.on_shutdown
# async def shutdown_browser():
# if _browser:
# await _browser.close()
# if _playwright:
# await _playwright.stop() # type: ignore
# def get_browser() -> Browser:
# if not _browser:
# raise RuntimeError("playwright is not initalized")
# return _browser
def install():
"""自动安装、更新 Chromium"""
def set_env_variables():
os.environ["PLAYWRIGHT_DOWNLOAD_HOST"] = (
"https://npmmirror.com/mirrors/playwright/"
)
if BotConfig.system_proxy:
os.environ["HTTPS_PROXY"] = BotConfig.system_proxy
def restore_env_variables():
os.environ.pop("PLAYWRIGHT_DOWNLOAD_HOST", None)
if BotConfig.system_proxy:
os.environ.pop("HTTPS_PROXY", None)
if original_proxy is not None:
os.environ["HTTPS_PROXY"] = original_proxy
def try_install_chromium():
try:
sys.argv = ["", "install", "chromium"]
main()
except SystemExit as e:
return e.code == 0
return False
logger.info("检查 Chromium 更新")
original_proxy = os.environ.get("HTTPS_PROXY")
set_env_variables()
success = try_install_chromium()
if not success:
logger.info("Chromium 更新失败,尝试从原始仓库下载,速度较慢")
os.environ["PLAYWRIGHT_DOWNLOAD_HOST"] = ""
success = try_install_chromium()
restore_env_variables()
if not success:
raise RuntimeError("未知错误Chromium 下载失败")
async def check_playwright_env():
"""检查 Playwright 依赖"""
logger.info("检查 Playwright 依赖")
try:
async with async_playwright() as p:
await p.chromium.launch()
except Exception as e:
raise ImportError("加载失败Playwright 依赖不全,") from e
class BrowserIsNone(Exception): class BrowserIsNone(Exception):
pass pass

View File

@ -1,7 +1,6 @@
import asyncio import asyncio
from collections.abc import AsyncGenerator, Awaitable, Callable, Sequence from collections.abc import AsyncGenerator, Awaitable, Callable, Sequence
from contextlib import asynccontextmanager from contextlib import asynccontextmanager
import json
from pathlib import Path from pathlib import Path
import time import time
from typing import Any, ClassVar, cast from typing import Any, ClassVar, cast
@ -17,11 +16,13 @@ from rich.progress import (
TextColumn, TextColumn,
TransferSpeedColumn, TransferSpeedColumn,
) )
import ujson as json
from zhenxun.configs.config import BotConfig from zhenxun.configs.config import BotConfig
from zhenxun.services.log import logger from zhenxun.services.log import logger
from zhenxun.utils.decorator.retry import Retry from zhenxun.utils.decorator.retry import Retry
from zhenxun.utils.exception import AllURIsFailedError from zhenxun.utils.exception import AllURIsFailedError
from zhenxun.utils.manager.priority_manager import PriorityLifecycle
from zhenxun.utils.user_agent import get_user_agent from zhenxun.utils.user_agent import get_user_agent
from .browser import AsyncPlaywright, BrowserIsNone # noqa: F401 from .browser import AsyncPlaywright, BrowserIsNone # noqa: F401
@ -32,16 +33,14 @@ driver = nonebot.get_driver()
_client: AsyncClient | None = None _client: AsyncClient | None = None
@driver.on_startup @PriorityLifecycle.on_startup(priority=5)
async def _init_client(): async def _():
""" """
在Bot启动时初始化全局httpx客户端 在Bot启动时初始化全局httpx客户端
""" """
global _client global _client
proxy_url = BotConfig.system_proxy if BotConfig.system_proxy else None
client_kwargs = {} client_kwargs = {}
if proxy_url: if proxy_url := BotConfig.system_proxy or None:
try: try:
version_parts = httpx.__version__.split(".") version_parts = httpx.__version__.split(".")
major = int("".join(c for c in version_parts[0] if c.isdigit())) major = int("".join(c for c in version_parts[0] if c.isdigit()))
@ -71,7 +70,7 @@ async def _init_client():
@driver.on_shutdown @driver.on_shutdown
async def _close_client(): async def _():
""" """
在Bot关闭时关闭全局httpx客户端 在Bot关闭时关闭全局httpx客户端
""" """
@ -172,11 +171,7 @@ class AsyncHttpx:
use_proxy = final_config.pop("use_proxy", True) use_proxy = final_config.pop("use_proxy", True)
if "proxies" not in final_config and "proxy" not in final_config: if "proxies" not in final_config and "proxy" not in final_config:
if use_proxy: final_config["proxies"] = cls.default_proxy if use_proxy else None
final_config["proxies"] = cls.default_proxy
else:
final_config["proxies"] = None
return final_config return final_config
@classmethod @classmethod
@ -212,8 +207,7 @@ class AsyncHttpx:
""" """
[内部] 执行单次HTTP请求的私有核心方法被重试装饰器包裹 [内部] 执行单次HTTP请求的私有核心方法被重试装饰器包裹
""" """
response = await client.request(method, url, **kwargs) return await client.request(method, url, **kwargs)
return response
@classmethod @classmethod
async def _single_request( async def _single_request(
@ -245,7 +239,7 @@ class AsyncHttpx:
""" """
通用执行器按顺序尝试多个URL直到成功 通用执行器按顺序尝试多个URL直到成功
Args: 参数:
urls: 单个URL或URL列表 urls: 单个URL或URL列表
worker: 一个接受单个URL和其他kwargs并执行请求的协程函数 worker: 一个接受单个URL和其他kwargs并执行请求的协程函数
client: 可选的HTTP客户端 client: 可选的HTTP客户端