Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -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`).
Expand Down
14 changes: 8 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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)`
Expand Down Expand Up @@ -143,7 +143,7 @@ flowchart TD
WebDAV["<b>webdav</b>"]
SMB["<b>smb / cifs</b>"]
Fsspec["<b>fsspec_bridge</b>"]
Cross["<b>cross_backend</b><br/>local:// s3:// drive:// azure://<br/>dropbox:// sftp:// ftp://"]
Cross["<b>cross_backend</b><br/>local:// s3:// azure://<br/>dropbox:// sftp:// ftp://"]
end

subgraph Notify["<b>notifications</b>"]
Expand Down Expand Up @@ -298,17 +298,19 @@ 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
```

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

Expand Down
14 changes: 8 additions & 6 deletions README.zh-CN.md
Original file line number Diff line number Diff line change
Expand Up @@ -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)` 展开
Expand Down Expand Up @@ -141,7 +141,7 @@ flowchart TD
WebDAV["<b>webdav</b>"]
SMB["<b>smb / cifs</b>"]
Fsspec["<b>fsspec_bridge</b>"]
Cross["<b>cross_backend</b><br/>local:// s3:// drive:// azure://<br/>dropbox:// sftp:// ftp://"]
Cross["<b>cross_backend</b><br/>local:// s3:// azure://<br/>dropbox:// sftp:// ftp://"]
end

subgraph Notify["<b>通知</b>"]
Expand Down Expand Up @@ -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
Expand All @@ -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`

## 使用方式

Expand Down
14 changes: 8 additions & 6 deletions README.zh-TW.md
Original file line number Diff line number Diff line change
Expand Up @@ -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)` 展開
Expand Down Expand Up @@ -141,7 +141,7 @@ flowchart TD
WebDAV["<b>webdav</b>"]
SMB["<b>smb / cifs</b>"]
Fsspec["<b>fsspec_bridge</b>"]
Cross["<b>cross_backend</b><br/>local:// s3:// drive:// azure://<br/>dropbox:// sftp:// ftp://"]
Cross["<b>cross_backend</b><br/>local:// s3:// azure://<br/>dropbox:// sftp:// ftp://"]
end

subgraph Notify["<b>通知</b>"]
Expand Down Expand Up @@ -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
Expand All @@ -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`

## 使用方式

Expand Down
Loading