Merge pull request 'Vyčištění náhodných věcí (co mě tak kde štvalo)' (!58) from vycisteni into master
Reviewed-on: #58 Není tam nic sporného ani kritického[^1], takže rovnou mergeuji… [^1]: a máme docela málo kapacity na pročítání pull requestů.
This commit is contained in:
		
						commit
						99a1fd9a9f
					
				
					 178 changed files with 3 additions and 741 deletions
				
			
		|  | @ -1,16 +0,0 @@ | |||
| git hooks | ||||
| ========= | ||||
| 
 | ||||
| Kontrola stylu pythoních zdrojáků pomocí flake8. Kontrolujeme jen změny, | ||||
| abychom nenutili lidi dělat nesouvisející úpravy, které by rozbíjely historii | ||||
| (git blame). | ||||
| 
 | ||||
| pre-commit | ||||
| ---------- | ||||
| * kontrola změn před commitnutím | ||||
| * instalace: lokálně zkopírovat do .git/hooks (musí být spustitelný) | ||||
| 
 | ||||
| update | ||||
| ------ | ||||
| * kontrola změn přicházejících s pushem | ||||
| * instalace: na atreyi zkopírovat do /akce/MaM/MaMweb/mamweb.git/hooks | ||||
|  | @ -1,30 +0,0 @@ | |||
| #!/bin/sh | ||||
| # | ||||
| # Git hook script to verify what is about to be committed. | ||||
| # Checks that the changes don't introduce new flake8 errors. | ||||
| 
 | ||||
| TMPDIFF=`tempfile` | ||||
| FLAKE8="`git rev-parse --show-toplevel`/bin/flake8" | ||||
| 
 | ||||
| status=0 | ||||
| 
 | ||||
| # select only changed python files which are not migrations | ||||
| changed=`git diff --cached --name-only | grep 'py$' | grep -v 'migrations/[0-9]'` | ||||
| if [ -z $changed ] ; then | ||||
|     # Nothing to check. Note the exit is necessary -- we would not pass any | ||||
|     # paths to git diff below and it would output the diff unfiltered. | ||||
|     exit 0 | ||||
| fi | ||||
| 
 | ||||
| git diff --unified=1 --cached HEAD -- $changed > $TMPDIFF | ||||
| 
 | ||||
| # only do the check when there are some changes to be commited | ||||
| # otherwise flake8 would hang waiting for input | ||||
| if [ -s $TMPDIFF ] ; then | ||||
|     cat $TMPDIFF | $FLAKE8 --diff | ||||
|     status=$? | ||||
| fi | ||||
| 
 | ||||
| rm -f $TMPDIFF | ||||
| 
 | ||||
| exit $status | ||||
|  | @ -1,61 +0,0 @@ | |||
| #!/bin/sh | ||||
| 
 | ||||
| # git update hook to check that pushed changes don't introduce new flake8 | ||||
| # errors | ||||
| 
 | ||||
| # --- Command line | ||||
| refname="$1" | ||||
| oldrev="$2" | ||||
| newrev="$3" | ||||
| 
 | ||||
| # --- Safety check | ||||
| if [ -z "$GIT_DIR" ]; then | ||||
| 	echo "Don't run this script from the command line." >&2 | ||||
| 	echo " (if you want, you could supply GIT_DIR then run" >&2 | ||||
| 	echo "  $0 <ref> <oldrev> <newrev>)" >&2 | ||||
| 	exit 1 | ||||
| fi | ||||
| 
 | ||||
| if [ -z "$refname" -o -z "$oldrev" -o -z "$newrev" ]; then | ||||
| 	echo "usage: $0 <ref> <oldrev> <newrev>" >&2 | ||||
| 	exit 1 | ||||
| fi | ||||
| 
 | ||||
| 
 | ||||
| TMPDIR=`mktemp -d` | ||||
| TMPDIFF=`tempfile` | ||||
| 
 | ||||
| [ $refname != "refs/heads/master" -a $refname != "refs/heads/stable" ] && exit 0 | ||||
| 
 | ||||
| # select only changed python files which are not migrations | ||||
| changed=`git diff --name-only $oldrev $newrev | grep 'py$' | grep -v 'migrations/[0-9]'` | ||||
| if [ -z $changed ] ; then | ||||
|     # Nothing to check. Note the exit is necessary -- we would not pass any | ||||
|     # paths to git diff below and it would output the diff unfiltered. | ||||
|     exit 0 | ||||
| fi | ||||
| 
 | ||||
| git diff --unified=1 $oldrev $newrev -- $changed >${TMPDIFF} | ||||
| 
 | ||||
| # there is no working tree in bare git repository, so we recreate it for flake8 | ||||
| git archive $newrev | tar -x -C ${TMPDIR} | ||||
| 
 | ||||
| cd ${TMPDIR} | ||||
| # report only errors on lines in diff | ||||
| # (if threre was flake8 installed on atrey, we could just call flake8) | ||||
| /akce/MaM/WWW/mamweb-test/bin/flake8 --diff <${TMPDIFF} | ||||
| status=$? | ||||
| if [ $status != 0 ] ; then | ||||
|     echo | ||||
|     echo -n "Změny, které se snažíte pushnout, obsahují kód v pythonu " | ||||
|     echo -n "nevyhovující flake8 (viz výše). Opravte je a zkuste to znovu. " | ||||
|     echo -n "Nezapomeňte, že můžete editovat historii (git commit --amend, " | ||||
|     echo -n "git rebase -i). Pokud byste chybu příště raději odhalili už při " | ||||
|     echo "commitu, zkopírujte si pre-commit hook z _git_hooks do .git/hooks." | ||||
|     echo | ||||
| fi | ||||
| 
 | ||||
| rm -rf ${TMPDIR} | ||||
| rm -f ${TMPDIFF} | ||||
| 
 | ||||
| exit $status | ||||
|  | @ -1,6 +1,3 @@ | |||
| """ | ||||
| Soubor sloužící k pojmenování a jiným nastavením djangovské aplikace. | ||||
| """ | ||||
| from django.apps import AppConfig | ||||
| 
 | ||||
| class AesopConfig(AppConfig): | ||||
|  |  | |||
|  | @ -1,10 +1,3 @@ | |||
| """ | ||||
| Soubor sloužící jako „router“, tj. zde se definují url adresy a na co ukazují: | ||||
| 
 | ||||
| - ``aesop-export/mam-rocnik-<int:prvni_rok>.csv`` (seminar_export_rocnik) :class:`~aesop.views.ExportRocnikView` | ||||
| - ``aesop-export/mam-sous-<str:datum_zacatku>.csv`` (seminar_export_sous) :class:`~aesop.views.ExportSousView` | ||||
| - ``aesop-export/index.csv`` (seminar_export_index) :class:`~aesop.views.ExportIndexView` | ||||
| """ | ||||
| from django.urls import path | ||||
| from aesop import views | ||||
| 
 | ||||
