29-timesheet-management #30
3 changed files with 153 additions and 4 deletions
|
|
@ -30,6 +30,10 @@ def localize_shard(
|
||||||
|
|
||||||
value = placement.value or marker
|
value = placement.value or marker
|
||||||
|
|
||||||
|
if placement.overwrites or (
|
||||||
|
placement.dimension not in position
|
||||||
|
and placement.dimension not in private_position
|
||||||
|
):
|
||||||
if dimension.propagate:
|
if dimension.propagate:
|
||||||
position[placement.dimension] = value
|
position[placement.dimension] = value
|
||||||
else:
|
else:
|
||||||
|
|
|
||||||
|
|
@ -15,6 +15,7 @@ class MarkerPlacement(BaseModel):
|
||||||
if_with: set[str] = set()
|
if_with: set[str] = set()
|
||||||
dimension: str
|
dimension: str
|
||||||
value: str | None = None
|
value: str | None = None
|
||||||
|
overwrites: bool = True
|
||||||
|
|
||||||
|
|
||||||
class Marker(BaseModel):
|
class Marker(BaseModel):
|
||||||
|
|
|
||||||
|
|
@ -85,3 +85,147 @@ class TestLocalize:
|
||||||
"timesheet": "coding",
|
"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"},
|
||||||
|
)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue