kmoe-manga-downloader 1.2.3b0__py3-none-any.whl → 1.2.4b0__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.
kmdr/_version.py CHANGED
@@ -28,7 +28,7 @@ version_tuple: VERSION_TUPLE
28
28
  commit_id: COMMIT_ID
29
29
  __commit_id__: COMMIT_ID
30
30
 
31
- __version__ = version = '1.2.3b0'
32
- __version_tuple__ = version_tuple = (1, 2, 3, 'b0')
31
+ __version__ = version = '1.2.4b0'
32
+ __version_tuple__ = version_tuple = (1, 2, 4, 'b0')
33
33
 
34
34
  __commit_id__ = commit_id = None
kmdr/core/session.py CHANGED
@@ -53,6 +53,7 @@ class KmdrSessionManager(SessionManager):
53
53
  # 持久化配置
54
54
  self._configurer.set_base_url(self._base_url)
55
55
  debug("使用的基础 URL:", self._base_url)
56
+ debug("使用的代理:", self._proxy)
56
57
 
57
58
  self._session = ClientSession(
58
59
  base_url=self._base_url,
kmdr/main.py CHANGED
@@ -10,7 +10,7 @@ from kmdr.module import *
10
10
  async def main(args: Namespace, fallback: Callable[[], None] = lambda: print('NOT IMPLEMENTED!')) -> None:
11
11
 
12
12
  post_init(args)
13
- log('[Lifecycle:Start] 启动 kmdr 版本:', __version__)
13
+ log('[Lifecycle:Start] 启动 kmdr, 版本', __version__)
14
14
  debug('[bold green]以调试模式启动[/bold green]')
15
15
  debug('接收到的参数:', args)
16
16
 
@@ -77,7 +77,10 @@ def extract_var_define(script_text) -> dict[str, str]:
77
77
  line = line.strip()
78
78
  if line.startswith("var ") and "=" in line:
79
79
  var_name, var_value = line[4:].split("=", 1)
80
- var_define[var_name.strip()] = var_value.strip().strip(";").strip('"')
80
+ var_value = var_value.strip().strip(";").strip('"')
81
+ if var_name and var_value:
82
+ var_define[var_name.strip()] = var_value
83
+ debug("解析到变量定义: ", var_define)
81
84
  return var_define
82
85
 
83
86
  def __resolve_quota_id(is_vip: Optional[int] = None, user_level: Optional[int] = None):
@@ -26,7 +26,7 @@ class OptionLister(Configurer):
26
26
 
27
27
  if self._configurer.option is not None:
28
28
  for idx, (key, value) in enumerate(self._configurer.option.items()):
29
- value_to_display = value
29
+ value_to_display = str(value)
30
30
  if isinstance(value, (dict, list, set, tuple)):
31
31
  value_to_display = Pretty(value)
32
32
 
@@ -13,6 +13,7 @@ from rich.progress import Progress
13
13
  from aiohttp.client_exceptions import ClientPayloadError
14
14
 
15
15
  from kmdr.core.console import info, log, debug
16
+ from kmdr.core.error import ResponseError
16
17
 
17
18
  from .misc import STATUS, StateManager
18
19
 
@@ -161,8 +162,7 @@ async def download_file_multipart(
161
162
  info(f"[blue]{filename} 已经存在[/blue]")
162
163
  return
163
164
 
164
- log(f"开始下载文件: {filename} 到路径: {dest_path}")
165
-
165
+ log("开始下载文件:", filename)
166
166
  part_paths = []
167
167
  part_expected_sizes = []
168
168
  task_id = None
@@ -171,12 +171,17 @@ async def download_file_multipart(
171
171
  try:
172
172
  current_url = await fetch_url(url)
173
173
 
174
- async with session.head(current_url, headers=headers, allow_redirects=True) as response:
175
- # 注意:这个请求完成后,服务器就会记录这次下载,并消耗对应的流量配额,详细的规则请参考网站说明:
176
- # 1 : 訂閱連載中的漫畫,有更新時自動推送的卷(冊),暫不計算在使用額度中,不扣減使用額度。
177
- # 注 2 : 對同一卷(冊)書在 12 小時內重複*下載*,不會重複扣減額度。但重復推送是會扣減的。
178
- response.raise_for_status()
179
- total_size = int(response.headers['Content-Length'])
174
+ async with semaphore:
175
+ # 获取文件信息,请求以获取文件大小
176
+ # 复用 semaphore 以控制并发,避免过多并发请求触发服务器限流
177
+ async with session.head(current_url, headers=headers, allow_redirects=True) as response:
178
+ # 注意:这个请求完成后,服务器就会记录这次下载,并消耗对应的流量配额,详细的规则请参考网站说明:
179
+ # 注 1 : 訂閱連載中的漫畫,有更新時自動推送的卷(),暫不計算在使用額度中,不扣減使用額度。
180
+ # 注 2 : 對同一卷(冊)書在 12 小時內重複*下載*,不會重複扣減額度。但重復推送是會扣減的。
181
+ response.raise_for_status()
182
+ if 'Content-Length' not in response.headers:
183
+ raise ResponseError("无法从服务器获取文件大小,请检查网络连接或稍后重试。", status_code=response.status)
184
+ total_size = int(response.headers['Content-Length'])
180
185
 
181
186
  chunk_size = chunk_size_mb * 1024 * 1024
182
187
  num_chunks = math.ceil(total_size / chunk_size)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: kmoe-manga-downloader
3
- Version: 1.2.3b0
3
+ Version: 1.2.4b0
4
4
  Summary: A CLI-downloader for site @kox.moe.
5
5
  Author-email: Chris Zheng <chrisis58@outlook.com>
6
6
  License: MIT License
@@ -50,9 +50,26 @@ Dynamic: license-file
50
50
 
51
51
  `kmdr (Kmoe Manga Downloader)` 是一个 Python 终端应用,用于从 [Kmoe](https://kxx.moe/) 网站下载漫画。它支持在终端环境下的登录、下载指定漫画及其卷,并支持回调脚本执行。
52
52
 
53
- <p align="center">
54
- <img src="assets/kmdr-demo.gif" alt="kmdr 使用演示" width="720">
55
- </p>
53
+ <table style="min-width: 600px;">
54
+ <tbody>
55
+ <tr>
56
+ <td style="text-align: center;" width="100">
57
+ 交互模式
58
+ </td>
59
+ <td style="text-align: center;">
60
+ <img src="assets/kmdr-demo.gif" alt="kmdr 使用演示" />
61
+ </td>
62
+ </tr>
63
+ <tr>
64
+ <td style="text-align: center;" width="100">
65
+ 日志模式
66
+ </td>
67
+ <td style="text-align: center;">
68
+ <img src="assets/kmdr-log-demo.gif" alt="kmdr 日志使用演示" />
69
+ </td>
70
+ </tr>
71
+ </tbody>
72
+ </table>
56
73
 
57
74
  ## ✨功能特性
58
75
 
@@ -1,6 +1,6 @@
1
1
  kmdr/__init__.py,sha256=iLmy2rOkHS_4KZWMD8BgT7R3tLMKeaTCDVf3B4FyYxM,91
2
- kmdr/_version.py,sha256=wqiogbpHngoX8QtZ_nlsUei1NMVQXPtFkYVQOrBjkgo,712
3
- kmdr/main.py,sha256=xNUeU1voEMEqlf8z14EyiV-j61HPsRA3t2Nzreoaib4,2227
2
+ kmdr/_version.py,sha256=rM7kfqxNlfxUahLd21Eo-qk4zyhI6_o3QboivAV5LQI,712
3
+ kmdr/main.py,sha256=CSYLADdJ5bJMxT3wn0Nkq5_bmRBpXxzqpLmLCbzi9Q0,2227
4
4
  kmdr/core/__init__.py,sha256=aR3mhP1A81oTmTnBOonVQm_mFvFeNCOo7kalZVfszAc,416
5
5
  kmdr/core/bases.py,sha256=br3HJC4mWL2jN4Y5QeXB5SwA0xnOfi2ougr5pEx7j8s,3989
6
6
  kmdr/core/console.py,sha256=VziwGJQygF-zCrzTApPF-I9BgZKFSqCTiZ_pc5n8C-4,1950
@@ -10,25 +10,25 @@ kmdr/core/defaults.py,sha256=tF41i145znhhDGVNL5irQpdF4lV_1tkWtvToRfm2R4s,8968
10
10
  kmdr/core/error.py,sha256=qdbMEU6YhRcdbxlfZKKydoMFYXOCJQ473EYzl3mO33Q,1585
11
11
  kmdr/core/protocol.py,sha256=ntHmnrvg_nZXh2-It0Wu9g2e8f3YpOLfpoRsWniG8as,247
12
12
  kmdr/core/registry.py,sha256=KYjvww5WRuUg5SeIeWZb96803-kgrTIKYvFTj_7bPfo,5560
13
- kmdr/core/session.py,sha256=ZrnoxZWUwLSMiLIOZDGEQZcH7RuBLcc5e2E0m17qX-s,4937
13
+ kmdr/core/session.py,sha256=_yXXV3c6GqxrNzCkqizFVSEvnadvcHjjWSZLaPbgxUY,4988
14
14
  kmdr/core/structure.py,sha256=EQG1-8kHQ22Not2S7Q_jGxE0nb9XUbLh3JcNTb_nkvk,1199
15
15
  kmdr/core/utils.py,sha256=_tRLggprXTGFvbRzyt3dgapQr2wI5NQ8Hc4_BHVj7lU,4069
16
16
  kmdr/module/__init__.py,sha256=hY6lMBpxSn93t7OKnEbXUwTok2XqQoQbuyq1HLeC4Kc,125
17
17
  kmdr/module/authenticator/CookieAuthenticator.py,sha256=lv_monQ7QUMfgPPgxoV1xr_KyUtwCKZhqJ8umv3W6xo,1108
18
18
  kmdr/module/authenticator/LoginAuthenticator.py,sha256=5nyrzxYEGiRQ9ulnhjpuUWYeog-ALZlCCSAYkbwlKMw,1890
19
19
  kmdr/module/authenticator/__init__.py,sha256=iSWhq-suAM1BrABRuTWiCKvZ1fkmf5HQ2GmbZ341GK0,103
20
- kmdr/module/authenticator/utils.py,sha256=b49cwKjHVqOIHei0SUU5kMtWAgkYU0NH3YvDvdPhkxM,3053
20
+ kmdr/module/authenticator/utils.py,sha256=ulXyMuKiR9N7hI0FX2X9qM66gD4D68KKVvN0KuN47ek,3179
21
21
  kmdr/module/configurer/BaseUrlUpdator.py,sha256=OsdMUuyGujfqE6vEPt96sCJkJTfsPxAf5z2hbjcNZsQ,522
22
22
  kmdr/module/configurer/ConfigClearer.py,sha256=irGBsck1EhTWl4IIOPF5b4o4TyrGvDAzibg9reQsI9A,501
23
23
  kmdr/module/configurer/ConfigUnsetter.py,sha256=tbrOGKnTSeKhdMukIBPFqtdctEiQhu7GRThLthFYZew,602
24
- kmdr/module/configurer/OptionLister.py,sha256=hqOtXfPcunzqkrq6Qx1KyZwEivp_vbpTVZ8PP3Q0MbY,1471
24
+ kmdr/module/configurer/OptionLister.py,sha256=bGlrxouPiBGpGv8UiGPcT3KL6SWMJckQKd9gyd4kXjY,1476
25
25
  kmdr/module/configurer/OptionSetter.py,sha256=BQXIgyLoMDSNua2x96FtX-9JmJhVpPJ5o0tWHj_-7B0,898
26
26
  kmdr/module/configurer/__init__.py,sha256=nSWGwUCcwOkvg28zxRd0S3b4jeag_W0IhzP74xq0ewE,204
27
27
  kmdr/module/configurer/option_validate.py,sha256=tb6fvj01cDiPTQa6tC4-dYcTfUJUX3DBmkHKAKeuW3g,3358
28
28
  kmdr/module/downloader/DirectDownloader.py,sha256=SPnzKDpVPg3utyrPrFr4pYiMI5w3eRCMemcYevH9VzY,1320
29
29
  kmdr/module/downloader/ReferViaDownloader.py,sha256=o565u6W4G_4UFoqsLkXGRFIlRSMueZB_ZMdiAfhUVCc,1970
30
30
  kmdr/module/downloader/__init__.py,sha256=PajPBQ4ZJwz_6Ok6k-HV7-YSibxAW5m5voYyP-U-_f4,97
31
- kmdr/module/downloader/download_utils.py,sha256=JBAlNUQdWysKIGJJWaZibH8IpkIXP_kUEVxoC_bLbhg,13944
31
+ kmdr/module/downloader/download_utils.py,sha256=kVzDaHlwAeXMFha2HBv4znXxeBUiXYLM9u_Nqqw9puc,14384
32
32
  kmdr/module/downloader/misc.py,sha256=dS4GDHYxzKcqdhFNVJQG-4bS4IXMDnDrwi6eSWubl20,1892
33
33
  kmdr/module/lister/BookUrlLister.py,sha256=R1sak_GQG8HKfdSzHF-Dy1iby6TgFlxKJLf2dwBr0Bw,550
34
34
  kmdr/module/lister/FollowedBookLister.py,sha256=5r44sW_ypnRM5nBBd-4AL_WcNYCRklMewvMj1O2xCGc,2880
@@ -38,9 +38,9 @@ kmdr/module/picker/ArgsFilterPicker.py,sha256=wBCDa6KsSSOLLQk8D4ftZ9ZnwPLiHIirxf
38
38
  kmdr/module/picker/DefaultVolPicker.py,sha256=qScmRtwpe1u3fY7HMIo15YXtwB4LYAIJaTu_EkrAJbs,1780
39
39
  kmdr/module/picker/__init__.py,sha256=qYELEkv0nFT8DadItB6fdUTED2CHrC43wuPKO7QrCCQ,93
40
40
  kmdr/module/picker/utils.py,sha256=baJzpQSSSBdTPZ2scrEeNOssGYOL0nNwxN1gTsOAqnc,1604
41
- kmoe_manga_downloader-1.2.3b0.dist-info/licenses/LICENSE,sha256=bKQlsXu8mAYKRZyoZKOEqMcCc8YjT5Q3Hgr21e0yU4E,1068
42
- kmoe_manga_downloader-1.2.3b0.dist-info/METADATA,sha256=9Z42LEHwL9wZVCRiUbR7FX2BsO1jBmu5dpXeIFRtN_c,9695
43
- kmoe_manga_downloader-1.2.3b0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
44
- kmoe_manga_downloader-1.2.3b0.dist-info/entry_points.txt,sha256=DGMytQAhx4uNuKQL7BPkiWESHLXkH-2KSEqwHdygNPA,47
45
- kmoe_manga_downloader-1.2.3b0.dist-info/top_level.txt,sha256=e0qxOgWp0tl3GLpmXGjZv3--q_TLoJ7GztM48Ov27wM,5
46
- kmoe_manga_downloader-1.2.3b0.dist-info/RECORD,,
41
+ kmoe_manga_downloader-1.2.4b0.dist-info/licenses/LICENSE,sha256=bKQlsXu8mAYKRZyoZKOEqMcCc8YjT5Q3Hgr21e0yU4E,1068
42
+ kmoe_manga_downloader-1.2.4b0.dist-info/METADATA,sha256=An6sk9_09r2Y0SFbyKuCgMkPBdhzJXENOhJ98RhIsr4,10116
43
+ kmoe_manga_downloader-1.2.4b0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
44
+ kmoe_manga_downloader-1.2.4b0.dist-info/entry_points.txt,sha256=DGMytQAhx4uNuKQL7BPkiWESHLXkH-2KSEqwHdygNPA,47
45
+ kmoe_manga_downloader-1.2.4b0.dist-info/top_level.txt,sha256=e0qxOgWp0tl3GLpmXGjZv3--q_TLoJ7GztM48Ov27wM,5
46
+ kmoe_manga_downloader-1.2.4b0.dist-info/RECORD,,