|  |  | |||
|  | @ -1,8 +1,3 @@ | |||
| """ | ||||
| Soubor sloužící k deklaraci jednotlivých „views“ (nejčastěji funkce beroucí request | ||||
| a vracející :func:`django.shortcuts.render` respektive nějakou response, nebo | ||||
| třídy většinou rozšiřující nějakou třídu z :mod:`django.views.generic`) | ||||
| """ | ||||
| import django | ||||
| from django.shortcuts import get_object_or_404 | ||||
| from django.http import HttpResponse | ||||
|  |  | |||
|  | @ -1,6 +1,3 @@ | |||
| """ | ||||
| Soubor sloužící k pojmenování a jiným nastavením djangovské aplikace. | ||||
| """ | ||||
| from django.apps import AppConfig | ||||
| 
 | ||||
| 
 | ||||
|  |  | |||
							
								
								
									
										12
									
								
								api/urls.py
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								api/urls.py
									
									
									
									
									
								
							|  | @ -1,15 +1,3 @@ | |||
| """ | ||||
| Soubor sloužící jako „router“, tj. zde se definují url adresy a na co ukazují: | ||||
| 
 | ||||
| - ``api/expor/skoly/`` (export_skoly) :func:`~api.views.exports.exportSkolView` | ||||
| - ``api/autocomplete/skola/`` (autocomplete_skola) :class:`~api.views.autocomplete.SkolaAutocomplete` | ||||
| - ``api/autocomplete/resitel/`` (autocomplete_resitel) :class:`~api.views.autocomplete.ResitelAutocomplete` | ||||
| - ``api/autocomplete/problem/odevzdatelny`` (autocomplete_problem_odevzdatelny) :class:`~api.views.autocomplete.OdevzdatelnyProblemAutocomplete` | ||||
| 
 | ||||
| Na autocomplete v3 čeká: | ||||
| 
 | ||||
| - ``autocomplete/organizatori/`` (seminar_autocomplete_organizator) :class:`~api.views.autocomplete.OrganizatorAutocomplete` | ||||
| """ | ||||
| from django.urls import path | ||||
| from . import views | ||||
| from seminar.utils import org_required | ||||
|  |  | |||
|  | @ -1,7 +1,2 @@ | |||
| """ | ||||
| Soubory sloužící k deklaraci jednotlivých „views“ (nejčastěji funkce beroucí request | ||||
| a vracející :func:`django.shortcuts.render` respektive nějakou response, nebo | ||||
| třídy většinou rozšiřující nějakou třídu z :mod:`django.views.generic`) | ||||
| """ | ||||
| from .autocomplete import * | ||||
| from .exports import * | ||||
|  |  | |||
|  | @ -9,12 +9,6 @@ static | |||
| ------ | ||||
| Složka, kam django nakopíruje všechno ze složek static a pak na to z templatů / kódu jde ukazovat pomocí ``static``. | ||||
| 
 | ||||
| _git_hooks | ||||
| ---------- | ||||
| Hooky do gitu pro kontrolu Pythoního stylu. Především ``flake8``. | ||||
| 
 | ||||
| Zbylo tu z minulosti mamwebu. | ||||
| 
 | ||||
| data | ||||
| ---- | ||||
| Obsahuje data, která patří do databáze, ale jsou přímo součástí webu jako | ||||
|  |  | |||
|  | @ -1,3 +1,4 @@ | |||
| FIXME přepsat do rst, přidat i další věci a případně přesunout na wiki | ||||
| Přidání obrázků do odměn: | ||||
| admin -> flatpage odměn -> ikona přidat obrázek | ||||
| záložka odeslat, vybrat obrázek, odeslat | ||||
							
								
								
									
										25
									
								
								galerie/TODO
									
									
									
									
									
								
							
							
						
						
									
										25
									
								
								galerie/TODO
									
									
									
									
									
								
							|  | @ -1,25 +0,0 @@ | |||
| ======== | ||||
| | TODO | | ||||
| |======| | ||||
| 
 | ||||
| Aktualni | ||||
| * co s titulni fotkou | ||||
| * do CSS | ||||
|   * nahledy | ||||
|     * nastylovat tabulku s nahledy | ||||
|     * komentare uz na nahledy? | ||||
|   * detail | ||||
|     * nahledy pred a po | ||||
|     * opravit prechodove sipky | ||||
|     * vyrobit prechodove sipky ve M&M-stylu | ||||
| 
 | ||||
| Dlouhodobe | ||||
| * sipky na prechazeni mezi fotkami | ||||
| * hromadne PRIDANI fotek do jiz existujici galerie | ||||
| 
 | ||||
| Fylozoficke | ||||
| * zvolit velikosti velke a male fotky | ||||
| * je potreba i jine razeni nez automaticky podle casu nebo staci podgalerie? | ||||
|   * napr. dve hry na dvou ruznych mistech ve stejny cas | ||||
|   * fotky od ucastniku ze hry (skupinky se pohybuji ve stejny cas, ale maji sled fotek) -- nestaci to pripadne vrazit do podgalerii? | ||||
| 
 | ||||
|  | @ -1,5 +1,3 @@ | |||
| #coding: utf-8 | ||||
| 
 | ||||
| from galerie.models import Obrazek, Galerie | ||||
| from django.contrib import admin | ||||
| from django.http import HttpResponseRedirect | ||||
|  |  | |||
|  | @ -1,47 +0,0 @@ | |||
| # -*- coding: utf-8 -*- | ||||
| 
 | ||||
| from autocomplete_light import shortcuts as autocomplete_light | ||||
| 
 | ||||
| from .models import Obrazek, Galerie | ||||
| from .views import cesta_od_korene | ||||
| 
 | ||||
| 
 | ||||
| class ObrazekAutocomplete(autocomplete_light.AutocompleteModelBase): | ||||
| 
 | ||||
|     model = Obrazek | ||||
|     search_fields = ['nazev', 'popis'] | ||||
|     split_words = True | ||||
|     limit_choices = 15 | ||||
|     attrs = { | ||||
|         # This will set the input placeholder attribute: | ||||
|         'placeholder': u'Obrázek', | ||||
|         # This will set the yourlabs.Autocomplete.minimumCharacters | ||||
|         # options, the naming conversion is handled by jQuery | ||||
|         'data-autocomplete-minimum-characters': 1, | ||||
|     } | ||||
| 
 | ||||
