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):
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
def is_valid_dot(pattern):
"""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)
Exemples :
- Q1R1 True (si educatives.count() vide)
- Q1R2 [2-8] True (si educatives.count() vide)
- Q1R1 [8-2] False
- Q1R1 [-] False (not working)
- Q2R1 [-5] True (si educatives.count() vide)
- SF [6-] True (si educatives.count() vide)
- FS [3-7] True (si educatives.count() vide)
- Q1R1. True (si educatives.count() == 1) (NOT WOKRING)
- .Q1R2 True (si educatives.count() == 1) (NOT WOKRING)
- WC True (si educatives.count() >= 2)
- 1| True (si educatives.count() >= 1)
- Q1R1 True
- Q1R2 [2-8] True
- Q2R1 [-5] True
- SF [6-] True
- FS [3-7] True
- Q1R1. True
- .Q1R2 True
- Q1R1. [-4] True
- .Q1R2 [4-] True
- .FS [3-7] True
- [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
if len(operation_list) == 2:
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 Passe.is_valid_subset(operation_list[1])
if len(argument_list) == 2:
return Passe.is_valid_regexp_two_args(argument_list[0], argument_list[1])
else:
if operation_list[0] == "WC":
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 Passe.is_valid_regexp_one_arg(argument_list[0])
return False