@@ -21,7 +21,7 @@ def save_to_file(self, filepath):
2121 PackerUtil .pack (self , filepath )
2222
2323
24- class DetailEntity (JmBaseEntity , IterableEntity ):
24+ class DetailEntity (JmBaseEntity ):
2525
2626 @property
2727 def id (self ) -> str :
@@ -31,19 +31,42 @@ def id(self) -> str:
3131 def name (self ) -> str :
3232 return getattr (self , 'title' )
3333
34- @classmethod
35- def __jm_type__ (cls ):
36- # "JmAlbumDetail" -> "album" (本子)
37- # "JmPhotoDetail" -> "photo" (章节)
38- cls_name = cls .__name__
39- return cls_name [cls_name .index ("m" ) + 1 : cls_name .rfind ("Detail" )].lower ()
34+ # help for typing
35+ JMPI = Union ['JmPhotoDetail' , 'JmImageDetail' ]
36+
37+ def getindex (self , index : int ) -> JMPI :
38+ raise NotImplementedError
4039
41- def __getitem__ (self , item ) -> Union [ 'JmAlbumDetail' , 'JmPhotoDetail' ] :
40+ def __len__ (self ) :
4241 raise NotImplementedError
4342
43+ def __iter__ (self ) -> Generator [JMPI , Any , None ]:
44+ for index in range (len (self )):
45+ yield self .getindex (index )
46+
4447 def __str__ (self ):
4548 return f'{ self .__class__ .__name__ } ({ self .id } -{ self .name } )'
4649
50+ def __getitem__ (self , item ) -> Union [JMPI , List [JMPI ]]:
51+ if isinstance (item , slice ):
52+ start = item .start or 0
53+ stop = item .stop or len (self )
54+ step = item .step or 1
55+ return [self .getindex (index ) for index in range (start , stop , step )]
56+
57+ elif isinstance (item , int ):
58+ return self .getindex (item )
59+
60+ else :
61+ raise TypeError (f"Invalid item type for { self .__class__ } " )
62+
63+ @classmethod
64+ def __alias__ (cls ):
65+ # "JmAlbumDetail" -> "album" (本子)
66+ # "JmPhotoDetail" -> "photo" (章节)
67+ cls_name = cls .__name__
68+ return cls_name [cls_name .index ("m" ) + 1 : cls_name .rfind ("Detail" )].lower ()
69+
4770
4871class JmImageDetail (JmBaseEntity ):
4972
@@ -254,13 +277,16 @@ def get_data_original_query_params(self, data_original_0: StrNone) -> str:
254277
255278 return data_original_0 [index + 1 :]
256279
257- def __getitem__ (self , item ) -> JmImageDetail :
258- return self .create_image_detail (item )
259-
260280 @property
261281 def id (self ):
262282 return self .photo_id
263283
284+ def getindex (self , index ) -> JmImageDetail :
285+ return self .create_image_detail (index )
286+
287+ def __getitem__ (self , item ) -> Union [JmImageDetail , List [JmImageDetail ]]:
288+ return super ().__getitem__ (item )
289+
264290 def __len__ (self ):
265291 return len (self .page_arr )
266292
@@ -337,12 +363,6 @@ def keywords(self) -> List[str]:
337363 def id (self ):
338364 return self .album_id
339365
340- def __len__ (self ):
341- return len (self .episode_list )
342-
343- def __getitem__ (self , item ) -> JmPhotoDetail :
344- return self .create_photo_detail (item )[0 ]
345-
346366 @staticmethod
347367 def distinct_episode (episode_list ):
348368 ret = []
@@ -360,6 +380,15 @@ def not_exist(episode):
360380
361381 return ret
362382
383+ def getindex (self , item ) -> JmPhotoDetail :
384+ return self .create_photo_detail (item )[0 ]
385+
386+ def __getitem__ (self , item ) -> Union [JmPhotoDetail , List [JmPhotoDetail ]]:
387+ return super ().__getitem__ (item )
388+
389+ def __len__ (self ):
390+ return len (self .episode_list )
391+
363392 def __iter__ (self ) -> Generator [JmPhotoDetail , Any , None ]:
364393 return super ().__iter__ ()
365394
0 commit comments