File size: 1,910 Bytes
aad9d66
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
"""
Request validation utilities
"""
from typing import Dict, Optional

def validate_generation_params(data: Dict) -> Optional[str]:
    """
    Validate music generation parameters
    
    Args:
        data: Request data dictionary
        
    Returns:
        Error message if validation fails, None otherwise
    """
    if not data:
        return "Request body is required"
    
    if 'prompt' not in data:
        return "Missing required field: prompt"
    
    if not data['prompt'] or not data['prompt'].strip():
        return "Prompt cannot be empty"
    
    if 'duration' in data:
        duration = data['duration']
        if not isinstance(duration, (int, float)):
            return "Duration must be a number"
        if duration < 10 or duration > 120:
            return "Duration must be between 10 and 120 seconds"
    
    if 'use_vocals' in data:
        if not isinstance(data['use_vocals'], bool):
            return "use_vocals must be a boolean"
        
        if data['use_vocals'] and not data.get('lyrics'):
            return "Lyrics are required when use_vocals is true"
    
    return None

def validate_clip_data(data: Dict) -> Optional[str]:
    """
    Validate timeline clip data
    
    Args:
        data: Clip data dictionary
        
    Returns:
        Error message if validation fails, None otherwise
    """
    required_fields = ['clip_id', 'file_path', 'duration', 'position']
    
    for field in required_fields:
        if field not in data:
            return f"Missing required field: {field}"
    
    if not isinstance(data['duration'], (int, float)) or data['duration'] <= 0:
        return "Duration must be a positive number"
    
    valid_positions = ['intro', 'previous', 'next', 'outro']
    if data['position'] not in valid_positions:
        return f"Invalid position. Must be one of: {', '.join(valid_positions)}"
    
    return None