|     choice_html_format = ''' | ||||
|         <span class="block" data-value="{}"> | ||||
|             <span class="block"> | ||||
|                 {} | ||||
|                 <span class="block">{}</span> | ||||
|             </span> | ||||
|         </span> | ||||
|     ''' | ||||
| 
 | ||||
|     def choice_label(self, obrazek): | ||||
|         cesta = "/".join(g.nazev for g in cesta_od_korene(obrazek.galerie)) | ||||
|         popis = "{}<br>".format(obrazek.popis) if obrazek.popis else "" | ||||
|         return '{}<br>{}{}'.format(obrazek.nazev, popis, cesta) | ||||
| 
 | ||||
|     def choice_html(self, obrazek): | ||||
|         """Vrátí kus html i s obrázkem, které se pak ukazuje v nabídce""" | ||||
|         return self.choice_html_format.format(self.choice_value(obrazek), | ||||
|             obrazek.obrazek_maly_tag(), self.choice_label(obrazek)) | ||||
| 
 | ||||
|     widget_attrs={ | ||||
|         'data-widget-maximum-values': 15, | ||||
|         'class': 'modern-style', | ||||
|     } | ||||
| 
 | ||||
| autocomplete_light.register(ObrazekAutocomplete) | ||||
|  | @ -1,5 +1,3 @@ | |||
| #coding: utf-8 | ||||
| 
 | ||||
| from django import forms | ||||
| from seminar.models import Soustredeni | ||||
| 
 | ||||
|  |  | |||
|  | @ -1,4 +1,3 @@ | |||
| # -*- coding: utf-8 -*- | ||||
| from __future__ import unicode_literals | ||||
| 
 | ||||
| from django.db import models, migrations | ||||
|  |  | |||
|  | @ -1,4 +1,3 @@ | |||
| # -*- coding: utf-8 -*- | ||||
| from __future__ import unicode_literals | ||||
| 
 | ||||
| from django.db import models, migrations | ||||
|  |  | |||
|  | @ -1,4 +1,3 @@ | |||
| # -*- coding: utf-8 -*- | ||||
| from __future__ import unicode_literals | ||||
| 
 | ||||
| from django.db import models, migrations | ||||
|  |  | |||
|  | @ -1,4 +1,3 @@ | |||
| # -*- coding: utf-8 -*- | ||||
| from __future__ import unicode_literals | ||||
| 
 | ||||
| from django.db import models, migrations | ||||
|  |  | |||
|  | @ -1,4 +1,3 @@ | |||
| # -*- coding: utf-8 -*- | ||||
| from __future__ import unicode_literals | ||||
| 
 | ||||
| from django.db import models, migrations | ||||
|  |  | |||
|  | @ -1,4 +1,3 @@ | |||
| # -*- coding: utf-8 -*- | ||||
| from __future__ import unicode_literals | ||||
| 
 | ||||
| from django.db import models, migrations | ||||
|  |  | |||
|  | @ -1,4 +1,3 @@ | |||
| # -*- coding: utf-8 -*- | ||||
| from __future__ import unicode_literals | ||||
| 
 | ||||
| from django.db import models, migrations | ||||
|  |  | |||
|  | @ -1,4 +1,3 @@ | |||
| # -*- coding: utf-8 -*- | ||||
| # Generated by Django 1.11.20 on 2019-04-30 21:40 | ||||
| from __future__ import unicode_literals | ||||
| 
 | ||||
|  |  | |||
|  | @ -1,4 +1,3 @@ | |||
| # -*- coding: utf-8 -*- | ||||
| # Generated by Django 1.11.21 on 2019-06-10 21:58 | ||||
| from __future__ import unicode_literals | ||||
| 
 | ||||
|  |  | |||
|  | @ -1,5 +1,3 @@ | |||
| # coding: utf-8 | ||||
| 
 | ||||
| from django.db import models | ||||
| #from django.db.models import Q | ||||
| from imagekit.models import ImageSpecField | ||||
|  |  | |||
|  | @ -1,12 +1,3 @@ | |||
| """ | ||||
| Soubor sloužící jako „router“, tj. zde se definují url adresy a na co ukazují: | ||||
| 
 | ||||
| - ``<int:pk>/`` :func:`~galerie.views.nahled` | ||||
| - ``<int:pk>/<int:fotka>/`` :func:`~galerie.views.detail` | ||||
| - ``<int:galerie>/new/`` :func:`~galerie.views.new_galerie` | ||||
| - ``<int:galerie>/plus/<int:subgalerie>/`` :func:`~galerie.views.plus_galerie` | ||||
| - ``<int:galerie>/minus/<int:subgalerie>/`` :func:`~galerie.views.minus_galerie` | ||||
| """ | ||||
| from django.urls import path | ||||
| from seminar.utils import org_required | ||||
| from . import views | ||||
|  |  | |||
|  | @ -1,5 +1,3 @@ | |||
| # coding: utf-8 | ||||
| 
 | ||||
| import random | ||||
| 
 | ||||
| from django.http import HttpResponse, Http404 | ||||
|  |  | |||
|  | @ -1,14 +1,3 @@ | |||
| """ | ||||
| Soubor sloužící k definici toho, co bude v adminu. Většinou pouhým zavoláním | ||||
| funkce :func:`django.contrib.admin.site.register`, v případě, že chceme něco | ||||
| upravit, tak jako třída rozšiřující :class:`django.contrib.admin.ModelAdmin` | ||||
| s dekorátorem :func:`django.contrib.admin.register`. | ||||
| 
 | ||||
| Zde se definuje admin pro: | ||||
| 
 | ||||
| - :class:`~header_fotky.models.FotkaHeader` | ||||
| - :class:`~header_fotky.models.FotkaUrlVazba` | ||||
| """ | ||||
| from django.contrib import admin | ||||
| from django.contrib.admin import ModelAdmin | ||||
| import header_fotky.models as m | ||||
|  |  | |||
|  | @ -1,6 +1,3 @@ | |||
| """ | ||||
| Soubor sloužící k pojmenování a jiným nastavením djangovské aplikace. | ||||
| """ | ||||
| from django.apps import AppConfig | ||||
| 
 | ||||
| 
 | ||||
