Skip to content

Commit 249e5e9

Browse files
committed
use toml and pydantic
1 parent 880b9f6 commit 249e5e9

File tree

14 files changed

+264
-132
lines changed

14 files changed

+264
-132
lines changed

CONTRIBUTING.rst

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ Slack
4343

4444
Při psaní lze psát ``:slack:`#pyladies`` nebo i jenom ``:slack:`pyladies``, což vytvoří odkaz na kanál :slack:`#pyladies` na Pyvec Slacku. Funguje to díky vlastnímu rozšíření Sphinxu, které lze najít v souboru ``_extensions/slack.py``.
4545

46-
Všechny odkazy na kanál ``:slack:`#pyvec-board``, ať už je to ``:slack:`#pyvec-board`` nebo ``:slack:`#pyvec-board-2019-2021`` jsou automaticky předělány na odkaz na aktuální tajný kanál výboru. K určení správných roků se využívá `soubor board.yml <https://github.com/pyvec/docs.pyvec.org/blob/master/src/pyvec_docs/board.yml>`_.
46+
Všechny odkazy na kanál ``:slack:`#pyvec-board``, ať už je to ``:slack:`#pyvec-board`` nebo ``:slack:`#pyvec-board-2019-2021`` jsou automaticky předělány na odkaz na aktuální tajný kanál výboru. K určení správných roků se využívá `soubor boards.toml <https://github.com/pyvec/docs.pyvec.org/blob/master/src/pyvec_docs/boards.toml>`_.
4747

4848
.. _docs-pyvec-rtd:
4949

@@ -98,7 +98,7 @@ Skript na generování historie výborů
9898
V adresáři ``scripts`` je skript ``generate_boards.py``, který:
9999

100100
* se pomocí `GitHub Actions <https://github.com/pyvec/docs.pyvec.org/actions>`_ jednou denně spustí,
101-
* vygeneruje soubor ``operations/boards.rst`` ze `souboru board.yml <https://github.com/pyvec/docs.pyvec.org/blob/master/src/pyvec_docs/board.yml>`_ a ze šablony ``operations/boards.rst``,
101+
* vygeneruje soubor ``operations/boards.rst`` ze `souboru boards.toml <https://github.com/pyvec/docs.pyvec.org/blob/master/src/pyvec_docs/boards.toml>`_ a ze šablony ``operations/boards.rst``,
102102
* commitne a pushne jej přes Git do repozitáře.
103103

104104
Výsledná stránka je pouze informační, kanonickým zdrojem pravdy jsou v tomto případě státní registry.
@@ -114,4 +114,4 @@ V adresáři ``scripts`` je skript ``generate_grants.py``, který:
114114
* vygeneruje soubor ``operations/grants.rst`` z dat na `pyvec/money <https://github.com/pyvec/money>`_ a ze šablony ``operations/grants.rst``,
115115
* commitne a pushne jej přes Git do repozitáře.
116116

117-
Hlasování o grantech probíhá :ref:`pomocí reakcí <jak-hlasovani>` na GitHub Issues a tento skript hlasování archivuje sem do dokumentace pro účely jednoduššího vyhledávání, zálohy, kdyby se s `pyvec/money <https://github.com/pyvec/money>`_ něco stalo, a pro nějakou historickou evidenci. Kanonickým zdrojem pravdy ale zůstává hlasování přímo na GitHub Issues, toto je jen automatizovaný přepis. Skript započítává pouze hlasy od členů výboru (podle `souboru board.yml <https://github.com/pyvec/docs.pyvec.org/blob/master/src/pyvec_docs/board.yml>`_).
117+
Hlasování o grantech probíhá :ref:`pomocí reakcí <jak-hlasovani>` na GitHub Issues a tento skript hlasování archivuje sem do dokumentace pro účely jednoduššího vyhledávání, zálohy, kdyby se s `pyvec/money <https://github.com/pyvec/money>`_ něco stalo, a pro nějakou historickou evidenci. Kanonickým zdrojem pravdy ale zůstává hlasování přímo na GitHub Issues, toto je jen automatizovaný přepis. Skript započítává pouze hlasy od členů výboru (podle `souboru boards.toml <https://github.com/pyvec/docs.pyvec.org/blob/master/src/pyvec_docs/boards.toml>`_).

docs/operations/boards.rst

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
Výbory spolku
22
=============
33

