Skip to content

Commit bbfcda7

Browse files
adding sun & moon series (#251)
1 parent f57ce87 commit bbfcda7

6 files changed

Lines changed: 40 additions & 6 deletions

File tree

card_data/pipelines/defs/extract/tcgcsv/extract_pricing.py

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,22 @@
4848
"swsh3": "2675",
4949
"swsh2": "2626",
5050
"swsh1": "2585",
51+
# Sun & Moon
52+
"sm12": "2534",
53+
"sm115": "2480",
54+
"sm11": "2464",
55+
"sm10": "2420",
56+
"sm9": "2377",
57+
"sm8": "2328",
58+
"sm7.5": "2295",
59+
"sm7": "2278",
60+
"sm6": "2209",
61+
"sm5": "2178",
62+
"sm4": "2071",
63+
"sm3.5": "2054",
64+
"sm3": "1957",
65+
"sm2": "1919",
66+
"sm1": "1863"
5167
}
5268

5369

@@ -74,6 +90,18 @@ def get_card_number(card: dict) -> Optional[str]:
7490
return None
7591

7692

93+
def normalize_card_number(card_number: str) -> str:
94+
"""Zero-pad numeric parts of a card number to 3 digits.
95+
e.g. '1/149' -> '001/149', '10/149' -> '010/149'.
96+
"""
97+
if "/" in card_number:
98+
left, right = card_number.split("/", 1)
99+
left = left.zfill(3) if left.isdigit() else left
100+
right = right.zfill(3) if right.isdigit() else right
101+
return f"{left}/{right}"
102+
return card_number
103+
104+
77105
def extract_card_name(full_name: str) -> str:
78106
"""Extract clean card name, removing variant information after dash and parenthetical suffixes"""
79107

@@ -151,6 +179,9 @@ def pull_product_information(set_number: str) -> pl.DataFrame:
151179
if card_number is None:
152180
continue
153181

182+
if set_number.startswith("sm"):
183+
card_number = normalize_card_number(card_number)
184+
154185
card_info = {
155186
"product_id": card["productId"],
156187
"name": extract_card_name(card_name),

card_data/pipelines/defs/extract/tcgdex/extract_series.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,6 @@ def extract_series_data() -> pl.DataFrame:
3131
raise
3232

3333
filtered = [
34-
s.model_dump(mode="json") for s in validated if s.id in ["swsh", "sv", "me"]
34+
s.model_dump(mode="json") for s in validated if s.id in ["me", "sv", "swsh", "sm"]
3535
]
3636
return pl.DataFrame(filtered)

card_data/pipelines/defs/extract/tcgdex/extract_sets.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ def extract_sets_data() -> pl.DataFrame:
2424
"https://api.tcgdex.net/v2/en/series/me",
2525
"https://api.tcgdex.net/v2/en/series/sv",
2626
"https://api.tcgdex.net/v2/en/series/swsh",
27+
"https://api.tcgdex.net/v2/en/series/sm",
2728
]
2829

2930
flat: list[dict] = []

card_data/pipelines/poke_cli_dbt/models/sets.sql

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,4 @@
55

66
SELECT *
77
FROM {{ source('staging', 'sets') }}
8-
WHERE set_id NOT IN ('fut2020', 'mep', 'svp', 'swshp')
8+
WHERE set_id NOT IN ('fut2020', 'mep', 'svp', 'swshp', 'cel25', 'sma', 'smp', 'det1')

cmd/card/serieslist.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ var seriesIDMap = map[string]string{
99
"Mega Evolution": "me",
1010
"Scarlet & Violet": "sv",
1111
"Sword & Shield": "swsh",
12+
"Sun & Moon": "sm",
1213
}
1314

1415
type SeriesModel struct {
@@ -64,6 +65,7 @@ func SeriesList() SeriesModel {
6465
item("Mega Evolution"),
6566
item("Scarlet & Violet"),
6667
item("Sword & Shield"),
68+
item("Sun & Moon"),
6769
}
6870

6971
const listWidth = 20

cmd/card/serieslist_test.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -152,12 +152,12 @@ func TestSeriesList(t *testing.T) {
152152
t.Error("SeriesList() should create a list with items")
153153
}
154154

155-
if len(items) != 3 {
156-
t.Errorf("Expected 3 items, got %d", len(items))
155+
if len(items) != 4 {
156+
t.Errorf("Expected 4 items, got %d", len(items))
157157
}
158158

159-
// Verify all three series are present
160-
expectedSeries := []string{"Mega Evolution", "Scarlet & Violet", "Sword & Shield"}
159+
// Verify all four series are present
160+
expectedSeries := []string{"Mega Evolution", "Scarlet & Violet", "Sword & Shield", "Sun & Moon"}
161161
for i, expected := range expectedSeries {
162162
itemStr := string(items[i].(item))
163163
if itemStr != expected {

0 commit comments

Comments
 (0)