@@ -36,16 +36,15 @@ def get_table(self, table_name):
3636 logger .error (str (e ), {"Result" : "Unable to connect to DB" })
3737 raise e
3838
39- def query_table_by_index (
40- self ,
41- table_name ,
42- index_name ,
43- search_key ,
44- search_condition : str ,
45- requested_fields : list [str ] = None ,
46- query_filter : Attr | ConditionBase = None ,
47- exclusive_start_key : dict = None ,
48- ):
39+ def query_table (
40+ self ,
41+ table_name ,
42+ search_key ,
43+ search_condition : str ,
44+ index_name : str = None ,
45+ requested_fields : list [str ] = None ,
46+ query_filter : Attr | ConditionBase = None ,
47+ ) -> list [dict ]:
4948 try :
5049 table = self .get_table (table_name )
5150
@@ -62,61 +61,21 @@ def query_table_by_index(
6261
6362 if query_filter :
6463 query_params ["FilterExpression" ] = query_filter
65- if exclusive_start_key :
66- query_params ["ExclusiveStartKey" ] = exclusive_start_key
67-
68- results = table .query (** query_params )
69-
70- if results is None or "Items" not in results :
71- logger .error (f"Unusable results in DynamoDB: { results !r} " )
72- raise DynamoServiceException ("Unrecognised response from DynamoDB" )
73-
74- return results
75- except ClientError as e :
76- logger .error (str (e ), {"Result" : f"Unable to query table: { table_name } " })
77- raise e
78-
79- def query_with_pagination (
80- self , table_name : str , search_key : str , search_condition : str
81- ):
82-
83- try :
84- table = self .get_table (table_name )
85- results = table .query (
86- KeyConditionExpression = Key (search_key ).eq (search_condition )
87- )
88- if results is None or "Items" not in results :
89- logger .error (f"Unusable results in DynamoDB: { results !r} " )
90- raise DynamoServiceException ("Unrecognised response from DynamoDB" )
64+ items = []
65+ while True :
66+ results = table .query (** query_params )
9167
92- dynamodb_scan_result = results ["Items" ]
68+ if results is None or "Items" not in results :
69+ logger .error (f"Unusable results in DynamoDB: { results !r} " )
70+ raise DynamoServiceException ("Unrecognised response from DynamoDB" )
9371
94- while "LastEvaluatedKey" in results :
95- start_key_for_next_page = results ["LastEvaluatedKey" ]
96- results = table .query (
97- KeyConditionExpression = Key (search_key ).eq (search_condition ),
98- ExclusiveStartKey = start_key_for_next_page ,
99- )
100- dynamodb_scan_result .extend (results ["Items" ])
101- return dynamodb_scan_result
102-
103- except ClientError as e :
104- logger .error (str (e ), {"Result" : f"Unable to query table: { table_name } " })
105- raise e
72+ items += results ["Items" ]
10673
107- def query_all_fields (self , table_name : str , search_key : str , search_condition : str ):
108- """
109- Allow querying dynamodb table without explicitly defining the fields to retrieve.
110- """
111- try :
112- table = self .get_table (table_name )
113- results = table .query (
114- KeyConditionExpression = Key (search_key ).eq (search_condition )
115- )
116- if results is None or "Items" not in results :
117- logger .error (f"Unusable results in DynamoDB: { results !r} " )
118- raise DynamoServiceException ("Unrecognised response from DynamoDB" )
119- return results
74+ if "LastEvaluatedKey" in results :
75+ query_params ["ExclusiveStartKey" ] = results ["LastEvaluatedKey" ]
76+ else :
77+ break
78+ return items
12079 except ClientError as e :
12180 logger .error (str (e ), {"Result" : f"Unable to query table: { table_name } " })
12281 raise e
0 commit comments