django and fastapi apps
This commit is contained in:
130
schema/models/grpc.py
Normal file
130
schema/models/grpc.py
Normal file
@@ -0,0 +1,130 @@
|
||||
"""
|
||||
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,
|
||||
},
|
||||
],
|
||||
}
|
||||
Reference in New Issue
Block a user