Skip to content

Commit ef51e2e

Browse files
author
farfarfun
committed
clear history
0 parents  commit ef51e2e

117 files changed

Lines changed: 33165 additions & 0 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/workflows/sync.yml

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
#https://github.com/marketplace/actions/hub-mirror-action
2+
name: syncToGitee
3+
on:
4+
push:
5+
tags:
6+
- '*'
7+
jobs:
8+
repo-sync:
9+
runs-on: ubuntu-latest
10+
11+
steps:
12+
- name: Mirror the Github organization repos to Gitee.
13+
uses: Yikun/hub-mirror-action@master
14+
15+
with:
16+
src: github/farfarfun
17+
dst: gitee/farfarfun
18+
dst_key: ${{ secrets.GITEE_RSA_PRIVATE_KEY }}
19+
dst_token: ${{ secrets.GITEE_TOKEN }}
20+
force_update: true
21+
account_type: org
22+
static_list: 'fundrive'

.gitignore

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
example/download
2+
*/__pycache__
3+
fundrive/base/__pycache__
4+
fundrive/baidu/__pycache__
5+
fundrive/lanzou/__pycache__
6+
*.pyc
7+
*.egg-info
8+
build
9+
dist
10+
.cache
11+
.venv
12+
logs
13+
uv.lock

.idea/.gitignore

Lines changed: 8 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/dictionaries/project.xml

Lines changed: 7 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/fundrive.iml

Lines changed: 15 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/inspectionProfiles/profiles_settings.xml

Lines changed: 6 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/misc.xml

Lines changed: 7 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/modules.xml

Lines changed: 8 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/vcs.xml

Lines changed: 6 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

INTERFACE-OPTIMIZATION.md

