Skip to content

Commit 96bcbf0

Browse files
authored
Merge pull request #425 from pyvec/honzajavorek/boards
Add page about boards
2 parents f8e0c89 + 4b57700 commit 96bcbf0

17 files changed

+355
-116
lines changed

CONTRIBUTING.rst

+15-2
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``.
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

@@ -90,6 +90,19 @@ Na repozitáři je zapojená `GitHub Action <https://github.com/lycheeverse/lych
9090

9191
Dokonce by to mělo automaticky zakládat i issue, pokud to najde nějaký problém. V případě, že je potřeba ignorovat nějakou doménu nebo konkrétní odkaz, je možné to udělat v souboru ``lychee.toml``.
9292

93+
.. _generate_boards:
94+
95+
Skript na generování historie výborů
96+
------------------------------------
97+
98+
V adresáři ``scripts`` je skript ``generate_boards.py``, který:
99+
100+
* se pomocí `GitHub Actions <https://github.com/pyvec/docs.pyvec.org/actions>`_ jednou denně spustí,
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``,
102+
* commitne a pushne jej přes Git do repozitáře.
103+
104+
Výsledná stránka je pouze informační, kanonickým zdrojem pravdy jsou v tomto případě státní registry.
105+
93106
.. _generate_grants:
94107

95108
Skript na generování zápisů hlasování o grantech
@@ -101,4 +114,4 @@ V adresáři ``scripts`` je skript ``generate_grants.py``, který:
101114
* vygeneruje soubor ``operations/grants.rst`` z dat na `pyvec/money <https://github.com/pyvec/money>`_ a ze šablony ``operations/grants.rst``,
102115
* commitne a pushne jej přes Git do repozitáře.
103116

104-
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 ``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

+48
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
Výbory spolku
2+
=============
3+
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.
5+
6+
Kdyby něco nesedělo, ověřte `historii zdrojáku této stránky <https://github.com/pyvec/docs.pyvec.org/commits/master/docs/operations/boards.rst>`_ a funkčnost :ref:`přepisů <generate_boards>`.
7+
8+
.. Soubor docs/operations/boards.rst je generován skriptem scripts/generate_boards.py ze šablony docs/operations/boards.rst.jinja. Neupravovat ručně!
9+
10+
11+
Mandát od 9.4.2022
12+
-------------------------------------------------
13+
14+
.. csv-table::
15+
:header: "Jméno", "GitHub", "Funkce"
16+
17+
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>`_, |:moneybag:|
22+
23+
Mandát od 8.4.2019
24+
-------------------------------------------------
25+
26+
.. csv-table::
27+
:header: "Jméno", "GitHub", "Funkce"
28+
29+
Martin Bílek, `@martinbilek <https://github.com/martinbilek>`_, |:crown:| |:moneybag:|
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>`_,
34+
35+
Mandát od 27.3.2012
36+
-------------------------------------------------
37+
38+
.. csv-table::
39+
:header: "Jméno", "GitHub", "Funkce"
40+
41+
Martin Bílek, `@martinbilek <https://github.com/martinbilek>`_, |:crown:| |:moneybag:|
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>`_,
48+

docs/operations/boards.rst.jinja

+19
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
Výbory spolku
2+
=============
3+
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.
5+
6+
Kdyby něco nesedělo, ověřte `historii zdrojáku této stránky <https://github.com/pyvec/docs.pyvec.org/commits/master/docs/operations/boards.rst>`_ a funkčnost :ref:`přepisů <generate_boards>`.
7+
8+
.. Soubor docs/operations/boards.rst je generován skriptem scripts/generate_boards.py ze šablony docs/operations/boards.rst.jinja. Neupravovat ručně!
9+
10+
{% for board in boards %}
11+
Mandát od {{ board.start_on.strftime("%-d.%-m.%Y") }}
12+
-------------------------------------------------
13+
14+
.. csv-table::
15+
:header: "Jméno", "GitHub", "Funkce"
16+
{% for member in board.members %}
17+
{{ member.name }}, `@{{ member.github }} <https://github.com/{{ member.github }}>`_, {% if member.is_chair %}|:crown:| {% endif %}{% if member.is_treasurer %}|:moneybag:| {% endif %}
18+
{%- endfor %}
19+
{% endfor %}

docs/operations/elections.rst

+1-1
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

docs/operations/grants.rst

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
Elektronická hlasování o grantech
22
=================================
33

