Browse Source

Merge branch 'python3' of gimli.ms.mff.cuni.cz:/akce/mam/git/mamweb into python3

export_seznamu_prednasek
parent
commit
2c53ddcec8
  1. 17
      convert_spaces_to_tabs.sh
  2. 1
      galerie/models.py
  3. 1
      galerie/views.py
  4. 9
      seminar/management/commands/testdata.py
  5. 2
      seminar/migrations/0023_add_novinky.py
  6. 2
      seminar/migrations/0049_auto_20190430_2354.py
  7. 6
      seminar/models.py
  8. 159
      seminar/testutils.py

17
convert_spaces_to_tabs.sh

@ -0,0 +1,17 @@
#!/bin/sh
if test "$#" -lt 1
then
echo "Usage: $0 file ..."
exit 2
fi
for file in "$@"
do
# Do the sed magic: keep replacing 4 spaces at the begining of line
sed -i -re '
: loop
s/^( *) /\1 /
t loop
' "$file"
done

1
galerie/models.py

@ -81,7 +81,6 @@ class Obrazek(models.Model):
super(Obrazek, self).save(*args, **kwargs) super(Obrazek, self).save(*args, **kwargs)
class Galerie(models.Model): class Galerie(models.Model):
nazev = models.CharField('Název', max_length=100) nazev = models.CharField('Název', max_length=100)
datum_vytvoreni = models.DateTimeField('Datum vytvoření', auto_now_add = True) datum_vytvoreni = models.DateTimeField('Datum vytvoření', auto_now_add = True)

1
galerie/views.py

@ -102,7 +102,6 @@ def detail(request, pk, fotka, soustredeni):
# Obrazek neni v galerii/stitku. # Obrazek neni v galerii/stitku.
raise Http404 raise Http404
# Nacteni okolnich obrazku a galerii # Nacteni okolnich obrazku a galerii
# TODO vyjmout zjisteni predchozich a nasledujicich galerii # TODO vyjmout zjisteni predchozich a nasledujicich galerii
# a udelat z toho funkci, ktera se pouzije u nahledu # a udelat z toho funkci, ktera se pouzije u nahledu

9
seminar/management/commands/testdata.py

@ -17,7 +17,7 @@ User = django.contrib.auth.get_user_model()
class Command(BaseCommand): class Command(BaseCommand):
help = "Clear database and load testing data." help = "Clear database and load testing data."
def handle(self, **options): def handle(self, *args, **options):
assert settings.DEBUG == True assert settings.DEBUG == True
dbfile = settings.DATABASES['default']['NAME'] dbfile = settings.DATABASES['default']['NAME']
if os.path.exists(dbfile): if os.path.exists(dbfile):
@ -26,9 +26,10 @@ class Command(BaseCommand):
call_command('migrate', noinput=True) call_command('migrate', noinput=True)
self.stdout.write('Vytvarim uzivatele "admin" (heslo "admin") a pseudo-nahodna data ...') self.stdout.write('Vytvarim uzivatele "admin" (heslo "admin") a pseudo-nahodna data ...')
create_test_data(size=8) create_test_data(size=8)
self.stdout.write('Vytvoreno %d uzivatelu, %d skol, %d resitelu, %d rocniku, %d cisel, %d problemu, %d reseni.' % self.stdout.write('Vytvoreno %d uzivatelu, %d skol, %d resitelu, %d rocniku, %d cisel,'
(User.objects.count(), Skola.objects.count(), Resitel.objects.count(), Rocnik.objects.count(), ' %d problemu, %d reseni.'.format(User.objects.count(), Skola.objects.count(),
Cislo.objects.count(), Problem.objects.count(), Reseni.objects.count())) Resitel.objects.count(), Rocnik.objects.count(), Cislo.objects.count(),
Problem.objects.count(), Reseni.objects.count()))

2
seminar/migrations/0023_add_novinky.py

