Skip to content
This repository was archived by the owner on Apr 2, 2025. It is now read-only.

Commit 07b7804

Browse files
committed
refactor: make backend selection more flexible
1 parent f38980f commit 07b7804

File tree

4 files changed

+32
-60
lines changed

4 files changed

+32
-60
lines changed

deploy_cdk/profile.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,4 +7,4 @@ class DeploymentProfile(BaseSettings):
77
timeout: PositiveInt = 30
88
aws_ecr_repository_arn: str
99
image_tag_or_digest: str = "latest"
10-
backend_name: str = "landsat"
10+
backend_name: str = "stapi_fastapi_landsat:LandsatBackend"

lambda_handler.py

Lines changed: 15 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
import os
1+
from importlib import import_module
2+
from os import getenv
23

34
from fastapi import FastAPI
45
from mangum import Mangum
@@ -7,31 +8,23 @@
78
from stapi_fastapi.backend import StapiBackend
89

910

10-
def get_backend(name: str) -> StapiBackend:
11-
match name:
12-
case "landsat":
13-
from stapi_fastapi_landsat import LandsatBackend
14-
15-
return LandsatBackend()
16-
case "blacksky":
17-
from stapi_fastapi_blacksky import BlackskyBackend
18-
19-
return BlackskyBackend()
20-
case "up42":
21-
from stapi_fastapi_up42 import StatUp42Backend
22-
23-
return StatUp42Backend()
24-
case "umbra":
25-
from stapi_fastapi_umbra import UmbraBackend
26-
27-
return UmbraBackend()
28-
case _:
29-
raise TypeError("not a supported backend")
11+
def get_backend(import_name: str) -> StapiBackend:
12+
mod, attr = import_name.split(":", maxsplit=1)
13+
mod = import_module(mod)
14+
backend_class = getattr(mod, attr)
15+
return backend_class()
3016

3117

3218
app = FastAPI()
3319
app.include_router(
34-
StapiRouter(backend=get_backend(os.environ.get("BACKEND_NAME", "landsat"))).router
20+
StapiRouter(
21+
backend=get_backend(
22+
getenv(
23+
"BACKEND_NAME",
24+
"stapi_fastapi_landsat:LandsatBackend",
25+
)
26+
)
27+
).router
3528
)
3629

3730
handler = Mangum(app, lifespan="off")

stapi_fastapi/__dev__.py

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
#!/usr/bin/env python3
22

3+
from importlib import import_module
34
from sys import stderr
45

56
from fastapi import FastAPI
7+
from pydantic import field_validator
68

79
try:
810
from pydantic_settings import BaseSettings
@@ -12,20 +14,31 @@
1214
exit(1)
1315

1416
from stapi_fastapi.api import StapiRouter
15-
from stapi_fastapi_tle_backend import StapiMockBackend
1617

1718

1819
class DevSettings(BaseSettings):
1920
port: int = 8000
2021
host: str = "127.0.0.1"
22+
backend_name: str = "stapi_fastapi_landsat:LandsatBackend"
2123

24+
@field_validator("backend_name", mode="after")
25+
def validate_backend(cls, value: str):
26+
try:
27+
mod, attr = value.split(":", maxsplit=1)
28+
mod = import_module(mod)
29+
attr = getattr(mod, attr)
30+
except ImportError as exc:
31+
raise ValueError("not a valid backend") from exc
32+
return attr
2233

34+
35+
settings = DevSettings()
36+
backend = settings.backend_name()
2337
app = FastAPI(debug=True)
24-
app.include_router(StapiRouter(backend=StapiMockBackend()).router)
38+
app.include_router(StapiRouter(backend).router)
2539

2640

2741
def cli():
28-
settings = DevSettings()
2942
run(
3043
"stapi_fastapi.__dev__:app", reload=True, host=settings.host, port=settings.port
3144
)

stapi_fastapi_landsat/__dev__.py

Lines changed: 0 additions & 34 deletions
This file was deleted.

0 commit comments

Comments
 (0)