29-timesheet-management #30

Merged
kfickel merged 3 commits from 29-timesheet-management into main 2026-02-01 21:57:10 +01:00
3 changed files with 153 additions and 4 deletions
Showing only changes of commit 260400fa34 - Show all commits

View file

@ -30,6 +30,10 @@ def localize_shard(
value = placement.value or marker
if placement.overwrites or (
placement.dimension not in position
and placement.dimension not in private_position
):
if dimension.propagate:
position[placement.dimension] = value
else:

View file

@ -15,6 +15,7 @@ class MarkerPlacement(BaseModel):
if_with: set[str] = set()
dimension: str
value: str | None = None
overwrites: bool = True
class Marker(BaseModel):

View file

@ -85,3 +85,147 @@ class TestLocalize:
"timesheet": "coding",
},
)
def test_overwrites_true_propagated_dimension_overwrites_existing_value(self):
config = RepositoryConfiguration(
dimensions={
"project": Dimension(display_name="Project", propagate=True),
},
markers={
"A": Marker(
display_name="A",
placements=[MarkerPlacement(dimension="project", value="a")],
),
"B": Marker(
display_name="B",
placements=[
MarkerPlacement(dimension="project", value="b", overwrites=True)
],
),
},
)
stream_file = StreamFile(
file_name="20260131-210000 Test File.md",
shard=Shard(start_line=1, end_line=1, markers=["A", "B"]),
)
assert localize_stream_file(stream_file, config) == LocalizedShard(
moment=datetime(2026, 1, 31, 21, 0, 0, 0),
markers=["A", "B"],
tags=[],
start_line=1,
end_line=1,
children=[],
location={"file": stream_file.file_name, "project": "b"},
)
def test_overwrites_false_propagated_dimension_does_not_overwrite_existing_value(
self,
):
config = RepositoryConfiguration(
dimensions={
"project": Dimension(display_name="Project", propagate=True),
},
markers={
"A": Marker(
display_name="A",
placements=[MarkerPlacement(dimension="project", value="a")],
),
"B": Marker(
display_name="B",
placements=[
MarkerPlacement(
dimension="project", value="b", overwrites=False
)
],
),
},
)
stream_file = StreamFile(
file_name="20260131-210000 Test File.md",
shard=Shard(start_line=1, end_line=1, markers=["A", "B"]),
)
assert localize_stream_file(stream_file, config) == LocalizedShard(
moment=datetime(2026, 1, 31, 21, 0, 0, 0),
markers=["A", "B"],
tags=[],
start_line=1,
end_line=1,
children=[],
location={"file": stream_file.file_name, "project": "a"},
)
def test_overwrites_true_non_propagated_dimension_overwrites_private_value(self):
config = RepositoryConfiguration(
dimensions={
"label": Dimension(display_name="Label", propagate=False),
},
markers={
"A": Marker(
display_name="A",
placements=[MarkerPlacement(dimension="label", value="a")],
),
"B": Marker(
display_name="B",
placements=[
MarkerPlacement(dimension="label", value="b", overwrites=True)
],
),
},
)
stream_file = StreamFile(
file_name="20260131-210000 Test File.md",
shard=Shard(start_line=1, end_line=1, markers=["A", "B"]),
)
assert localize_stream_file(stream_file, config) == LocalizedShard(
moment=datetime(2026, 1, 31, 21, 0, 0, 0),
markers=["A", "B"],
tags=[],
start_line=1,
end_line=1,
children=[],
location={"file": stream_file.file_name, "label": "b"},
)
def test_overwrites_false_non_propagated_dimension_does_not_overwrite_private_value(
self,
):
config = RepositoryConfiguration(
dimensions={
"label": Dimension(display_name="Label", propagate=False),
},
markers={
"A": Marker(
display_name="A",
placements=[
MarkerPlacement(dimension="label", value="a", overwrites=True)
],
),
"B": Marker(
display_name="B",
placements=[
MarkerPlacement(dimension="label", value="b", overwrites=False)
],
),
},
)
stream_file = StreamFile(
file_name="20260131-210000 Test File.md",
shard=Shard(start_line=1, end_line=1, markers=["A", "B"]),
)
assert localize_stream_file(stream_file, config) == LocalizedShard(
moment=datetime(2026, 1, 31, 21, 0, 0, 0),
markers=["A", "B"],
tags=[],
start_line=1,
end_line=1,
children=[],
location={"file": stream_file.file_name, "label": "a"},
)