Nexora-Encoder / app /utils.py
ChandimaPrabath's picture
upload
e2c1f2e
import uuid
import os
from pathlib import Path
from werkzeug.utils import secure_filename
import logging
logger = logging.getLogger(__name__)
def generate_job_id():
"""Generate a unique job ID."""
return str(uuid.uuid4())
def allowed_file(filename, allowed_extensions):
"""Check if the file extension is allowed."""
return Path(filename).suffix.lower() in allowed_extensions
def get_secure_filename(filename):
"""Generate a secure filename while preserving the extension."""
name, ext = os.path.splitext(filename)
secure_name = secure_filename(name)
return f"{secure_name}{ext}"
def ensure_directory(directory):
"""Ensure a directory exists, create if it doesn't."""
try:
Path(directory).mkdir(parents=True, exist_ok=True)
return True
except Exception as e:
logger.error(f"Failed to create directory {directory}: {str(e)}")
return False
def get_video_path(job_id, quality, base_dir):
"""Generate the path for an encoded video file."""
return Path(base_dir) / job_id / f"{quality}.mp4"
def cleanup_job_files(job_id, upload_dir, encoded_dir):
"""Clean up temporary files after job completion or failure."""
try:
# Remove uploaded file
upload_path = Path(upload_dir) / job_id
if upload_path.exists():
upload_path.unlink()
# Remove encoded files directory
encoded_path = Path(encoded_dir) / job_id
if encoded_path.exists():
for file in encoded_path.glob('*'):
file.unlink()
encoded_path.rmdir()
logger.info(f"Cleaned up files for job {job_id}")
return True
except Exception as e:
logger.error(f"Failed to cleanup files for job {job_id}: {str(e)}")
return False
def get_job_status_message(status_code):
"""Convert status code to human-readable message."""
status_messages = {
'pending': 'Job is queued for processing',
'processing': 'Video encoding is in progress',
'completed': 'Video encoding completed successfully',
'failed': 'Video encoding failed',
'invalid_file': 'Invalid file type uploaded'
}
return status_messages.get(status_code, 'Unknown status')