4-
Historie složení :term:`výboru <Výbor>`. Kanonickým zdrojem pravdy je `výpis na justice.cz <https://or.justice.cz/ias/ui/rejstrik-firma.vysledky?subjektId=760829&typ=UPLNY>`_. Historii výborů si pro vlastní potřeby zaznamenáváme do `souboru board.yml <https://github.com/pyvec/docs.pyvec.org/blob/master/src/pyvec_docs/board.yml>`_ a z něj se generuje i tato stránka.
4+
Historie složení :term:`výboru <Výbor>`. Kanonickým zdrojem pravdy je `výpis na justice.cz <https://or.justice.cz/ias/ui/rejstrik-firma.vysledky?subjektId=760829&typ=UPLNY>`_. Historii výborů si pro vlastní potřeby zaznamenáváme do `souboru boards.toml <https://github.com/pyvec/docs.pyvec.org/blob/master/src/pyvec_docs/boards.toml>`_ a z něj se generuje i tato stránka.
55

66
Kdyby něco nesedělo, ověřte `historii zdrojáku této stránky <https://github.com/pyvec/docs.pyvec.org/commits/master/operations/boards.rst>`_ a funkčnost :ref:`přepisů <generate_boards>`.
77

@@ -15,10 +15,10 @@ Mandát od 9.4.2022
1515
:header: "Jméno", "GitHub", "Funkce"
1616

1717
Barbora Drbohlavová, `@baradrb <https://github.com/baradrb>`_, |:crown:|
18-
Anežka Müller, `@anezkamll <https://github.com/anezkamll>`_,
19-
Jan Javorek, `@honzajavorek <https://github.com/honzajavorek>`_,
20-
Jakub Vysoký, `@kvbik <https://github.com/kvbik>`_,
21-
Jan Čermák, `@sairon <https://github.com/sairon>`_,
18+
Anežka Müller, `@anezkamll <https://github.com/anezkamll>`_,
19+
Jan Javorek, `@honzajavorek <https://github.com/honzajavorek>`_,
20+
Jakub Vysoký, `@kvbik <https://github.com/kvbik>`_,
21+
Jan Čermák, `@sairon <https://github.com/sairon>`_,
2222

2323
Mandát od 8.4.2019
2424
-------------------------------------------------
@@ -27,10 +27,10 @@ Mandát od 8.4.2019
2727
:header: "Jméno", "GitHub", "Funkce"
2828

2929
Martin Bílek, `@martinbilek <https://github.com/martinbilek>`_, |:crown:|
30-
Aleš Zoulek, `@aleszoulek <https://github.com/aleszoulek>`_,
31-
Jan Javorek, `@honzajavorek <https://github.com/honzajavorek>`_,
32-
Jakub Vysoký, `@kvbik <https://github.com/kvbik>`_,
33-
Jiří Bartoň, `@whiskybar <https://github.com/whiskybar>`_,
30+
Aleš Zoulek, `@aleszoulek <https://github.com/aleszoulek>`_,
31+
Jan Javorek, `@honzajavorek <https://github.com/honzajavorek>`_,
32+
Jakub Vysoký, `@kvbik <https://github.com/kvbik>`_,
33+
Jiří Bartoň, `@whiskybar <https://github.com/whiskybar>`_,
3434

3535
Mandát od 27.3.2012
3636
-------------------------------------------------
@@ -39,10 +39,10 @@ Mandát od 27.3.2012
3939
:header: "Jméno", "GitHub", "Funkce"
4040

4141
Martin Bílek, `@martinbilek <https://github.com/martinbilek>`_, |:crown:|
42-
Aleš Zoulek, `@aleszoulek <https://github.com/aleszoulek>`_,
43-
Robin Gottfried, `@czervenka <https://github.com/czervenka>`_,
44-
Jan Král, `@honzakral <https://github.com/honzakral>`_,
45-
Jakub Vysoký, `@kvbik <https://github.com/kvbik>`_,
46-
Jiří Bartoň, `@whiskybar <https://github.com/whiskybar>`_,
47-
Vítězslav Pliska, `@whit <https://github.com/whit>`_,
42+
Aleš Zoulek, `@aleszoulek <https://github.com/aleszoulek>`_,
43+
Robin Gottfried, `@czervenka <https://github.com/czervenka>`_,
44+
Jan Král, `@honzakral <https://github.com/honzakral>`_,
45+
Jakub Vysoký, `@kvbik <https://github.com/kvbik>`_,
46+
Jiří Bartoň, `@whiskybar <https://github.com/whiskybar>`_,
47+
Vítězslav Pliska, `@whit <https://github.com/whit>`_,
4848

docs/operations/boards.rst.jinja

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
Výbory spolku
22
=============
33

