diff --git a/seminar/testutils.py b/seminar/testutils.py index b81d09f8..82ec58fe 100644 --- a/seminar/testutils.py +++ b/seminar/testutils.py @@ -19,6 +19,13 @@ zlinska = None # tohle bude speciální škola, které později dodáme kontaktn logger = logging.getLogger(__name__) +# testuje unikátnost vygenerovaného jména +def __unikatni_jmeno(osoby, jmeno, prijmeni): + for os in osoby: + if os.jmeno == jmeno and os.prijmeni == prijmeni: + return 0 + else: return 1 + def gen_osoby(rnd, size): logger.info('Generuji osoby (size={})...'.format(size)) @@ -48,6 +55,19 @@ def gen_osoby(rnd, size): pohlavi = rnd.randint(0,1) jmeno = rnd.choice([jmena_m, jmena_f][pohlavi]) prijmeni = rnd.choice([prijmeni_m, prijmeni_f][pohlavi]) + pokusy = 0 + max_pokusy = 120*size + while (not __unikatni_jmeno and pokusy < max_pokusy): + # pokud jméno a příjmení není unikátní, zkoušíme generovat nová + # do daného limitu (abychom se nezacyklili do nekonečna při málo jménech a příjmeních + # ze kterých se generuje) + jmeno = rnd.choice([jmena_m, jmena_f][pohlavi]) + prijmeni = rnd.choice([prijmeni_m, prijmeni_f][pohlavi]) + pokusy = pokusy + 1 + if pokusy >= max_pokusy: + print("Chyba, na danou velikost testovacích dat příliš málo možných" + " jmen a příjmení") + exit prezdivka = rnd.choice(prezdivky) email = "@".join([unidecode.unidecode(jmeno), rnd.choice(domain)]) telefon = "".join([str(rnd.choice([k for k in range(10)])) for i in range(9)]) @@ -165,11 +185,12 @@ def gen_ulohy_do_cisla(rnd, organizatori, resitele, rocnik_cisla, rocniky, size) k = 0 for rocnik in rocniky: k+=1 + print("Generuji {}. číslo.".format(k)) cisla = rocnik_cisla[k-1] for ci in range(3, len(cisla)+1): # pro všechna čísla resitele_size = round(7/8 * 30 * size) # očekáváný celkový počet řešitelů - poc_res = rnd.randint(round(resitele_size/8), round(3*resitele_size/4)) - # dané číslo řeší něco mezi osminou a tříčtvrtinou všech řešitelů + poc_res = rnd.randint(round(resitele_size/8), round(resitele_size/4)) + # dané číslo řeší něco mezi osminou a čtvrtinou všech řešitelů # (náhodná hausnumera, možno změnit) # účelem je, aby se řešení generovala z menší množiny řešitelů a tedy # bylo více řešení od jednoho řešitele daného čísla @@ -228,9 +249,10 @@ def gen_ulohy_do_cisla(rnd, organizatori, resitele, rocnik_cisla, rocniky, size) p.save() # generování řešení - poc_reseni = rnd.randint(size // 2, size * 2) - # generujeme náhodný počet řešení + poc_reseni = rnd.randint(poc_res, poc_res * 4) + # generujeme náhodný počet řešení vzhledem k počtu řešitelů čísla for ri in range(poc_reseni): + #print("Generuji {}-té řešení".format(ri)) if rnd.randint(1, 10) == 6: # cca desetina řešení od více řešitelů res_vyber = rnd.sample(resitele_cisla, rnd.randint(2, 5)) @@ -432,8 +454,10 @@ def gen_ulohy_k_tematum(rnd, rocniky, rocnik_cisla, rocnik_temata, organizatori) cisla = rocnik_cisla[k-1] temata = rocnik_temata[k-1] for ci in range(len(cisla)): + print("Generuji {}-té číslo".format(ci)) cislo = cisla[ci-1] mozna_tema_vcn = cislo.cislonode.first_child + # kdybyste nad tím někdo taky přemýšleli, tak vcn == VCisleNode :) while mozna_tema_vcn != None: if type(mozna_tema_vcn) != TemaVCisleNode: mozna_tema_vcn = mozna_tema_vcn.succ @@ -521,7 +545,7 @@ def gen_novinky(rnd, organizatori): def otec_syn(otec, syn): bratr = otec.first_child - syn.succ = bratr + syn.ucc = bratr otec.first_child = syn syn.save() otec.save()