hockey-blast-common-lib 0.1.45__py3-none-any.whl → 0.1.47__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 -7
- hockey_blast_common_lib/aggregate_human_stats.py +11 -11
- hockey_blast_common_lib/find_leagues_seasons.py +53 -0
- hockey_blast_common_lib/hockey_blast_sample_backup.sql.gz +0 -0
- hockey_blast_common_lib/models.py +1 -1
- hockey_blast_common_lib/restore_sample_db.sh +12 -5
- {hockey_blast_common_lib-0.1.45.dist-info → hockey_blast_common_lib-0.1.47.dist-info}/METADATA +1 -1
- {hockey_blast_common_lib-0.1.45.dist-info → hockey_blast_common_lib-0.1.47.dist-info}/RECORD +10 -9
- {hockey_blast_common_lib-0.1.45.dist-info → hockey_blast_common_lib-0.1.47.dist-info}/WHEEL +0 -0
- {hockey_blast_common_lib-0.1.45.dist-info → hockey_blast_common_lib-0.1.47.dist-info}/top_level.txt +0 -0
@@ -9,18 +9,18 @@ from hockey_blast_common_lib.aggregate_goalie_stats import run_aggregate_goalie_
|
|
9
9
|
from hockey_blast_common_lib.aggregate_referee_stats import run_aggregate_referee_stats
|
10
10
|
|
11
11
|
if __name__ == "__main__":
|
12
|
-
print("Running
|
13
|
-
run_aggregate_human_stats()
|
14
|
-
print("Finished running aggregate_human_stats\n")
|
15
|
-
|
16
|
-
print("Running aggregate_skater_stats...")
|
12
|
+
print("Running aggregate_skater_stats...", flush=True)
|
17
13
|
run_aggregate_skater_stats()
|
18
14
|
print("Finished running aggregate_skater_stats\n")
|
19
15
|
|
20
|
-
print("Running aggregate_goalie_stats...")
|
16
|
+
print("Running aggregate_goalie_stats...", flush=True)
|
21
17
|
run_aggregate_goalie_stats()
|
22
18
|
print("Finished running aggregate_goalie_stats\n")
|
23
19
|
|
24
|
-
print("Running aggregate_referee_stats...")
|
20
|
+
print("Running aggregate_referee_stats...", flush=True)
|
25
21
|
run_aggregate_referee_stats()
|
26
22
|
print("Finished running aggregate_referee_stats\n")
|
23
|
+
|
24
|
+
print("Running aggregate_human_stats...", flush=True)
|
25
|
+
run_aggregate_human_stats()
|
26
|
+
print("Finished running aggregate_human_stats\n")
|
@@ -440,17 +440,17 @@ def run_aggregate_human_stats():
|
|
440
440
|
aggregate_human_stats(session, aggregation_type='org', aggregation_id=org_id, names_to_filter_out=not_human_names, human_id_filter=human_id_to_debug, aggregation_window='Daily')
|
441
441
|
|
442
442
|
# Aggregate by level
|
443
|
-
|
444
|
-
|
445
|
-
|
446
|
-
|
447
|
-
|
448
|
-
|
449
|
-
|
450
|
-
|
451
|
-
|
452
|
-
|
453
|
-
|
443
|
+
level_ids = session.query(Division.level_id).distinct().all()
|
444
|
+
level_ids = [level_id[0] for level_id in level_ids]
|
445
|
+
total_levels = len(level_ids)
|
446
|
+
processed_levels = 0
|
447
|
+
for level_id in level_ids:
|
448
|
+
if level_id is None:
|
449
|
+
continue
|
450
|
+
if human_id_to_debug is None:
|
451
|
+
print(f"\rProcessed {processed_levels}/{total_levels} levels ({(processed_levels/total_levels)*100:.2f}%)", end="")
|
452
|
+
processed_levels += 1
|
453
|
+
aggregate_human_stats(session, aggregation_type='level', aggregation_id=level_id, names_to_filter_out=not_human_names, human_id_filter=human_id_to_debug)
|
454
454
|
|
455
455
|
if __name__ == "__main__":
|
456
456
|
run_aggregate_human_stats()
|
@@ -0,0 +1,53 @@
|
|
1
|
+
import time
|
2
|
+
import json
|
3
|
+
import os
|
4
|
+
import requests
|
5
|
+
from bs4 import BeautifulSoup
|
6
|
+
|
7
|
+
def probe_leagues_and_seasons(min_league, max_league, min_season, max_season, interval_seconds, output_file):
|
8
|
+
results = []
|
9
|
+
|
10
|
+
for league_id in range(min_league, max_league + 1):
|
11
|
+
league_data = {"league": league_id, "seasons": set()}
|
12
|
+
for season_id in range(min_season, max_season + 1):
|
13
|
+
url = f"https://stats.sharksice.timetoscore.com/display-schedule.php?stat_class=1&league={league_id}&season={season_id}"
|
14
|
+
print(f"Probing URL: {url}")
|
15
|
+
|
16
|
+
try:
|
17
|
+
response = requests.get(url, timeout=10)
|
18
|
+
response.raise_for_status()
|
19
|
+
schedule_html = response.text
|
20
|
+
|
21
|
+
# Parse the schedule page to find all game links
|
22
|
+
soup = BeautifulSoup(schedule_html, "html.parser")
|
23
|
+
tables = soup.find_all('table')
|
24
|
+
top_level_tables = [table for table in tables if table.find_parent('table') is None]
|
25
|
+
|
26
|
+
if len(top_level_tables) > 0:
|
27
|
+
print(f"Data found for league {league_id}, season {season_id}")
|
28
|
+
league_data["seasons"].add(season_id)
|
29
|
+
|
30
|
+
# Save the fetched HTML to a subfolder
|
31
|
+
folder_path = os.path.join("schedules", f"league={league_id}", f"season={season_id}")
|
32
|
+
os.makedirs(folder_path, exist_ok=True)
|
33
|
+
with open(os.path.join(folder_path, "schedule.html"), "w") as f:
|
34
|
+
f.write(schedule_html)
|
35
|
+
else:
|
36
|
+
print(f"No data for league {league_id}, season {season_id}")
|
37
|
+
except Exception as e:
|
38
|
+
print(f"Error probing URL {url}: {e}")
|
39
|
+
|
40
|
+
# Wait for the specified interval before the next request
|
41
|
+
time.sleep(interval_seconds)
|
42
|
+
|
43
|
+
if league_data["seasons"]:
|
44
|
+
league_data["seasons"] = list(league_data["seasons"]) # Convert set to list for JSON serialization
|
45
|
+
results.append(league_data)
|
46
|
+
|
47
|
+
# Save results to a JSON file
|
48
|
+
with open(output_file, "w") as f:
|
49
|
+
json.dump(results, f, indent=4)
|
50
|
+
print(f"Results saved to {output_file}")
|
51
|
+
|
52
|
+
# Example usage
|
53
|
+
probe_leagues_and_seasons(min_league=1, max_league=70, min_season=1, max_season=70, interval_seconds=9, output_file="leagues_seasons_2_70_1_70.json")
|
Binary file
|
@@ -18,7 +18,7 @@ class Division(db.Model):
|
|
18
18
|
league_number = db.Column(db.Integer) # TODO: Deprecate usage and remove (get this info through Season->League)
|
19
19
|
season_number = db.Column(db.Integer) # TODO: Deprecate usage and remove (get this info from Season by season_id)
|
20
20
|
season_id = db.Column(db.Integer, db.ForeignKey('seasons.id'))
|
21
|
-
level = db.Column(db.String(100)) #
|
21
|
+
level = db.Column(db.String(100)) # Used to display original level name, however level_id may combine some levels with different name!
|
22
22
|
level_id = db.Column(db.Integer, db.ForeignKey('levels.id')) # New field
|
23
23
|
org_id = db.Column(db.Integer, db.ForeignKey('organizations.id'), nullable=False)
|
24
24
|
__table_args__ = (
|
@@ -9,15 +9,22 @@ DB_PORT=${DB_PORT:-"5432"}
|
|
9
9
|
COMPRESSED_DUMP_FILE="hockey_blast_sample_backup.sql.gz"
|
10
10
|
|
11
11
|
# Superuser credentials
|
12
|
-
SUPERUSER="
|
13
|
-
SUPERUSER_PASSWORD
|
12
|
+
SUPERUSER="your_superuser"
|
13
|
+
SUPERUSER_PASSWORD="your_superuser_password"
|
14
14
|
|
15
15
|
# Export PGPASSWORD to avoid password prompt
|
16
16
|
export PGPASSWORD=$SUPERUSER_PASSWORD
|
17
17
|
|
18
|
-
#
|
19
|
-
|
20
|
-
|
18
|
+
# Generate a unique timestamp
|
19
|
+
TIMESTAMP=$(date +%Y%m%d%H%M%S)
|
20
|
+
BACKUP_DB_NAME="${DB_NAME}_backup_${TIMESTAMP}"
|
21
|
+
|
22
|
+
# Check if the database exists and rename it if it does
|
23
|
+
DB_EXISTS=$(psql --username=$SUPERUSER --host=$DB_HOST --port=$DB_PORT -d postgres --tuples-only --command="SELECT 1 FROM pg_database WHERE datname = '$DB_NAME'")
|
24
|
+
if [ "$DB_EXISTS" = "1" ]; then
|
25
|
+
psql --username=$SUPERUSER --host=$DB_HOST --port=$DB_PORT -d postgres --command="SELECT pg_terminate_backend(pg_stat_activity.pid) FROM pg_stat_activity WHERE pg_stat_activity.datname = '$DB_NAME' AND pid <> pg_backend_pid();"
|
26
|
+
psql --username=$SUPERUSER --host=$DB_HOST --port=$DB_PORT -d postgres --command="ALTER DATABASE $DB_NAME RENAME TO $BACKUP_DB_NAME"
|
27
|
+
fi
|
21
28
|
|
22
29
|
# Create a new database
|
23
30
|
psql --username=$SUPERUSER --host=$DB_HOST --port=$DB_PORT -d postgres --command="CREATE DATABASE $DB_NAME OWNER $SUPERUSER"
|
{hockey_blast_common_lib-0.1.45.dist-info → hockey_blast_common_lib-0.1.47.dist-info}/RECORD
RENAMED
@@ -1,23 +1,24 @@
|
|
1
1
|
hockey_blast_common_lib/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
2
|
-
hockey_blast_common_lib/aggregate_all_stats.py,sha256=
|
2
|
+
hockey_blast_common_lib/aggregate_all_stats.py,sha256=2bOj2BW0k3ZPQR1NH04upnkIfO9SastzTz7XwO3ujYo,1104
|
3
3
|
hockey_blast_common_lib/aggregate_goalie_stats.py,sha256=FcYL40NP0-sPY7UI7F8Ny_RaPKz3mfkmhQnPVbeRtOc,12178
|
4
|
-
hockey_blast_common_lib/aggregate_human_stats.py,sha256=
|
4
|
+
hockey_blast_common_lib/aggregate_human_stats.py,sha256=VmUAMbqtWRPFM64V8ECJ3eJjRXvblNbeVU9HFYNoPp0,23898
|
5
5
|
hockey_blast_common_lib/aggregate_referee_stats.py,sha256=FszWLTygddDQNcUgbmevQ-eGPrW8Y0nXpRvUluPRKnU,11920
|
6
6
|
hockey_blast_common_lib/aggregate_skater_stats.py,sha256=FBc6enJNnFXYg7mVPiXssleTA1vZRAXCTFUa-3eOGdo,17199
|
7
7
|
hockey_blast_common_lib/assign_skater_skill.py,sha256=p-0fbodGpM8BCjKHDpxNb7BH2FcIlBsJwON844KNrUY,1817
|
8
8
|
hockey_blast_common_lib/db_connection.py,sha256=HvPxDvOj7j5H85RfslGvHVNevfg7mKCd0syJ6NX21mU,1890
|
9
9
|
hockey_blast_common_lib/dump_sample_db.sh,sha256=MY3lnzTXBoWd76-ZlZr9nWsKMEVgyRsUn-LZ2d1JWZs,810
|
10
|
-
hockey_blast_common_lib/
|
11
|
-
hockey_blast_common_lib/
|
10
|
+
hockey_blast_common_lib/find_leagues_seasons.py,sha256=abjzVsnaXXCLhzbTy7-6pDV_0LvXCJexuZVdIvc_DbI,2373
|
11
|
+
hockey_blast_common_lib/hockey_blast_sample_backup.sql.gz,sha256=nUzrmhMi9JXb6ImYh7MV9La66EmQrus-VOZpXyfR6zw,1256777
|
12
|
+
hockey_blast_common_lib/models.py,sha256=nLI5NA6VhhUaT6guvi4K_PWILPBG7LvMbAVPOpLl3s4,16481
|
12
13
|
hockey_blast_common_lib/options.py,sha256=ejwDM2LVzeARlE5UwUNDt2Zzolat7OkXddhOZpzn1bw,823
|
13
|
-
hockey_blast_common_lib/restore_sample_db.sh,sha256
|
14
|
+
hockey_blast_common_lib/restore_sample_db.sh,sha256=7W3lzRZeu9zXIu1Bvtnaw8EHc1ulHmFM4mMh86oUQJo,2205
|
14
15
|
hockey_blast_common_lib/skills_in_divisions.py,sha256=m-UEwMwn1KM7wOYvDstgsOEeH57M9V6yrkBoghzGYKE,7005
|
15
16
|
hockey_blast_common_lib/skills_propagation.py,sha256=x6yy7fJ6IX3YiHqiP_v7-p_S2Expb8JJ-mWuajEFBdY,16388
|
16
17
|
hockey_blast_common_lib/stats_models.py,sha256=NWigeIowIJU6o1Sk1cP08kEy4t594LZpecKUnl-O6as,25552
|
17
18
|
hockey_blast_common_lib/stats_utils.py,sha256=DXsPO4jw8XsdRUN46TGF_IiBAfz3GCIVBswCGp5ELDk,284
|
18
19
|
hockey_blast_common_lib/utils.py,sha256=Sy5Pk40Tk3gsMrhMsUMlBD7i7jiVZmWLUBc94qI3zOA,5235
|
19
20
|
hockey_blast_common_lib/wsgi.py,sha256=7LGUzioigviJp-EUhSEaQcd4jBae0mxbkyBscQfZhlc,730
|
20
|
-
hockey_blast_common_lib-0.1.
|
21
|
-
hockey_blast_common_lib-0.1.
|
22
|
-
hockey_blast_common_lib-0.1.
|
23
|
-
hockey_blast_common_lib-0.1.
|
21
|
+
hockey_blast_common_lib-0.1.47.dist-info/METADATA,sha256=KaNAT8DvgL88_HtXpKNpVb3b1X4IGZT8lEJx2nIequY,318
|
22
|
+
hockey_blast_common_lib-0.1.47.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
|
23
|
+
hockey_blast_common_lib-0.1.47.dist-info/top_level.txt,sha256=wIR4LIkE40npoA2QlOdfCYlgFeGbsHR8Z6r0h46Vtgc,24
|
24
|
+
hockey_blast_common_lib-0.1.47.dist-info/RECORD,,
|
File without changes
|
{hockey_blast_common_lib-0.1.45.dist-info → hockey_blast_common_lib-0.1.47.dist-info}/top_level.txt
RENAMED
File without changes
|