Skip to content
Open
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
1 change: 1 addition & 0 deletions tilemaker/client/simple.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ def create_sample_metadata(filename: str):

return [
MapGroup(
map_group_id="example-map-group",
name="Map Group",
description="Example",
maps=[
Expand Down
48 changes: 44 additions & 4 deletions tilemaker/metadata/definitions.py
Original file line number Diff line number Diff line change
Expand Up @@ -81,11 +81,13 @@ def auth(self, grants: set[str]):
return self.grant is None or self.grant in grants


class Layer(AuthenticatedModel):
class LayerSummary(AuthenticatedModel):
layer_id: str
name: str
description: str | None = None


class Layer(LayerSummary):
provider: FITSLayerProvider | FITSCombinationLayerProvider

bounding_left: float | None = None
Expand Down Expand Up @@ -115,26 +117,47 @@ def model_post_init(self, _):
self.tile_size, self.number_of_levels = self.provider.calculate_tile_size()


class Band(AuthenticatedModel):
class LayerWithMenuState(Layer):
map_group_id: str
map_id: str
band_id: str


class BandBase(AuthenticatedModel):
band_id: str
name: str
description: str


class Band(BandBase):
layers: list[Layer]


class Map(AuthenticatedModel):
class BandMenuState(BandBase):
layers: list[LayerSummary]


class MapBase(AuthenticatedModel):
map_id: str
name: str
description: str


class Map(MapBase):
bands: list[Band]


class MapGroup(AuthenticatedModel):
class MapMenuState(MapBase):
bands: list[BandMenuState]


class MapGroupBase(AuthenticatedModel):
map_group_id: str
name: str
description: str


class MapGroup(MapGroupBase):
maps: list[Map]

def get_layer(self, layer_id: str) -> Layer | None:
Expand All @@ -145,3 +168,20 @@ def get_layer(self, layer_id: str) -> Layer | None:
return layer

return None


class MapGroupMenuState(MapGroupBase):
maps: list[MapMenuState]


class LayerDefault(AuthenticatedModel):
layer: Layer
default_layer_menu: list[MapGroupMenuState]
default_map_group_id: str
default_map_id: str
default_band_id: str


class SearchResponse(AuthenticatedModel):
filtered_layer_menu: list[MapGroupMenuState]
matched_ids: list[str]
6 changes: 5 additions & 1 deletion tilemaker/metadata/generation.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
"""

import os
import uuid
from hashlib import md5
from pathlib import Path
from typing import Any, Literal
Expand Down Expand Up @@ -76,7 +77,10 @@ def map_group_from_fits(
)

return MapGroup(
name="Auto-Populated", description="No description provided", maps=maps
map_group_id=f"map-group-{uuid.uuid4()}",
name="Auto-Populated",
description="No description provided",
maps=maps,
)


Expand Down
8 changes: 8 additions & 0 deletions tilemaker/server/app.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,13 @@
from ..settings import settings
from .analysis import analysis_router
from .auth import setup_auth
from .bands import bands_router
from .highlights import highlights_router
from .histogram import histogram_router
from .layers import layers_router
from .map_groups import map_groups_router
from .maps import maps_router
from .search import search_router
from .sources import sources_router


Expand Down Expand Up @@ -61,7 +65,11 @@ async def lifespan(app: FastAPI):
app.include_router(highlights_router)
app.include_router(histogram_router)
app.include_router(sources_router)
app.include_router(map_groups_router)
app.include_router(maps_router)
app.include_router(bands_router)
app.include_router(layers_router)
app.include_router(search_router)
app.include_router(analysis_router)

if settings.serve_frontend:
Expand Down
35 changes: 35 additions & 0 deletions tilemaker/server/bands.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
"""
Endpoint for summary data of a band's layers
"""

from fastapi import (
APIRouter,
Request,
)

from tilemaker.metadata.definitions import LayerSummary

bands_router = APIRouter(prefix="/bands", tags=["List of Bands"])


@bands_router.get(
"/{band_id}/layers",
response_model=list[LayerSummary],
summary="Get the list of layer summaries associated with a Band.",
description="Retrieve a list of LayerSummary objects that belong to a particular Band.",
)
def get_layer_summaries_of_band(band_id: str, request: Request):
for map_group in request.app.config.map_groups:
for map in map_group.maps:
for band in map.bands:
if band.band_id == band_id and map_group.auth(request.auth.scopes):
layer_summaries = []
for layer in band.layers:
layer_summary = LayerSummary(
layer_id=layer.layer_id,
name=layer.name,
description=layer.description,
)
layer_summaries.append(layer_summary)
return layer_summaries
return []
Loading
Loading