Skip to content

Commit 6572a15

Browse files
authored
Merge pull request #77 from passren/0.8.0
0.8.0 - several fixes
2 parents d567610 + 7aa8e38 commit 6572a15

20 files changed

Lines changed: 117 additions & 60 deletions

README.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ Features
6262
* MySQL-Like statements for Utility operations (LIST/SHOW TABLES, DESC TABLE)
6363
* Auto data type conversion for parameters and result set (Including date and datetime)
6464
* Transaction and Batch operations
65+
* Dict Resultset provided to support json conversion
6566
* SQLAlchemy dialect provided
6667
* Compatible for Superset SQL Lab and graphing
6768

pydynamodb/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
if TYPE_CHECKING:
77
from .connection import Connection
88

9-
__version__: str = "0.7.6"
9+
__version__: str = "0.8.0"
1010

1111
# Globals https://www.python.org/dev/peps/pep-0249/#globals
1212
apilevel: str = "2.0"

pydynamodb/connection.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -144,8 +144,8 @@ def __init__(
144144
self._converter = converter
145145
self._retry_config = retry_config if retry_config else RetryConfig()
146146
self.cursor_class = cursor_class
147-
self.cursor_kwargs = cursor_kwargs if cursor_kwargs else dict()
148-
self._cursor_pool = list()
147+
self.cursor_kwargs = cursor_kwargs if cursor_kwargs else {}
148+
self._cursor_pool = []
149149
self._autocommit = True
150150
self._in_transaction = False
151151

pydynamodb/executor.py

Lines changed: 27 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ def __init__(
4040
self._metadata: Metadata = Metadata()
4141
self._is_predef_metadata: bool = False
4242
self._rows: Deque[Tuple[Any]] = deque()
43-
self._errors: List[Dict[str, str]] = list()
43+
self._errors: List[Dict[str, str]] = []
4444
self._kwargs = kwargs
4545
self.pre_execute()
4646

@@ -205,7 +205,7 @@ def process_rows(self, response: Dict[str, Any]) -> None:
205205
if rows is None:
206206
raise DataError("KeyError `Items`")
207207

208-
processed_rows = list()
208+
processed_rows = []
209209
for row in rows:
210210
if self._is_predef_metadata:
211211
row_ = self._process_predef_row_item(row)
@@ -217,14 +217,14 @@ def process_rows(self, response: Dict[str, Any]) -> None:
217217
self._next_token = response.get("NextToken", None)
218218

219219
def _process_undef_row_item(self, row) -> Optional[Tuple]:
220-
row_ = dict()
220+
row_ = {}
221221
for col, val in row.items():
222222
type_ = next(iter(val.keys()))
223223
val_ = self._converter.deserialize(val)
224224
col_index = self._process_metadata(col, type_)
225225
row_[col_index] = val_
226226

227-
row__ = list()
227+
row__ = []
228228
for i in range(len(self._metadata)):
229229
row__.append(None)
230230
for i, v in row_.items():
@@ -309,27 +309,33 @@ def __init__(
309309
**kwargs,
310310
)
311311

312-
def process_rows(self, response: Dict[str, Any]) -> None:
313-
rows = response.get("Items", None)
314-
if rows is None:
315-
raise DataError("KeyError `Items`")
316-
317-
processed_rows = list()
318-
for row in rows:
319-
row_ = self._process_row_item(row)
320-
processed_rows.append(row_)
321-
322-
self._rows.extend(processed_rows)
323-
self._next_token = response.get("NextToken", None)
324-
325-
def _process_row_item(self, row) -> Optional[Dict[str, Any]]:
326-
row_ = dict()
312+
def _process_undef_row_item(self, row) -> Optional[Dict[str, Any]]:
313+
row_ = {}
327314
for col, val in row.items():
328315
val_ = self._converter.deserialize(val)
329316
row_[col] = val_
330317

331318
return row_
332319

320+
def _process_predef_row_item(self, row) -> Optional[Dict[str, Any]]:
321+
row_ = {}
322+
for col, val in row.items():
323+
col_info = self.metadata.get(col, None)
324+
if col_info:
325+
if col_info.function:
326+
val_ = self._converter.deserialize(
327+
val,
328+
function=col_info.function.name,
329+
function_params=col_info.function.params,
330+
)
331+
else:
332+
val_ = self._converter.deserialize(val)
333+
334+
col_name_ = col if col_info.alias is None else col_info.alias
335+
row_[col_name_] = val_
336+
337+
return row_
338+
333339

334340
class DmlBatchExecutor(DmlStatementExecutor):
335341
def __init__(
@@ -364,8 +370,8 @@ def process_rows(self, response: Dict[str, Any]) -> None:
364370
if rows is None:
365371
raise DataError("KeyError `Responses` in BatchStatementResponse")
366372

367-
processed_error_rows = list()
368-
processed_rows = list()
373+
processed_error_rows = []
374+
processed_rows = []
369375
for row in rows:
370376
error = row.get("Error", None)
371377
if error:

pydynamodb/model.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -187,7 +187,7 @@ def __init__(self, statements: List[Statement] = None) -> None:
187187
self._validate(statement_)
188188
self._statments = statements
189189
else:
190-
self._statments = list()
190+
self._statments = []
191191

192192
self._query_type = None
193193
self._query_category = None

pydynamodb/sql/ddl_alter.py

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -212,12 +212,12 @@ def transform(self) -> Dict[str, Any]:
212212
if self.root_parse_results is None:
213213
raise ValueError("Statement was not parsed yet")
214214

215-
request = dict()
215+
request = {}
216216
attr_def_ = None
217217

218218
for attr in self.root_parse_results["attributes"]:
219219
if attr_def_ is None:
220-
attr_def_ = list()
220+
attr_def_ = []
221221
attr_name = attr["attribute_name"]
222222
data_type = attr["data_type"]
223223
attr_def_.append(self._construct_attr_def(attr_name, data_type))
@@ -237,7 +237,7 @@ def transform(self) -> Dict[str, Any]:
237237

238238
if index_type == "GLOBAL":
239239
if gsis_ is None:
240-
gsis_ = list()
240+
gsis_ = []
241241

242242
if alter_ops == "CREATE" or alter_ops == "UPDATE":
243243
gsis_.append(
@@ -266,7 +266,7 @@ def transform(self) -> Dict[str, Any]:
266266
if replicas is not None:
267267
for replica in replicas:
268268
if replicas_ is None:
269-
replicas_ = list()
269+
replicas_ = []
270270
alter_ops = replica["alter_ops"]
271271

272272
if alter_ops == "CREATE" or alter_ops == "UPDATE":
@@ -311,7 +311,7 @@ def _get_alter_operation(self, ops: str) -> Optional[str]:
311311
raise LookupError("Alter operation is invalid")
312312

313313
def _construct_replica(self, replica: ParseResults) -> Dict[str, Any]:
314-
replicas_ = dict()
314+
replicas_ = {}
315315

316316
region_name = replica["region_name"]
317317
replicas_.update({"RegionName": region_name})
@@ -323,7 +323,7 @@ def _construct_replica(self, replica: ParseResults) -> Dict[str, Any]:
323323
if replica_options is not None:
324324
for replica_option in replica_options:
325325
if replica_options_ is None:
326-
replica_options_ = list()
326+
replica_options_ = []
327327

328328
if replica_option.get_name() == "replica_gsi_option":
329329
replica_gsi_option_ = replica_option
@@ -358,7 +358,7 @@ def _construct_replica_gsi(
358358

359359
if len(gsi) == 3:
360360
if gsis_ is None:
361-
gsis_ = list()
361+
gsis_ = []
362362

363363
option_path_name = gsi[1]
364364
option_value = gsi[2]

pydynamodb/sql/ddl_create.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,7 @@ def transform(self) -> Dict[str, Any]:
139139
if self.root_parse_results is None:
140140
raise ValueError("Statement was not parsed yet")
141141

142-
request = dict()
142+
request = {}
143143
is_global_table = (
144144
True if self.root_parse_results.get("global", None) is not None else False
145145
)
@@ -148,8 +148,8 @@ def transform(self) -> Dict[str, Any]:
148148
if is_global_table:
149149
request.update({"GlobalTableName": table_name_})
150150
else:
151-
attr_def_ = list()
152-
key_schema_ = list()
151+
attr_def_ = []
152+
key_schema_ = []
153153

154154
for attr in self.root_parse_results["attributes"]:
155155
attr_name = attr["attribute_name"]
@@ -173,11 +173,11 @@ def transform(self) -> Dict[str, Any]:
173173

174174
if index_type == "GLOBAL":
175175
if gsis_ is None:
176-
gsis_ = list()
176+
gsis_ = []
177177
gsis_.append(self._construct_index(index))
178178
elif index_type == "LOCAL":
179179
if lsis_ is None:
180-
lsis_ = list()
180+
lsis_ = []
181181
lsis_.append(self._construct_index(index))
182182
else:
183183
raise LookupError("Index type is invalid")

pydynamodb/sql/ddl_drop.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ def transform(self) -> Dict[str, Any]:
5151
if self.root_parse_results is None:
5252
raise ValueError("Statement was not parsed yet")
5353

54-
request = dict()
54+
request = {}
5555
is_global_table = (
5656
True if self.root_parse_results.get("global", None) is not None else False
5757
)

pydynamodb/sql/ddl_sql.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -174,13 +174,13 @@ def _construct_key_schema(self, attr_name: str, key_type: str) -> Dict[str, str]
174174
return {"AttributeName": attr_name, "KeyType": converted_key_type}
175175

176176
def _construct_index(self, index: ParseResults) -> Dict[str, Any]:
177-
index_ = dict()
177+
index_ = {}
178178
index_name = index["index_name"]
179179
index_.update({"IndexName": index_name})
180180

181181
attrs = index.get("attributes", None)
182182
if attrs:
183-
key_schema = list()
183+
key_schema = []
184184

185185
for attr in attrs:
186186
attr_name = attr["attribute_name"]
@@ -197,7 +197,7 @@ def _construct_options(self, options: List[Any]) -> Optional[Dict[str, Any]]:
197197
converted_ = None
198198
for option in options:
199199
if converted_ is None:
200-
converted_ = dict()
200+
converted_ = {}
201201
option_name_path = option[0]
202202
option_value = option[1]
203203

@@ -231,7 +231,7 @@ def _parse_option_path(
231231
return_dict: Dict[str, Any] = None,
232232
) -> Dict[str, Any]:
233233
if return_dict is None:
234-
return_dict = dict()
234+
return_dict = {}
235235

236236
names = option_name_path.split(".")
237237
names_size = len(names)

pydynamodb/sql/util.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77

88
def flatten_list(lst: List[Any]) -> List[Any]:
9-
items = list()
9+
items = []
1010
for item in lst:
1111
if isinstance(item, list):
1212
if len(item) > 2 and item[0] == "[" and item[-1] == "]":

0 commit comments

Comments
 (0)