We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
There was an error while loading. Please reload this page.
1 parent cc9f0d3 commit 92fdc6bCopy full SHA for 92fdc6b
docs/operations/elections.rst
@@ -8,11 +8,11 @@ Volby do výboru probíhají asynchronně a zpravidla trvají týden, aby stihli
8
Kdy se volí
9
-----------
10
11
-+------------------------------------+--------------------+
12
-| |:ballot_box:| Předchozí volba | |board_start| |
13
14
-| |:warning:| Příští volba | |board_end| |
15
++------------------------------------+------------------------+
+| |:ballot_box:| Předchozí volba | |board_vote_date| |
+| |:warning:| Příští volba | |next_board_vote_date| |
16
17
Příprava
18
--------
src/pyvec_docs/boards.py
@@ -40,10 +40,17 @@ def is_treasurer(self) -> bool:
40
41
class Board(BaseModel):
42
start_on: date | None = None
43
+ voted_on: date
44
members: list[BoardMember]
45
46
model_config = {"extra": "forbid", "frozen": True}
47
48
+ @classmethod
49
+ def make(cls, voted_on=None, start_on=None, **kwargs):
50
+ if voted_on is None:
51
+ voted_on = start_on
52
+ return cls(voted_on=voted_on, start_on=start_on, **kwargs)
53
+
54
@property
55
def years(self) -> tuple[int, int] | tuple[None, None]:
56
if self.start_on is None:
@@ -64,7 +71,7 @@ def load_boards(path: Path | str = BOARDS_CONFIG_PATH) -> list[Board]:
64
71
"""Load all boards, including inactive ones"""
65
72
data = tomllib.loads(Path(path).read_text())
66
73
return sorted(
67
- (Board(**board) for board in data["board"]),
74
+ (Board.make(**board) for board in data["board"]),
68
75
key=attrgetter('sort_key'),
69
76
reverse=True,
70
77
)
src/pyvec_docs/boards.toml
@@ -4,8 +4,13 @@
4
#
5
# "start_on" should ideally be the date from justice.cz. If missing, the board
6
# doesn't officially have power yet.
7
+#
+# "voted_on" is the day when we voted for the board. If missing, defaults to
+# "start_on" as an approximation.
[[board]]
+voted_on = "2025-05-07"
[[board.members]]
name = "Jakub Vysoký"
src/pyvec_docs/ext/board_dates.py
@@ -4,21 +4,20 @@
from sphinx.application import Sphinx
from sphinx.config import Config
-from pyvec_docs.boards import BOARDS_MANDATE_LENGTH, load_current_board
+from pyvec_docs.boards import BOARDS_MANDATE_LENGTH, load_boards
def board_dates(app: Sphinx, config: Config):
- board = load_current_board()
- assert board.start_on is not None
+ board = load_boards()[0]
- board_start = board.start_on
- board_end = board_start + timedelta(days=BOARDS_MANDATE_LENGTH * 365)
+ last_vote = board.voted_on
+ next_vote = last_vote + timedelta(days=BOARDS_MANDATE_LENGTH * 365)
existing_epilog = app.config.rst_epilog or ""
app.config.rst_epilog = (
19
f"{existing_epilog}\n\n"
20
- f".. |board_start| replace:: {board_start:%-d.%-m.%Y}\n"
21
- f".. |board_end| replace:: {board_end:%Y}\n"
+ f".. |board_vote_date| replace:: {last_vote:%-d.%-m.%Y}\n"
+ f".. |next_board_vote_date| replace:: {next_vote:%Y}\n"
22
23
24
tests/test_scripts_generate_grants.py
@@ -14,15 +14,16 @@
@pytest.fixture
def boards():
return [ # sorted!
- Board(
+ Board.make(
**{
# No start_on; votes don't count
+ "voted_on": date(2023, 1, 1),
"members": [
{"name": "Bob", "github": "bobby"},
],
}
25
),
26
27
28
"start_on": date(2020, 1, 1),
29
@@ -31,9 +32,10 @@ def boards():
31
32
33
34
35
36
37
"start_on": date(2019, 1, 1),
38
+ "voted_on": date(2018, 12, 1),
39
@@ -46,6 +48,14 @@ def assert_boards_sorted(boards):
assert boards == sorted(boards)
+def assert_voted_on_defaults(boards):
+ assert [b.voted_on for b in boards] == [
+ date(2023, 1, 1), # explicit
+ date(2020, 1, 1), # from start_on
+ date(2018, 12, 1), # explicit
+ ]
57
58
59
def test_to_date():
60
assert to_date("2020-02-12T13:22:01Z") == date(2020, 2, 12)
61
0 commit comments