From f84aec445662c431496a0869cbae59b9352ddfe9 Mon Sep 17 00:00:00 2001 From: Oscar Plaisant Date: Thu, 27 Jun 2024 17:24:33 +0200 Subject: [PATCH] Better gestion of privates variables. Add a forgotten f for f-strings. --- src/query_generator.py | 26 ++++++++++++++++++-------- 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/src/query_generator.py b/src/query_generator.py index e2e56d9..8ddae23 100644 --- a/src/query_generator.py +++ b/src/query_generator.py @@ -7,6 +7,7 @@ from abc import ABC, abstractmethod class QueryGenerator(ABC): + """Abstract class to define what methods should a query generator have.""" @abstractmethod def __init__(self): ... @@ -14,18 +15,23 @@ class QueryGenerator(ABC): def __str__(self) -> str: ... -class QueryWithParameter(QueryGenerator): - # DEFAULT_AUTHORIZED_PARAMETER_VALUES: tuple[str, ...] = ("foo", "bar") +class QueryWithParameter(QueryGenerator, ABC): + """Abstract class for query generators with our 3 parameters. + This class implements the gestion of 3 attributes : `parameter`, + `authorized_parameter_values` and `summed_attribute`. They are managed so + that there is no typing error, and using default values. Importantly, the + default value of authorized_parameter_values (when not given or set to + None) is the the value of `self.DEFAULT_AUTHORIZED_PARAMETER_VALUES`. + """ def __init__(self, parameter: str|None =None, authorized_parameter_values: tuple[str, ...] | None = None, summed_attribute: str|None =None): if parameter is None: raise ValueError - self.parameter = str(parameter) + self.__parameter = str(parameter) - if authorized_parameter_values is None: - authorized_parameter_values = self.DEFAULT_AUTHORIZED_PARAMETER_VALUES - self.authorized_parameter_values = authorized_parameter_values + self.__authorized_parameter_values = authorized_parameter_values + self.__force_typing_on_authorized_parameter_values() if summed_attribute is None: raise ValueError self.summed_attribute = str(summed_attribute) @@ -39,6 +45,8 @@ class QueryWithParameter(QueryGenerator): self.__parameter = str(value) def __force_typing_on_authorized_parameter_values(self): + if self.__authorized_parameter_values is None: + self.__authorized_parameter_values = self.DEFAULT_AUTHORIZED_PARAMETER_VALUES self.__authorized_parameter_values = tuple( map(str, self.__authorized_parameter_values)) @@ -54,6 +62,8 @@ class QueryWithParameter(QueryGenerator): class QueryWithParameterGroupedByCriteria(QueryWithParameter): + """Similar to QueryWithParameter, but with an addtional parameter : `criteria`. + The results are grouped by criteria, and values of `summed_attribute` are summed for each `parameter`, to give an order on `parameter`'s values""" def __init__(self, parameter: str|None =None, authorized_parameter_values: tuple[str, ...] | None =None, @@ -67,7 +77,7 @@ class QueryWithParameterGroupedByCriteria(QueryWithParameter): authorized_parameter_values = self.DEFAULT_AUTHORIZED_PARAMETER_VALUES self.authorized_parameter_values = authorized_parameter_values - self.criteria = criteria + self.__criteria = str(criteria) if summed_attribute is None: raise ValueError self.summed_attribute = str(summed_attribute) @@ -162,7 +172,7 @@ class QuerySSBWithParameterGroupedByCriteria(QueryWithParameterGroupedByCriteria res += "INNER JOIN date ON lo_orderdate = D_DATEKEY\n" if self.authorized_parameter_values is not None: - res += "WHERE {self.parameter} IN {self.authorized_parameter_values}\n" + res += f"WHERE {self.parameter} IN {self.authorized_parameter_values}\n" res += f"""