izpitni_roki

V tem (komajda) modulu so v nekaj datotekah shranjene pomožne in glavne funkcije, s katerimi naredimo html stran.

izpitni_roki.osnovno

V tej datoteki so definirani razni razredi in funkcije, ki jih potrebujemo za lažje generiranje končne html strani.

class izpitni_roki.osnovno.HtmlPredloga(ime_predloge, **kwargs)

Bases: object

Predloga za html kodo, ki ji podamo parametre in jo lahko lepo oblikujemo. Pripadajoča html datoteka predloge/odstavek.html je npr.

<div class="{{razred}}"> <p>{{besedilo}}</p> </div>

Ključne besede (obdane z dvojnimi zavitimi oklepaji) kasneje nadomestimo z dejansko vsebino, npr.

>>> str(HtmlPredloga("odstavek", razred="raz", besedilo="Hojla, bralec!"))
<div class="raz"> <p>Hojla, bralec!</p> </div>
nastavi_parametre(**kwargs)

Prepiše trenutne vrednosti, ki pripadajo ključnim besedam, s podanimi. Pri nastavljanju parametrov poskrbimo, da se zamiki vrstic ohranjajo, tj.

zamik vstavljene vrtice = zamik ključa + prejšnji zamik vstavljene vrstice

Parameters:

kwargs – (nekateri ali pa vsi) ključi, ki se pojavijo v predlogi

Returns:

Raises:

ValueError, če katerih od podanih kwargov ni med ključi v predlogi.

class izpitni_roki.osnovno.IDGenerator

Bases: object

Razred, s katerim polepšamo kodo in se izognemo dolgim guidom.

NASLEDNJI_ID = 1
static generiraj_id() int

Zgenerira naslednji id. Zaporedni klici vrnejo id-je 1, 2, 3 …

Returns:

naslednji id

class izpitni_roki.osnovno.IDTerIme(ime: str)

Bases: object

Nadrazred za razna polja v razredu izpitni_roki.osnovno.IzpitniRok(), ki poleg dejanske vrednosti (ime) potrbujejo še id.

Implementira tudi leksikografsko urejenost nizov, ki upošteva slovensko abecedo, razširjeno s črkama ć in đ (a b c č ć d đ e f …).

PRIPADNIKI = {}
static naredi_objekt(podrazred: Type[Predmet | Program | Letnik | Rok | Izvajalec | Obdobje], ime: str, *args)

Naredi objekt danega podrazreda razreda IDTerIme

Parameters:
Returns:

objekt danega podrazreda s podanim imenom

static vse_vsa() str

Oblika besede “vse” glede na spol.

Returns:

"vse"

class izpitni_roki.osnovno.IzpitniRok(datum: datetime, predmet: Predmet, programi: List[Program], letnik_i: Letnik | List[Letnik], rok: Rok, izvajalci: List[Izvajalec], obdobje: Obdobje, ics_vrstice: str)

Bases: object

Osnovne informacije o izpitnem roku. Ta je opisan s predmetom, seznamom programov, seznamom pripadajočih letnikov (oba sta enako dolga), rokom (prvi, drugi …), seznamom izvajalcev in izpitnim obdobjem.

property ics_vrstice
id() str

Iz id-jev polj tega objekta ustvari id tega objekta. Vsebuje le knjižnici jQuery prijazne znake.

Returns:

S podčrtaji ločeni id-ji polj predmet, programi, letnik, rok, izvajalci in obdobje. Id-ji za polja, ki so seznami (programi, izvajalci), so id-ji elementov danega seznama, ločeni z x.

ignoriraj() bool

Pove, ali je treba rok ignorirati.

Returns:

ime predmeta se začne z zvezdico

osnovni_opis() str

Vrne poenostavljen prikaz izpitnega roka (datum in predmet).

Returns:

Za izpitni rok Topologije, ki se zgodi 25. 10. 2022, bomo dobili "25. oktober 2022 (torek), Topologija"

preveri()

Preveri, ali so vsa polja neprazna, in ali so programi in letniki enako dolgi

Returns:

Raises:

ValueError, če je kateri od pogojev kršen

prikazi_datum() str

Polje datum pretvori v berljiv niz. Tako se npr. 3. 10. 2022 pretvori v niz "3. oktober 2022 (ponedeljek)".

Returns:

