From ddcb1fa03ea3cc5bb433bb170d794f90f56c394a Mon Sep 17 00:00:00 2001 From: JeffreyChen Date: Thu, 24 Sep 2026 15:49:22 +0800 Subject: [PATCH 1/2] docs: require README and translations to stay in sync with code --- CLAUDE.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CLAUDE.md b/CLAUDE.md index 787c2ea..7f30210 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -239,6 +239,12 @@ All code must satisfy common static-analysis rules. Review every change against - Before committing any non-trivial change, run `ruff check automation_file/ tests/` locally. - When adding a `# noqa: RULE`, justify it in the comment — never blanket-disable. +## Documentation + +- **README parity.** This repository ships `README.md` (English) alongside the translated `README.zh-CN.md` and `README.zh-TW.md`. All three must stay current with the code. +- When a change alters anything user-facing — features, commands, CLI flags, install/setup steps, configuration, or requirements — update `README.md` **and both translated READMEs in the same commit**, keeping their structure and content aligned. +- Never update one language and leave the others stale. There is no automated README-parity guard, so verify this by hand before committing. + ## Stage commits, `progress.md`, `docs/updates/` and `architecture.md` Workspace rule shared by every repository under `D:\Codes` (full text: `D:\Codes\CLAUDE.md`). From bc131010fab4489486107c00689655c3d8e30493 Mon Sep 17 00:00:00 2001 From: JeffreyChen Date: Thu, 24 Sep 2026 18:49:03 +0800 Subject: [PATCH 2/2] Update READMEs: drop unsupported drive:// scheme, note bundled OneDrive/Box, refresh dependency list --- README.md | 14 ++++++++------ README.zh-CN.md | 14 ++++++++------ README.zh-TW.md | 14 ++++++++------ 3 files changed, 24 insertions(+), 18 deletions(-) diff --git a/README.md b/README.md index 7a47886..2e6497c 100644 --- a/README.md +++ b/README.md @@ -32,7 +32,7 @@ facade. - **Config hot reload** — `ConfigWatcher` polls `automation_file.toml` and re-applies sinks / defaults on change without restart - **Shell / grep / JSON edit / tar / backup rotation** — `FA_run_shell` (argument-list subprocess with timeout), `FA_grep` (streaming text search), `FA_json_get` / `FA_json_set` / `FA_json_delete` (in-place JSON editing), `FA_create_tar` / `FA_extract_tar`, `FA_rotate_backups` - **FTP / FTPS backend** — plain FTP or explicit FTPS via `FTP_TLS.auth()`; auto-registered as `FA_ftp_*` -- **Cross-backend copy** — `FA_copy_between` moves data between any two backends via `local://`, `s3://`, `drive://`, `azure://`, `dropbox://`, `sftp://`, `ftp://` URIs +- **Cross-backend copy** — `FA_copy_between` moves data between any two backends via `local://`, `s3://`, `azure://`, `dropbox://`, `sftp://`, `ftp://` URIs - **Scheduler overlap guard** — running jobs are skipped on the next fire unless `allow_overlap=True` - **Server action ACL** — `allowed_actions=(...)` restricts which commands TCP / HTTP servers will dispatch - **Variable substitution** — opt-in `${env:VAR}` / `${date:%Y-%m-%d}` / `${uuid}` / `${cwd}` expansion in action arguments via `execute_action(..., substitute=True)` @@ -143,7 +143,7 @@ flowchart TD WebDAV["webdav"] SMB["smb / cifs"] Fsspec["fsspec_bridge"] - Cross["cross_backend
local:// s3:// drive:// azure://
dropbox:// sftp:// ftp://"] + Cross["cross_backend
local:// s3:// azure://
dropbox:// sftp:// ftp://"] end subgraph Notify["notifications"] @@ -298,7 +298,7 @@ pip install automation_file ``` A single install pulls in every backend (Google Drive, S3, Azure Blob, Dropbox, -SFTP) and the PySide6 GUI — no extras required for day-to-day use. +SFTP, OneDrive, Box) and the PySide6 GUI — no extras required for day-to-day use. ```bash pip install "automation_file[dev]" # ruff, mypy, pre-commit, pytest-cov, build, twine @@ -306,9 +306,11 @@ pip install "automation_file[dev]" # ruff, mypy, pre-commit, pytest-cov, b Requirements: - Python 3.10+ -- Bundled dependencies: `google-api-python-client`, `google-auth-oauthlib`, - `requests`, `tqdm`, `boto3`, `azure-storage-blob`, `dropbox`, `paramiko`, - `PySide6`, `watchdog` +- Bundled dependencies: `google-api-python-client`, `google-auth-httplib2`, `google-auth-oauthlib`, `requests`, + `tqdm`, `boto3`, `azure-storage-blob`, `dropbox`, + `paramiko`, `msal`, `boxsdk`, `PySide6`, + `watchdog`, `cryptography`, `prometheus_client`, `defusedxml`, + `PyYAML`, `pyarrow`, `opentelemetry-api`, `opentelemetry-sdk` ## Usage diff --git a/README.zh-CN.md b/README.zh-CN.md index e81979b..9ff5730 100644 --- a/README.zh-CN.md +++ b/README.zh-CN.md @@ -30,7 +30,7 @@ TCP / HTTP 服务器执行的 JSON 驱动动作。内附 PySide6 GUI,每个功 - **配置热加载** — `ConfigWatcher` 轮询 `automation_file.toml`,变更时即时应用 sink / 默认值,无需重启 - **Shell / grep / JSON 编辑 / tar / 备份轮转** — `FA_run_shell`(参数列表式 subprocess,含超时)、`FA_grep`(流式文本搜索)、`FA_json_get` / `FA_json_set` / `FA_json_delete`(原地 JSON 编辑)、`FA_create_tar` / `FA_extract_tar`、`FA_rotate_backups` - **FTP / FTPS 后端** — 纯 FTP 或通过 `FTP_TLS.auth()` 的显式 FTPS;自动注册为 `FA_ftp_*` -- **跨后端复制** — `FA_copy_between` 通过 `local://`、`s3://`、`drive://`、`azure://`、`dropbox://`、`sftp://`、`ftp://` URI 在任意两个后端之间搬运数据 +- **跨后端复制** — `FA_copy_between` 通过 `local://`、`s3://`、`azure://`、`dropbox://`、`sftp://`、`ftp://` URI 在任意两个后端之间搬运数据 - **调度器重叠防护** — 正在执行的作业在下次触发时会被跳过,除非显式传入 `allow_overlap=True` - **服务器动作 ACL** — `allowed_actions=(...)` 限制 TCP / HTTP 服务器可派发的命令 - **变量替换** — 动作参数中可选使用 `${env:VAR}` / `${date:%Y-%m-%d}` / `${uuid}` / `${cwd}`,通过 `execute_action(..., substitute=True)` 展开 @@ -141,7 +141,7 @@ flowchart TD WebDAV["webdav"] SMB["smb / cifs"] Fsspec["fsspec_bridge"] - Cross["cross_backend
local:// s3:// drive:// azure://
dropbox:// sftp:// ftp://"] + Cross["cross_backend
local:// s3:// azure://
dropbox:// sftp:// ftp://"] end subgraph Notify["通知"] @@ -295,7 +295,7 @@ flowchart TD pip install automation_file ``` -单次安装即涵盖所有后端(Google Drive、S3、Azure Blob、Dropbox、SFTP)以及 +单次安装即涵盖所有后端(Google Drive、S3、Azure Blob、Dropbox、SFTP、OneDrive、Box)以及 PySide6 GUI — 日常使用不需要任何 extras。 ```bash @@ -304,9 +304,11 @@ pip install "automation_file[dev]" # ruff, mypy, pre-commit, pytest-cov, b 要求: - Python 3.10+ -- 内置依赖:`google-api-python-client`、`google-auth-oauthlib`、 - `requests`、`tqdm`、`boto3`、`azure-storage-blob`、`dropbox`、`paramiko`、 - `PySide6`、`watchdog` +- 内置依赖:`google-api-python-client`、`google-auth-httplib2`、`google-auth-oauthlib`、`requests`、 + `tqdm`、`boto3`、`azure-storage-blob`、`dropbox`、 + `paramiko`、`msal`、`boxsdk`、`PySide6`、 + `watchdog`、`cryptography`、`prometheus_client`、`defusedxml`、 + `PyYAML`、`pyarrow`、`opentelemetry-api`、`opentelemetry-sdk` ## 使用方式 diff --git a/README.zh-TW.md b/README.zh-TW.md index 6f5804d..965dc3a 100644 --- a/README.zh-TW.md +++ b/README.zh-TW.md @@ -30,7 +30,7 @@ TCP / HTTP 伺服器執行的 JSON 驅動動作。內附 PySide6 GUI,每個功 - **設定熱重載** — `ConfigWatcher` 輪詢 `automation_file.toml`,變更時即時套用 sink / 預設值,無需重啟 - **Shell / grep / JSON 編輯 / tar / 備份輪替** — `FA_run_shell`(參數列表式 subprocess,含逾時)、`FA_grep`(串流文字搜尋)、`FA_json_get` / `FA_json_set` / `FA_json_delete`(原地 JSON 編輯)、`FA_create_tar` / `FA_extract_tar`、`FA_rotate_backups` - **FTP / FTPS 後端** — 純 FTP 或透過 `FTP_TLS.auth()` 的顯式 FTPS;自動註冊為 `FA_ftp_*` -- **跨後端複製** — `FA_copy_between` 透過 `local://`、`s3://`、`drive://`、`azure://`、`dropbox://`、`sftp://`、`ftp://` URI 在任意兩個後端之間搬運資料 +- **跨後端複製** — `FA_copy_between` 透過 `local://`、`s3://`、`azure://`、`dropbox://`、`sftp://`、`ftp://` URI 在任意兩個後端之間搬運資料 - **排程器重疊防護** — 正在執行的工作在下次觸發時會被跳過,除非明確傳入 `allow_overlap=True` - **伺服器動作 ACL** — `allowed_actions=(...)` 限制 TCP / HTTP 伺服器可派送的指令 - **變數替換** — 動作參數中可選使用 `${env:VAR}` / `${date:%Y-%m-%d}` / `${uuid}` / `${cwd}`,透過 `execute_action(..., substitute=True)` 展開 @@ -141,7 +141,7 @@ flowchart TD WebDAV["webdav"] SMB["smb / cifs"] Fsspec["fsspec_bridge"] - Cross["cross_backend
local:// s3:// drive:// azure://
dropbox:// sftp:// ftp://"] + Cross["cross_backend
local:// s3:// azure://
dropbox:// sftp:// ftp://"] end subgraph Notify["通知"] @@ -295,7 +295,7 @@ flowchart TD pip install automation_file ``` -單一安裝即涵蓋所有後端(Google Drive、S3、Azure Blob、Dropbox、SFTP)以及 +單一安裝即涵蓋所有後端(Google Drive、S3、Azure Blob、Dropbox、SFTP、OneDrive、Box)以及 PySide6 GUI — 日常使用不需要任何 extras。 ```bash @@ -304,9 +304,11 @@ pip install "automation_file[dev]" # ruff, mypy, pre-commit, pytest-cov, b 需求: - Python 3.10+ -- 內建相依套件:`google-api-python-client`、`google-auth-oauthlib`、 - `requests`、`tqdm`、`boto3`、`azure-storage-blob`、`dropbox`、`paramiko`、 - `PySide6`、`watchdog` +- 內建相依套件:`google-api-python-client`、`google-auth-httplib2`、`google-auth-oauthlib`、`requests`、 + `tqdm`、`boto3`、`azure-storage-blob`、`dropbox`、 + `paramiko`、`msal`、`boxsdk`、`PySide6`、 + `watchdog`、`cryptography`、`prometheus_client`、`defusedxml`、 + `PyYAML`、`pyarrow`、`opentelemetry-api`、`opentelemetry-sdk` ## 使用方式