p115client 0.0.5.14.4__py3-none-any.whl → 0.0.5.15__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- p115client/client.py +645 -519
- p115client/tool/edit.py +80 -5
- p115client/tool/iterdir.py +78 -54
- {p115client-0.0.5.14.4.dist-info → p115client-0.0.5.15.dist-info}/METADATA +1 -1
- {p115client-0.0.5.14.4.dist-info → p115client-0.0.5.15.dist-info}/RECORD +7 -7
- {p115client-0.0.5.14.4.dist-info → p115client-0.0.5.15.dist-info}/LICENSE +0 -0
- {p115client-0.0.5.14.4.dist-info → p115client-0.0.5.15.dist-info}/WHEEL +0 -0
p115client/tool/edit.py
CHANGED
@@ -5,6 +5,7 @@ __author__ = "ChenyangGao <https://chenyanggao.github.io>"
|
|
5
5
|
__all__ = [
|
6
6
|
"update_abstract", "update_desc", "update_star", "update_label", "update_score",
|
7
7
|
"update_top", "update_show_play_long", "update_category_shortcut", "batch_unstar",
|
8
|
+
"post_event",
|
8
9
|
]
|
9
10
|
__doc__ = "这个模块提供了一些和修改文件或目录信息有关的函数"
|
10
11
|
|
@@ -71,16 +72,13 @@ def update_abstract(
|
|
71
72
|
"""
|
72
73
|
if isinstance(client, str):
|
73
74
|
client = P115Client(client, check_for_relogin=True)
|
74
|
-
if max_workers is None or max_workers <= 0:
|
75
|
-
max_workers = 20 if async_ else None
|
76
|
-
ids = do_map(to_id, ids)
|
77
75
|
def gen_step():
|
78
76
|
setter = partial(getattr(client, method), async_=async_, **request_kwargs)
|
79
77
|
def call(batch, /):
|
80
78
|
return check_response(setter(batch, value))
|
81
79
|
yield through(conmap(
|
82
80
|
call,
|
83
|
-
chunked(ids, batch_size),
|
81
|
+
chunked(do_map(to_id, ids), batch_size),
|
84
82
|
max_workers=max_workers,
|
85
83
|
async_=async_,
|
86
84
|
))
|
@@ -627,4 +625,81 @@ def batch_unstar(
|
|
627
625
|
)
|
628
626
|
return run_gen_step(gen_step, async_)
|
629
627
|
|
630
|
-
|
628
|
+
|
629
|
+
@overload
|
630
|
+
def post_event(
|
631
|
+
client: str | P115Client,
|
632
|
+
ids: Iterable[int | str],
|
633
|
+
/,
|
634
|
+
type: Literal["doc", "img"] = "doc",
|
635
|
+
batch_size: int = 10_000,
|
636
|
+
max_workers: None | int = None,
|
637
|
+
app: str = "android",
|
638
|
+
*,
|
639
|
+
async_: Literal[False] = False,
|
640
|
+
**request_kwargs,
|
641
|
+
):
|
642
|
+
...
|
643
|
+
@overload
|
644
|
+
def post_event(
|
645
|
+
client: str | P115Client,
|
646
|
+
ids: Iterable[int | str] | AsyncIterable[int | str],
|
647
|
+
/,
|
648
|
+
type: Literal["doc", "img"] = "doc",
|
649
|
+
batch_size: int = 10_000,
|
650
|
+
max_workers: None | int = None,
|
651
|
+
app: str = "android",
|
652
|
+
*,
|
653
|
+
async_: Literal[True],
|
654
|
+
**request_kwargs,
|
655
|
+
) -> Coroutine:
|
656
|
+
...
|
657
|
+
def post_event(
|
658
|
+
client: str | P115Client,
|
659
|
+
ids: Iterable[int | str] | AsyncIterable[int | str],
|
660
|
+
/,
|
661
|
+
type: Literal["doc", "img"] = "doc",
|
662
|
+
batch_size: int = 10_000,
|
663
|
+
max_workers: None | int = None,
|
664
|
+
app: str = "android",
|
665
|
+
*,
|
666
|
+
async_: Literal[False, True] = False,
|
667
|
+
**request_kwargs,
|
668
|
+
):
|
669
|
+
"""批量将文件或目录推送事件
|
670
|
+
|
671
|
+
.. note::
|
672
|
+
如果一批中有任何一个 id 已经被删除,则这一批直接失败报错
|
673
|
+
|
674
|
+
:param client: 115 客户端或 cookies
|
675
|
+
:param ids: 一组文件或目录的 id
|
676
|
+
:param star: 是否设置星标
|
677
|
+
:param batch_size: 批次大小,分批次,每次提交的 id 数
|
678
|
+
:param max_workers: 并发工作数,如果为 None 或者 <= 0,则自动确定
|
679
|
+
:param app: 使用此设备的接口
|
680
|
+
:param async_: 是否异步
|
681
|
+
:param request_kwargs: 其它请求参数
|
682
|
+
"""
|
683
|
+
if isinstance(client, str):
|
684
|
+
client = P115Client(client, check_for_relogin=True)
|
685
|
+
if type == "doc":
|
686
|
+
post = client.life_behavior_doc_post_app
|
687
|
+
else:
|
688
|
+
post = client.life_behavior_img_post_app
|
689
|
+
def call(batch, /):
|
690
|
+
return check_response(post(
|
691
|
+
batch,
|
692
|
+
app=app,
|
693
|
+
async_=async_,
|
694
|
+
request_kwargs=request_kwargs,
|
695
|
+
))
|
696
|
+
def gen_step():
|
697
|
+
yield through(conmap(
|
698
|
+
call,
|
699
|
+
chunked(do_map(to_id, ids), batch_size),
|
700
|
+
max_workers=max_workers,
|
701
|
+
async_=async_,
|
702
|
+
))
|
703
|
+
return run_gen_step(gen_step, async_)
|
704
|
+
|
705
|
+
# TODO: 上面这些,有些要支持 open 接口
|
p115client/tool/iterdir.py
CHANGED
@@ -13,9 +13,9 @@ __all__ = [
|
|
13
13
|
"iter_files", "iter_files_with_path", "iter_files_with_path_skim",
|
14
14
|
"traverse_tree", "traverse_tree_with_path", "iter_nodes",
|
15
15
|
"iter_nodes_skim", "iter_nodes_by_pickcode", "iter_nodes_using_update",
|
16
|
-
"iter_nodes_using_info", "
|
16
|
+
"iter_nodes_using_info", "iter_nodes_using_event",
|
17
17
|
"iter_dir_nodes_using_star", "iter_parents", "iter_files_shortcut",
|
18
|
-
"iter_dupfiles", "
|
18
|
+
"iter_dupfiles", "iter_media_files", "search_iter", "share_iterdir",
|
19
19
|
"share_iter_files", "share_search_iter",
|
20
20
|
]
|
21
21
|
__doc__ = "这个模块提供了一些和目录信息罗列有关的函数"
|
@@ -64,7 +64,7 @@ from p115pickcode import pickcode_to_id, to_id
|
|
64
64
|
from posixpatht import path_is_dir_form, splitext, splits
|
65
65
|
|
66
66
|
from .attr import type_of_attr
|
67
|
-
from .edit import update_desc, update_star
|
67
|
+
from .edit import update_desc, update_star, post_event
|
68
68
|
from .fs_files import (
|
69
69
|
is_timeouterror, iter_fs_files, iter_fs_files_threaded,
|
70
70
|
iter_fs_files_asynchronized,
|
@@ -1549,7 +1549,7 @@ def ensure_attr_path_using_star_event[D: dict](
|
|
1549
1549
|
find_ids: set[int]
|
1550
1550
|
while pids:
|
1551
1551
|
if find_ids := pids - id_to_dirnode.keys() - dangling_ids:
|
1552
|
-
yield through(
|
1552
|
+
yield through(iter_nodes_using_event(
|
1553
1553
|
client,
|
1554
1554
|
find_ids,
|
1555
1555
|
normalize_attr=None,
|
@@ -2203,7 +2203,7 @@ def iter_files(
|
|
2203
2203
|
- 5: 压缩包
|
2204
2204
|
- 6: 应用
|
2205
2205
|
- 7: 书籍
|
2206
|
-
- 99:
|
2206
|
+
- 99: 所有文件
|
2207
2207
|
|
2208
2208
|
:param order: 排序
|
2209
2209
|
|
@@ -2225,7 +2225,7 @@ def iter_files(
|
|
2225
2225
|
:param async_: 是否异步
|
2226
2226
|
:param request_kwargs: 其它请求参数
|
2227
2227
|
|
2228
|
-
:return:
|
2228
|
+
:return: 迭代器,返回此目录内的(所有文件)文件信息
|
2229
2229
|
"""
|
2230
2230
|
suffix = suffix.strip(".")
|
2231
2231
|
if not (type or suffix):
|
@@ -2340,7 +2340,7 @@ def iter_files_with_path(
|
|
2340
2340
|
- 5: 压缩包
|
2341
2341
|
- 6: 应用
|
2342
2342
|
- 7: 书籍
|
2343
|
-
- 99:
|
2343
|
+
- 99: 所有文件
|
2344
2344
|
|
2345
2345
|
:param order: 排序
|
2346
2346
|
|
@@ -2371,7 +2371,7 @@ def iter_files_with_path(
|
|
2371
2371
|
:param async_: 是否异步
|
2372
2372
|
:param request_kwargs: 其它请求参数
|
2373
2373
|
|
2374
|
-
:return:
|
2374
|
+
:return: 迭代器,返回此目录内的(所有文件)文件信息
|
2375
2375
|
"""
|
2376
2376
|
suffix = suffix.strip(".")
|
2377
2377
|
if not (type or suffix):
|
@@ -2594,7 +2594,7 @@ def iter_files_with_path_skim(
|
|
2594
2594
|
:param async_: 是否异步
|
2595
2595
|
:param request_kwargs: 其它请求参数
|
2596
2596
|
|
2597
|
-
:return:
|
2597
|
+
:return: 迭代器,返回此目录内的(所有文件)文件信息
|
2598
2598
|
"""
|
2599
2599
|
from .download import iter_download_nodes
|
2600
2600
|
if isinstance(client, str):
|
@@ -3416,10 +3416,10 @@ def iter_nodes_using_info(
|
|
3416
3416
|
|
3417
3417
|
|
3418
3418
|
@overload
|
3419
|
-
def
|
3419
|
+
def iter_nodes_using_event(
|
3420
3420
|
client: str | P115Client,
|
3421
3421
|
ids: Iterable[int | str],
|
3422
|
-
|
3422
|
+
type: Literal["doc", "img"] = "img",
|
3423
3423
|
normalize_attr: None | bool | Callable[[dict], dict] = True,
|
3424
3424
|
id_to_dirnode: None | EllipsisType | MutableMapping[int, tuple[str, int] | DirNode] = None,
|
3425
3425
|
app: str = "android",
|
@@ -3430,10 +3430,10 @@ def iter_nodes_using_star_event(
|
|
3430
3430
|
) -> Iterator[dict]:
|
3431
3431
|
...
|
3432
3432
|
@overload
|
3433
|
-
def
|
3433
|
+
def iter_nodes_using_event(
|
3434
3434
|
client: str | P115Client,
|
3435
3435
|
ids: Iterable[int | str],
|
3436
|
-
|
3436
|
+
type: Literal["doc", "img"] = "img",
|
3437
3437
|
normalize_attr: None | bool | Callable[[dict], dict] = True,
|
3438
3438
|
id_to_dirnode: None | EllipsisType | MutableMapping[int, tuple[str, int] | DirNode] = None,
|
3439
3439
|
app: str = "android",
|
@@ -3443,10 +3443,10 @@ def iter_nodes_using_star_event(
|
|
3443
3443
|
**request_kwargs,
|
3444
3444
|
) -> AsyncIterator[dict]:
|
3445
3445
|
...
|
3446
|
-
def
|
3446
|
+
def iter_nodes_using_event(
|
3447
3447
|
client: str | P115Client,
|
3448
3448
|
ids: Iterable[int | str],
|
3449
|
-
|
3449
|
+
type: Literal["doc", "img"] = "img",
|
3450
3450
|
normalize_attr: None | bool | Callable[[dict], dict] = True,
|
3451
3451
|
id_to_dirnode: None | EllipsisType | MutableMapping[int, tuple[str, int] | DirNode] = None,
|
3452
3452
|
app: str = "android",
|
@@ -3455,14 +3455,18 @@ def iter_nodes_using_star_event(
|
|
3455
3455
|
async_: Literal[False, True] = False,
|
3456
3456
|
**request_kwargs,
|
3457
3457
|
) -> Iterator[dict] | AsyncIterator[dict]:
|
3458
|
-
"""
|
3458
|
+
"""通过先发送事件,然后收集这个事件,来获取一组 id 的信息
|
3459
3459
|
|
3460
|
-
..
|
3461
|
-
|
3460
|
+
.. note::
|
3461
|
+
如果未收集到事件,则说明文件 id 不存在或者已删除,你也可以因此找出所有的无效 id
|
3462
3462
|
|
3463
3463
|
:param client: 115 客户端或 cookies
|
3464
3464
|
:param ids: 一组文件或目录的 id 或 pickcode
|
3465
|
-
:param
|
3465
|
+
:param type: 事件类型
|
3466
|
+
|
3467
|
+
- "doc": 推送 "browse_document" 事件
|
3468
|
+
- "img": 推送 "browse_image" 事件
|
3469
|
+
|
3466
3470
|
:param normalize_attr: 把数据进行转换处理,使之便于阅读
|
3467
3471
|
:param id_to_dirnode: 字典,保存 id 到对应文件的 `DirNode(name, parent_id)` 命名元组的字典,如果为 ...,则忽略
|
3468
3472
|
:param app: 使用指定 app(设备)的接口
|
@@ -3492,42 +3496,38 @@ def iter_nodes_using_star_event(
|
|
3492
3496
|
client = P115Client(client, check_for_relogin=True)
|
3493
3497
|
if id_to_dirnode is None:
|
3494
3498
|
id_to_dirnode = ID_TO_DIRNODE_CACHE[client.user_id]
|
3499
|
+
if type == "doc":
|
3500
|
+
event_name = "browse_document"
|
3501
|
+
else:
|
3502
|
+
event_name = "browse_image"
|
3495
3503
|
def gen_step():
|
3496
3504
|
nonlocal ids
|
3497
3505
|
ts = int(time())
|
3498
3506
|
ids = set(map(to_id, ids))
|
3499
3507
|
yield life_show(client, async_=async_, **request_kwargs)
|
3500
|
-
yield
|
3508
|
+
yield post_event(
|
3509
|
+
client,
|
3510
|
+
ids,
|
3511
|
+
type=type,
|
3512
|
+
app=app,
|
3513
|
+
async_=async_,
|
3514
|
+
**request_kwargs,
|
3515
|
+
)
|
3501
3516
|
if app in ("", "web", "desktop", "harmony"):
|
3502
3517
|
get_base_url = cycle(("http://webapi.115.com", "https://webapi.115.com")).__next__
|
3503
3518
|
else:
|
3504
3519
|
get_base_url = cycle(("http://proapi.115.com", "https://proapi.115.com")).__next__
|
3505
3520
|
request_kwargs.setdefault("base_url", get_base_url)
|
3506
3521
|
discard = ids.discard
|
3507
|
-
|
3522
|
+
with with_iter_next(iter_life_behavior_once(
|
3508
3523
|
client,
|
3509
3524
|
from_time=ts,
|
3510
|
-
type=
|
3525
|
+
type=event_name,
|
3511
3526
|
app=app,
|
3512
3527
|
cooldown=cooldown,
|
3513
3528
|
async_=async_,
|
3514
3529
|
**request_kwargs,
|
3515
|
-
)
|
3516
|
-
if with_pics:
|
3517
|
-
it = chain(
|
3518
|
-
it,
|
3519
|
-
iter_life_behavior_once(
|
3520
|
-
client,
|
3521
|
-
from_time=ts,
|
3522
|
-
type="star_image_file",
|
3523
|
-
app=app,
|
3524
|
-
cooldown=cooldown,
|
3525
|
-
async_=async_,
|
3526
|
-
**request_kwargs,
|
3527
|
-
),
|
3528
|
-
async_=async_, # type: ignore
|
3529
|
-
)
|
3530
|
-
with with_iter_next(it) as get_next:
|
3530
|
+
)) as get_next:
|
3531
3531
|
while True:
|
3532
3532
|
event: dict = yield get_next()
|
3533
3533
|
fid = int(event["file_id"])
|
@@ -3807,7 +3807,7 @@ def iter_files_shortcut(
|
|
3807
3807
|
async_: Literal[False, True] = False,
|
3808
3808
|
**request_kwargs,
|
3809
3809
|
) -> Iterator[dict] | AsyncIterator[dict]:
|
3810
|
-
"""
|
3810
|
+
"""遍历目录树,获取(所有文件而非目录)文件信息(整合了多个函数的入口)
|
3811
3811
|
|
3812
3812
|
.. node::
|
3813
3813
|
`is_skim` 和 `with_path` 的不同取值组合,会决定采用不同的函数:
|
@@ -3938,10 +3938,11 @@ def iter_dupfiles[K](
|
|
3938
3938
|
|
3939
3939
|
|
3940
3940
|
@overload
|
3941
|
-
def
|
3941
|
+
def iter_media_files(
|
3942
3942
|
client: str | P115Client,
|
3943
|
-
cid: int = 0,
|
3943
|
+
cid: int | str = 0,
|
3944
3944
|
page_size: int = 8192,
|
3945
|
+
type: Literal[0, 1, 2, 3, 4, 5, 6, 7, 99] = 0,
|
3945
3946
|
order: Literal["file_name", "file_size", "file_type", "user_utime", "user_ptime", "user_otime"] = "user_ptime",
|
3946
3947
|
asc: Literal[0, 1] = 1,
|
3947
3948
|
cur: Literal[0, 1] = 0,
|
@@ -3952,10 +3953,11 @@ def iter_image_files(
|
|
3952
3953
|
) -> Iterator[dict]:
|
3953
3954
|
...
|
3954
3955
|
@overload
|
3955
|
-
def
|
3956
|
+
def iter_media_files(
|
3956
3957
|
client: str | P115Client,
|
3957
|
-
cid: int = 0,
|
3958
|
+
cid: int | str = 0,
|
3958
3959
|
page_size: int = 8192,
|
3960
|
+
type: Literal[0, 1, 2, 3, 4, 5, 6, 7, 99] = 0,
|
3959
3961
|
order: Literal["file_name", "file_size", "file_type", "user_utime", "user_ptime", "user_otime"] = "user_ptime",
|
3960
3962
|
asc: Literal[0, 1] = 1,
|
3961
3963
|
cur: Literal[0, 1] = 0,
|
@@ -3965,10 +3967,11 @@ def iter_image_files(
|
|
3965
3967
|
**request_kwargs,
|
3966
3968
|
) -> AsyncIterator[dict]:
|
3967
3969
|
...
|
3968
|
-
def
|
3970
|
+
def iter_media_files(
|
3969
3971
|
client: str | P115Client,
|
3970
|
-
cid: int = 0,
|
3972
|
+
cid: int | str = 0,
|
3971
3973
|
page_size: int = 8192,
|
3974
|
+
type: Literal[0, 1, 2, 3, 4, 5, 6, 7, 99] = 0,
|
3972
3975
|
order: Literal["file_name", "file_size", "file_type", "user_utime", "user_ptime", "user_otime"] = "user_ptime",
|
3973
3976
|
asc: Literal[0, 1] = 1,
|
3974
3977
|
cur: Literal[0, 1] = 0,
|
@@ -3977,14 +3980,26 @@ def iter_image_files(
|
|
3977
3980
|
async_: Literal[False, True] = False,
|
3978
3981
|
**request_kwargs,
|
3979
3982
|
) -> Iterator[dict] | AsyncIterator[dict]:
|
3980
|
-
"""
|
3983
|
+
"""遍历目录树,获取文件信息(如果是图片,则包含图片的 CDN 链接)
|
3981
3984
|
|
3982
3985
|
.. tip::
|
3983
|
-
这个函数的效果相当于 ``iter_files(client, cid, type=
|
3986
|
+
这个函数的效果相当于 ``iter_files(client, cid, type=type, ...)`` 所获取的文件列表,只是返回信息有些不同,速度似乎还是 ``iter_files`` 更快
|
3984
3987
|
|
3985
3988
|
:param client: 115 客户端或 cookies
|
3986
|
-
:param cid: 目录 id
|
3989
|
+
:param cid: 目录 id 或 pickcode
|
3987
3990
|
:param page_size: 分页大小
|
3991
|
+
:param type: 文件类型
|
3992
|
+
|
3993
|
+
- 0: 相当于 2,即获取图片,但用一个单独的接口
|
3994
|
+
- 1: 文档
|
3995
|
+
- 2: 图片
|
3996
|
+
- 3: 音频
|
3997
|
+
- 4: 视频
|
3998
|
+
- 5: 压缩包
|
3999
|
+
- 6: 应用
|
4000
|
+
- 7: 书籍
|
4001
|
+
- 99: 所有文件
|
4002
|
+
|
3988
4003
|
:param order: 排序
|
3989
4004
|
|
3990
4005
|
- "file_name": 文件名
|
@@ -4015,12 +4030,21 @@ def iter_image_files(
|
|
4015
4030
|
page_size = 8192
|
4016
4031
|
elif page_size < 16:
|
4017
4032
|
page_size = 16
|
4033
|
+
cid = to_id(cid)
|
4018
4034
|
payload = {"asc": asc, "cid": cid, "cur": cur, "limit": page_size, "o": order, "offset": 0}
|
4035
|
+
if type:
|
4036
|
+
fs_files = client.fs_files_media_app
|
4037
|
+
if type == 99:
|
4038
|
+
payload["type"] = -1
|
4039
|
+
else:
|
4040
|
+
payload["type"] = type
|
4041
|
+
else:
|
4042
|
+
fs_files = client.fs_files_image_app
|
4019
4043
|
def gen_step():
|
4020
4044
|
offset = 0
|
4021
4045
|
count = 0
|
4022
4046
|
while True:
|
4023
|
-
resp = yield
|
4047
|
+
resp = yield fs_files(payload, async_=async_, **request_kwargs)
|
4024
4048
|
check_response(resp)
|
4025
4049
|
if int(resp["cid"]) != cid:
|
4026
4050
|
raise FileNotFoundError(ENOENT, cid)
|
@@ -4107,7 +4131,7 @@ def search_iter(
|
|
4107
4131
|
- 5: 压缩包
|
4108
4132
|
- 6: 应用
|
4109
4133
|
- 7: 书籍
|
4110
|
-
- 99:
|
4134
|
+
- 99: 所有文件
|
4111
4135
|
|
4112
4136
|
:param offset: 开始索引,从 0 开始,要求 <= 10,000
|
4113
4137
|
:param page_size: 分页大小,要求 `offset + page_size <= 10,000`
|
@@ -4329,7 +4353,7 @@ def share_iter_files(
|
|
4329
4353
|
:param async_: 是否异步
|
4330
4354
|
:param request_kwargs: 其它请求参数
|
4331
4355
|
|
4332
|
-
:return:
|
4356
|
+
:return: 迭代器,返回此分享链接下的(所有文件)文件信息,由于接口返回信息有限,所以比较简略
|
4333
4357
|
|
4334
4358
|
.. code:: python
|
4335
4359
|
|
@@ -4460,7 +4484,7 @@ def share_search_iter(
|
|
4460
4484
|
- 5: 压缩包
|
4461
4485
|
- 6: 应用
|
4462
4486
|
- 7: 书籍
|
4463
|
-
- 99:
|
4487
|
+
- 99: 所有文件
|
4464
4488
|
|
4465
4489
|
:param offset: 开始索引,从 0 开始,要求 <= 10,000
|
4466
4490
|
:param page_size: 分页大小,要求 `offset + page_size <= 10,000`
|
@@ -4606,7 +4630,7 @@ def traverse_files(
|
|
4606
4630
|
- 5: 压缩包
|
4607
4631
|
- 6: 应用
|
4608
4632
|
- 7: 书籍
|
4609
|
-
- 99:
|
4633
|
+
- 99: 所有文件
|
4610
4634
|
|
4611
4635
|
:param auto_splitting_tasks: 是否根据统计信息自动拆分任务
|
4612
4636
|
:param auto_splitting_threshold: 如果 `auto_splitting_tasks` 为 True,且目录内的文件数大于 `auto_splitting_threshold`,则分拆此任务到它的各个直接子目录,否则批量拉取
|
@@ -4628,7 +4652,7 @@ def traverse_files(
|
|
4628
4652
|
:param async_: 是否异步
|
4629
4653
|
:param request_kwargs: 其它请求参数
|
4630
4654
|
|
4631
|
-
:return:
|
4655
|
+
:return: 迭代器,返回此目录内的(所有文件)文件信息
|
4632
4656
|
"""
|
4633
4657
|
suffix = suffix.strip(".")
|
4634
4658
|
if not (type or suffix):
|
@@ -1,7 +1,7 @@
|
|
1
1
|
LICENSE,sha256=o5242_N2TgDsWwFhPn7yr8YJNF7XsJM5NxUMtcT97bc,1100
|
2
2
|
p115client/__init__.py,sha256=1mx7njuAlqcuEWONTjSiiGnXyyNyqOcJyNX1FMHqQ-4,214
|
3
3
|
p115client/_upload.py,sha256=199Hc9B9vUMphDdwh8vK3yCIPusIfeAzzOLpC-WZ8C8,31184
|
4
|
-
p115client/client.py,sha256=
|
4
|
+
p115client/client.py,sha256=OVfHb0Lpa2PHp3TADXlJTUJQyU2LG-s2mealZ9s-9L8,808801
|
5
5
|
p115client/const.py,sha256=ZYtBtTFB0eljIR0tze21_52Gl0pQxvyqMmDwgB1bqNU,7803
|
6
6
|
p115client/exception.py,sha256=4SZ8ubOLMRxtcqc0u1kNzXqH1a6wwXJFwGnRDURoEgQ,3708
|
7
7
|
p115client/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -9,11 +9,11 @@ p115client/tool/__init__.py,sha256=IwwzbCQ7jpRoFGTQUCfGBx8zvjqjgSFs98yKpYyI46s,4
|
|
9
9
|
p115client/tool/attr.py,sha256=G91V71EhsqIIPkhGDnv2z6nxVq7wgl6nNPDj3AKzw1I,3079
|
10
10
|
p115client/tool/auth.py,sha256=qlRcfEjzebseiHR2dyBpOoPpxB4k8P6Tj729S2TLB1s,1672
|
11
11
|
p115client/tool/download.py,sha256=QY1uarHZ7vDVa-fz-vzWx-3UHFDmPa3CJ1XwUg8LqJE,65360
|
12
|
-
p115client/tool/edit.py,sha256=
|
12
|
+
p115client/tool/edit.py,sha256=o7TyWl1FtP7VyjLGNoO-sPB1huU9chufciIlVsFQWAw,19445
|
13
13
|
p115client/tool/export_dir.py,sha256=jPD4VP0kbJ1MW9CDgUcInSmt0aJejhn257x30Sm3hss,23557
|
14
14
|
p115client/tool/fs_files.py,sha256=12ED23jAdQR0KvXSaVE3XOgOfEBVriMMJl4vbE2tR3E,15824
|
15
15
|
p115client/tool/history.py,sha256=9pgF9l8VvQkpjsVgtIzNcrUQZzLH9tt4JysBwJ4yHsk,11636
|
16
|
-
p115client/tool/iterdir.py,sha256=
|
16
|
+
p115client/tool/iterdir.py,sha256=LsjhJsF9c5pSeihlnCMig9n1L2w49wbUf3YS-hMOn_I,177841
|
17
17
|
p115client/tool/life.py,sha256=dfwm5jKfo0K9pIUZKpZ32oPBrlcfrezflSJyyDIbX8E,17721
|
18
18
|
p115client/tool/offline.py,sha256=6HaGkbsAAx3FPFvSr_7LZvrUw_fp3QRB2y2kVRHNgZ0,6291
|
19
19
|
p115client/tool/pool.py,sha256=PImYG4fU7retZVFDPYib9e87J3RvJvugOW1mxX9jSU0,13831
|
@@ -22,7 +22,7 @@ p115client/tool/upload.py,sha256=dpww3TGSOyjqz1EogQEJDiZ9QWERd47izZOw9mNCCiA,329
|
|
22
22
|
p115client/tool/util.py,sha256=gvA-o-TcEAR3o754Kn82Bu6yggmnAhScUCrRpMVCI50,3934
|
23
23
|
p115client/tool/xys.py,sha256=r9wzE5VgpR6ATYHM1uVZ06uIU4qqVeDyRTYU6W_N_Tc,10190
|
24
24
|
p115client/type.py,sha256=h_pGKTlz07g64Y_93ylF-fUyC8g-HiQacMhu4KOXjYA,6457
|
25
|
-
p115client-0.0.5.
|
26
|
-
p115client-0.0.5.
|
27
|
-
p115client-0.0.5.
|
28
|
-
p115client-0.0.5.
|
25
|
+
p115client-0.0.5.15.dist-info/LICENSE,sha256=o5242_N2TgDsWwFhPn7yr8YJNF7XsJM5NxUMtcT97bc,1100
|
26
|
+
p115client-0.0.5.15.dist-info/METADATA,sha256=wa-zBR_cEdkH-pWVtJwCMU35y83PK4HUhsdpNA8ER9E,8228
|
27
|
+
p115client-0.0.5.15.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
|
28
|
+
p115client-0.0.5.15.dist-info/RECORD,,
|
File without changes
|
File without changes
|