diff --git a/jarvis/objective/models.py b/jarvis/objective/models.py index f1cb435..a7936e9 100644 --- a/jarvis/objective/models.py +++ b/jarvis/objective/models.py @@ -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