berljiva predstavitev datuma

prikazi_izvajalce()

Lepo prikaže izvajalce v skladu z izpitni_roki.osnovno.IzpitniRok._prikazi_neprazen_seznam()

Returns:

npr. "Ana, Beno in Cene"

prikazi_smer_in_letnik()

Prikaže smer(i) ter letnik(e) v lepo berljivi obliki.

Returns:

npr.

<b>Finančna matematika</b>, 3. letnik<br>
<b>Matematika</b>, 3. letnik<br>
<b>Pedagoška matematika</b>, 2. letnik
static zdruzi_roka(izpitni_rok1: IzpitniRok, izpitni_rok2: IzpitniRok) IzpitniRok

Spoji izpitni rok za isti predmet na dveh smereh v enega samega. Pazi, da se datuma, imeni predmeta, roka in obdobji ujemajo.

Parameters:
  • izpitni_rok1 – izpitni rok

  • izpitni_rok2 – izpitni rok

Returns:

spoj obeh izpitnih rokov: programi, letniki, izvajalci in ics_vrstice so ‘unija’ vhodnih rokov, ostala polja ostanejo nespremenjena.

Raises:

ValueError če se ne ujemajo stvari, ki bi se morale

class izpitni_roki.osnovno.Izvajalec(ime: str)

Bases: IDTerIme

IZDANA_OPOZORILA = {}
PROBLEMATICNI = {'Berk Skok Aleš': 'Aleš Berk Skok', 'Boc Thaler Luka': 'Luka Boc Thaler', 'Cabello Justo Sergio': 'Sergio Cabello Justo', 'Depolli Steiner Katja': 'Katja Depolli Steiner', 'Drinovec Drnovšek Barbara': 'Barbara Drinovec Drnovšek', 'Govekar Leban Darja': 'Darja Govekar Leban', 'Govekar Okoliš Monika': 'Monika Govekar Okoliš', 'Kink Peter Marijan': 'Peter Marijan Kink', 'Kink Peter Marjan': 'Peter Marjan Kink', 'Nguyen Wills Ton Minh': ' Wills Ton Minh Nguyen', 'Puklek Levpušček Melita': 'Melita Puklek Levpušček', 'Romih Gašper Domen': 'Gašper Domen Romih', 'Simpson Alexander Keith': 'Alexander Keith Simpson', 'Zozaya Ursuegui Andoni': 'Andoni Zozaya Ursuegui', 'Šadl Praprotnik Ada': 'Ada Šadl Praprotnik'}
class izpitni_roki.osnovno.Koledar(smer: str, izpitni_roki: List[IzpitniRok], ics_vrstice: str)

Bases: object

Osnovne informacije o koledarju

ics_vrstice: str
izpitni_roki: List[IzpitniRok]
prilagodi_ics_opis(nadomestno_ime: str) str
smer: str
class izpitni_roki.osnovno.Letnik(ime)

Bases: IDTerIme

DOVOLJENI_LETNIKI = {'drugi': 2, 'peti': 5, 'prvi': 1, 'tretji': 3, 'četrti': 4}
class izpitni_roki.osnovno.Obdobje(ime: str, zacetek: datetime, konec: datetime)

Bases: IDTerIme

static doloci_obdobje(datum: datetime, obdobja: List[Obdobje]) Obdobje

Najde obdobje, v katero spada dani datum.

Parameters:
  • datum – neki datum

  • obdobja – seznam izpitnih obdobij

Returns:

obdobje, v katerega spada datum. Če takega obdobja ni, potem vrnemo OBDOBJE_IZVEN.

static vse_vsa() str

Oblika besede “vse” glede na spol.

Returns:

"vse"

class izpitni_roki.osnovno.Predmet(ime: str)

Bases: IDTerIme

class izpitni_roki.osnovno.Program(ime: str)

Bases: IDTerIme

LEPSE_OBLIKE = {'1FiMa': 'Finančna matematika', '1Mate': 'Matematika', '1PrMa': 'Praktična matematika', '2PeMa': 'Pedagoška matematika'}
class izpitni_roki.osnovno.Rok(ime: str)

Bases: IDTerIme

izpitni_roki.osnovno.datum_v_niz(d)
izpitni_roki.osnovno.najdi_vse_ics(mapa: str) list[str]

Najdi vse ics datoteke v dani mapi.

