|
from embedchain import App |
|
from fastapi import APIRouter, Response, status |
|
from pydantic import BaseModel |
|
|
|
from routes.admin.utils import (set_env_variables, unset_env_variables, |
|
validate_json) |
|
from utils.embedchain import EC_APP_CONFIG |
|
|
|
router = APIRouter() |
|
ec_app = App.from_config(config=EC_APP_CONFIG) |
|
|
|
|
|
class DataSourceModel(BaseModel): |
|
dataType: str |
|
dataValue: str |
|
metadata: str |
|
envVariables: str |
|
|
|
|
|
@router.get("/api/v1/admin/data_sources") |
|
async def get_all_data_sources(): |
|
data_sources = ec_app.get_data_sources() |
|
response = data_sources |
|
for i in response: |
|
i.update({"app_id": ec_app.config.id}) |
|
return response |
|
|
|
|
|
@router.post("/api/v1/admin/data_sources", status_code=201) |
|
async def add_data_source(data_source: DataSourceModel, response: Response): |
|
""" |
|
Adds a new source to the Embedchain app. |
|
""" |
|
data_type = data_source.dataType |
|
data_value = data_source.dataValue |
|
metadata = data_source.metadata |
|
env_variables = data_source.envVariables |
|
|
|
|
|
params = {"source": data_value, "data_type": data_type} |
|
if metadata and not validate_json(metadata): |
|
response.status_code = status.HTTP_400_BAD_REQUEST |
|
return {"message": "Invalid metadata. Enter a valid JSON object."} |
|
|
|
if env_variables and not validate_json(env_variables): |
|
response.status_code = status.HTTP_400_BAD_REQUEST |
|
return {"message": "Invalid environment variables. Enter a valid JSON object."} |
|
|
|
try: |
|
set_env_variables(env_variables) |
|
ec_app.add(**params) |
|
unset_env_variables(env_variables) |
|
return {"message": f"Data of {data_type=} added successfully."} |
|
except Exception as e: |
|
message = f"An error occurred: Error message: {str(e)}." |
|
response.status_code = status.HTTP_400_BAD_REQUEST |
|
return {"message": message} |
|
|