Skip to content

Commit 2753f7f

Browse files
committed
feat: automatic loading of grid implementations
1 parent 1d90d3c commit 2753f7f

File tree

4 files changed

+13
-1
lines changed

4 files changed

+13
-1
lines changed

app/main.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,15 @@
22

33
from app.middleware.correlation_id import add_correlation_id
44
from app.platforms.dispatcher import load_processing_platforms
5+
from app.services.tiles.base import load_grids
56
from .config.logger import setup_logging
67
from .config.settings import settings
78
from .routers import jobs_status, unit_jobs, health, tiles
89

910
setup_logging()
1011

1112
load_processing_platforms()
13+
load_grids()
1214

1315
app = FastAPI(
1416
title=settings.app_name,

app/services/tiles/base.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,29 @@
1+
import importlib
2+
import pkgutil
13
from typing import Callable, Dict
24
from geojson_pydantic import GeometryCollection, Polygon
35
from loguru import logger
6+
import app.services.tiles.grids
47
from app.schemas.tiles import GridTypeEnum
58

69
GRID_REGISTRY: Dict[GridTypeEnum, Callable[[Polygon], GeometryCollection]] = {}
710

811

912
def register_grid(grid_type: GridTypeEnum):
1013
def decorator(func: Callable[[Polygon], GeometryCollection]):
14+
logger.debug(f"Registering grid {grid_type}")
1115
GRID_REGISTRY[grid_type] = func
1216
return func
1317

1418
return decorator
1519

1620

21+
def load_grids():
22+
"""Dynamically load all processing platform implementations."""
23+
for _, module_name, _ in pkgutil.iter_modules(app.services.tiles.grids.__path__):
24+
importlib.import_module(f"app.services.tiles.grids.{module_name}") # noqa: F821
25+
26+
1727
def split_polygon_by_grid(polygon: Polygon, grid: GridTypeEnum) -> GeometryCollection:
1828
"""
1929
Split a GeoJSON Polygon into smaller polygons according to the specified grid type.

tests/services/test_tiles_km_grids.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
from geojson_pydantic import GeometryCollection, Polygon
22

3-
from app.services.tiles.km_grids import _split_by_km_grid, split_by_20x20_km_grid
3+
from app.services.tiles.grids.km_grids import _split_by_km_grid, split_by_20x20_km_grid
44

55

66
def test__split_by_km_grid_creates_multiple_cells():

0 commit comments

Comments
 (0)