diff --git a/tools/python/jwutils/db/schema/Table.py b/tools/python/jwutils/db/schema/Table.py index 5b7c1e6..e794416 100644 --- a/tools/python/jwutils/db/schema/Table.py +++ b/tools/python/jwutils/db/schema/Table.py @@ -38,6 +38,7 @@ class Table(abc.ABC): # export self.__base_location_rule: Optional[Iterable[str]] = None self.__location_rule: Optional[Iterable[str]] = None self.__row_location_rule: Optional[Iterable[str]] = None + self.__add_row_location_rule: Optional[Iterable[str]] = None self.__foreign_keys_to_parent_table: Optional[OrderedDict[str, Any]] = None self.__relationships: Optional[list[tuple[str, Self]]] = None self.__model_class: Optional[Any] = None @@ -168,6 +169,9 @@ class Table(abc.ABC): # export ret += f'/<{col}>' return ret + def _add_row_location_rule(self) -> Optional[str]: + return self._location_rule() + '/new' + # -- To be used def column_default(self, name) -> Any: @@ -251,6 +255,19 @@ class Table(abc.ABC): # export ret = re.sub(f'<{col}>', quote_plus(quote_plus(str(kwargs[col]))), ret) return ret + @property + def add_row_location_rule(self): + if self.__add_row_location_rule is None: + self.__add_row_location_rule = self._add_row_location_rule() + return self.__add_row_location_rule + + def add_row_location(self, *args, **kwargs) -> Optional[str]: + ret = self.add_row_location_rule + for col in self.primary_keys: + if col in kwargs: # FIXME: Poor man's row location assembly + ret = re.sub(f'<{col}>', quote_plus(quote_plus(str(kwargs[col]))), ret) + return ret + @property def primary_keys(self) -> Iterable[str]: if self.__primary_keys is None: