1010
1111import requests
1212
13+
1314class Series (BaseModel ):
1415 id : str
1516 name : str
@@ -42,16 +43,18 @@ def extract_series_data() -> pl.DataFrame:
4243 print (e )
4344 raise
4445
45- filtered = [s .model_dump (mode = "json" ) for s in validated if s .id in ["swsh" , "sv" , "me" ]]
46+ filtered = [
47+ s .model_dump (mode = "json" ) for s in validated if s .id in ["swsh" , "sv" , "me" ]
48+ ]
4649 return pl .DataFrame (filtered )
4750
4851
4952@dg .asset (kinds = {"API" , "Polars" , "Pydantic" }, name = "extract_set_data" )
5053def extract_set_data () -> pl .DataFrame :
5154 url_list = [
52- "https://api.tcgdex.net/v2/en/series/swsh" ,
53- "https://api.tcgdex.net/v2/en/series/sv" ,
5455 "https://api.tcgdex.net/v2/en/series/me" ,
56+ "https://api.tcgdex.net/v2/en/series/sv" ,
57+ "https://api.tcgdex.net/v2/en/series/swsh" ,
5558 ]
5659
5760 flat : list [dict ] = []
@@ -68,17 +71,14 @@ def extract_set_data() -> pl.DataFrame:
6871 "official_card_count" : s .get ("cardCount" , {}).get ("official" ),
6972 "total_card_count" : s .get ("cardCount" , {}).get ("total" ),
7073 "logo" : s .get ("logo" ),
71- "symbol" : s .get ("symbol" )
74+ "symbol" : s .get ("symbol" ),
7275 }
7376 flat .append (entry )
7477
7578 # Pydantic validation
7679 try :
7780 validated : list [Set ] = [Set (** item ) for item in flat ]
78- print (
79- colored (" ✓" , "green" ),
80- "Pydantic validation passed for all set entries."
81- )
81+ print (colored (" ✓" , "green" ), "Pydantic validation passed for all set entries." )
8282 except ValidationError as e :
8383 print (colored (" ✖" , "red" ), "Pydantic validation failed." )
8484 print (e )
@@ -89,9 +89,7 @@ def extract_set_data() -> pl.DataFrame:
8989
9090@dg .asset (kinds = {"API" }, name = "extract_card_url_from_set_data" )
9191def extract_card_url_from_set () -> list :
92- urls = [
93- "https://api.tcgdex.net/v2/en/sets/me02"
94- ]
92+ urls = ["https://api.tcgdex.net/v2/en/sets/me02" ]
9593
9694 all_card_urls = []
9795
@@ -102,7 +100,11 @@ def extract_card_url_from_set() -> list:
102100
103101 data = r .json ()["cards" ]
104102
105- set_card_urls = [f"https://api.tcgdex.net/v2/en/cards/{ card ['id' ]} " for card in data ]
103+ set_card_urls = [
104+ f"https://api.tcgdex.net/v2/en/cards/{ card ['id' ]} "
105+ for card in data
106+ if "-TG" not in card ["id" ]
107+ ]
106108 all_card_urls .extend (set_card_urls )
107109
108110 time .sleep (0.1 )
@@ -113,9 +115,9 @@ def extract_card_url_from_set() -> list:
113115 return all_card_urls
114116
115117
116- @dg .asset (deps = [ extract_card_url_from_set ], kinds = {"API" }, name = "extract_card_info" )
117- def extract_card_info () -> list :
118- card_url_list = extract_card_url_from_set ()
118+ @dg .asset (kinds = {"API" }, name = "extract_card_info" )
119+ def extract_card_info (extract_card_url_from_set_data : list ) -> list :
120+ card_url_list = extract_card_url_from_set_data
119121 cards_list = []
120122
121123 for url in card_url_list :
@@ -124,26 +126,37 @@ def extract_card_info() -> list:
124126 r .raise_for_status ()
125127 data = r .json ()
126128 cards_list .append (data )
127- # print(f"Retrieved card: {data['id']} - {data.get('name', 'Unknown')}")
129+ print (f"Retrieved card: { data ['id' ]} - { data .get ('name' , 'Unknown' )} " )
128130 time .sleep (0.1 )
129131 except requests .RequestException as e :
130132 print (f"Failed to fetch { url } : { e } " )
131133
132134 return cards_list
133135
134136
135- @dg .asset (deps = [ extract_card_info ], kinds = {"Polars" }, name = "create_card_dataframe" )
136- def create_card_dataframe () -> pl .DataFrame :
137- cards_list = extract_card_info ()
137+ @dg .asset (kinds = {"Polars" }, name = "create_card_dataframe" )
138+ def create_card_dataframe (extract_card_info : list ) -> pl .DataFrame :
139+ cards_list = extract_card_info
138140
139141 all_flat_cards = []
140142
141143 for card in cards_list :
142144 flat = {}
143145
144146 # Copy top-level scalar values
145- scalar_keys = ['category' , 'hp' , 'id' , 'illustrator' , 'image' , 'localId' ,
146- 'name' , 'rarity' , 'regulationMark' , 'retreat' , 'stage' ]
147+ scalar_keys = [
148+ "category" ,
149+ "hp" ,
150+ "id" ,
151+ "illustrator" ,
152+ "image" ,
153+ "localId" ,
154+ "name" ,
155+ "rarity" ,
156+ "regulationMark" ,
157+ "retreat" ,
158+ "stage" ,
159+ ]
147160 for key in scalar_keys :
148161 flat [key ] = card .get (key )
149162
@@ -165,7 +178,7 @@ def create_card_dataframe() -> pl.DataFrame:
165178
166179 attacks = card .get ("attacks" , [])
167180 for i , atk in enumerate (attacks ):
168- prefix = f"attack_{ i + 1 } "
181+ prefix = f"attack_{ i + 1 } "
169182 flat [f"{ prefix } _name" ] = atk .get ("name" )
170183 flat [f"{ prefix } _damage" ] = atk .get ("damage" )
171184 flat [f"{ prefix } _effect" ] = atk .get ("effect" )
0 commit comments