|
40 | 40 | from .models.graph_structure_models import GraphStructureResponse |
41 | 41 | from .controller.get_graph_structure import get_graph_structure |
42 | 42 |
|
| 43 | +### singnals |
| 44 | +from .models.signal_models import SignalResponseModel |
| 45 | +from .models.signal_models import PruneRequestModel |
| 46 | +from .controller.prune_signal import prune_signal |
| 47 | +from .models.signal_models import ReEnqueueAfterRequestModel |
| 48 | +from .controller.re_queue_after_singal import re_queue_after_signal |
| 49 | + |
| 50 | + |
43 | 51 | logger = LogsManager().get_logger() |
44 | 52 |
|
45 | 53 | router = APIRouter(prefix="/v0/namespace/{namespace_name}") |
@@ -145,6 +153,44 @@ async def errored_state_route(namespace_name: str, state_id: str, body: ErroredR |
145 | 153 | return await errored_state(namespace_name, PydanticObjectId(state_id), body, x_exosphere_request_id) |
146 | 154 |
|
147 | 155 |
|
| 156 | +@router.post( |
| 157 | + "/states/{state_id}/prune", |
| 158 | + response_model=SignalResponseModel, |
| 159 | + status_code=status.HTTP_200_OK, |
| 160 | + response_description="State skipped successfully", |
| 161 | + tags=["state"] |
| 162 | +) |
| 163 | +async def prune_state_route(namespace_name: str, state_id: str, body: PruneRequestModel, request: Request, api_key: str = Depends(check_api_key)): |
| 164 | + x_exosphere_request_id = getattr(request.state, "x_exosphere_request_id", str(uuid4())) |
| 165 | + |
| 166 | + if api_key: |
| 167 | + logger.info(f"API key is valid for namespace {namespace_name}", x_exosphere_request_id=x_exosphere_request_id) |
| 168 | + else: |
| 169 | + logger.error(f"API key is invalid for namespace {namespace_name}", x_exosphere_request_id=x_exosphere_request_id) |
| 170 | + raise HTTPException(status_code=status.HTTP_401_UNAUTHORIZED, detail="Invalid API key") |
| 171 | + |
| 172 | + return await prune_signal(namespace_name, PydanticObjectId(state_id), body, x_exosphere_request_id) |
| 173 | + |
| 174 | + |
| 175 | +@router.post( |
| 176 | + "/states/{state_id}/re-enqueue-after", |
| 177 | + response_model=SignalResponseModel, |
| 178 | + status_code=status.HTTP_200_OK, |
| 179 | + response_description="State re-enqueued successfully", |
| 180 | + tags=["state"] |
| 181 | +) |
| 182 | +async def re_enqueue_after_state_route(namespace_name: str, state_id: str, body: ReEnqueueAfterRequestModel, request: Request, api_key: str = Depends(check_api_key)): |
| 183 | + x_exosphere_request_id = getattr(request.state, "x_exosphere_request_id", str(uuid4())) |
| 184 | + |
| 185 | + if api_key: |
| 186 | + logger.info(f"API key is valid for namespace {namespace_name}", x_exosphere_request_id=x_exosphere_request_id) |
| 187 | + else: |
| 188 | + logger.error(f"API key is invalid for namespace {namespace_name}", x_exosphere_request_id=x_exosphere_request_id) |
| 189 | + raise HTTPException(status_code=status.HTTP_401_UNAUTHORIZED, detail="Invalid API key") |
| 190 | + |
| 191 | + return await re_queue_after_signal(namespace_name, PydanticObjectId(state_id), body, x_exosphere_request_id) |
| 192 | + |
| 193 | + |
148 | 194 | @router.put( |
149 | 195 | "/graph/{graph_name}", |
150 | 196 | response_model=UpsertGraphTemplateResponse, |
|
0 commit comments