mtg-ssm 2.6.9__tar.gz → 2.6.9.dev2__tar.gz
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.
- {mtg_ssm-2.6.9 → mtg_ssm-2.6.9.dev2}/PKG-INFO +1 -6
- {mtg_ssm-2.6.9 → mtg_ssm-2.6.9.dev2}/README.rst +0 -5
- {mtg_ssm-2.6.9 → mtg_ssm-2.6.9.dev2}/mtg_ssm/_version.py +2 -2
- {mtg_ssm-2.6.9 → mtg_ssm-2.6.9.dev2}/mtg_ssm/containers/indexes.py +6 -4
- mtg_ssm-2.6.9.dev2/mtg_ssm/mtg/util.py +34 -0
- {mtg_ssm-2.6.9 → mtg_ssm-2.6.9.dev2}/mtg_ssm.egg-info/PKG-INFO +1 -6
- {mtg_ssm-2.6.9 → mtg_ssm-2.6.9.dev2}/tests/containers/test_indexes.py +0 -9
- {mtg_ssm-2.6.9 → mtg_ssm-2.6.9.dev2}/tests/data/bulk_data.json +2 -2
- {mtg_ssm-2.6.9 → mtg_ssm-2.6.9.dev2}/tests/data/cards.json +561 -1177
- {mtg_ssm-2.6.9 → mtg_ssm-2.6.9.dev2}/tests/data/sets.json +42 -59
- {mtg_ssm-2.6.9 → mtg_ssm-2.6.9.dev2}/tests/data/sets1.json +21 -21
- {mtg_ssm-2.6.9 → mtg_ssm-2.6.9.dev2}/tests/data/sets2.json +21 -38
- {mtg_ssm-2.6.9 → mtg_ssm-2.6.9.dev2}/tests/gen_testdata.py +4 -5
- {mtg_ssm-2.6.9 → mtg_ssm-2.6.9.dev2}/tests/mtg/test_util.py +21 -15
- {mtg_ssm-2.6.9 → mtg_ssm-2.6.9.dev2}/tests/scryfall/test_fetcher.py +1 -1
- {mtg_ssm-2.6.9 → mtg_ssm-2.6.9.dev2}/tests/serialization/__snapshots__/test_xlsx.ambr +42 -42
- {mtg_ssm-2.6.9 → mtg_ssm-2.6.9.dev2}/tests/serialization/test_csv.py +2 -2
- mtg_ssm-2.6.9/mtg_ssm/mtg/util.py +0 -26
- {mtg_ssm-2.6.9 → mtg_ssm-2.6.9.dev2}/.editorconfig +0 -0
- {mtg_ssm-2.6.9 → mtg_ssm-2.6.9.dev2}/.github/dependabot.yml +0 -0
- {mtg_ssm-2.6.9 → mtg_ssm-2.6.9.dev2}/.github/workflows/integration.yml +0 -0
- {mtg_ssm-2.6.9 → mtg_ssm-2.6.9.dev2}/.github/workflows/pre-commit.yml +0 -0
- {mtg_ssm-2.6.9 → mtg_ssm-2.6.9.dev2}/.github/workflows/publish.yml +0 -0
- {mtg_ssm-2.6.9 → mtg_ssm-2.6.9.dev2}/.github/workflows/run-tests.yml +0 -0
- {mtg_ssm-2.6.9 → mtg_ssm-2.6.9.dev2}/.gitignore +0 -0
- {mtg_ssm-2.6.9 → mtg_ssm-2.6.9.dev2}/.pre-commit-config.yaml +0 -0
- {mtg_ssm-2.6.9 → mtg_ssm-2.6.9.dev2}/LICENSE.txt +0 -0
- {mtg_ssm-2.6.9 → mtg_ssm-2.6.9.dev2}/TODO.md +0 -0
- {mtg_ssm-2.6.9 → mtg_ssm-2.6.9.dev2}/mtg_ssm/__init__.py +0 -0
- {mtg_ssm-2.6.9 → mtg_ssm-2.6.9.dev2}/mtg_ssm/containers/__init__.py +0 -0
- {mtg_ssm-2.6.9 → mtg_ssm-2.6.9.dev2}/mtg_ssm/containers/bundles.py +0 -0
- {mtg_ssm-2.6.9 → mtg_ssm-2.6.9.dev2}/mtg_ssm/containers/collection.py +0 -0
- {mtg_ssm-2.6.9 → mtg_ssm-2.6.9.dev2}/mtg_ssm/containers/counts.py +0 -0
- {mtg_ssm-2.6.9 → mtg_ssm-2.6.9.dev2}/mtg_ssm/containers/legacy.py +0 -0
- {mtg_ssm-2.6.9 → mtg_ssm-2.6.9.dev2}/mtg_ssm/mtg/__init__.py +0 -0
- {mtg_ssm-2.6.9 → mtg_ssm-2.6.9.dev2}/mtg_ssm/py.typed +0 -0
- {mtg_ssm-2.6.9 → mtg_ssm-2.6.9.dev2}/mtg_ssm/scryfall/__init__.py +0 -0
- {mtg_ssm-2.6.9 → mtg_ssm-2.6.9.dev2}/mtg_ssm/scryfall/fetcher.py +0 -0
- {mtg_ssm-2.6.9 → mtg_ssm-2.6.9.dev2}/mtg_ssm/scryfall/models.py +0 -0
- {mtg_ssm-2.6.9 → mtg_ssm-2.6.9.dev2}/mtg_ssm/serialization/__init__.py +0 -0
- {mtg_ssm-2.6.9 → mtg_ssm-2.6.9.dev2}/mtg_ssm/serialization/csv.py +0 -0
- {mtg_ssm-2.6.9 → mtg_ssm-2.6.9.dev2}/mtg_ssm/serialization/interface.py +0 -0
- {mtg_ssm-2.6.9 → mtg_ssm-2.6.9.dev2}/mtg_ssm/serialization/xlsx.py +0 -0
- {mtg_ssm-2.6.9 → mtg_ssm-2.6.9.dev2}/mtg_ssm/ssm.py +0 -0
- {mtg_ssm-2.6.9 → mtg_ssm-2.6.9.dev2}/mtg_ssm.egg-info/SOURCES.txt +0 -0
- {mtg_ssm-2.6.9 → mtg_ssm-2.6.9.dev2}/mtg_ssm.egg-info/dependency_links.txt +0 -0
- {mtg_ssm-2.6.9 → mtg_ssm-2.6.9.dev2}/mtg_ssm.egg-info/entry_points.txt +0 -0
- {mtg_ssm-2.6.9 → mtg_ssm-2.6.9.dev2}/mtg_ssm.egg-info/requires.txt +0 -0
- {mtg_ssm-2.6.9 → mtg_ssm-2.6.9.dev2}/mtg_ssm.egg-info/top_level.txt +0 -0
- {mtg_ssm-2.6.9 → mtg_ssm-2.6.9.dev2}/pyproject.toml +0 -0
- {mtg_ssm-2.6.9 → mtg_ssm-2.6.9.dev2}/setup.cfg +0 -0
- {mtg_ssm-2.6.9 → mtg_ssm-2.6.9.dev2}/tests/__init__.py +0 -0
- {mtg_ssm-2.6.9 → mtg_ssm-2.6.9.dev2}/tests/conftest.py +0 -0
- {mtg_ssm-2.6.9 → mtg_ssm-2.6.9.dev2}/tests/containers/__init__.py +0 -0
- {mtg_ssm-2.6.9 → mtg_ssm-2.6.9.dev2}/tests/containers/test_bundles.py +0 -0
- {mtg_ssm-2.6.9 → mtg_ssm-2.6.9.dev2}/tests/containers/test_counts.py +0 -0
- {mtg_ssm-2.6.9 → mtg_ssm-2.6.9.dev2}/tests/containers/test_legacy.py +0 -0
- {mtg_ssm-2.6.9 → mtg_ssm-2.6.9.dev2}/tests/data/LICENSE.txt +0 -0
- {mtg_ssm-2.6.9 → mtg_ssm-2.6.9.dev2}/tests/data/migrations.json +0 -0
- {mtg_ssm-2.6.9 → mtg_ssm-2.6.9.dev2}/tests/mtg/__init__.py +0 -0
- {mtg_ssm-2.6.9 → mtg_ssm-2.6.9.dev2}/tests/scryfall/__init__.py +0 -0
- {mtg_ssm-2.6.9 → mtg_ssm-2.6.9.dev2}/tests/serialization/__init__.py +0 -0
- {mtg_ssm-2.6.9 → mtg_ssm-2.6.9.dev2}/tests/serialization/__snapshots__/test_csv.ambr +0 -0
- {mtg_ssm-2.6.9 → mtg_ssm-2.6.9.dev2}/tests/serialization/test_interface.py +0 -0
- {mtg_ssm-2.6.9 → mtg_ssm-2.6.9.dev2}/tests/serialization/test_xlsx.py +0 -0
- {mtg_ssm-2.6.9 → mtg_ssm-2.6.9.dev2}/tests/test_ssm.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: mtg_ssm
|
|
3
|
-
Version: 2.6.9
|
|
3
|
+
Version: 2.6.9.dev2
|
|
4
4
|
Summary: A tool to manage Magic: the Gathering collection spreadsheets
|
|
5
5
|
Author-email: George Leslie-Waksman <waksman@gmail.com>
|
|
6
6
|
License: MIT
|
|
@@ -240,11 +240,6 @@ Development
|
|
|
240
240
|
|
|
241
241
|
- ...
|
|
242
242
|
|
|
243
|
-
2.6.9
|
|
244
|
-
-----
|
|
245
|
-
|
|
246
|
-
- Fix sorting of cards with collector number prefixes (primarily PLST).
|
|
247
|
-
|
|
248
243
|
2.6.1
|
|
249
244
|
-----
|
|
250
245
|
|
|
@@ -12,5 +12,5 @@ __version__: str
|
|
|
12
12
|
__version_tuple__: VERSION_TUPLE
|
|
13
13
|
version_tuple: VERSION_TUPLE
|
|
14
14
|
|
|
15
|
-
__version__ = version = '2.6.9'
|
|
16
|
-
__version_tuple__ = version_tuple = (2, 6, 9)
|
|
15
|
+
__version__ = version = '2.6.9.dev2'
|
|
16
|
+
__version_tuple__ = version_tuple = (2, 6, 9, 'dev2')
|
|
@@ -10,14 +10,16 @@ from mtg_ssm.mtg import util
|
|
|
10
10
|
from mtg_ssm.scryfall.models import ScryCard, ScryMigrationStrategy, ScrySet
|
|
11
11
|
|
|
12
12
|
|
|
13
|
-
def name_card_sort_key(card: ScryCard) -> Tuple[str,
|
|
13
|
+
def name_card_sort_key(card: ScryCard) -> Tuple[str, int, str]:
|
|
14
14
|
"""Key function for sorting cards in a by-name list."""
|
|
15
|
-
|
|
15
|
+
card_num, card_var = util.collector_int_var(card)
|
|
16
|
+
return (card.set, card_num or 0, card_var or "") # TODO: sort by set release date
|
|
16
17
|
|
|
17
18
|
|
|
18
|
-
def set_card_sort_key(card: ScryCard) -> Tuple[
|
|
19
|
+
def set_card_sort_key(card: ScryCard) -> Tuple[int, str]:
|
|
19
20
|
"""Key function for sorting cards in a by-set list."""
|
|
20
|
-
|
|
21
|
+
card_num, card_var = util.collector_int_var(card)
|
|
22
|
+
return (card_num or 0, card_var or "")
|
|
21
23
|
|
|
22
24
|
|
|
23
25
|
def build_snnmas(
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"""Utility functions for working with card data."""
|
|
2
|
+
|
|
3
|
+
import functools
|
|
4
|
+
import string
|
|
5
|
+
from typing import Optional, Tuple
|
|
6
|
+
|
|
7
|
+
from mtg_ssm.scryfall.models import ScryCard
|
|
8
|
+
|
|
9
|
+
STRICT_BASICS = frozenset({"Plains", "Island", "Swamp", "Mountain", "Forest"})
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
@functools.lru_cache(maxsize=None)
|
|
13
|
+
def dig_str(collector_number: str) -> Tuple[Optional[int], Optional[str]]:
|
|
14
|
+
"""Split a collector number into integer portion and non-digit portion."""
|
|
15
|
+
digpart = []
|
|
16
|
+
strpart = []
|
|
17
|
+
for char in collector_number:
|
|
18
|
+
if char in string.digits:
|
|
19
|
+
digpart.append(char)
|
|
20
|
+
else:
|
|
21
|
+
strpart.append(char)
|
|
22
|
+
if not digpart:
|
|
23
|
+
return (None, "".join(strpart))
|
|
24
|
+
return (int("".join(digpart)), "".join(strpart) or None)
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
def collector_int_var(card: ScryCard) -> Tuple[Optional[int], Optional[str]]:
|
|
28
|
+
"""Get the integer and variant portions of a card's collector number."""
|
|
29
|
+
return dig_str(card.collector_number)
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
def is_strict_basic(card_name: str) -> bool:
|
|
33
|
+
"""Is the card on of the five basic lands (not Snow or Wastes)."""
|
|
34
|
+
return card_name in STRICT_BASICS
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: mtg_ssm
|
|
3
|
-
Version: 2.6.9
|
|
3
|
+
Version: 2.6.9.dev2
|
|
4
4
|
Summary: A tool to manage Magic: the Gathering collection spreadsheets
|
|
5
5
|
Author-email: George Leslie-Waksman <waksman@gmail.com>
|
|
6
6
|
License: MIT
|
|
@@ -240,11 +240,6 @@ Development
|
|
|
240
240
|
|
|
241
241
|
- ...
|
|
242
242
|
|
|
243
|
-
2.6.9
|
|
244
|
-
-----
|
|
245
|
-
|
|
246
|
-
- Fix sorting of cards with collector number prefixes (primarily PLST).
|
|
247
|
-
|
|
248
243
|
2.6.1
|
|
249
244
|
-----
|
|
250
245
|
|
|
@@ -67,15 +67,6 @@ def test_setcode_to_cards(scryfall_data: ScryfallDataSet) -> None:
|
|
|
67
67
|
"74d",
|
|
68
68
|
]
|
|
69
69
|
|
|
70
|
-
# The List Sorting
|
|
71
|
-
assert [(c.collector_number, c.name) for c in index.setcode_to_cards["plst"]] == [
|
|
72
|
-
("10E-20", "High Ground"),
|
|
73
|
-
("10E-182", "Terror"),
|
|
74
|
-
("AKH-2", "Anointed Procession"),
|
|
75
|
-
("AKH-3", "Anointer Priest"),
|
|
76
|
-
("ARB-1", "Ardent Plea"),
|
|
77
|
-
]
|
|
78
|
-
|
|
79
70
|
|
|
80
71
|
def test_id_to_setindex(scryfall_data: ScryfallDataSet) -> None:
|
|
81
72
|
index = ScryfallDataIndex()
|
|
@@ -8,8 +8,8 @@
|
|
|
8
8
|
"type": "default_cards",
|
|
9
9
|
"name": "Default Cards",
|
|
10
10
|
"description": "A JSON file containing every card object on Scryfall in English or the printed language if the card is only available in one language.",
|
|
11
|
-
"download_uri": "https://data.scryfall.io/default-cards/default-cards-
|
|
12
|
-
"updated_at": "2024-
|
|
11
|
+
"download_uri": "https://data.scryfall.io/default-cards/default-cards-20240510210636.json",
|
|
12
|
+
"updated_at": "2024-05-10T21:06:36.150000Z",
|
|
13
13
|
"content_type": "application/json",
|
|
14
14
|
"content_encoding": "gzip"
|
|
15
15
|
}
|