2222import typer
2323import uvicorn
2424from garf .executors import exceptions
25+ from garf .executors .entrypoints import utils
2526from garf .executors .entrypoints .tracer import initialize_tracer
2627from garf .io import reader
2728from opentelemetry .instrumentation .fastapi import FastAPIInstrumentor
29+ from pydantic_settings import BaseSettings , SettingsConfigDict
2830from typing_extensions import Annotated
2931
3032initialize_tracer ()
3335typer_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+
3668class 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 )
0 commit comments