From 323c123394ef6468d4a3fd3aaee8956885dea5f6 Mon Sep 17 00:00:00 2001 From: t3eHawk Date: Tue, 20 Dec 2022 16:21:29 +0300 Subject: [PATCH] Fix Oracle date filters --- pydin/models.py | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/pydin/models.py b/pydin/models.py index 10962ec..684addc 100644 --- a/pydin/models.py +++ b/pydin/models.py @@ -112,13 +112,13 @@ def target_date(self): def date_from(self): """The beggining of the target date of this model.""" if hasattr(self, 'date_field'): - return self.target_date.start + return self.converter(self.target_date.start) @property def date_to(self): """The end of the target date of this model.""" if hasattr(self, 'date_field'): - return self.target_date.end + return self.converter(self.target_date.end) @property def value_field(self): @@ -210,6 +210,13 @@ def format_custom_query(self, value): else: return value + def converter(self, value): + """Convert the given value into the appropriate model format.""" + if value and hasattr(self, '_convert'): + return self._convert(value) + else: + return value + def explain(self, parameter_name=None): """Get model or chosen parameter description.""" if not parameter_name: @@ -1065,6 +1072,17 @@ def endlog(self, output_rows=None, output_text=None, error_text=error_text) pass + def _convert(self, value): + if isinstance(value, dt.datetime): + if self.db.vendor == 'oracle': + string = f'{value:%Y-%m-%d %H:%M:%S}' + fmt = 'yyyy-mm-dd hh24:mi:ss' + return sa.func.to_date(string, fmt) + else: + return value + else: + return value + def _format(self, text): text = text.format(task=self.task) return text