fix(env): 本机启动读取根目录 .env,监听地址兼容 BIND_ADDR
- study_tool/__init__.py 用 python-dotenv 加载根目录 .env,位置早于 store / config 读环境变量;已有环境变量优先,Docker 注入的不受影响 - app.py 监听地址改为 HOST -> BIND_ADDR -> 127.0.0.1 依次回退 - 新增依赖 python-dotenv>=1.0(pyproject.toml / requirements.txt / uv.lock) - README 环境变量表补充 .env 说明与 BIND_ADDR / TZ 两行 - CHANGELOG / docs/OPTIMIZATION.md 记录本次修复,版本号 0.0.6 -> 0.0.7
This commit is contained in:
@@ -1,3 +1,12 @@
|
||||
"""多账号学习控制台(东莞市教师培训平台)。"""
|
||||
import os
|
||||
|
||||
from dotenv import load_dotenv
|
||||
|
||||
# 仓库根目录的 .env:本机启动(python app.py / uv run app.py)也按它配置。
|
||||
# 必须在任何子模块之前加载 —— store / config 在 import 时就读环境变量;
|
||||
# 已经在环境里的变量优先(Docker 由 compose 注入,不会被 .env 覆盖)。
|
||||
_ROOT = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
|
||||
load_dotenv(os.path.join(_ROOT, ".env"))
|
||||
|
||||
__version__ = "0.0.1"
|
||||
|
||||
@@ -166,8 +166,8 @@ def _probe_self(port):
|
||||
|
||||
def main():
|
||||
port = int(os.environ.get("PORT", "8848"))
|
||||
# 默认只监听本机;Docker / 远程管理用 HOST=0.0.0.0
|
||||
host = os.environ.get("HOST", "127.0.0.1")
|
||||
# 默认只监听本机;Docker / 远程管理用 HOST=0.0.0.0(.env 里写 BIND_ADDR 同样生效)
|
||||
host = os.environ.get("HOST") or os.environ.get("BIND_ADDR") or "127.0.0.1"
|
||||
url = "http://127.0.0.1:%d" % port
|
||||
# 设了访问令牌时,打印出来的地址一律带上 ?token=:本机访问同样要校验令牌
|
||||
suffix = ("/?token=%s" % AUTH_TOKEN) if AUTH_TOKEN else ""
|
||||
|
||||
@@ -1,45 +0,0 @@
|
||||
"""莞易学平台:jspx.dgjy.net(登录入口)与 study.dgjy.net(学习入口)是同一个平台。
|
||||
|
||||
账号在「添加账号」里选择平台(`accounts.platform`),登录 / 刷新课程 / 发现课程都会
|
||||
走这里的 `login` / `list_courses` / `discover`;学习时 `discover` 会把页面代际写进
|
||||
`course["generation"]`(legacy / spa),由 `study` 分发到对应实现。
|
||||
新增其他平台时,照本文件写一个 `Platform` 子类并在 `entries` 声明登录 / 学习入口。
|
||||
"""
|
||||
from study_tool.platforms import jspx, registry, study
|
||||
from study_tool.platforms.base import Platform
|
||||
|
||||
|
||||
class Guanyixue(Platform):
|
||||
id = "guanyixue"
|
||||
label = "莞易学"
|
||||
# 登录入口 / 学习入口;命中任意一个就归到莞易学
|
||||
entries = ("jspx.dgjy.net", "study.dgjy.net", "dgjy.net")
|
||||
|
||||
def session(self, cookies=None):
|
||||
return jspx.new_session(cookies)
|
||||
|
||||
def dump_cookies(self, s):
|
||||
return jspx.dump_cookies(s)
|
||||
|
||||
def login(self, username, password):
|
||||
return jspx.login(username, password)
|
||||
|
||||
def list_courses(self, s):
|
||||
return jspx.scrape_courses(s)
|
||||
|
||||
def discover(self, s, plan_id, project_id, name=""):
|
||||
return jspx.discover(s, plan_id, project_id, name)
|
||||
|
||||
def renew_session(self, s):
|
||||
return jspx.ensure_jspx_session(s)
|
||||
|
||||
def profile(self, s):
|
||||
return jspx.whoami(jspx.fetch_admin(s))
|
||||
|
||||
def study(self, key, s, d, **opts):
|
||||
if d.get("generation") == "spa":
|
||||
return study._study(key, s, d, **opts)
|
||||
return jspx._study(key, s, d, **opts)
|
||||
|
||||
|
||||
PLATFORM = registry.register(Guanyixue())
|
||||
@@ -0,0 +1,45 @@
|
||||
"""莞易学平台:jspx.dgjy.net(登录入口)与 study.dgjy.net(学习入口)是同一个平台。
|
||||
|
||||
账号在「添加账号」里选择平台(`accounts.platform`),登录 / 刷新课程 / 发现课程都会
|
||||
走这里的 `login` / `list_courses` / `discover`;学习时 `discover` 会把页面代际写进
|
||||
`course["generation"]`(legacy / spa),由 `study` 分发到对应实现。
|
||||
新增其他平台时,照本文件写一个 `Platform` 子类并在 `entries` 声明登录 / 学习入口。
|
||||
"""
|
||||
from study_tool.platforms import jspx, registry, study
|
||||
from study_tool.platforms.base import Platform
|
||||
|
||||
|
||||
class Guanyixue(Platform):
|
||||
id = "guanyixue"
|
||||
label = "莞易学"
|
||||
# 登录入口 / 学习入口;命中任意一个就归到莞易学
|
||||
entries = ("jspx.dgjy.net", "study.dgjy.net", "dgjy.net")
|
||||
|
||||
def session(self, cookies=None):
|
||||
return jspx.new_session(cookies)
|
||||
|
||||
def dump_cookies(self, s):
|
||||
return jspx.dump_cookies(s)
|
||||
|
||||
def login(self, username, password):
|
||||
return jspx.login(username, password)
|
||||
|
||||
def list_courses(self, s):
|
||||
return jspx.scrape_courses(s)
|
||||
|
||||
def discover(self, s, plan_id, project_id, name=""):
|
||||
return jspx.discover(s, plan_id, project_id, name)
|
||||
|
||||
def renew_session(self, s):
|
||||
return jspx.ensure_jspx_session(s)
|
||||
|
||||
def profile(self, s):
|
||||
return jspx.whoami(jspx.fetch_admin(s))
|
||||
|
||||
def study(self, key, s, d, **opts):
|
||||
if d.get("generation") == "spa":
|
||||
return study._study(key, s, d, **opts)
|
||||
return jspx._study(key, s, d, **opts)
|
||||
|
||||
|
||||
PLATFORM = registry.register(Guanyixue())
|
||||
|
||||
Reference in New Issue
Block a user