Skip to content

Commit faf7cfe

Browse files
authored
v2.1.19: 完善上手文档,优化option配置机制 (#109)
1 parent affadd9 commit faf7cfe

File tree

4 files changed

+112
-44
lines changed

4 files changed

+112
-44
lines changed

src/jmcomic/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,6 @@
22
# 被依赖方 <--- 使用方
33
# config <--- entity <--- toolkit <--- client <--- option <--- downloader
44

5-
__version__ = '2.1.18'
5+
__version__ = '2.1.19'
66

77
from .api import *

src/jmcomic/jm_config.py

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -234,6 +234,61 @@ def new_postman(cls, session=False, **kwargs):
234234
'x-requested-with': 'XMLHttpRequest',
235235
}
236236

237+
# option 默认配置字典
238+
default_option_dict: dict = {
239+
'version': '2.0',
240+
'debug': None,
241+
'dir_rule': {'rule': 'Bd_Ptitle', 'base_dir': None},
242+
'download': {
243+
'cache': True,
244+
'image': {'decode': True, 'suffix': None},
245+
'threading': {'batch_count': 30},
246+
},
247+
'client': {
248+
'cache': None,
249+
'domain': [],
250+
'postman': {
251+
'type': 'cffi',
252+
'meta_data': {
253+
'impersonate': 'chrome110',
254+
'headers': None,
255+
}
256+
},
257+
'impl': 'html',
258+
'retry_times': 5
259+
}
260+
}
261+
262+
@classmethod
263+
def option_default_dict(cls) -> dict:
264+
"""
265+
返回JmOption.default()的默认配置字典。
266+
这样做是为了支持外界自行覆盖option默认配置字典
267+
"""
268+
option_dict = cls.default_option_dict.copy()
269+
270+
# debug
271+
if option_dict['debug'] is None:
272+
option_dict['debug'] = cls.enable_jm_debug
273+
274+
# dir_rule.base_dir
275+
dir_rule = option_dict['dir_rule']
276+
if dir_rule['base_dir'] is None:
277+
import os
278+
dir_rule['base_dir'] = os.getcwd()
279+
280+
# client cache
281+
client = option_dict['client']
282+
if client['cache'] is None:
283+
client['cache'] = True
284+
285+
# headers
286+
meta_data = client['postman']['meta_data']
287+
if meta_data['headers'] is None:
288+
meta_data['headers'] = cls.headers()
289+
290+
return option_dict
291+
237292

238293
jm_debug = JmModuleConfig.jm_debug
239294
disable_jm_debug = JmModuleConfig.disable_jm_debug

src/jmcomic/jm_option.py

Lines changed: 1 addition & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -266,30 +266,7 @@ def new_jm_client(self, **kwargs) -> JmcomicClient:
266266

267267
@classmethod
268268
def default_dict(cls) -> Dict:
269-
return {
270-
'version': '2.0',
271-
'debug': True,
272-
'dir_rule': {'rule': 'Bd_Ptitle', 'base_dir': workspace()},
273-
'download': {
274-
'cache': True,
275-
'image': {'decode': True, 'suffix': None},
276-
'threading': {'batch_count': 30},
277-
},
278-
'client': {
279-
'cache': True,
280-
'domain': [],
281-
'postman': {
282-
'type': 'cffi',
283-
'meta_data': {
284-
'impersonate': 'chrome110',
285-
'cookies': None,
286-
'headers': JmModuleConfig.headers(),
287-
}
288-
},
289-
'impl': 'html',
290-
'retry_times': 5
291-
}
292-
}
269+
return JmModuleConfig.option_default_dict()
293270

294271
@classmethod
295272
def default(cls):

usage/getting_started.py

Lines changed: 55 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -14,24 +14,48 @@
1414

1515
"""
1616
--------------------
17-
配置文件介绍
17+
配置文件上手
1818
--------------------
1919
"""
20+
from jmcomic import JmModuleConfig, JmOption, create_option
21+
2022
# 先获取默认的JmOption对象
21-
jm_option = jmcomic.JmOption.default()
23+
option = JmOption.default()
2224

