Skip to content

Commit ba87827

Browse files
committed
fix: PR Review 修复
1 parent 09233da commit ba87827

4 files changed

Lines changed: 43 additions & 24 deletions

File tree

assets/docs/sources/tutorial/13_export_and_feature.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ download_album('123', option, extra=Feature.export_pdf + Feature.export_zip)
5454

5555
# 也支持列表语法,|语法
5656
download_album('123', option, extra=[Feature.export_pdf, Feature.export_zip])
57-
download_album('123', option, extra=Feature.export_pdf Feature.export_zip)
57+
download_album('123', option, extra=Feature.export_pdf | Feature.export_zip)
5858
```
5959

6060
效果同pdf,会在本子下载完以后,额外在当前工作目录下,生成包含所有本子图片的 PDF 文件和 ZIP 文件:

src/jmcomic/jm_feature.py

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,6 @@
1616
download_album(id, option, extra=[Feature.export_pdf, Feature.export_zip])
1717
download_album(id, option, extra=Feature.export_pdf + Feature.export_zip)
1818
"""
19-
from typing import LiteralString
20-
2119
from .jm_plugin import *
2220

2321

@@ -81,8 +79,6 @@ class PluginFeature(Feature):
8179
def __init__(self, plugin_key, **kwargs):
8280
self.plugin_key = plugin_key
8381
self.kwargs = kwargs
84-
# 用户通过 __call__ 显式传入的参数名,这些参数不会被 _adapt_kwargs 动态适配
85-
self._user_keys: set = set()
8682

8783
def should_invoke(self, feature_from: str, when: str) -> bool:
8884
"""
@@ -100,8 +96,6 @@ def __call__(self, **kwargs):
10096
new_kwargs = self.kwargs.copy()
10197
new_kwargs.update(kwargs)
10298
new_instance = PluginFeature(self.plugin_key, **new_kwargs)
103-
# 记录用户显式传入的参数名,这些参数不被动态适配
104-
new_instance._user_0keys = set(kwargs.keys())
10599
return new_instance
106100

107101
def invoke(self, option: JmOption, feature_from: str, when: str, **extra):

src/jmcomic/jm_option.py

Lines changed: 32 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -344,6 +344,29 @@ def _migrate_zip_level(cls, plugins: dict):
344344
level 已废弃,打包粒度由所在钩子的上下文自动推导。
345345
迁移规则:level='album' → 确保在 after_album;其他 → 确保在 after_photo。
346346
"""
347+
348+
def log_advice(reason, plugins):
349+
import yaml
350+
# 意图聚焦:建议配置中只展示相关的 zip 插件,剔除其他无关插件的干扰
351+
advice_plugins = {}
352+
for g, plist in plugins.items():
353+
zips = [p for p in plist if p.get('plugin') == 'zip']
354+
if zips:
355+
advice_plugins[g] = zips
356+
357+
if not advice_plugins:
358+
return
359+
360+
plugins_yml = yaml.dump({'plugins': advice_plugins}, default_flow_style=False, indent=2, sort_keys=False).strip()
361+
362+
jm_log('option.migrate',
363+
f'[zip 插件迁移] level 参数已过时,建议直接删除。'
364+
f'{reason},建议参考如下的等价新写法:\n'
365+
f'```yml\n'
366+
f'{plugins_yml}\n'
367+
f'```'
368+
)
369+
347370
for group in ['after_album', 'after_photo']:
348371
plugin_list = plugins.get(group)
349372
if not isinstance(plugin_list, list):
@@ -365,18 +388,18 @@ def _migrate_zip_level(cls, plugins: dict):
365388
# after_album + level=photo → 等价迁移到 after_photo
366389
plugins.setdefault('after_photo', []).append(pinfo)
367390
plugin_list.pop(i)
368-
jm_log('option.migrate',
369-
f'[zip 插件迁移] level 参数已过时,建议删除level参数。'
370-
f'你的当前配置为,在本子下载完毕后按章节压缩,建议改为如下的等价新写法:\n'
371-
f'plugins:\n'
372-
f' after_photo:\n'
373-
f' - plugin: {pinfo["plugin"]}\n'
374-
f' kwargs: {pinfo["kwargs"]}\n'
375-
)
391+
log_advice('你的当前配置为:在本子下载完毕后按章节压缩', plugins)
392+
393+
elif group == 'after_photo' and level == 'album':
394+
# after_photo + level=album → 等价迁移到 after_album
395+
plugins.setdefault('after_album', []).append(pinfo)
396+
plugin_list.pop(i)
397+
log_advice('你的当前配置为:在单章节下载完毕后对全本进行压缩', plugins)
398+
376399
else:
377400
if level != 'photo':
378401
jm_log('option.migrate',
379-
f'[zip 插件迁移] level 参数已过时,你可以直接删除该参数,不会有任何影响')
402+
'[zip 插件迁移] level 参数已过时,你可以直接删除该参数,不会有任何影响')
380403
i += 1
381404

382405
def deconstruct(self) -> Dict:

tests/test_jmcomic/test_jm_feature.py

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -62,27 +62,29 @@ def invoke(self, option, **kwargs):
6262

6363
def test_adapt_kwargs(self):
6464
"""测试 PluginFeature 参数动态适配"""
65-
# download_album 模式:P前缀 → A前缀, level → album
65+
when = 'after_album'
66+
6667
pdf = Feature.export_pdf
6768
adapted = pdf._adapt_plugin_kwargs('download_album', when)
68-
self.assertEqual(adapted['filename_rule'], 'Atitle') # A开头不变
69+
self.assertEqual(adapted['filename_rule'], '[JM{Aid}]{Atitle}')
6970

7071
zip_f = Feature.export_zip
7172
adapted = zip_f._adapt_plugin_kwargs('download_album', when)
72-
self.assertEqual(adapted['filename_rule'], 'Atitle') # Ptitle → Atitle
73+
self.assertEqual(adapted['filename_rule'], '[JM{Aid}]{Atitle}')
7374

7475
long_img = Feature.export_long_img
7576
adapted = long_img._adapt_plugin_kwargs('download_album', when)
76-
self.assertEqual(adapted['filename_rule'], 'Aid') # Pid → Aid
77+
self.assertEqual(adapted['filename_rule'], '[JM{Aid}]{Atitle}')
7778

78-
# download_photo 模式:A前缀 → P前缀, level → photo
79+
# download_photo 模式
80+
when = 'after_photo'
7981
adapted = pdf._adapt_plugin_kwargs('download_photo', when)
80-
self.assertEqual(adapted['filename_rule'], 'Ptitle') # Atitle → Ptitle
82+
self.assertEqual(adapted['filename_rule'], '[JM{Pid}]{Ptitle}')
8183

82-
# 用户显式传入的参数不被动态适配
84+
# 用户显式传入的参数不被动态适配 (通过 kwargs 机制自带)
8385
custom = Feature.export_zip(filename_rule='Ptitle')
8486
adapted = custom._adapt_plugin_kwargs('download_album', when)
85-
self.assertEqual(adapted['filename_rule'], 'Ptitle') # 用户显式指定,不适配
87+
self.assertEqual(adapted['filename_rule'], 'Ptitle') # 用户显式指定,不被 setdefault 覆盖
8688

8789
def test_download_use_feature(self):
8890
album_id = '438516'

0 commit comments

Comments
 (0)