spells-mtg 0.10.8__py3-none-any.whl → 0.10.9__py3-none-any.whl

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.

Potentially problematic release.


This version of spells-mtg might be problematic. Click here for more details.

spells/cache.py CHANGED
@@ -10,10 +10,17 @@ Caches are cleared per-set when new files are downloaded.
10
10
  from enum import StrEnum
11
11
  import os
12
12
  import sys
13
-
14
13
  import polars as pl
15
14
 
16
15
 
16
+ class Env(StrEnum):
17
+ PROD = "prod"
18
+ TEST = "test"
19
+
20
+
21
+ env = Env.PROD
22
+
23
+
17
24
  class EventType(StrEnum):
18
25
  PREMIER = "PremierDraft"
19
26
  TRADITIONAL = "TradDraft"
@@ -28,8 +35,30 @@ def spells_print(mode, content):
28
35
  print(f" 🪄 {mode} ✨ {content}")
29
36
 
30
37
 
38
+ def set_test_env():
39
+ global env
40
+ env = Env.TEST
41
+
42
+
43
+ def set_prod_env():
44
+ global env
45
+ env = Env.PROD
46
+
47
+
31
48
  def data_home() -> str:
32
49
  is_win = sys.platform == "win32"
50
+ global env
51
+
52
+ if env == Env.TEST:
53
+ return os.path.expanduser(
54
+ os.environ.get(
55
+ "SPELLS_TEST_HOME",
56
+ r"~\AppData\Local\SpellsTest"
57
+ if is_win
58
+ else "~/.local/share/spellstest/",
59
+ )
60
+ )
61
+
33
62
  return os.path.expanduser(
34
63
  os.environ.get(
35
64
  "SPELLS_DATA_HOME",
@@ -41,6 +70,46 @@ def data_home() -> str:
41
70
  )
42
71
 
43
72
 
73
+ def create_test_data(set_code: str, test_num_drafts: int = 100):
74
+ """
75
+ run from prod environment to write test data for `set_code` into
76
+ the test environment. Then set `SPELLS_DATA_HOME=test_data_home`
77
+ to run from the test environment
78
+ """
79
+
80
+ context_df = pl.scan_parquet(data_file_path(set_code, "context")).collect()
81
+ picks_per_pack = context_df["picks_per_pack"][0]
82
+
83
+ draft_df = (
84
+ pl.scan_parquet(data_file_path(set_code, "draft"))
85
+ .head(50 * (test_num_drafts + 2))
86
+ .collect()
87
+ )
88
+
89
+ sample_draft_ids = (
90
+ draft_df.group_by("draft_id")
91
+ .len()
92
+ .filter(pl.col("len") == picks_per_pack * 3)["draft_id"][0:test_num_drafts]
93
+ )
94
+
95
+ draft_sample_df = draft_df.filter(pl.col("draft_id").is_in(sample_draft_ids))
96
+ game_sample_df = (
97
+ pl.scan_parquet(data_file_path(set_code, "game"))
98
+ .filter(pl.col("draft_id").is_in(sample_draft_ids))
99
+ .collect()
100
+ )
101
+ card_df = pl.scan_parquet(data_file_path(set_code, "card")).collect()
102
+
103
+ set_test_env()
104
+ if not os.path.isdir(set_dir := external_set_path(set_code)):
105
+ os.makedirs(set_dir)
106
+ context_df.write_parquet(data_file_path(set_code, "context"))
107
+ draft_sample_df.write_parquet(data_file_path(set_code, "draft"))
108
+ game_sample_df.write_parquet(data_file_path(set_code, "game"))
109
+ card_df.write_parquet(data_file_path(set_code, "card"))
110
+ set_prod_env()
111
+
112
+
44
113
  def data_dir_path(cache_dir: DataDir) -> str:
45
114
  """
46
115
  Where 17Lands data is stored. MDU_DATA_DIR environment variable is used, if it exists,
spells/enums.py CHANGED
@@ -60,7 +60,7 @@ class ColName(StrEnum):
60
60
  PACK_NUM = "pack_num" # pack_number plus 1
61
61
  PICK_NUMBER = "pick_number"
62
62
  PICK_NUM = "pick_num" # pick_number plus 1
63
- PICK_INDEX = "pick_index" # 0 - 3 * picks_per_pack - 1
63
+ PICK_INDEX = "pick_index" # 0 - 3 * picks_per_pack - 1
64
64
  TAKEN_AT = "taken_at"
65
65
  NUM_TAKEN = "num_taken"
66
66
  NUM_DRAFTS = "num_drafts"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: spells-mtg
3
- Version: 0.10.8
3
+ Version: 0.10.9
4
4
  Summary: analaysis of 17Lands.com public datasets
5
5
  Author-Email: Joel Barnes <oelarnes@gmail.com>
6
6
  License: MIT
@@ -1,10 +1,10 @@
1
1
  spells/__init__.py,sha256=0pnh2NLn9FrNKncE9-tBsighp3e8YAsN--_ovUpgWGs,333
2
- spells/cache.py,sha256=7XDcltmlpagK2nkhuCCcAQVyrFMYkw9Acr7iVsLs3JU,3799
2
+ spells/cache.py,sha256=5eaxaahfppCOFVEukiPyzGhsE-qv4NPx4Lbu2R-T4pg,5696
3
3
  spells/cards.py,sha256=6stFPhJOzHqvQnkSv9cDeylRa_7L9Y8sOaowiZhzz6I,4174
4
4
  spells/columns.py,sha256=s_PYyg2QaRL6kLWFNKCBEfbMF0x7O7-Yd9SeG1ttYL4,18206
5
5
  spells/config.py,sha256=ixAe_raxKYvJBXyvNBJ-mm6ziRiAvtKLJihyFMnashs,224
6
6
  spells/draft_data.py,sha256=xoL82NTgTJWxZK1p-6LjxnYzkeYOr-Dc9-_T0m-WZ1Y,19946
7
- spells/enums.py,sha256=n-LEeYwp4ZMJuKJFKtyhDKJggspZkhReryf-IJsXO-I,4990
7
+ spells/enums.py,sha256=gbwfon6tQCoKDb-m4hSaHWi9slj82yqaH3qhYMVrsck,4991
8
8
  spells/extension.py,sha256=LBqGbJbe7iSRQkxJK7npkADCfzhdnIwwVvlmTn8xvjQ,8454
9
9
  spells/external.py,sha256=USqOtOVY7Mn39rdUPhmIeGm08s6TDnEV8-N3D14qJzE,11844
10
10
  spells/filter.py,sha256=J-YTOOAzOQpvIX29tviYL04RVoOUlfsbjBXoQBDCEdQ,3380
@@ -12,8 +12,8 @@ spells/log.py,sha256=3avmg65hru8K9npKLvPp1wWWxq-hoEYDUCbxqhPkKUw,2175
12
12
  spells/manifest.py,sha256=iOmhxIVMHu_Av3nd23zGjmUwLvZ2hAM0oc1ErPzZ_oE,8341
13
13
  spells/schema.py,sha256=DbMvV8PIThJTp0Xzp_XIorlW6JhE1ud1kWRGf5SQ4_c,6406
14
14
  spells/utils.py,sha256=IO3brrXVvZla0LRTEB5v6NgGqZb_rYA46XtKBURGMNk,1944
15
- spells_mtg-0.10.8.dist-info/METADATA,sha256=UbUMaRNAYLbiacfde7wXlT08AbaIgJB90OnPKf5YQME,47369
16
- spells_mtg-0.10.8.dist-info/WHEEL,sha256=thaaA2w1JzcGC48WYufAs8nrYZjJm8LqNfnXFOFyCC4,90
17
- spells_mtg-0.10.8.dist-info/entry_points.txt,sha256=a9Y1omdl9MdnKuIj3aOodgrp-zZII6OCdvqwgP6BFvI,63
18
- spells_mtg-0.10.8.dist-info/licenses/LICENSE,sha256=tS54XYbJSgmq5zuHhbsQGbNQLJPVgXqhF5nu2CSRMig,1068
19
- spells_mtg-0.10.8.dist-info/RECORD,,
15
+ spells_mtg-0.10.9.dist-info/METADATA,sha256=fTYoWwgKSx9VeSvsd08q7r-Q_KvCn-xcz2tPEHv6Wwo,47369
16
+ spells_mtg-0.10.9.dist-info/WHEEL,sha256=thaaA2w1JzcGC48WYufAs8nrYZjJm8LqNfnXFOFyCC4,90
17
+ spells_mtg-0.10.9.dist-info/entry_points.txt,sha256=a9Y1omdl9MdnKuIj3aOodgrp-zZII6OCdvqwgP6BFvI,63
18
+ spells_mtg-0.10.9.dist-info/licenses/LICENSE,sha256=tS54XYbJSgmq5zuHhbsQGbNQLJPVgXqhF5nu2CSRMig,1068
19
+ spells_mtg-0.10.9.dist-info/RECORD,,