V tomto repozitáři se nachází jednoduchý systém pro zveřejňování otevřených dat z hlasování zastupitelstva města Brna.
Systém zpracovává HTML protokoly z hlasování, které jsou aktuálně dostupné také na webu města. Získaná data poskytuje ve formátu JSON se schématem popsaným v souboru output-schema.json.
Po spuštění jsou data z hlasování dostupná na pevné url adrese. Při přístupu na tuto adresu (GET request) bez zadání parametrů jsou vrácena veškerá data v jednom velkém JSON souboru.
Přímý přístup na adresu https://kod.brno.cz/zastupitelstvo/ tedy vrátí všechna data.
Záznamy lze také řadit a stránkovat pomocí url parametrů. K dispozici jsou tyto parametry:
sort: určuje řazení záznamů ve výsledném JSONu, povolené hodnoty jsounewestaoldestlimit: určuje počet záznamů na jedné stránce (tzn. maximální počet zobrazených záznamů), povolené jsou kladné celočíselné hodnotyoffset: při použití parametrulimiturčuje záznam, od kterého se začíná (indexováno od nuly), povolené jsou nezáporné celočíselné hodnoty
Parametry jsou zadávány standardním způsobem přímo v url adrese - za úvodním otazníkem následují jednotlivé dvojice klíč=hodnota oddělené ampersandem.
Příklad - následující url adresa s parametry zobrazí třetí stránku záznamů stránkovaných po deseti a řazených podle data sestupně:
https://kod.brno.cz/zastupitelstvo/?sort=newest&limit=10&offset=20
offset = index stránky * limit, v tomto případě tedy 2 * 10 (index třetí stránky je 2, protože se indexuje od nuly)
Systém je určen pro provoz na unixových operačních systémech. Předpoklady pro fungování jsou:
- python 3.8
- pipenv
- SQLite
- flask
- cron
Nejdříve je potřeba vytvořit databázi:
$ sqlite3 db.sqlite < ./database/create.sqlNásledně je potřeba zkopírovat a případně upravit vzorový konfigurační soubor:
$ cp example-config.ini config.iniPoté je možné pomocí pipenv nainstalovat potřebné knihovny:
$ pipenv installJestli byla instalace úspěšná lze ověřit spuštěním jednotkových testů:
$ pipenv run python -m unittest discover -s testsProgram pro zpracování protokolů ve zdrojové složce lze spustit následujícím příkazem:
$ pipenv run python ./daemon.pyPříklad cronu pro pravidelné spouštění každou hodinu:
0 * * * * * cd /path/to/folder/ && pipenv run python ./daemon.pyPro spouštění endpointu endpoint.py je potřeba mít nainstalovaný flask. Poté stačí
spustit aplikační server následujícím příkazem:
$ FLASK_APP=./endpoint.py flask runTím dojde ke spuštění serveru na adrese http://127.0.0.1:5000/. Tato adresa zároveň slouží jako jediný endpoint pro přístup k datům. Následně je možné tento endpoint vystavit veřejně např. pomocí reverzní proxy.