Parameters:

mapa – pot do mape

Returns:

seznam vseh ics datotek v mapi

izpitni_roki.osnovno.nalozi_problematicna_imena()
izpitni_roki.osnovno.naredi_zapisnikarja(name)

Naredi zapisnikarja oz. loggerja.

Parameters:

name – ime zapisnikarja, po navadi kar __file__

Returns:

zapisnikar

izpitni_roki.osnovno.niz_v_datum(niz)
izpitni_roki.osnovno.preveri_ics_datoteke(ics_datoteke: str | list[str]) list[str]

izpitni_roki.nalozi_ics

V tej datoteki so funkcije, ki preberejo ics datoteko in njeno vsebino shranijo v objekt tipa izpitni_roki.osnovno.Koledar().

izpitni_roki.nalozi_ics.doloci_leto(pot: str, oblika_datuma: str | None = None) int
izpitni_roki.nalozi_ics.nalozi_ics(pot: str, obdobja: Dict[str, Tuple[datetime, datetime]] | None = None, oblika_summary: str | None = None, oblika_datum: str | None = None) Koledar

Naloži ics datoteko v Koledar. Pričakovana oblika vsebine datoteke je

BEGIN:VCALENDAR
PRODID:-//Google Inc//Google Calendar 70.9054//EN
VERSION:2.0
CALSCALE:GREGORIAN
METHOD:PUBLISH
X-WR-CALNAME:Finančna matematika 2021/22
X-WR-TIMEZONE:Europe/Belgrade
[dogodki]
END:VCALENDAR

kjer so dogodki oblike

BEGIN:VEVENT
DTSTART;VALUE=DATE:20220629
DTEND;VALUE=DATE:20220630
DTSTAMP:20220209T150954Z
UID:fdsfsdfsdfsd@google.com
CREATED:20210325T080359Z
DESCRIPTION:
LAST-MODIFIED:20210913T125706Z
LOCATION: morda kaj, a ni pomembno
SEQUENCE:4
STATUS:CONFIRMED
SUMMARY:Uvod v programiranje (1Mate\, 2PeMa\, ni smeri)\, prvi letnik\, Pris
    ojnik Matjaž\, Perko Martin\, Pletna Marija\, 3. rok
TRANSP:TRANSPARENT
END:VEVENT
Parameters:
  • pot – pot do ics datoteke

  • obdobja – slovar izpitnih obdobij (s ključi zimsko, spomladansko in jesensko) in vrednostnmi (zacetek, konec), kjer sta obe krajišči vključeni in tipa datetime. Izpitni roki, ki so izven vseh, bodo v posebni kategoriji.

  • oblika_summary – regularni izraz, ki naj mu zadošča polje SUMMARY v datoteki

  • oblika_datum – pythonov format za datum (npr. %Y%m%D).

Returns:

Koledar, ki vsebuje vse dogodke v ics datoteki.

izpitni_roki.nalozi_ics.naredi_izpitna_obdobja(leto: int) Dict[str, Tuple[datetime, datetime]]

Naredi osnovna izpitna obdobja, ki jih uporabimo, če niso podana ročno.

Parameters:

leto – leto, za katerega delamo izpitna obdobja, npr. 2022

Returns:

Vrnemo slovar, ki pravi, da je zimsko januarja in februarja, spomladansko junija in julija, ter jesensko avgusta in septembra:

{
   "zimsko": (datetime(leto, 1, 1), zadnji_februar),
   "spomladansko": (datetime(leto, 6, 1), datetime(leto, 7, 31)),
   "jesensko": (datetime(leto, 8, 1), datetime(leto, 9, 30))
}

izpitni_roki.nalozi_ics.naredi_koledar(meta_vrstice_koledarja: List[str], izpitni_roki: List[IzpitniRok]) Koledar

Iz meta-opisa koledarja prebere smer, doda še izpitne roke in ustvari nov objekt Koledar

Parameters:
  • meta_vrstice_koledarja – vrstice v koledarju, ki niso del dogodka

  • izpitni_roki – izpitni roki, ki smo jih prebrali iz dane ics datoteke

Returns:

koledar z izpitnimi roki za dano smer

izpitni_roki.nalozi_ics.preberi_vrednosti(vrstice: List[str], nujni_kljuci: List[str]) Tuple[Dict[str, str], str]
Vrstice, ki opisujejo dogodek (izpitni rok) ali pa koledar, predela tako, da odstrani