|  |  | |||
|  | @ -1,17 +1,3 @@ | |||
| """ | ||||
| Tento soubor slouží k definici databázového modelu. | ||||
| 
 | ||||
| Třídy rozšiřují většinou :class:`django.db.models.Model` a jejich atributy jsou | ||||
| většinou sloupce v databázi (tj. nastaví se na hodnotu něčeho z :mod:`django.db.models`). | ||||
| Na výběr jsou: | ||||
| 
 | ||||
| 	- :class:`django.db.models.TextField` | ||||
| 	- :class:`django.db.models.ForeignKey` | ||||
| 	- :class:`django.db.models.DateField` | ||||
| 	- :class:`django.db.models.DateTimeField` | ||||
| 	- :class:`django.db.models.ImageField` | ||||
| 	- :class:`django.db.models.CharField` | ||||
| """ | ||||
| from django.core.exceptions import ValidationError | ||||
| from django.db import models | ||||
| from django.utils import timezone | ||||
|  |  | |||
|  | @ -1,11 +0,0 @@ | |||
| - korektura potrebuje reakci | ||||
| + komentáře fixně na username | ||||
|   - používat skutečné jméno? | ||||
| - vyžádat pozornost autora obsahu | ||||
| - zvednout upload limit na 5MB | ||||
| - sbalit a rozbalit korekturu | ||||
| - nahrávání jiných věcí než PDF - kontrolovat? | ||||
| - stylování | ||||
| - seznam PDF - co zobrazovat? | ||||
| 
 | ||||
| 
 | ||||
|  | @ -1,13 +1,3 @@ | |||
| """ | ||||
| Soubor sloužící k definici toho, co bude v adminu. Většinou pouhým zavoláním | ||||
| funkce :func:`django.contrib.admin.site.register`, v případě, že chceme něco | ||||
| upravit, tak jako třída rozšiřující :class:`django.contrib.admin.ModelAdmin` | ||||
| s dekorátorem :func:`django.contrib.admin.register`. | ||||
| 
 | ||||
| Zde se definuje admin pro: | ||||
| 
 | ||||
| - :class:`korektury.models.KorekturovanePDF` | ||||
| """ | ||||
| from django.contrib import admin | ||||
| from reversion.admin import VersionAdmin | ||||
| from korektury.models import KorekturovanePDF | ||||
|  | @ -15,7 +5,6 @@ from korektury.models import KorekturovanePDF | |||
| from django.core.mail import EmailMessage | ||||
| from django.urls import reverse | ||||
| 
 | ||||
| # Register your models here. | ||||
| class KorekturovanePDFAdmin(VersionAdmin): | ||||
| 	""" | ||||
| 	nastaví čas vložení (:attr:`~koretkury.models.KorekturovanePDF.cas`) a počet | ||||
|  |  | |||
|  | @ -1,13 +1,3 @@ | |||
| """ | ||||
| Formuláře (:class:`django.forms.Form`) umožňují jednoduchou tvorbu formulářů, | ||||
| které lze pak jednoduše dát do frontendu i zpracovat na backendu. | ||||
| 
 | ||||
| Pro přidání políčka do formuláře je potřeba | ||||
|  - mít v modelu tu položku, kterou chci upravovat | ||||
|  - přidat do views (prihlaskaView, resitelEditView) | ||||
|  - přidat do forms | ||||
|  - includovat do html | ||||
| """ | ||||
| from django import forms | ||||
| 
 | ||||
| class OpravaForm(forms.Form): | ||||
|  |  | |||
|  | @ -1,4 +1,3 @@ | |||
| # -*- coding: utf-8 -*- | ||||
| from __future__ import unicode_literals | ||||
| 
 | ||||
| from django.db import models, migrations | ||||
|  |  | |||
|  | @ -1,4 +1,3 @@ | |||
| # -*- coding: utf-8 -*- | ||||
| from __future__ import unicode_literals | ||||
| 
 | ||||
| from django.db import models, migrations | ||||
|  |  | |||
|  | @ -1,4 +1,3 @@ | |||
| # -*- coding: utf-8 -*- | ||||
| from __future__ import unicode_literals | ||||
| 
 | ||||
| from django.db import models, migrations | ||||
|  |  | |||
|  | @ -1,4 +1,3 @@ | |||
| # -*- coding: utf-8 -*- | ||||
| from __future__ import unicode_literals | ||||
| 
 | ||||
| from django.db import models, migrations | ||||
|  |  | |||
|  | @ -1,4 +1,3 @@ | |||
| # -*- coding: utf-8 -*- | ||||
| from __future__ import unicode_literals | ||||
| 
 | ||||
| from django.db import models, migrations | ||||
|  |  | |||
|  | @ -1,4 +1,3 @@ | |||
| # -*- coding: utf-8 -*- | ||||
| from __future__ import unicode_literals | ||||
| 
 | ||||
| from django.db import models, migrations | ||||
|  |  | |||
|  | @ -1,4 +1,3 @@ | |||
| # -*- coding: utf-8 -*- | ||||
| from __future__ import unicode_literals | ||||
| 
 | ||||
| from django.db import models, migrations | ||||
|  |  | |||
|  | @ -1,4 +1,3 @@ | |||
| # -*- coding: utf-8 -*- | ||||
| from __future__ import unicode_literals | ||||
| 
 | ||||
| from django.db import models, migrations | ||||
|  |  | |||
|  | @ -1,4 +1,3 @@ | |||
| # -*- coding: utf-8 -*- | ||||
| from __future__ import unicode_literals | ||||
| 
 | ||||
| from django.db import migrations, models | ||||
|  |  | |||
|  | @ -1,4 +1,3 @@ | |||
| # -*- coding: utf-8 -*- | ||||
| from __future__ import unicode_literals | ||||
| 
 | ||||
| from django.db import migrations, models | ||||
|  |  | |||
|  | @ -1,4 +1,3 @@ | |||
| # -*- coding: utf-8 -*- | ||||
| from __future__ import unicode_literals | ||||
| 
 | ||||
| from django.db import migrations, models | ||||
|  |  | |||
|  | @ -1,4 +1,3 @@ | |||
| # -*- coding: utf-8 -*- | ||||
| from __future__ import unicode_literals | ||||
| 
 | ||||
| from django.db import migrations, models | ||||
|  |  | |||
|  | @ -1,4 +1,3 @@ | |||
| # -*- coding: utf-8 -*- | ||||
| from __future__ import unicode_literals | ||||
| 
 | ||||
| from django.db import migrations, models | ||||
|  |  | |||
|  | @ -1,4 +1,3 @@ | |||
| # -*- coding: utf-8 -*- | ||||
| from __future__ import unicode_literals | ||||
| 
 | ||||
| from django.db import migrations, models | ||||
|  |  | |||
|  | @ -1,4 +1,3 @@ | |||
| # -*- coding: utf-8 -*- | ||||
| from __future__ import unicode_literals | ||||
| 
 | ||||
| from django.db import migrations, models | ||||
|  |  | |||
|  | @ -1,4 +1,3 @@ | |||
| # -*- coding: utf-8 -*- | ||||
| # Generated by Django 1.11.20 on 2019-04-30 21:40 | ||||
| from __future__ import unicode_literals | ||||
| 
 | ||||
|  |  | |||
|  | @ -1,4 +1,3 @@ | |||
| # -*- coding: utf-8 -*- | ||||
| # Generated by Django 1.11.21 on 2019-06-10 21:58 | ||||
| from __future__ import unicode_literals | ||||
| 
 | ||||
|  |  | |||
|  | @ -1,17 +1,3 @@ | |||
| """ | ||||
| Tento soubor slouží k definici databázového modelu. | ||||
| 
 | ||||
