Update regexp checking function.

This commit is contained in:
Gregory Trullemans 2024-03-09 20:20:08 +01:00
parent 97ff0edbb3
commit df8d5e68cf
1 changed files with 53 additions and 38 deletions

View File

@ -559,6 +559,40 @@ class Passe(Markdownizable):
def __str__(self): def __str__(self):
return f"{self.label} ({self.number_of_skill} | {self.difficulty})" return f"{self.label} ({self.number_of_skill} | {self.difficulty})"
@staticmethod
def is_valid_regexp_one_arg(arg):
"""Vérifie une regexp avec un paramètre."""
if arg == "WC":
return True
if re.match(r"[1-9]+\|", arg):
return True
if not Passe.is_valid_dot(arg):
return False
value = arg.replace(".", "")
is_valid_routine = Passe.is_valid_routine_type(value)
if is_valid_routine:
return True
return Passe.is_valid_subset(arg)
@staticmethod
def is_valid_regexp_two_args(arg1, arg2):
"""Vérifie une regexp avec deux paramètres."""
if not Passe.is_valid_dot(arg1):
return False
value = arg1.replace(".", "")
is_valid_routine = Passe.is_valid_routine_type(value)
if is_valid_routine:
return Passe.is_valid_subset(arg2)
return False
@staticmethod @staticmethod
def is_valid_dot(pattern): def is_valid_dot(pattern):
"""Reçoit une chaine de caratère et vérifie que si elle contient un point (.), il se trouve """Reçoit une chaine de caratère et vérifie que si elle contient un point (.), il se trouve
@ -627,49 +661,30 @@ class Passe(Markdownizable):
- x| (x entier) - x| (x entier)
Exemples : Exemples :
- Q1R1 True (si educatives.count() vide) - Q1R1 True
- Q1R2 [2-8] True (si educatives.count() vide) - Q1R2 [2-8] True
- Q1R1 [8-2] False - Q2R1 [-5] True
- Q1R1 [-] False (not working) - SF [6-] True
- Q2R1 [-5] True (si educatives.count() vide) - FS [3-7] True
- SF [6-] True (si educatives.count() vide) - Q1R1. True
- FS [3-7] True (si educatives.count() vide) - .Q1R2 True
- Q1R1. True (si educatives.count() == 1) (NOT WOKRING) - Q1R1. [-4] True
- .Q1R2 True (si educatives.count() == 1) (NOT WOKRING) - .Q1R2 [4-] True
- WC True (si educatives.count() >= 2) - .FS [3-7] True
- 1| True (si educatives.count() >= 1) - [2-8] True
- [-5] True
- WC True
- 1| True
""" """
operation_list = regexp.split(" ") argument_list = regexp.split(" ")
if len(operation_list) >= 3: if len(argument_list) >= 3:
return False return False
if len(operation_list) == 2: if len(argument_list) == 2:
if not Passe.is_valid_dot(operation_list[0]): return Passe.is_valid_regexp_two_args(argument_list[0], argument_list[1])
return False
value = operation_list[0].replace(".", "")
is_valid_routine = Passe.is_valid_routine_type(value)
if is_valid_routine:
return Passe.is_valid_subset(operation_list[1])
else: else:
if operation_list[0] == "WC": return Passe.is_valid_regexp_one_arg(argument_list[0])
return True
if re.match(r"[1-9]+\|", operation_list[0]):
return True
if not Passe.is_valid_dot(operation_list[0]):
return False
value = operation_list[0].replace(".", "")
is_valid_routine = Passe.is_valid_routine_type(value)
if is_valid_routine:
return True
return Passe.is_valid_subset(operation_list[0])
return False return False