wsba-hockey 1.0.6__tar.gz → 1.1.1__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.
- {wsba_hockey-1.0.6/src/wsba_hockey.egg-info → wsba_hockey-1.1.1}/PKG-INFO +1 -1
- {wsba_hockey-1.0.6 → wsba_hockey-1.1.1}/pyproject.toml +1 -1
- wsba_hockey-1.1.1/src/wsba_hockey/api/api/index.py +129 -0
- wsba_hockey-1.1.1/src/wsba_hockey/api/api/main.py +4 -0
- {wsba_hockey-1.0.6/src/wsba_hockey → wsba_hockey-1.1.1/src/wsba_hockey/api/api}/tools/plotting.py +3 -3
- {wsba_hockey-1.0.6/src/wsba_hockey → wsba_hockey-1.1.1/src/wsba_hockey/api/api}/tools/scraping.py +7 -3
- wsba_hockey-1.1.1/src/wsba_hockey/api/api/wsba_main.py +1213 -0
- {wsba_hockey-1.0.6 → wsba_hockey-1.1.1}/src/wsba_hockey/data_pipelines.py +71 -8
- {wsba_hockey-1.0.6 → wsba_hockey-1.1.1}/src/wsba_hockey/evidence/weakside-breakout/wsba_nhl_apps/wsba_nhl_apps/game_stats/app.py +6 -5
- wsba_hockey-1.1.1/src/wsba_hockey/evidence/weakside-breakout/wsba_nhl_apps/wsba_nhl_apps/goalie/app.py +101 -0
- wsba_hockey-1.1.1/src/wsba_hockey/evidence/weakside-breakout/wsba_nhl_apps/wsba_nhl_apps/goalie/plot.py +71 -0
- {wsba_hockey-1.0.6 → wsba_hockey-1.1.1}/src/wsba_hockey/evidence/weakside-breakout/wsba_nhl_apps/wsba_nhl_apps/heatmaps/app.py +1 -1
- {wsba_hockey-1.0.6 → wsba_hockey-1.1.1}/src/wsba_hockey/evidence/weakside-breakout/wsba_nhl_apps/wsba_nhl_apps/heatmaps/plot.py +2 -0
- {wsba_hockey-1.0.6/src/wsba_hockey/evidence/weakside-breakout/wsba_nhl_apps/wsba_nhl_apps/skater → wsba_hockey-1.1.1/src/wsba_hockey/evidence/weakside-breakout/wsba_nhl_apps/wsba_nhl_apps/heatmaps}/rink_plot.py +1 -1
- {wsba_hockey-1.0.6 → wsba_hockey-1.1.1}/src/wsba_hockey/evidence/weakside-breakout/wsba_nhl_apps/wsba_nhl_apps/matchups/app.py +3 -3
- {wsba_hockey-1.0.6 → wsba_hockey-1.1.1}/src/wsba_hockey/evidence/weakside-breakout/wsba_nhl_apps/wsba_nhl_apps/matchups/plot.py +2 -0
- {wsba_hockey-1.0.6 → wsba_hockey-1.1.1}/src/wsba_hockey/evidence/weakside-breakout/wsba_nhl_apps/wsba_nhl_apps/matchups/rink_plot.py +1 -1
- {wsba_hockey-1.0.6 → wsba_hockey-1.1.1}/src/wsba_hockey/evidence/weakside-breakout/wsba_nhl_apps/wsba_nhl_apps/pbp/app.py +44 -28
- {wsba_hockey-1.0.6 → wsba_hockey-1.1.1}/src/wsba_hockey/evidence/weakside-breakout/wsba_nhl_apps/wsba_nhl_apps/pbp/plot.py +12 -3
- {wsba_hockey-1.0.6 → wsba_hockey-1.1.1}/src/wsba_hockey/evidence/weakside-breakout/wsba_nhl_apps/wsba_nhl_apps/pbp/rink_plot.py +1 -1
- {wsba_hockey-1.0.6 → wsba_hockey-1.1.1}/src/wsba_hockey/evidence/weakside-breakout/wsba_nhl_apps/wsba_nhl_apps/skater/app.py +1 -1
- {wsba_hockey-1.0.6 → wsba_hockey-1.1.1}/src/wsba_hockey/evidence/weakside-breakout/wsba_nhl_apps/wsba_nhl_apps/skater/plot.py +5 -4
- wsba_hockey-1.1.1/src/wsba_hockey/evidence/weakside-breakout/wsba_nhl_apps/wsba_nhl_apps/skater/rink_plot.py +245 -0
- wsba_hockey-1.1.1/src/wsba_hockey/evidence/weakside-breakout/wsba_nhl_apps/wsba_nhl_apps/team_heatmaps/app.py +103 -0
- wsba_hockey-1.1.1/src/wsba_hockey/evidence/weakside-breakout/wsba_nhl_apps/wsba_nhl_apps/team_heatmaps/plot.py +95 -0
- wsba_hockey-1.1.1/src/wsba_hockey/evidence/weakside-breakout/wsba_nhl_apps/wsba_nhl_apps/team_heatmaps/rink_plot.py +245 -0
- wsba_hockey-1.1.1/src/wsba_hockey/flask/app.py +77 -0
- wsba_hockey-1.1.1/src/wsba_hockey/tools/__init__.py +0 -0
- wsba_hockey-1.1.1/src/wsba_hockey/tools/agg.py +374 -0
- wsba_hockey-1.1.1/src/wsba_hockey/tools/archive/old_scraping.py +1104 -0
- wsba_hockey-1.1.1/src/wsba_hockey/tools/plotting.py +144 -0
- wsba_hockey-1.1.1/src/wsba_hockey/tools/scraping.py +1000 -0
- wsba_hockey-1.1.1/src/wsba_hockey/tools/utils/__init__.py +1 -0
- wsba_hockey-1.1.1/src/wsba_hockey/tools/utils/config.py +14 -0
- wsba_hockey-1.1.1/src/wsba_hockey/tools/utils/save_pages.py +133 -0
- wsba_hockey-1.1.1/src/wsba_hockey/tools/utils/shared.py +450 -0
- wsba_hockey-1.1.1/src/wsba_hockey/tools/xg_model.py +455 -0
- wsba_hockey-1.1.1/src/wsba_hockey/workspace.py +51 -0
- {wsba_hockey-1.0.6 → wsba_hockey-1.1.1}/src/wsba_hockey/wsba_main.py +10 -17
- {wsba_hockey-1.0.6 → wsba_hockey-1.1.1/src/wsba_hockey.egg-info}/PKG-INFO +1 -1
- {wsba_hockey-1.0.6 → wsba_hockey-1.1.1}/src/wsba_hockey.egg-info/SOURCES.txt +20 -0
- wsba_hockey-1.0.6/src/wsba_hockey/workspace.py +0 -35
- {wsba_hockey-1.0.6 → wsba_hockey-1.1.1}/LICENSE +0 -0
- {wsba_hockey-1.0.6 → wsba_hockey-1.1.1}/README.md +0 -0
- {wsba_hockey-1.0.6 → wsba_hockey-1.1.1}/setup.cfg +0 -0
- {wsba_hockey-1.0.6 → wsba_hockey-1.1.1}/src/wsba_hockey/__init__.py +0 -0
- {wsba_hockey-1.0.6/src/wsba_hockey/evidence/weakside-breakout/node_modules/node-gyp/gyp/pylib/gyp/generator → wsba_hockey-1.1.1/src/wsba_hockey/api/api/tools}/__init__.py +0 -0
- {wsba_hockey-1.0.6/src/wsba_hockey → wsba_hockey-1.1.1/src/wsba_hockey/api/api}/tools/agg.py +0 -0
- {wsba_hockey-1.0.6/src/wsba_hockey → wsba_hockey-1.1.1/src/wsba_hockey/api/api}/tools/archive/old_scraping.py +0 -0
- {wsba_hockey-1.0.6/src/wsba_hockey → wsba_hockey-1.1.1/src/wsba_hockey/api/api}/tools/utils/__init__.py +0 -0
- {wsba_hockey-1.0.6/src/wsba_hockey → wsba_hockey-1.1.1/src/wsba_hockey/api/api}/tools/utils/config.py +0 -0
- {wsba_hockey-1.0.6/src/wsba_hockey → wsba_hockey-1.1.1/src/wsba_hockey/api/api}/tools/utils/save_pages.py +0 -0
- {wsba_hockey-1.0.6/src/wsba_hockey → wsba_hockey-1.1.1/src/wsba_hockey/api/api}/tools/utils/shared.py +0 -0
- {wsba_hockey-1.0.6/src/wsba_hockey → wsba_hockey-1.1.1/src/wsba_hockey/api/api}/tools/xg_model.py +0 -0
- {wsba_hockey-1.0.6 → wsba_hockey-1.1.1}/src/wsba_hockey/evidence/weakside-breakout/node_modules/duckdb/vendor.py +0 -0
- {wsba_hockey-1.0.6 → wsba_hockey-1.1.1}/src/wsba_hockey/evidence/weakside-breakout/node_modules/flatted/python/flatted.py +0 -0
- {wsba_hockey-1.0.6 → wsba_hockey-1.1.1}/src/wsba_hockey/evidence/weakside-breakout/node_modules/flatted/python/test.py +0 -0
- {wsba_hockey-1.0.6 → wsba_hockey-1.1.1}/src/wsba_hockey/evidence/weakside-breakout/node_modules/node-gyp/gyp/gyp_main.py +0 -0
- {wsba_hockey-1.0.6 → wsba_hockey-1.1.1}/src/wsba_hockey/evidence/weakside-breakout/node_modules/node-gyp/gyp/pylib/gyp/MSVSNew.py +0 -0
- {wsba_hockey-1.0.6 → wsba_hockey-1.1.1}/src/wsba_hockey/evidence/weakside-breakout/node_modules/node-gyp/gyp/pylib/gyp/MSVSProject.py +0 -0
- {wsba_hockey-1.0.6 → wsba_hockey-1.1.1}/src/wsba_hockey/evidence/weakside-breakout/node_modules/node-gyp/gyp/pylib/gyp/MSVSSettings.py +0 -0
- {wsba_hockey-1.0.6 → wsba_hockey-1.1.1}/src/wsba_hockey/evidence/weakside-breakout/node_modules/node-gyp/gyp/pylib/gyp/MSVSSettings_test.py +0 -0
- {wsba_hockey-1.0.6 → wsba_hockey-1.1.1}/src/wsba_hockey/evidence/weakside-breakout/node_modules/node-gyp/gyp/pylib/gyp/MSVSToolFile.py +0 -0
- {wsba_hockey-1.0.6 → wsba_hockey-1.1.1}/src/wsba_hockey/evidence/weakside-breakout/node_modules/node-gyp/gyp/pylib/gyp/MSVSUserFile.py +0 -0
- {wsba_hockey-1.0.6 → wsba_hockey-1.1.1}/src/wsba_hockey/evidence/weakside-breakout/node_modules/node-gyp/gyp/pylib/gyp/MSVSUtil.py +0 -0
- {wsba_hockey-1.0.6 → wsba_hockey-1.1.1}/src/wsba_hockey/evidence/weakside-breakout/node_modules/node-gyp/gyp/pylib/gyp/MSVSVersion.py +0 -0
- {wsba_hockey-1.0.6 → wsba_hockey-1.1.1}/src/wsba_hockey/evidence/weakside-breakout/node_modules/node-gyp/gyp/pylib/gyp/__init__.py +0 -0
- {wsba_hockey-1.0.6 → wsba_hockey-1.1.1}/src/wsba_hockey/evidence/weakside-breakout/node_modules/node-gyp/gyp/pylib/gyp/common.py +0 -0
- {wsba_hockey-1.0.6 → wsba_hockey-1.1.1}/src/wsba_hockey/evidence/weakside-breakout/node_modules/node-gyp/gyp/pylib/gyp/common_test.py +0 -0
- {wsba_hockey-1.0.6 → wsba_hockey-1.1.1}/src/wsba_hockey/evidence/weakside-breakout/node_modules/node-gyp/gyp/pylib/gyp/easy_xml.py +0 -0
- {wsba_hockey-1.0.6 → wsba_hockey-1.1.1}/src/wsba_hockey/evidence/weakside-breakout/node_modules/node-gyp/gyp/pylib/gyp/easy_xml_test.py +0 -0
- {wsba_hockey-1.0.6 → wsba_hockey-1.1.1}/src/wsba_hockey/evidence/weakside-breakout/node_modules/node-gyp/gyp/pylib/gyp/flock_tool.py +0 -0
- {wsba_hockey-1.0.6/src/wsba_hockey/evidence/weakside-breakout/node_modules/sqlite3 → wsba_hockey-1.1.1/src/wsba_hockey/evidence/weakside-breakout}/node_modules/node-gyp/gyp/pylib/gyp/generator/__init__.py +0 -0
- {wsba_hockey-1.0.6 → wsba_hockey-1.1.1}/src/wsba_hockey/evidence/weakside-breakout/node_modules/node-gyp/gyp/pylib/gyp/generator/analyzer.py +0 -0
- {wsba_hockey-1.0.6 → wsba_hockey-1.1.1}/src/wsba_hockey/evidence/weakside-breakout/node_modules/node-gyp/gyp/pylib/gyp/generator/android.py +0 -0
- {wsba_hockey-1.0.6 → wsba_hockey-1.1.1}/src/wsba_hockey/evidence/weakside-breakout/node_modules/node-gyp/gyp/pylib/gyp/generator/cmake.py +0 -0
- {wsba_hockey-1.0.6 → wsba_hockey-1.1.1}/src/wsba_hockey/evidence/weakside-breakout/node_modules/node-gyp/gyp/pylib/gyp/generator/compile_commands_json.py +0 -0
- {wsba_hockey-1.0.6 → wsba_hockey-1.1.1}/src/wsba_hockey/evidence/weakside-breakout/node_modules/node-gyp/gyp/pylib/gyp/generator/dump_dependency_json.py +0 -0
- {wsba_hockey-1.0.6 → wsba_hockey-1.1.1}/src/wsba_hockey/evidence/weakside-breakout/node_modules/node-gyp/gyp/pylib/gyp/generator/eclipse.py +0 -0
- {wsba_hockey-1.0.6 → wsba_hockey-1.1.1}/src/wsba_hockey/evidence/weakside-breakout/node_modules/node-gyp/gyp/pylib/gyp/generator/gypd.py +0 -0
- {wsba_hockey-1.0.6 → wsba_hockey-1.1.1}/src/wsba_hockey/evidence/weakside-breakout/node_modules/node-gyp/gyp/pylib/gyp/generator/gypsh.py +0 -0
- {wsba_hockey-1.0.6 → wsba_hockey-1.1.1}/src/wsba_hockey/evidence/weakside-breakout/node_modules/node-gyp/gyp/pylib/gyp/generator/make.py +0 -0
- {wsba_hockey-1.0.6 → wsba_hockey-1.1.1}/src/wsba_hockey/evidence/weakside-breakout/node_modules/node-gyp/gyp/pylib/gyp/generator/msvs.py +0 -0
- {wsba_hockey-1.0.6 → wsba_hockey-1.1.1}/src/wsba_hockey/evidence/weakside-breakout/node_modules/node-gyp/gyp/pylib/gyp/generator/msvs_test.py +0 -0
- {wsba_hockey-1.0.6 → wsba_hockey-1.1.1}/src/wsba_hockey/evidence/weakside-breakout/node_modules/node-gyp/gyp/pylib/gyp/generator/ninja.py +0 -0
- {wsba_hockey-1.0.6 → wsba_hockey-1.1.1}/src/wsba_hockey/evidence/weakside-breakout/node_modules/node-gyp/gyp/pylib/gyp/generator/ninja_test.py +0 -0
- {wsba_hockey-1.0.6 → wsba_hockey-1.1.1}/src/wsba_hockey/evidence/weakside-breakout/node_modules/node-gyp/gyp/pylib/gyp/generator/xcode.py +0 -0
- {wsba_hockey-1.0.6 → wsba_hockey-1.1.1}/src/wsba_hockey/evidence/weakside-breakout/node_modules/node-gyp/gyp/pylib/gyp/generator/xcode_test.py +0 -0
- {wsba_hockey-1.0.6 → wsba_hockey-1.1.1}/src/wsba_hockey/evidence/weakside-breakout/node_modules/node-gyp/gyp/pylib/gyp/input.py +0 -0
- {wsba_hockey-1.0.6 → wsba_hockey-1.1.1}/src/wsba_hockey/evidence/weakside-breakout/node_modules/node-gyp/gyp/pylib/gyp/input_test.py +0 -0
- {wsba_hockey-1.0.6 → wsba_hockey-1.1.1}/src/wsba_hockey/evidence/weakside-breakout/node_modules/node-gyp/gyp/pylib/gyp/mac_tool.py +0 -0
- {wsba_hockey-1.0.6 → wsba_hockey-1.1.1}/src/wsba_hockey/evidence/weakside-breakout/node_modules/node-gyp/gyp/pylib/gyp/msvs_emulation.py +0 -0
- {wsba_hockey-1.0.6 → wsba_hockey-1.1.1}/src/wsba_hockey/evidence/weakside-breakout/node_modules/node-gyp/gyp/pylib/gyp/ninja_syntax.py +0 -0
- {wsba_hockey-1.0.6 → wsba_hockey-1.1.1}/src/wsba_hockey/evidence/weakside-breakout/node_modules/node-gyp/gyp/pylib/gyp/simple_copy.py +0 -0
- {wsba_hockey-1.0.6 → wsba_hockey-1.1.1}/src/wsba_hockey/evidence/weakside-breakout/node_modules/node-gyp/gyp/pylib/gyp/win_tool.py +0 -0
- {wsba_hockey-1.0.6 → wsba_hockey-1.1.1}/src/wsba_hockey/evidence/weakside-breakout/node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.py +0 -0
- {wsba_hockey-1.0.6 → wsba_hockey-1.1.1}/src/wsba_hockey/evidence/weakside-breakout/node_modules/node-gyp/gyp/pylib/gyp/xcode_ninja.py +0 -0
- {wsba_hockey-1.0.6 → wsba_hockey-1.1.1}/src/wsba_hockey/evidence/weakside-breakout/node_modules/node-gyp/gyp/pylib/gyp/xcodeproj_file.py +0 -0
- {wsba_hockey-1.0.6 → wsba_hockey-1.1.1}/src/wsba_hockey/evidence/weakside-breakout/node_modules/node-gyp/gyp/pylib/gyp/xml_fix.py +0 -0
- {wsba_hockey-1.0.6 → wsba_hockey-1.1.1}/src/wsba_hockey/evidence/weakside-breakout/node_modules/node-gyp/gyp/test_gyp.py +0 -0
- {wsba_hockey-1.0.6 → wsba_hockey-1.1.1}/src/wsba_hockey/evidence/weakside-breakout/node_modules/node-gyp/gyp/tools/graphviz.py +0 -0
- {wsba_hockey-1.0.6 → wsba_hockey-1.1.1}/src/wsba_hockey/evidence/weakside-breakout/node_modules/node-gyp/gyp/tools/pretty_gyp.py +0 -0
- {wsba_hockey-1.0.6 → wsba_hockey-1.1.1}/src/wsba_hockey/evidence/weakside-breakout/node_modules/node-gyp/gyp/tools/pretty_sln.py +0 -0
- {wsba_hockey-1.0.6 → wsba_hockey-1.1.1}/src/wsba_hockey/evidence/weakside-breakout/node_modules/node-gyp/gyp/tools/pretty_vcproj.py +0 -0
- {wsba_hockey-1.0.6 → wsba_hockey-1.1.1}/src/wsba_hockey/evidence/weakside-breakout/node_modules/node-gyp/test/fixtures/test-charmap.py +0 -0
- {wsba_hockey-1.0.6 → wsba_hockey-1.1.1}/src/wsba_hockey/evidence/weakside-breakout/node_modules/node-gyp/update-gyp.py +0 -0
- {wsba_hockey-1.0.6 → wsba_hockey-1.1.1}/src/wsba_hockey/evidence/weakside-breakout/node_modules/sqlite3/node_modules/node-gyp/gyp/gyp_main.py +0 -0
- {wsba_hockey-1.0.6 → wsba_hockey-1.1.1}/src/wsba_hockey/evidence/weakside-breakout/node_modules/sqlite3/node_modules/node-gyp/gyp/pylib/gyp/MSVSNew.py +0 -0
- {wsba_hockey-1.0.6 → wsba_hockey-1.1.1}/src/wsba_hockey/evidence/weakside-breakout/node_modules/sqlite3/node_modules/node-gyp/gyp/pylib/gyp/MSVSProject.py +0 -0
- {wsba_hockey-1.0.6 → wsba_hockey-1.1.1}/src/wsba_hockey/evidence/weakside-breakout/node_modules/sqlite3/node_modules/node-gyp/gyp/pylib/gyp/MSVSSettings.py +0 -0
- {wsba_hockey-1.0.6 → wsba_hockey-1.1.1}/src/wsba_hockey/evidence/weakside-breakout/node_modules/sqlite3/node_modules/node-gyp/gyp/pylib/gyp/MSVSSettings_test.py +0 -0
- {wsba_hockey-1.0.6 → wsba_hockey-1.1.1}/src/wsba_hockey/evidence/weakside-breakout/node_modules/sqlite3/node_modules/node-gyp/gyp/pylib/gyp/MSVSToolFile.py +0 -0
- {wsba_hockey-1.0.6 → wsba_hockey-1.1.1}/src/wsba_hockey/evidence/weakside-breakout/node_modules/sqlite3/node_modules/node-gyp/gyp/pylib/gyp/MSVSUserFile.py +0 -0
- {wsba_hockey-1.0.6 → wsba_hockey-1.1.1}/src/wsba_hockey/evidence/weakside-breakout/node_modules/sqlite3/node_modules/node-gyp/gyp/pylib/gyp/MSVSUtil.py +0 -0
- {wsba_hockey-1.0.6 → wsba_hockey-1.1.1}/src/wsba_hockey/evidence/weakside-breakout/node_modules/sqlite3/node_modules/node-gyp/gyp/pylib/gyp/MSVSVersion.py +0 -0
- {wsba_hockey-1.0.6 → wsba_hockey-1.1.1}/src/wsba_hockey/evidence/weakside-breakout/node_modules/sqlite3/node_modules/node-gyp/gyp/pylib/gyp/__init__.py +0 -0
- {wsba_hockey-1.0.6 → wsba_hockey-1.1.1}/src/wsba_hockey/evidence/weakside-breakout/node_modules/sqlite3/node_modules/node-gyp/gyp/pylib/gyp/common.py +0 -0
- {wsba_hockey-1.0.6 → wsba_hockey-1.1.1}/src/wsba_hockey/evidence/weakside-breakout/node_modules/sqlite3/node_modules/node-gyp/gyp/pylib/gyp/common_test.py +0 -0
- {wsba_hockey-1.0.6 → wsba_hockey-1.1.1}/src/wsba_hockey/evidence/weakside-breakout/node_modules/sqlite3/node_modules/node-gyp/gyp/pylib/gyp/easy_xml.py +0 -0
- {wsba_hockey-1.0.6 → wsba_hockey-1.1.1}/src/wsba_hockey/evidence/weakside-breakout/node_modules/sqlite3/node_modules/node-gyp/gyp/pylib/gyp/easy_xml_test.py +0 -0
- {wsba_hockey-1.0.6 → wsba_hockey-1.1.1}/src/wsba_hockey/evidence/weakside-breakout/node_modules/sqlite3/node_modules/node-gyp/gyp/pylib/gyp/flock_tool.py +0 -0
- {wsba_hockey-1.0.6/src/wsba_hockey/tools → wsba_hockey-1.1.1/src/wsba_hockey/evidence/weakside-breakout/node_modules/sqlite3/node_modules/node-gyp/gyp/pylib/gyp/generator}/__init__.py +0 -0
- {wsba_hockey-1.0.6 → wsba_hockey-1.1.1}/src/wsba_hockey/evidence/weakside-breakout/node_modules/sqlite3/node_modules/node-gyp/gyp/pylib/gyp/generator/analyzer.py +0 -0
- {wsba_hockey-1.0.6 → wsba_hockey-1.1.1}/src/wsba_hockey/evidence/weakside-breakout/node_modules/sqlite3/node_modules/node-gyp/gyp/pylib/gyp/generator/android.py +0 -0
- {wsba_hockey-1.0.6 → wsba_hockey-1.1.1}/src/wsba_hockey/evidence/weakside-breakout/node_modules/sqlite3/node_modules/node-gyp/gyp/pylib/gyp/generator/cmake.py +0 -0
- {wsba_hockey-1.0.6 → wsba_hockey-1.1.1}/src/wsba_hockey/evidence/weakside-breakout/node_modules/sqlite3/node_modules/node-gyp/gyp/pylib/gyp/generator/compile_commands_json.py +0 -0
- {wsba_hockey-1.0.6 → wsba_hockey-1.1.1}/src/wsba_hockey/evidence/weakside-breakout/node_modules/sqlite3/node_modules/node-gyp/gyp/pylib/gyp/generator/dump_dependency_json.py +0 -0
- {wsba_hockey-1.0.6 → wsba_hockey-1.1.1}/src/wsba_hockey/evidence/weakside-breakout/node_modules/sqlite3/node_modules/node-gyp/gyp/pylib/gyp/generator/eclipse.py +0 -0
- {wsba_hockey-1.0.6 → wsba_hockey-1.1.1}/src/wsba_hockey/evidence/weakside-breakout/node_modules/sqlite3/node_modules/node-gyp/gyp/pylib/gyp/generator/gypd.py +0 -0
- {wsba_hockey-1.0.6 → wsba_hockey-1.1.1}/src/wsba_hockey/evidence/weakside-breakout/node_modules/sqlite3/node_modules/node-gyp/gyp/pylib/gyp/generator/gypsh.py +0 -0
- {wsba_hockey-1.0.6 → wsba_hockey-1.1.1}/src/wsba_hockey/evidence/weakside-breakout/node_modules/sqlite3/node_modules/node-gyp/gyp/pylib/gyp/generator/make.py +0 -0
- {wsba_hockey-1.0.6 → wsba_hockey-1.1.1}/src/wsba_hockey/evidence/weakside-breakout/node_modules/sqlite3/node_modules/node-gyp/gyp/pylib/gyp/generator/msvs.py +0 -0
- {wsba_hockey-1.0.6 → wsba_hockey-1.1.1}/src/wsba_hockey/evidence/weakside-breakout/node_modules/sqlite3/node_modules/node-gyp/gyp/pylib/gyp/generator/msvs_test.py +0 -0
- {wsba_hockey-1.0.6 → wsba_hockey-1.1.1}/src/wsba_hockey/evidence/weakside-breakout/node_modules/sqlite3/node_modules/node-gyp/gyp/pylib/gyp/generator/ninja.py +0 -0
- {wsba_hockey-1.0.6 → wsba_hockey-1.1.1}/src/wsba_hockey/evidence/weakside-breakout/node_modules/sqlite3/node_modules/node-gyp/gyp/pylib/gyp/generator/ninja_test.py +0 -0
- {wsba_hockey-1.0.6 → wsba_hockey-1.1.1}/src/wsba_hockey/evidence/weakside-breakout/node_modules/sqlite3/node_modules/node-gyp/gyp/pylib/gyp/generator/xcode.py +0 -0
- {wsba_hockey-1.0.6 → wsba_hockey-1.1.1}/src/wsba_hockey/evidence/weakside-breakout/node_modules/sqlite3/node_modules/node-gyp/gyp/pylib/gyp/generator/xcode_test.py +0 -0
- {wsba_hockey-1.0.6 → wsba_hockey-1.1.1}/src/wsba_hockey/evidence/weakside-breakout/node_modules/sqlite3/node_modules/node-gyp/gyp/pylib/gyp/input.py +0 -0
- {wsba_hockey-1.0.6 → wsba_hockey-1.1.1}/src/wsba_hockey/evidence/weakside-breakout/node_modules/sqlite3/node_modules/node-gyp/gyp/pylib/gyp/input_test.py +0 -0
- {wsba_hockey-1.0.6 → wsba_hockey-1.1.1}/src/wsba_hockey/evidence/weakside-breakout/node_modules/sqlite3/node_modules/node-gyp/gyp/pylib/gyp/mac_tool.py +0 -0
- {wsba_hockey-1.0.6 → wsba_hockey-1.1.1}/src/wsba_hockey/evidence/weakside-breakout/node_modules/sqlite3/node_modules/node-gyp/gyp/pylib/gyp/msvs_emulation.py +0 -0
- {wsba_hockey-1.0.6 → wsba_hockey-1.1.1}/src/wsba_hockey/evidence/weakside-breakout/node_modules/sqlite3/node_modules/node-gyp/gyp/pylib/gyp/ninja_syntax.py +0 -0
- {wsba_hockey-1.0.6 → wsba_hockey-1.1.1}/src/wsba_hockey/evidence/weakside-breakout/node_modules/sqlite3/node_modules/node-gyp/gyp/pylib/gyp/simple_copy.py +0 -0
- {wsba_hockey-1.0.6 → wsba_hockey-1.1.1}/src/wsba_hockey/evidence/weakside-breakout/node_modules/sqlite3/node_modules/node-gyp/gyp/pylib/gyp/win_tool.py +0 -0
- {wsba_hockey-1.0.6 → wsba_hockey-1.1.1}/src/wsba_hockey/evidence/weakside-breakout/node_modules/sqlite3/node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.py +0 -0
- {wsba_hockey-1.0.6 → wsba_hockey-1.1.1}/src/wsba_hockey/evidence/weakside-breakout/node_modules/sqlite3/node_modules/node-gyp/gyp/pylib/gyp/xcode_ninja.py +0 -0
- {wsba_hockey-1.0.6 → wsba_hockey-1.1.1}/src/wsba_hockey/evidence/weakside-breakout/node_modules/sqlite3/node_modules/node-gyp/gyp/pylib/gyp/xcodeproj_file.py +0 -0
- {wsba_hockey-1.0.6 → wsba_hockey-1.1.1}/src/wsba_hockey/evidence/weakside-breakout/node_modules/sqlite3/node_modules/node-gyp/gyp/pylib/gyp/xml_fix.py +0 -0
- {wsba_hockey-1.0.6 → wsba_hockey-1.1.1}/src/wsba_hockey/evidence/weakside-breakout/node_modules/sqlite3/node_modules/node-gyp/gyp/setup.py +0 -0
- {wsba_hockey-1.0.6 → wsba_hockey-1.1.1}/src/wsba_hockey/evidence/weakside-breakout/node_modules/sqlite3/node_modules/node-gyp/gyp/test_gyp.py +0 -0
- {wsba_hockey-1.0.6 → wsba_hockey-1.1.1}/src/wsba_hockey/evidence/weakside-breakout/node_modules/sqlite3/node_modules/node-gyp/gyp/tools/graphviz.py +0 -0
- {wsba_hockey-1.0.6 → wsba_hockey-1.1.1}/src/wsba_hockey/evidence/weakside-breakout/node_modules/sqlite3/node_modules/node-gyp/gyp/tools/pretty_gyp.py +0 -0
- {wsba_hockey-1.0.6 → wsba_hockey-1.1.1}/src/wsba_hockey/evidence/weakside-breakout/node_modules/sqlite3/node_modules/node-gyp/gyp/tools/pretty_sln.py +0 -0
- {wsba_hockey-1.0.6 → wsba_hockey-1.1.1}/src/wsba_hockey/evidence/weakside-breakout/node_modules/sqlite3/node_modules/node-gyp/gyp/tools/pretty_vcproj.py +0 -0
- {wsba_hockey-1.0.6 → wsba_hockey-1.1.1}/src/wsba_hockey/evidence/weakside-breakout/node_modules/sqlite3/node_modules/node-gyp/test/fixtures/test-charmap.py +0 -0
- {wsba_hockey-1.0.6 → wsba_hockey-1.1.1}/src/wsba_hockey/evidence/weakside-breakout/node_modules/sqlite3/node_modules/node-gyp/update-gyp.py +0 -0
- {wsba_hockey-1.0.6 → wsba_hockey-1.1.1}/src/wsba_hockey/evidence/weakside-breakout/wsba_nhl_apps/wsba_nhl_apps/game_stats/name_fix.py +0 -0
- {wsba_hockey-1.0.6/src/wsba_hockey/evidence/weakside-breakout/wsba_nhl_apps/wsba_nhl_apps/heatmaps → wsba_hockey-1.1.1/src/wsba_hockey/evidence/weakside-breakout/wsba_nhl_apps/wsba_nhl_apps/goalie}/rink_plot.py +0 -0
- {wsba_hockey-1.0.6 → wsba_hockey-1.1.1}/src/wsba_hockey.egg-info/dependency_links.txt +0 -0
- {wsba_hockey-1.0.6 → wsba_hockey-1.1.1}/src/wsba_hockey.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: wsba_hockey
|
3
|
-
Version: 1.
|
3
|
+
Version: 1.1.1
|
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/
|
@@ -0,0 +1,129 @@
|
|
1
|
+
import pandas as pd
|
2
|
+
import numpy as np
|
3
|
+
import wsba_main as wsba
|
4
|
+
import requests as rs
|
5
|
+
from fastapi import FastAPI
|
6
|
+
from datetime import datetime
|
7
|
+
import pytz
|
8
|
+
|
9
|
+
app = FastAPI()
|
10
|
+
|
11
|
+
@app.get("/")
|
12
|
+
def read_root():
|
13
|
+
return {"WeakSide Breakout Analysis": "Welcome to the API!"}
|
14
|
+
|
15
|
+
@app.get("/nhl/players/{player_id}")
|
16
|
+
def player(player_id: int):
|
17
|
+
player = rs.get(f'https://api-web.nhle.com/v1/player/{player_id}/landing').json()
|
18
|
+
|
19
|
+
return player
|
20
|
+
|
21
|
+
@app.get("/nhl/schedule/{date}")
|
22
|
+
def schedule_info(date: str):
|
23
|
+
data = rs.get(f'https://api-web.nhle.com/v1/schedule/{date}').json()
|
24
|
+
|
25
|
+
eastern = pytz.timezone('US/Eastern')
|
26
|
+
for game in data['gameWeek'][0]['games']:
|
27
|
+
game['startTimeEST'] = datetime.strptime(game['startTimeUTC'],'%Y-%m-%dT%H:%M:%SZ').replace(tzinfo=pytz.UTC).astimezone(eastern).strftime('%I:%M %p')
|
28
|
+
|
29
|
+
return data
|
30
|
+
|
31
|
+
@app.get("/nhl/games/{game_id}")
|
32
|
+
def pbp(game_id: int):
|
33
|
+
df = wsba.nhl_apply_xG(wsba.nhl_scrape_game([game_id],remove=[]))
|
34
|
+
|
35
|
+
skater = {}
|
36
|
+
goalie = {}
|
37
|
+
team_stats = {}
|
38
|
+
other = df.loc[~df['strength_state'].isin(['5v5','5v4','4v5']),'strength_state'].drop_duplicates().to_list()
|
39
|
+
for strength in [['5v5'],['5v4'],['4v5'],
|
40
|
+
other,
|
41
|
+
'all']:
|
42
|
+
|
43
|
+
s = wsba.nhl_calculate_stats(df,'skater',[2,3],strength,True).replace([np.inf, -np.inf], np.nan).fillna('').to_dict(orient='records')
|
44
|
+
g = wsba.nhl_calculate_stats(df,'goalie',[2,3],strength,True).replace([np.inf, -np.inf], np.nan).fillna('').to_dict(orient='records')
|
45
|
+
t = wsba.nhl_calculate_stats(df,'team',[2,3],strength,True).replace([np.inf, -np.inf], np.nan).fillna('').to_dict(orient='records')
|
46
|
+
|
47
|
+
if strength != 'all':
|
48
|
+
if len(strength)>1:
|
49
|
+
add = 'Other'
|
50
|
+
else:
|
51
|
+
add = strength[0]
|
52
|
+
else:
|
53
|
+
add = 'All'
|
54
|
+
|
55
|
+
skater.update({add:s})
|
56
|
+
goalie.update({add:g})
|
57
|
+
team_stats.update({add:t})
|
58
|
+
|
59
|
+
df = df.fillna('')
|
60
|
+
|
61
|
+
team_data = pd.read_csv('https://weakside-breakout.s3.us-east-2.amazonaws.com/info/nhl_teaminfo.csv')[['triCode','seasonId','teamName.default','teamLogo','Primary Color','Secondary Color','WSBA']]
|
62
|
+
|
63
|
+
info = df[['season','season_type','game_id','game_date',
|
64
|
+
'venue','venue_location']].drop_duplicates().to_dict(orient='records')[0]
|
65
|
+
|
66
|
+
info.update({'notice':'All data and materials are from the National Hockey League.'})
|
67
|
+
|
68
|
+
teams = {}
|
69
|
+
for team in ['away','home']:
|
70
|
+
df = pd.merge(df,team_data,how='left',left_on=[f'{team}_team_abbr','season'],right_on=['triCode','seasonId']).fillna('')
|
71
|
+
mod = '' if team == 'away' else '_y'
|
72
|
+
teams.update({team: df[[f'{team}_team_abbr'
|
73
|
+
,f'{team}_coach',
|
74
|
+
f'teamName.default{mod}',
|
75
|
+
f'teamLogo{mod}',
|
76
|
+
f'Primary Color{mod}',
|
77
|
+
f'Secondary Color{mod}',
|
78
|
+
f'WSBA{mod}']].rename(columns={f'{team}_team_abbr':'team_abbr',f'{team}_coach':'coach',
|
79
|
+
f'teamName.default{mod}':'team_name',
|
80
|
+
f'teamLogo{mod}':'team_logo',
|
81
|
+
f'Primary Color{mod}':'primary_color',
|
82
|
+
f'Secondary Color{mod}':'secondary_color',
|
83
|
+
f'WSBA{mod}':'WSBA'
|
84
|
+
}).drop_duplicates().to_dict(orient='records')[0]})
|
85
|
+
|
86
|
+
play_col = [
|
87
|
+
'event_num','period','period_type',
|
88
|
+
'seconds_elapsed','period_time','game_time',"strength_state","strength_state_venue","home_team_defending_side",
|
89
|
+
"event_type_code","event_type","description","event_reason",
|
90
|
+
"penalty_type","penalty_duration","penalty_attribution",
|
91
|
+
"event_team_abbr","event_team_venue",
|
92
|
+
'num_on', 'players_on','ids_on','num_off','players_off','ids_off','shift_type',
|
93
|
+
"event_player_1_name","event_player_2_name","event_player_3_name",
|
94
|
+
"event_player_1_id","event_player_2_id","event_player_3_id",
|
95
|
+
"event_player_1_pos","event_player_2_pos","event_player_3_pos",
|
96
|
+
"event_goalie_name","event_goalie_id",
|
97
|
+
"shot_type","zone_code","x","y","x_fixed","y_fixed","x_adj","y_adj",
|
98
|
+
"event_skaters","away_skaters","home_skaters",
|
99
|
+
"event_distance","event_angle","event_length","seconds_since_last",
|
100
|
+
"away_score","home_score", "away_fenwick", "home_fenwick",
|
101
|
+
"away_on_1","away_on_2","away_on_3","away_on_4","away_on_5","away_on_6","away_goalie",
|
102
|
+
"home_on_1","home_on_2","home_on_3","home_on_4","home_on_5","home_on_6","home_goalie",
|
103
|
+
"away_on_1_id","away_on_2_id","away_on_3_id","away_on_4_id","away_on_5_id","away_on_6_id","away_goalie_id",
|
104
|
+
"home_on_1_id","home_on_2_id","home_on_3_id","home_on_4_id","home_on_5_id","home_on_6_id","home_goalie_id",
|
105
|
+
"event_coach",'xG'
|
106
|
+
]
|
107
|
+
|
108
|
+
def sanitize(value):
|
109
|
+
if isinstance(value, (np.generic, np.ndarray)):
|
110
|
+
return value.item()
|
111
|
+
return value
|
112
|
+
|
113
|
+
plays = [
|
114
|
+
{k: sanitize(v) for k, v in row.items() if v != ''}
|
115
|
+
for row in df[[col for col in play_col if col in df.columns]].to_dict(orient='records')
|
116
|
+
]
|
117
|
+
|
118
|
+
plays = [
|
119
|
+
{k: sanitize(v) for k, v in row.items() if v != ''}
|
120
|
+
for row in df[[col for col in play_col if col in df.columns]].to_dict(orient='records')
|
121
|
+
]
|
122
|
+
|
123
|
+
return {'info': info,
|
124
|
+
'teams': teams,
|
125
|
+
'skater_stats':skater,
|
126
|
+
'goalie_stats':goalie,
|
127
|
+
'team_stats':team_stats,
|
128
|
+
'plays': plays
|
129
|
+
}
|
{wsba_hockey-1.0.6/src/wsba_hockey → wsba_hockey-1.1.1/src/wsba_hockey/api/api}/tools/plotting.py
RENAMED
@@ -1,3 +1,4 @@
|
|
1
|
+
import os
|
1
2
|
import matplotlib.pyplot as plt
|
2
3
|
import numpy as np
|
3
4
|
import pandas as pd
|
@@ -5,7 +6,7 @@ from hockey_rink import NHLRink
|
|
5
6
|
from hockey_rink import CircularImage
|
6
7
|
from scipy.interpolate import griddata
|
7
8
|
from scipy.ndimage import gaussian_filter
|
8
|
-
from
|
9
|
+
from tools.xg_model import *
|
9
10
|
|
10
11
|
### PLOTTING FUNCTIONS ###
|
11
12
|
# Provided in this file are basic plotting functions for the WSBA Hockey Python package. #
|
@@ -28,10 +29,9 @@ info_path = os.path.join(dir,'teaminfo\\nhl_teaminfo.csv')
|
|
28
29
|
img_path = os.path.join(dir,'utils\\wsba.png')
|
29
30
|
|
30
31
|
def wsba_rink(display_range='offense',rotation = 0):
|
31
|
-
img = 'tools/utils/wsba.png'
|
32
32
|
rink = NHLRink(center_logo={
|
33
33
|
"feature_class": CircularImage,
|
34
|
-
"image_path":
|
34
|
+
"image_path": img_path,
|
35
35
|
"length": 25, "width": 25,
|
36
36
|
"x": 0, "y": 0,
|
37
37
|
"radius": 14,
|
{wsba_hockey-1.0.6/src/wsba_hockey → wsba_hockey-1.1.1/src/wsba_hockey/api/api}/tools/scraping.py
RENAMED
@@ -6,7 +6,7 @@ import pandas as pd
|
|
6
6
|
import requests as rs
|
7
7
|
import json as json_lib
|
8
8
|
from bs4 import BeautifulSoup
|
9
|
-
from
|
9
|
+
from tools.utils.shared import *
|
10
10
|
warnings.filterwarnings('ignore')
|
11
11
|
|
12
12
|
### SCRAPING FUNCTIONS ###
|
@@ -28,7 +28,7 @@ def get_col():
|
|
28
28
|
return [
|
29
29
|
'season','season_type','game_id','game_date',"start_time","venue","venue_location",
|
30
30
|
'away_team_abbr','home_team_abbr','event_num','period','period_type',
|
31
|
-
'seconds_elapsed',"strength_state","strength_state_venue","home_team_defending_side",
|
31
|
+
'seconds_elapsed','period_time','game_time',"strength_state","strength_state_venue","home_team_defending_side",
|
32
32
|
"event_type_code","event_type","description","event_reason",
|
33
33
|
"penalty_type","penalty_duration","penalty_attribution",
|
34
34
|
"event_team_abbr","event_team_venue",
|
@@ -984,7 +984,11 @@ def combine_data(info,sources):
|
|
984
984
|
df[f'{venue}_corsi'] = ((df['event_team_venue']==venue)&(df['event_type'].isin(['blocked-shot','missed-shot','shot-on-goal','goal']))).cumsum()
|
985
985
|
df[f'{venue}_fenwick'] = ((df['event_team_venue']==venue)&(df['event_type'].isin(['missed-shot','shot-on-goal','goal']))).cumsum()
|
986
986
|
df[f'{venue}_penalties'] = ((df['event_team_venue']==venue)&(df['event_type']=='penalty')).cumsum()
|
987
|
-
|
987
|
+
|
988
|
+
#Add time adjustments
|
989
|
+
df['period_time'] = np.trunc((df['seconds_elapsed']-((df['period']-1)*1200))/60).astype(str).str.replace('.0','')+":"+(df['seconds_elapsed'] % 60).astype(str).str.pad(2,'left','0')
|
990
|
+
df['game_time'] = np.trunc(df['seconds_elapsed']/60).astype(str).str.replace('.0','')+":"+(df['seconds_elapsed'] % 60).astype(str).str.pad(2,'left','0')
|
991
|
+
|
988
992
|
#Forward fill as necessary
|
989
993
|
cols = ['period_type','home_team_defending_side','away_coach','home_coach']
|
990
994
|
for col in cols:
|