p115client 0.0.5.15__py3-none-any.whl → 0.0.5.15.2__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 CHANGED
@@ -3171,10 +3171,26 @@ class P115OpenClient(ClientRequestMixin):
3171
3171
  .. todo::
3172
3172
  不动点可能和用户 id 有某种联系,但目前样本不足,难以推断,以后再尝试分析
3173
3173
  """
3174
- resp = self.fs_files({"show_dir": 1, "limit": 1, "cid": 0})
3175
- check_response(resp)
3176
- info = resp["data"][0]
3177
- return get_stable_point(normalize_attr(info)["pickcode"])
3174
+ user_id = str(self.user_id)
3175
+ cache_dir = Path("~/.p115client.cache.d").expanduser()
3176
+ cache_dir.mkdir(exist_ok=True)
3177
+ pc_2_point_json = cache_dir / "pickcode_stable_points.json"
3178
+ try:
3179
+ cache = loads(pc_2_point_json.open("rb").read())
3180
+ except OSError:
3181
+ cache = {}
3182
+ if point := cache.get(user_id):
3183
+ return point
3184
+ else:
3185
+ resp = self.fs_files({"show_dir": 1, "limit": 1, "cid": 0})
3186
+ check_response(resp)
3187
+ info = resp["data"][0]
3188
+ point = cache[user_id] = get_stable_point(normalize_attr(info)["pickcode"])
3189
+ try:
3190
+ pc_2_point_json.open("wb").write(dumps(cache))
3191
+ except Exception:
3192
+ pass
3193
+ return point
3178
3194
 
3179
3195
  @overload
3180
3196
  def refresh_access_token(
@@ -873,6 +873,7 @@ def iter_subtitle_batches(
873
873
 
874
874
  # TODO: 要支持 open 接口
875
875
  # TODO: 后续还可用 iter_download_nodes 接口,来更快地拉取数据
876
+ # TODO: 增加一个方法:make_db
876
877
  @overload
877
878
  def make_strm(
878
879
  client: str | P115Client,
p115client/tool/edit.py CHANGED
@@ -128,7 +128,7 @@ def update_desc(
128
128
  """批量给文件或目录设置备注,此举可更新此文件或目录的 mtime
129
129
 
130
130
  :param client: 115 客户端或 cookies
131
- :param ids: 一组文件或目录的 id
131
+ :param ids: 一组文件或目录的 id 或 pickcode
132
132
  :param desc: 备注文本
133
133
  :param batch_size: 批次大小,分批次,每次提交的 id 数
134
134
  :param max_workers: 并发工作数,如果为 None 或者 <= 0,则自动确定
