diff --git a/data_types/choice.py b/data_types/choice.py index ecdd51e..3c0138b 100644 --- a/data_types/choice.py +++ b/data_types/choice.py @@ -1,6 +1,6 @@ from enum import Enum -from utils import only_keep_UTF_8_chars +from utils import only_keep_UTF_8_chars, sanitize_id class ChoiceType(Enum): @@ -16,7 +16,7 @@ def __init__(self, name: str = "", price: float = 0.0): def __str__(self): self.name = only_keep_UTF_8_chars(self.name.replace("€", " euro ")) - display_name = only_keep_UTF_8_chars(self.name.lower().replace( + display_name = sanitize_id(self.name.lower().replace( " ", "_" ).replace( ".", "_dot_" @@ -37,7 +37,7 @@ def __init__(self, name: str = "", description: str = "", type: ChoiceType = Cho choices = [] self.type: ChoiceType = type self.choices = choices - self.name: str = name + self.name: str = sanitize_id(name) self.description: str = description def update_name(self, new_name: str): diff --git a/data_types/common_choice_lists.py b/data_types/common_choice_lists.py index c0001fd..d96aec7 100644 --- a/data_types/common_choice_lists.py +++ b/data_types/common_choice_lists.py @@ -1,5 +1,6 @@ from data_types.choice import ChoiceList, Choice, ChoiceType + ############################ # metropol # ############################ @@ -85,6 +86,7 @@ def create_metropol_groenten_keuze_list(): ] return groenten_keuze_list + def create_metropol_extra_keuze_list(): extra_keuze_list = ChoiceList(name="extra", description="Welke extra's?", type=ChoiceType.MULTI) @@ -97,6 +99,7 @@ def create_metropol_extra_keuze_list(): ] return extra_keuze_list + ############################ # simpizza # ############################ diff --git a/data_types/product.py b/data_types/product.py index 04053c2..df35065 100644 --- a/data_types/product.py +++ b/data_types/product.py @@ -1,7 +1,7 @@ import re from data_types.choice import ChoiceList, Choice, ChoiceType -from utils import only_keep_UTF_8_chars +from utils import only_keep_UTF_8_chars, sanitize_id from typing import List @@ -16,7 +16,7 @@ def __init__(self, name: str = "", description: str = "", price: float = 0.0): def __str__(self): output = "" self.name = only_keep_UTF_8_chars(self.name.replace("€", " euro ")) - self.display_name = only_keep_UTF_8_chars(self.name.lower().replace( + self.display_name = sanitize_id(self.name.lower().replace( " ", "_" ).replace( ".", "_dot_" diff --git a/utils.py b/utils.py index 1d8e160..fb6e0d4 100644 --- a/utils.py +++ b/utils.py @@ -12,6 +12,12 @@ from selenium.common.exceptions import StaleElementReferenceException +def sanitize_id(input_str): + # Keep only characters matching the pattern [a-z0-9_-] + sanitized = re.sub(r'[^a-z0-9_-]', '', input_str.lower().replace(" ", "_")) + return sanitized + + def timer(func: Callable) -> Callable: """Print the runtime of the decorated function""" @@ -172,7 +178,8 @@ def parse_pdf_with_strip_split_enters(file_path: str, coords: Tuple[int, int, in return output.strip().split("\n") -def parse_pdf_section(pdf_url: str, local_file_path: str, coords: Tuple[int, int, int, int], page_number: int = 1) -> List: +def parse_pdf_section(pdf_url: str, local_file_path: str, coords: Tuple[int, int, int, int], + page_number: int = 1) -> List: """ Downloads a PDF, retrieves its dimensions, and extracts text from a specified section.