| Třídy rozšiřují většinou :class:`django.db.models.Model` a jejich atributy jsou | ||||
| většinou sloupce v databázi (tj. nastaví se na hodnotu něčeho z :mod:`django.db.models`). | ||||
| Na výběr jsou: | ||||
| 
 | ||||
| 	- :class:`django.db.models.TextField` | ||||
| 	- :class:`django.db.models.ForeignKey` | ||||
| 	- :class:`django.db.models.DateField` | ||||
| 	- :class:`django.db.models.DateTimeField` | ||||
| 	- :class:`django.db.models.ImageField` | ||||
| 	- :class:`django.db.models.CharField` | ||||
| """ | ||||
| import os | ||||
| from django.db import models | ||||
| from django.utils import timezone | ||||
|  |  | |||
|  | @ -1,3 +0,0 @@ | |||
| from django.test import TestCase | ||||
| 
 | ||||
| # Create your tests here. | ||||
|  | @ -1,11 +1,3 @@ | |||
| """ | ||||
| Soubor sloužící jako „router“, tj. zde se definují url adresy a na co ukazují: | ||||
| 
 | ||||
| - ``korektury/`` (korektury_list) :class:`~korektury.views.KorekturySeskupeneListView` | ||||
| - ``korektury/neseskupene/`` (korektury_neseskupene_list) :class:`~korektury.views.KorekturyAktualniListView` | ||||
| - ``korektury/zastarale/`` (korektury_stare_list) :class:`~korektury.views.KorekturyZastaraleListView` | ||||
| - ``korektury/<int:pdf>/`` (korektury) :class:`~korektury.views.KorekturyView` | ||||
| """ | ||||
| from django.urls import path | ||||
| from seminar.utils import org_required | ||||
| from . import views | ||||
|  |  | |||
|  | @ -1,8 +1,3 @@ | |||
| """ | ||||
| Soubor sloužící k deklaraci jednotlivých „views“ (nejčastěji funkce beroucí request | ||||
| a vracející :func:`django.shortcuts.render` respektive nějakou response, nebo | ||||
| třídy většinou rozšiřující nějakou třídu z :mod:`django.views.generic`) | ||||
| """ | ||||
| from django.shortcuts import get_object_or_404, render | ||||
| from django.views import generic | ||||
| from django.conf import settings | ||||
|  | @ -199,13 +194,6 @@ class KorekturyView(generic.TemplateView): | |||
| 		if email: | ||||
| 			emails.discard(email) | ||||
| 
 | ||||
| 		if not settings.POSLI_MAILOVOU_NOTIFIKACI: | ||||
| 			print("Poslal bych upozornění na tyto adresy: ", " ".join(emails)) | ||||
| 			print("---- Upozornění:") | ||||
| 			print(text) | ||||
| 			print("---- Konec upozornění") | ||||
| 			return | ||||
| 
 | ||||
| 		EmailMessage( | ||||
| 			subject=subject, | ||||
| 			body=text, | ||||
|  |  | |||
|  | @ -1,88 +0,0 @@ | |||
| from datetime import datetime, date | ||||
| 
 | ||||
| from django.conf import settings | ||||
| from django.http import HttpResponse, HttpResponseRedirect | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| class LoggedInHintCookieMiddleware(object): | ||||
| 	"""Middleware to securely help with 'logged-in' detection for dual HTTP/HTTPS sites. | ||||
| 	 | ||||
| 	On insecure requests: Checks for a (non-secure) cookie settings.LOGGED_IN_HINT_COOKIE_NAME | ||||
| 	and if present, redirects to HTTPS (same adress). | ||||
| 	Note this usually breaks non-GET (POST) requests. | ||||
| 
 | ||||
| 	On secure requests: Updates cookie settings.LOGGED_IN_HINT_COOKIE_NAME to reflect | ||||
| 	whether an user is logged in in the current session (cookie set to 'True' or cleared). | ||||
| 	The cookie is set to expire at the same time as the sessionid cookie. | ||||
| 
 | ||||
