Skip to content

Commit 5249aef

Browse files
feat(executors): add support for specifying logging parameters via env variables
1 parent 31faa1d commit 5249aef

File tree

2 files changed

+44
-3
lines changed

2 files changed

+44
-3
lines changed

libs/executors/garf/executors/entrypoints/server.py

Lines changed: 43 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,11 @@
2222
import typer
2323
import uvicorn
2424
from garf.executors import exceptions
25+
from garf.executors.entrypoints import utils
2526
from garf.executors.entrypoints.tracer import initialize_tracer
2627
from garf.io import reader
2728
from opentelemetry.instrumentation.fastapi import FastAPIInstrumentor
29+
from pydantic_settings import BaseSettings, SettingsConfigDict
2830
from typing_extensions import Annotated
2931

3032
initialize_tracer()
@@ -33,6 +35,36 @@
3335
typer_app = typer.Typer()
3436

3537

38+
class GarfSettings(BaseSettings):
39+
"""Specifies environmental variables for garf.
40+
41+
Ensure that mandatory variables are exposed via
42+
export ENV_VARIABLE_NAME=VALUE.
43+
44+
Attributes:
45+
loglevel: Level of logging.
46+
log_name: Name of log.
47+
logger_type: Type of logger.
48+
"""
49+
50+
model_config = SettingsConfigDict(env_prefix='garf_')
51+
52+
loglevel: str = 'INFO'
53+
log_name: str = 'garf'
54+
logger_type: str = 'local'
55+
56+
57+
class GarfDependencies:
58+
def __init__(self) -> None:
59+
"""Initializes GarfDependencies."""
60+
settings = GarfSettings()
61+
self.logger = utils.init_logging(
62+
loglevel=settings.loglevel,
63+
logger_type=settings.logger_type,
64+
name=settings.log_name,
65+
)
66+
67+
3668
class ApiExecutorRequest(pydantic.BaseModel):
3769
"""Request for executing a query.
3870
@@ -81,13 +113,18 @@ async def version() -> str:
81113

82114

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

88122

89123
@app.post('/api/execute')
90-
def execute(request: ApiExecutorRequest) -> ApiExecutorResponse:
124+
def execute(
125+
request: ApiExecutorRequest,
126+
dependencies: Annotated[GarfDependencies, fastapi.Depends(GarfDependencies)],
127+
) -> ApiExecutorResponse:
91128
query_executor = garf.executors.setup_executor(
92129
request.source, request.context.fetcher_parameters
93130
)
@@ -96,7 +133,10 @@ def execute(request: ApiExecutorRequest) -> ApiExecutorResponse:
96133

97134

98135
@app.post('/api/execute:batch')
99-
def execute_batch(request: ApiExecutorRequest) -> ApiExecutorResponse:
136+
def execute_batch(
137+
request: ApiExecutorRequest,
138+
dependencies: Annotated[GarfDependencies, fastapi.Depends(GarfDependencies)],
139+
) -> ApiExecutorResponse:
100140
query_executor = garf.executors.setup_executor(
101141
request.source, request.context.fetcher_parameters
102142
)

libs/executors/pyproject.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ gcp= [
5555
]
5656
server=[
5757
"fastapi[standard]",
58+
"pydantic-settings",
5859
"opentelemetry-instrumentation-fastapi",
5960
"typer",
6061
"grpcio-reflection",

0 commit comments

Comments
 (0)