seminar

Zde bývalo vše. Teď tu zbývají všechny modely a části webu jako archiv, přehled orgů, aktuální (k aktuálnímu číslu) věci, titulka a jak řešit.

Také je tu generování testovacích (lokálních) dat.

seminar.admin

class seminar.admin.DeadlineAdminInline(parent_model, admin_site)[zdroj]

Bases: TabularInline

model

alias of Deadline

extra = 0
property media
class seminar.admin.CisloForm(data=None, files=None, auto_id='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, renderer=None)[zdroj]

Bases: ModelForm

class Meta[zdroj]

Bases: object

model

alias of Cislo

fields = '__all__'
clean()[zdroj]
base_fields = {'datum_vydani': <django.forms.fields.DateField object>, 'pdf': <django.forms.fields.FileField object>, 'poradi': <django.forms.fields.CharField object>, 'poznamka': <django.forms.fields.CharField object>, 'rocnik': <django.forms.models.ModelChoiceField object>, 'titulka_nahled': <django.forms.fields.ImageField object>, 'verejne_db': <django.forms.fields.BooleanField object>}
declared_fields = {}
property media
class seminar.admin.CisloAdmin(model, admin_site)[zdroj]

Bases: ModelAdmin

form

alias of CisloForm

actions = ['force_publish']
inlines = (<class 'seminar.admin.DeadlineAdminInline'>,)
force_publish(request, queryset)[zdroj]
property media
class seminar.admin.ProblemAdmin(model, admin_site, *args, **kwargs)[zdroj]

Bases: PolymorphicParentModelAdmin

base_model

alias of Problem

child_models = [<class 'seminar.models.tvorba.Tema'>, <class 'seminar.models.tvorba.Clanek'>, <class 'seminar.models.tvorba.Uloha'>, <class 'seminar.models.soustredeni.Konfera'>]

The child models that should be displayed

search_fields = ['nazev']
property media
class seminar.admin.ProblemAdminMixin[zdroj]

Bases: object

show_in_index = True
autocomplete_fields = ['nadproblem', 'autor', 'garant']
filter_horizontal = ['opravovatele']
class seminar.admin.TemaAdmin(model, admin_site, *args, **kwargs)[zdroj]

Bases: ProblemAdminMixin, PolymorphicChildModelAdmin

base_model

alias of Tema

property media
class seminar.admin.ClanekAdmin(model, admin_site, *args, **kwargs)[zdroj]

Bases: ProblemAdminMixin, PolymorphicChildModelAdmin

base_model

alias of Clanek

property media
class seminar.admin.UlohaAdmin(model, admin_site, *args, **kwargs)[zdroj]

Bases: ProblemAdminMixin, PolymorphicChildModelAdmin

base_model

alias of Uloha

property media
class seminar.admin.KonferaAdmin(model, admin_site, *args, **kwargs)[zdroj]

Bases: ProblemAdminMixin, PolymorphicChildModelAdmin

base_model

alias of Konfera

property media
class seminar.admin.TextAdminInline(parent_model, admin_site)[zdroj]

Bases: TabularInline

model

alias of Text

formfield_overrides = {<class 'django.db.models.fields.TextField'>: {'widget': <class 'django.forms.widgets.TextInput'>}}
exclude = ['text_zkraceny_set', 'text_zkraceny']
property media
class seminar.admin.ResitelInline(parent_model, admin_site)[zdroj]

Bases: TabularInline

model

alias of Resitel

extra = 1
property media

seminar.testutils

seminar.testutils.gen_osoby(rnd, size)[zdroj]
seminar.testutils.gen_skoly()[zdroj]
seminar.testutils.gen_resitele(rnd, osoby, skoly)[zdroj]
seminar.testutils.gen_prijemci(rnd, osoby, kolik=10)[zdroj]
seminar.testutils.gen_organizatori(rnd, osoby, last_rocnik)[zdroj]
seminar.testutils.gen_zadani_ulohy(rnd, cisla, organizatori, pocet_oboru, poradi_cisla, poradi_problemu)[zdroj]
seminar.testutils.gen_vzoroveho_reseni_ulohy(rnd, organizatori, uloha, pocet_opravovatelu)[zdroj]
seminar.testutils.gen_reseni_ulohy(rnd, cisla, uloha, pocet_resitelu, poradi_cisla, resitele_cisla, resitele)[zdroj]
seminar.testutils.gen_ulohy_do_cisla(rnd, organizatori, resitele, rocnik_cisla, rocniky, size)[zdroj]
seminar.testutils.gen_soustredeni(rnd, resitele, organizatori)[zdroj]
seminar.testutils.gen_rocniky(last_rocnik, size)[zdroj]
seminar.testutils.gen_konfery(size, rnd, organizatori, resitele, soustredeni)[zdroj]
seminar.testutils.gen_cisla(rnd, rocniky)[zdroj]
seminar.testutils.add_first_child(node, child)[zdroj]
seminar.testutils.get_text()[zdroj]
seminar.testutils.gen_dlouhe_tema(rnd, organizatori, rocnik, nazev, obor, kod)[zdroj]
seminar.testutils.gen_temata(rnd, rocniky, rocnik_cisla, organizatori)[zdroj]
seminar.testutils.gen_ulohy_tematu(rnd, organizatori, resitele, tema, kod, cislo, cislo_se_vzorakem)[zdroj]

Generování úlohy k danému tématu.

seminar.testutils.gen_ulohy_k_tematum(rnd, rocniky, rocnik_cisla, rocnik_temata, organizatori, resitele)[zdroj]
seminar.testutils.gen_novinky(rnd, organizatori)[zdroj]
seminar.testutils.otec_syn(otec, syn)[zdroj]
seminar.testutils.gen_clanek(rnd, organizatori, resitele)[zdroj]
seminar.testutils.create_test_data(size=6, rnd=None)[zdroj]

seminar.urls

Soubor sloužící jako „router“, tj. zde se definují url adresy a na co ukazují:

seminar.utils

seminar.utils.check_perms(user)[zdroj]
class seminar.utils.FirstTagParser(*args, **kwargs)[zdroj]

Bases: HTMLParser

handle_data(data)[zdroj]
seminar.utils.histogram(seznam)[zdroj]
seminar.utils.roman(num)[zdroj]
seminar.utils.from_roman(rom)[zdroj]
seminar.utils.seznam_problemu()[zdroj]

Funkce pro hledání nekonzistencí v databázi a dalších nežádoucích stavů webu/databáze.

Nijak nesouvisí s Problémy zadanými řešitelům.

seminar.utils.resi_v_rocniku(rocnik, cislo=None)[zdroj]

Vrátí seznam řešitelů, co vyřešili nějaký problém v daném ročníku, do daného čísla. Parametry:

rocnik (typu Rocnik) ročník, ze kterého chci řešitele, co něco odevzdali cislo (typu Cislo) číslo, do kterého včetně se počítá, že v daném

ročníku řešitel něco poslal. Pokud není zadané, počítají se všechna řešení z daného ročníku.

Výstup:

QuerySet objektů typu Resitel

seminar.utils.aktivniResitele(cislo, pouze_letosni=False)[zdroj]

Vrací QuerySet aktivních řešitelů, což jsou ti, co ještě neodmaturovali a letos něco poslali (anebo loni něco poslali, pokud jde o první tři čísla). Parametry:

cislo (typu Cislo) číslo, o které se jedná pouze_letosni jen řešitelé, kteří tento rok něco poslali

seminar.utils.viewMethodSwitch(get, post)[zdroj]

Vrátí view, který zavolá různé jiné views podle toho, kterou metodou je zavolán.

Inspirováno https://docs.djangoproject.com/en/3.1/topics/class-based-views/mixins/#an-alternative-better-solution, jen jsem to udělal genericky.

Parametry:

post view pro metodu POST get view pro metodu GET

V obou případech se míní už view jakožto funkce, takže u class-based views se už má použít .as_view()

TODO: Podpora i pro metodu HEAD? A možná i pro FILES?

seminar.utils.sync_skoly(base_url)[zdroj]

Stáhne všechny školy z mamwebu na adrese <base_url> a uloží je do databáze

seminar.utils.merge_resitele(cilovy, zdrojovy)[zdroj]

Spojí dva řešitelské objekty do cílového.

Pojmenování „zdrojový“ je silně nepřiléhající, ale co už…

seminar.utils.merge_osoby(cilova, zdrojova)[zdroj]

Spojí dvě osoby do cílové

Nehlídá omezení typu „max 1 řešitel na osobu“, to by měla hlídat databáze (OneToOneField).