@ -20,7 +20,7 @@ class Migration(migrations.Migration):
('datum', models.DateField(auto_now_add=True)), ('datum', models.DateField(auto_now_add=True)),
('text', models.TextField(null=True, verbose_name=b'Text novinky', blank=True)), ('text', models.TextField(null=True, verbose_name=b'Text novinky', blank=True)),
('obrazek', models.ImageField(upload_to=b'image_novinky/%Y/%m/%d/', null=True, verbose_name=b'Obr\xc3\xa1zek', blank=True)), ('obrazek', models.ImageField(upload_to=b'image_novinky/%Y/%m/%d/', null=True, verbose_name=b'Obr\xc3\xa1zek', blank=True)),
('zverejneno', models.BooleanField(default=b'False', verbose_name=b'Zve\xc5\x99ejn\xc4\x9bno')), ('zverejneno', models.BooleanField(default=False, verbose_name=b'Zve\xc5\x99ejn\xc4\x9bno')),
('autor', models.ForeignKey(verbose_name=b'Autor novinky', to=settings.AUTH_USER_MODEL)), ('autor', models.ForeignKey(verbose_name=b'Autor novinky', to=settings.AUTH_USER_MODEL)),
], ],
options={ options={

2
seminar/migrations/0049_auto_20190430_2354.py

@ -289,7 +289,7 @@ class Migration(migrations.Migration):
migrations.AlterField( migrations.AlterField(
model_name='novinky', model_name='novinky',
name='zverejneno', name='zverejneno',
field=models.BooleanField(default='False', verbose_name='Zveřejněno'), field=models.BooleanField(default=False, verbose_name='Zveřejněno'),
), ),
migrations.AlterField( migrations.AlterField(
model_name='organizator', model_name='organizator',

6
seminar/models.py

@ -64,7 +64,8 @@ class Osoba(SeminarModelBase):
prezdivka = models.CharField('přezdívka', max_length=256) prezdivka = models.CharField('přezdívka', max_length=256)
# User, pokud má na webu účet # User, pokud má na webu účet
user = models.OneToOneField(settings.AUTH_USER_MODEL, blank=True, null=True, verbose_name='uživatel') user = models.OneToOneField(settings.AUTH_USER_MODEL, blank=True, null=True,
verbose_name='uživatel')
# Pohlaví. Že ho neznáme se snad nestane (a ušetří to práci při programování) # Pohlaví. Že ho neznáme se snad nestane (a ušetří to práci při programování)
pohlavi_muz = models.BooleanField('pohlaví (muž)', default=False) pohlavi_muz = models.BooleanField('pohlaví (muž)', default=False)
@ -119,7 +120,8 @@ class Osoba(SeminarModelBase):
return force_unicode('%s %s' % (self.jmeno, self.prijmeni)) return force_unicode('%s %s' % (self.jmeno, self.prijmeni))
def inicial_krestni(self): def inicial_krestni(self):
return force_unicode('%s.' % (self.jmeno[0])) jmena = self.jmeno.split()
return " ".join(['{}.'.format(jmeno[0]) for jmeno in jmena])
def __str__(self): def __str__(self):
return force_unicode("Osoba({})".format(self.plne_jmeno())) return force_unicode("Osoba({})".format(self.plne_jmeno()))

159
seminar/testutils.py

@ -4,6 +4,7 @@ import datetime
import random import random
import django.contrib.auth import django.contrib.auth
from django.db import transaction from django.db import transaction
import unidecode
from seminar.models import Skola, Resitel, Rocnik, Cislo, Problem, Reseni, PrilohaReseni, Nastaveni, Soustredeni, Soustredeni_Ucastnici from seminar.models import Skola, Resitel, Rocnik, Cislo, Problem, Reseni, PrilohaReseni, Nastaveni, Soustredeni, Soustredeni_Ucastnici
@ -19,6 +20,7 @@ def create_test_data(size = 6, rnd = None):
rnd = rnd or random.Random(x=42) rnd = rnd or random.Random(x=42)
# static URL stranky # static URL stranky
# FIXME: nakopirovat sem vsechny z produkcni databaze
s = Site.objects.filter(name="example.com") s = Site.objects.filter(name="example.com")
f = FlatPage.objects.create(url="/", title="Seminář M&M", content = "<p>V&iacute;tejte na str&aacute;nce semin&aacute;ře MaM!</p>") f = FlatPage.objects.create(url="/", title="Seminář M&M", content = "<p>V&iacute;tejte na str&aacute;nce semin&aacute;ře MaM!</p>")
f.sites.add(s[0]) f.sites.add(s[0])
@ -36,61 +38,134 @@ def create_test_data(size = 6, rnd = None):
orgs.append(o) orgs.append(o)
# skoly # skoly
Skola.objects.create(mesto = u'Praha', stat='CZ', psc='101 00', ulice=u'Krátká 5', nazev=u'První ZŠ', je_zs=True, je_ss=False) skoly = []
Skola.objects.create(mesto = u'Praha', stat='CZ', psc='101 00', ulice=u'Krátká 5', nazev=u'První SŠ', je_zs=False, je_ss=True) skoly.append(Skola.objects.create(mesto = 'Praha', stat='CZ', psc='101 00', ulice='Krátká 5',
Skola.objects.create(mesto = u'Praha', stat='CZ', psc='102 00', ulice=u'Dlouhá 5', nazev=u'Druhá SŠ', je_zs=False, je_ss=True) nazev='První ZŠ', je_zs=True, je_ss=False))
Skola.objects.create(mesto = u'Praha', stat='CZ', psc='103 00', ulice=u'Široká 3', nazev=u'Třetí SŠ a ZŠ', je_zs=True, je_ss=True) skoly.append(Skola.objects.create(mesto = 'Praha', stat='CZ', psc='101 00', ulice='Krátká 5',
Skola.objects.create(mesto = u'Ostrava', stat='CZ', psc='700 00', ulice=u'Hluboká 42', nazev=u'Hutní gympl', je_zs=False, je_ss=True) nazev='První SŠ', je_zs=False, je_ss=True))
Skola.objects.create(mesto = u'Humenné', stat='SK', psc='012 34', ulice=u'Pltká 1', nazev=u'Sredná škuola', je_zs=False, je_ss=True) skoly.append(Skola.objects.create(mesto = 'Praha', stat='CZ', psc='102 00', ulice='Dlouhá 5',
nazev='Druhá SŠ', je_zs=False, je_ss=True))
# resitele skoly.append(Skola.objects.create(mesto = 'Praha', stat='CZ', psc='103 00', ulice='Široká 3',
jmena_m = ['Aleš', 'Tomáš', 'Martin', 'Jakub', 'Petr', 'Lukáš', 'Cyril'] nazev='Třetí SŠ a ZŠ', je_zs=True, je_ss=True))
jmena_f = ['Eva', 'Karolína', 'Zuzana', 'Sylvie', 'Iva', 'Jana', 'Marie'] skoly.append(Skola.objects.create(mesto = 'Ostrava', stat='CZ', psc='700 00', ulic='Hluboká 42',
prijmeni_m = ['Novotný', 'Svoboda', 'Pecha', 'Kořen', 'Holan', 'Uhlíř', 'Chytráček', 'Pokora', 'Koch', 'Szegedy', 'Rudý'] nazev='Hutní gympl', je_zs=False, je_ss=True))
prijmeni_f = ['Novotná', 'Svobodová', 'Machová', 'Zelená', 'Yu-Xin', 'Mlsná', 'Dubná', 'Mrkvová', 'Suchá', 'Lovelace', 'Holcová'] skoly.append(Skola.objects.create(mesto = 'Humenné', stat='SK', psc='012 34', ulice='Pltká 1',
nazev='Sredná škuola', je_zs=False, je_ss=True))
#FIXME pridat kontaktni osobu alespon nekde
skoly.append(zlinska = Skola.objects.create(mesto = 'Zlín', stat='CZ', psc='76001',
ulice='náměstí T.G. Masaryka 2734-9', nazev='Gymnázium a Střední jazyková škola s právem SJZ',
kratky_nazev="GaSJŠspSJZ", je_zs=True, je_ss=True))
# osoby
jmena_m = ['Aleš', 'Tomáš', 'Martin', 'Jakub', 'Petr', 'Lukáš', 'Cyril', 'Pavel Karel']
jmena_f = ['Eva', 'Karolína', 'Zuzana', 'Sylvie', 'Iva', 'Jana', 'Marie', 'Marta Iva', 'Shu Shan']
prijmeni_m = ['Novotný', 'Svoboda', 'Pecha', 'Kořen', 'Holan', 'Uhlíř', 'Chytráček', 'Pokora',
'Koch', 'Szegedy', 'Rudý', "von Neumann", "d'Este"]
prijmeni_f = ['Novotná', 'Svobodová', 'Machová', 'Zelená', 'Yu-Xin', 'Mlsná', 'Dubná', 'Mrkvová',
'Suchá', 'Lovelace', 'Holcová', 'Rui']
prezdivka = ['Kaki', 'Hurdur', 'Maracuja', 'Bobbo', None, None, None, None, None, None, None,
'Riki', 'Sapa', None, '', '---', 'Koko']
domain = ['example.com', 'dolujeme.eu', 'mff.cuni.cz', 'strcprstskrzkrk.cz', 'british.co.uk',
'splachni.to', 'haha.org']
seznam_ulic = ['Krátká', 'Vlhká', 'Jungmanova', '17. listopadu', '4. října', 'Roztocká',
'Forstova', 'Generála Františka Janouška', 'Náměstí Války', 'Svratecké náměstí',
'Zelená lhota', 'Z Plynu', 'K Jezeru', 'U Kocourkova', 'Uštěpačná', 'Ostrorepská',
'Zubří']
seznam_mest = ['Praha', 'Brno', 'Ostrava', 'Horní Jelení', 'Dolní Zábrdovice', 'Prdelkov',
'Stará myslivna', 'Kocourkov', 'Šalingrad', 'Medvědí hora', 'Basilej',
'Unterschiedlich', 'Old York', 'Lancastershire', 'Vóloďháza']
osoby = []
for i in range(3 * size): for i in range(3 * size):
skola = rnd.choice(Skola.objects.all())
pohlavi = rnd.randint(0,1) pohlavi = rnd.randint(0,1)
jmeno = rnd.choice([jmena_m, jmena_f][pohlavi]) jmeno = rnd.choice([jmena_m, jmena_f][pohlavi])
prijmeni = rnd.choice([prijmeni_m, prijmeni_f][pohlavi]) prijmeni = rnd.choice([prijmeni_m, prijmeni_f][pohlavi])
Resitel.objects.create(skola = skola, datum_prihlaseni = datetime.date(rnd.randint(2002, 2014), rnd.randint(1,12), 1), prezdivka = rnd.choice(prezdivka)
jmeno =jmeno, prijmeni = prijmeni, rok_maturity = rnd.randint(2015, 2019), email = "@".join([unidecode.unidecode(jmeno), rnd.choice(domain)])
stat = skola.stat, zasilat = Resitel.ZASILAT_NIKAM, pohlavi_muz = pohlavi) telefon = [rnd.choice([k for k in range(10)]) for i in range(10)]
resitele = list(Resitel.objects.all()) narozeni = datetime.date(rnd.randint(1980, 2020), rnd.randint(1, 12), rnd.randint(1, 28))
ulic = rnd.choice([seznam_ulic])
cp = rnd.int(1, 99)
ulice = " ".join(ulic, cp)
mesto = rnd.choice([seznam_mest])
psc = [rnd.choice([k for k in range(10)]) for i in range(6)]
osoby.append(Osoba.objects.create(jmeno = jmeno, prijmeni = prijmeni, prezdivka = prezdivka,
pohlavi_muz = pohlavi, email = email, telefon = telefon, datum_narozeni = narozeni,
ulice = ulice, mesto = mesto, psc = psc,
datum_registrace = datetime.date(rnd.randint(2019, 2029), rnd.randint(1, 12),
rnd.randint(1, 28))))
#TODO pridat foto male a velke. Jak?
# resitele a organizatori
last_rocnik = 25
resitele = []
organizatori = []
for os in osoby:
rand = rnd.randint(0, 8)
if not (rand % 8 == 0):
resitele.append(Resitel.objects.create(osoba = os, skola = rnd.choice([skoly]),
rok_maturity = rnd.randint(2019, 2029),
zasilat = rnd.choice(Resitel.ZASILAT_CHOICES)))
else:
pusobnost = rnd.randint(1, last_rocnik)
od = 1993 + last_rocnik - pusobnost
do = od + rnd.randint(1, 8)
# aktualni organizatori jeste nemaji vyplnene organizuje_do
if do > datetime.now().year:
do = None
organizatori.append(Organizator.objects.create(osoba = os, organizuje_od = od,
organizuje_do = do))
# rocniky # rocniky
last_rocnik = 21 for ri in range(min(last_rocnik - size, 1), last_rocnik + 1):
for ri in range(last_rocnik - size, last_rocnik + 1):
r = Rocnik.objects.create(prvni_rok = 1993 + ri, rocnik = ri) r = Rocnik.objects.create(prvni_rok = 1993 + ri, rocnik = ri)
# cisla # cisla
cisel = rnd.randint(4, 6) cisel = rnd.randint(4, 8)
cs = {} slovnik_cisel = {}
for ci in range(1, cisel + 1): for ci in range(1, cisel + 1):
vydano = datetime.date(r.prvni_rok, ci + 6, 1)
deadline = datetime.date(r.prvni_rok, ci + 8, 1) if ci + 2 < cisel else None
c = Cislo.objects.create(rocnik = r, cislo = str(ci), datum_vydani=vydano, datum_deadline=deadline, verejne_db=True)
cs[ci] = c
# problemy resene v ci
seq='#ABCDEFGHIJKLMNOPQRSTUVWXYZ'
if ci >= 3: if ci >= 3:
for pi in range(1, ((size + 1) // 2) + 1): vydano = datetime.date(r.prvni_rok, ci + 6, rnd.randint(1, 28))
p = Problem.objects.create(autor = rnd.choice(orgs), cislo_zadani=cs[ci-2], cislo_reseni=cs[ci], deadline = datetime.date(r.prvni_rok, ci + 8, rnd.randint(1, 28))
opravovatel = rnd.choice(orgs), kod = str(pi), nazev = u'Dummy úloha %s-%s' % (seq[ci], seq[pi]), else:
stav = Problem.STAV_ZADANY, typ = Problem.TYP_ULOHA, body = rnd.randint(1, 5)) vydano = datetime.date(r.druhy_rok, ci - 3, rnd.randint(1, 28))
p.text_problemu = (u"<p>Text problému <strong>%s.%s %s</strong><em> [id %d]</em> za %d body.</p>" % # posledni 2 cisla v rocniku nemaji deadline
(p.cislo_zadani.kod(), p.kod, p.nazev, p.id, p.body)) if (ci + 2 > cisel):
p.text_problemu_org = u"<p><strong>Neveřejný</strong> text problému.</p>" deadline = datetime.date(r.druhy_rok, ci - 1, rnd.randint(1, 28))
p.save() else:
deadline = None
poc_reseni = rnd.randint(size // 2, size * 2) cislo = Cislo.objects.create(rocnik = r, cislo = str(ci), datum_vydani=vydano,
res_sel = rnd.sample(resitele, min(poc_reseni, len(resitele) - 2)) datum_deadline=deadline, verejne_db=True)
for resitel in res_sel: slovnik_cisel[ci] = cislo
res = Reseni.objects.create(problem = p, resitel = resitel,
body = rnd.randint(0, p.body), cislo_body = cs[ci]) # FIXME: misto typu ruzne typy objektu a vnoreni do sebe
# TODO: vytvorit temata s ruznymi vlakny
# TODO: nagenerovat starsim rocnikum pohadku
# problemy resene v ci
# seq='#ABCDEFGHIJKLMNOPQRSTUVWXYZ'
# if ci >= 3:
# for pi in range(1, ((size + 1) // 2) + 1):
# p = Problem.objects.create(autor = rnd.choice(orgs), cislo_zadani=cs[ci-2],
# cislo_reseni=cs[ci], opravovatel = rnd.choice(orgs), kod = str(pi),
# nazev = u'Dummy úloha %s-%s' % (seq[ci], seq[pi]),
# stav = Problem.STAV_ZADANY, typ = Problem.TYP_ULOHA, body = rnd.randint(1, 5))
# p.text_problemu = (u"<p>Text problému <strong>%s.%s %s</strong><em> [id %d]</em> za %d body.</p>" %
# (p.cislo_zadani.kod(), p.kod, p.nazev, p.id, p.body))
# p.text_problemu_org = u"<p><strong>Neveřejný</strong> text problému.</p>"
# p.save()
#
# poc_reseni = rnd.randint(size // 2, size * 2)
# res_sel = rnd.sample(resitele, min(poc_reseni, len(resitele) - 2))
# for resitel in res_sel:
# res = Reseni.objects.create(problem = p, resitel = resitel,
# body = rnd.randint(0, p.body), cislo_body = cs[ci])
#
# TODO: nahodne nagenerovat problemum reseni a prilohy reseni, hodnoceni
# TODO: vice soustredeni a k nim nahodne podmnoziny organizatoru a ucastniku
sous = Soustredeni.objects.create(rocnik=Rocnik.objects.first(), verejne_db=True, misto=u'Někde', sous = Soustredeni.objects.create(rocnik=Rocnik.objects.first(), verejne_db=True, misto=u'Někde',
datum_zacatku=datetime.date(2000, 11, 23), datum_konce=datetime.date(2000, 11, 27)) datum_zacatku=datetime.date(2000, 11, 23), datum_konce=datetime.date(2000, 11, 27))
for res in rnd.sample(resitele, 6): for res in rnd.sample(resitele, 6):

Loading…
Cancel
Save