Witam w dokumentacji watchdog-kj-kultura!¶
Cele¶
Serwis jest elementem projektu Mapa Kultury 2015 realizowanego przez Klub Jagieloński przy wsparciu Ministerstwa Kultury i Dziedzictwa Narodowego w ramach organizowanego przez Narodowe Centrum Kultury priorytetu “Obserwatorium Kultury”. Jego celem jest przedstawienie efektów badań nad budżetami i stanem zatrudnienia w finansowanych ze środków publicznych instytucji kultury.
Oprogramowanie aplikacji zostało zaprojektowane i zrealizowane przez Stowarzyszenie Sieć Obywatelska - Watchdog Polska
Serwis służyć ma:
- możliwości prezentacji, zapoznania się z listą oraz wyszukiwania istniejących w Polsce publicznych instytucji i ośrodków kultury finansowanych z środków publicznych,
- prezentacji zebranych w ramach projektu danych adresowych i kontaktowych do ok. 9000 instytucji kultury w Polsce
- prezentacji danych dotyczących finansowania i zatrudnienia pozyskanych w ramach projektu dotąd od kilkuset podmiotów,
- składaniu wniosków o informację publiczną i petycji za pomocą prostego generatora,
- możliwości proponowania przez użytkowników (obywateli lub pracowników placówek) aktualnych lub brakujących danych,
- prezentacji raportu analitycznego powstałego w oparciu o pozyskane z innych źródeł poprzez podstrona ze streszczeniem, raportem w wersji do pobrania, możliwością przejrzenia raportu on-line w technologii typu issuu.com,
- prezentacji mapy wydatków na kulturę 2015 poprzez podstronę z opisem, możliwością podglądu mapy w przeglądarce oraz pobrania plików .pdf i pliku graficznego z mapą,
- prezentacji mapy zatrudnienia w kulturze 2015 (j.w.).
Szata graficzna bazuje na dotychczasowym strony internetowej Klubu Jagielońskiego - kj.org.pl.
Architektura¶
Aplikacja została wykonana zaimplentowana w języku Python 3.5 z wsparciem frameworku Django 1.10. Została zaprojektowania do wykorzystania bazy danych PostgreSQL 9.5 z modułem PostGIS i silnika pełnotekstowej wyszukiwarki Elasticsearch 2.4.3
Zestawienie bibliotek Python wykorzystanych w projekcie:
# Wheel 0.25+ needed to install certain packages on CPython 3.5+
# like Pillow and psycopg2
# See http://bitly.com/wheel-building-fails-CPython-35
# Verified bug on Python 3.5.1
wheel==0.29.0
# Bleeding edge Django
django==1.10.5
# Configuration
django-environ==0.4.1
# Forms
django-braces==1.10.0
django-crispy-forms==1.6.1
# Templates
django-bootstrap-pagination==1.6.2
# Models
django-model-utils==2.6.1
# Admin
django-grappelli==2.9.1
geopy==1.11.0
django-import-export==0.5.1
django-tinymce==2.4.0
# Images
Pillow==4.0.0
# For user registration, either via email or social
# Well-built with regular release cycles!
django-allauth==0.30.0
# Search
elasticsearch==2.4.1 # pyup: <5.0.0
django-haystack==2.6.0
django-haystack-elasticsearch==0.1.0
django-haystack-panel==0.2.1
# Python-PostgreSQL Database Adapter
psycopg2==2.6.2
# Unicode slugification
awesome-slugify==1.6.5
# Time zones support
pytz==2016.10
# Redis support
django-redis==4.7.0
redis>=2.10.5
# Data source
django-teryt-tree==0.11.1
django-autofixture==0.12.1
# Pretty e-mail
djmail==1.0.0
# GeoMaps
django-leaflet==0.19.0
jsonfield==1.0.3
https://github.com/balazs-endresz/django-geojson/archive/a2b05b4c644e54a127a482c41d3617897c2a86cd.zip # See https://github.com/makinacorpus/django-geojson/issues/82 and https://github.com/makinacorpus/django-geojson/pull/81
# Utils
django-atom==0.12.7
python-dateutil==2.6.0
Ponadto podczas pracy deweloperskiej są wykorzystane następujące biblioteki:
# Local development dependencies go here
-r base.txt
-r test.txt
Sphinx==1.5.1
django-extensions==1.7.5
Werkzeug==0.11.15
django-test-plus==1.0.16
factory-boy==2.8.1
django-debug-toolbar==1.6
# improved REPL
ipdb==0.10.1
Panel administracyjny¶
Dostęp do panelu administracyjnego, na których odbywać się będzie zarządzanie wszystkimi zasobami portalu jest tylko możliwy po autoryzacji i wyłącznie dla konkretnych osób. Tworzenie kont administracyjnych jest możliwe wyłącznie z poziomu administracyjnego, to znaczy, że konto administracyjne może założyć osoba zalogowana do panelu. Oprogramowanie portalu zapewnia rejestrowaną i skuteczną kontrolę dostępu. Ilekroć mowa jest o karcie tworzenia i edycji to należy rozumieć tworzenie i edycję treści portalu na panelu administracyjnym, do którego dostęp mają wyłącznie autoryzowane osoby zarządzające portalem.
Instalacja¶
Niniejsza aplikacja przedstawia uruchomienie aplikacji w środowisku deweloperskim. Nie obejmuje wdrożenia, co zostało przedstawione w sekcji Wdrożenie .
W niniejszej procedurze zostaną zainstalowane następujące komponenty: - serwer baz danych - PostgreSQL 9.5 - serwer wyszukiwarki - Elasticsearch >= 2.4.3<5 - aplikacja
W niniejszej instrukcji został wykorzystany następujący Vagrantfile
:
Vagrant.configure("2") do |config|
config.vm.box = "bento/xenial64"
config.vm.hostname = "myprecise.box"
config.vm.network :private_network, ip: "192.123.0.97"
config.vm.network "forwarded_port", guest: 2000, host: 8080
end
W pierwszej kolejności została uruchomie oficjalne repozytorium PostgreSQL zgodnie z właściwa dokumentacją oprogramowania :
$ sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt/ $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
$ wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
$ sudo apt-get install update
Następnie dokonano instalacji poprawnych wersji oprogramowania:
$ sudo apt-get install postgresql-9.5-postgis-2.2 postgresql-9.5 postgresql-server-dev-9.5
Została zainstalowana odpowiednia środowiska Python:
$ sudo apt-get install python3.5-dev python3.5-dev python-pip virtualenv
Kod został pobrawny i wypakowany:
$ wget https://github.com/watchdogpolska/watchdog-kj-kultura/archive/master.tar.gz
$ tar xvzf master.tar.gz
$ cd watchdog-kj-kultura-master
Zostało skonfigurowane wirtualne środowisko i zostały zainstalowane zależności:
watchdog-kj-kultura-master$ virtualenv -p python3.5 env
watchdog-kj-kultura-master$ source env/bin/activate;
watchdog-kj-kultura-master$ pip install -r requirements/dev.txt;
Następnie została skonfigurowana baza danych odpowiednio:
$ sudo -u postgres psql -c "create user $USER;"
$ sudo -u postgres psql -c "create database watchdog_kj_kultura;"
$ sudo -u postgres psql -c "GRANT ALL PRIVILEGES ON DATABASE watchdog_kj_kultura to $USER;"
$ sudo -u postgres psql watchdog_kj_kultura -c "CREATE EXTENSION postgis;"
watchdog-kj-kultura-master$ python manage.py migrate
Następnie należy zainstalować silnik wyszukiwarki:
$ echo 'deb http://packages.elastic.co/elasticsearch/2.x/debian stable main' | sudo tee /etc/apt/sources.list.d/elasticsearch-2.x.list
$ sudo apt-get update
$ sudo apt-get install elasticsearch=2.4.3
Ostatecznie możliwe jest uruchomienie serwera WWW:
watchdog-kj-kultura-master$ python manage.py 0.0.0.0:2000
Jest on dostępny po wywołaniu localhost:8080
w przeglądarce.
Wdrożenie¶
Heroku¶
Jedną z akceptowalnych form wdrożenia jest wykorzystanie Heroku. Wymaga to kilku prostych kroków, które są szczegółowo przedstawione poniżej.
1. Utworzenie aplikacji¶
Po pierwsze należy utworzyć aplikacje i ustalić wartość podstawowych zmiennych:
$ heroku create app_name
$ heroku config:set DJANGO_SETTINGS_MODULE=config.settings.production
$ heroku config:set DJANGO_SECRET_KEY=$(random_pass)
$ heroku config:set DJANGO_ADMIN_URL=admin/
$ heroku config:set BUILDPACK_URL=https://github.com/ddollar/heroku-buildpack-multi.git
2. API plików statycznych¶
Następnie należy określić miejsce przechowywania plików statycznych (załączników itd.). Rekomenduje w tym zakresie wykorzystanie usługi e24files od e24cloud , co pozwala na efektywne cenowe przechowywanie danych w Polsce:
$ heroku config:set DJANGO_AWS_ACCESS_KEY_ID=**CUT**
$ heroku config:set AWS_S3_ENDPOINT_URL="https://e24files.com/""
$ heroku config:set AWS_S3_SIGNATURE_VERSION="s3"
$ heroku config:set AWS_S3_CUSTOM_DOMAIN="**CUT**.e24files.com"
$ heroku config:set DJANGO_AWS_SECRET_ACCESS_KEY=**CUT**
$ heroku config:set DJANGO_AWS_STORAGE_BUCKET_NAME=watchdog-kj-kultura
Możliwe jest także wykorzystanie zwyczajnego Amazon S3 z wykorzystaniem ustawień
$ heroku config:set DJANGO_AWS_ACCESS_KEY_ID=**CUT**
$ heroku config:set AWS_S3_CUSTOM_DOMAIN="**CUT**.s3.eu-central-1.amazonaws.com"
$ heroku config:set AWS_S3_ENDPOINT_URL=http://s3.amazonaws.com
$ heroku config:set AWS_S3_REGION_NAME=eu-central-1
$ heroku config:set AWS_S3_SIGNATURE_VERSION="s3v4"
$ heroku config:set DJANGO_AWS_SECRET_ACCESS_KEY=**CUT**
$ heroku config:set DJANGO_AWS_STORAGE_BUCKET_NAME=watchdog-kj-kultura
3. API wiadomości e-mail¶
W kolejnym kroku należy wskazać dane operatora wiadomości e-mail. Wstępnie aplikacja jest skonfigurowana do obsługi Mailgun, zważywszy na swoją popularność:
$ heroku config:set DJANGO_MAILGUN_API_KEY=key-xxxx
$ heroku config:set MAILGUN_SENDER_DOMAIN=sandboxxx.mailgun.org
4. API monitorowania wyjątków¶
Wymagane jest również, aby wskazać dane dostępowe DSN do instancji Sentry:
$ heroku config:set DJANGO_SENTRY_DSN=http://...:...@sentry.jawne.info.pl/16
5. Publikacja kodu¶
W tym miejscu dopiero warto umieścić kod źródłowy aplikacji na serwerze:
$ git push heroku master
6. Baza danych¶
Potem należy stworzyć bazę danych i wprowadzić schemat bazy danych:
$ heroku addons:create heroku-postgresql:hobby-dev
$ heroku run python manage.py migrate
8. Adres WWW¶
Jeżeli uruchamisz apliacje pod adresem innym niż kultura.kj.org.pl
konieczne jest także zaakceptowanie domeny:
$ heroku config:set DJANGO_ALLOWED_HOSTS="watchdog-kj-kultura.herokuapp.com"
9. Wyszukiwarka¶
Aby uruchomić wyszukiwarkę należy wywołać:
$ heroku addons:create searchbox:starter
$ heroku run python manage.py rebuild_index
10. Administrator aplikacji¶
Warto także utworzyć pierwszego użytkownika administracyjnego:
$ heroku run python manage.py createsuperuser
Planista¶
Niektóre komponenty powinny być uruchamiane cyklicznie niezależnie od interakcji użytkownika. W przypadku Heroku należy w takiej sytuacji wykorzystać:
$ heroku addons:create scheduler:standard
W systemach Unix można wykorzystać program cron odpowiednio. Pamiętać należy jednak o ustawieniu odpowiednich zmiennych środowiskowych.
Powiadomienia¶
W celu zapewnienia powiadomień z komponentu System zapytań do instytucji konieczne jest skonfigurowanie cyklicznego wywołania polecenia Polecenia zarządzania. Wystarczające winno być powiadomienie raz dziennie.
W Heroku wywołać:
$ heroku addons:open scheduler
W nowo otwartym oknie wprowadzić następujące ustawienia:

