hockey-blast-common-lib 0.1.63__py3-none-any.whl → 0.1.65__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.
- hockey_blast_common_lib/aggregate_all_stats.py +7 -4
- hockey_blast_common_lib/aggregate_goalie_stats.py +301 -107
- hockey_blast_common_lib/aggregate_h2h_stats.py +64 -33
- hockey_blast_common_lib/aggregate_human_stats.py +565 -280
- hockey_blast_common_lib/aggregate_referee_stats.py +286 -135
- hockey_blast_common_lib/aggregate_s2s_stats.py +85 -25
- hockey_blast_common_lib/aggregate_scorekeeper_stats.py +228 -113
- hockey_blast_common_lib/aggregate_skater_stats.py +561 -238
- hockey_blast_common_lib/assign_skater_skill.py +21 -11
- hockey_blast_common_lib/db_connection.py +59 -8
- hockey_blast_common_lib/embedding_utils.py +309 -0
- hockey_blast_common_lib/h2h_models.py +150 -56
- hockey_blast_common_lib/hockey_blast_sample_backup.sql.gz +0 -0
- hockey_blast_common_lib/models.py +305 -150
- hockey_blast_common_lib/options.py +30 -15
- hockey_blast_common_lib/progress_utils.py +21 -13
- hockey_blast_common_lib/skills_in_divisions.py +170 -33
- hockey_blast_common_lib/skills_propagation.py +164 -70
- hockey_blast_common_lib/stats_models.py +489 -245
- hockey_blast_common_lib/stats_utils.py +6 -3
- hockey_blast_common_lib/utils.py +91 -25
- hockey_blast_common_lib/wsgi.py +7 -5
- {hockey_blast_common_lib-0.1.63.dist-info → hockey_blast_common_lib-0.1.65.dist-info}/METADATA +1 -1
- hockey_blast_common_lib-0.1.65.dist-info/RECORD +29 -0
- hockey_blast_common_lib-0.1.63.dist-info/RECORD +0 -28
- {hockey_blast_common_lib-0.1.63.dist-info → hockey_blast_common_lib-0.1.65.dist-info}/WHEEL +0 -0
- {hockey_blast_common_lib-0.1.63.dist-info → hockey_blast_common_lib-0.1.65.dist-info}/top_level.txt +0 -0
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
def assign_ranks(stats_dict, field, reverse_rank=False):
|
|
2
|
-
sorted_stats = sorted(
|
|
2
|
+
sorted_stats = sorted(
|
|
3
|
+
stats_dict.items(), key=lambda x: x[1][field], reverse=not reverse_rank
|
|
4
|
+
)
|
|
3
5
|
for rank, (key, stat) in enumerate(sorted_stats, start=1):
|
|
4
|
-
stats_dict[key][f
|
|
6
|
+
stats_dict[key][f"{field}_rank"] = rank
|
|
5
7
|
|
|
6
|
-
|
|
8
|
+
|
|
9
|
+
ALL_ORGS_ID = -1
|
hockey_blast_common_lib/utils.py
CHANGED
|
@@ -1,21 +1,42 @@
|
|
|
1
|
-
import sys
|
|
2
1
|
import os
|
|
2
|
+
import sys
|
|
3
3
|
from datetime import datetime, timedelta
|
|
4
4
|
|
|
5
5
|
# Add the package directory to the Python path
|
|
6
6
|
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
|
|
7
7
|
|
|
8
|
-
from hockey_blast_common_lib.models import Organization, Human, Division, Level
|
|
9
8
|
from sqlalchemy.sql import func
|
|
10
9
|
|
|
10
|
+
from hockey_blast_common_lib.models import Division, Human, Level, Organization
|
|
11
|
+
|
|
11
12
|
|
|
12
13
|
def get_org_id_from_alias(session, org_alias):
|
|
13
14
|
# Predefined organizations
|
|
14
15
|
predefined_organizations = [
|
|
15
|
-
{
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
16
|
+
{
|
|
17
|
+
"id": 1,
|
|
18
|
+
"organization_name": "Sharks Ice",
|
|
19
|
+
"alias": "sharksice",
|
|
20
|
+
"website": "https://www.sharksice.com",
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
"id": 2,
|
|
24
|
+
"organization_name": "TriValley Ice",
|
|
25
|
+
"alias": "tvice",
|
|
26
|
+
"website": "https://www.trivalleyice.com",
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
"id": 3,
|
|
30
|
+
"organization_name": "CAHA",
|
|
31
|
+
"alias": "caha",
|
|
32
|
+
"website": "https://www.caha.com",
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
"id": 4,
|
|
36
|
+
"organization_name": "Tacoma Twin Rinks",
|
|
37
|
+
"alias": "ttr",
|
|
38
|
+
"website": "https://psicesports.com",
|
|
39
|
+
},
|
|
19
40
|
]
|
|
20
41
|
|
|
21
42
|
# Check if the organization exists
|
|
@@ -27,7 +48,12 @@ def get_org_id_from_alias(session, org_alias):
|
|
|
27
48
|
for org in predefined_organizations:
|
|
28
49
|
existing_org = session.query(Organization).filter_by(id=org["id"]).first()
|
|
29
50
|
if not existing_org:
|
|
30
|
-
new_org = Organization(
|
|
51
|
+
new_org = Organization(
|
|
52
|
+
id=org["id"],
|
|
53
|
+
organization_name=org["organization_name"],
|
|
54
|
+
alias=org["alias"],
|
|
55
|
+
website=org["website"],
|
|
56
|
+
)
|
|
31
57
|
session.add(new_org)
|
|
32
58
|
session.commit()
|
|
33
59
|
|
|
@@ -38,6 +64,7 @@ def get_org_id_from_alias(session, org_alias):
|
|
|
38
64
|
else:
|
|
39
65
|
raise ValueError(f"Organization with alias '{org_alias}' not found.")
|
|
40
66
|
|
|
67
|
+
|
|
41
68
|
def get_human_ids_by_names(session, names):
|
|
42
69
|
human_ids = set()
|
|
43
70
|
for first_name, middle_name, last_name in names:
|
|
@@ -52,6 +79,7 @@ def get_human_ids_by_names(session, names):
|
|
|
52
79
|
human_ids.update([result.id for result in results])
|
|
53
80
|
return human_ids
|
|
54
81
|
|
|
82
|
+
|
|
55
83
|
def get_non_human_ids(session):
|
|
56
84
|
"""Get IDs of non-human entities (placeholder names, test accounts, etc.)
|
|
57
85
|
|
|
@@ -66,32 +94,58 @@ def get_non_human_ids(session):
|
|
|
66
94
|
(None, None, "Goalie"),
|
|
67
95
|
("Unassigned", None, None),
|
|
68
96
|
("Not", "Signed", "In"),
|
|
69
|
-
("Incognito", None, None)
|
|
97
|
+
("Incognito", None, None),
|
|
98
|
+
("Empty", None , "Net"),
|
|
99
|
+
("Fake", "Stats", "Human"),
|
|
70
100
|
]
|
|
71
101
|
return get_human_ids_by_names(session, not_human_names)
|
|
72
102
|
|
|
103
|
+
|
|
73
104
|
def get_division_ids_for_last_season_in_all_leagues(session, org_id):
|
|
74
105
|
# # TODO = remove tmp hack
|
|
75
106
|
# return get_all_division_ids_for_org(session, org_id)
|
|
76
|
-
league_numbers =
|
|
107
|
+
league_numbers = (
|
|
108
|
+
session.query(Division.league_number)
|
|
109
|
+
.filter(Division.org_id == org_id)
|
|
110
|
+
.distinct()
|
|
111
|
+
.all()
|
|
112
|
+
)
|
|
77
113
|
division_ids = []
|
|
78
|
-
for league_number, in league_numbers:
|
|
79
|
-
max_season_number =
|
|
80
|
-
|
|
114
|
+
for (league_number,) in league_numbers:
|
|
115
|
+
max_season_number = (
|
|
116
|
+
session.query(func.max(Division.season_number))
|
|
117
|
+
.filter_by(league_number=league_number, org_id=org_id)
|
|
118
|
+
.scalar()
|
|
119
|
+
)
|
|
120
|
+
division_ids_for_league = (
|
|
121
|
+
session.query(Division.id)
|
|
122
|
+
.filter_by(
|
|
123
|
+
league_number=league_number,
|
|
124
|
+
season_number=max_season_number,
|
|
125
|
+
org_id=org_id,
|
|
126
|
+
)
|
|
127
|
+
.all()
|
|
128
|
+
)
|
|
81
129
|
division_ids.extend([division_id.id for division_id in division_ids_for_league])
|
|
82
130
|
return division_ids
|
|
83
131
|
|
|
132
|
+
|
|
84
133
|
def get_all_division_ids_for_org(session, org_id):
|
|
85
134
|
division_ids_for_org = session.query(Division.id).filter_by(org_id=org_id).all()
|
|
86
135
|
return [division_id.id for division_id in division_ids_for_org]
|
|
87
136
|
|
|
137
|
+
|
|
88
138
|
def get_fake_human_for_stats(session):
|
|
89
139
|
first_name = "Fake"
|
|
90
140
|
middle_name = "Stats"
|
|
91
141
|
last_name = "Human"
|
|
92
142
|
|
|
93
143
|
# Check if the human already exists
|
|
94
|
-
existing_human =
|
|
144
|
+
existing_human = (
|
|
145
|
+
session.query(Human)
|
|
146
|
+
.filter_by(first_name=first_name, middle_name=middle_name, last_name=last_name)
|
|
147
|
+
.first()
|
|
148
|
+
)
|
|
95
149
|
if existing_human:
|
|
96
150
|
return existing_human.id
|
|
97
151
|
|
|
@@ -102,18 +156,23 @@ def get_fake_human_for_stats(session):
|
|
|
102
156
|
|
|
103
157
|
return human.id
|
|
104
158
|
|
|
159
|
+
|
|
105
160
|
def get_start_datetime(last_game_datetime_str, aggregation_window):
|
|
106
|
-
if aggregation_window ==
|
|
161
|
+
if aggregation_window == "Weekly":
|
|
107
162
|
if last_game_datetime_str:
|
|
108
|
-
last_game_datetime = datetime.strptime(
|
|
163
|
+
last_game_datetime = datetime.strptime(
|
|
164
|
+
last_game_datetime_str, "%Y-%m-%d %H:%M:%S"
|
|
165
|
+
)
|
|
109
166
|
# Check if the last game datetime is over 1 week from now
|
|
110
167
|
if datetime.now() - last_game_datetime > timedelta(weeks=1):
|
|
111
168
|
return None
|
|
112
169
|
# Use current time as the start of the weekly window
|
|
113
170
|
return datetime.now() - timedelta(weeks=1)
|
|
114
171
|
if last_game_datetime_str:
|
|
115
|
-
last_game_datetime = datetime.strptime(
|
|
116
|
-
|
|
172
|
+
last_game_datetime = datetime.strptime(
|
|
173
|
+
last_game_datetime_str, "%Y-%m-%d %H:%M:%S"
|
|
174
|
+
)
|
|
175
|
+
if aggregation_window == "Daily":
|
|
117
176
|
# Check if the last game datetime is over 24 hours from now
|
|
118
177
|
if datetime.now() - last_game_datetime > timedelta(hours=24):
|
|
119
178
|
return None
|
|
@@ -121,29 +180,36 @@ def get_start_datetime(last_game_datetime_str, aggregation_window):
|
|
|
121
180
|
return last_game_datetime - timedelta(hours=14)
|
|
122
181
|
return None
|
|
123
182
|
|
|
183
|
+
|
|
124
184
|
def assign_ranks(stats_dict, field, reverse_rank=False):
|
|
125
|
-
sorted_stats = sorted(
|
|
185
|
+
sorted_stats = sorted(
|
|
186
|
+
stats_dict.items(), key=lambda x: x[1][field], reverse=not reverse_rank
|
|
187
|
+
)
|
|
126
188
|
for rank, (key, stat) in enumerate(sorted_stats, start=1):
|
|
127
|
-
stats_dict[key][f
|
|
189
|
+
stats_dict[key][f"{field}_rank"] = rank
|
|
190
|
+
|
|
128
191
|
|
|
129
192
|
def get_fake_level(session):
|
|
130
193
|
# Create a special fake Skill with org_id == -1 and skill_value == -1
|
|
131
|
-
fake_skill =
|
|
194
|
+
fake_skill = (
|
|
195
|
+
session.query(Level).filter_by(org_id=1, level_name="Fake Skill").first()
|
|
196
|
+
)
|
|
132
197
|
if not fake_skill:
|
|
133
198
|
fake_skill = Level(
|
|
134
199
|
org_id=1,
|
|
135
200
|
skill_value=-1,
|
|
136
|
-
level_name=
|
|
137
|
-
level_alternative_name=
|
|
138
|
-
is_seed=False
|
|
201
|
+
level_name="Fake Skill",
|
|
202
|
+
level_alternative_name="",
|
|
203
|
+
is_seed=False,
|
|
139
204
|
)
|
|
140
205
|
session.add(fake_skill)
|
|
141
206
|
session.commit()
|
|
142
207
|
print("Created special fake Skill record.")
|
|
143
208
|
return fake_skill
|
|
144
209
|
|
|
145
|
-
|
|
210
|
+
|
|
211
|
+
# TEST DB CONNECTION, PERMISSIONS...
|
|
146
212
|
# from hockey_blast_common_lib.db_connection import create_session
|
|
147
213
|
# session = create_session("frontend")
|
|
148
214
|
# human_id = get_fake_human_for_stats(session)
|
|
149
|
-
# print(f"Human ID: {human_id}")
|
|
215
|
+
# print(f"Human ID: {human_id}")
|
hockey_blast_common_lib/wsgi.py
CHANGED
|
@@ -1,20 +1,22 @@
|
|
|
1
|
-
import
|
|
1
|
+
import os
|
|
2
|
+
import sys
|
|
2
3
|
|
|
3
4
|
# Add the package directory to the Python path
|
|
4
5
|
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
|
|
5
6
|
|
|
6
|
-
from flask_migrate import Migrate
|
|
7
7
|
from flask import Flask
|
|
8
|
-
from
|
|
8
|
+
from flask_migrate import Migrate
|
|
9
|
+
|
|
10
|
+
from hockey_blast_common_lib.db_connection import get_db_params
|
|
9
11
|
from hockey_blast_common_lib.h2h_models import *
|
|
12
|
+
from hockey_blast_common_lib.models import *
|
|
10
13
|
from hockey_blast_common_lib.stats_models import *
|
|
11
14
|
from hockey_blast_common_lib.stats_models import db
|
|
12
|
-
from hockey_blast_common_lib.db_connection import get_db_params
|
|
13
15
|
|
|
14
16
|
app = Flask(__name__)
|
|
15
17
|
db_params = get_db_params("boss")
|
|
16
18
|
db_url = f"postgresql://{db_params['user']}:{db_params['password']}@{db_params['host']}:{db_params['port']}/{db_params['dbname']}"
|
|
17
|
-
app.config[
|
|
19
|
+
app.config["SQLALCHEMY_DATABASE_URI"] = db_url
|
|
18
20
|
|
|
19
21
|
db.init_app(app)
|
|
20
22
|
migrate = Migrate(app, db)
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
hockey_blast_common_lib/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
2
|
+
hockey_blast_common_lib/aggregate_all_stats.py,sha256=ozILLB3-CRABYN9JHeH2sFeXw-sFhkXboU7sKTV2Ok8,1378
|
|
3
|
+
hockey_blast_common_lib/aggregate_goalie_stats.py,sha256=QPza_glSHcggt0KTwVB6USTkvEdP3yZj7GjpNeGjFE8,17433
|
|
4
|
+
hockey_blast_common_lib/aggregate_h2h_stats.py,sha256=nStyIm_be25pKDYbPCaOSHFTjbaMLFxFAa2mTU1tL_k,11486
|
|
5
|
+
hockey_blast_common_lib/aggregate_human_stats.py,sha256=uoGBkROBKh8n18TyzZ6vHX_viCTpHbRsiVLyflJq92g,29247
|
|
6
|
+
hockey_blast_common_lib/aggregate_referee_stats.py,sha256=YyFFHU2FJnXyUEzkzMnJoa5O28zjtF_spJeGedaI4QA,17389
|
|
7
|
+
hockey_blast_common_lib/aggregate_s2s_stats.py,sha256=gB3Oi1emtBWL3bKojUhHH01gAbQTSLvgqO1WcvLI6F8,7449
|
|
8
|
+
hockey_blast_common_lib/aggregate_scorekeeper_stats.py,sha256=r0CUsOSjeKwAEanrPSkqVufkxk9Iv_c125mKdhwR9Ns,14758
|
|
9
|
+
hockey_blast_common_lib/aggregate_skater_stats.py,sha256=chy-LcuNIGHP85h0FiXZT3nZrbGKbcr66_j-atrucXs,30706
|
|
10
|
+
hockey_blast_common_lib/assign_skater_skill.py,sha256=it3jiSyUq7XpKqxzs88lyB5t1c3t1idIS_JRwq_FQoo,2810
|
|
11
|
+
hockey_blast_common_lib/db_connection.py,sha256=KACyHaOMeTX9zPNztYy8uOeB1ubIUenZcEKAeD5gC24,3333
|
|
12
|
+
hockey_blast_common_lib/dump_sample_db.sh,sha256=MY3lnzTXBoWd76-ZlZr9nWsKMEVgyRsUn-LZ2d1JWZs,810
|
|
13
|
+
hockey_blast_common_lib/embedding_utils.py,sha256=XbJvJlq6BKE6_oLzhUKcCrx6-TM8P-xl-S1SVLr_teU,10222
|
|
14
|
+
hockey_blast_common_lib/h2h_models.py,sha256=DEmQnmuacBVRNWvpRvq2RlwmhQYrT7XPOSTDNVtchr0,8597
|
|
15
|
+
hockey_blast_common_lib/hockey_blast_sample_backup.sql.gz,sha256=kakTyQVey1OuyS7RnbfXHBqeZ0_JrGG7p8WIQYt7azk,4648840
|
|
16
|
+
hockey_blast_common_lib/models.py,sha256=RQGUq8C8eJqUB2o3QCSs14W-9B4lMTUNvwNDM-Lc6j4,21687
|
|
17
|
+
hockey_blast_common_lib/options.py,sha256=wzfGWKK_dHBA_PfiOvbP_-HtdoJCR0E7DkA5_cYDb_k,1578
|
|
18
|
+
hockey_blast_common_lib/progress_utils.py,sha256=7Txjpx5G4vHbnPTvNYuBA_WtrY0QFA4mDEYUDuZyY1E,3923
|
|
19
|
+
hockey_blast_common_lib/restore_sample_db.sh,sha256=7W3lzRZeu9zXIu1Bvtnaw8EHc1ulHmFM4mMh86oUQJo,2205
|
|
20
|
+
hockey_blast_common_lib/skills_in_divisions.py,sha256=9sGtU6SLj8BXb5R74ue1oPWa2nbk4JfJz5VmcuxetzA,8542
|
|
21
|
+
hockey_blast_common_lib/skills_propagation.py,sha256=qBK84nzkn8ZQHum0bdxFQwLvdgVE7DtWoPP9cdbOmRo,20201
|
|
22
|
+
hockey_blast_common_lib/stats_models.py,sha256=t4nBxEr__dPJlO005jKvwQRWdUJwoXsALtVmW3crtdM,31100
|
|
23
|
+
hockey_blast_common_lib/stats_utils.py,sha256=PTZvykl1zfEcojnzDFa1J3V3F5gREmoFG1lQHLnYHgo,300
|
|
24
|
+
hockey_blast_common_lib/utils.py,sha256=hxlyOI1FR7B1tMfQbwyc16MJnHhze0WEuMdrzjI3xuY,7228
|
|
25
|
+
hockey_blast_common_lib/wsgi.py,sha256=oL9lPWccKLTAYIKPJkKZV5keVE-Dgosv74CBi770NNc,786
|
|
26
|
+
hockey_blast_common_lib-0.1.65.dist-info/METADATA,sha256=LXmzHHXKAe0uFdWulGQK0QyQ-sBMd83T8iCL5MG5vdo,318
|
|
27
|
+
hockey_blast_common_lib-0.1.65.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
|
|
28
|
+
hockey_blast_common_lib-0.1.65.dist-info/top_level.txt,sha256=wIR4LIkE40npoA2QlOdfCYlgFeGbsHR8Z6r0h46Vtgc,24
|
|
29
|
+
hockey_blast_common_lib-0.1.65.dist-info/RECORD,,
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
hockey_blast_common_lib/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
2
|
-
hockey_blast_common_lib/aggregate_all_stats.py,sha256=QhuSvGjuk4jVywNRcgxB-9ooJAoAbZRkaLjLe9Q1hEM,1363
|
|
3
|
-
hockey_blast_common_lib/aggregate_goalie_stats.py,sha256=J0hY5mK6UATScjqtPqbTfEeApnZy6lC3qlMGN02qhpY,14831
|
|
4
|
-
hockey_blast_common_lib/aggregate_h2h_stats.py,sha256=dC5TcJZGkpIQTiq3z40kOX6EjEhFbGv5EL0P1EClBQ0,11117
|
|
5
|
-
hockey_blast_common_lib/aggregate_human_stats.py,sha256=wRw0X_57-AUWHHn5SXRLovC7KQwQtTJm7Twb7XIQv_M,25560
|
|
6
|
-
hockey_blast_common_lib/aggregate_referee_stats.py,sha256=zwMpQxq-tONNKSv87hwM_l94L1wBpu2ZVW-bvyV-zjY,15561
|
|
7
|
-
hockey_blast_common_lib/aggregate_s2s_stats.py,sha256=urYN0Q06twwLO-XWGlSMVAVOTVR_D2AWdmoGsxIYHXE,6737
|
|
8
|
-
hockey_blast_common_lib/aggregate_scorekeeper_stats.py,sha256=SBwZ6kBMbgsBgyiLIuCTmgRHpseqjIlqjvR63rBvyiY,13500
|
|
9
|
-
hockey_blast_common_lib/aggregate_skater_stats.py,sha256=d_4PRCZw458FMp6Yv4_QM8hbkXAH_dkX5O3_jMtaoU8,26547
|
|
10
|
-
hockey_blast_common_lib/assign_skater_skill.py,sha256=Asq6iRMPsCMDnvuNSd-M3s4Gee4kDocP9Eznwju_9kA,2749
|
|
11
|
-
hockey_blast_common_lib/db_connection.py,sha256=HvPxDvOj7j5H85RfslGvHVNevfg7mKCd0syJ6NX21mU,1890
|
|
12
|
-
hockey_blast_common_lib/dump_sample_db.sh,sha256=MY3lnzTXBoWd76-ZlZr9nWsKMEVgyRsUn-LZ2d1JWZs,810
|
|
13
|
-
hockey_blast_common_lib/h2h_models.py,sha256=0st4xoJO0U6ONfx3BV03BQvHjZE31e_PqZfphAJMoSU,7968
|
|
14
|
-
hockey_blast_common_lib/hockey_blast_sample_backup.sql.gz,sha256=u5lGgEUTbJddCd-y2hu8LsMRoZW0Ox_jNzWYqNR1sbc,4648908
|
|
15
|
-
hockey_blast_common_lib/models.py,sha256=rbpgLI6iol_Eh-zvL1jSVqA7t08H6aFQoSJvMzjp81U,19724
|
|
16
|
-
hockey_blast_common_lib/options.py,sha256=XecGGlizbul7BnMePrvIqvEq5_w49UoG3Yu9iv961gg,1499
|
|
17
|
-
hockey_blast_common_lib/progress_utils.py,sha256=7cqyUTMmW3xAIh5JKFlhnBiybCJ9WvGDz7ihH59Lc_0,3953
|
|
18
|
-
hockey_blast_common_lib/restore_sample_db.sh,sha256=7W3lzRZeu9zXIu1Bvtnaw8EHc1ulHmFM4mMh86oUQJo,2205
|
|
19
|
-
hockey_blast_common_lib/skills_in_divisions.py,sha256=m-UEwMwn1KM7wOYvDstgsOEeH57M9V6yrkBoghzGYKE,7005
|
|
20
|
-
hockey_blast_common_lib/skills_propagation.py,sha256=nUxntyK8M4xWjHpkfze8f0suaBeunxicgDCduGmNJ-A,18468
|
|
21
|
-
hockey_blast_common_lib/stats_models.py,sha256=yLfsR0RhSc95-8ULdJ8tuvLd6RjIFkgZ74ejubJYVUw,28187
|
|
22
|
-
hockey_blast_common_lib/stats_utils.py,sha256=DXsPO4jw8XsdRUN46TGF_IiBAfz3GCIVBswCGp5ELDk,284
|
|
23
|
-
hockey_blast_common_lib/utils.py,sha256=1YJRAj1lhftjIAM2frFi4A4K90kCJaxWlgBQ1-77xZY,6486
|
|
24
|
-
hockey_blast_common_lib/wsgi.py,sha256=y3NxoJfWjdzX3iP7RGvDEer6zcnPyCanpqSgW1BlXgg,779
|
|
25
|
-
hockey_blast_common_lib-0.1.63.dist-info/METADATA,sha256=VFQNc4UUo8qUlyk2Bd_kykrsxVYwclpckA2eq2OCTgc,318
|
|
26
|
-
hockey_blast_common_lib-0.1.63.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
|
|
27
|
-
hockey_blast_common_lib-0.1.63.dist-info/top_level.txt,sha256=wIR4LIkE40npoA2QlOdfCYlgFeGbsHR8Z6r0h46Vtgc,24
|
|
28
|
-
hockey_blast_common_lib-0.1.63.dist-info/RECORD,,
|
|
File without changes
|
{hockey_blast_common_lib-0.1.63.dist-info → hockey_blast_common_lib-0.1.65.dist-info}/top_level.txt
RENAMED
|
File without changes
|