Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 15 additions & 2 deletions CONTRIBUTING.rst
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ Slack

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

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``.
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>`_.

.. _docs-pyvec-rtd:

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

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

.. _generate_boards:

Skript na generování historie výborů
------------------------------------

V adresáři ``scripts`` je skript ``generate_boards.py``, který:

* se pomocí `GitHub Actions <https://github.com/pyvec/docs.pyvec.org/actions>`_ jednou denně spustí,
* 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``,
* commitne a pushne jej přes Git do repozitáře.

Výsledná stránka je pouze informační, kanonickým zdrojem pravdy jsou v tomto případě státní registry.

.. _generate_grants:

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

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``).
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>`_).
48 changes: 48 additions & 0 deletions docs/operations/boards.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
Výbory spolku
=============

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.

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

.. Soubor docs/operations/boards.rst je generován skriptem scripts/generate_boards.py ze šablony docs/operations/boards.rst.jinja. Neupravovat ručně!


Mandát od 9.4.2022
-------------------------------------------------

.. csv-table::
:header: "Jméno", "GitHub", "Funkce"

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

Mandát od 8.4.2019
-------------------------------------------------

.. csv-table::
:header: "Jméno", "GitHub", "Funkce"

Martin Bílek, `@martinbilek <https://github.com/martinbilek>`_, |:crown:| |:moneybag:|
Aleš Zoulek, `@aleszoulek <https://github.com/aleszoulek>`_,
Jan Javorek, `@honzajavorek <https://github.com/honzajavorek>`_,
Jakub Vysoký, `@kvbik <https://github.com/kvbik>`_,
Jiří Bartoň, `@whiskybar <https://github.com/whiskybar>`_,

Mandát od 27.3.2012
-------------------------------------------------

.. csv-table::
:header: "Jméno", "GitHub", "Funkce"

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

19 changes: 19 additions & 0 deletions docs/operations/boards.rst.jinja
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
Výbory spolku
=============

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.

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

.. Soubor docs/operations/boards.rst je generován skriptem scripts/generate_boards.py ze šablony docs/operations/boards.rst.jinja. Neupravovat ručně!

{% for board in boards %}
Mandát od {{ board.start_on.strftime("%-d.%-m.%Y") }}
-------------------------------------------------

.. csv-table::
:header: "Jméno", "GitHub", "Funkce"
{% for member in board.members %}
{{ member.name }}, `@{{ member.github }} <https://github.com/{{ member.github }}>`_, {% if member.is_chair %}|:crown:| {% endif %}{% if member.is_treasurer %}|:moneybag:| {% endif %}
{%- endfor %}
{% endfor %}
2 changes: 1 addition & 1 deletion docs/operations/elections.rst
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ Předání moci
- Nový výbor oznámí své zvolení v :slack:`#announcements`.
- Starý výbor zajistí vyhotovení zápisů ze zasedání členské schůze a z předání moci:
- Vyhotoví :ref:`zápisy do této dokumentace <zapisy>`,
- aktualizuje `soubor board.yml <https://github.com/pyvec/docs.pyvec.org/blob/master/src/pyvec_docs/board.yml>`_,
- aktualizuje `soubor boards.toml <https://github.com/pyvec/docs.pyvec.org/blob/master/src/pyvec_docs/boards.toml>`_,
- 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
- Starý výbor předá novému vše ze seznamu níže.

Expand Down
2 changes: 1 addition & 1 deletion docs/operations/grants.rst
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
Elektronická hlasování o grantech
=================================

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

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

Expand Down
4 changes: 2 additions & 2 deletions docs/operations/grants.rst.jinja
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
Elektronická hlasování o grantech
=================================

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

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

{% for grant in grants %}
{{ grant.voted_at.day }}. {{ grant.voted_at.month }}. {{ grant.voted_at.year }} - elektronické hlasování výboru
Expand Down
1 change: 1 addition & 0 deletions docs/operations/index.rst
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ kolem `programovacího jazyka Python <https://python.cz>`__. Její cíle jsou fo
domains
web-apps
twitter
boards
meeting-notes
grants
bylaws
Expand Down
6 changes: 1 addition & 5 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,11 @@ requires-python = "==3.12.*"
dependencies = [
"jinja2==3.1.6",
"myst-parser==4.0.1",
"pydantic==2.11.4",
"requests==2.32.3",
"sphinx-rtd-theme==3.0.2",
"sphinx==8.2.3",
"sphinxemoji==0.3.1",
"strictyaml==1.7.3",
]