2325
# 可以把对象保存为文件,方便编辑
24-
jm_option.to_file('./你的配置文件路名称.yml') # yml格式
25-
jm_option.to_file('./你的配置文件路名称.json') # json格式
26+
option.to_file('保存路径.yml') # yml格式
27+
option.to_file('保存路径.json') # json格式
2628

2729
# 如果你修改了默认配置,现在想用你修改后的配置来下载,使用如下代码
28-
jm_option = jmcomic.create_option('./你的配置文件路名称.yml')
29-
jmcomic.download_album('23333', jm_option)
30+
option = JmOption.from_file('保存路径.yml')
31+
# 或者
32+
option = create_option('保存路径.yml')
33+
# 使用你的option配置来下载
34+
jmcomic.download_album('23333', option)
35+
36+
37+
"""
38+
39+
--------------------
40+
配置文件进阶
41+
--------------------
42+
43+
定制option有几种方式?
3044
31-
# 如果你只想做简单的配置,也可以使用如下形式
32-
# 具体可以写什么,请参考 JmOption.default_dict,你只需要覆盖里面的键值即可
33-
# 配置代理
34-
jm_option = JmOption.construct({
45+
方式1. 针对一个option对象生效
46+
JmOption.construct({xxx: yyy}) -- 简单配置推荐
47+
JmOption.from_file('配置文件路径') -- 复杂配置推荐
48+
49+
方式2. 针对所有option对象生效,全局配置,配置的优先级次于1
50+
JmModuleConfig.default_option_dict['xxx'] = yyy
51+
52+
下面以配置代理为例
53+
54+
"""
55+
from jmcomic import JmOption, ProxyBuilder, download_album
56+
57+
# 方式1. 定制一个option对象
58+
option = JmOption.construct({
3559
'client': {
3660
'postman': {
3761
'meta_data': {
@@ -40,34 +64,46 @@
4064
}
4165
}
4266
})
67+
# 调用下载api需要传入此option
68+
download_album('xxx', option)
69+
70+
# 方式2. 使用全局配置
71+
JmModuleConfig.default_option_dict['client']['postman']['meta_data']['proxies'] = ProxyBuilder.clash_proxy()
72+
# 调用下载api**不需要**传入option
73+
download_album('xxx')
4374

4475

4576
"""
4677
--------------------
4778
批量下载介绍
4879
--------------------
4980
"""
81+
from jmcomic import download_album
82+
5083
# 如果你想要批量下载,可以使用 list/set/tuple/生成器 作为第一个参数。
5184
# 第二个参数依然是可选的JmOption对象
52-
jmcomic.download_album(['422866', '1', '2', '3']) # list
53-
jmcomic.download_album({'422866', '1', '2', '3'}) # set
54-
jmcomic.download_album(('422866', '1', '2', '3')) # tuple
55-
jmcomic.download_album(aid for aid in ('422866', '1', '2', '3')) # 生成器
85+
download_album(['422866', '1', '2', '3']) # list
86+
download_album({'422866', '1', '2', '3'}) # set
87+
download_album(('422866', '1', '2', '3')) # tuple
88+
download_album(aid for aid in ('422866', '1', '2', '3')) # 生成器
5689

5790

5891
"""
5992
--------------------
6093
获取域名介绍
6194
--------------------
6295
"""
96+
from jmcomic import JmModuleConfig
97+
6398
# 方式1: 访问禁漫发布页
64-
url_ls = jmcomic.JmModuleConfig.get_jmcomic_url_all()
99+
domain_ls = JmModuleConfig.get_jmcomic_url_all()
65100
print(url_ls)
66101

67102
# 方式2: 访问禁漫的永久网域
68-
url = jmcomic.JmModuleConfig.get_jmcomic_url()
103+
url = JmModuleConfig.get_jmcomic_url()
69104
print(url)
70105

71-
# 配置jmcomic模块的默认域名
72-
# 默认域名仅在option没有配置domain时被使用
73-
jmcomic.JmModuleConfig.DOMAIN = '18comic.vip'
106+
# Q:download_album(xxx),没有传入option,那么访问JM使用的默认域名是什么?
107+
# A:默认域名是: JmModuleConfig.get_jmcomic_url(),如果想定制此默认域名:
108+
# 做法1: 定制option,见上
109+
# 做法2: JmModuleConfig.DOMAIN = '18comic.vip'

0 commit comments

Comments
 (0)