4-
Od roku 2020 o grantech :term:`výbor <Výbor>` hlasuje prostřednictvím repozitáře `pyvec/money <https://github.com/pyvec/money>`_. Zde je strojový přepis proběhlých hlasování. Kanonickým zdrojem pravdy je hlasování přímo na GitHub Issues. Kdyby něco nesedělo, ověřte `historii tohoto souboru <https://github.com/pyvec/docs.pyvec.org/commits/master/operations/grants.rst>`_ a funkčnost :ref:`přepisů <generate_grants>`.
4+
Od roku 2020 o grantech :term:`výbor <Výbor>` hlasuje prostřednictvím repozitáře `pyvec/money <https://github.com/pyvec/money>`_. Zde je strojový přepis proběhlých hlasování. Kanonickým zdrojem pravdy je hlasování přímo na GitHub Issues. Kdyby něco nesedělo, ověřte `historii tohoto souboru <https://github.com/pyvec/docs.pyvec.org/commits/master/docs/operations/grants.rst>`_ a funkčnost :ref:`přepisů <generate_grants>`.
55

66
.. Soubor operations/grants.rst je generován skriptem scripts/generate_grants.py ze šablony operations/grants.rst.jinja. Neupravovat ručně!
77

docs/operations/grants.rst.jinja

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
Elektronická hlasování o grantech
22
=================================
33

4-
Od roku 2020 o grantech :term:`výbor <Výbor>` hlasuje prostřednictvím repozitáře `pyvec/money <https://github.com/pyvec/money>`_. Zde je strojový přepis proběhlých hlasování. Kanonickým zdrojem pravdy je hlasování přímo na GitHub Issues. Kdyby něco nesedělo, ověřte `historii tohoto souboru <https://github.com/pyvec/docs.pyvec.org/commits/master/operations/grants.rst>`_ a funkčnost :ref:`přepisů <generate_grants>`.
4+
Od roku 2020 o grantech :term:`výbor <Výbor>` hlasuje prostřednictvím repozitáře `pyvec/money <https://github.com/pyvec/money>`_. Zde je strojový přepis proběhlých hlasování. Kanonickým zdrojem pravdy je hlasování přímo na GitHub Issues. Kdyby něco nesedělo, ověřte `historii zdrojáku této stránky <https://github.com/pyvec/docs.pyvec.org/commits/master/docs/operations/grants.rst>`_ a funkčnost :ref:`přepisů <generate_grants>`.
55

6-
.. Soubor operations/grants.rst je generován skriptem scripts/generate_grants.py ze šablony operations/grants.rst.jinja. Neupravovat ručně!
6+
.. Soubor docs/operations/grants.rst je generován skriptem scripts/generate_grants.py ze šablony docs/operations/grants.rst.jinja. Neupravovat ručně!
77

88
{% for grant in grants %}
99
{{ grant.voted_at.day }}. {{ grant.voted_at.month }}. {{ grant.voted_at.year }} - elektronické hlasování výboru

docs/operations/index.rst

+1
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ kolem `programovacího jazyka Python <https://python.cz>`__. Její cíle jsou fo
1515
domains
1616
web-apps
1717
twitter
18+
boards
1819
meeting-notes
1920
grants
2021
bylaws

pyproject.toml

+1-5
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

+14
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
from pathlib import Path
2+
3+
from jinja2 import Template
4+
5+
from pyvec_docs.board import load_boards
6+
7+
8+
CONTENT_PATH = Path(__file__).parent.parent / "docs"
9+
10+
11+
if __name__ == "__main__":
12+
tpl_path = CONTENT_PATH / "operations" / "boards.rst.jinja"
13+
tpl = Template(tpl_path.read_text())
14+
print(tpl.render(boards=load_boards()))

scripts/generate_grants.py

+4-2
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

+55-15
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,60 @@
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+
@property
29+
def is_chair(self) -> bool:
30+
if self.roles is None:
31+
return False
32+
return BoardRole.chair in self.roles
33+
34+
@property
35+
def is_treasurer(self) -> bool:
36+
if self.roles is None:
37+
return False
38+
return BoardRole.treasurer in self.roles
39+
40+
41+
class Board(BaseModel):
42+
start_on: date
43+
members: list[BoardMember]
44+
45+
model_config = {"extra": "forbid", "frozen": True}
46+
47+
@property
48+
def years(self) -> tuple[int, int]:
49+
start_year = self.start_on.year
50+
return (start_year, start_year + BOARDS_MANDATE_LENGTH)
51+
52+
53+
@cache
54+
def load_boards(path: Path | str = BOARDS_CONFIG_PATH) -> list[Board]:
55+
data = tomllib.loads(Path(path).read_text())
56+
return sorted(
57+
(Board(**board) for board in data["board"]),
58+
key=attrgetter("start_on"),
59+
reverse=True,
1360
)
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

-27
This file was deleted.

0 commit comments

Comments
 (0)