Skip to content

Commit 219265e

Browse files
committed
fix #91
add file_filter for download_folder & upload_folder
1 parent 109da79 commit 219265e

File tree

2 files changed

+16
-8
lines changed

2 files changed

+16
-8
lines changed

src/aligo/apis/Create.py

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
"""Create class"""
22
import os
3-
from typing import List
3+
from typing import List, Callable
44

55
from aligo.core import *
66
from aligo.request import *
@@ -63,22 +63,23 @@ def upload_files(self, file_paths: List[str], parent_file_id: str = 'root', driv
6363
return file_list
6464

6565
def upload_folder(self, folder_path: str, parent_file_id: str = 'root', drive_id: str = None,
66-
check_name_mode: CheckNameMode = "auto_rename",
67-
folder_check_name_mode: CheckNameMode = 'refuse') -> List:
66+
check_name_mode: CheckNameMode = "auto_rename", folder_check_name_mode: CheckNameMode = 'refuse',
67+
file_filter: Callable[[os.DirEntry], bool] = lambda x: False) -> List:
6868
"""
6969
上传文件夹
7070
:param folder_path: [str] 文件夹路径
7171
:param parent_file_id: Optional[str] 父文件夹id, 默认为 'root'
7272
:param drive_id: [str] 指定网盘id, 默认为 None, 如果为 None, 则使用默认网盘
7373
:param check_name_mode: [CheckNameMode] 检查文件名模式, 默认为 'auto_rename'
7474
:param folder_check_name_mode: [CheckNameMode] 检查文件夹名模式, 默认为 'refuse'
75+
:param file_filter: 文件过滤函数
7576
:return: [List]
7677
7778
用法示例:
7879
>>> from aligo import Aligo
7980
>>> ali = Aligo()
8081
>>> # noinspection PyShadowingNames
81-
>>> resut = ali.upload_folder('/Users/aligo/Desktop/test')
82+
>>> result = ali.upload_folder('/Users/aligo/Desktop/test')
8283
>>> print(result)
8384
"""
8485
result = []
@@ -97,6 +98,8 @@ def upload_folder(self, folder_path: str, parent_file_id: str = 'root', drive_id
9798
# 3. 开始扫描目标文件夹
9899
file: os.DirEntry
99100
for file in os.scandir(folder_path):
101+
if file_filter(file):
102+
continue
100103
if file.is_file():
101104
# 4. 如果是文件, 就上传, 并继续
102105
x = self.upload_file(file.path, parent_file_id=folder.file_id, name=file.name, drive_id=drive_id,

src/aligo/apis/Download.py

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
"""..."""
22
import os
3-
from typing import List, overload
3+
from typing import List, overload, Callable
44

55
from aligo.core import *
66
from aligo.request import *
@@ -64,12 +64,14 @@ def batch_download_url(self,
6464
result = self._core_batch_download_url(body)
6565
return list(result)
6666

67-
def download_folder(self, folder_file_id: str, local_folder: str = '.', drive_id: str = None) -> str:
67+
def download_folder(self, folder_file_id: str, local_folder: str = '.', drive_id: str = None,
68+
file_filter: Callable[[BaseFile], bool] = lambda x: False) -> str:
6869
"""
6970
下载文件夹
7071
:param folder_file_id: [str] 文件夹 id
7172
:param local_folder: [str] 本地文件夹路径, 默认为当前目录, 即下载到哪里
7273
:param drive_id: [str] 文件夹所在的网盘 id
74+
:param file_filter: 文件过滤函数
7375
:return: [str] 本地文件夹路径
7476
7577
用法示例:
@@ -81,14 +83,17 @@ def download_folder(self, folder_file_id: str, local_folder: str = '.', drive_id
8183
if folder_file_id != 'root':
8284
folder = self._core_get_file(GetFileRequest(file_id=folder_file_id, drive_id=drive_id))
8385
local_folder = os.path.join(local_folder, self._del_special_symbol(folder.name))
84-
return self.__download_folder(folder_file_id, local_folder, drive_id)
86+
return self.__download_folder(folder_file_id, local_folder, drive_id, file_filter=file_filter)
8587

86-
def __download_folder(self, folder_file_id: str, local_folder: str = '.', drive_id: str = None) -> str:
88+
def __download_folder(self, folder_file_id: str, local_folder: str = '.', drive_id: str = None,
89+
file_filter: Callable[[BaseFile], bool] = lambda x: False) -> str:
8790
"""下载文件夹"""
8891
# 创建文件夹, 即使文件夹为空
8992
os.makedirs(local_folder, exist_ok=True)
9093
files = []
9194
for file in self._core_get_file_list(GetFileListRequest(parent_file_id=folder_file_id, drive_id=drive_id)):
95+
if file_filter(file):
96+
continue
9297
if file.type == 'folder':
9398
self.__download_folder(folder_file_id=file.file_id,
9499
local_folder=os.path.join(local_folder, self._del_special_symbol(file.name)))

0 commit comments

Comments
 (0)