Update .forgejo/scripts/radio_country_export.py
This commit is contained in:
parent
447760c010
commit
3b911b9339
1 changed files with 49 additions and 16 deletions
|
@ -20,6 +20,39 @@ class RateLimitError(Exception):
|
|||
"""Exception raised when rate limit is hit"""
|
||||
pass
|
||||
|
||||
def get_workspace_safe_path(output_file):
|
||||
"""
|
||||
Ensure output path is safe for CI/CD environments.
|
||||
If GITHUB_WORKSPACE is set and output_file is relative, use workspace as base.
|
||||
"""
|
||||
if not output_file:
|
||||
return None
|
||||
|
||||
# If already absolute path, return as-is
|
||||
if os.path.isabs(output_file):
|
||||
return output_file
|
||||
|
||||
# Check if we're in a CI environment with GITHUB_WORKSPACE
|
||||
workspace = os.environ.get('GITHUB_WORKSPACE')
|
||||
if workspace and os.path.exists(workspace):
|
||||
return os.path.join(workspace, output_file)
|
||||
|
||||
# Fallback to current working directory for relative paths
|
||||
return os.path.abspath(output_file)
|
||||
|
||||
def generate_safe_output_path(output_file, country_codes):
|
||||
"""Generate a safe output path for the playlist file"""
|
||||
if not output_file:
|
||||
country_string = "_".join(country_codes[:5]).upper()
|
||||
if len(country_codes) > 5:
|
||||
country_string += "_etc"
|
||||
output_file = f"radio_playlist_{country_string}_{datetime.now().strftime('%Y%m%d')}.m3u"
|
||||
|
||||
# Make sure the path is workspace-safe
|
||||
safe_path = get_workspace_safe_path(output_file)
|
||||
print(f"Output file will be created at: {safe_path}")
|
||||
return safe_path
|
||||
|
||||
def fetch_stations_with_retry(rb, country_code, max_retries=5, initial_backoff=10):
|
||||
"""
|
||||
Fetch stations with retry logic for rate limiting
|
||||
|
@ -76,12 +109,8 @@ def create_multi_country_playlist(country_codes, output_file=None, group_title="
|
|||
# Initialize RadioBrowser client
|
||||
rb = RadioBrowser()
|
||||
|
||||
# Generate output filename if not provided
|
||||
if not output_file:
|
||||
country_string = "_".join(country_codes[:5]).upper() # Use first 5 countries for filename
|
||||
if len(country_codes) > 5:
|
||||
country_string += "_etc"
|
||||
output_file = f"radio_playlist_{country_string}_{datetime.now().strftime('%Y%m%d')}.m3u"
|
||||
# Generate safe output filename
|
||||
output_file = generate_safe_output_path(output_file, country_codes)
|
||||
|
||||
# Get all country information for validation and display
|
||||
try:
|
||||
|
@ -158,16 +187,20 @@ def create_multi_country_playlist(country_codes, output_file=None, group_title="
|
|||
|
||||
if failed_countries:
|
||||
print(f"Failed to process these countries: {', '.join(failed_countries)}")
|
||||
retry_option = input("Would you like to retry failed countries? (y/n): ")
|
||||
if retry_option.lower() == 'y':
|
||||
print("Retrying failed countries...")
|
||||
# Wait a bit longer before retrying failed countries
|
||||
time.sleep(30)
|
||||
return create_multi_country_playlist(failed_countries,
|
||||
f"retry_{output_file}",
|
||||
group_title,
|
||||
default_logo_url,
|
||||
use_country_as_group)
|
||||
# In CI environment, don't ask for user input - just log and continue
|
||||
if os.environ.get('GITHUB_WORKSPACE') or os.environ.get('CI'):
|
||||
print("Running in CI environment - skipping retry prompt")
|
||||
else:
|
||||
retry_option = input("Would you like to retry failed countries? (y/n): ")
|
||||
if retry_option.lower() == 'y':
|
||||
print("Retrying failed countries...")
|
||||
# Wait a bit longer before retrying failed countries
|
||||
time.sleep(30)
|
||||
return create_multi_country_playlist(failed_countries,
|
||||
f"retry_{os.path.basename(output_file)}",
|
||||
group_title,
|
||||
default_logo_url,
|
||||
use_country_as_group)
|
||||
|
||||
# Create M3U playlist
|
||||
with open(output_file, 'w', encoding='utf-8') as f:
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue