Skip to content
Snippets Groups Projects
Commit 15ed32bf authored by Jiří Kalvoda's avatar Jiří Kalvoda
Browse files

Util: parse_int_list

Parsuje seznam čísel oddělených čárkou s možným zadáním rozsahů pomocí
pomlčky.
parent 7462f203
No related branches found
No related tags found
1 merge request!88Přdáno filtrování orgů podle rolí
......@@ -13,7 +13,7 @@ import re
import secrets
import subprocess
import sys
from typing import Any, Optional, NoReturn, Tuple
from typing import Any, Optional, NoReturn, Tuple, List
import textwrap
import urllib.parse
......@@ -247,3 +247,24 @@ def check_points(points: decimal.Decimal, for_task: Optional[db.Task] = None, fo
else:
return f'Podle nastavení kola zadat body jen s krokem {points_step} (hodnota {points} je neplatná)'
return None
def parse_int_list(a: str, maxim: int = 200) -> List[int]:
"""Parsuje "1-3,5,7-9" na [1,2,3,5,7,9].
Aby nešlo generovat moc velká pole (obrana proti DDoSu),
existuje omezení na velikost."""
r: List[int] = []
for i in a.split(","):
b = i.split("-")
if len(b) > 2:
raise mo.CheckError("Nadměrný počet pomlček")
try:
c = list(map(int, b))
except ValueError:
raise mo.CheckError("Převod na číslo se nezdařil")
if any(x < 0 or x > maxim for x in c):
raise mo.CheckError("Překročen limit na velikost čísla")
if len(c) == 2 and c[0] > c[1]:
raise mo.CheckError("Větší číslo nemůže být před menším")
r += [c[0]] if len(c) == 1 else range(c[0], c[1] + 1)
return r
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment