diff options
| author | Astounds <kirito@disroot.org> | 2026-03-22 14:17:23 -0500 |
|---|---|---|
| committer | Astounds <kirito@disroot.org> | 2026-03-22 14:17:23 -0500 |
| commit | 84e1acaab8f7e4e7e36d19e3b6847a0ab6c33759 (patch) | |
| tree | a4021823e3e29d1efb57271dda5024825983bacf /Makefile | |
| parent | ed4b05d9b616c688afc6ef03dc404009c4abfc0f (diff) | |
| download | yt-local-84e1acaab8f7e4e7e36d19e3b6847a0ab6c33759.tar.lz yt-local-84e1acaab8f7e4e7e36d19e3b6847a0ab6c33759.tar.xz yt-local-84e1acaab8f7e4e7e36d19e3b6847a0ab6c33759.zip | |
yt-dlp
Diffstat (limited to 'Makefile')
| -rw-r--r-- | Makefile | 210 |
1 files changed, 210 insertions, 0 deletions
diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..cf4ca99 --- /dev/null +++ b/Makefile @@ -0,0 +1,210 @@ +# yt-local Makefile +# Automated tasks for development, translations, and maintenance + +.PHONY: help install dev clean test i18n-extract i18n-init i18n-update i18n-compile i18n-stats i18n-clean setup-dev lint format backup restore + +# Variables +PYTHON := python3 +PIP := pip3 +LANG_CODE ?= es +VENV_DIR := venv +PROJECT_NAME := yt-local + +## Help +help: ## Show this help message + @echo "$(PROJECT_NAME) - Available tasks:" + @echo "" + @grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf " %-20s %s\n", $$1, $$2}' + @echo "" + @echo "Examples:" + @echo " make install # Install dependencies" + @echo " make dev # Run development server" + @echo " make i18n-extract # Extract strings for translation" + @echo " make i18n-init LANG_CODE=fr # Initialize French" + @echo " make lint # Check code style" + +## Installation and Setup +install: ## Install project dependencies + @echo "[INFO] Installing dependencies..." + $(PIP) install -r requirements.txt + @echo "[SUCCESS] Dependencies installed" + +setup-dev: ## Complete development setup + @echo "[INFO] Setting up development environment..." + $(PYTHON) -m venv $(VENV_DIR) + ./$(VENV_DIR)/bin/pip install -r requirements.txt + @echo "[SUCCESS] Virtual environment created in $(VENV_DIR)" + @echo "[INFO] Activate with: source $(VENV_DIR)/bin/activate" + +requirements: ## Update and install requirements + @echo "[INFO] Installing/updating requirements..." + $(PIP) install --upgrade pip + $(PIP) install -r requirements.txt + @echo "[SUCCESS] Requirements installed" + +## Development +dev: ## Run development server + @echo "[INFO] Starting development server..." + @echo "[INFO] Server available at: http://localhost:9010" + $(PYTHON) server.py + +run: dev ## Alias for dev + +## Testing +test: ## Run tests + @echo "[INFO] Running tests..." + @if [ -d "tests" ]; then \ + $(PYTHON) -m pytest -v; \ + else \ + echo "[WARN] No tests directory found"; \ + fi + +test-cov: ## Run tests with coverage + @echo "[INFO] Running tests with coverage..." + @if command -v pytest-cov >/dev/null 2>&1; then \ + $(PYTHON) -m pytest -v --cov=$(PROJECT_NAME) --cov-report=html; \ + else \ + echo "[WARN] pytest-cov not installed. Run: pip install pytest-cov"; \ + fi + +## Internationalization (i18n) +i18n-extract: ## Extract strings for translation + @echo "[INFO] Extracting strings for translation..." + $(PYTHON) manage_translations.py extract + @echo "[SUCCESS] Strings extracted to translations/messages.pot" + +i18n-init: ## Initialize new language (use LANG_CODE=xx) + @echo "[INFO] Initializing language: $(LANG_CODE)" + $(PYTHON) manage_translations.py init $(LANG_CODE) + @echo "[SUCCESS] Language $(LANG_CODE) initialized" + @echo "[INFO] Edit: translations/$(LANG_CODE)/LC_MESSAGES/messages.po" + +i18n-update: ## Update existing translations + @echo "[INFO] Updating existing translations..." + $(PYTHON) manage_translations.py update + @echo "[SUCCESS] Translations updated" + +i18n-compile: ## Compile translations to binary .mo files + @echo "[INFO] Compiling translations..." + $(PYTHON) manage_translations.py compile + @echo "[SUCCESS] Translations compiled" + +i18n-stats: ## Show translation statistics + @echo "[INFO] Translation statistics:" + @echo "" + @for lang_dir in translations/*/; do \ + if [ -d "$$lang_dir" ] && [ "$$lang_dir" != "translations/*/" ]; then \ + lang=$$(basename "$$lang_dir"); \ + po_file="$$lang_dir/LC_MESSAGES/messages.po"; \ + if [ -f "$$po_file" ]; then \ + total=$$(grep -c "^msgid " "$$po_file" 2>/dev/null || echo "0"); \ + translated=$$(grep -c "^msgstr \"[^\"]\+\"" "$$po_file" 2>/dev/null || echo "0"); \ + fuzzy=$$(grep -c "^#, fuzzy" "$$po_file" 2>/dev/null || echo "0"); \ + if [ "$$total" -gt 0 ]; then \ + percent=$$((translated * 100 / total)); \ + echo " [STAT] $$lang: $$translated/$$total ($$percent%) - Fuzzy: $$fuzzy"; \ + else \ + echo " [STAT] $$lang: No translations yet"; \ + fi; \ + fi \ + fi \ + done + @echo "" + +i18n-clean: ## Clean compiled translation files + @echo "[INFO] Cleaning compiled .mo files..." + find translations/ -name "*.mo" -delete + @echo "[SUCCESS] .mo files removed" + +i18n-workflow: ## Complete workflow: extract → update → compile + @echo "[INFO] Running complete translation workflow..." + @make i18n-extract + @make i18n-update + @make i18n-compile + @make i18n-stats + @echo "[SUCCESS] Translation workflow completed" + +## Code Quality +lint: ## Check code with flake8 + @echo "[INFO] Checking code style..." + @if command -v flake8 >/dev/null 2>&1; then \ + flake8 youtube/ --max-line-length=120 --ignore=E501,W503,E402 --exclude=youtube/ytdlp_service.py,youtube/ytdlp_integration.py,youtube/ytdlp_proxy.py; \ + echo "[SUCCESS] Code style check passed"; \ + else \ + echo "[WARN] flake8 not installed (pip install flake8)"; \ + fi + +format: ## Format code with black (if available) + @echo "[INFO] Formatting code..." + @if command -v black >/dev/null 2>&1; then \ + black youtube/ --line-length=120 --exclude='ytdlp_.*\.py'; \ + echo "[SUCCESS] Code formatted"; \ + else \ + echo "[WARN] black not installed (pip install black)"; \ + fi + +check-deps: ## Check installed dependencies + @echo "[INFO] Checking dependencies..." + @$(PYTHON) -c "import flask_babel; print('[OK] Flask-Babel:', flask_babel.__version__)" 2>/dev/null || echo "[ERROR] Flask-Babel not installed" + @$(PYTHON) -c "import flask; print('[OK] Flask:', flask.__version__)" 2>/dev/null || echo "[ERROR] Flask not installed" + @$(PYTHON) -c "import yt_dlp; print('[OK] yt-dlp:', yt_dlp.__version__)" 2>/dev/null || echo "[ERROR] yt-dlp not installed" + +## Maintenance +backup: ## Create translations backup + @echo "[INFO] Creating translations backup..." + @timestamp=$$(date +%Y%m%d_%H%M%S); \ + tar -czf "translations_backup_$$timestamp.tar.gz" translations/ 2>/dev/null || echo "[WARN] No translations to backup"; \ + if [ -f "translations_backup_$$timestamp.tar.gz" ]; then \ + echo "[SUCCESS] Backup created: translations_backup_$$timestamp.tar.gz"; \ + fi + +restore: ## Restore translations from backup + @echo "[INFO] Restoring translations from backup..." + @if ls translations_backup_*.tar.gz 1>/dev/null 2>&1; then \ + latest_backup=$$(ls -t translations_backup_*.tar.gz | head -1); \ + tar -xzf "$$latest_backup"; \ + echo "[SUCCESS] Restored from: $$latest_backup"; \ + else \ + echo "[ERROR] No backup files found"; \ + fi + +clean: ## Clean temporary files and caches + @echo "[INFO] Cleaning temporary files..." + find . -type f -name "*.pyc" -delete + find . -type d -name "__pycache__" -delete + find . -type f -name "*.mo" -delete + find . -type d -name ".pytest_cache" -delete + find . -type f -name ".coverage" -delete + find . -type d -name "htmlcov" -delete + @echo "[SUCCESS] Temporary files removed" + +distclean: clean ## Clean everything including venv + @echo "[INFO] Cleaning everything..." + rm -rf $(VENV_DIR) + @echo "[SUCCESS] Complete cleanup done" + +## Project Information +info: ## Show project information + @echo "[INFO] $(PROJECT_NAME) - Project information:" + @echo "" + @echo " [INFO] Directory: $$(pwd)" + @echo " [INFO] Python: $$($(PYTHON) --version)" + @echo " [INFO] Pip: $$($(PIP) --version | cut -d' ' -f1-2)" + @echo "" + @echo " [INFO] Configured languages:" + @for lang_dir in translations/*/; do \ + if [ -d "$$lang_dir" ] && [ "$$lang_dir" != "translations/*/" ]; then \ + lang=$$(basename "$$lang_dir"); \ + echo " - $$lang"; \ + fi \ + done + @echo "" + @echo " [INFO] Main files:" + @echo " - babel.cfg (i18n configuration)" + @echo " - manage_translations.py (i18n CLI)" + @echo " - youtube/i18n_strings.py (centralized strings)" + @echo " - youtube/ytdlp_service.py (yt-dlp integration)" + @echo "" + +# Default target +.DEFAULT_GOAL := help |