morebitne prelome vrstic in jih združi v slovar {kljuc: vrednost, …}, kjer so ključi ključne besede iz .ics formata, npr. DTSTART;VALUE=DATE ali X-WR-TIMEZONE.

Parameters:
  • vrstice – zaporedne vrstice iz ics datoteke, ki opisujejo dogodek ali koledar. Seznam ne vsebuje ne začetne vrstice (BEGIN:VCALENDAR ali BEGIN:VEVENT) ne končne vrstice (END:VCALENDAR ali END:VEVENT).

  • nujni_kljuci – ključi, ki jih nujno potrebujemo, da bi lahko kasneje ustvarili IzpitniRok ali Koledar

Returns:

par (slovar, združene vrstice), kjer slovar podaja pare ključna beseda iz ics: pripadajoča vrednost (v pripadajoči vrednosti so bili odstranjeni prelomi vrstic), združene vrstice pa so dobljene kot "\n".join(vrstice).

izpitni_roki.nalozi_ics.sprocesiraj_dogodek(vrstice: List[str], obdobja: List[Obdobje], oblika_summary: str | None, oblika_datum: str | None) IzpitniRok

Iz vrstic dogodka ustvari izpitni rok.

Branje je bolj kot ne neposredno, le s poljem SUMMARY je nekaj dela, saj je njegova vsebina npr.

Uvod v junaštva (Smer1\, Smer2\, Smer3)\, prvi letnik\,
 Klepec Peter\, Krpan Martin\, Kekec Kekec\, 3. rok

(prelom za vejico smo dodali zaradi berljivosti: sledi ji presledek v naslednji vrsti).

Če oblika datumov (pri DTSTART;VALUE=DATE) ni %Y%m%d (npr. 20231225 za 25. 12. 2023), jo je treba podati.

Parameters:
  • vrstice – surove vrstice, kot jih preberemo v ics datoteki. Opisujejo koledar ali dogodek, v njih nista prisotna začena in končna vrstica ([BEGIN oz. END]:VEVENT). Nujno morata biti v njih prisotna ključa SUMARY in DTSTART;VALUE=DATE.

  • obdobja – seznam izpitnih obdobij

  • oblika_summary

    regularni izraz, ki mu zadošča vrednost polja SUMMARY. Vsebovati mora iste poimenovane skupine, kot jih (prednastavljeni)

    r"^(?P<predmet>[^(]+)\((?P<smeri>[^)]+)\)\, ?" \
    r"(?P<letnik>[^ ]+) letnik\, " \
    r"?(?P<izvajalci>([^\]+\, ?)+)" \
    r"(?P<rok>\d+\.) rok ?$"
    

  • oblika_datum – pythonov format za datum, npr. %Y%m%d

Returns:

IzpitniRok, ki ga opisujejo vrstice

Raises:

ValueError če SUMMARY dogodka ni predpisane oblike.

izpitni_roki.preverjanje

V tej datoteki so funkcije, s katerimi preverimo usterznost izpitnih rokov.

izpitni_roki.preverjanje.nalozi_obvezne_predmete()
izpitni_roki.preverjanje.preveri_predmet_letnik(program: str, letnik: int, izpitni_roki: list[IzpitniRok], obdobja: tuple[tuple[str, str], tuple[str, str], tuple[str, str]], prazniki: list[str])

Preveri, ali so razpisani roki za dani letnik (danega programa) skladni s pravili.

Parameters:
  • program – npr. "1FiMa"

  • letnik – 1, 2, 3, 4 ali 5

  • izpitni_roki – razpisani roki danega program-letnika

  • obdobja – trojica intervalov, ki podaja zimsko, spomladansko in jesensko izpitno obdobje. Vsak interval je podan s paroma datumov, npr. ("24. 1. 2024", "16. 2. 2024")

  • prazniki – seznam datumov (kot nizov, npr. 25. 6. 2023), na katere naj ne bo izpitov

Returns:

ne vrne ničesar, le izpiše opozorila, če so ta potrebna, sicer pa obvesti, da je vse v redu.

izpitni_roki.preverjanje.preveri_vse(koledarji: list[Koledar], obdobja: tuple[tuple[str, str], tuple[str, str], tuple[str, str]], prazniki: list[str])

