From c0cd6c85345e49da101db05c7597ec107f4996de Mon Sep 17 00:00:00 2001 From: Neda Moeini <neda.moeini@GA0479-NMOEINI.local> Date: Fri, 11 Aug 2023 12:00:14 +0200 Subject: [PATCH] Updated import site endpoint. --- gso/api/api_v1/endpoints/import_site.py | 22 +++++++++++++++++----- gso/workflows/tasks/import_site.py | 1 + 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/gso/api/api_v1/endpoints/import_site.py b/gso/api/api_v1/endpoints/import_site.py index 5c5ef1a0..340c89b0 100644 --- a/gso/api/api_v1/endpoints/import_site.py +++ b/gso/api/api_v1/endpoints/import_site.py @@ -1,8 +1,8 @@ from typing import Dict, Any -from fastapi import HTTPException +from fastapi import HTTPException, status from fastapi.routing import APIRouter -from orchestrator.services import processes +from orchestrator.services import processes, subscriptions from pydantic import BaseModel from gso.products.product_blocks.site import SiteTier @@ -20,19 +20,31 @@ class SiteImport(BaseModel): site_bgp_community_id: int site_internal_id: int site_tier: SiteTier + site_ts_address: str -@router.post("/", tags=["Import"]) +@router.post("/", status_code=status.HTTP_201_CREATED, tags=["Import"]) def import_site(site: SiteImport) -> Dict[str, Any]: """ Import site by running the import_site workflow. + response: + - pid: The process id of the started process. + Raises: + HTTPException: If the site already exists or if there's an error in the process. """ + subscription = subscriptions.retrieve_subscription_by_subscription_instance_value( + resource_type="site_name", value=site.site_name, sub_status=("provisioning", "active")) + if subscription: + raise HTTPException(status_code=status.HTTP_409_CONFLICT, detail="Site already exists.") + pid = processes.start_process("import_site", [site.dict()]) if pid is None: - raise HTTPException(status_code=500, detail="Failed to start the process.") + raise HTTPException(status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail="Failed to start the process.") process = processes._get_process(pid) # pylint: disable=protected-access if process.last_status == "failed": raise HTTPException( - status_code=500, detail=f"Process {pid} failed because of an internal error.") + status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, + detail=f"Process {pid} failed because of an internal error.") + return {"pid": str(pid)} diff --git a/gso/workflows/tasks/import_site.py b/gso/workflows/tasks/import_site.py index 43f3686c..2dbc2a8a 100644 --- a/gso/workflows/tasks/import_site.py +++ b/gso/workflows/tasks/import_site.py @@ -38,6 +38,7 @@ def generate_initial_input_form() -> FormGenerator: site_bgp_community_id: int site_internal_id: int site_tier: SiteTier + site_ts_address: str user_input = yield ImportSite return user_input.dict() -- GitLab