hockey-blast-common-lib 0.1.2__py3-none-any.whl → 0.1.4__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.
@@ -0,0 +1,47 @@
1
+ # import psycopg2
2
+ from sqlalchemy import create_engine
3
+ from sqlalchemy.orm import sessionmaker
4
+
5
+ # Database connection parameters per organization
6
+ DB_PARAMS = {
7
+ "hockey-blast-radonly": {
8
+ "dbname": "hockey_blast",
9
+ "user": "read_only_user",
10
+ "password": "hockey-blast",
11
+ "host": "localhost",
12
+ "port": 5432
13
+ },
14
+ "sharksice": {
15
+ "dbname": "hockey_blast",
16
+ "user": "read_only_user",
17
+ "password": "hockey-blast",
18
+ "host": "localhost",
19
+ "port": 5432
20
+ },
21
+ "caha": {
22
+ "dbname": "hockey_blast",
23
+ "user": "read_only_user",
24
+ "password": "hockey-blast",
25
+ "host": "localhost",
26
+ "port": 5432
27
+ },
28
+ "tvice": {
29
+ "dbname": "hockey_blast",
30
+ "user": "read_only_user",
31
+ "password": "hockey-blast",
32
+ "host": "localhost",
33
+ "port": 5432
34
+ },
35
+ }
36
+
37
+ def get_db_params(config_name):
38
+ if config_name not in DB_PARAMS:
39
+ raise ValueError(f"Invalid organization: {config_name}")
40
+ return DB_PARAMS[config_name]
41
+
42
+ def create_session(config_name):
43
+ db_params = get_db_params(config_name)
44
+ db_url = f"postgresql://{db_params['user']}:{db_params['password']}@{db_params['host']}:{db_params['port']}/{db_params['dbname']}"
45
+ engine = create_engine(db_url)
46
+ Session = sessionmaker(bind=engine)
47
+ return Session()
@@ -0,0 +1,21 @@
1
+ import sys
2
+ import os
3
+
4
+ from models import Human
5
+
6
+ def get_fake_human_for_stats(session):
7
+ first_name = "Fake"
8
+ middle_name = "Stats"
9
+ last_name = "Human"
10
+
11
+ # Check if the human already exists
12
+ existing_human = session.query(Human).filter_by(first_name=first_name, middle_name=middle_name, last_name=last_name).first()
13
+ if existing_human:
14
+ return existing_human.id
15
+
16
+ # Create a new human
17
+ human = Human(first_name=first_name, middle_name=middle_name, last_name=last_name)
18
+ session.add(human)
19
+ session.commit() # Commit to get the human.id
20
+
21
+ return human.id
@@ -0,0 +1,880 @@
1
+ from flask_sqlalchemy import SQLAlchemy
2
+ from sqlalchemy.ext.declarative import declared_attr
3
+
4
+ db = SQLAlchemy()
5
+
6
+ # DEPRECATED - comments
7
+ class Comment(db.Model):
8
+ __tablename__ = 'comments'
9
+ id = db.Column(db.Integer, primary_key=True)
10
+ game_id = db.Column(db.Integer, db.ForeignKey('games.id'))
11
+ comment_text = db.Column(db.Text)
12
+ __table_args__ = (
13
+ db.UniqueConstraint('game_id', 'comment_text', name='unique_game_comment'),
14
+ )
15
+
16
+ class Division(db.Model):
17
+ __tablename__ = 'divisions'
18
+ id = db.Column(db.Integer, primary_key=True)
19
+ league_number = db.Column(db.Integer)
20
+ season_number = db.Column(db.Integer)
21
+ level = db.Column(db.String(100)) # UNIQUE LEVEL NAME
22
+ skill_id = db.Column(db.Integer, db.ForeignKey('skills.id')) # SKILL LEVEL
23
+ org_id = db.Column(db.Integer, db.ForeignKey('organizations.id'), nullable=False)
24
+ __table_args__ = (
25
+ db.UniqueConstraint('org_id', 'league_number', 'season_number', 'level', name='_org_league_season_level_uc'),
26
+ )
27
+
28
+ class Game(db.Model):
29
+ __tablename__ = 'games'
30
+ id = db.Column(db.Integer, primary_key=True)
31
+ status = db.Column(db.String(255), nullable=False, default='')
32
+ last_update_ts = db.Column(db.DateTime, nullable=False, default=db.func.current_timestamp())
33
+ division_id = db.Column(db.Integer, db.ForeignKey('divisions.id'))
34
+ game_number = db.Column(db.Integer)
35
+ date = db.Column(db.Date)
36
+ time = db.Column(db.Time)
37
+ day_of_week = db.Column(db.Integer) # 1 to 7 for Monday to Sunday
38
+ period_length = db.Column(db.Integer) # In minutes
39
+ location = db.Column(db.String(100))
40
+ scorekeeper_id = db.Column(db.Integer, db.ForeignKey('humans.id'))
41
+ referee_1_id = db.Column(db.Integer, db.ForeignKey('humans.id'))
42
+ referee_2_id = db.Column(db.Integer, db.ForeignKey('humans.id'))
43
+ home_goalie_id = db.Column(db.Integer, db.ForeignKey('humans.id'))
44
+ visitor_goalie_id = db.Column(db.Integer, db.ForeignKey('humans.id'))
45
+ visitor_team_id = db.Column(db.Integer, db.ForeignKey('teams.id'))
46
+ home_team_id = db.Column(db.Integer, db.ForeignKey('teams.id'))
47
+ visitor_final_score = db.Column(db.Integer)
48
+ visitor_period_1_score = db.Column(db.Integer)
49
+ visitor_period_2_score = db.Column(db.Integer)
50
+ visitor_period_3_score = db.Column(db.Integer)
51
+ home_final_score = db.Column(db.Integer)
52
+ home_period_1_score = db.Column(db.Integer)
53
+ home_period_2_score = db.Column(db.Integer)
54
+ home_period_3_score = db.Column(db.Integer)
55
+ game_type = db.Column(db.String(50))
56
+ went_to_ot = db.Column(db.Boolean, default=False)
57
+ home_period_1_shots = db.Column(db.Integer)
58
+ home_period_2_shots = db.Column(db.Integer)
59
+ home_period_3_shots = db.Column(db.Integer)
60
+ home_ot_shots = db.Column(db.Integer, default=0)
61
+ home_so_shots = db.Column(db.Integer, default=0)
62
+ visitor_period_1_shots = db.Column(db.Integer)
63
+ visitor_period_2_shots = db.Column(db.Integer)
64
+ visitor_period_3_shots = db.Column(db.Integer)
65
+ visitor_ot_shots = db.Column(db.Integer, default=0)
66
+ visitor_so_shots = db.Column(db.Integer, default=0)
67
+ org_id = db.Column(db.Integer, db.ForeignKey('organizations.id'), nullable=False)
68
+ __table_args__ = (
69
+ db.UniqueConstraint('org_id', 'game_number', name='_org_game_number_uc'),
70
+ )
71
+
72
+ class GameRoster(db.Model):
73
+ __tablename__ = 'game_rosters'
74
+ id = db.Column(db.Integer, primary_key=True)
75
+ game_id = db.Column(db.Integer, db.ForeignKey('games.id'))
76
+ team_id = db.Column(db.Integer, db.ForeignKey('teams.id'))
77
+ human_id = db.Column(db.Integer, db.ForeignKey('humans.id'))
78
+ role = db.Column(db.String(10)) # e.g., G (goalie), C (captain), A (alternate), S (substitute)
79
+ jersey_number = db.Column(db.String(10)) # Player's jersey number
80
+ __table_args__ = (
81
+ db.UniqueConstraint('game_id', 'team_id', 'human_id', name='_game_team_human_uc'),
82
+ )
83
+
84
+ class Goal(db.Model):
85
+ __tablename__ = 'goals'
86
+ id = db.Column(db.Integer, primary_key=True)
87
+ game_id = db.Column(db.Integer, db.ForeignKey('games.id'))
88
+ scoring_team_id = db.Column(db.Integer, db.ForeignKey('teams.id'))
89
+ opposing_team_id = db.Column(db.Integer, db.ForeignKey('teams.id'))
90
+ period = db.Column(db.String(10)) # Can be "1", "2", "3", "OT", "SO"
91
+ time = db.Column(db.String(10)) # For elapsed time format
92
+ goal_scorer_id = db.Column(db.Integer, db.ForeignKey('humans.id'))
93
+ assist_1_id = db.Column(db.Integer, db.ForeignKey('humans.id'))
94
+ assist_2_id = db.Column(db.Integer, db.ForeignKey('humans.id'))
95
+ special_condition = db.Column(db.String(50)) # e.g., PP (power play), SH (short-handed)
96
+ sequence_number = db.Column(db.Integer)
97
+ __table_args__ = (
98
+ db.UniqueConstraint('game_id', 'scoring_team_id', 'sequence_number', name='_goal_team_sequence_uc'),
99
+ )
100
+
101
+ class Human(db.Model):
102
+ __tablename__ = 'humans'
103
+ id = db.Column(db.Integer, primary_key=True)
104
+ first_name = db.Column(db.String(100))
105
+ middle_name = db.Column(db.String(100))
106
+ last_name = db.Column(db.String(100))
107
+ first_date = db.Column(db.Date)
108
+ last_date = db.Column(db.Date)
109
+ __table_args__ = (
110
+ db.UniqueConstraint('first_name', 'middle_name', 'last_name', name='_human_name_uc'),
111
+ )
112
+
113
+ class HumanAlias(db.Model):
114
+ __tablename__ = 'human_aliases'
115
+ id = db.Column(db.Integer, primary_key=True)
116
+ human_id = db.Column(db.Integer, db.ForeignKey('humans.id'))
117
+ first_name = db.Column(db.String(100))
118
+ middle_name = db.Column(db.String(100))
119
+ last_name = db.Column(db.String(100))
120
+ first_date = db.Column(db.Date)
121
+ last_date = db.Column(db.Date)
122
+ __table_args__ = (
123
+ db.UniqueConstraint('human_id', 'first_name', 'middle_name', 'last_name', name='_human_alias_uc'),
124
+ )
125
+
126
+ class HumanInTTS(db.Model):
127
+ __tablename__ = 'humans_in_tts'
128
+ id = db.Column(db.Integer, primary_key=True)
129
+ human_id = db.Column(db.Integer, db.ForeignKey('humans.id'))
130
+ tts_id = db.Column(db.Integer)
131
+ org_id = db.Column(db.Integer, db.ForeignKey('organizations.id'), nullable=False)
132
+ __table_args__ = (
133
+ db.UniqueConstraint('org_id', 'tts_id', name='_org_tts_uc'),
134
+ )
135
+
136
+ class HumansInLevels(db.Model):
137
+ __tablename__ = 'humans_in_levels'
138
+ id = db.Column(db.Integer, primary_key=True)
139
+ levels_monthly_id = db.Column(db.Integer, db.ForeignKey('levels_monthly.id'))
140
+ human_id = db.Column(db.Integer, db.ForeignKey('humans.id'))
141
+ games_played = db.Column(db.Integer)
142
+ __table_args__ = (
143
+ db.UniqueConstraint('levels_monthly_id', 'human_id', name='_levels_monthly_human_uc'),
144
+ )
145
+
146
+ class League(db.Model):
147
+ __tablename__ = 'leagues'
148
+ id = db.Column(db.Integer, primary_key=True)
149
+ org_id = db.Column(db.Integer, db.ForeignKey('organizations.id'), nullable=False)
150
+ league_number = db.Column(db.Integer)
151
+ league_name = db.Column(db.String(100))
152
+ __table_args__ = (
153
+ db.UniqueConstraint('org_id', 'league_number', name='_org_league_number_uc'),
154
+ )
155
+
156
+ class Skill(db.Model):
157
+ __tablename__ = 'skills'
158
+ id = db.Column(db.Integer, primary_key=True)
159
+ org_id = db.Column(db.Integer, db.ForeignKey('organizations.id'), nullable=False)
160
+ skill_value = db.Column(db.Float) # A number from 0 (NHL) to 100 (pedestrian)
161
+ level_name = db.Column(db.String(100), unique=True)
162
+ level_alternative_name = db.Column(db.String(100))
163
+ __table_args__ = (
164
+ db.UniqueConstraint('org_id', 'level_name', name='_org_level_name_uc'),
165
+ )
166
+
167
+ class LevelsMonthly(db.Model):
168
+ __tablename__ = 'levels_monthly'
169
+ id = db.Column(db.Integer, primary_key=True)
170
+ year = db.Column(db.Integer)
171
+ month = db.Column(db.Integer)
172
+ league_number = db.Column(db.Integer)
173
+ season_number = db.Column(db.Integer)
174
+ season_name = db.Column(db.String(100))
175
+ level = db.Column(db.String(100))
176
+ org_id = db.Column(db.Integer, db.ForeignKey('organizations.id'), nullable=False)
177
+ __table_args__ = (
178
+ db.UniqueConstraint('org_id', 'year', 'month', 'league_number', 'season_number', 'level', name='_org_year_month_league_season_level_uc'),
179
+ )
180
+
181
+ class OrgLeagueSeasonDates(db.Model):
182
+ __tablename__ = 'org_league_season_dates'
183
+ id = db.Column(db.Integer, primary_key=True)
184
+ org_id = db.Column(db.Integer, db.ForeignKey('organizations.id'), nullable=False)
185
+ league_number = db.Column(db.Integer)
186
+ season_number = db.Column(db.Integer)
187
+ start_date = db.Column(db.Date)
188
+ end_date = db.Column(db.Date)
189
+ __table_args__ = (
190
+ db.UniqueConstraint('org_id', 'league_number', 'season_number', name='_org_league_season_uc_too'),
191
+ )
192
+
193
+ class NamesInOrgLeagueSeason(db.Model):
194
+ __tablename__ = 'names_in_org_league_season'
195
+ id = db.Column(db.Integer, primary_key=True)
196
+ org_league_season_id = db.Column(db.Integer, db.ForeignKey('org_league_season_dates.id'))
197
+ first_name = db.Column(db.String(100))
198
+ middle_name = db.Column(db.String(100))
199
+ last_name = db.Column(db.String(100))
200
+ first_date = db.Column(db.Date)
201
+ last_date = db.Column(db.Date)
202
+ __table_args__ = (
203
+ db.UniqueConstraint('org_league_season_id', 'first_name', 'middle_name', 'last_name', name='_org_league_season_name_uc'),
204
+ )
205
+
206
+ class NamesInTeams(db.Model):
207
+ __tablename__ = 'names_in_teams'
208
+ id = db.Column(db.Integer, primary_key=True)
209
+ first_name = db.Column(db.String(100))
210
+ middle_name = db.Column(db.String(100))
211
+ last_name = db.Column(db.String(100))
212
+ team_id = db.Column(db.Integer, db.ForeignKey('teams.id'))
213
+ first_date = db.Column(db.Date)
214
+ last_date = db.Column(db.Date)
215
+ __table_args__ = (
216
+ db.UniqueConstraint('team_id', 'first_name', 'middle_name', 'last_name', name='_team_name_uc'),
217
+ )
218
+
219
+ class Organization(db.Model):
220
+ __tablename__ = 'organizations'
221
+ id = db.Column(db.Integer, primary_key=True)
222
+ alias = db.Column(db.String(100), unique=True)
223
+ organization_name = db.Column(db.String(100), unique=True)
224
+
225
+ class Penalty(db.Model):
226
+ __tablename__ = 'penalties'
227
+ id = db.Column(db.Integer, primary_key=True)
228
+ game_id = db.Column(db.Integer, db.ForeignKey('games.id'))
229
+ team_id = db.Column(db.Integer, db.ForeignKey('teams.id'))
230
+ period = db.Column(db.String(10)) # Can be "1", "2", "3", "OT", etc.
231
+ time = db.Column(db.String(10)) # For elapsed time format
232
+ penalized_player_id = db.Column(db.Integer, db.ForeignKey('humans.id'))
233
+ infraction = db.Column(db.String(100))
234
+ penalty_minutes = db.Column(db.String(3)) # Use this for numeric penalties like 2 minutes and GM, GS, M, PS, C, GR1
235
+ penalty_start = db.Column(db.String(10)) # Elapsed time for start
236
+ penalty_end = db.Column(db.String(10)) # Elapsed time for end, can be NULL if unknown
237
+ penalty_sequence_number = db.Column(db.Integer)
238
+ __table_args__ = (
239
+ db.UniqueConstraint('game_id', 'team_id', 'penalty_sequence_number', name='_game_team_penalty_sequence_uc'),
240
+ )
241
+
242
+ class PlayerRole(db.Model):
243
+ __tablename__ = 'player_roles'
244
+ team_id = db.Column(db.Integer, db.ForeignKey('teams.id'), primary_key=True)
245
+ human_id = db.Column(db.Integer, db.ForeignKey('humans.id'), primary_key=True)
246
+ role_type = db.Column(db.String(10), primary_key=True) # e.g., G (goalie), C (captain), A (alternate), S (substitute)
247
+ first_date = db.Column(db.Date)
248
+ last_date = db.Column(db.Date)
249
+ __table_args__ = (
250
+ db.PrimaryKeyConstraint('team_id', 'human_id', 'role_type'),
251
+ )
252
+
253
+ class RefDivision(db.Model):
254
+ __tablename__ = 'ref_divisions'
255
+ division_id = db.Column(db.Integer, db.ForeignKey('divisions.id'), primary_key=True)
256
+ human_id = db.Column(db.Integer, db.ForeignKey('humans.id'), primary_key=True)
257
+ first_date = db.Column(db.Date)
258
+ last_date = db.Column(db.Date)
259
+
260
+ class RefereeName(db.Model):
261
+ __tablename__ = 'referee_names'
262
+ id = db.Column(db.Integer, primary_key=True)
263
+ first_name = db.Column(db.String(100))
264
+ middle_name = db.Column(db.String(100))
265
+ last_name = db.Column(db.String(100))
266
+ first_date = db.Column(db.Date)
267
+ last_date = db.Column(db.Date)
268
+ __table_args__ = (
269
+ db.UniqueConstraint('first_name', 'middle_name', 'last_name', name='_referee_name_uc'),
270
+ )
271
+
272
+ class ScorekeeperDivision(db.Model):
273
+ __tablename__ = 'scorekeeper_divisions'
274
+ division_id = db.Column(db.Integer, db.ForeignKey('divisions.id'), primary_key=True)
275
+ human_id = db.Column(db.Integer, db.ForeignKey('humans.id'), primary_key=True)
276
+ first_date = db.Column(db.Date)
277
+ last_date = db.Column(db.Date)
278
+
279
+ class ScorekeeperName(db.Model):
280
+ __tablename__ = 'scorekeeper_names'
281
+ id = db.Column(db.Integer, primary_key=True)
282
+ first_name = db.Column(db.String(100))
283
+ middle_name = db.Column(db.String(100))
284
+ last_name = db.Column(db.String(100))
285
+ first_date = db.Column(db.Date)
286
+ last_date = db.Column(db.Date)
287
+ __table_args__ = (
288
+ db.UniqueConstraint('first_name', 'middle_name', 'last_name', name='_scorekeeper_name_uc'),
289
+ )
290
+
291
+ class Season(db.Model):
292
+ __tablename__ = 'seasons'
293
+ id = db.Column(db.Integer, primary_key=True)
294
+ season_number = db.Column(db.Integer)
295
+ season_name = db.Column(db.String(100))
296
+ start_date = db.Column(db.Date)
297
+ end_date = db.Column(db.Date)
298
+ league_number = db.Column(db.Integer)
299
+ org_id = db.Column(db.Integer, db.ForeignKey('organizations.id'), nullable=False)
300
+ __table_args__ = (
301
+ db.UniqueConstraint('org_id', 'league_number', 'season_number', name='_org_league_season_uc'),
302
+ )
303
+
304
+ class Shootout(db.Model):
305
+ __tablename__ = 'shootout'
306
+ id = db.Column(db.Integer, primary_key=True)
307
+ game_id = db.Column(db.Integer, db.ForeignKey('games.id'))
308
+ shooting_team_id = db.Column(db.Integer, db.ForeignKey('teams.id'))
309
+ shooter_id = db.Column(db.Integer, db.ForeignKey('humans.id'))
310
+ goalie_id = db.Column(db.Integer, db.ForeignKey('humans.id'))
311
+ has_scored = db.Column(db.Boolean) # Reflect if goal was scored or not during shootout
312
+ sequence_number = db.Column(db.Integer)
313
+ __table_args__ = (
314
+ db.UniqueConstraint('game_id', 'shooting_team_id' , 'sequence_number', name='_shootout_team_sequence_uc'),
315
+ )
316
+
317
+ class Team(db.Model):
318
+ __tablename__ = 'teams'
319
+ id = db.Column(db.Integer, primary_key=True)
320
+ name = db.Column(db.String(100), unique=True, nullable=False)
321
+
322
+ class TeamDivision(db.Model):
323
+ __tablename__ = 'teams_divisions'
324
+ id = db.Column(db.Integer, primary_key=True)
325
+ team_id = db.Column(db.Integer, db.ForeignKey('teams.id'))
326
+ division_id = db.Column(db.Integer, db.ForeignKey('divisions.id'))
327
+ __table_args__ = (
328
+ db.UniqueConstraint('team_id', 'division_id', name='_team_division_uc'),
329
+ )
330
+
331
+ class TeamInTTS(db.Model):
332
+ __tablename__ = 'teams_in_tts'
333
+ id = db.Column(db.Integer, primary_key=True)
334
+ team_id = db.Column(db.Integer, db.ForeignKey('teams.id'))
335
+ tts_team_id = db.Column(db.Integer)
336
+ org_id = db.Column(db.Integer, db.ForeignKey('organizations.id'), nullable=False)
337
+ __table_args__ = (
338
+ db.UniqueConstraint('org_id', 'team_id', 'tts_team_id', name='_org_team_tts_uc'),
339
+ )
340
+
341
+
342
+ # CLASSES FOR STATS ARE BELOW THIS LINE
343
+
344
+
345
+
346
+
347
+
348
+
349
+
350
+
351
+
352
+
353
+
354
+
355
+
356
+
357
+
358
+
359
+
360
+ class BaseStatsHuman(db.Model):
361
+ __abstract__ = True
362
+ id = db.Column(db.Integer, primary_key=True)
363
+ human_id = db.Column(db.Integer, db.ForeignKey('humans.id'), nullable=False)
364
+ games_total = db.Column(db.Integer, default=0)
365
+ games_total_rank = db.Column(db.Integer, default=0)
366
+ games_skater = db.Column(db.Integer, default=0)
367
+ games_skater_rank = db.Column(db.Integer, default=0)
368
+ games_referee = db.Column(db.Integer, default=0)
369
+ games_referee_rank = db.Column(db.Integer, default=0)
370
+ games_scorekeeper = db.Column(db.Integer, default=0)
371
+ games_scorekeeper_rank = db.Column(db.Integer, default=0)
372
+ games_goalie = db.Column(db.Integer, default=0)
373
+ games_goalie_rank = db.Column(db.Integer, default=0)
374
+ total_in_rank = db.Column(db.Integer, default=0)
375
+ first_game_id = db.Column(db.Integer, db.ForeignKey('games.id'))
376
+ last_game_id = db.Column(db.Integer, db.ForeignKey('games.id'))
377
+
378
+ @declared_attr
379
+ def __table_args__(cls):
380
+ return (
381
+ db.UniqueConstraint('human_id', cls.aggregation_id, name=f'_human_{cls.aggregation_type}_stats_uc1'),
382
+ db.Index(f'idx_{cls.aggregation_type}_games_total1', cls.aggregation_id, 'games_total'),
383
+ db.Index(f'idx_{cls.aggregation_type}_games_skater1', cls.aggregation_id, 'games_skater'),
384
+ db.Index(f'idx_{cls.aggregation_type}_games_referee1', cls.aggregation_id, 'games_referee'),
385
+ db.Index(f'idx_{cls.aggregation_type}_games_scorekeeper1', cls.aggregation_id, 'games_scorekeeper'),
386
+ db.Index(f'idx_{cls.aggregation_type}_games_goalie1', cls.aggregation_id, 'games_goalie')
387
+ )
388
+
389
+ class BaseStatsSkater(db.Model):
390
+ __abstract__ = True
391
+ id = db.Column(db.Integer, primary_key=True)
392
+ human_id = db.Column(db.Integer, db.ForeignKey('humans.id'), nullable=False)
393
+ games_played = db.Column(db.Integer, default=0)
394
+ games_played_rank = db.Column(db.Integer, default=0)
395
+ goals = db.Column(db.Integer, default=0)
396
+ goals_rank = db.Column(db.Integer, default=0)
397
+ assists = db.Column(db.Integer, default=0)
398
+ assists_rank = db.Column(db.Integer, default=0)
399
+ points = db.Column(db.Integer, default=0)
400
+ points_rank = db.Column(db.Integer, default=0)
401
+ penalties = db.Column(db.Integer, default=0)
402
+ penalties_rank = db.Column(db.Integer, default=0)
403
+ goals_per_game = db.Column(db.Float, default=0.0)
404
+ goals_per_game_rank = db.Column(db.Integer, default=0)
405
+ points_per_game = db.Column(db.Float, default=0.0)
406
+ points_per_game_rank = db.Column(db.Integer, default=0)
407
+ assists_per_game = db.Column(db.Float, default=0.0)
408
+ assists_per_game_rank = db.Column(db.Integer, default=0)
409
+ penalties_per_game = db.Column(db.Float, default=0.0)
410
+ penalties_per_game_rank = db.Column(db.Integer, default=0)
411
+ total_in_rank = db.Column(db.Integer, default=0)
412
+ first_game_id = db.Column(db.Integer, db.ForeignKey('games.id'))
413
+ last_game_id = db.Column(db.Integer, db.ForeignKey('games.id'))
414
+
415
+ @declared_attr
416
+ def __table_args__(cls):
417
+ return (
418
+ db.UniqueConstraint('human_id', cls.aggregation_id, name=f'_human_{cls.aggregation_type}_uc_skater1'),
419
+ db.Index(f'idx_{cls.aggregation_type}_goals_per_game3', cls.aggregation_id, 'goals_per_game'),
420
+ db.Index(f'idx_{cls.aggregation_type}_points_per_game3', cls.aggregation_id, 'points_per_game'),
421
+ db.Index(f'idx_{cls.aggregation_type}_assists_per_game3', cls.aggregation_id, 'assists_per_game'),
422
+ db.Index(f'idx_{cls.aggregation_type}_penalties_per_game3', cls.aggregation_id, 'penalties_per_game'),
423
+ db.Index(f'idx_{cls.aggregation_type}_games_played3', cls.aggregation_id, 'games_played')
424
+ )
425
+
426
+ class BaseStatsGoalie(db.Model):
427
+ __abstract__ = True
428
+ id = db.Column(db.Integer, primary_key=True)
429
+ human_id = db.Column(db.Integer, db.ForeignKey('humans.id'), nullable=False)
430
+ games_played = db.Column(db.Integer, default=0)
431
+ games_played_rank = db.Column(db.Integer, default=0)
432
+ goals_allowed = db.Column(db.Integer, default=0)
433
+ goals_allowed_rank = db.Column(db.Integer, default=0)
434
+ goals_allowed_per_game = db.Column(db.Float, default=0.0)
435
+ goals_allowed_per_game_rank = db.Column(db.Integer, default=0)
436
+ shots_faced = db.Column(db.Integer, default=0)
437
+ shots_faced_rank = db.Column(db.Integer, default=0)
438
+ save_percentage = db.Column(db.Float, default=0.0)
439
+ save_percentage_rank = db.Column(db.Integer, default=0)
440
+ total_in_rank = db.Column(db.Integer, default=0)
441
+ first_game_id = db.Column(db.Integer, db.ForeignKey('games.id'))
442
+ last_game_id = db.Column(db.Integer, db.ForeignKey('games.id'))
443
+
444
+ @declared_attr
445
+ def __table_args__(cls):
446
+ return (
447
+ db.UniqueConstraint('human_id', cls.aggregation_id, name=f'_human_{cls.aggregation_type}_uc_goalie1'),
448
+ db.Index(f'idx_{cls.aggregation_type}_goals_allowed_per_game1', cls.aggregation_id, 'goals_allowed_per_game'),
449
+ db.Index(f'idx_{cls.aggregation_type}_save_percentage1', cls.aggregation_id, 'save_percentage'),
450
+ db.Index(f'idx_{cls.aggregation_type}_shots_faced1', cls.aggregation_id, 'shots_faced'),
451
+ db.Index(f'idx_{cls.aggregation_type}_games_played_goalie1', cls.aggregation_id, 'games_played'),
452
+ db.Index(f'idx_{cls.aggregation_type}_goals_allowed1', cls.aggregation_id, 'goals_allowed')
453
+ )
454
+
455
+ class BaseStatsReferee(db.Model):
456
+ __abstract__ = True
457
+ id = db.Column(db.Integer, primary_key=True)
458
+ human_id = db.Column(db.Integer, db.ForeignKey('humans.id'), nullable=False)
459
+ games_reffed = db.Column(db.Integer, default=0)
460
+ games_reffed_rank = db.Column(db.Integer, default=0)
461
+ penalties_given = db.Column(db.Integer, default=0)
462
+ penalties_given_rank = db.Column(db.Integer, default=0)
463
+ penalties_per_game = db.Column(db.Float, default=0.0)
464
+ penalties_per_game_rank = db.Column(db.Integer, default=0)
465
+ gm_given = db.Column(db.Integer, default=0)
466
+ gm_given_rank = db.Column(db.Integer, default=0)
467
+ gm_per_game = db.Column(db.Float, default=0.0)
468
+ gm_per_game_rank = db.Column(db.Integer, default=0)
469
+ total_in_rank = db.Column(db.Integer, default=0)
470
+ first_game_id = db.Column(db.Integer, db.ForeignKey('games.id'))
471
+ last_game_id = db.Column(db.Integer, db.ForeignKey('games.id'))
472
+
473
+ @declared_attr
474
+ def __table_args__(cls):
475
+ return (
476
+ db.UniqueConstraint('human_id', cls.aggregation_id, name=f'_human_{cls.aggregation_type}_uc_referee1'),
477
+ db.Index(f'idx_{cls.aggregation_type}_games_reffed1', cls.aggregation_id, 'games_reffed'),
478
+ db.Index(f'idx_{cls.aggregation_type}_penalties_given1', cls.aggregation_id, 'penalties_given'),
479
+ db.Index(f'idx_{cls.aggregation_type}_penalties_per_game1', cls.aggregation_id, 'penalties_per_game'),
480
+ db.Index(f'idx_{cls.aggregation_type}_gm_given1', cls.aggregation_id, 'gm_given'),
481
+ db.Index(f'idx_{cls.aggregation_type}_gm_per_game1', cls.aggregation_id, 'gm_per_game')
482
+ )
483
+
484
+ class BaseStatsScorekeeper(db.Model):
485
+ __abstract__ = True
486
+ id = db.Column(db.Integer, primary_key=True)
487
+ human_id = db.Column(db.Integer, db.ForeignKey('humans.id'), nullable=False)
488
+ games_recorded = db.Column(db.Integer, default=0)
489
+ games_recorded_rank = db.Column(db.Integer, default=0)
490
+ sog_given = db.Column(db.Integer, default=0)
491
+ sog_given_rank = db.Column(db.Integer, default=0)
492
+ sog_per_game = db.Column(db.Float, default=0.0)
493
+ sog_per_game_rank = db.Column(db.Integer, default=0)
494
+ total_in_rank = db.Column(db.Integer, default=0)
495
+ first_game_id = db.Column(db.Integer, db.ForeignKey('games.id'))
496
+ last_game_id = db.Column(db.Integer, db.ForeignKey('games.id'))
497
+
498
+ @declared_attr
499
+ def __table_args__(cls):
500
+ return (
501
+ db.UniqueConstraint('human_id', cls.aggregation_id, name=f'_human_{cls.aggregation_type}_uc_scorekeeper1'),
502
+ db.Index(f'idx_{cls.aggregation_type}_games_recorded1', cls.aggregation_id, 'games_recorded'),
503
+ db.Index(f'idx_{cls.aggregation_type}_sog_given1', cls.aggregation_id, 'sog_given'),
504
+ db.Index(f'idx_{cls.aggregation_type}_sog_per_game1', cls.aggregation_id, 'sog_per_game')
505
+ )
506
+
507
+ class OrgStatsHuman(BaseStatsHuman):
508
+ __tablename__ = 'org_stats_human'
509
+ org_id = db.Column(db.Integer, db.ForeignKey('organizations.id'), nullable=False)
510
+
511
+ @declared_attr
512
+ def aggregation_id(cls):
513
+ return cls.org_id
514
+
515
+ @declared_attr
516
+ def aggregation_type(cls):
517
+ return 'org'
518
+
519
+ class DivisionStatsHuman(BaseStatsHuman):
520
+ __tablename__ = 'division_stats_human'
521
+ division_id = db.Column(db.Integer, db.ForeignKey('divisions.id'), nullable=False)
522
+
523
+ @declared_attr
524
+ def aggregation_id(cls):
525
+ return cls.division_id
526
+
527
+ @declared_attr
528
+ def aggregation_type(cls):
529
+ return 'division'
530
+
531
+ class OrgStatsSkater(BaseStatsSkater):
532
+ __tablename__ = 'org_stats_skater'
533
+ org_id = db.Column(db.Integer, db.ForeignKey('organizations.id'), nullable=False)
534
+
535
+ @declared_attr
536
+ def aggregation_id(cls):
537
+ return cls.org_id
538
+
539
+ @declared_attr
540
+ def aggregation_type(cls):
541
+ return 'org'
542
+
543
+ class DivisionStatsSkater(BaseStatsSkater):
544
+ __tablename__ = 'division_stats_skater'
545
+ division_id = db.Column(db.Integer, db.ForeignKey('divisions.id'), nullable=False)
546
+
547
+ @declared_attr
548
+ def aggregation_id(cls):
549
+ return cls.division_id
550
+
551
+ @declared_attr
552
+ def aggregation_type(cls):
553
+ return 'division'
554
+
555
+ class OrgStatsGoalie(BaseStatsGoalie):
556
+ __tablename__ = 'org_stats_goalie'
557
+ org_id = db.Column(db.Integer, db.ForeignKey('organizations.id'), nullable=False)
558
+
559
+ @declared_attr
560
+ def aggregation_id(cls):
561
+ return cls.org_id
562
+
563
+ @declared_attr
564
+ def aggregation_type(cls):
565
+ return 'org'
566
+
567
+ class DivisionStatsGoalie(BaseStatsGoalie):
568
+ __tablename__ = 'division_stats_goalie'
569
+ division_id = db.Column(db.Integer, db.ForeignKey('divisions.id'), nullable=False)
570
+
571
+ @declared_attr
572
+ def aggregation_id(cls):
573
+ return cls.division_id
574
+
575
+ @declared_attr
576
+ def aggregation_type(cls):
577
+ return 'division'
578
+
579
+
580
+ class OrgStatsReferee(BaseStatsReferee):
581
+ __tablename__ = 'org_stats_referee'
582
+ org_id = db.Column(db.Integer, db.ForeignKey('organizations.id'), nullable=False)
583
+
584
+ @declared_attr
585
+ def aggregation_id(cls):
586
+ return cls.org_id
587
+
588
+ @declared_attr
589
+ def aggregation_type(cls):
590
+ return 'org'
591
+
592
+ class DivisionStatsReferee(BaseStatsReferee):
593
+ __tablename__ = 'division_stats_referee'
594
+ division_id = db.Column(db.Integer, db.ForeignKey('divisions.id'), nullable=False)
595
+
596
+ @declared_attr
597
+ def aggregation_id(cls):
598
+ return cls.division_id
599
+
600
+ @declared_attr
601
+ def aggregation_type(cls):
602
+ return 'division'
603
+
604
+
605
+ class OrgStatsScorekeeper(BaseStatsScorekeeper):
606
+ __tablename__ = 'org_stats_scorekeeper'
607
+ org_id = db.Column(db.Integer, db.ForeignKey('organizations.id'), nullable=False)
608
+
609
+ @declared_attr
610
+ def aggregation_id(cls):
611
+ return cls.org_id
612
+
613
+ @declared_attr
614
+ def aggregation_type(cls):
615
+ return 'org'
616
+
617
+ class DivisionStatsScorekeeper(BaseStatsScorekeeper):
618
+ __tablename__ = 'division_stats_scorekeeper'
619
+ division_id = db.Column(db.Integer, db.ForeignKey('divisions.id'), nullable=False)
620
+
621
+ @declared_attr
622
+ def aggregation_id(cls):
623
+ return cls.division_id
624
+
625
+ @declared_attr
626
+ def aggregation_type(cls):
627
+ return 'division'
628
+
629
+ class OrgStatsDailyHuman(BaseStatsHuman):
630
+ __tablename__ = 'org_stats_daily_human'
631
+ org_id = db.Column(db.Integer, db.ForeignKey('organizations.id'), nullable=False)
632
+
633
+ @declared_attr
634
+ def aggregation_id(cls):
635
+ return cls.org_id
636
+
637
+ @declared_attr
638
+ def aggregation_type(cls):
639
+ return 'org_daily'
640
+
641
+ class OrgStatsWeeklyHuman(BaseStatsHuman):
642
+ __tablename__ = 'org_stats_weekly_human'
643
+ org_id = db.Column(db.Integer, db.ForeignKey('organizations.id'), nullable=False)
644
+
645
+ @declared_attr
646
+ def aggregation_id(cls):
647
+ return cls.org_id
648
+
649
+ @declared_attr
650
+ def aggregation_type(cls):
651
+ return 'org_weekly'
652
+
653
+ class DivisionStatsDailyHuman(BaseStatsHuman):
654
+ __tablename__ = 'division_stats_daily_human'
655
+ division_id = db.Column(db.Integer, db.ForeignKey('divisions.id'), nullable=False)
656
+
657
+ @declared_attr
658
+ def aggregation_id(cls):
659
+ return cls.division_id
660
+
661
+ @declared_attr
662
+ def aggregation_type(cls):
663
+ return 'division_daily'
664
+
665
+ class DivisionStatsWeeklyHuman(BaseStatsHuman):
666
+ __tablename__ = 'division_stats_weekly_human'
667
+ division_id = db.Column(db.Integer, db.ForeignKey('divisions.id'), nullable=False)
668
+
669
+ @declared_attr
670
+ def aggregation_id(cls):
671
+ return cls.division_id
672
+
673
+ @declared_attr
674
+ def aggregation_type(cls):
675
+ return 'division_weekly'
676
+
677
+ class OrgStatsDailySkater(BaseStatsSkater):
678
+ __tablename__ = 'org_stats_daily_skater'
679
+ org_id = db.Column(db.Integer, db.ForeignKey('organizations.id'), nullable=False)
680
+
681
+ @declared_attr
682
+ def aggregation_id(cls):
683
+ return cls.org_id
684
+
685
+ @declared_attr
686
+ def aggregation_type(cls):
687
+ return 'org_daily'
688
+
689
+ class OrgStatsWeeklySkater(BaseStatsSkater):
690
+ __tablename__ = 'org_stats_weekly_skater'
691
+ org_id = db.Column(db.Integer, db.ForeignKey('organizations.id'), nullable=False)
692
+
693
+ @declared_attr
694
+ def aggregation_id(cls):
695
+ return cls.org_id
696
+
697
+ @declared_attr
698
+ def aggregation_type(cls):
699
+ return 'org_weekly'
700
+
701
+ class DivisionStatsDailySkater(BaseStatsSkater):
702
+ __tablename__ = 'division_stats_daily_skater'
703
+ division_id = db.Column(db.Integer, db.ForeignKey('divisions.id'), nullable=False)
704
+
705
+ @declared_attr
706
+ def aggregation_id(cls):
707
+ return cls.division_id
708
+
709
+ @declared_attr
710
+ def aggregation_type(cls):
711
+ return 'division_daily'
712
+
713
+ class DivisionStatsWeeklySkater(BaseStatsSkater):
714
+ __tablename__ = 'division_stats_weekly_skater'
715
+ division_id = db.Column(db.Integer, db.ForeignKey('divisions.id'), nullable=False)
716
+
717
+ @declared_attr
718
+ def aggregation_id(cls):
719
+ return cls.division_id
720
+
721
+ @declared_attr
722
+ def aggregation_type(cls):
723
+ return 'division_weekly'
724
+
725
+ class OrgStatsDailyGoalie(BaseStatsGoalie):
726
+ __tablename__ = 'org_stats_daily_goalie'
727
+ org_id = db.Column(db.Integer, db.ForeignKey('organizations.id'), nullable=False)
728
+
729
+ @declared_attr
730
+ def aggregation_id(cls):
731
+ return cls.org_id
732
+
733
+ @declared_attr
734
+ def aggregation_type(cls):
735
+ return 'org_daily'
736
+
737
+ class OrgStatsWeeklyGoalie(BaseStatsGoalie):
738
+ __tablename__ = 'org_stats_weekly_goalie'
739
+ org_id = db.Column(db.Integer, db.ForeignKey('organizations.id'), nullable=False)
740
+
741
+ @declared_attr
742
+ def aggregation_id(cls):
743
+ return cls.org_id
744
+
745
+ @declared_attr
746
+ def aggregation_type(cls):
747
+ return 'org_weekly'
748
+
749
+ class DivisionStatsDailyGoalie(BaseStatsGoalie):
750
+ __tablename__ = 'division_stats_daily_goalie'
751
+ division_id = db.Column(db.Integer, db.ForeignKey('divisions.id'), nullable=False)
752
+
753
+ @declared_attr
754
+ def aggregation_id(cls):
755
+ return cls.division_id
756
+
757
+ @declared_attr
758
+ def aggregation_type(cls):
759
+ return 'division_daily'
760
+
761
+ class DivisionStatsWeeklyGoalie(BaseStatsGoalie):
762
+ __tablename__ = 'division_stats_weekly_goalie'
763
+ division_id = db.Column(db.Integer, db.ForeignKey('divisions.id'), nullable=False)
764
+
765
+ @declared_attr
766
+ def aggregation_id(cls):
767
+ return cls.division_id
768
+
769
+ @declared_attr
770
+ def aggregation_type(cls):
771
+ return 'division_weekly'
772
+
773
+ class OrgStatsDailyReferee(BaseStatsReferee):
774
+ __tablename__ = 'org_stats_daily_referee'
775
+ org_id = db.Column(db.Integer, db.ForeignKey('organizations.id'), nullable=False)
776
+
777
+ @declared_attr
778
+ def aggregation_id(cls):
779
+ return cls.org_id
780
+
781
+ @declared_attr
782
+ def aggregation_type(cls):
783
+ return 'org_daily'
784
+
785
+ class OrgStatsWeeklyReferee(BaseStatsReferee):
786
+ __tablename__ = 'org_stats_weekly_referee'
787
+ org_id = db.Column(db.Integer, db.ForeignKey('organizations.id'), nullable=False)
788
+
789
+ @declared_attr
790
+ def aggregation_id(cls):
791
+ return cls.org_id
792
+
793
+ @declared_attr
794
+ def aggregation_type(cls):
795
+ return 'org_weekly'
796
+
797
+ class DivisionStatsDailyReferee(BaseStatsReferee):
798
+ __tablename__ = 'division_stats_daily_referee'
799
+ division_id = db.Column(db.Integer, db.ForeignKey('divisions.id'), nullable=False)
800
+
801
+ @declared_attr
802
+ def aggregation_id(cls):
803
+ return cls.division_id
804
+
805
+ @declared_attr
806
+ def aggregation_type(cls):
807
+ return 'division_daily'
808
+
809
+ class DivisionStatsWeeklyReferee(BaseStatsReferee):
810
+ __tablename__ = 'division_stats_weekly_referee'
811
+ division_id = db.Column(db.Integer, db.ForeignKey('divisions.id'), nullable=False)
812
+
813
+ @declared_attr
814
+ def aggregation_id(cls):
815
+ return cls.division_id
816
+
817
+ @declared_attr
818
+ def aggregation_type(cls):
819
+ return 'division_weekly'
820
+
821
+ class OrgStatsDailyScorekeeper(BaseStatsScorekeeper):
822
+ __tablename__ = 'org_stats_daily_scorekeeper'
823
+ org_id = db.Column(db.Integer, db.ForeignKey('organizations.id'), nullable=False)
824
+
825
+ @declared_attr
826
+ def aggregation_id(cls):
827
+ return cls.org_id
828
+
829
+ @declared_attr
830
+ def aggregation_type(cls):
831
+ return 'org_daily'
832
+
833
+ class OrgStatsWeeklyScorekeeper(BaseStatsScorekeeper):
834
+ __tablename__ = 'org_stats_weekly_scorekeeper'
835
+ org_id = db.Column(db.Integer, db.ForeignKey('organizations.id'), nullable=False)
836
+
837
+ @declared_attr
838
+ def aggregation_id(cls):
839
+ return cls.org_id
840
+
841
+ @declared_attr
842
+ def aggregation_type(cls):
843
+ return 'org_weekly'
844
+
845
+ class DivisionStatsDailyScorekeeper(BaseStatsScorekeeper):
846
+ __tablename__ = 'division_stats_daily_scorekeeper'
847
+ division_id = db.Column(db.Integer, db.ForeignKey('divisions.id'), nullable=False)
848
+
849
+ @declared_attr
850
+ def aggregation_id(cls):
851
+ return cls.division_id
852
+
853
+ @declared_attr
854
+ def aggregation_type(cls):
855
+ return 'division_daily'
856
+
857
+ class DivisionStatsWeeklyScorekeeper(BaseStatsScorekeeper):
858
+ __tablename__ = 'division_stats_weekly_scorekeeper'
859
+ division_id = db.Column(db.Integer, db.ForeignKey('divisions.id'), nullable=False)
860
+
861
+ @declared_attr
862
+ def aggregation_id(cls):
863
+ return cls.division_id
864
+
865
+ @declared_attr
866
+ def aggregation_type(cls):
867
+ return 'division_weekly'
868
+
869
+ # # MANUAL AMENDS HAPPEN HERE :)
870
+ # from db_connection import create_session
871
+ # session = create_session("sharksice")
872
+
873
+ # # Update org_id to 1 for all records in the Division table
874
+ # session.query(Organization).filter(Organization.id == 3).update({Organization.alias: 'caha'})
875
+
876
+ # # Commit the changes to the database
877
+ # session.commit()
878
+
879
+
880
+ # print("Updated!")
@@ -1,12 +1,18 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: hockey-blast-common-lib
3
- Version: 0.1.2
3
+ Version: 0.1.4
4
4
  Summary: Common library for shared functionality and DB models
