Styl: PEP 8, black, ruff (formatowanie i lint)
Spójny styl kodu to nie kwestia gustu — to redukcja kosztu czytania. W ZEUS-ie backend (FastAPI + SQLAlchemy + ARQ) pisze kilka osób, więc styl egzekwujemy automatycznie, a nie w komentarzach do PR-a. Dwa narzędzia załatwiają 95% pracy: black (formatowanie) i ruff (lint, w dużej części też zamiennik isort).
PEP 8 w pigułce
PEP 8 to oficjalny przewodnik stylu Pythona. Najważniejsze, czego pilnujemy:
- 4 spacje wcięcia, nigdy taby.
snake_casedla funkcji i zmiennych,PascalCasedla klas,UPPER_CASEdla stałych.- Długość linii: w ProfessNet 88 znaków (domyślne dla black), nie 79.
- Importy: stdlib → third-party → lokalne, oddzielone pustą linią.
black — koniec dyskusji o formatowaniu
black jest „nieprzejednany": nie konfiguruje się stylu, tylko go akceptuje.
# źle — ręczne, niespójne formatowanie
d = {'host':probe.host,'forest':probe.forest , 'ts': now()}
# dobrze — po `black .`
d = {"host": probe.host, "forest": probe.forest, "ts": now()}
ruff — szybki linter
ruff (napisany w Rust) łączy w sobie flake8, isort, pyupgrade i dziesiątki innych reguł. Łapie martwe importy, nieużywane zmienne, złe wzorce.
# ruff: F401 'os' imported but unused → usuń import
import os
from app.probes import run_inventory
async def collect(forest: str) -> list[dict]:
return await run_inventory(forest)
Standard ProfessNet — pyproject.toml
Konfigurację trzymamy w jednym pliku pyproject.toml w katalogu serwisu:
[tool.black]
line-length = 88
target-version = ["py312"]
[tool.ruff]
line-length = 88
target-version = "py312"
[tool.ruff.lint]
select = ["E", "F", "I", "UP", "B"] # styl, błędy, importy, upgrade, bugbear
ignore = ["E501"] # długość linii pilnuje black
Standard ProfessNet:
select = ["E", "F", "I", "UP", "B"]to nasze minimum.Izastępuje isort — nie instalujemy isort osobno.
Uruchamianie
ruff check --fix . # napraw, co się da automatycznie
black . # sformatuj
ruff check . # sprawdź, czy zostało coś do ręcznej poprawy
Te same komendy odpalamy w pre-commit i w CI. PR, który nie przechodzi ruff check
lub zmienia coś po black --check, nie wchodzi do main.
Wskazówka: w VS Code ustaw black jako formatter i włącz „format on save" oraz
ruffjako extension — wtedy lokalnie nie zobaczysz czerwonego CI.
Zasada jest prosta: o formatowaniu nie dyskutujemy, bo robi to za nas maszyna. Energię z code review przenosimy na logikę, bezpieczeństwo i nazwy — tym zajmiemy się w kolejnych lekcjach.