Preveri vse izpitne roke, tako da razbije dane koledarje na program-letnike in pokliče razbij_po_program_letnikih() na vseh.

izpitni_roki.preverjanje.razbij_po_program_letnikih(izpitni_roki: list[IzpitniRok]) dict[tuple[str, int], list[IzpitniRok]]

Razbije dane roke glede na program-letnik.

Parameters:

izpitni_roki – izpitni roki vseh letnikov in programov

Returns:

slovar koledarjev {ime1: roki1, ...}, katerega ključi so imena program-letnikov (npr. 1FiMa - 1. letnik), vrednosti pa seznami izpitnih rokov, ki vsebujejo le izpite za dani program-letnik.

izpitni_roki.naredi_html

V tej datoteki so funkcije, ki ustvarijo html stran oz. njene kose (npr. en spustni meni ali pa eno tabelo).

izpitni_roki.naredi_html.najdi_vsa_obdobja(koledarji: List[Koledar]) List[IDTerIme]

Najdemo vsa obdobja, ki se pojavijo v izpiznih rokih v koledarju.

Parameters:

koledarji – seznam obdobij

Returns:

(urejena) obdobja (brez ponovitev)

izpitni_roki.naredi_html.najdi_vse(koledarji: List[Koledar], izvleckar: Callable[[IzpitniRok], List[IDTerIme]]) List[IDTerIme]

Najde vse prisotne vrednosti danega polja izpitnega roka.

Parameters:
  • koledarji – seznam objektov Koledar

  • izvleckar – funkcija, ki iz objekta IzpitniRok izvčleče vrednost željenega polja, in ga vrne kot objekt IDTerIme

Returns:

urejen seznam prisotnih vrednosti (brez ponovitev), ki smo jih izvlekli. Seznam je urejen glede na urejenost podrazreda IDTerIme.

izpitni_roki.naredi_html.najdi_vse_izvajalce(koledarji: List[Koledar]) List[IDTerIme]

Najdemo vse izvajalce, ki se pojavijo v izpiznih rokih v koledarju.

Parameters:

koledarji – seznam izvajalcev

Returns:

(urejeni) izvajalci (brez ponovitev)

izpitni_roki.naredi_html.najdi_vse_letnike(koledarji: List[Koledar]) List[IDTerIme]

Najdemo vse letnike, ki se pojavijo v izpiznih rokih v koledarju.

Parameters:

koledarji – seznam koledarjev

Returns:

(urejeni) letniki (brez ponovitev)

izpitni_roki.naredi_html.najdi_vse_predmete(koledarji: List[Koledar]) List[IDTerIme]

Najdemo vse predmete, ki se pojavijo v izpiznih rokih v koledarju.

Parameters:

koledarji – seznam predmetov

Returns:

(urejeni) predmeti (brez ponovitev)

izpitni_roki.naredi_html.najdi_vse_programe(koledarji: List[Koledar]) List[IDTerIme]

Najdemo vse programe, ki se pojavijo v izpiznih rokih v koledarju.

Parameters:

koledarji – seznam koledarjev

Returns:

(urejeni) programi (brez ponovitev)

izpitni_roki.naredi_html.najdi_vse_roke(koledarji: List[Koledar]) List[IDTerIme]

Najdemo vse roke (1., 2., …), ki se pojavijo v izpiznih rokih v koledarju.

Parameters:

koledarji – seznam rokov

Returns:

(urejeni) roki (brez ponovitev)

izpitni_roki.naredi_html.nalozi_predmete_za_zduzevanje() Dict[str, List[str]]

Naloži datoteko, ki opisuje, katere predmete je treba združiti. Izkaže se, da ni važno, ali je predmet voden ločeno ali ne, mi samo združimo :)

Returns:

slovar, ki ima za ključe imena predmetov, in za vrednosti imena programov

izpitni_roki.naredi_html.naredi_html(poti_do_koledarjev: List[str], naslov: str = 'Naslov strani', opis_strani: str = 'Opis strani', ime_izhodne: str = 'izpitni_roki', obdobja: Dict[str, Tuple[datetime, datetime]] | None = None, oblika_summary: str | None = None, oblika_datum: str | None = None)

Naredi celotno spletno stran.

