Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
46 changes: 43 additions & 3 deletions libs/executors/garf/executors/entrypoints/server.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,9 +22,11 @@
import typer
import uvicorn
from garf.executors import exceptions
from garf.executors.entrypoints import utils
from garf.executors.entrypoints.tracer import initialize_tracer
from garf.io import reader
from opentelemetry.instrumentation.fastapi import FastAPIInstrumentor
from pydantic_settings import BaseSettings, SettingsConfigDict
from typing_extensions import Annotated

initialize_tracer()
Expand All @@ -33,6 +35,36 @@
typer_app = typer.Typer()


class GarfSettings(BaseSettings):
"""Specifies environmental variables for garf.

Ensure that mandatory variables are exposed via
export ENV_VARIABLE_NAME=VALUE.

Attributes:
loglevel: Level of logging.
log_name: Name of log.
logger_type: Type of logger.
"""

model_config = SettingsConfigDict(env_prefix='garf_')

loglevel: str = 'INFO'
log_name: str = 'garf'
logger_type: str = 'local'


class GarfDependencies:
def __init__(self) -> None:
"""Initializes GarfDependencies."""
settings = GarfSettings()
self.logger = utils.init_logging(
loglevel=settings.loglevel,
logger_type=settings.logger_type,
name=settings.log_name,
)


class ApiExecutorRequest(pydantic.BaseModel):
"""Request for executing a query.

Expand Down Expand Up @@ -81,13 +113,18 @@ async def version() -> str:


@app.get('/api/fetchers')
async def get_fetchers() -> list[str]:
async def get_fetchers(
dependencies: Annotated[GarfDependencies, fastapi.Depends(GarfDependencies)],
) -> list[str]:
"""Shows all available API sources."""
return list(garf.executors.fetchers.find_fetchers())


@app.post('/api/execute')
def execute(request: ApiExecutorRequest) -> ApiExecutorResponse:
def execute(
request: ApiExecutorRequest,
dependencies: Annotated[GarfDependencies, fastapi.Depends(GarfDependencies)],
) -> ApiExecutorResponse:
query_executor = garf.executors.setup_executor(
request.source, request.context.fetcher_parameters
)
Expand All @@ -96,7 +133,10 @@ def execute(request: ApiExecutorRequest) -> ApiExecutorResponse:


@app.post('/api/execute:batch')
def execute_batch(request: ApiExecutorRequest) -> ApiExecutorResponse:
def execute_batch(
request: ApiExecutorRequest,
dependencies: Annotated[GarfDependencies, fastapi.Depends(GarfDependencies)],
) -> ApiExecutorResponse:
query_executor = garf.executors.setup_executor(
request.source, request.context.fetcher_parameters
)
Expand Down
1 change: 1 addition & 0 deletions libs/executors/pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@ gcp= [
]
server=[
"fastapi[standard]",
"pydantic-settings",
"opentelemetry-instrumentation-fastapi",
"typer",
"grpcio-reflection",
Expand Down