Lines changed: 107 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,107 @@
1+
# 接口优化方案与约定(向上兼容)
2+
3+
本文档由 CTO 细化,作为 FunDrive 统一网盘接口的**规范基准**。所有新增与修改必须遵守**向上兼容**原则:不破坏现有调用方。
4+
5+
**规范来源**`src/fundrive/core/base.py` 中的 `BaseDrive``DriveFile` 为唯一接口定义来源。
6+
7+
---
8+
9+
## 1. 核心接口契约
10+
11+
### 1.1 方法签名(与 BaseDrive 一致)
12+
13+
以下签名为**规范签名**。各驱动实现时:
14+
15+
- **必须**保持相同的位置参数顺序与名称(至少通过 `*args, **kwargs` 兼容)。
16+
- **可以**增加仅通过 `**kwargs` 传递的可选参数,不得改变已有参数语义。
17+
- **禁止**移除参数、改变参数顺序或必填/可选关系。
18+
19+
| 方法 | 规范签名 | 返回值 |
20+
|------|----------|--------|
21+
| `login` | `(self, *args, **kwargs)` | `bool` |
22+
| `exist` | `(self, fid: str, *args, **kwargs)` | `bool` |
23+
| `mkdir` | `(self, fid: str, name: str, return_if_exist: bool = True, *args, **kwargs)` | `str`(新创建或已存在目录的 ID) |
24+
| `delete` | `(self, fid: str, *args, **kwargs)` | `bool` |
25+
| `get_file_list` | `(self, fid: str, *args, **kwargs)` | `List[DriveFile]` |
26+
| `get_dir_list` | `(self, fid: str, *args, **kwargs)` | `List[DriveFile]` |
27+
| `get_file_info` | `(self, fid: str, *args, **kwargs)` | `Optional[DriveFile]` |
28+
| `get_dir_info` | `(self, fid: str, *args, **kwargs)` | `DriveFile`(基类注释为不可为 None;实现可返回 `Optional[DriveFile]`,调用方需做空检查) |
29+
| `upload_file` | `(self, filepath: str, fid: str, *args, **kwargs)` | `bool` |
30+
| `download_file` | `(self, fid: str, save_dir=None, filename=None, filepath=None, overwrite=False, *args, **kwargs)` | `bool` |
31+
32+
**根目录 fid 约定**:不同驱动对“根”的表示可能不同(如 `""``"root"``"/"`)。调用方应使用驱动文档或 `root_fid` 属性(若已登录);实现方应在文档中明确本驱动的根 fid。
33+
34+
---
35+
36+
### 1.2 DriveFile 契约
37+
38+
- **必有字段**`fid` (str)、`name` (str)。
39+
- **推荐字段**`size` (int, 字节)、`is_dir` (bool)。
40+
- **扩展**:通过 `ext` 或字典形式存放驱动特有字段;消费方不得依赖未在文档中声明的扩展字段。
41+
42+
---
43+
44+
## 2. 配置约定
45+
46+
### 2.1 配置优先级(从高到低)
47+
48+
1. 构造函数显式传入的关键字参数。
49+
2. `funsecret.read_secret(key, namespace="fundrive")`
50+
3. 环境变量(键名建议:`FUNDRIVE_<DRIVE>_<KEY>`,如 `FUNDRIVE_BAIDU_ACCESS_TOKEN`)。
51+
52+
### 2.2 funsecret 键名约定
53+
54+
- 格式:`fundrive.<drive_name>.<param>`,例如 `fundrive.pan115.cookie_path`
55+
- namespace 统一使用 `"fundrive"`
56+
57+
### 2.3 敏感信息
58+
59+
- 不得在日志或异常消息中输出密钥、token、cookie 等。
60+
- 推荐通过 funsecret 或环境变量注入,避免硬编码。
61+
62+
---
63+
64+
## 3. 调用约定
65+
66+
### 3.1 调用方
67+
68+
- **推荐**:核心参数用关键字传递(如 `upload_file(filepath=..., fid=...)`),便于阅读与兼容。
69+
- **兼容**:必须支持按规范签名顺序的位置参数调用(与现有 API 文档一致)。
70+
71+
### 3.2 实现方(各驱动)
72+
73+
- 必须接受并忽略未使用的 `*args, **kwargs`,不得因“多余”关键字参数报错(保证上层传参的兼容性)。
74+
- 新增可选能力只通过 `**kwargs` 增加,且需在驱动 README 或 docstring 中说明。
75+
76+
### 3.3 路径解析
77+
78+
- 下载目标路径:与 `get_filepath(save_dir=..., filename=..., filepath=...)` 语义一致;`filepath` 优先,否则 `save_dir` + `filename`
79+
- 上传:`filepath` 为本地绝对或相对路径,`fid` 为目标目录 ID。
80+
81+
---
82+
83+
## 4. 向上兼容规则
84+
85+
- **不删除**:任何已对外暴露的方法或参数不删除。
86+
- **不收紧**:已接受的值域/类型不得收紧(例如原先接受 `fid=""` 表示根目录的,不得改为必填非空)。
87+
- **不改变顺序**:规范中列出的位置参数顺序不得改变。
88+
- **可选扩展**:新参数仅能以可选形式加入(默认值保持原有行为);新方法可加,旧方法签名保持。
89+
90+
---
91+
92+
## 5. 文档与实现对齐
93+
94+
- **API 文档**(如 `docs/API.md`)中的方法说明应与本文档及 `base.py` 一致;若存在差异,以 `base.py` 与本文档为准并更新 API 文档。
95+
- **开发指南**(如 `docs/DEVELOPMENT_GUIDE.md`)中涉及接口的部分应引用本文档,并遵循“必须实现的方法”与“可选方法”的划分。
96+
- 各驱动 `README.md` 应注明:本驱动对根 fid 的约定、支持的 `**kwargs` 扩展、以及任何与通用约定不同的行为。
97+
98+
---
99+
100+
## 6. 修订与生效
101+
102+
- 对本文档的修订需经技术评审,且需在文档中注明**兼容性影响**(无破坏性变更方可直接生效)。
103+
- 实现与文档的不一致问题,优先以本文档和 `base.py` 为准进行修正,并同步更新 `docs/API.md``docs/DEVELOPMENT_GUIDE.md`
104+
105+
---
106+
107+
*文档版本:1.0 | 来源:FUN-7 CTO 细化 | 向上兼容*

0 commit comments

Comments
 (0)