4-
Historie složení :term:`výboru <Výbor>`. Kanonickým zdrojem pravdy je `výpis na justice.cz <https://or.justice.cz/ias/ui/rejstrik-firma.vysledky?subjektId=760829&typ=UPLNY>`_. Historii výborů si pro vlastní potřeby zaznamenáváme do `souboru board.yml <https://github.com/pyvec/docs.pyvec.org/blob/master/src/pyvec_docs/board.yml>`_ a z něj se generuje i tato stránka.
4+
Historie složení :term:`výboru <Výbor>`. Kanonickým zdrojem pravdy je `výpis na justice.cz <https://or.justice.cz/ias/ui/rejstrik-firma.vysledky?subjektId=760829&typ=UPLNY>`_. Historii výborů si pro vlastní potřeby zaznamenáváme do `souboru boards.toml <https://github.com/pyvec/docs.pyvec.org/blob/master/src/pyvec_docs/boards.toml>`_ a z něj se generuje i tato stránka.
55

66
Kdyby něco nesedělo, ověřte `historii zdrojáku této stránky <https://github.com/pyvec/docs.pyvec.org/commits/master/operations/boards.rst>`_ a funkčnost :ref:`přepisů <generate_boards>`.
77

docs/operations/elections.rst

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ Předání moci
6262
- Nový výbor oznámí své zvolení v :slack:`#announcements`.
6363
- Starý výbor zajistí vyhotovení zápisů ze zasedání členské schůze a z předání moci:
6464
- Vyhotoví :ref:`zápisy do této dokumentace <zapisy>`,
65-
- aktualizuje `soubor board.yml <https://github.com/pyvec/docs.pyvec.org/blob/master/src/pyvec_docs/board.yml>`_,
65+
- aktualizuje `soubor boards.toml <https://github.com/pyvec/docs.pyvec.org/blob/master/src/pyvec_docs/boards.toml>`_,
6666
- aktualizuje role členů v `seznamu členů <https://docs.google.com/spreadsheets/d/1n8hzBnwZ5ANkUCvwEy8rWsXlqeAAwu-5JBodT5OJx_I/edit#gid=0>`__, čímž by se měl aktualizovat i web Pyvce
6767
- Starý výbor předá novému vše ze seznamu níže.
6868

pyproject.toml

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,11 @@ requires-python = "==3.12.*"
55
dependencies = [
66
"jinja2==3.1.6",
77
"myst-parser==4.0.1",
8+
"pydantic==2.11.4",
89
"requests==2.32.3",
910
"sphinx-rtd-theme==3.0.2",
1011
"sphinx==8.2.3",
1112
"sphinxemoji==0.3.1",
12-
"strictyaml==1.7.3",
1313
]
1414

1515
[dependency-groups]
@@ -26,10 +26,6 @@ build-backend = "uv_build"
2626
[tool.pytest.ini_options]
2727
testpaths = "tests"
2828
addopts = "--ff --ruff --ruff-format"
29-
norecursedirs = "_build _static _templates"
30-
31-
[tool.ruff]
32-
target-version = "py312"
3329

3430
[tool.ruff.lint]
3531
extend-select = ["I"]

scripts/generate_boards.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
from jinja2 import Template
44

5-
from pyvec_docs.board import BOARD_HISTORY
5+
from pyvec_docs.board import load_boards
66

77

88
CONTENT_PATH = Path(__file__).parent.parent / "docs"
@@ -11,4 +11,4 @@
1111
if __name__ == "__main__":
1212
tpl_path = CONTENT_PATH / "operations" / "boards.rst.jinja"
1313
tpl = Template(tpl_path.read_text())
14-
print(tpl.render(boards=BOARD_HISTORY))
14+
print(tpl.render(boards=load_boards()))

scripts/generate_grants.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
import requests
66
from jinja2 import Template
77

8-
from pyvec_docs.board import BOARD_HISTORY
8+
from pyvec_docs.board import load_boards
99
from pyvec_docs.grants import get_lock_date, get_votes, remove_comments, to_date
1010

1111

@@ -19,6 +19,8 @@
1919

2020

