Skip to content

Commit feda23a

Browse files
committed
wip
1 parent 216cff3 commit feda23a

File tree

1 file changed

+28
-15
lines changed

1 file changed

+28
-15
lines changed

dynolayer/dynolayer.py

+28-15
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
from datetime import datetime
77
from dotenv import load_dotenv
88
from decimal import Decimal
9+
from typing import Literal
910

1011

1112
class DynoLayer:
@@ -23,15 +24,15 @@ def __init__(
2324
self._timestamps = timestamps
2425
self._limit = 50
2526
self._offset = False
26-
self._order_by = None
27-
self._count = None
27+
self._order_by = {}
28+
self._count = 0
2829
self._secondary_index = None
2930
self._attributes_to_get = None
3031
self._filter_expression = None
3132
self._filter_params = None
32-
self._filter_params_name = None
33-
self._last_evaluated_key = None
34-
self._error = None
33+
self._filter_params_name = {}
34+
self._last_evaluated_key = {}
35+
self._error = ''
3536
self._is_find_by = False
3637
self._is_query_operation = False
3738
self._just_count = False
@@ -81,12 +82,19 @@ def _load_dynamo(self):
8182
8283
Returns:
8384
self: The DynoLayer.
85+
query_by('likes', '>', 10)
8486
"""
8587

86-
def query_by(self, key: str, key_value, secondary_index=None):
88+
def query_by(
89+
self,
90+
key: str,
91+
comparator: Literal["=", "<>", "<", "<=", ">", ">="],
92+
key_value,
93+
secondary_index = None
94+
):
8795
self._is_query_operation = True
8896
self._secondary_index = secondary_index
89-
return self.find_by(key, key_value)
97+
return self.find_by(key, comparator, key_value)
9098

9199
"""
92100
Args:
@@ -99,9 +107,9 @@ def query_by(self, key: str, key_value, secondary_index=None):
99107

100108
def find(
101109
self,
102-
filter_expression: str = None,
103-
filter_params: dict = None,
104-
filter_params_name: dict = None
110+
filter_expression: str = '',
111+
filter_params: dict = {},
112+
filter_params_name: dict = {}
105113
):
106114
self._filter_expression = filter_expression
107115
self._filter_params = filter_params
@@ -131,13 +139,18 @@ def query(
131139
self: The DynoLayer.
132140
"""
133141

134-
def find_by(self, attribute: str, attribute_value):
142+
def find_by(
143+
self,
144+
attribute: str,
145+
comparator: Literal["=", "<>", "<", "<=", ">", ">="],
146+
attribute_value
147+
):
135148
self._is_find_by = True
136149

137150
if isinstance(attribute_value, dict) or isinstance(attribute_value, list):
138151
attribute_value = json.dumps(attribute_value)
139152

140-
self._filter_expression = f'#{attribute} = :{attribute}'
153+
self._filter_expression = f'#{attribute} {comparator} :{attribute}'
141154
self._filter_params = {
142155
f':{attribute}': attribute_value
143156
}
@@ -383,8 +396,7 @@ def error(self) -> str:
383396

384397
def _safe(self):
385398
if self._timestamps:
386-
zone = os.environ.get('TIMESTAMP_TIMEZONE') if os.environ.get('TIMESTAMP_TIMEZONE',
387-
None) else 'America/Sao_Paulo'
399+
zone = os.environ.get('TIMESTAMP_TIMEZONE', 'America/Sao_Paulo')
388400
timezone = pytz.timezone(zone)
389401
current_date = datetime.now(timezone)
390402
if not self._data.get(self._partition_key):
@@ -407,7 +419,7 @@ def _required(self):
407419
required = True
408420
if len(self._required_fields) == 0:
409421
return required
410-
for key, value in self._data.items():
422+
for key, _ in self._data.items():
411423
if key not in self._required_fields:
412424
required = False
413425
else:
@@ -503,3 +515,4 @@ def _order_response(self, response, object=False):
503515
return transformed_response
504516

505517
return response
518+

0 commit comments

Comments
 (0)