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/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
- # TODO: 上面这些,要支持 open 接口
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 接口
@@ -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", "iter_nodes_using_star_event",
16
+ "iter_nodes_using_info", "iter_nodes_using_event",
17
17
  "iter_dir_nodes_using_star", "iter_parents", "iter_files_shortcut",
18
- "iter_dupfiles", "iter_image_files", "search_iter", "share_iterdir",
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(iter_nodes_using_star_event(
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 iter_nodes_using_star_event(
3419
+ def iter_nodes_using_event(
3420
3420
  client: str | P115Client,
3421
3421
  ids: Iterable[int | str],
3422
- with_pics: bool = False,
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 iter_nodes_using_star_event(
3433
+ def iter_nodes_using_event(
3434
3434
  client: str | P115Client,
3435
3435
  ids: Iterable[int | str],
3436
- with_pics: bool = False,
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 iter_nodes_using_star_event(
3446
+ def iter_nodes_using_event(
3447
3447
  client: str | P115Client,
3448
3448
  ids: Iterable[int | str],
3449
- with_pics: bool = False,
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
- """通过先打星标,然后收集这个操作事件,来获取一组 id 的信息
3458
+ """通过先发送事件,然后收集这个事件,来获取一组 id 的信息
3459
3459
 
3460
- .. caution::
3461
- 如果有任一 id 已经被删除,则打星标时会报错
3460
+ .. note::
3461
+ 如果未收集到事件,则说明文件 id 不存在或者已删除,你也可以因此找出所有的无效 id
3462
3462
 
3463
3463
  :param client: 115 客户端或 cookies
3464
3464
  :param ids: 一组文件或目录的 id 或 pickcode
3465
- :param with_pics: 包含图片的 id
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 update_star(client, ids, app=app, async_=async_, **request_kwargs)
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
- it = iter_life_behavior_once(
3522
+ with with_iter_next(iter_life_behavior_once(
3508
3523
  client,
3509
3524
  from_time=ts,
3510
- type="star_file",
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 iter_image_files(
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 iter_image_files(
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 iter_image_files(
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
- """遍历目录树,获取图片文件信息(包含图片的 CDN 链接)
3983
+ """遍历目录树,获取文件信息(如果是图片,则包含图片的 CDN 链接)
3981
3984
 
3982
3985
  .. tip::
3983
- 这个函数的效果相当于 ``iter_files(client, cid, type=2, ...)`` 所获取的文件列表,只是返回信息有些不同,速度似乎还是 ``iter_files`` 更快
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 client.fs_imglist_app(payload, async_=async_, **request_kwargs)
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,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: p115client
3
- Version: 0.0.5.14.4
3
+ Version: 0.0.5.15
4
4
  Summary: Python 115 webdisk client.
5
5
  Home-page: https://github.com/ChenyangGao/p115client
6
6
  License: MIT
@@ -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=YUucKwx-NYU-G3Eh6n2VshU7wOiAUtntFAQQgXAXGtE,803672
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=eAlINrXEAwAwliZFako5vrne_sLmxEyBr1Bk05YZsAc,17332
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=ZwhXp8fuEWw8j97Hz0FRpkBQBkI1HSj7-v8njDcO58E,177198
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.14.4.dist-info/LICENSE,sha256=o5242_N2TgDsWwFhPn7yr8YJNF7XsJM5NxUMtcT97bc,1100
26
- p115client-0.0.5.14.4.dist-info/METADATA,sha256=bheoc8coOZmjDQ4HRs76A5EE7_qKQUBZY0m9rXOpeRg,8230
27
- p115client-0.0.5.14.4.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
28
- p115client-0.0.5.14.4.dist-info/RECORD,,
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,,