Wyszukiwarka¶
W celu zapewnienia sprawnego wyszukiwania konieczne jest skonfigurowanie cyklicznej aktualizacji indeksu wyszukiwarki. Wystarczające powinno być indeksowanie co godzinę.
W przypadku Heroku należy wykorzystać Planista z poleceniem python manage.py update_index --age=1
wywoływanym co godzinę. Patrz także na szczegółową instrukcje dla :ref:`Powiadomienia.
Dane testowe¶
W celu szybkiego rozruchu aplikacji możliwe jest wygenerowanie lub wczytanie pewnych danych początkowych. Szczegółowe instrukcje zostały przedstawione w modułach właściwych modułów.
Rozwój¶
W tym dokumencie opisujemy opis procesu rozwoju aplkacji. Ma on postać FAQ, aby utrzymywać dokument prostym.
Jak zgłosić usterkę?¶
Po prostu przejdź na https://github.com/watchdogpolska/watchdog-kj-kultura/issues i utworz zgłoszenie.
Jak diagnozować funkcjonowanie poczty elektronicznej?¶
W środowisku deweloperskim wiadomości e-mail są domyślnie wypisywane na konsole w oknie serwera WWW. Jeżeli chcesz zweryfikować np. formatowanie wiadomości zaleca się wykorzystanie maildump, który możliwy jest do zainstalowania i uruchomienia poprzez:
$ pip install maildump
$ maildump
Następnie należy ponownie uruchomić serwer WWW w następujący sposób EMAIL_URL=smtp://localhost:1025/ python manage.py runserver
. Wiadomości będą dostępne przez interfejs WWW
pod adresem http://localhost:1080
.
Jak uruchomić automatyczne testy?¶
Do prawidłowego uruchomienia automatycznych testów bezwzględnie wymagane jest zainstalowanie wszystkich deweloperskich pakietów. Można to osiągnąc poprzez:
$ pip install -r requirements/dev.txt;
Następnie należy wywołać:
$ python manage.py test
Warto wyróznić kilka przełączników, które mogą zapewnić sprawniejsze wykorzystanie testów:
-v2
oznacza, że będą na bieżąco wypisywane nazwy wszystkich testów wraz z ich rezultatem,--keepdb
oznacza, że struktura bazy danych nie zostanie skasowana po wykonaniu testów, co pozwala oszczędzić jej tworzenie każdorazowo, co jednak uniemożliwi wykrycie testów np. w migracjach,--parallel 4
oznacza, że testy będa wykonywane równolegle, a wcześniej zostaną utworzone 4 identyczne struktury bazy danych.
Ostrzeżenie
Warto zaznaczyć, że zrównoleglenie testów nie oznacza, że będą one wykonywane szybciej niż proces utworzenia dodatkowych baz danych może się wydłużyć o więcej niż sam proces wykonywania testów.
Jak wygenerować dokumentacje?¶
Do prawidłowego uruchomienia automatycznych testów bezwzględnie wymagane jest zainstalowanie wszystkich deweloperskich pakietów. Można to osiągnąc poprzez:
$ pip install -r requirements/dev.txt;
Nastepnie należy przejść do katalogu docs
i wywołać:
$ make html
Warto zaznaczyć, że aktualna dokumentacja jest budowana automatycznie i publikowana na Read the Docs.
Jak analizować działanie Elasticsearch?¶
W celu analizowania poprawności komunikacji aplikacji z serwerem wyszukiwarki Elasticsearch zaleca się wykorzystanie opcji “Reverse proxy” narzędzia mitmproxy.
Należy przykładowo wywołać:
.. code-block:: bash
$ mitmweb -R http://127.0.0.1:9200
Następnie wykorzystać utworzony serwer proxy do połączenia:
.. code-block:: bash
$ SEARCH_URL=”elasticsearch://127.0.0.1:8080” python manage.py rebuild_index
Moduł podstawowy¶
Założenia¶
Moduł stanowi zbiór zróżnicowanych podstawowych komponentów. Zapewnia zarówno integracje dedykowanych komponentów z zewnętrznych, jak również bazę dla komponentów wbudowanych. Moduł zapewnia również możliwośc ustalenia ustawień dla stron działających z wykorzystaniem aplikacji.
Dostępna jest karta edycji ustawień, która określa ustawienia danej strony działającej z wykorzystaniem aplikacji.
Dla każdej nowego obiektu ustawień dostępne są obecnie pola:
- Treść strony głównej - Duże pole tekstowe, które określa tekst powitalny występujący w nagłówku strony głównej.
Architektura¶
Model¶
-
class
watchdog_kj_kultura.main.models.
Settings
(id, created, modified, site, home_content)[źródło]¶ Parametry: - id (AutoField) – Id
- created (AutoCreatedField) – Utworzono
- modified (AutoLastModifiedField) – Zmodyfikowane
- site_id (OneToOneField to
django.contrib.sites.models.Site
) – Strona - home_content (HTMLField) – Treść strony głównej
Widoki¶
Panel administracyjny¶
Moduł podstron statycznych¶
Założenia¶
Ten moduł ma możliwość dodawania/edycje statycznych stron na portalu z poziomu panelu administracyjnego, a także wyświetlanie stron przez użytkownika. Wprowadzony mechanizm ma służyć prezentacji podstawowych informacji o projekcie, a także infografik i raportów.
Karta edycji podstron edycji zawiera nastepujące pola:
- Nazwa - Krótkie pole tekstowe, które określa tytuł strony
- Użytkownik - Pole wyboru, które określa użytkownika odpowiedzialnego za stronę.
- Rodzic - Opcjonalne pole wyboru, które określa stronę nadrzędną do edytowanej np. na potrzeby breadcrumbs,
- Treść - Duże pole tekstowe do wpisywania treści strony z edytorem WYSIWYG, a także obsługą mapy.
- Publiczna widoczność - Pole jednokrotnego zaznaczenia, które stwarza możliwość tymczasowego ukrycia stron.
Mechanizm podstron statycznych zapewnia:
- edycje wszystkich pól bazy ośrodka zgodnie z Karta tworzenia/edycji strony
- przycisk usunięcia podstrony z bazy
- możliwość tymczasowego ukrycia strony
Każdorazowo i automatycznie jest zapisywana data utworzenia i modyfikacja strony.
Dane testowe¶
Dla systemu stron statycznych możliwe jest w środowisku deweloperskim dynamicznie generowanych danych testowych. Wymagane jest wcześniejsze utworzenie użytkowników (zob. Użytkownicy ). Następnie należy wywołać:
$ python manage.py loadtestdata staticpages.Page:25
Architektura¶
Model¶
-
class
watchdog_kj_kultura.staticpages.models.
Attachment
(id, created, modified, file)[źródło]¶ Parametry: - id (AutoField) – Id
- created (AutoCreatedField) – Utworzono
- modified (AutoLastModifiedField) – Zmodyfikowane
- file (FileField) – Plik
-
class
watchdog_kj_kultura.staticpages.models.
Page
(id, name, slug, user, parent, content, visible, created, modified)[źródło]¶ Parametry: - id (AutoField) – Id
- name (CharField) – Nazwa
- slug (AutoSlugField) – Identyfikator redakcyjny
- user_id (ForeignKey to
watchdog_kj_kultura.users.models.User
) – User - parent_id (TreeForeignKey to
watchdog_kj_kultura.staticpages.models.Page
) – Rodzic - content (HTMLField) – Treść
- visible (BooleanField) – Zaznacz, aby oznaczyć stronę jako widoczną publicznie
- created (AutoCreatedField) – Utworzono
- modified (AutoLastModifiedField) – Zmodyfikowane
- lft (PositiveIntegerField) – Lft
- rght (PositiveIntegerField) – Rght
- tree_id (PositiveIntegerField) – Tree id
- level (PositiveIntegerField) – Level
Znaczniki szablonów¶
The function to essential render text of static pages with shortcodes.
Replace occurences of [map]x[/map] to HTML code. Decorated with
register.simple_tag
.Parametry: Zwraca: Typ zwracany: str – rendered
Widoki¶
Baza instytucji kultury¶
Założenia¶
Moduł stanowi bazę grupująca ośrodki kultury. Zapewnia możliwości prezentacji, zapoznania się z listą oraz wyszukiwania istniejących w Polsce publicznych instytucji i ośrodków kultury finansowanych z środków publicznych, jak również danych adresowych i kontaktowych do ok. 9000 instytucji kultury w Polsce, danych dotyczących finansowania i zatrudnienia pozyskanych w ramach projektu dotąd od kilkuset podmiotów.
Moduł stanowi także źródło danych dla System zapytań do instytucji.
Dostępne są karty edycji dla:
- organizacji, która określa instytucje kultury, która będzie prezentowana na stronie,
- metakategorii, która definiuje rodzaj metadanych na temat organizacji,
- kategorii, która umożliwia ustalenie kategorii, którymi mogą być opisane organizacje.
Należy wyjaśnić, że dla każdej nowej metakategorii dostępne są pola:
- Nazwa - Określenie nazwy pola z metadanymi
- Klucz - Określenie unikalnego klucza, który będzie wykorzystywany podczas odwołania do tych metadanch w aplikacji z wykorzystaniem np.
{{object.meta.KLUCZ}}
- Użytkownik - Osoba odpowiedzialna za kryterium
Dla każdej organizacji wymagane są przez aplikacje następujące pola:
- Nazwa - Określenie nazwy organizacji
- E-mail - Określenie adresu e-mail instytucji, który będzie wykorzystywany m. in. w System zapytań do instytucji
- Jednostka podziału terytorialnego - Określenie jednostki podziału terytorialnego wykorzystanej w nawigacji według Podział terytorialny
- Użytkownik - Osoba odpowiedzialna za organizacje
Każdorazowo i automatycznie jest zapisywana data utworzenia i modyfikacja wpisu.
Dla każdej organizacji możliwe jest ustalenie metadanych. Wymaga to pierw wprowadzenia obiektu typu watchdog_kj_kultura.organizations.models.MetaCategory
, a wówczas podczas edycji organizacji pojawi się dodatkowe pole odpowiadające wartości metadanych.
W celu wykorzystania danych zgromadzonych w polu metadanych należy dokonać edcji szablonów w kodzie źródłowym aplikacji poprzez zmiany w pliku /watchdog_kj_kultura/organizations/templates/organizations/organization_detail.html
. Podczas edycji odwołać się do metadanej wykorzystaniem np. {{object.meta.KLUCZ}}
. Możesz wykorzystać w tym celu język szablonów Django - The Django template language.
Dane testowe¶
Dla bazy instytucji kultury możliwe jest w środowisku deweloperskim dynamicznie generowanych danych testowych. Wymagane jest wcześniejsze utworzenie użytkowników (zob. Użytkownicy ) i podziału terytorialnego (zob. Dane testowe). Następnie należy wywołać:
$ python manage.py loadtestdata organizations.Category:5 organizations.Organization:100
Należy odnotować, że tak utworzone dane pozbawione są informacji na temat obiektów watchdog_kj_kultura.organizations.models.MetaCategory
, a zatem także pola meta
w watchdog_kj_kultura.organizations.models.Organization
. Organizacje są także prawdopodobnie ukryte.
Akcje w panelu administracyjnym¶
W panelu administracyjnym bazy instytucji kultury są dostępne pewne szczególne operacje, które warto wyróżnić.
Geokodowanie¶
W przypadku watchdog_kj_kultura.organizations.models.MetaCategory
możliwe jest automatyczne uzupełnienie pola pozycji współrzędnych geograficznych. Operacja ta wykorzystuje zewnętrzne usługi, których konfiguracja została przedstawiona w Ustawienia. Ilość usług zależy od konfiguracji aplikacji. Pomijane są instytucje, które mają wypełnione informacje o pozycji.
Szczegółowo proces automatycznego uzupełniania pola pozycji został przedstawiony w następującym materiale:
Import i eksport¶
Możliwe jest wyeksportowanie i importowanie m. in. watchdog_kj_kultura.organizations.models.Organization
. Stanowi to realizacje wymaganego w dokumentacji modułu importowania danych związanego z bazą ośrodków.
Podczas procesu importu należy ściśle przestrzegać nazw kolumn wskazanych przez aplikacje. Zaleca się w celu przygotowanie importu wykorzystanie dowolnego pliku eksportu jako szablonu do którego zostaną przeniesione dane. Pozwala to także na dokonanie selekcji danych, które mają być zaktualizowane (wypełniona kolumna ID), a które mają być zaktualizowane, aby uniknąć powtórzeń instytucji.
Największą pewność poprawności wczytania danych i kompatybilność zapewnia format CSV.
Ustawienia¶
Niniejszy moduł wykorzystuje szereg ustawień Django (zob. Designating the settings), które zapewniają klucze API na potrzeby mechanizmu Geokodowanie. Wprowadzenie ich nie jest obowiązkowe. Nie wprowadzenie danego klucza oznacza, że dany usługodawca nie będzie dostępny.
Dostępne ustawienia to:
- GEOCODE_BAIDU_API_KEY
- Klucz API dla Baidu Maps v2 API. Dokumentacja API jest dostępna na stronie http://developer.baidu.com/map/webservice-geocoding.htm . Klucze API są zarządzane przez konsolę (http://lbsyun.baidu.com/apiconsole/key)
- GEOCODE_BING_API_KEY
- Klucz API dla Bing Maps Locations API. Dokumentacja API jest dostępna na https://msdn.microsoft.com/en-us/library/ff701715.aspx .
- GEOCODE_GOOGLE_API_KEY
- Klucz API dla Google Maps v3 API. Dokumentacja API jest dostępna na https://developers.google.com/maps/documentation/geocoding/ . Zarządzanie kluczami odbywa się przez konsolę ( https://code.google.com/apis/console ).
- GEOCODE_YANDEX_API_KEY
- Klucz API dla Yandex. Dokumentacja API jest dostępna na http://api.yandex.com/maps/doc/geocoder/desc/concepts/input_params.xml . Zarządzanie kluczami odbywa się przez konsolę http://api.yandex.ru/maps/form.xml .
Architektura¶
Model¶
-
class
watchdog_kj_kultura.organizations.models.
Category
(id, created, modified, name, slug)[źródło]¶ Parametry: - id (AutoField) – Id
- created (AutoCreatedField) – Utworzono
- modified (AutoLastModifiedField) – Zmodyfikowane
- name (CharField) – Nazwa
- slug (AutoSlugField) – Identyfikator redakcyjny
-
class
watchdog_kj_kultura.organizations.models.
MetaCategory
(id, created, modified, name, key, user)[źródło]¶ Parametry: - id (AutoField) – Id
- created (AutoCreatedField) – Utworzono
- modified (AutoLastModifiedField) – Zmodyfikowane
- name (CharField) – Nazwa
- key (CharField) – Dopuszczalne są tylko znaki alfabetu łacińskiego i liczby.
- user_id (ForeignKey to
watchdog_kj_kultura.users.models.User
) – User
-
class
watchdog_kj_kultura.organizations.models.
Organization
(id, created, modified, name, slug, email, jst, user, pos, category, visible, meta)[źródło]¶ Parametry: - id (AutoField) – Id
- created (AutoCreatedField) – Utworzono
- modified (AutoLastModifiedField) – Zmodyfikowane
- name (CharField) – Nazwa
- slug (AutoSlugField) – Identyfikator redakcyjny
- email (EmailField) – E-mail
- jst_id (ForeignKey to
teryt_tree.models.JednostkaAdministracyjna
) – Jednostka podziału terytorialnego - user_id (ForeignKey to
watchdog_kj_kultura.users.models.User
) – User - pos (PointField) – Pozycja
- category_id (ForeignKey to
watchdog_kj_kultura.organizations.models.Category
) – Kategoria - visible (BooleanField) – Zaznacz, aby oznaczyć organizacje jako widoczną publicznie
- meta (JSONField) – Metadane
Formularze¶
-
class
watchdog_kj_kultura.organizations.forms.
OrganizationAdminForm
(data=None, files=None, auto_id=u'id_%s', prefix=None, initial=None, error_class=<class 'django.forms.utils.ErrorList'>, label_suffix=None, empty_permitted=False, instance=None, use_required_attribute=None)[źródło]¶ Organization management form for usage in
watchdog_kj_kultura.organizations.admin.OrganizationAdmin
-
class
watchdog_kj_kultura.organizations.forms.
OrganizationFixForm
(*args, **kwargs)[źródło]¶ Report changes suggestion form for usage with
watchdog_kj_kultura.organizations.models.Organization`
instances.Parametry: - name – Nazwa
- email – E-mail
- jst – Jednostka podziału terytorialnego
- pos – Pozycja
- category – Kategoria
- sources – Źródło informacji
- worker – Pracuje w tej instytucji
Widoki¶
Panel administracyjny¶
-
class
watchdog_kj_kultura.organizations.admin.
CategoryAdmin
(model, admin_site)[źródło]¶ Admin View for Category
-
class
watchdog_kj_kultura.organizations.admin.
GeocoderActionsMixin
[źródło]¶ Mixins with actions to geocode organizations.
Akcje panelu administracyjnego¶
-
watchdog_kj_kultura.organizations.admin_actions.
get_geocoder_for_service
(service)[źródło]¶ For the service provided, try to return a geocoder instance.
Parametry: service (string) – name of service Zwraca: - instance of geocoder initialized with
- appropriate API key
Typ zwracany: geopy.geocoders.geocoders.base.Geocoder
System zapytań do instytucji¶
Założenia¶
Moduł zapewnia możliwość składania wniosków o informację publiczną i petycji za pomocą prostego generatora. Jak również zapewnia automatyczne przypomnienia o złożonych zapytaniach, które zostały wysłane z pomocą systemu. System został dostosowany także do samodzielnego określenia nowej kategorii pism i algorytmu powiadomień.
Moduł wykorzystuje dane pochodzące z Baza instytucji kultury w celu zidentyfikowania organizacji, które mogą być adresatami petycji.
Dane testowe¶
Dla systemu zapytań do instytucji możliwe jest w środowisku deweloperskim dynamicznie generowanych danych testowych. Wymagane jest wcześniejsze utworzenie użytkowników (zob. Użytkownicy ), podziału terytorialnego (zob. Dane testowe), a także organizacji (zob. Dane testowe ). Następnie należy wywołać:
$ python manage.py loadtestdata organizations_requests.Template:5 organizations_requests.Request:50
Należy odnotować, że brak jest możliwości wygenerowania automatycznych danych dla powiadomień. Należy w tym zakresie wykorzystać panel administracyjny.
Administracja¶
Polecenia zarządzania¶
Dostępne jest polecenie zarządzania Django, które odpowiada za mechanizm automatycznego powiadomienia o sprawach, które są dostępne. Aby zapewnić prawidłowe wysyłanie powiadomień konieczne jego cykliczne wywołanie. Zaleca się wywołanie nie rzadziej niż raz dziennie.
Użytkowanie zostało przedstawione poniżej:
usage: manage.py send_requests_notifications [-h] [--version] [-v {0,1,2,3}]
[--settings SETTINGS]
[--pythonpath PYTHONPATH]
[--traceback] [--no-color]
Command to create and send notification to remind user about the request.
optional arguments:
-h, --help show this help message and exit
--version show program's version number and exit
-v {0,1,2,3}, --verbosity {0,1,2,3}
Verbosity level; 0=minimal output, 1=normal output,
2=verbose output, 3=very verbose output
--settings SETTINGS The Python path to a settings module, e.g.
"myproject.settings.main". If this isn't provided, the
DJANGO_SETTINGS_MODULE environment variable will be
used.
--pythonpath PYTHONPATH
A directory to add to the Python path, e.g.
"/home/djangoprojects/myproject".
--traceback Raise on CommandError exceptions
--no-color Don't colorize the command output.
Architektura¶
Model¶
-
class
watchdog_kj_kultura.organizations_requests.models.
Event
(id, created, modified, notification, request)[źródło]¶ Parametry: - id (AutoField) – Id
- created (AutoCreatedField) – Utworzono
- modified (AutoLastModifiedField) – Zmodyfikowane
- notification_id (ForeignKey to
watchdog_kj_kultura.organizations_requests.models.Notification
) – Powiadomienie - request_id (ForeignKey to
watchdog_kj_kultura.organizations_requests.models.Request
) – Zapytanie
-
class
watchdog_kj_kultura.organizations_requests.models.
Notification
(id, created, modified, template, delta, subject, body)[źródło]¶ Parametry: - id (AutoField) – Id
- created (AutoCreatedField) – Utworzono
- modified (AutoLastModifiedField) – Zmodyfikowane
- template_id (ForeignKey to
watchdog_kj_kultura.organizations_requests.models.Template
) – Szablon - delta (RelativeDeltaField) – Napisz po angielsku okres czasu.
- subject (CharField) – Wspierane są pewne znaczniki. Zapoznaj się z dokumentacją.
- body (TextField) – Wspierane są pewne znaczniki. Zapoznaj się z dokumentacją.
-
class
watchdog_kj_kultura.organizations_requests.models.
Request
(id, created, modified, organization, template, subject, email, email_user, body)[źródło]¶ Parametry: - id (AutoField) – Id
- created (AutoCreatedField) – Utworzono
- modified (AutoLastModifiedField) – Zmodyfikowane
- organization_id (ForeignKey to
watchdog_kj_kultura.organizations.models.Organization
) – Organizacja - template_id (ForeignKey to
watchdog_kj_kultura.organizations_requests.models.Template
) – Użyty szablon - subject (CharField) – Tytuł
- email (EmailField) – Adres organizacji
- email_user (EmailField) – Adres e-mail jest niezbędny w celach bezpieczeństwa, a także do powiadomień o stanie zapytania.
- body (TextField) – Treść zapytania
-
class
watchdog_kj_kultura.organizations_requests.models.
Template
(id, created, modified, name, slug, subject, body, description, introduction, email_required, visible)[źródło]¶ Parametry: - id (AutoField) – Id
- created (AutoCreatedField) – Utworzono
- modified (AutoLastModifiedField) – Zmodyfikowane
- name (CharField) – Nazwa
- slug (AutoSlugField) – Identyfikator redakcyjny
- subject (CharField) – Tytuł
- body (TextField) – Treść
- description (TextField) – Krótki opis potencjału użycia szablonu.
- introduction (TextField) – Wprowadzenie
- email_required (BooleanField) – Zaznacz, aby wymagać adresu w treści zapytania.
- visible (BooleanField) – Zaznacz, aby oznaczyć szablon jako publicznie widoczny
Formularze¶
Widoki¶
Panel administracyjny¶
-
class
watchdog_kj_kultura.organizations_requests.admin.
EventInline
(parent_model, admin_site)[źródło]¶ Stacked Inline View for Event
-
model
¶ alias klasy
Event
-
-
class
watchdog_kj_kultura.organizations_requests.admin.
NotificationInline
(parent_model, admin_site)[źródło]¶ Stacked Inline View for Notification
-
model
¶ alias klasy
Notification
-
Moduły ekranu zarządzania¶
Dostępne są moduły kompatybilne z Dashboard API.
-
class
watchdog_kj_kultura.organizations_requests.dashboardmodules.
RecentRequest
(title=None, limit=10, include_list=None, exclude_list=None, **kwargs)[źródło]¶ Module that lists the recent requests
-
children
¶ QuerySet
– It contains list ofwatchdog_kj_kultura.organizations.models.Organization
to shows for user
-
limit
¶ int – Number of objects return
-
template
¶ str – Template name to render of module in dasbhard
-
title
¶ str – Title of module in dashboard
-
Podział terytorialny¶
Dane testowe¶
Dostępna jest rządowa baza danych podziału terytorialnego. Aby ją wczytać należy - zgodnie z dokumentacją biblioteki django-teryt-tree - wywołać:
wget "http://www.stat.gov.pl/broker/access/prefile/downloadPreFile.jspa?id=1110" -O TERC.xml.zip
unzip TERC.xml.zip
pip install lxml
python manage.py load_teryt TERC.xml
rm TERC.xml*