88 "Format" ,
99 "Genre" ,
1010 "GenreResource" ,
11+ "InformationList" ,
1112 "InformationSource" ,
1213 "MetronInfo" ,
1314 "Price" ,
1617 "RoleResource" ,
1718 "Series" ,
1819 "Source" ,
19- "Sources" ,
2020 "Universe" ,
2121]
2222
2323from datetime import date
2424from enum import Enum
2525from pathlib import Path
26- from typing import Any , ClassVar
26+ from typing import Any , ClassVar , Generic , TypeVar
2727
2828import xmltodict
2929from PIL import Image
3030from pydantic import Field , HttpUrl , PositiveInt
3131
3232from perdoo .models ._base import InfoModel , PascalModel
3333
34+ T = TypeVar ("T" )
35+
3436
3537class InformationSource (Enum ):
3638 COMIC_VINE = "Comic Vine"
@@ -73,9 +75,9 @@ def __hash__(self: Source) -> int:
7375 return hash ((type (self ), self .source ))
7476
7577
76- class Sources (PascalModel ):
77- primary : Source
78- alternative : list [Source ] = Field (default_factory = list )
78+ class InformationList (PascalModel , Generic [ T ] ):
79+ primary : T
80+ alternative : list [T ] = Field (default_factory = list )
7981
8082
8183class Resource (PascalModel ):
@@ -448,7 +450,7 @@ def from_path(file: Path, index: int, is_final_page: bool, page: Page | None) ->
448450
449451
450452class MetronInfo (PascalModel , InfoModel ):
451- id : Sources | None = Field (alias = "ID" , default = None )
453+ id : InformationList [ Source ] | None = Field (alias = "ID" , default = None )
452454 publisher : Resource
453455 series : Series
454456 collection_title : str | None = None
@@ -470,7 +472,7 @@ class MetronInfo(PascalModel, InfoModel):
470472 gtin : GTIN | None = Field (alias = "GTIN" , default = None )
471473 age_rating : AgeRating = Field (default = AgeRating .UNKNOWN )
472474 reprints : list [Resource ] = Field (default_factory = list )
473- url : HttpUrl | None = Field (alias = "URL" , default = None )
475+ url : InformationList [ HttpUrl ] | None = Field (alias = "URL" , default = None )
474476 credits : list [Credit ] = Field (default_factory = list )
475477 pages : list [Page ] = Field (default_factory = list )
476478
0 commit comments