131 lines
3.0 KiB
Python
131 lines
3.0 KiB
Python
"""
|
|
gRPC message definitions for MPR worker communication.
|
|
|
|
This is the source of truth for gRPC messages. The generator creates:
|
|
- grpc/protos/worker.proto (protobuf definition)
|
|
- grpc/worker_pb2.py (generated Python classes)
|
|
- grpc/worker_pb2_grpc.py (generated gRPC stubs)
|
|
"""
|
|
|
|
from dataclasses import dataclass
|
|
from typing import Optional
|
|
|
|
# -----------------------------------------------------------------------------
|
|
# Request Messages
|
|
# -----------------------------------------------------------------------------
|
|
|
|
|
|
@dataclass
|
|
class JobRequest:
|
|
"""Request to submit a transcode/trim job."""
|
|
|
|
job_id: str
|
|
source_path: str
|
|
output_path: str
|
|
preset_json: str # Serialized TranscodePreset
|
|
trim_start: Optional[float] = None
|
|
trim_end: Optional[float] = None
|
|
|
|
|
|
@dataclass
|
|
class ProgressRequest:
|
|
"""Request to stream progress updates for a job."""
|
|
|
|
job_id: str
|
|
|
|
|
|
@dataclass
|
|
class CancelRequest:
|
|
"""Request to cancel a running job."""
|
|
|
|
job_id: str
|
|
|
|
|
|
@dataclass
|
|
class Empty:
|
|
"""Empty message for requests with no parameters."""
|
|
|
|
pass
|
|
|
|
|
|
# -----------------------------------------------------------------------------
|
|
# Response Messages
|
|
# -----------------------------------------------------------------------------
|
|
|
|
|
|
@dataclass
|
|
class JobResponse:
|
|
"""Response after submitting a job."""
|
|
|
|
job_id: str
|
|
accepted: bool
|
|
message: str
|
|
|
|
|
|
@dataclass
|
|
class ProgressUpdate:
|
|
"""Streaming progress update from worker."""
|
|
|
|
job_id: str
|
|
progress: int # 0-100
|
|
current_frame: int
|
|
current_time: float
|
|
speed: float # e.g., 2.5x
|
|
status: str # pending, processing, completed, failed, cancelled
|
|
error: Optional[str] = None
|
|
|
|
|
|
@dataclass
|
|
class CancelResponse:
|
|
"""Response after cancel request."""
|
|
|
|
job_id: str
|
|
cancelled: bool
|
|
message: str
|
|
|
|
|
|
@dataclass
|
|
class WorkerStatus:
|
|
"""Worker health and capabilities."""
|
|
|
|
available: bool
|
|
active_jobs: int
|
|
supported_codecs: list[str]
|
|
gpu_available: bool
|
|
|
|
|
|
# -----------------------------------------------------------------------------
|
|
# Service Definition (for documentation, generator uses this)
|
|
# -----------------------------------------------------------------------------
|
|
|
|
GRPC_SERVICE = {
|
|
"name": "WorkerService",
|
|
"package": "mpr.worker",
|
|
"methods": [
|
|
{
|
|
"name": "SubmitJob",
|
|
"request": JobRequest,
|
|
"response": JobResponse,
|
|
"stream_response": False,
|
|
},
|
|
{
|
|
"name": "StreamProgress",
|
|
"request": ProgressRequest,
|
|
"response": ProgressUpdate,
|
|
"stream_response": True, # Server streaming
|
|
},
|
|
{
|
|
"name": "CancelJob",
|
|
"request": CancelRequest,
|
|
"response": CancelResponse,
|
|
"stream_response": False,
|
|
},
|
|
{
|
|
"name": "GetWorkerStatus",
|
|
"request": Empty,
|
|
"response": WorkerStatus,
|
|
"stream_response": False,
|
|
},
|
|
],
|
|
}
|