feat: better localization of shards

Signed-off-by: Konstantin Fickel <mail@konstantinfickel.de>
This commit is contained in:
Konstantin Fickel 2026-01-31 17:54:50 +01:00
parent 79095bad4a
commit 4dbd142c74
Signed by: kfickel
GPG key ID: A793722F9933C1A5
3 changed files with 61 additions and 14 deletions

View file

@ -22,16 +22,18 @@ def localize_shard(
adjusted_moment: datetime = extract_datetime_from_marker_list(shard.markers, moment)
for marker in shard.markers:
normalized_marker = marker.lower()
if marker in config.markers:
marker_definition = config.markers[marker]
for placement in marker_definition.placements:
if set(placement.if_with) <= set(shard.markers):
dimension = config.dimensions[placement.dimension]
if marker_definition := config.markers[normalized_marker]:
dimension_name = marker_definition.dimension
dimension = config.dimensions[marker_definition.dimension]
value = placement.value or marker
if dimension.propagate:
position[dimension_name] = normalized_marker
else:
private_position[dimension_name] = normalized_marker
if dimension.propagate:
position[placement.dimension] = value
else:
private_position[placement.dimension] = value
children = [
localize_shard(child, config, position, adjusted_moment)

View file

@ -1,4 +1,5 @@
from typing import Optional
from pydantic import BaseModel
@ -8,9 +9,15 @@ class Dimension(BaseModel):
propagate: bool = False
class MarkerPlacement(BaseModel):
if_with: list[str] = []
dimension: str
value: str | None = None
class Marker(BaseModel):
display_name: str
dimension: str
placements: list[MarkerPlacement]
class RepositoryConfiguration(BaseModel):
@ -18,4 +25,4 @@ class RepositoryConfiguration(BaseModel):
markers: dict[str, Marker]
__all__ = ["Dimension", "Marker", "RepositoryConfiguration"]
__all__ = ["Dimension", "Marker", "MarkerPlacement", "RepositoryConfiguration"]