5
+ Home-page: UNKNOWN
5
6
  Author: Pavel Kletskov
6
7
  Author-email: kletskov@gmail.com
8
+ License: UNKNOWN
9
+ Platform: UNKNOWN
7
10
  Requires-Python: >=3.7
8
11
  Requires-Dist: setuptools
9
12
  Requires-Dist: Flask-SQLAlchemy
10
13
  Requires-Dist: SQLAlchemy
11
14
  Requires-Dist: requests
12
15
  Requires-Dist: psycopg2
16
+
17
+ UNKNOWN
18
+
@@ -0,0 +1,8 @@
1
+ hockey_blast_common_lib/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
+ hockey_blast_common_lib/db_connection.py,sha256=4bN9pLynzOhd_9_u0bvQjgmE0qvkKHoOA95Ga3e_x7g,1361
3
+ hockey_blast_common_lib/db_utils.py,sha256=1EMGUEQhtuMFWNyBxMwQUm4Kx0j4bQqaKr-hLg6hdik,594
4
+ hockey_blast_common_lib/models.py,sha256=Sfq1dwaDx4fQpfd66o1R_3AyRNKv34vjnvY4B-ebqg8,33910
5
+ hockey_blast_common_lib-0.1.4.dist-info/METADATA,sha256=vpzfgF_otWS05bbwmyKNC7aKlAWIzL0jqGGseMtyRok,405
6
+ hockey_blast_common_lib-0.1.4.dist-info/WHEEL,sha256=tZoeGjtWxWRfdplE7E3d45VPlLNQnvbKiYnx7gwAy8A,92
7
+ hockey_blast_common_lib-0.1.4.dist-info/top_level.txt,sha256=wIR4LIkE40npoA2QlOdfCYlgFeGbsHR8Z6r0h46Vtgc,24
8
+ hockey_blast_common_lib-0.1.4.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (75.6.0)
2
+ Generator: bdist_wheel (0.45.1)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
@@ -0,0 +1 @@
1
+ hockey_blast_common_lib
@@ -1,5 +0,0 @@
1
- hockey-blast-common-lib/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
- hockey_blast_common_lib-0.1.2.dist-info/METADATA,sha256=4yAJSN_2Vll3TB55cVKykAunwsO3FeEtgDiFKWw8FRw,341
3
- hockey_blast_common_lib-0.1.2.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
4
- hockey_blast_common_lib-0.1.2.dist-info/top_level.txt,sha256=wqIVJjThx62twLL6c4ze4VsRuDhL_F8YpsU0F3HGA6E,24
5
- hockey_blast_common_lib-0.1.2.dist-info/RECORD,,
@@ -1 +0,0 @@
1
- hockey-blast-common-lib