| 	By default, LOGGED_IN_HINT_COOKIE_NAME = 'logged_in_hint'. | ||||
| 	""" | ||||
| 
 | ||||
| 	def __init__(self): | ||||
| 		if hasattr(settings, 'LOGGED_IN_HINT_COOKIE_NAME'): | ||||
| 			self.cookie_name = settings.LOGGED_IN_HINT_COOKIE_NAME | ||||
| 		else: self.cookie_name = 'logged_in_hint' | ||||
| 		self.cookie_value = 'True' | ||||
| 
 | ||||
| 	def cookie_correct(self, request): | ||||
| 		return self.cookie_name in request.COOKIES and request.COOKIES[self.cookie_name] == self.cookie_value | ||||
| 
 | ||||
| 	def process_request(self, request): | ||||
| 		if not request.is_secure(): | ||||
| 			if self.cookie_correct(request): | ||||
| 				# redirect insecure (assuming http) requests with hint cookie to https | ||||
| 				url = request.build_absolute_uri() | ||||
| 				assert url[:5] == 'http:' | ||||
| 				return HttpResponseRedirect('https:' + url[5:]) | ||||
| 		return None | ||||
| 
 | ||||
| 	def process_response(self, request, response): | ||||
| 		if request.is_secure(): | ||||
| 			# assuming full session info (as the conn. is secure) | ||||
| 			try: | ||||
| 				user = request.user | ||||
| 			except AttributeError: # no user - ajax or other special request | ||||
| 				return response | ||||
| 			if user.is_authenticated(): | ||||
| 				if not self.cookie_correct(request): | ||||
| 					expiry = None if request.session.get_expire_at_browser_close() else request.session.get_expiry_date() | ||||
| 					response.set_cookie(self.cookie_name, value=self.cookie_value, expires=expiry, secure=False) | ||||
| 			else: | ||||
| 				if self.cookie_name in request.COOKIES: | ||||
| 					response.delete_cookie(self.cookie_name) | ||||
| 		return response | ||||
| 
 | ||||
| 
 | ||||
| class vzhled: | ||||
| 
 | ||||
| 	def process_request(self, request): | ||||
| 		return None | ||||
| 
 | ||||
| 	def process_view(self, request, view_func, view_args, view_kwargs): | ||||
| 		#print "====== process_request ======" | ||||
| 		#print view_func | ||||
| 		#print view_args | ||||
| 		#print view_kwargs | ||||
| 		#print "=============================" | ||||
| 		return None | ||||
| 
 | ||||
| 	def process_template_response(self, request, response): | ||||
| 		hodin = datetime.now().hour | ||||
| 		if (hodin <= 6) or (hodin >= 14): # TODO 20 | ||||
| 			response.context_data['noc'] = True | ||||
| 		else: | ||||
| 			response.context_data['noc'] = False | ||||
| 		return response | ||||
| 
 | ||||
| 	def process_response(self, request, response): | ||||
| 		#hodin = datetime.now().hour | ||||
| 		#if (hodin <= 6) or (hodin >= 14): # TODO 20 | ||||
| 			#response.context_data['noc'] = True | ||||
| 		#else: | ||||
| 			#response.context_data['noc'] = False | ||||
| 		return response | ||||
| 		 | ||||
| 
 | ||||
| 	##def process_exception(request, exception): | ||||
| 		#pass | ||||
|  | @ -68,9 +68,6 @@ MIDDLEWARE = ( | |||
| 	'django.contrib.sessions.middleware.SessionMiddleware', | ||||
| 	'django.middleware.common.CommonMiddleware', | ||||
| 	'django.middleware.csrf.CsrfViewMiddleware', | ||||
| #	FIXME: rozbilo se při přechodu na Django 2.0, nevím, jestli  | ||||
| #	se to dá zahodit bez náhrady | ||||
| #    'mamweb.middleware.LoggedInHintCookieMiddleware', | ||||
| 	'django.contrib.auth.middleware.AuthenticationMiddleware', | ||||
| 	'django.contrib.messages.middleware.MessageMiddleware', | ||||
| 	'django.middleware.clickjacking.XFrameOptionsMiddleware', | ||||
|  | @ -345,10 +342,6 @@ KOREKTURY_IMG_DIR = os.path.join('korektury', 'img') | |||
| CISLO_IMG_DIR = os.path.join('cislo', 'img') | ||||
| 
 | ||||
| 
 | ||||
| # E-MAIL NOTIFICATIONS | ||||
| POSLI_MAILOVOU_NOTIFIKACI = False | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| # Logování chyb | ||||
| class InvalidTemplateVariable(str): | ||||
|  |  | |||
|  | @ -1,5 +1,3 @@ | |||
| # -*- coding: utf-8 -*- | ||||
| 
 | ||||
| import os.path | ||||
| 
 | ||||
| # | ||||
|  | @ -70,5 +68,4 @@ LOGGING['handlers']['registration_error_log']['filename'] = '/home/mam-web/logs/ | |||
| 
 | ||||
| 
 | ||||
| # E-MAIL NOTIFICATIONS | ||||
| POSLI_MAILOVOU_NOTIFIKACI = True | ||||
| LOCAL_TEST_PROD = "prod" | ||||
|  |  | |||
|  | @ -1,5 +1,3 @@ | |||
| # -*- coding: utf-8 -*- | ||||
| 
 | ||||
| import os.path | ||||
| 
 | ||||
| # | ||||
|  | @ -74,7 +72,6 @@ LOGGING['handlers']['registration_error_log']['filename'] = '/home/mam-web/logs/ | |||
| FILE_UPLOAD_PERMISSIONS = 0o440 | ||||
| 
 | ||||
| # Testování e-mailů | ||||
| POSLI_MAILOVOU_NOTIFIKACI = True | ||||
| EMAIL_BACKEND = 'various.mail_prefixer.PrefixingMailBackend' | ||||
| # TODO Pouze na otestování testu… Zvolit konferu! | ||||
| # XXX: Je to pole, protože implementační detail backendu. | ||||
|  |  | |||
|  | @ -1,18 +1,5 @@ | |||
| """ | ||||
| Soubor sloužící jako základní „router“, tj. zde se includují veškeré ostatní urls: | ||||
| 
 | ||||
| - ``admin/`` :mod:`django.contrib.admin.site.urls` | ||||
| - ``ckeditor/`` :mod:`ckeditor_uploader.urls` | ||||
| - :mod:`seminar.urls` | ||||
| - :mod:`odevzdavatko.urls` | ||||
| - :mod:`korektury.urls` | ||||
| - :mod:`prednasky.urls` | ||||
| - :mod:`soustredeni.urls` | ||||
| - :mod:`personalni.urls` | ||||
| - :mod:`various.autentizace.urls` | ||||
| - :mod:`api.urls` | ||||
| - :mod:`treenode.urls` | ||||
| - :mod:`aesop.urls` | ||||
| Soubor sloužící jako základní „router“, tj. zde se includují veškeré ostatní urls. | ||||
| """ | ||||
| from django.urls import path, include | ||||
| from django.contrib.staticfiles.urls import staticfiles_urlpatterns | ||||
|  |  | |||
|  | @ -1,6 +1,5 @@ | |||
| from django.apps import AppConfig | ||||
| 
 | ||||
| class NovinkyConfig(AppConfig): | ||||
|     default_auto_field = 'django.db.models.BigAutoField' | ||||
|     name = 'novinky' | ||||
|     verbose_name = 'Novinky' | ||||
|  |  | |||
|  | @ -1,3 +0,0 @@ | |||
| from django.test import TestCase | ||||
| 
 | ||||
| # Create your tests here. | ||||
|  | @ -1,3 +0,0 @@ | |||
| from django.shortcuts import render | ||||
| 
 | ||||
| # Create your views here. | ||||
|  | @ -1,9 +1,3 @@ | |||
| """ | ||||
| Soubor sloužící k definici toho, co bude v adminu. Většinou pouhým zavoláním | ||||
| funkce :func:`django.contrib.admin.site.register`, v případě, že chceme něco | ||||
| upravit, tak jako třída rozšiřující :class:`django.contrib.admin.ModelAdmin` | ||||
| s dekorátorem :func:`django.contrib.admin.register`. | ||||
| """ | ||||
| from django.contrib import admin | ||||
| from django_reverse_admin import ReverseModelAdmin | ||||
| import seminar.models as m | ||||
|  |  | |||
|  | @ -1,6 +1,3 @@ | |||
| """ | ||||
| Soubor sloužící k pojmenování a jiným nastavením djangovské aplikace. | ||||
| """ | ||||
| from django.apps import AppConfig | ||||
| 
 | ||||
| 
 | ||||
|  |  | |||
|  | @ -1,17 +1,3 @@ | |||
| """ | ||||
| Soubor sloužící jako „router“, tj. zde se definují url adresy a na co ukazují: | ||||
| 
 | ||||
