Surprise! We've been running on hardware provided by BuyVM for a few months and wanted to show them a little appreciation.
Running a paste site comes with unique challenges, ones that aren't always obvious and hard to control. As such, BuyVM offered us a home where we could worry less about the hosting side of things and focus on maintaining a clean and useful service! Go check them out and show them some love!
Submitted on September 17, 2017 at 03:37 PM

New Paste 1 (Text)

Część 1.

Wstęp

Będziemy przygotowywać generator współczesnej wizualizacji wyborów prezydenckich z 2000 roku. http://prezydent2000.pkw.gov.pl/gminy/index.html

Opis

Należy przygotować generator stron HTML, który weźmie wyniki (pliki w excelu lub skonwertowane csv) wyborów i przygotuje zestaw stron:

    Wyniki wyborów w całym kraju plus mapka z województwami, na których można klikać
    Wyniki wyborów w każdym z województw plus odnośniki do okręgów
    Wyniki wyborów w każdym okręgu plus odnośniki do gmin
    Wyniki wyborów w każdej gminie w podziale na obwody 

Wymagania dodatkowe

    Powinien być generowany poprawny HTML
    Powinien być generowany porawny CSS
    Strona powinna być responsywna 

Sugerowane technologie

    python
    pyCharm
    http://jinja.pocoo.org/ 

Dodatkowo trzeba zrobić następujące rzeczy:

Na każdej stronie zamiast wykresu kołowego chcę mieć kolumnę w tabeli z wynikami, z paskiem szerokości odpowiadającej zdobytej liczbie głosów. Zwycięzca ma mieć pasek czerwony, drugi w kolejności - niebieski, a pozostałe mają być szare. Dla małego ekranu ta kolumna ma być niewidoczna.

Parzyste wiersze w tabeli kandydatów mają mieć delikatnie szare tło, należy to zrobić bez użycia klasy do zaznaczenia tych wierszy. Wiersz w którym jest kursor myszki powinien mieć pomarańczowe tło. 

Część 2.

Opis

Należy przerobić statyczne strony na aplikację django. Dane powinny być przechowywane w bazie danych. Dodatkowo należy:

    Dodać logowanie i wylogowywanie
    Pozwolić zalogowanym użytkownikom edytować liczby głosów wypadające na kandydata w obwodzie
    Dorobić (dla wszystkich) wyszukiwarkę gmin
    Przygotować testy jednostkowe

 Dodatkowo trzeba zrobić następujące rzeczy:

    Podczas zapisywania liczby głosów na kandydata aktualizować liczbę ważnych głosów w obwodzie - w szczególności przyjmując, że liczba ważnych głosów nie może być większa od liczby wydanych kart.
    Powyższe sprawdzenie musi zakładać, że z programu jednocześnie korzysta wiele osób i działać poprawnie na różnych bazach danych, nie tylko MySQL.
    Elegancko obsługiwać błędy, które mogą wystąpić podczas edycji.

Część 3.

Należy zmodernizować wyniki zadania drugiego przerabiając serwer na RESTowy.

    Klient powinien być statycznym HTML + CSS + JS (może być serwowany przez django)
    Po załadowaniu HTML, klient powinien rozpocząć pobieranie danych z serwera. Do momentu pobrania danych klient powinien wyświetlać informacje pobrane w poprzedniej sesji przechowywane po stronie przeglądarki
    Klient powinien komunikować się z serwisem RESTowym
    Komunikacja powinna odbywać się przy wykorzystaniu JSONa
    Należy obsługiwać błędy po obu stronach 

Można wykorzystać dodatkową bibliotekę JS

 Dodatkowo trzeba zrobić następujące rzeczy:

    Poprawić zgłaszane przez jshint sensowne problemy.
    Nie oszukiwać przesyłająć JSONa i przesyłać dane, a nie fragmenty HTMLa.

Część 4.

    Należy zmodyfikować stronę w taki sposób, aby korzystała z django channels i w momencie kiedy pojawiają się zmiany w wynikach wyświetlała te zmiany na stronie (modyfikując stronę jak również informując w "dymku") bez żadnej interakcji ze strony użytkownika. (ten punkt jest opcjonalny, jego realizacja daje +0.5 do egzaminu)
    Należy przygotować wygodną (wyszukiwarka, sortowanie, sensowna nawigacja) wersję strony dla admina.
    Należy przygotować całościowe testy aplikacji w selenium.

To zadanie może być uciążliwe, w szczególności:

    trzeba zainstalować reddisa https://redis.io/topics/quickstart
    trzeba zainstalować channelsy https://channels.readthedocs.io/en/stable/
    warto przeczytać tutorial https://realpython.com/blog/python/getting-started-with-django-channels/ 

 Konkretnie trzeba zrobić co najmniej następujące rzeczy:

    Admin: w adminie mają być edytowalne wszystkie modele, czyli w szczególności głosy w obwodzie mają być edytowalne zarówno w adminie jak i w samej aplikacji. Przy czym w adminie głosy mają być edytowalne na stronie obwodu, a jako oddzielna tabela nie muszą być widoczne. Widok tabeli ma być sensowny, tzn. standardowa jedna niesortowalna kolumna to trochę za mało, trzeba wybrać "rozsądne" kolumny i umożliwić sortowanie a także dodać wyszukiwarkę. No i oczywiście zapewnić kontrolę wpisywanych danych z sensownym wyświetlaniem informacji o błędach. Na dodatek program ma być napisany tak, żeby był odporny na równoległe działanie wielu użytkowników zarówno korzystających z admina jak i z aplikacji.
    Testy: mają obejmować całą aplikację czyli potrzeba co najmniej następujących scenariuszy:
        logowanie -> wylogowanie, poprawne i z błędami,
        jako niezalogowany użytkownik przejście po wszystkich "ekranach", sprawdzanie wyświetlonych danych i braku możliwości edycji,
        użycie wyszukiwarki, znajdowane są dokładnie te gminy, które powinny być znalezione i można wejść na stronę jednej z nich,
        jako zalogowany użytkownik edycja danych w jakimś obwodzie i sprawdzenie, że wprowadzone zmiany są widoczne na wszystkich wyższych poziomach,
        jakiś test równoległego działania dwóch użytkowników, to zależy od architektury aplikacji, ale jakaś próba edycji tego samego obwodu przez dwóch użytkowników, tak, żeby tylko akcja jednego z nich mogła się udać, a drugiego została odrzucona przez serwer. 
    Oczywiście testy nie powinny zawierać zbyt dużo powtórzonego kodu, czyli wielokrotnie powtarzane czynności trzeba zaimplementować jako funkcje.