@@ -199,7 +199,7 @@ def update_star(
199
199
  如果一批中有任何一个 id 已经被删除,则这一批直接失败报错
200
200
 
201
201
  :param client: 115 客户端或 cookies
202
- :param ids: 一组文件或目录的 id
202
+ :param ids: 一组文件或目录的 id 或 pickcode
203
203
  :param star: 是否设置星标
204
204
  :param batch_size: 批次大小,分批次,每次提交的 id 数
205
205
  :param max_workers: 并发工作数,如果为 None 或者 <= 0,则自动确定
@@ -271,7 +271,7 @@ def update_label(
271
271
  """批量给文件或目录设置标签
272
272
 
273
273
  :param client: 115 客户端或 cookies
274
- :param ids: 一组文件或目录的 id
274
+ :param ids: 一组文件或目录的 id 或 pickcode
275
275
  :param label: 标签 id,多个用逗号 "," 隔开,如果用一个根本不存在的 id,效果就是清空标签列表
276
276
  :param batch_size: 批次大小,分批次,每次提交的 id 数
277
277
  :param max_workers: 并发工作数,如果为 None 或者 <= 0,则自动确定
@@ -336,7 +336,7 @@ def update_score(
336
336
  """批量给文件或目录设置分数
337
337
 
338
338
  :param client: 115 客户端或 cookies
339
- :param ids: 一组文件或目录的 id
339
+ :param ids: 一组文件或目录的 id 或 pickcode
340
340
  :param score: 分数
341
341
  :param batch_size: 批次大小,分批次,每次提交的 id 数
342
342
  :param max_workers: 并发工作数,如果为 None 或者 <= 0,则自动确定
@@ -395,7 +395,7 @@ def update_top(
395
395
  """批量给文件或目录设置置顶
396
396
 
397
397
  :param client: 115 客户端或 cookies
398
- :param ids: 一组文件或目录的 id
398
+ :param ids: 一组文件或目录的 id 或 pickcode
399
399
  :param score: 分数
400
400
  :param batch_size: 批次大小,分批次,每次提交的 id 数
401
401
  :param max_workers: 并发工作数,如果为 None 或者 <= 0,则自动确定
@@ -457,7 +457,7 @@ def update_show_play_long(
457
457
  """批量给目录设置显示时长
458
458
 
459
459
  :param client: 115 客户端或 cookies
460
- :param ids: 一组目录的 id
460
+ :param ids: 一组目录的 id 或 pickcode
461
461
  :param show: 是否显示时长
462
462
  :param batch_size: 批次大小,分批次,每次提交的 id 数
463
463
  :param max_workers: 并发工作数,如果为 None 或者 <= 0,则自动确定
@@ -522,7 +522,7 @@ def update_category_shortcut(
522
522
  """批量给目录设置显示时长
523
523
 
524
524
  :param client: 115 客户端或 cookies
525
- :param ids: 一组目录的 id
525
+ :param ids: 一组目录的 id 或 pickcode
526
526
  :param set: 是否设为快捷入口
527
527
  :param batch_size: 批次大小,分批次,每次提交的 id 数
528
528
  :param max_workers: 并发工作数,如果为 None 或者 <= 0,则自动确定
@@ -672,8 +672,12 @@ def post_event(
672
672
  如果一批中有任何一个 id 已经被删除,则这一批直接失败报错
673
673
 
674
674
  :param client: 115 客户端或 cookies
675
- :param ids: 一组文件或目录的 id
676
- :param star: 是否设置星标
675
+ :param ids: 一组文件或目录的 id 或 pickcode
676
+ :param type: 事件类型
677
+
678
+ - "doc": 推送 "browse_document" 事件
679
+ - "img": 推送 "browse_image" 事件
680
+
677
681
  :param batch_size: 批次大小,分批次,每次提交的 id 数
678
682
  :param max_workers: 并发工作数,如果为 None 或者 <= 0,则自动确定
679
683
  :param app: 使用此设备的接口
@@ -47,7 +47,7 @@ from typing import cast, overload, Any, Final, Literal, NamedTuple
47
47
  from warnings import warn
48
48
 
49
49
  from asynctools import to_list
50
- from concurrenttools import run_as_thread, taskgroup_map, threadpool_map, conmap
50
+ from concurrenttools import run_as_thread, conmap
51
51
  from iterutils import (
52
52
  as_gen_step, bfs_gen, chunked, chain, chain_from_iterable, collect, foreach,
53
53
  run_gen_step, run_gen_step_iter, through, with_iter_next, map as do_map,
@@ -3415,6 +3415,7 @@ def iter_nodes_using_info(
3415
3415
  ))
3416
3416
 
3417
3417
 
3418
+ # TODO: 是否能批量推送 "browse_audio" 或 "browse_video" 事件?
3418
3419
  @overload
3419
3420
  def iter_nodes_using_event(
3420
3421
  client: str | P115Client,
p115client/tool/util.py CHANGED
@@ -15,7 +15,7 @@ from urllib.parse import parse_qsl, urlsplit
15
15
 
16
16
 
17
17
  CRE_115_CHARREF_sub: Final = re_compile("\\[\x02([0-9]+)\\]").sub
18
- CRE_SHARE_LINK_search = re_compile(r"(?:^|(?<=/))(?P<share_code>[a-z0-9]+)(?:-|\?|\?password=)(?P<receive_code>[a-z0-9]{4})").search
18
+ CRE_SHARE_LINK_search = re_compile(r"(?:^|(?<=/))(?P<share_code>[a-z0-9]+)(?:-|\?password=|\?)(?P<receive_code>[a-z0-9]{4})(?!==)\b").search
19
19
 
20
20
 
21
21
  class SharePayload(TypedDict):
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: p115client
3
- Version: 0.0.5.15
3
+ Version: 0.0.5.15.2
4
4
  Summary: Python 115 webdisk client.
5
5
  Home-page: https://github.com/ChenyangGao/p115client
6
6
  License: MIT
@@ -1,28 +1,28 @@
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=OVfHb0Lpa2PHp3TADXlJTUJQyU2LG-s2mealZ9s-9L8,808801
4
+ p115client/client.py,sha256=05ODXki0tes-WzRc6N6WT5zD8Lx_VWjV-yLIR8H6dxQ,809397
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
8
8
  p115client/tool/__init__.py,sha256=IwwzbCQ7jpRoFGTQUCfGBx8zvjqjgSFs98yKpYyI46s,429
9
9
  p115client/tool/attr.py,sha256=G91V71EhsqIIPkhGDnv2z6nxVq7wgl6nNPDj3AKzw1I,3079
10
10
  p115client/tool/auth.py,sha256=qlRcfEjzebseiHR2dyBpOoPpxB4k8P6Tj729S2TLB1s,1672
11
- p115client/tool/download.py,sha256=QY1uarHZ7vDVa-fz-vzWx-3UHFDmPa3CJ1XwUg8LqJE,65360
12
- p115client/tool/edit.py,sha256=o7TyWl1FtP7VyjLGNoO-sPB1huU9chufciIlVsFQWAw,19445
11
+ p115client/tool/download.py,sha256=7F1HJ7Hfh2bu-aBpK7E3Ijhs5tqVgEBIByxpMNiNqxc,65397
12
+ p115client/tool/edit.py,sha256=Nqy8G_UCGbIUGG_udd3JM8073Sm9I0q3kUe4i3XcIOg,19640
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=LsjhJsF9c5pSeihlnCMig9n1L2w49wbUf3YS-hMOn_I,177841
16
+ p115client/tool/iterdir.py,sha256=qUlFc_fOGeKs3BrINCGwaoyBHkDopStPeKWXMYWBkP8,177884
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
20
20
  p115client/tool/request.py,sha256=rjXuQwRganE5Z-4rfgnyPFjE4jzdQSLdIs9s0cIDshU,7043
21
21
  p115client/tool/upload.py,sha256=dpww3TGSOyjqz1EogQEJDiZ9QWERd47izZOw9mNCCiA,32945
22
- p115client/tool/util.py,sha256=gvA-o-TcEAR3o754Kn82Bu6yggmnAhScUCrRpMVCI50,3934
22
+ p115client/tool/util.py,sha256=TqVx00rKiMHJHE3VvXDlJ9GlY8EX1Gx3aOa_aqQnJkc,3942
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.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,,
25
+ p115client-0.0.5.15.2.dist-info/LICENSE,sha256=o5242_N2TgDsWwFhPn7yr8YJNF7XsJM5NxUMtcT97bc,1100
26
+ p115client-0.0.5.15.2.dist-info/METADATA,sha256=irdwohihUySpR_ObdQalitP2evNd3csHsohfbP-mMVI,8230
27
+ p115client-0.0.5.15.2.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
28
+ p115client-0.0.5.15.2.dist-info/RECORD,,