| - ``org/add_solution`` (seminar_vloz_reseni) :class:`~odevzdavatko.views.PosliReseniView` | ||||
| - ``resitel/nahraj_reseni`` (seminar_nahraj_reseni) :class:`~odevzdavatko.views.NahrajReseniView` | ||||
| - ``resitel/odevzdana_reseni/`` (seminar_resitel_odevzdana_reseni) :class:`~odevzdavatko.views.PrehledOdevzdanychReseni` | ||||
| - ``org/reseni/`` (odevzdavatko_tabulka) :class:`~odevzdavatko.views.TabulkaOdevzdanychReseniView` | ||||
| - ``org/reseni/rocnik/<int:rocnik>/`` (odevzdavatko_tabulka) :class:`~odevzdavatko.views.TabulkaOdevzdanychReseniView` | ||||
| - ``org/reseni/<int:problem>/<int:resitel>/`` (odevzdavatko_reseni_resitele_k_problemu) :class:`~odevzdavatko.views.ReseniProblemuView` | ||||
| - ``org/reseni/<int:pk>/`` (odevzdavatko_detail_reseni) :func:`~seminar.utils.viewMethodSwitch` + :class:`~odevzdavatko.views.DetailReseniView` + :func:`~odevzdavatko.views.hodnoceniReseniView` | ||||
| - ``org/reseni/all`` :class:`~odevzdavatko.views.SeznamReseniView` | ||||
| - ``org/reseni/akt`` :class:`~odevzdavatko.views.TabulkaOdevzdanychReseniView` | ||||
| - ``resitel/reseni/<int:pk>`` (odevzdavatko_resitel_reseni) :class:`~odevzdavatko.views.ResitelReseniView` | ||||
| """ | ||||
| from django.urls import path | ||||
| 
 | ||||
| from seminar.utils import org_required, resitel_required, viewMethodSwitch, \ | ||||
|  |  | |||
|  | @ -1,6 +1,3 @@ | |||
| """ | ||||
| Soubor sloužící k pojmenování a jiným nastavením djangovské aplikace. | ||||
| """ | ||||
| from django.apps import AppConfig | ||||
| 
 | ||||
| 
 | ||||
|  |  | |||
|  | @ -1,4 +1,3 @@ | |||
| # -*- coding: utf-8 -*- | ||||
| import logging | ||||
| 
 | ||||
| from django.db import models | ||||
|  |  | |||
|  | @ -1,17 +1,3 @@ | |||
| """ | ||||
| Soubor sloužící jako „router“, tj. zde se definují url adresy a na co ukazují: | ||||
| 
 | ||||
| - ``org/add_solution`` (seminar_vloz_reseni) :class:`~odevzdavatko.views.PosliReseniView` | ||||
| - ``resitel/nahraj_reseni`` (seminar_nahraj_reseni) :class:`~odevzdavatko.views.NahrajReseniView` | ||||
| - ``resitel/odevzdana_reseni/`` (seminar_resitel_odevzdana_reseni) :class:`~odevzdavatko.views.PrehledOdevzdanychReseni` | ||||
| - ``org/reseni/`` (odevzdavatko_tabulka) :class:`~odevzdavatko.views.TabulkaOdevzdanychReseniView` | ||||
| - ``org/reseni/rocnik/<int:rocnik>/`` (odevzdavatko_tabulka) :class:`~odevzdavatko.views.TabulkaOdevzdanychReseniView` | ||||
| - ``org/reseni/<int:problem>/<int:resitel>/`` (odevzdavatko_reseni_resitele_k_problemu) :class:`~odevzdavatko.views.ReseniProblemuView` | ||||
| - ``org/reseni/<int:pk>/`` (odevzdavatko_detail_reseni) :func:`~seminar.utils.viewMethodSwitch` + :class:`~odevzdavatko.views.DetailReseniView` + :func:`~odevzdavatko.views.hodnoceniReseniView` | ||||
| - ``org/reseni/all`` :class:`~odevzdavatko.views.SeznamReseniView` | ||||
| - ``org/reseni/akt`` :class:`~odevzdavatko.views.TabulkaOdevzdanychReseniView` | ||||
| - ``resitel/reseni/<int:pk>`` (odevzdavatko_resitel_reseni) :class:`~odevzdavatko.views.ResitelReseniView` | ||||
| """ | ||||
| from django.urls import path | ||||
| from django.contrib.auth.decorators import login_required | ||||
| from . import views | ||||
|  |  | |||
|  | @ -1,4 +1,3 @@ | |||
| # -*- coding: utf-8 -*- | ||||
| from django.contrib import admin | ||||
| from django.contrib import messages | ||||
| from reversion.admin import VersionAdmin | ||||
|  |  | |||
|  | @ -1,4 +1,3 @@ | |||
| # coding: utf-8 | ||||
| from django import forms | ||||
| 
 | ||||
| class NewPrednaskyForm(forms.Form): | ||||
|  |  | |||
|  | @ -1,4 +1,3 @@ | |||
| # -*- coding: utf-8 -*- | ||||
| from __future__ import unicode_literals | ||||
| 
 | ||||
| from django.db import migrations, models | ||||
|  |  | |||
|  | @ -1,4 +1,3 @@ | |||
| # -*- coding: utf-8 -*- | ||||
| from __future__ import unicode_literals | ||||
| 
 | ||||
| from django.db import migrations, models | ||||
|  |  | |||
|  | @ -1,4 +1,3 @@ | |||
| # -*- coding: utf-8 -*- | ||||
| from __future__ import unicode_literals | ||||
| 
 | ||||
| from django.db import migrations, models | ||||
|  |  | |||
|  | @ -1,4 +1,3 @@ | |||
| # -*- coding: utf-8 -*- | ||||
| from __future__ import unicode_literals | ||||
| 
 | ||||
| from django.db import migrations, models | ||||
|  |  | |||
|  | @ -1,4 +1,3 @@ | |||
| # -*- coding: utf-8 -*- | ||||
| from __future__ import unicode_literals | ||||
| 
 | ||||
| from django.db import migrations, models | ||||
|  |  | |||
|  | @ -1,4 +1,3 @@ | |||
| # -*- coding: utf-8 -*- | ||||
| from __future__ import unicode_literals | ||||
| 
 | ||||
| from django.db import migrations, models | ||||
|  |  | |||
|  | @ -1,4 +1,3 @@ | |||
| # -*- coding: utf-8 -*- | ||||
| from __future__ import unicode_literals | ||||
| 
 | ||||
| from django.db import migrations, models | ||||
|  |  | |||
|  | @ -1,4 +1,3 @@ | |||
| # -*- coding: utf-8 -*- | ||||
| from __future__ import unicode_literals | ||||
| 
 | ||||
| from django.db import migrations, models | ||||
|  |  | |||
|  | @ -1,4 +1,3 @@ | |||
| # -*- coding: utf-8 -*- | ||||
| from __future__ import unicode_literals | ||||
| 
 | ||||
| from django.db import migrations, models | ||||
|  |  | |||
|  | @ -1,4 +1,3 @@ | |||
| # -*- coding: utf-8 -*- | ||||
| from __future__ import unicode_literals | ||||
| 
 | ||||
| from django.db import migrations, models | ||||
|  |  | |||
|  | @ -1,4 +1,3 @@ | |||
| # -*- coding: utf-8 -*- | ||||
| # Generated by Django 1.11.20 on 2019-04-30 21:40 | ||||
| from __future__ import unicode_literals | ||||
| 
 | ||||
|  |  | |||
|  | @ -1,4 +1,3 @@ | |||
| # -*- coding: utf-8 -*- | ||||
| # Generated by Django 1.11.21 on 2019-06-10 21:58 | ||||
| from __future__ import unicode_literals | ||||
| 
 | ||||
|  |  | |||
|  | @ -1,5 +1,3 @@ | |||
| # -*- coding: utf-8 -*- | ||||
| 
 | ||||
| from django.db import models | ||||
| 
 | ||||
| from soustredeni.models import Soustredeni | ||||
|  |  | |||
|  | @ -1,3 +0,0 @@ | |||
| from django.test import TestCase | ||||
| 
 | ||||
| # Create your tests here. | ||||
|  | @ -1,12 +1,3 @@ | |||
| """ | ||||
| Soubor sloužící jako „router“, tj. zde se definují url adresy a na co ukazují: | ||||
| 
 | ||||
