diff --git a/README.md b/README.md index dacc8cb..d074abc 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,7 @@ ## 项目结构 ``` -douyu_login_py/ +live-hub-py/ ├── core/ # 核心业务逻辑 │ ├── models.py # Account, ProxyConfig 数据类 │ ├── douyu/ # 斗鱼登录模块 @@ -53,7 +53,7 @@ douyu_login_py/ 应用宝充值 Worker 已合并到 Web 应用容器中,内部仅监听 `127.0.0.1:8810`,不发布额外端口。任务数据与应用数据一起保存在 `data/yyb-worker-jobs/`。 ```bash -cd /opt/douyu_login_py +cd /opt/live-hub-py python3 -c 'import secrets; print(secrets.token_urlsafe(32))' ``` diff --git a/dev.sh b/dev.sh index 4c7f5a1..3956a72 100755 --- a/dev.sh +++ b/dev.sh @@ -6,10 +6,10 @@ set -euo pipefail ROOT_DIR="$(cd "$(dirname "$0")" && pwd)" cd "$ROOT_DIR" -# 目录改名后,旧 shell 可能仍携带 douyu_login_py/.venv;交给 uv 选择当前项目环境。 -if [ "${VIRTUAL_ENV:-}" != "$ROOT_DIR/.venv" ]; then - unset VIRTUAL_ENV -fi +# 目录改名后,旧 shell 可能仍携带旧项目的 VIRTUAL_ENV。 +# 开发脚本始终使用当前仓库的环境,不要求每次手工指定或重新激活环境。 +unset VIRTUAL_ENV +export UV_PROJECT_ENVIRONMENT="$ROOT_DIR/.venv" # 使用新的项目标识;可通过环境变量覆盖。 COMPOSE_PROJECT_NAME="${COMPOSE_PROJECT_NAME:-live-hub-py}" diff --git a/pyproject.toml b/pyproject.toml index 3cb21e2..2b90523 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,5 +1,5 @@ [project] -name = "douyu-login-py" +name = "live-hub-py" version = "0.2.1" description = "直播账号运营 Web 后台" readme = "README.md" diff --git a/services/yyb-worker/runtime/probe-jsdom-pay.mjs b/services/yyb-worker/runtime/probe-jsdom-pay.mjs index 14d00ad..af01ff6 100644 --- a/services/yyb-worker/runtime/probe-jsdom-pay.mjs +++ b/services/yyb-worker/runtime/probe-jsdom-pay.mjs @@ -1,12 +1,16 @@ import fs from 'node:fs'; +import path from 'node:path'; +import { fileURLToPath } from 'node:url'; import { JSDOM, ResourceLoader } from 'jsdom'; import { patchEnvironment } from './scripts/jsdom-patch-env.mjs'; -const ROOT = '/Users/yml/codes/douyu_login_py'; +// Resolve the repository from this file so the probe works after a checkout +// is renamed or moved to another host. +const ROOT = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '../../..'); const taskId = process.argv[2] || '142265ef3d874ce6'; -const out = `${ROOT}/data/yyb-worker-dev/${taskId}/jsdom-order`; -const goodsUrl = JSON.parse(fs.readFileSync(`${out}/device-fp.json`, 'utf8')).goods_url; -const pageInfoPath = process.argv[3] || `${out}/web-page-info-response.json`; +const out = path.join(ROOT, 'data', 'yyb-worker-dev', taskId, 'jsdom-order'); +const goodsUrl = JSON.parse(fs.readFileSync(path.join(out, 'device-fp.json'), 'utf8')).goods_url; +const pageInfoPath = process.argv[3] || path.join(out, 'web-page-info-response.json'); const pageInfo = fs.existsSync(pageInfoPath) ? fs.readFileSync(pageInfoPath, 'utf8') : '{"ret":0,"msg":"","info":{}}'; @@ -14,7 +18,7 @@ const pageInfo = fs.existsSync(pageInfoPath) const captured = []; const requests = []; const pageErrors = []; -const dom = new JSDOM(fs.readFileSync(`${out}/goods.html`, 'utf8'), { +const dom = new JSDOM(fs.readFileSync(path.join(out, 'goods.html'), 'utf8'), { url: goodsUrl, referrer: 'https://z.iwan.yyb.qq.com/', pretendToBeVisual: true, diff --git a/uv.lock b/uv.lock index 9b316af..70eea80 100644 --- a/uv.lock +++ b/uv.lock @@ -224,73 +224,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/15/ea/81cf3858b256494b31a554cf76bbd345def3ea7e7a1a592cc515633b4e28/curl_cffi-0.16.0-cp313-abi3-android_24_arm64_v8a.whl", hash = "sha256:06b1c7e07af8ff7c4c5ce4086ea89cc582ebff9adff4a37cfffa5f5de5d5b943", size = 8603463, upload-time = "2026-08-01T13:44:55.003Z" }, ] -[[package]] -name = "douyu-login-py" -version = "0.2.1" -source = { editable = "." } -dependencies = [ - { name = "alembic" }, - { name = "bcrypt" }, - { name = "curl-cffi" }, - { name = "fastapi" }, - { name = "loguru" }, - { name = "numpy" }, - { name = "onnxruntime" }, - { name = "opencv-python-headless" }, - { name = "pillow" }, - { name = "pycryptodome" }, - { name = "pydantic" }, - { name = "pyexecjs" }, - { name = "pymysql" }, - { name = "python-jose", extra = ["cryptography"] }, - { name = "python-multipart" }, - { name = "requests", extra = ["socks"] }, - { name = "scipy" }, - { name = "segno" }, - { name = "sqlalchemy" }, - { name = "uvicorn", extra = ["standard"] }, - { name = "websockets" }, -] - -[package.dev-dependencies] -dev = [ - { name = "pyright" }, - { name = "pytest" }, - { name = "ruff" }, -] - -[package.metadata] -requires-dist = [ - { name = "alembic", specifier = ">=1.18.4" }, - { name = "bcrypt", specifier = ">=4.0.0" }, - { name = "curl-cffi", specifier = ">=0.13" }, - { name = "fastapi", specifier = ">=0.110.0" }, - { name = "loguru", specifier = ">=0.7.0" }, - { name = "numpy", specifier = ">=1.24.0" }, - { name = "onnxruntime", specifier = ">=1.18.0" }, - { name = "opencv-python-headless", specifier = ">=4.8.0" }, - { name = "pillow", specifier = ">=10.0.0" }, - { name = "pycryptodome", specifier = ">=3.19.0" }, - { name = "pydantic", specifier = ">=2.0.0" }, - { name = "pyexecjs", specifier = ">=1.5.1" }, - { name = "pymysql", specifier = ">=1.1,<2" }, - { name = "python-jose", extras = ["cryptography"], specifier = ">=3.3.0" }, - { name = "python-multipart", specifier = ">=0.0.9" }, - { name = "requests", extras = ["socks"], specifier = ">=2.31.0" }, - { name = "scipy", specifier = ">=1.13.0" }, - { name = "segno", specifier = ">=1.6" }, - { name = "sqlalchemy", specifier = ">=2.0.0" }, - { name = "uvicorn", extras = ["standard"], specifier = ">=0.27.0" }, - { name = "websockets", specifier = ">=16.0" }, -] - -[package.metadata.requires-dev] -dev = [ - { name = "pyright", specifier = ">=1.1.411" }, - { name = "pytest", specifier = ">=9.1.1" }, - { name = "ruff", specifier = ">=0.12.0" }, -] - [[package]] name = "ecdsa" version = "0.19.2" @@ -385,6 +318,73 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl", hash = "sha256:f631c04d2c48c52b84d0d0549c99ff3859c98df65b3101406327ecc7d53fbf12", size = 7484, upload-time = "2025-10-18T21:55:41.639Z" }, ] +[[package]] +name = "live-hub-py" +version = "0.2.1" +source = { editable = "." } +dependencies = [ + { name = "alembic" }, + { name = "bcrypt" }, + { name = "curl-cffi" }, + { name = "fastapi" }, + { name = "loguru" }, + { name = "numpy" }, + { name = "onnxruntime" }, + { name = "opencv-python-headless" }, + { name = "pillow" }, + { name = "pycryptodome" }, + { name = "pydantic" }, + { name = "pyexecjs" }, + { name = "pymysql" }, + { name = "python-jose", extra = ["cryptography"] }, + { name = "python-multipart" }, + { name = "requests", extra = ["socks"] }, + { name = "scipy" }, + { name = "segno" }, + { name = "sqlalchemy" }, + { name = "uvicorn", extra = ["standard"] }, + { name = "websockets" }, +] + +[package.dev-dependencies] +dev = [ + { name = "pyright" }, + { name = "pytest" }, + { name = "ruff" }, +] + +[package.metadata] +requires-dist = [ + { name = "alembic", specifier = ">=1.18.4" }, + { name = "bcrypt", specifier = ">=4.0.0" }, + { name = "curl-cffi", specifier = ">=0.13" }, + { name = "fastapi", specifier = ">=0.110.0" }, + { name = "loguru", specifier = ">=0.7.0" }, + { name = "numpy", specifier = ">=1.24.0" }, + { name = "onnxruntime", specifier = ">=1.18.0" }, + { name = "opencv-python-headless", specifier = ">=4.8.0" }, + { name = "pillow", specifier = ">=10.0.0" }, + { name = "pycryptodome", specifier = ">=3.19.0" }, + { name = "pydantic", specifier = ">=2.0.0" }, + { name = "pyexecjs", specifier = ">=1.5.1" }, + { name = "pymysql", specifier = ">=1.1,<2" }, + { name = "python-jose", extras = ["cryptography"], specifier = ">=3.3.0" }, + { name = "python-multipart", specifier = ">=0.0.9" }, + { name = "requests", extras = ["socks"], specifier = ">=2.31.0" }, + { name = "scipy", specifier = ">=1.13.0" }, + { name = "segno", specifier = ">=1.6" }, + { name = "sqlalchemy", specifier = ">=2.0.0" }, + { name = "uvicorn", extras = ["standard"], specifier = ">=0.27.0" }, + { name = "websockets", specifier = ">=16.0" }, +] + +[package.metadata.requires-dev] +dev = [ + { name = "pyright", specifier = ">=1.1.411" }, + { name = "pytest", specifier = ">=9.1.1" }, + { name = "ruff", specifier = ">=0.12.0" }, +] + [[package]] name = "loguru" version = "0.7.3" diff --git a/web/backend/version.py b/web/backend/version.py index d8adb6b..560d5d0 100644 --- a/web/backend/version.py +++ b/web/backend/version.py @@ -19,6 +19,6 @@ def get_app_version() -> str: return version try: - return package_version("douyu-login-py") + return package_version("live-hub-py") except PackageNotFoundError: return "0.0.0"