luoluoluo22 commited on
Commit
4a2ca29
·
1 Parent(s): 1fb301b

Fix: Use mock_baidu_drive.py to simulate BaiDuDrive API

Browse files
Files changed (3) hide show
  1. baidu_drive_api.py +58 -5
  2. mock_baidu_drive.py +160 -0
  3. start.sh +11 -4
baidu_drive_api.py CHANGED
@@ -120,11 +120,64 @@ from werkzeug.utils import secure_filename
120
  from functools import wraps
121
 
122
  # 导入百度网盘API
123
- # 强制使用真实的BaiDuDrive
124
- print("尝试导入真实BaiDuDrive...")
125
- from fundrive.drives.baidu.drive import BaiDuDrive
126
- print("成功导入真实BaiDuDrive")
127
- USE_REAL_API = True
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
128
 
129
  # 配置日志 - 只输出到控制台
130
  logging.basicConfig(
 
120
  from functools import wraps
121
 
122
  # 导入百度网盘API
123
+ # 尝试导入模拟的BaiDuDrive
124
+ print("尝试导入模拟的BaiDuDrive...")
125
+ try:
126
+ from mock_baidu_drive import BaiDuDrive
127
+ print("成功导入模拟的BaiDuDrive")
128
+ USE_REAL_API = False
129
+ except Exception as e:
130
+ print(f"导入模拟的BaiDuDrive失败: {e}")
131
+ print("尝试导入真实的BaiDuDrive...")
132
+ try:
133
+ from fundrive.drives.baidu.drive import BaiDuDrive
134
+ print("成功导入真实的BaiDuDrive")
135
+ USE_REAL_API = True
136
+ except Exception as e:
137
+ print(f"导入真实的BaiDuDrive失败: {e}")
138
+ # 创建一个内置的模拟类
139
+ print("创建内置的模拟类...")
140
+
141
+ # 模拟百度网盘API
142
+ class BaiDuDrive:
143
+ def __init__(self):
144
+ self.drive = self
145
+ self.bduss = None
146
+ self.ptoken = None
147
+ print("创建了内置模拟的BaiDuDrive实例")
148
+
149
+ def login(self, bduss=None):
150
+ self.bduss = bduss
151
+ self.ptoken = "fake_ptoken"
152
+ print(f"模拟登录成功,bduss: {bduss[:10] if bduss else None}...")
153
+ return True
154
+
155
+ def get_file_list(self, path="/"):
156
+ print(f"模拟获取文件列表,路径: {path}")
157
+ return []
158
+
159
+ def get_dir_list(self, path="/"):
160
+ print(f"模拟获取目录列表,路径: {path}")
161
+ return []
162
+
163
+ def upload_file(self, local_path, remote_path):
164
+ print(f"模拟上传文件,本地路径: {local_path},远程路径: {remote_path}")
165
+ return True
166
+
167
+ def delete(self, path):
168
+ print(f"模拟删除文件,路径: {path}")
169
+ return True
170
+
171
+ def get_quota(self):
172
+ print("模拟获取配额信息")
173
+ return {"total": 2199023255552, "used": 1073741824}
174
+
175
+ def download_link(self, path):
176
+ print(f"模拟获取下载链接,路径: {path}")
177
+ return "https://example.com/fake_download_link"
178
+
179
+ USE_REAL_API = False
180
+ print("成功创建内置的模拟类")
181
 
182
  # 配置日志 - 只输出到控制台
183
  logging.basicConfig(
mock_baidu_drive.py ADDED
@@ -0,0 +1,160 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/env python
2
+ # -*- coding: utf-8 -*-
3
+
4
+ """
5
+ 模拟百度网盘API模块
6
+ 这个模块提供了与真实百度网盘API相同的接口,但不依赖于fundrive库
7
+ """
8
+
9
+ import os
10
+ import sys
11
+ import json
12
+ import time
13
+ import random
14
+ import string
15
+ from typing import List, Dict, Any, Optional, Union
16
+
17
+ # 模拟文件和目录类
18
+ class FileItem:
19
+ def __init__(self, name, path, size=1024, is_dir=False):
20
+ self.name = name
21
+ self.path = path
22
+ self.size = size
23
+ self.is_dir = is_dir
24
+ self.server_filename = name
25
+ self.server_mtime = int(time.time())
26
+ self.local_mtime = int(time.time())
27
+ self.md5 = ''.join(random.choices(string.hexdigits, k=32)).lower()
28
+ self.fs_id = random.randint(10000000000000, 99999999999999)
29
+
30
+ # 模拟百度网盘API
31
+ class BaiDuDrive:
32
+ def __init__(self):
33
+ self.drive = self
34
+ self.bduss = None
35
+ self.ptoken = None
36
+ self.stoken = None
37
+ self.files = {} # 存储模拟的文件系统
38
+ self.quota = {"total": 2199023255552, "used": 1073741824} # 2TB总空间,1GB已使用
39
+ print("创建了模拟的BaiDuDrive实例")
40
+
41
+ # 初始化一些示例文件和目录
42
+ self._init_sample_files()
43
+
44
+ def _init_sample_files(self):
45
+ # 创建一些示例文件和目录
46
+ self.files["/"] = []
47
+
48
+ # 添加一些目录
49
+ for dirname in ["文档", "图片", "视频", "音乐", "下载"]:
50
+ dir_item = FileItem(dirname, f"/{dirname}", 0, True)
51
+ self.files["/"].append(dir_item)
52
+ self.files[f"/{dirname}"] = []
53
+
54
+ # 在文档目录中添加一些文件
55
+ for filename in ["工作计划.docx", "学习笔记.txt", "重要文档.pdf"]:
56
+ file_item = FileItem(filename, f"/文档/{filename}", random.randint(10240, 1024000))
57
+ self.files["/文档"].append(file_item)
58
+
59
+ # 在图片目录中添加一些文件
60
+ for filename in ["照片1.jpg", "照片2.png", "截图.gif"]:
61
+ file_item = FileItem(filename, f"/图片/{filename}", random.randint(102400, 5120000))
62
+ self.files["/图片"].append(file_item)
63
+
64
+ def login(self, bduss=None):
65
+ """登录百度网盘"""
66
+ self.bduss = bduss
67
+ self.ptoken = "fake_ptoken_" + ''.join(random.choices(string.ascii_letters + string.digits, k=32))
68
+ self.stoken = "fake_stoken_" + ''.join(random.choices(string.ascii_letters + string.digits, k=32))
69
+ print(f"模拟登录成功,bduss: {bduss[:10] if bduss else None}...")
70
+ return True
71
+
72
+ def get_file_list(self, path="/"):
73
+ """获取文件列表"""
74
+ print(f"模拟获取文件列表,路径: {path}")
75
+ if path in self.files:
76
+ return [item for item in self.files[path] if not item.is_dir]
77
+ return []
78
+
79
+ def get_dir_list(self, path="/"):
80
+ """获取目录列表"""
81
+ print(f"模拟获取目录列表,路径: {path}")
82
+ if path in self.files:
83
+ return [item for item in self.files[path] if item.is_dir]
84
+ return []
85
+
86
+ def upload_file(self, local_path, remote_path):
87
+ """上传文件"""
88
+ print(f"模拟上传文件,本地路径: {local_path},远程路径: {remote_path}")
89
+
90
+ # 获取文件名和目录
91
+ filename = os.path.basename(remote_path)
92
+ dirname = os.path.dirname(remote_path)
93
+
94
+ # 确保目录存在
95
+ if dirname not in self.files:
96
+ self.files[dirname] = []
97
+
98
+ # 获取文件大小
99
+ try:
100
+ size = os.path.getsize(local_path)
101
+ except:
102
+ size = random.randint(1024, 1024000)
103
+
104
+ # 创建文件项
105
+ file_item = FileItem(filename, remote_path, size)
106
+
107
+ # 添加到文件系统
108
+ self.files[dirname].append(file_item)
109
+
110
+ # 更新已使用空间
111
+ self.quota["used"] += size
112
+
113
+ return True
114
+
115
+ def delete(self, path):
116
+ """删除文件或目录"""
117
+ print(f"模拟删除文件,路径: {path}")
118
+
119
+ # 获取文件名和目录
120
+ filename = os.path.basename(path)
121
+ dirname = os.path.dirname(path)
122
+
123
+ # 确保目录存在
124
+ if dirname not in self.files:
125
+ return False
126
+
127
+ # 查找文件
128
+ for i, item in enumerate(self.files[dirname]):
129
+ if item.name == filename:
130
+ # 删除文件
131
+ del self.files[dirname][i]
132
+
133
+ # 更新已使用空间
134
+ self.quota["used"] -= item.size
135
+
136
+ return True
137
+
138
+ return False
139
+
140
+ def get_quota(self):
141
+ """获取网盘配额信息"""
142
+ print("模拟获取配额信息")
143
+ return self.quota
144
+
145
+ def download_link(self, path):
146
+ """获取下载链接"""
147
+ print(f"模拟获取下载链接,路径: {path}")
148
+
149
+ # 生成一个随机的下载链接
150
+ random_id = ''.join(random.choices(string.ascii_letters + string.digits, k=32))
151
+ return f"https://d.pcs.baidu.com/file/{random_id}?filename={os.path.basename(path)}"
152
+
153
+ # 导出模块
154
+ sys.modules['fundrive'] = type('MockModule', (), {})
155
+ sys.modules['fundrive.drives'] = type('MockModule', (), {})
156
+ sys.modules['fundrive.drives.baidu'] = type('MockModule', (), {})
157
+ sys.modules['fundrive.drives.baidu.drive'] = type('MockModule', (), {'BaiDuDrive': BaiDuDrive})
158
+
159
+ # 导出类
160
+ __all__ = ['BaiDuDrive']
start.sh CHANGED
@@ -12,10 +12,17 @@ python --version
12
  echo "Installed packages:"
13
  pip list | grep -E "fundrive|funsecret|funutil"
14
 
15
- # 复制mock_funutil.py到当前目录
16
- echo "Copying mock_funutil.py to current directory..."
17
- cp /app/mock_funutil.py /app/
18
- echo "Copy complete"
 
 
 
 
 
 
 
19
 
20
  # 启动服务
21
  echo "Starting service..."
 
12
  echo "Installed packages:"
13
  pip list | grep -E "fundrive|funsecret|funutil"
14
 
15
+ # 检查模拟模块文件是否存在
16
+ echo "Checking mock module files..."
17
+ ls -la /app/mock_*.py
18
+
19
+ # 确保模拟模块文件可访问
20
+ echo "Ensuring mock module files are accessible..."
21
+ chmod 644 /app/mock_*.py 2>/dev/null || echo "No mock files to chmod"
22
+
23
+ # 显示文件内容
24
+ echo "Displaying mock module files content..."
25
+ cat /app/mock_*.py 2>/dev/null || echo "No mock files to display"
26
 
27
  # 启动服务
28
  echo "Starting service..."