| - ``prednasky/`` :func:`~prednasky.views.newPrednaska` | ||||
| - ``prednasky/hotovo`` :func:`~prednasky.views.Prednaska_hotovo` | ||||
| - ``prednasky/metaseznam_prednasek`` (metaseznam-list) :class:`~prednasky.views.MetaSeznamListView` | ||||
| - ``prednasky/seznam_prednasek/<int:seznam>/export`` (seznam-export) :func:`~prednasky.views.SeznamExportView` | ||||
| - ``prednasky/seznam_prednasek/<int:seznam>/`` (seznam-list) :class:`~prednasky.views.SeznamListView` | ||||
| """ | ||||
| from django.urls import path | ||||
| from seminar.utils import org_required, resitel_or_org_required | ||||
| from . import views | ||||
|  |  | |||
|  | @ -1,4 +1,3 @@ | |||
| # -*- coding: utf-8 -*- | ||||
| from django.shortcuts import render, get_object_or_404 | ||||
| from django.views import generic | ||||
| from django.shortcuts import HttpResponseRedirect | ||||
|  |  | |||
|  | @ -1,4 +1,3 @@ | |||
| # -*- coding: utf-8 -*- | ||||
| -c constraints.txt | ||||
| # basic libs | ||||
| 
 | ||||
|  |  | |||
|  | @ -178,11 +178,6 @@ class TextAdminInline(admin.TabularInline): | |||
| 
 | ||||
| admin.site.register(m.Text) | ||||
| 
 | ||||
| class ResitelInline(admin.TabularInline): | ||||
| 	model = m.Resitel | ||||
| 	extra = 1 | ||||
| 
 | ||||
| 
 | ||||
| # admin.site.register(m.Pohadka) | ||||
| admin.site.register(m.Obrazek) | ||||
| admin.site.register(m.Nastaveni, SingletonModelAdmin) | ||||
|  |  | |||
|  | @ -1,7 +1,6 @@ | |||
| from django.apps import AppConfig | ||||
| 
 | ||||
| class SeminarConfig(AppConfig): | ||||
|     default_auto_field = 'django.db.models.BigAutoField' | ||||
|     name = 'seminar' | ||||
|     verbose_name = 'Seminář' | ||||
| 
 | ||||
|  |  | |||
|  | @ -1,5 +1,3 @@ | |||
| # -*- coding: utf-8 -*- | ||||
| 
 | ||||
| from django.core.management.base import BaseCommand | ||||
| from django.contrib.sessions.models import Session | ||||
| from django.contrib.auth.models import Group, Permission | ||||
|  |  | |||
|  | @ -1,5 +1,3 @@ | |||
| # -*- coding: utf-8 -*- | ||||
| 
 | ||||
| from django.core.management.base import BaseCommand | ||||
| from django.contrib.sessions.models import Session | ||||
| from django.contrib.auth.models import Group, Permission | ||||
|  |  | |||
|  | @ -1,5 +1,3 @@ | |||
| # -*- coding: utf-8 -*- | ||||
| 
 | ||||
| import datetime | ||||
| import os | ||||
| import random | ||||
|  |  | |||
|  | @ -1,4 +1,3 @@ | |||
| # -*- coding: utf-8 -*- | ||||
| from __future__ import unicode_literals | ||||
| 
 | ||||
| from django.db import models, migrations | ||||
|  |  | |||
|  | @ -1,4 +1,3 @@ | |||
| # -*- coding: utf-8 -*- | ||||
| from __future__ import unicode_literals | ||||
| 
 | ||||
| from django.db import models, migrations | ||||
|  |  | |||
|  | @ -1,4 +1,3 @@ | |||
| # -*- coding: utf-8 -*- | ||||
| from __future__ import unicode_literals | ||||
| 
 | ||||
| from django.db import models, migrations | ||||
|  |  | |||
|  | @ -1,4 +1,3 @@ | |||
| # -*- coding: utf-8 -*- | ||||
| from __future__ import unicode_literals | ||||
| 
 | ||||
| from django.db import models, migrations | ||||
|  |  | |||
|  | @ -1,4 +1,3 @@ | |||
| # -*- coding: utf-8 -*- | ||||
| from __future__ import unicode_literals | ||||
| 
 | ||||
| from django.db import models, migrations | ||||
|  |  | |||
|  | @ -1,4 +1,3 @@ | |||
| # -*- coding: utf-8 -*- | ||||
| from __future__ import unicode_literals | ||||
| 
 | ||||
| from django.db import models, migrations | ||||
|  |  | |||
|  | @ -1,4 +1,3 @@ | |||
| # -*- coding: utf-8 -*- | ||||
| from __future__ import unicode_literals | ||||
| 
 | ||||
| from django.db import models, migrations | ||||
|  |  | |||
|  | @ -1,4 +1,3 @@ | |||
| # -*- coding: utf-8 -*- | ||||
| from __future__ import unicode_literals | ||||
| 
 | ||||
| from django.db import models, migrations | ||||
|  |  | |||
Some files were not shown because too many files have changed in this diff Show more
		Loading…
	
		Reference in a new issue