Clean up cache paths.
This commit is contained in:
parent
4f58daa29f
commit
283853d2c4
@ -31,7 +31,8 @@ class BeatSaverAPI:
|
|||||||
|
|
||||||
def _determine_cache_dir(self) -> str:
|
def _determine_cache_dir(self) -> str:
|
||||||
home_cache = os.path.expanduser("~/.cache")
|
home_cache = os.path.expanduser("~/.cache")
|
||||||
beatsaver_cache = os.path.join(home_cache, "beatsaver")
|
saberlist_cache = os.path.join(home_cache, "saberlist")
|
||||||
|
beatsaver_cache = os.path.join(saberlist_cache, "beatsaver")
|
||||||
|
|
||||||
if os.path.exists(home_cache):
|
if os.path.exists(home_cache):
|
||||||
if not os.path.exists(beatsaver_cache):
|
if not os.path.exists(beatsaver_cache):
|
||||||
@ -59,7 +60,7 @@ class BeatSaverAPI:
|
|||||||
self,
|
self,
|
||||||
use_cache: bool = True,
|
use_cache: bool = True,
|
||||||
page_size: int = 20,
|
page_size: int = 20,
|
||||||
sort: GetMapsLatestSort = GetMapsLatestSort.UPDATED,
|
sort: GetMapsLatestSort = GetMapsLatestSort.FIRST_PUBLISHED,
|
||||||
verified: bool = True,
|
verified: bool = True,
|
||||||
month: Optional[int] = None,
|
month: Optional[int] = None,
|
||||||
year: Optional[int] = None,
|
year: Optional[int] = None,
|
||||||
@ -86,7 +87,7 @@ class BeatSaverAPI:
|
|||||||
start_of_month = datetime(year, month, 1, tzinfo=timezone.utc)
|
start_of_month = datetime(year, month, 1, tzinfo=timezone.utc)
|
||||||
end_of_month = start_of_month + relativedelta(months=1)
|
end_of_month = start_of_month + relativedelta(months=1)
|
||||||
|
|
||||||
cache_file = os.path.join(self.CACHE_DIR, f"maps_{year}_{month:02d}.json")
|
cache_file = os.path.join(self.CACHE_DIR, f"maps_{year}_{month:02d}_{sort.value}.json")
|
||||||
|
|
||||||
cached_maps = []
|
cached_maps = []
|
||||||
if use_cache and self._is_cache_valid(cache_file):
|
if use_cache and self._is_cache_valid(cache_file):
|
||||||
@ -124,8 +125,8 @@ class BeatSaverAPI:
|
|||||||
f"Fetched map: '{map.name}' by {map.metadata.song_author_name} [{map.uploader.name}, "
|
f"Fetched map: '{map.name}' by {map.metadata.song_author_name} [{map.uploader.name}, "
|
||||||
# f"created at {map.created_at.strftime('%Y-%m-%dT%H:%M:%S')}, "
|
# f"created at {map.created_at.strftime('%Y-%m-%dT%H:%M:%S')}, "
|
||||||
# f"last published at {map.last_published_at.strftime('%Y-%m-%dT%H:%M:%S')}, "
|
# f"last published at {map.last_published_at.strftime('%Y-%m-%dT%H:%M:%S')}, "
|
||||||
f"updated at {map.updated_at.strftime('%m-%d %H:%M')}, "
|
# f"updated at {map.updated_at.strftime('%m-%d %H:%M')}, "
|
||||||
# f"uploaded on {map.uploaded.strftime('%Y-%m-%dT%H:%M:%S')}"
|
f"uploaded on {map.uploaded.strftime('%Y-%m-%dT%H:%M:%S')}"
|
||||||
)
|
)
|
||||||
|
|
||||||
new_maps = [map for map in maps.docs if map not in all_maps]
|
new_maps = [map for map in maps.docs if map not in all_maps]
|
||||||
@ -178,4 +179,4 @@ def is_running_in_repl():
|
|||||||
if is_running_in_repl():
|
if is_running_in_repl():
|
||||||
self = BeatSaverAPI()
|
self = BeatSaverAPI()
|
||||||
print("REPL environment detected. 'self' instance of BeatSaverAPI created for convenience.")
|
print("REPL environment detected. 'self' instance of BeatSaverAPI created for convenience.")
|
||||||
"""
|
"""
|
||||||
|
@ -27,7 +27,8 @@ class ScoreSaberAPI:
|
|||||||
|
|
||||||
def _determine_cache_dir(self) -> str:
|
def _determine_cache_dir(self) -> str:
|
||||||
home_cache = os.path.expanduser("~/.cache")
|
home_cache = os.path.expanduser("~/.cache")
|
||||||
scoresaber_cache = os.path.join(home_cache, "scoresaber")
|
saberlist_cache = os.path.join(home_cache, "saberlist")
|
||||||
|
scoresaber_cache = os.path.join(saberlist_cache, "scoresaber")
|
||||||
|
|
||||||
if os.path.exists(home_cache):
|
if os.path.exists(home_cache):
|
||||||
if not os.path.exists(scoresaber_cache):
|
if not os.path.exists(scoresaber_cache):
|
||||||
|
@ -27,6 +27,7 @@ class SimpleBeatLeaderAPI:
|
|||||||
def _determine_cache_dir(self):
|
def _determine_cache_dir(self):
|
||||||
home_cache = os.path.expanduser("~/.cache")
|
home_cache = os.path.expanduser("~/.cache")
|
||||||
saberlist_cache = os.path.join(home_cache, "saberlist")
|
saberlist_cache = os.path.join(home_cache, "saberlist")
|
||||||
|
beatleader_cache = os.path.join(saberlist_cache, "beatleader")
|
||||||
|
|
||||||
if os.path.exists(home_cache):
|
if os.path.exists(home_cache):
|
||||||
if not os.path.exists(saberlist_cache):
|
if not os.path.exists(saberlist_cache):
|
||||||
@ -36,7 +37,7 @@ class SimpleBeatLeaderAPI:
|
|||||||
except OSError as e:
|
except OSError as e:
|
||||||
logging.warning(f"Failed to create {saberlist_cache}: {e}")
|
logging.warning(f"Failed to create {saberlist_cache}: {e}")
|
||||||
return os.path.join(os.getcwd(), ".cache")
|
return os.path.join(os.getcwd(), ".cache")
|
||||||
return saberlist_cache
|
return beatleader_cache
|
||||||
else:
|
else:
|
||||||
logging.info("~/.cache doesn't exist, using local .cache directory")
|
logging.info("~/.cache doesn't exist, using local .cache directory")
|
||||||
return os.path.join(os.getcwd(), ".cache")
|
return os.path.join(os.getcwd(), ".cache")
|
||||||
|
@ -116,19 +116,26 @@ def infer_beatleader_leaderboard_id(song_id: str, difficulty: str) -> str:
|
|||||||
|
|
||||||
def playlist_strategy_scoresaber_oldscores(
|
def playlist_strategy_scoresaber_oldscores(
|
||||||
api: ScoreSaberAPI,
|
api: ScoreSaberAPI,
|
||||||
song_count: int = 20 # Total number of songs to select
|
song_count: int = 20
|
||||||
) -> List[Dict[str, Any]]:
|
) -> List[Dict[str, Any]]:
|
||||||
"""Build and format a list of songs based on old scores from ScoreSaber, avoiding reusing the same song+difficulty."""
|
"""Build and format a list of songs based on old scores from ScoreSaber, avoiding reusing the same song+difficulty."""
|
||||||
|
|
||||||
player_id = prompt_for_player_id()
|
player_id = prompt_for_player_id()
|
||||||
history = load_history()
|
history = load_history()
|
||||||
history.setdefault('scoresaber_oldscores', {})
|
history.setdefault('scoresaber_oldscores', {})
|
||||||
|
history.setdefault('playlist_counts', {})
|
||||||
|
|
||||||
|
# Get the current count for ScoreSaber old scores and increment it
|
||||||
|
count_key = 'scoresaber_oldscores'
|
||||||
|
current_count = history['playlist_counts'].get(count_key, 0)
|
||||||
|
new_count = current_count + 1
|
||||||
|
history['playlist_counts'][count_key] = new_count
|
||||||
|
|
||||||
scores_data = api.get_player_scores(player_id, use_cache=True)
|
scores_data = api.get_player_scores(player_id, use_cache=True)
|
||||||
all_scores = scores_data.get('playerScores', [])
|
all_scores = scores_data.get('playerScores', [])
|
||||||
if not all_scores:
|
if not all_scores:
|
||||||
logging.warning(f"No scores found for player ID {player_id}.")
|
logging.warning(f"No scores found for player ID {player_id}.")
|
||||||
return []
|
return [], ""
|
||||||
logging.debug(f"Found {len(all_scores)} scores for player ID {player_id}.")
|
logging.debug(f"Found {len(all_scores)} scores for player ID {player_id}.")
|
||||||
|
|
||||||
# Sort scores by timeSet in ascending order (oldest first)
|
# Sort scores by timeSet in ascending order (oldest first)
|
||||||
@ -208,28 +215,28 @@ def playlist_strategy_scoresaber_oldscores(
|
|||||||
history['scoresaber_oldscores'].setdefault(song_id, []).append(difficulty_name)
|
history['scoresaber_oldscores'].setdefault(song_id, []).append(difficulty_name)
|
||||||
save_history(history)
|
save_history(history)
|
||||||
|
|
||||||
return playlist_data
|
return playlist_data, f"scoresaber_oldscores-{new_count:02d}"
|
||||||
|
|
||||||
def playlist_strategy_beatleader_oldscores(
|
def playlist_strategy_beatleader_oldscores(
|
||||||
api: BeatLeaderAPI,
|
api: BeatLeaderAPI,
|
||||||
song_count: int = 20
|
song_count: int = 20
|
||||||
) -> List[Dict[str, Any]]:
|
) -> List[Dict[str, Any]]:
|
||||||
"""
|
|
||||||
Build and format a list of songs based on old scores from BeatLeader,
|
|
||||||
avoiding reusing the same song+difficulty.
|
|
||||||
|
|
||||||
The playlist will consist of song hashes and their corresponding difficulties.
|
|
||||||
"""
|
|
||||||
|
|
||||||
player_id = prompt_for_player_id()
|
player_id = prompt_for_player_id()
|
||||||
history = load_history()
|
history = load_history()
|
||||||
history.setdefault('beatleader_oldscores', {})
|
history.setdefault('beatleader_oldscores', {})
|
||||||
|
history.setdefault('playlist_counts', {})
|
||||||
|
|
||||||
|
# Get the current count for BeatLeader old scores and increment it
|
||||||
|
count_key = 'beatleader_oldscores'
|
||||||
|
current_count = history['playlist_counts'].get(count_key, 0)
|
||||||
|
new_count = current_count + 1
|
||||||
|
history['playlist_counts'][count_key] = new_count
|
||||||
|
|
||||||
scores_data = api.get_player_scores(player_id)
|
scores_data = api.get_player_scores(player_id)
|
||||||
all_scores = scores_data.get('playerScores', [])
|
all_scores = scores_data.get('playerScores', [])
|
||||||
if not all_scores:
|
if not all_scores:
|
||||||
logging.warning(f"No scores found for player ID {player_id} on BeatLeader.")
|
logging.warning(f"No scores found for player ID {player_id} on BeatLeader.")
|
||||||
return []
|
return [], ""
|
||||||
logging.debug(f"Found {len(all_scores)} scores for player ID {player_id} on BeatLeader.")
|
logging.debug(f"Found {len(all_scores)} scores for player ID {player_id} on BeatLeader.")
|
||||||
|
|
||||||
# Sort scores by epochTime in ascending order (oldest first)
|
# Sort scores by epochTime in ascending order (oldest first)
|
||||||
@ -300,7 +307,7 @@ def playlist_strategy_beatleader_oldscores(
|
|||||||
|
|
||||||
save_history(history)
|
save_history(history)
|
||||||
|
|
||||||
return playlist_data
|
return playlist_data, f"beatleader_oldscores-{new_count:02d}"
|
||||||
|
|
||||||
def map_leaders_by_month(month: int = 9, year: int = 2024, game_modes: List[str] = ['Standard']) -> List[Dict]:
|
def map_leaders_by_month(month: int = 9, year: int = 2024, game_modes: List[str] = ['Standard']) -> List[Dict]:
|
||||||
"""
|
"""
|
||||||
@ -408,8 +415,8 @@ def playlist_strategy_highest_accuracy(
|
|||||||
except ValueError:
|
except ValueError:
|
||||||
print("Invalid input. Please enter numbers only.")
|
print("Invalid input. Please enter numbers only.")
|
||||||
|
|
||||||
# Get the current count for this year/month and increment it
|
# Get the current count for highest accuracy and increment it
|
||||||
count_key = f"{year}-{month:02d}"
|
count_key = f"highest_accuracy-{year}-{month:02d}"
|
||||||
current_count = history['playlist_counts'].get(count_key, 0)
|
current_count = history['playlist_counts'].get(count_key, 0)
|
||||||
new_count = current_count + 1
|
new_count = current_count + 1
|
||||||
history['playlist_counts'][count_key] = new_count
|
history['playlist_counts'][count_key] = new_count
|
||||||
@ -418,7 +425,7 @@ def playlist_strategy_highest_accuracy(
|
|||||||
|
|
||||||
if not leaderboard_data:
|
if not leaderboard_data:
|
||||||
logging.error(f"No map+difficulty data available for {calendar.month_name[month]} {year}.")
|
logging.error(f"No map+difficulty data available for {calendar.month_name[month]} {year}.")
|
||||||
return []
|
return [], ""
|
||||||
|
|
||||||
# Sort the data by average_accuracy in descending order
|
# Sort the data by average_accuracy in descending order
|
||||||
sorted_data = sorted(
|
sorted_data = sorted(
|
||||||
@ -470,13 +477,10 @@ def saberlist() -> None:
|
|||||||
"""
|
"""
|
||||||
strategy = get_strategy()
|
strategy = get_strategy()
|
||||||
|
|
||||||
timestamp = datetime.now().strftime("%y%m%d_%H%M%S")
|
|
||||||
playlist_title = f"{strategy}-{timestamp}"
|
|
||||||
|
|
||||||
if strategy == 'scoresaber_oldscores':
|
if strategy == 'scoresaber_oldscores':
|
||||||
playlist_data = playlist_strategy_scoresaber_oldscores(ScoreSaberAPI(cache_expiry_days=CACHE_EXPIRY_DAYS))
|
playlist_data, playlist_title = playlist_strategy_scoresaber_oldscores(ScoreSaberAPI(cache_expiry_days=CACHE_EXPIRY_DAYS))
|
||||||
elif strategy == 'beatleader_oldscores':
|
elif strategy == 'beatleader_oldscores':
|
||||||
playlist_data = playlist_strategy_beatleader_oldscores(BeatLeaderAPI(cache_expiry_days=CACHE_EXPIRY_DAYS))
|
playlist_data, playlist_title = playlist_strategy_beatleader_oldscores(BeatLeaderAPI(cache_expiry_days=CACHE_EXPIRY_DAYS))
|
||||||
elif strategy == 'highest_accuracy':
|
elif strategy == 'highest_accuracy':
|
||||||
playlist_data, playlist_title = playlist_strategy_highest_accuracy()
|
playlist_data, playlist_title = playlist_strategy_highest_accuracy()
|
||||||
else:
|
else:
|
||||||
|
Loading…
Reference in New Issue
Block a user