[dependency-groups]
Expand All @@ -26,10 +26,6 @@ build-backend = "uv_build"
[tool.pytest.ini_options]
testpaths = "tests"
addopts = "--ff --ruff --ruff-format"
norecursedirs = "_build _static _templates"

[tool.ruff]
target-version = "py312"

[tool.ruff.lint]
extend-select = ["I"]
Expand Down
14 changes: 14 additions & 0 deletions scripts/generate_boards.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
from pathlib import Path

from jinja2 import Template

from pyvec_docs.board import load_boards


CONTENT_PATH = Path(__file__).parent.parent / "docs"


if __name__ == "__main__":
tpl_path = CONTENT_PATH / "operations" / "boards.rst.jinja"
tpl = Template(tpl_path.read_text())
print(tpl.render(boards=load_boards()))
6 changes: 4 additions & 2 deletions scripts/generate_grants.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
import requests
from jinja2 import Template

from pyvec_docs.board import BOARD_HISTORY
from pyvec_docs.board import load_boards
from pyvec_docs.grants import get_lock_date, get_votes, remove_comments, to_date


Expand All @@ -19,6 +19,8 @@


if __name__ == "__main__":
boards = load_boards()

res = requests.get(
GITHUB_API_URL,
headers=GITHUB_API_HEADERS,
Expand Down Expand Up @@ -54,7 +56,7 @@

res = requests.get(issue["reactions"]["url"], headers=GITHUB_API_HEADERS)
res.raise_for_status()
votes = list(get_votes(res.json(), voted_at, BOARD_HISTORY))
votes = list(get_votes(res.json(), voted_at, boards))

grants.append(
{
Expand Down
70 changes: 55 additions & 15 deletions src/pyvec_docs/board.py
Original file line number Diff line number Diff line change
@@ -1,20 +1,60 @@
from operator import itemgetter
import tomllib
from datetime import date
from enum import StrEnum
from functools import cache
from operator import attrgetter
from pathlib import Path

import strictyaml as yaml
from pydantic import BaseModel


BOARD_HISTORY_SCHEMA = yaml.Seq(
yaml.Map(
{
"from": yaml.Datetime(),
"members": yaml.MapPattern(yaml.Str(), yaml.Str()),
}
BOARDS_CONFIG_PATH = Path(__file__).parent / "boards.toml"

BOARDS_MANDATE_LENGTH = 3


class BoardRole(StrEnum):
chair = "chair"
treasurer = "treasurer"


class BoardMember(BaseModel):
name: str
github: str
roles: set[BoardRole] | None = set()

model_config = {"extra": "forbid", "frozen": True}

@property
def is_chair(self) -> bool:
if self.roles is None:
return False
return BoardRole.chair in self.roles

@property
def is_treasurer(self) -> bool:
if self.roles is None:
return False
return BoardRole.treasurer in self.roles


class Board(BaseModel):
start_on: date
members: list[BoardMember]

model_config = {"extra": "forbid", "frozen": True}

@property
def years(self) -> tuple[int, int]:
start_year = self.start_on.year
return (start_year, start_year + BOARDS_MANDATE_LENGTH)


@cache
def load_boards(path: Path | str = BOARDS_CONFIG_PATH) -> list[Board]:
data = tomllib.loads(Path(path).read_text())
return sorted(
(Board(**board) for board in data["board"]),
key=attrgetter("start_on"),
reverse=True,
)
)
BOARD_HISTORY_PATH = Path(__file__).parent / "board.yml"
BOARD_HISTORY = sorted(
yaml.load(BOARD_HISTORY_PATH.read_text(), BOARD_HISTORY_SCHEMA).data,
key=itemgetter("from"),
reverse=True,
)
27 changes: 0 additions & 27 deletions src/pyvec_docs/board.yml

This file was deleted.

Loading