2121
if __name__ == "__main__":
22+
boards = load_boards()
23+
2224
res = requests.get(
2325
GITHUB_API_URL,
2426
headers=GITHUB_API_HEADERS,
@@ -54,7 +56,7 @@
5456

5557
res = requests.get(issue["reactions"]["url"], headers=GITHUB_API_HEADERS)
5658
res.raise_for_status()
57-
votes = list(get_votes(res.json(), voted_at, BOARD_HISTORY))
59+
votes = list(get_votes(res.json(), voted_at, boards))
5860

5961
grants.append(
6062
{

src/pyvec_docs/board.py

Lines changed: 43 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,48 @@
1-
from operator import itemgetter
1+
import tomllib
2+
from datetime import date
3+
from enum import StrEnum
4+
from functools import cache
5+
from operator import attrgetter
26
from pathlib import Path
37

4-
import strictyaml as yaml
8+
from pydantic import BaseModel
59

610

7-
BOARD_HISTORY_SCHEMA = yaml.Seq(
8-
yaml.Map(
9-
{
10-
"from": yaml.Datetime(),
11-
"members": yaml.MapPattern(yaml.Str(), yaml.Str()),
12-
}
11+
BOARDS_CONFIG_PATH = Path(__file__).parent / "boards.toml"
12+
13+
BOARDS_MANDATE_LENGTH = 3
14+
15+
16+
class BoardRole(StrEnum):
17+
chair = "chair"
18+
treasurer = "treasurer"
19+
20+
21+
class BoardMember(BaseModel):
22+
name: str
23+
github: str
24+
roles: set[BoardRole] | None = set()
25+
26+
model_config = {"extra": "forbid", "frozen": True}
27+
28+
29+
class Board(BaseModel):
30+
start_on: date
31+
members: list[BoardMember]
32+
33+
model_config = {"extra": "forbid", "frozen": True}
34+
35+
@property
36+
def years(self) -> tuple[int, int]:
37+
start_year = self.start_on.year
38+
return (start_year, start_year + BOARDS_MANDATE_LENGTH)
39+
40+
41+
@cache
42+
def load_boards(path: Path | str = BOARDS_CONFIG_PATH) -> list[Board]:
43+
data = tomllib.loads(Path(path).read_text())
44+
return sorted(
45+
(Board(**board) for board in data["boards"]),
46+
key=attrgetter("start_on"),
47+
reverse=True,
1348
)
14-
)
15-
BOARD_HISTORY_PATH = Path(__file__).parent / "board.yml"
16-
BOARD_HISTORY = sorted(
17-
yaml.load(BOARD_HISTORY_PATH.read_text(), BOARD_HISTORY_SCHEMA).data,
18-
key=itemgetter("from"),
19-
reverse=True,
20-
)

src/pyvec_docs/board.yml

Lines changed: 0 additions & 27 deletions
This file was deleted.

src/pyvec_docs/boards.toml

Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
# The Pyvec board members in time
2+
# The current board is first, previous boards are listed in descending order
3+
# Each member has a `name`, `github`, and optionally a `roles` array
4+
5+
[[board]]
6+
start_on = "2022-04-09"
7+
8+
[[board.members]]
9+
name = "Barbora Drbohlavová"
10+
github = "baradrb"
11+
roles = ["chair"]
12+
13+
[[board.members]]
14+
name = "Anežka Müller"
15+
github = "anezkamll"
16+
17+
[[board.members]]
18+
name = "Jan Javorek"
19+
github = "honzajavorek"
20+
21+
[[board.members]]
22+
name = "Jakub Vysoký"
23+
github = "kvbik"
24+
25+
[[board.members]]
26+
name = "Jan Čermák"
27+
github = "sairon"
28+
roles = ["treasurer"]
29+
30+
31+
32+
[[board]]
33+
start_on = "2019-04-08"
34+
35+
[[board.members]]
36+
name = "Martin Bílek"
37+
github = "martinbilek"
38+
roles = ["chair", "treasurer"]
39+
40+
[[board.members]]
41+
name = "Aleš Zoulek"
42+
github = "aleszoulek"
43+
44+
[[board.members]]
45+
name = "Jan Javorek"
46+
github = "honzajavorek"
47+
48+
[[board.members]]
49+
name = "Jakub Vysoký"
50+
github = "kvbik"
51+
52+
[[board.members]]
53+
name = "Jiří Bartoň"
54+
github = "whiskybar"
55+
56+
57+
58+
[[board]]
59+
start_on = "2012-03-27"
60+
61+
[[board.members]]
62+
name = "Martin Bílek"
63+
github = "martinbilek"
64+
roles = ["chair", "treasurer"]
65+
66+
[[board.members]]
67+
name = "Aleš Zoulek"
68+
github = "aleszoulek"
69+
70+
[[board.members]]
71+
name = "Robin Gottfried"
72+
github = "czervenka"
73+
74+
[[board.members]]
75+
name = "Jan Král"
76+
github = "honzakral"
77+
78+
[[board.members]]
79+
name = "Jakub Vysoký"
80+
github = "kvbik"
81+
82+
[[board.members]]
83+
name = "Jiří Bartoň"
84+
github = "whiskybar"
85+
86+
[[board.members]]
87+
name = "Vítězslav Pliska"
88+
github = "whit"

0 commit comments

Comments
 (0)