jmcomic 2.5.35__py3-none-any.whl → 2.5.36__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.
- jmcomic/__init__.py +1 -1
- jmcomic/jm_client_interface.py +4 -1
- jmcomic/jm_config.py +1 -1
- jmcomic/jm_entity.py +26 -0
- jmcomic/jm_option.py +13 -5
- {jmcomic-2.5.35.dist-info → jmcomic-2.5.36.dist-info}/METADATA +1 -1
- jmcomic-2.5.36.dist-info/RECORD +18 -0
- jmcomic-2.5.35.dist-info/RECORD +0 -18
- {jmcomic-2.5.35.dist-info → jmcomic-2.5.36.dist-info}/WHEEL +0 -0
- {jmcomic-2.5.35.dist-info → jmcomic-2.5.36.dist-info}/entry_points.txt +0 -0
- {jmcomic-2.5.35.dist-info → jmcomic-2.5.36.dist-info}/licenses/LICENSE +0 -0
- {jmcomic-2.5.35.dist-info → jmcomic-2.5.36.dist-info}/top_level.txt +0 -0
jmcomic/__init__.py
CHANGED
jmcomic/jm_client_interface.py
CHANGED
|
@@ -62,13 +62,16 @@ class JmImageResp(JmResp):
|
|
|
62
62
|
img_url=None,
|
|
63
63
|
):
|
|
64
64
|
img_url = img_url or self.url
|
|
65
|
+
index = img_url.find("?")
|
|
66
|
+
if index != -1:
|
|
67
|
+
img_url = img_url[0:index]
|
|
65
68
|
|
|
66
69
|
if decode_image is False or scramble_id is None:
|
|
67
70
|
# 不解密图片,直接保存文件
|
|
68
71
|
JmImageTool.save_resp_img(
|
|
69
72
|
self,
|
|
70
73
|
path,
|
|
71
|
-
need_convert=suffix_not_equal(img_url
|
|
74
|
+
need_convert=suffix_not_equal(img_url, path),
|
|
72
75
|
)
|
|
73
76
|
else:
|
|
74
77
|
# 解密图片并保存文件
|
jmcomic/jm_config.py
CHANGED
jmcomic/jm_entity.py
CHANGED
|
@@ -164,6 +164,32 @@ class DetailEntity(JmBaseEntity, IndexedEntity):
|
|
|
164
164
|
|
|
165
165
|
return getattr(detail, ref)
|
|
166
166
|
|
|
167
|
+
def get_properties_dict(self):
|
|
168
|
+
import inspect
|
|
169
|
+
|
|
170
|
+
prefix = self.__class__.__name__[2]
|
|
171
|
+
result = {}
|
|
172
|
+
|
|
173
|
+
# field
|
|
174
|
+
for k, v in self.__dict__.items():
|
|
175
|
+
result[prefix + k] = v
|
|
176
|
+
|
|
177
|
+
# property
|
|
178
|
+
for cls in inspect.getmro(type(self)):
|
|
179
|
+
for name, attr in cls.__dict__.items():
|
|
180
|
+
k = prefix + name
|
|
181
|
+
if k not in result and isinstance(attr, property):
|
|
182
|
+
v = attr.__get__(self, cls)
|
|
183
|
+
result[k] = v
|
|
184
|
+
|
|
185
|
+
# advice
|
|
186
|
+
advice_dict = JmModuleConfig.AFIELD_ADVICE if self.is_album() else JmModuleConfig.PFIELD_ADVICE
|
|
187
|
+
for name, func in advice_dict.items():
|
|
188
|
+
k = prefix + name
|
|
189
|
+
result[k] = func(self)
|
|
190
|
+
|
|
191
|
+
return result
|
|
192
|
+
|
|
167
193
|
|
|
168
194
|
class JmImageDetail(JmBaseEntity, Downloadable):
|
|
169
195
|
|
jmcomic/jm_option.py
CHANGED
|
@@ -71,7 +71,7 @@ class DirRule:
|
|
|
71
71
|
]
|
|
72
72
|
|
|
73
73
|
Detail = Union[JmAlbumDetail, JmPhotoDetail, None]
|
|
74
|
-
RuleFunc = Callable
|
|
74
|
+
RuleFunc = Callable
|
|
75
75
|
RuleSolver = Tuple[str, RuleFunc, str]
|
|
76
76
|
RuleSolverList = List[RuleSolver]
|
|
77
77
|
|
|
@@ -154,6 +154,12 @@ class DirRule:
|
|
|
154
154
|
|
|
155
155
|
@classmethod
|
|
156
156
|
def get_rule_solver(cls, rule: str) -> Optional[RuleSolver]:
|
|
157
|
+
if '{' in rule:
|
|
158
|
+
def format_path(album, photo):
|
|
159
|
+
return fix_windir_name(rule.format(**album.get_properties_dict(), **photo.get_properties_dict())).strip()
|
|
160
|
+
|
|
161
|
+
return 'F', format_path, rule
|
|
162
|
+
|
|
157
163
|
# 检查dsl
|
|
158
164
|
if not rule.startswith(('A', 'P')):
|
|
159
165
|
return None
|
|
@@ -176,15 +182,17 @@ class DirRule:
|
|
|
176
182
|
|
|
177
183
|
def choose_detail(key):
|
|
178
184
|
if key == 'Bd':
|
|
179
|
-
return None
|
|
185
|
+
return None,
|
|
180
186
|
if key == 'A':
|
|
181
|
-
return album
|
|
187
|
+
return album,
|
|
182
188
|
if key == 'P':
|
|
183
|
-
return photo
|
|
189
|
+
return photo,
|
|
190
|
+
if key == 'F':
|
|
191
|
+
return album, photo
|
|
184
192
|
|
|
185
193
|
key, func, _ = rule_solver
|
|
186
194
|
detail = choose_detail(key)
|
|
187
|
-
return func(detail)
|
|
195
|
+
return func(*detail)
|
|
188
196
|
|
|
189
197
|
@classmethod
|
|
190
198
|
def apply_rule_directly(cls, album, photo, rule: str) -> str:
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
jmcomic/__init__.py,sha256=55xVXKjx01nDkNWmVG8GI3Ep6-8waNaTq9cl4Qosc1k,903
|
|
2
|
+
jmcomic/api.py,sha256=ZduhXDmh4lg1dkXHs7UTAaPpYNO7kcdPCDH5JJT9KSI,4253
|
|
3
|
+
jmcomic/cl.py,sha256=PBSh0JndNFZw3B7WJPj5Y8SeFdKzHE00jIwYo9An-K0,3475
|
|
4
|
+
jmcomic/jm_client_impl.py,sha256=m8-e_TA3vIXdUkXJcuJ0uzek4GM48y4QvBRXrT6JqUc,39633
|
|
5
|
+
jmcomic/jm_client_interface.py,sha256=Bld80cYwBwIqcMSJK09g5q8U_UX3IWnQJxuRJQwmIOk,19082
|
|
6
|
+
jmcomic/jm_config.py,sha256=p7g2FQMVXBnejz1sSzM15YAtJ5f91fZZeNMqFeYum5I,16772
|
|
7
|
+
jmcomic/jm_downloader.py,sha256=6w9D7eoL2M85-ScH745-OZBvaC0uwGkHi6awTUzq-3E,11036
|
|
8
|
+
jmcomic/jm_entity.py,sha256=x-3yUvM74C_Gof20mJw2SmZq7sSSsGNg0Cp47oZ-dFg,19968
|
|
9
|
+
jmcomic/jm_exception.py,sha256=x3KGMLlQS2zi1GX7z5G58zJN2EwLkI4mAURkxZYjEvA,5055
|
|
10
|
+
jmcomic/jm_option.py,sha256=oiDR4ZDOlPBWfJ8zDhedApFMRFejlGRkFvF5L4WokFU,22211
|
|
11
|
+
jmcomic/jm_plugin.py,sha256=e2B_x2adghxn7f8eKAJivDWf8oLY9962Utt1-J70zBw,39902
|
|
12
|
+
jmcomic/jm_toolkit.py,sha256=_qAJKbcV9jaFHRGvGU4Na2ts5h7QPGJS4uRQ05KpQ88,29166
|
|
13
|
+
jmcomic-2.5.36.dist-info/licenses/LICENSE,sha256=kz4coTxZxuGxisK3W00tjK57Zh3RcMGq-EnbXrK7-xA,1064
|
|
14
|
+
jmcomic-2.5.36.dist-info/METADATA,sha256=k6MOXm6o5l27lbHelaDInUq5xoc2s-qOClHcbjt0-Tk,8161
|
|
15
|
+
jmcomic-2.5.36.dist-info/WHEEL,sha256=CmyFI0kx5cdEMTLiONQRbGQwjIoR1aIYB7eCAQ4KPJ0,91
|
|
16
|
+
jmcomic-2.5.36.dist-info/entry_points.txt,sha256=tRbQltaGSBjejI0c9jYt-4SXQMd5nSDHcMvHmuTy4ow,44
|
|
17
|
+
jmcomic-2.5.36.dist-info/top_level.txt,sha256=puvVMFYJqIbd6NOTMEvOyugMTT8woBfSQyxEBan3zY4,8
|
|
18
|
+
jmcomic-2.5.36.dist-info/RECORD,,
|
jmcomic-2.5.35.dist-info/RECORD
DELETED
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
jmcomic/__init__.py,sha256=5Qyc6r1XhjnQJsvyr2bhgqDvxd0lAr-6U4SeOzAlyAs,903
|
|
2
|
-
jmcomic/api.py,sha256=ZduhXDmh4lg1dkXHs7UTAaPpYNO7kcdPCDH5JJT9KSI,4253
|
|
3
|
-
jmcomic/cl.py,sha256=PBSh0JndNFZw3B7WJPj5Y8SeFdKzHE00jIwYo9An-K0,3475
|
|
4
|
-
jmcomic/jm_client_impl.py,sha256=m8-e_TA3vIXdUkXJcuJ0uzek4GM48y4QvBRXrT6JqUc,39633
|
|
5
|
-
jmcomic/jm_client_interface.py,sha256=LqJqa-4G7-F98_U9R9QTxFND_9t30B-BIQZa_o0p-KY,19005
|
|
6
|
-
jmcomic/jm_config.py,sha256=rOeKMqZ3HwWk3I-vA0YTCIimBcfdZpvXj7Itg0OKfCo,16767
|
|
7
|
-
jmcomic/jm_downloader.py,sha256=6w9D7eoL2M85-ScH745-OZBvaC0uwGkHi6awTUzq-3E,11036
|
|
8
|
-
jmcomic/jm_entity.py,sha256=vz_nZbEtRLBRrVz97533Twf9mxB1AlwauunCvdhFa7w,19190
|
|
9
|
-
jmcomic/jm_exception.py,sha256=x3KGMLlQS2zi1GX7z5G58zJN2EwLkI4mAURkxZYjEvA,5055
|
|
10
|
-
jmcomic/jm_option.py,sha256=2tINFsDcncCJbd6FRtCMAidhro6faB8TBLoaSxP3uQ8,21926
|
|
11
|
-
jmcomic/jm_plugin.py,sha256=e2B_x2adghxn7f8eKAJivDWf8oLY9962Utt1-J70zBw,39902
|
|
12
|
-
jmcomic/jm_toolkit.py,sha256=_qAJKbcV9jaFHRGvGU4Na2ts5h7QPGJS4uRQ05KpQ88,29166
|
|
13
|
-
jmcomic-2.5.35.dist-info/licenses/LICENSE,sha256=kz4coTxZxuGxisK3W00tjK57Zh3RcMGq-EnbXrK7-xA,1064
|
|
14
|
-
jmcomic-2.5.35.dist-info/METADATA,sha256=urkZ5ZX0yGsUOhLpc8yY-LGwwMZPAu9rcQTN8cAwbtc,8161
|
|
15
|
-
jmcomic-2.5.35.dist-info/WHEEL,sha256=CmyFI0kx5cdEMTLiONQRbGQwjIoR1aIYB7eCAQ4KPJ0,91
|
|
16
|
-
jmcomic-2.5.35.dist-info/entry_points.txt,sha256=tRbQltaGSBjejI0c9jYt-4SXQMd5nSDHcMvHmuTy4ow,44
|
|
17
|
-
jmcomic-2.5.35.dist-info/top_level.txt,sha256=puvVMFYJqIbd6NOTMEvOyugMTT8woBfSQyxEBan3zY4,8
|
|
18
|
-
jmcomic-2.5.35.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|