Update scripts/playlist_builder.py
Some checks are pending
Generate M3U Playlist with Auto-Organization / build-and-organize (push) Waiting to run

This commit is contained in:
stoney420 2025-06-28 06:51:03 +02:00
parent 31807417a1
commit 9bfac06327

View file

@ -1,3 +1,92 @@
#!/usr/bin/env python3
"""
IPTV Repository Monthly Maintenance
Run automatically by workflow
"""
import os
import shutil
import gzip
from pathlib import Path
from datetime import datetime, timedelta
def monthly_maintenance():
"""Run monthly maintenance tasks."""
print("🧹 IPTV Repository Monthly Maintenance")
print("=" * 40)
root_path = Path.cwd()
actions = []
# 1. Compress old backups
print("1. Compressing old backups...")
backups_dir = root_path / 'backups'
cutoff_date = datetime.now() - timedelta(days=7)
if backups_dir.exists():
for backup_file in backups_dir.glob('*.txt'):
try:
file_date = datetime.fromtimestamp(backup_file.stat().st_mtime)
if file_date < cutoff_date:
compressed_path = backup_file.with_suffix('.txt.gz')
if not compressed_path.exists():
with open(backup_file, 'rb') as f_in:
with gzip.open(compressed_path, 'wb') as f_out:
shutil.copyfileobj(f_in, f_out)
backup_file.unlink()
actions.append(f"Compressed: {backup_file.name}")
except Exception as e:
print(f" Warning: {e}")
# 2. Archive old reports
print("2. Archiving old reports...")
reports_dir = root_path / 'reports' / 'daily'
archive_dir = root_path / 'reports' / 'archive'
cutoff_date = datetime.now() - timedelta(days=30)
if reports_dir.exists():
for report_file in reports_dir.glob('*.md'):
try:
file_date = datetime.fromtimestamp(report_file.stat().st_mtime)
if file_date < cutoff_date:
month_folder = archive_dir / file_date.strftime('%Y-%m')
month_folder.mkdir(parents=True, exist_ok=True)
new_path = month_folder / report_file.name
shutil.move(str(report_file), str(new_path))
actions.append(f"Archived: {report_file.name}")
except Exception as e:
print(f" Warning: {e}")
# 3. Clean temporary files
print("3. Cleaning temporary files...")
patterns = ['*_temp*', '*.tmp', '*~', '*.swp']
for pattern in patterns:
for temp_file in root_path.rglob(pattern):
if temp_file.is_file() and '.git' not in str(temp_file):
try:
temp_file.unlink()
actions.append(f"Removed: {temp_file.relative_to(root_path)}")
except Exception as e:
print(f" Warning: {e}")
print(f"\n✅ Monthly maintenance complete! {len(actions)} actions taken")
if actions:
for action in actions[:5]:
print(f"{action}")
if len(actions) > 5:
print(f" ... and {len(actions) - 5} more")
if __name__ == "__main__":
monthly_maintenance()
playlist_builder.py
--------------------
""" """
Playlist Builder - Generates the final M3U playlist Playlist Builder - Generates the final M3U playlist
""" """