Parameters:
  • poti_do_koledarjev – seznam poti do .ics datotek, ki vsebujejo izpitne roke

  • ime_izhodne – ime izhodne datoteke, npr. izpitni_roki (in ne izpitni_roki.html)

  • naslov

    naslov spletne strani, npr.

    "Izpitni roki na Oddelku za matematiko FMF v študijskem letu 2022/23"
    

  • opis_strani

    Kratek opis strani (npr. katere izpitne roke vsebuje), npr.

    "Spodaj so prikazani izpitni roki na programih Finančna matematika (1FiMa),
    Matematika (1Mate) in Praktična matematika (1PrMa) in prvih treh letnikih programa
    Pedagoška matematika (2PeMa) na Oddelku za matematiko FMF v študijskem letu 2022/23,
    ki zadoščajo izbranim kriterijem."
    

  • obdobja – slovar, ki podaja imena in intervale izpitnih obdobij, npr. {"zimsko izpitno obdobje": (datetime(2022, 1, 15), datetime(2022, 2, 15), ...}. Izpiti, ki ne bodo padli v nobeno od naštetih obdobij, bodo imeli kategorijo izven izpitnega obdobja.

  • oblika_summary – regularni izraz, ki mu zadošča polje SUMMARY v ics datoteki.

  • oblika_datum – format datuma (npr. %Y%m%D), ki mu zadošča polje DTSTART;VALUE=DATE.

Returns:

Ne vrne ničesar, se pa str(predloga za stran) pojavi v izhodni mapi out.

izpitni_roki.naredi_html.naredi_spustni_meni(ime_menija: str, html_razred: str, moznosti: List[IDTerIme]) str

Naredi enonivojski spustni meni.

Parameters:
  • ime_menija – napis na gumbu

  • html_razred – razred, ki ga dodatmo v class atribut vseh možnosti

  • moznosti – Urejen seznam moznosti.

Returns:

str(html predloga enonivojski spustni meni)

izpitni_roki.naredi_html.naredi_spustni_meni_po_crkah(ime_menija: str, html_razred: str, moznosti: List[IDTerIme]) str

Naredi dvonivojski spustni meni.

Parameters:
  • ime_menija – napis na gumbu

  • html_razred – razred, ki ga dodatmo v class atribut vseh možnosti

  • moznosti – Urejen seznam moznosti.

Returns:

str(html predloga za dvonivojski spustni meni)

izpitni_roki.naredi_html.naredi_tabelo(koledarji: List[Koledar]) str

Html koda za tabelo vseh izpitnih rokov

Parameters:

koledarji – seznam objektov Koledar

Returns:

str(html predloga za tabelo)

izpitni_roki.naredi_html.zdruzi_roke(izpitni_roki: List[IzpitniRok]) List[IzpitniRok]

Združi izpitne roke pri predmetih, ki se pojavijo v več programih.

Parameters:

izpitni_roki – seznam ločenih rokov

Returns:

seznam združenih rokov

izpitni_roki.glasbene_zelje

V tej datoteki so razne funkcije, ki niso neposredno uporabljene za gradnjo spletnih strani in služijo zelo ozkemu namenu, npr. obveščanju tajništva FRI, kdaj se piše Topologijo, zato so namensko opisane le izbrane funkcije.

izpitni_roki.glasbene_zelje.prikazi_isrm_roke(poti_do_ics: str | list[str])

Prikaže roke za predmete, ki jih ponujamo IŠRM. Izda opozorilo, če za kakšnega od predmetov ni bil najden noben rok.

Parameters:

poti_do_ics – poti do ics datotek kot a) niz, ki predstavlja ime mape, npr. letosnji_data (najdemo vse ics datoteke v dani mapi), ali b) seznam ics datotek, npr. ["letosnji_data/test1.ics", "letosnji_data/test2.ics"]

Returns:

ne vrne ničesar, samo izpiše ustrezne vrstice

izpitni_roki.glasbene_zelje.ustrezni_izpitni_roki(koledarji: List[Koledar], pogoj: Callable[[IzpitniRok], bool]) List[IzpitniRok]

Vrne roke v koledarjih, ki ustrezajo filtrirnemu pogoju.

Parameters:
  • koledarji – seznam koledarjev

  • pogoj – funkcija, ki oceni primernost roka

Returns:

urejen seznam ustreznih rokov