From 1382e9bfd6535556ee223303cb2eeb0193d84990 Mon Sep 17 00:00:00 2001 From: Keiran Price Date: Wed, 14 Aug 2019 08:08:34 +0100 Subject: [PATCH 1/7] #18: Add like filtering --- common/database_helpers.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/common/database_helpers.py b/common/database_helpers.py index 6f39fc79..434d319f 100644 --- a/common/database_helpers.py +++ b/common/database_helpers.py @@ -124,12 +124,18 @@ def apply_filter(self, query): class WhereFilter(QueryFilter): precedence = 0 - def __init__(self, field, value): + def __init__(self, field, value, operation): self.field = field self.value = value + self.operation = operation def apply_filter(self, query): + if self.operation == "eq": query.base_query = query.base_query.filter(getattr(query.table, self.field) == self.value) + elif self.operation == "like": + query.base_query = query.base_query.filter(getattr(query.table, self.field).like(f"%{self.value}%")) + else: + raise BadFilterError(f" Bad operation given to where filter. operation: {self.operation}") class OrderFilter(QueryFilter): From f7335c388b9f602a8d5b5f50917f613af1179545 Mon Sep 17 00:00:00 2001 From: Keiran Price Date: Wed, 14 Aug 2019 08:09:05 +0100 Subject: [PATCH 2/7] #18: Update filter factory --- common/database_helpers.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/common/database_helpers.py b/common/database_helpers.py index 434d319f..2bff8ad1 100644 --- a/common/database_helpers.py +++ b/common/database_helpers.py @@ -194,9 +194,14 @@ def get_query_filter(filter): """ filter_name = list(filter)[0].lower() if filter_name == "where": - return WhereFilter(list(filter["where"])[0], filter["where"][list(filter["where"])[0]]) + field = list(filter[filter_name].keys())[0] + operation = list(filter[filter_name][field].keys())[0] + value = filter[filter_name][field][operation] + return WhereFilter(field, value, operation) elif filter_name == "order": - return OrderFilter(filter["order"].split(" ")[0], filter["order"].split(" ")[1]) + field = filter_name["order"].split(" ")[0] + direction = filter["order"].split(" ")[1] + return OrderFilter(field, direction) elif filter_name == "skip": return SkipFilter(filter["skip"]) elif filter_name == "limit": From 171ad980715586114c49bc26969c15cd049f635f Mon Sep 17 00:00:00 2001 From: Keiran Price Date: Wed, 14 Aug 2019 08:11:29 +0100 Subject: [PATCH 3/7] #18: Update get_row_by_id --- common/database_helpers.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/common/database_helpers.py b/common/database_helpers.py index 2bff8ad1..7e623aa6 100644 --- a/common/database_helpers.py +++ b/common/database_helpers.py @@ -131,7 +131,7 @@ def __init__(self, field, value, operation): def apply_filter(self, query): if self.operation == "eq": - query.base_query = query.base_query.filter(getattr(query.table, self.field) == self.value) + query.base_query = query.base_query.filter(getattr(query.table, self.field) == self.value) elif self.operation == "like": query.base_query = query.base_query.filter(getattr(query.table, self.field).like(f"%{self.value}%")) else: @@ -241,6 +241,7 @@ def apply_filters(self, query): def insert_row_into_table(table, row): """ Insert the given row into its table + :param table: The table to be inserted to :param row: The row to be inserted """ create_query = CreateQuery(table, row) @@ -268,7 +269,7 @@ def get_row_by_id(table, id): read_query = ReadQuery(table) try: log.info(f" Querying {table.__tablename__} for record with ID: {id}") - where_filter = WhereFilter("ID", id) + where_filter = WhereFilter("ID", id, "eq") where_filter.apply_filter(read_query) return read_query.get_single_result() finally: From 086478cca9cd13fcab4ef58fcb9141a550d9a88b Mon Sep 17 00:00:00 2001 From: Keiran Price Date: Wed, 14 Aug 2019 11:55:33 +0100 Subject: [PATCH 4/7] #18: Correct entity handling on update --- common/database_helpers.py | 1 + 1 file changed, 1 insertion(+) diff --git a/common/database_helpers.py b/common/database_helpers.py index 7e623aa6..ec7c5d1f 100644 --- a/common/database_helpers.py +++ b/common/database_helpers.py @@ -100,6 +100,7 @@ def __init__(self, table, row, new_values): def execute_query(self): log.info(f" Updating row in {self.table}") self.row.update_from_dict(self.new_values) + self.session.add(self.row) self.commit_changes() From 03f603c958510e4fe9ce5074c46dd49378c05037 Mon Sep 17 00:00:00 2001 From: Keiran Price Date: Wed, 14 Aug 2019 11:56:05 +0100 Subject: [PATCH 5/7] #18: Implement greater than and less than filters --- common/database_helpers.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/common/database_helpers.py b/common/database_helpers.py index ec7c5d1f..a658233e 100644 --- a/common/database_helpers.py +++ b/common/database_helpers.py @@ -135,6 +135,10 @@ def apply_filter(self, query): query.base_query = query.base_query.filter(getattr(query.table, self.field) == self.value) elif self.operation == "like": query.base_query = query.base_query.filter(getattr(query.table, self.field).like(f"%{self.value}%")) + elif self.operation == "lt": + query.base_query = query.base_query.filter(getattr(query.table, self.field) <= self.value) + elif self.operation == "gt": + query.base_query = query.base_query.filter(getattr(query.table, self.field) >= self.value) else: raise BadFilterError(f" Bad operation given to where filter. operation: {self.operation}") From a9fb2fa68e2146bc2ed77e7c63016fc921a7ad87 Mon Sep 17 00:00:00 2001 From: Keiran Price Date: Thu, 15 Aug 2019 07:17:01 +0100 Subject: [PATCH 6/7] #18: Change to lte and gte --- common/database_helpers.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/common/database_helpers.py b/common/database_helpers.py index a658233e..acd5eedf 100644 --- a/common/database_helpers.py +++ b/common/database_helpers.py @@ -135,9 +135,9 @@ def apply_filter(self, query): query.base_query = query.base_query.filter(getattr(query.table, self.field) == self.value) elif self.operation == "like": query.base_query = query.base_query.filter(getattr(query.table, self.field).like(f"%{self.value}%")) - elif self.operation == "lt": + elif self.operation == "lte": query.base_query = query.base_query.filter(getattr(query.table, self.field) <= self.value) - elif self.operation == "gt": + elif self.operation == "gte": query.base_query = query.base_query.filter(getattr(query.table, self.field) >= self.value) else: raise BadFilterError(f" Bad operation given to where filter. operation: {self.operation}") From b2d27500d32b56b7b82602f2a7bfdb5021e3f60b Mon Sep 17 00:00:00 2001 From: Keiran Price Date: Thu, 15 Aug 2019 07:17:30 +0100 Subject: [PATCH 7/7] #18: Fix typo --- common/database_helpers.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/database_helpers.py b/common/database_helpers.py index acd5eedf..aa9903c0 100644 --- a/common/database_helpers.py +++ b/common/database_helpers.py @@ -204,7 +204,7 @@ def get_query_filter(filter): value = filter[filter_name][field][operation] return WhereFilter(field, value, operation) elif filter_name == "order": - field = filter_name["order"].split(" ")[0] + field = filter["order"].split(" ")[0] direction = filter["order"].split(" ")[1] return OrderFilter(field, direction) elif filter_name == "skip":