wsba-hockey 1.0.4__py3-none-any.whl → 1.0.5__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.
- wsba_hockey/__init__.py +1 -1
- wsba_hockey/evidence/weakside-breakout/wsba_nhl_apps/wsba_nhl_apps/game_stats/app.py +0 -1
- wsba_hockey/tools/agg.py +1 -1
- wsba_hockey/tools/plotting.py +13 -8
- wsba_hockey/tools/scraping.py +6 -6
- wsba_hockey/tools/xg_model.py +18 -10
- wsba_hockey/wsba_main.py +18 -14
- {wsba_hockey-1.0.4.dist-info → wsba_hockey-1.0.5.dist-info}/METADATA +1 -1
- {wsba_hockey-1.0.4.dist-info → wsba_hockey-1.0.5.dist-info}/RECORD +12 -12
- {wsba_hockey-1.0.4.dist-info → wsba_hockey-1.0.5.dist-info}/WHEEL +0 -0
- {wsba_hockey-1.0.4.dist-info → wsba_hockey-1.0.5.dist-info}/licenses/LICENSE +0 -0
- {wsba_hockey-1.0.4.dist-info → wsba_hockey-1.0.5.dist-info}/top_level.txt +0 -0
wsba_hockey/__init__.py
CHANGED
@@ -1 +1 @@
|
|
1
|
-
from .wsba_main import nhl_scrape_game,nhl_scrape_schedule,nhl_scrape_season,nhl_scrape_seasons_info,nhl_scrape_standings,nhl_scrape_roster,nhl_scrape_draft_rankings,nhl_scrape_prospects,nhl_calculate_stats,nhl_shooting_impacts,nhl_plot_skaters_shots,nhl_plot_games,repo_load_rosters,repo_load_schedule,repo_load_teaminfo,repo_load_pbp,repo_load_seasons
|
1
|
+
from wsba_hockey.wsba_main import nhl_scrape_game,nhl_scrape_schedule,nhl_scrape_season,nhl_scrape_seasons_info,nhl_scrape_standings,nhl_scrape_roster,nhl_scrape_draft_rankings,nhl_scrape_prospects,nhl_calculate_stats,nhl_shooting_impacts,nhl_apply_xG,nhl_plot_skaters_shots,nhl_plot_games,repo_load_rosters,repo_load_schedule,repo_load_teaminfo,repo_load_pbp,repo_load_seasons
|
wsba_hockey/tools/agg.py
CHANGED
wsba_hockey/tools/plotting.py
CHANGED
@@ -1,14 +1,16 @@
|
|
1
1
|
import matplotlib.pyplot as plt
|
2
|
-
import matplotlib.image as mpimg
|
3
2
|
import numpy as np
|
4
3
|
import pandas as pd
|
5
|
-
from scipy.interpolate import griddata
|
6
|
-
from scipy.ndimage import gaussian_filter
|
7
|
-
import urllib.request
|
8
|
-
import PIL
|
9
|
-
from .xg_model import *
|
10
4
|
from hockey_rink import NHLRink
|
11
5
|
from hockey_rink import CircularImage
|
6
|
+
from scipy.interpolate import griddata
|
7
|
+
from scipy.ndimage import gaussian_filter
|
8
|
+
from wsba_hockey.tools.xg_model import *
|
9
|
+
|
10
|
+
### PLOTTING FUNCTIONS ###
|
11
|
+
# Provided in this file are basic plotting functions for the WSBA Hockey Python package. #
|
12
|
+
|
13
|
+
## GLOBAL VARIABLES ##
|
12
14
|
|
13
15
|
event_markers = {
|
14
16
|
'faceoff':'X',
|
@@ -21,6 +23,9 @@ event_markers = {
|
|
21
23
|
'takeaway':'2',
|
22
24
|
}
|
23
25
|
|
26
|
+
dir = os.path.dirname(os.path.realpath(__file__))
|
27
|
+
info_path = os.path.join(dir,'teaminfo\\nhl_teaminfo.csv')
|
28
|
+
|
24
29
|
def wsba_rink(display_range='offense',rotation = 0):
|
25
30
|
img = 'tools/utils/wsba.png'
|
26
31
|
rink = NHLRink(center_logo={
|
@@ -81,7 +86,7 @@ def plot_skater_shots(pbp, player, season, team, strengths, title = None, marker
|
|
81
86
|
pbp = prep_plot_data(pbp,shots,strengths,marker_dict)
|
82
87
|
pbp = pbp.loc[(pbp['season'].astype(str)==season)&((pbp['away_team_abbr']==team)|(pbp['home_team_abbr']==team))]
|
83
88
|
|
84
|
-
team_data = pd.read_csv(
|
89
|
+
team_data = pd.read_csv(info_path)
|
85
90
|
team_color = list(team_data.loc[team_data['WSBA']==f'{team}{season}','Primary Color'])[0]
|
86
91
|
team_color_2nd = list(team_data.loc[team_data['WSBA']==f'{team}{season}','Secondary Color'])[0]
|
87
92
|
|
@@ -115,7 +120,7 @@ def plot_game_events(pbp,game_id,events,strengths,marker_dict=event_markers,team
|
|
115
120
|
date = list(pbp['game_date'])[0]
|
116
121
|
season = list(pbp['season'])[0]
|
117
122
|
|
118
|
-
team_data = pd.read_csv(
|
123
|
+
team_data = pd.read_csv(info_path)
|
119
124
|
team_info ={
|
120
125
|
'away_color':'#000000' if list(team_data.loc[team_data['WSBA']==f'{away_abbr}{season}','Secondary Color'])[0]=='#FFFFFF' else list(team_data.loc[team_data['WSBA']==f'{away_abbr}{season}',f'{team_colors['away'].capitalize()} Color'])[0],
|
121
126
|
'home_color': list(team_data.loc[team_data['WSBA']==f'{home_abbr}{season}',f'{team_colors['home'].capitalize()} Color'])[0],
|
wsba_hockey/tools/scraping.py
CHANGED
@@ -1,12 +1,12 @@
|
|
1
1
|
import re
|
2
|
-
from bs4 import BeautifulSoup
|
3
|
-
import requests as rs
|
4
|
-
import json as json_lib
|
5
|
-
from .utils.shared import *
|
6
|
-
import numpy as np
|
7
|
-
import pandas as pd
|
8
2
|
import warnings
|
9
3
|
import os
|
4
|
+
import numpy as np
|
5
|
+
import pandas as pd
|
6
|
+
import requests as rs
|
7
|
+
import json as json_lib
|
8
|
+
from bs4 import BeautifulSoup
|
9
|
+
from wsba_hockey.tools.utils.shared import *
|
10
10
|
warnings.filterwarnings('ignore')
|
11
11
|
|
12
12
|
### SCRAPING FUNCTIONS ###
|
wsba_hockey/tools/xg_model.py
CHANGED
@@ -1,13 +1,14 @@
|
|
1
|
+
import joblib
|
2
|
+
import os
|
1
3
|
import pandas as pd
|
2
4
|
import numpy as np
|
3
5
|
import xgboost as xgb
|
4
6
|
import scipy.sparse as sp
|
5
|
-
import
|
6
|
-
import
|
7
|
-
import
|
7
|
+
import wsba_hockey.wsba_main as wsba
|
8
|
+
import wsba_hockey.tools.scraping as scraping
|
9
|
+
import matplotlib.pyplot as plt
|
8
10
|
from sklearn.calibration import calibration_curve
|
9
11
|
from sklearn.metrics import roc_curve, auc
|
10
|
-
import matplotlib.pyplot as plt
|
11
12
|
|
12
13
|
### XG_MODEL FUNCTIONS ###
|
13
14
|
# Provided in this file are functions vital to the goal prediction model in the WSBA Hockey Python package. #
|
@@ -78,12 +79,18 @@ strengths = ['3v3',
|
|
78
79
|
'6v4',
|
79
80
|
'6v5']
|
80
81
|
|
82
|
+
dir = os.path.dirname(os.path.realpath(__file__))
|
83
|
+
roster_path = os.path.join(dir,'rosters\\nhl_rosters.csv')
|
84
|
+
xg_model_path = os.path.join(dir,'xg_model\\wsba_xg.joblib')
|
85
|
+
test_path = os.path.join(dir,'xg_model\\testing\\xg_model_training_runs.csv')
|
86
|
+
cv_path = os.path.join(dir,'xg_model\\testing\\xg_model_cv_runs.csv')
|
87
|
+
|
81
88
|
def fix_players(pbp):
|
82
89
|
#Add/fix player info for shooters and goaltenders
|
83
90
|
print('Adding player info to pbp...')
|
84
91
|
|
85
92
|
#Load roster and all players
|
86
|
-
roster = pd.read_csv(
|
93
|
+
roster = pd.read_csv(roster_path).drop_duplicates(['id'])[['fullName','id','shootsCatches']]
|
87
94
|
|
88
95
|
#Some players are missing from the roster file (generally in newer seasons); add these manually
|
89
96
|
miss = list(pbp.loc[~(pbp['event_player_1_id'].isin(list(roster['id'])))&(pbp['event_player_1_id'].notna()),'event_player_1_id'].drop_duplicates())
|
@@ -111,6 +118,7 @@ def fix_players(pbp):
|
|
111
118
|
|
112
119
|
def prep_xG_data(data):
|
113
120
|
#Prep data for xG training and calculation
|
121
|
+
data = fix_players(data)
|
114
122
|
|
115
123
|
#Informal groupby
|
116
124
|
data = data.sort_values(by=['season','game_id','period','seconds_elapsed','event_num'])
|
@@ -168,7 +176,7 @@ def prep_xG_data(data):
|
|
168
176
|
#Return: pbp data prepared to train and calculate the xG model
|
169
177
|
return data
|
170
178
|
|
171
|
-
def wsba_xG(pbp, hypertune = False, train = False, model_path =
|
179
|
+
def wsba_xG(pbp, hypertune = False, train = False, model_path = xg_model_path, train_runs = 20, cv_runs = 20):
|
172
180
|
#Train and calculate the WSBA Expected Goals model
|
173
181
|
|
174
182
|
#Add index for future merging
|
@@ -258,7 +266,7 @@ def wsba_xG(pbp, hypertune = False, train = False, model_path = "tools/xg_model/
|
|
258
266
|
# Arrange to get best run
|
259
267
|
best_all = best_all.sort_values(by="auc", ascending=False)
|
260
268
|
|
261
|
-
best_all.to_csv(
|
269
|
+
best_all.to_csv(test_path,index=False)
|
262
270
|
|
263
271
|
# Final parameters
|
264
272
|
param_7_EV = {
|
@@ -303,11 +311,11 @@ def wsba_xG(pbp, hypertune = False, train = False, model_path = "tools/xg_model/
|
|
303
311
|
|
304
312
|
# Clean results and sort to find the number of rounds to use and seed
|
305
313
|
cv_final = cv_test.sort_values(by="AUC", ascending=False)
|
306
|
-
cv_final.to_csv(
|
314
|
+
cv_final.to_csv(cv_path,index=False)
|
307
315
|
else:
|
308
316
|
# Load previous parameters
|
309
|
-
best_all = pd.read_csv(
|
310
|
-
cv_final = pd.read_csv(
|
317
|
+
best_all = pd.read_csv(test_path)
|
318
|
+
cv_final = pd.read_csv(cv_path)
|
311
319
|
|
312
320
|
print('Loaded hyperparameters...')
|
313
321
|
# Final parameters
|
wsba_hockey/wsba_main.py
CHANGED
@@ -1,12 +1,13 @@
|
|
1
|
+
import random
|
2
|
+
import os
|
1
3
|
import requests as rs
|
2
4
|
import pandas as pd
|
3
5
|
import time
|
4
|
-
import random
|
5
6
|
from datetime import datetime, timedelta, date
|
6
|
-
from tools.scraping import *
|
7
|
-
from tools.xg_model import *
|
8
|
-
from tools.agg import *
|
9
|
-
from tools.plotting import *
|
7
|
+
from .tools.scraping import *
|
8
|
+
from .tools.xg_model import *
|
9
|
+
from .tools.agg import *
|
10
|
+
from .tools.plotting import *
|
10
11
|
|
11
12
|
### WSBA HOCKEY ###
|
12
13
|
## Provided below are all integral functions in the WSBA Hockey Python package. ##
|
@@ -62,7 +63,7 @@ per_sixty = ['Fi','xGi','Gi','A1','A2','P1','P','OZF','NZF','DZF','FF','FA','xGF
|
|
62
63
|
|
63
64
|
#Some games in the API are specifically known to cause errors in scraping.
|
64
65
|
#This list is updated as frequently as necessary
|
65
|
-
known_probs ={
|
66
|
+
known_probs = {
|
66
67
|
'2007020011':'Missing shifts data for game between Chicago and Minnesota.',
|
67
68
|
'2007021178':'Game between the Bruins and Sabres is missing data after the second period, for some reason.',
|
68
69
|
'2008020259':'HTML data is completely missing for this game.',
|
@@ -105,6 +106,11 @@ standings_end = {
|
|
105
106
|
|
106
107
|
events = ['faceoff','hit','giveaway','takeaway','blocked-shot','missed-shot','shot-on-goal','goal','penalty']
|
107
108
|
|
109
|
+
dir = os.path.dirname(os.path.realpath(__file__))
|
110
|
+
schedule_path = os.path.join(dir,'tools\\schedule\\schedule.csv')
|
111
|
+
info_path = os.path.join(dir,'tools\\teaminfo\\nhl_teaminfo.csv')
|
112
|
+
default_roster = os.path.join(dir,'tools\\rosters\\nhl_rosters.csv')
|
113
|
+
|
108
114
|
## SCRAPE FUNCTIONS ##
|
109
115
|
def nhl_scrape_game(game_ids,split_shifts = False, remove = ['period-start','period-end','challenge','stoppage','shootout-complete','game-end'],verbose = False, sources = False, errors = False):
|
110
116
|
#Given a set of game_ids (NHL API), return complete play-by-play information as requested
|
@@ -296,7 +302,7 @@ def nhl_scrape_schedule(season,start = "09-01", end = "08-01"):
|
|
296
302
|
#Return: specificed schedule data
|
297
303
|
return df
|
298
304
|
|
299
|
-
def nhl_scrape_season(season,split_shifts = False, season_types = [2,3], remove = ['period-start','period-end','game-end','challenge','stoppage'], start = "09-01", end = "08-01", local=False, local_path =
|
305
|
+
def nhl_scrape_season(season,split_shifts = False, season_types = [2,3], remove = ['period-start','period-end','game-end','challenge','stoppage'], start = "09-01", end = "08-01", local=False, local_path = schedule_path, verbose = False, sources = False, errors = False):
|
300
306
|
#Given season, scrape all play-by-play occuring within the season
|
301
307
|
# param 'season' - NHL season to scrape
|
302
308
|
# param 'split_shifts' - boolean which splits pbp and shift events if true
|
@@ -402,7 +408,7 @@ def nhl_scrape_roster(season):
|
|
402
408
|
#Given a nhl season, return rosters for all participating teams
|
403
409
|
# param 'season' - NHL season to scrape
|
404
410
|
print("Scrpaing rosters for the "+ season + "season...")
|
405
|
-
teaminfo = pd.read_csv(
|
411
|
+
teaminfo = pd.read_csv(info_path)
|
406
412
|
|
407
413
|
rosts = []
|
408
414
|
for team in list(teaminfo['Team']):
|
@@ -503,8 +509,6 @@ def nhl_apply_xG(pbp):
|
|
503
509
|
#param 'pbp' - play-by-play data
|
504
510
|
|
505
511
|
print(f'Applying WSBA xG to model with seasons: {pbp['season'].drop_duplicates().to_list()}')
|
506
|
-
#Fix player data
|
507
|
-
#pbp = fix_players(pbp)
|
508
512
|
|
509
513
|
#Apply xG model
|
510
514
|
pbp = wsba_xG(pbp)
|
@@ -861,7 +865,7 @@ def nhl_shooting_impacts(agg,type):
|
|
861
865
|
#Return: skater stats with shooting impacts
|
862
866
|
return df
|
863
867
|
|
864
|
-
def nhl_calculate_stats(pbp,type,season_types,game_strength,split_game=False,roster_path=
|
868
|
+
def nhl_calculate_stats(pbp,type,season_types,game_strength,split_game=False,roster_path=default_roster,shot_impact=False):
|
865
869
|
#Given play-by-play, seasonal information, game_strength, rosters, and xG model, return aggregated stats
|
866
870
|
# param 'pbp' - play-by-play dataframe
|
867
871
|
# param 'type' - type of stats to calculate ('skater', 'goalie', or 'team')
|
@@ -1179,7 +1183,7 @@ def repo_load_rosters(seasons = []):
|
|
1179
1183
|
#Returns roster data from repository
|
1180
1184
|
# param 'seasons' - list of seasons to include
|
1181
1185
|
|
1182
|
-
data = pd.read_csv(
|
1186
|
+
data = pd.read_csv(default_roster)
|
1183
1187
|
if len(seasons)>0:
|
1184
1188
|
data = data.loc[data['season'].isin(seasons)]
|
1185
1189
|
|
@@ -1189,7 +1193,7 @@ def repo_load_schedule(seasons = []):
|
|
1189
1193
|
#Returns schedule data from repository
|
1190
1194
|
# param 'seasons' - list of seasons to include
|
1191
1195
|
|
1192
|
-
data = pd.read_csv(
|
1196
|
+
data = pd.read_csv(schedule_path)
|
1193
1197
|
if len(seasons)>0:
|
1194
1198
|
data = data.loc[data['season'].isin(seasons)]
|
1195
1199
|
|
@@ -1198,7 +1202,7 @@ def repo_load_schedule(seasons = []):
|
|
1198
1202
|
def repo_load_teaminfo():
|
1199
1203
|
#Returns team data from repository
|
1200
1204
|
|
1201
|
-
return pd.read_csv(
|
1205
|
+
return pd.read_csv(info_path)
|
1202
1206
|
|
1203
1207
|
def repo_load_pbp(seasons = []):
|
1204
1208
|
#Returns play-by-play data from repository
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: wsba_hockey
|
3
|
-
Version: 1.0.
|
3
|
+
Version: 1.0.5
|
4
4
|
Summary: WeakSide Breakout's complete Python package of access to hockey data, primairly including the scraping of National Hockey League schedule, play-by-play, and shifts information.
|
5
5
|
Author-email: Owen Singh <owenbksingh@gmail.com>
|
6
6
|
Project-URL: Homepage, https://github.com/owensingh38/wsba_hockey/
|
@@ -1,7 +1,7 @@
|
|
1
|
-
wsba_hockey/__init__.py,sha256=
|
1
|
+
wsba_hockey/__init__.py,sha256=yfr8z5PA503iaIQv30ngancwT_WnsuK-tZETKlHcI0M,377
|
2
2
|
wsba_hockey/data_pipelines.py,sha256=tqAnUL8xf-K2jYG1zeuau5GzRlgTiaHkXwER481Jkb4,7952
|
3
3
|
wsba_hockey/workspace.py,sha256=B--BrXrY5BL3AXQYnsy4pHQGv2LG_82VtqZT0ANab30,1088
|
4
|
-
wsba_hockey/wsba_main.py,sha256=
|
4
|
+
wsba_hockey/wsba_main.py,sha256=NPZvcL3VTi3pMq2jd9rlgyfVgXetrwSpRJehbvldWr8,54247
|
5
5
|
wsba_hockey/evidence/weakside-breakout/node_modules/duckdb/vendor.py,sha256=lmu0TB0rIYkAuV9-csFJgW-1hJojso_-EZpEoorUUKM,4949
|
6
6
|
wsba_hockey/evidence/weakside-breakout/node_modules/flatted/python/flatted.py,sha256=ke8FuEflns-WlphCcQ9CC0qJqWqX3zEEuak74o6rgE8,3879
|
7
7
|
wsba_hockey/evidence/weakside-breakout/node_modules/flatted/python/test.py,sha256=uTOn6HJd7KeY_PTRvvufv60dmvON3KWp3nnqACj8IlA,2129
|
@@ -104,7 +104,7 @@ wsba_hockey/evidence/weakside-breakout/node_modules/sqlite3/node_modules/node-gy
|
|
104
104
|
wsba_hockey/evidence/weakside-breakout/node_modules/sqlite3/node_modules/node-gyp/gyp/tools/pretty_sln.py,sha256=b_Fxm-SXUCPL3Tix4EyNwZNmQ-zkeRIFFmuL0R5wFhw,5482
|
105
105
|
wsba_hockey/evidence/weakside-breakout/node_modules/sqlite3/node_modules/node-gyp/gyp/tools/pretty_vcproj.py,sha256=AwQrxK1F-jhjsbbT35XQjrvWNbc3IBFaKXoJogqMh_o,10633
|
106
106
|
wsba_hockey/evidence/weakside-breakout/node_modules/sqlite3/node_modules/node-gyp/test/fixtures/test-charmap.py,sha256=5raXzaQnO2eJnrlFtlDtWftryhZX7Fj0amFW3hdSnhE,547
|
107
|
-
wsba_hockey/evidence/weakside-breakout/wsba_nhl_apps/wsba_nhl_apps/game_stats/app.py,sha256=
|
107
|
+
wsba_hockey/evidence/weakside-breakout/wsba_nhl_apps/wsba_nhl_apps/game_stats/app.py,sha256=ay8NzjfC_2bZ38tOlXKDNpF35_KPGsl6Adx13ls6yWg,12619
|
108
108
|
wsba_hockey/evidence/weakside-breakout/wsba_nhl_apps/wsba_nhl_apps/game_stats/name_fix.py,sha256=v7IN4JWrudeFuIsBdjLLlHsr9wU65jYi9-34pI_ZpoM,1488
|
109
109
|
wsba_hockey/evidence/weakside-breakout/wsba_nhl_apps/wsba_nhl_apps/heatmaps/app.py,sha256=53jaUv8LOerKHWD-0d-EoxogEb83YFVm6KiRdbSLlVA,4254
|
110
110
|
wsba_hockey/evidence/weakside-breakout/wsba_nhl_apps/wsba_nhl_apps/heatmaps/plot.py,sha256=nTVk41u8l6M3czVeyJ-3edmiIAzXY-By7meGfl5C_kE,4505
|
@@ -119,17 +119,17 @@ wsba_hockey/evidence/weakside-breakout/wsba_nhl_apps/wsba_nhl_apps/skater/app.py
|
|
119
119
|
wsba_hockey/evidence/weakside-breakout/wsba_nhl_apps/wsba_nhl_apps/skater/plot.py,sha256=xDHLM_jcXSi5NBcQ7tWeF9yzcjNiOrHYD7C8sBfynFo,1860
|
120
120
|
wsba_hockey/evidence/weakside-breakout/wsba_nhl_apps/wsba_nhl_apps/skater/rink_plot.py,sha256=bvU7enxqxGwo2QThNabSo1qB2vltS_0HjF95ZOYZ98I,11993
|
121
121
|
wsba_hockey/tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
122
|
-
wsba_hockey/tools/agg.py,sha256=
|
123
|
-
wsba_hockey/tools/plotting.py,sha256=
|
124
|
-
wsba_hockey/tools/scraping.py,sha256=
|
125
|
-
wsba_hockey/tools/xg_model.py,sha256=
|
122
|
+
wsba_hockey/tools/agg.py,sha256=SYZDykUQFygDfRaazlBMKcfs_1eYP7GTJNpUnNKHH-8,21409
|
123
|
+
wsba_hockey/tools/plotting.py,sha256=2oq45rLGg6BjeSHP9uCJeEXKlXjifbAoWDWjsdEsSv0,5999
|
124
|
+
wsba_hockey/tools/scraping.py,sha256=rmypleknqfS9gU-JuB5VQn5yDVwnNastoDL3YDeUCVk,45261
|
125
|
+
wsba_hockey/tools/xg_model.py,sha256=nOr_2RBijLgPmJ0TTs4wbSsORYmRqWCKRjLKDm7sAhI,18342
|
126
126
|
wsba_hockey/tools/archive/old_scraping.py,sha256=hEjMI1RtfeZnf0RBiJFI38oXkLZ3WofeH5xqcF4pzgM,49585
|
127
127
|
wsba_hockey/tools/utils/__init__.py,sha256=vccXhOtzARoR99fmEWU1OEI3qCIdQ9Z42AlRA_BUhrs,114
|
128
128
|
wsba_hockey/tools/utils/config.py,sha256=D3Uk05-YTyrhfReMTTLfNI3HN_rON2uo_CDE9oER3Lg,351
|
129
129
|
wsba_hockey/tools/utils/save_pages.py,sha256=CsyL_0n-b-4pJoUauwU3HpnCO6n69-RlBMJQBd_qGDc,4979
|
130
130
|
wsba_hockey/tools/utils/shared.py,sha256=dH_JwZfia5fib8rksy5sW-mBp0pluBPvw37Vdr8Kap0,14211
|
131
|
-
wsba_hockey-1.0.
|
132
|
-
wsba_hockey-1.0.
|
133
|
-
wsba_hockey-1.0.
|
134
|
-
wsba_hockey-1.0.
|
135
|
-
wsba_hockey-1.0.
|
131
|
+
wsba_hockey-1.0.5.dist-info/licenses/LICENSE,sha256=Nr_Um1Pd5FQJTWWgm7maZArdtYMbDhzXYSwyJIZDGik,1114
|
132
|
+
wsba_hockey-1.0.5.dist-info/METADATA,sha256=jUatVdsenWHfx7yu0OwIYqZGYm2yvttsvCJMu5MEkYs,3542
|
133
|
+
wsba_hockey-1.0.5.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
134
|
+
wsba_hockey-1.0.5.dist-info/top_level.txt,sha256=acU7s3x-RZC1zGiqCOmO0g267iqCg34lzIfdmYxxGmQ,12
|
135
|
+
wsba_hockey-1.0.5.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|