boto3-assist 0.1.4__py3-none-any.whl → 0.1.6__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -4,6 +4,9 @@ Maintainers: Eric Wilson
4
4
  MIT License. See Project Root for the license information.
5
5
  """
6
6
 
7
+ import traceback
8
+ import os
9
+
7
10
 
8
11
  class ConnectionTracker:
9
12
  """
@@ -12,23 +15,45 @@ class ConnectionTracker:
12
15
  """
13
16
 
14
17
  def __init__(self, service_name: str) -> None:
18
+ self.__stack_trace_env_var: str = "ISSUE_STACK_TRACE"
15
19
  self.__connection_couter: int = 0
16
20
  self.__service_name: str = service_name
21
+ self.__issue_stack_trace: bool = (
22
+ os.getenv(f"{self.__stack_trace_env_var}", "false") == "true"
23
+ )
17
24
 
18
25
  def increment_connection(self) -> None:
19
26
  """Increments the connection counter"""
20
27
  self.__connection_couter += 1
21
28
 
22
29
  if self.connection_count > 1:
30
+ service_message = ""
31
+ stack_trace_message = ""
32
+ if self.__service_name:
33
+ service_message = f"Your {self.__service_name} service has more than one connection.\n"
34
+
35
+ if not self.__issue_stack_trace:
36
+ stack_trace_message = (
37
+ f"\nTo add addtional information to the log and determine where additional connections are being created"
38
+ f", set the environment variable {self.__stack_trace_env_var} to true.\n"
39
+ )
23
40
  self.__log_warning(
41
+ f"{service_message}"
24
42
  f"Your dynamodb connection count is {self.connection_count}. "
25
43
  "Under most circumstances you should be able to use the same connection "
26
44
  "vs. creating a new one. Connections are expensive in terms of time / latency. "
27
45
  "If you are seeing perforance issues, check how and where you are creating your "
28
46
  "connections. You should be able to pass the .db connection to your other objects "
29
47
  "and reuse your dynamodb boto connections."
48
+ f"{stack_trace_message}"
30
49
  )
31
50
 
51
+ # do a stack trace
52
+ if self.__issue_stack_trace:
53
+ print("Stack Trace")
54
+ traceback.print_stack()
55
+ print("")
56
+
32
57
  def decrement_connection(self) -> None:
33
58
  """Decrements the connection counter"""
34
59
  self.__connection_couter -= 1
@@ -38,9 +38,11 @@ class DynamoDBImporter:
38
38
  raise FileNotFoundError(f"File not found: {json_file_path}")
39
39
  if json_file_path.endswith(".gz"):
40
40
  data = self.read_gzip_file(json_file_path)
41
- else:
41
+ elif json_file_path.endswith(".json"):
42
42
  with open(json_file_path, "r", encoding="utf-8") as json_file:
43
43
  data = json.load(json_file)
44
+ else:
45
+ raise ValueError(f"Unsupported file type: {json_file_path}")
44
46
 
45
47
  # table = self.db.dynamodb_resource.Table(self.table_name)
46
48
  # with table.batch_writer() as batch:
@@ -58,7 +60,22 @@ class DynamoDBImporter:
58
60
  def import_json_files(self, json_file_paths: list[str]) -> None:
59
61
  """Import multiple json files into the database"""
60
62
  for json_file_path in json_file_paths:
61
- self.import_json_file(json_file_path)
63
+ if os.path.exists(json_file_path) is False:
64
+ raise FileNotFoundError(f"File not found: {json_file_path}")
65
+ else:
66
+ if json_file_path.endswith(".gz") or json_file_path.endswith(".json"):
67
+ self.import_json_file(json_file_path)
68
+ else:
69
+ if os.path.isdir(json_file_path):
70
+ logger.warning(
71
+ f"Unsupported sub directory import {json_file_path}. "
72
+ "Skipping import on this file."
73
+ )
74
+ else:
75
+ logger.warning(
76
+ f"Unsupported file type: {json_file_path}. "
77
+ "Skipping import on this file. Files should end with .gz or .json"
78
+ )
62
79
 
63
80
  def read_gzip_file(self, file_path: str) -> List[dict]:
64
81
  """
@@ -18,6 +18,7 @@ from boto3_assist.dynamodb.dynamodb_index import (
18
18
  DynamoDBIndexes,
19
19
  DynamoDBIndex,
20
20
  )
21
+ from boto3_assist.dynamodb.dynamodb_reserved_words import DynamoDBReservedWords
21
22
 
22
23
 
23
24
  def exclude_from_serialization(method):
@@ -41,11 +42,13 @@ class DynamoDBModelBase:
41
42
 
42
43
  T = TypeVar("T", bound="DynamoDBModelBase")
43
44
 
44
- def __init__(self) -> None:
45
+ def __init__(self, auto_generate_projections: bool = True) -> None:
45
46
  self.__projection_expression: str | None = None
46
47
  self.__projection_expression_attribute_names: dict | None = None
47
48
  self.__helpers: DynamoDBHelpers | None = None
48
49
  self.__indexes: DynamoDBIndexes | None = None
50
+ self.__reserved_words: DynamoDBReservedWords = DynamoDBReservedWords()
51
+ self.auto_generate_projections: bool = auto_generate_projections
49
52
 
50
53
  @property
51
54
  @exclude_from_serialization
@@ -61,6 +64,14 @@ class DynamoDBModelBase:
61
64
  @exclude_from_serialization
62
65
  def projection_expression(self) -> str | None:
63
66
  """Gets the projection expression"""
67
+ if self.__projection_expression is None and self.auto_generate_projections:
68
+ props = self.to_dictionary()
69
+ # turn props to a list[str]
70
+ prop_list = list(props.keys())
71
+
72
+ transformed_list = self.__reserved_words.tranform_projections(prop_list)
73
+ self.projection_expression = ",".join(transformed_list)
74
+
64
75
  return self.__projection_expression
65
76
 
66
77
  @projection_expression.setter
@@ -70,7 +81,21 @@ class DynamoDBModelBase:
70
81
  @property
71
82
  @exclude_from_serialization
72
83
  def projection_expression_attribute_names(self) -> dict | None:
73
- """Gets the projection expression attribute names"""
84
+ """
85
+ Gets the projection expression attribute names
86
+
87
+ """
88
+ if (
89
+ self.__projection_expression_attribute_names is None
90
+ and self.auto_generate_projections
91
+ ):
92
+ props = self.to_dictionary()
93
+ # turn props to a list[str]
94
+ prop_list = list(props.keys())
95
+ self.projection_expression_attribute_names = (
96
+ self.__reserved_words.transform_attributes(prop_list)
97
+ )
98
+
74
99
  return self.__projection_expression_attribute_names
75
100
 
76
101
  @projection_expression_attribute_names.setter
@@ -0,0 +1,45 @@
1
+ import os
2
+ from typing import List
3
+
4
+
5
+ class DynamoDBReservedWords:
6
+ """Reserved Word"""
7
+
8
+ def __init__(self) -> None:
9
+ self.__list: List[str] = self.__read_list()
10
+
11
+ def words(self) -> List[str]:
12
+ """Gets a list of dynamodb reserved words"""
13
+ return self.__list
14
+
15
+ def __read_list(self) -> List[str]:
16
+ path = os.path.dirname(__file__)
17
+ path = os.path.join(path, "dynamodb_reserved_words.txt")
18
+ with open(path, "r", encoding="utf-8") as f:
19
+ words = f.read().splitlines()
20
+ # make sure they are all in uppercase
21
+ for i, word in enumerate(words):
22
+ words[i] = word.upper()
23
+ return words
24
+
25
+ def is_reserved_word(self, word: str) -> bool:
26
+ """Checks if a word is a dynamodb reserved word"""
27
+ return word.upper() in self.__list
28
+
29
+ def tranform_projections(self, projections: List[str] | str) -> List[str]:
30
+ """Transforms a list of projections to remove reserved words"""
31
+ if isinstance(projections, str):
32
+ projections = projections.split(",")
33
+
34
+ # any project that exists add a # infront of it
35
+ projections = ["#" + p if self.is_reserved_word(p) else p for p in projections]
36
+ return projections
37
+
38
+ def transform_attributes(self, attributes: dict) -> dict:
39
+ """Transforms a dict of attributes to remove reserved words"""
40
+ transformed_attributes: dict | None = {}
41
+ for k, v in attributes.items():
42
+ if self.is_reserved_word(k):
43
+ transformed_attributes["#" + k] = v
44
+
45
+ return transformed_attributes
@@ -0,0 +1,574 @@
1
+
2
+ ABORT
3
+ ABSOLUTE
4
+ ACTION
5
+ ADD
6
+ AFTER
7
+ AGENT
8
+ AGGREGATE
9
+ ALL
10
+ ALLOCATE
11
+ ALTER
12
+ ANALYZE
13
+ AND
14
+ ANY
15
+ ARCHIVE
16
+ ARE
17
+ ARRAY
18
+ AS
19
+ ASC
20
+ ASCII
21
+ ASENSITIVE
22
+ ASSERTION
23
+ ASYMMETRIC
24
+ AT
25
+ ATOMIC
26
+ ATTACH
27
+ ATTRIBUTE
28
+ AUTH
29
+ AUTHORIZATION
30
+ AUTHORIZE
31
+ AUTO
32
+ AVG
33
+ BACK
34
+ BACKUP
35
+ BASE
36
+ BATCH
37
+ BEFORE
38
+ BEGIN
39
+ BETWEEN
40
+ BIGINT
41
+ BINARY
42
+ BIT
43
+ BLOB
44
+ BLOCK
45
+ BOOLEAN
46
+ BOTH
47
+ BREADTH
48
+ BUCKET
49
+ BULK
50
+ BY
51
+ BYTE
52
+ CALL
53
+ CALLED
54
+ CALLING
55
+ CAPACITY
56
+ CASCADE
57
+ CASCADED
58
+ CASE
59
+ CAST
60
+ CATALOG
61
+ CHAR
62
+ CHARACTER
63
+ CHECK
64
+ CLASS
65
+ CLOB
66
+ CLOSE
67
+ CLUSTER
68
+ CLUSTERED
69
+ CLUSTERING
70
+ CLUSTERS
71
+ COALESCE
72
+ COLLATE
73
+ COLLATION
74
+ COLLECTION
75
+ COLUMN
76
+ COLUMNS
77
+ COMBINE
78
+ COMMENT
79
+ COMMIT
80
+ COMPACT
81
+ COMPILE
82
+ COMPRESS
83
+ CONDITION
84
+ CONFLICT
85
+ CONNECT
86
+ CONNECTION
87
+ CONSISTENCY
88
+ CONSISTENT
89
+ CONSTRAINT
90
+ CONSTRAINTS
91
+ CONSTRUCTOR
92
+ CONSUMED
93
+ CONTINUE
94
+ CONVERT
95
+ COPY
96
+ CORRESPONDING
97
+ COUNT
98
+ COUNTER
99
+ CREATE
100
+ CROSS
101
+ CUBE
102
+ CURRENT
103
+ CURSOR
104
+ CYCLE
105
+ DATA
106
+ DATABASE
107
+ DATE
108
+ DATETIME
109
+ DAY
110
+ DEALLOCATE
111
+ DEC
112
+ DECIMAL
113
+ DECLARE
114
+ DEFAULT
115
+ DEFERRABLE
116
+ DEFERRED
117
+ DEFINE
118
+ DEFINED
119
+ DEFINITION
120
+ DELETE
121
+ DELIMITED
122
+ DEPTH
123
+ DEREF
124
+ DESC
125
+ DESCRIBE
126
+ DESCRIPTOR
127
+ DETACH
128
+ DETERMINISTIC
129
+ DIAGNOSTICS
130
+ DIRECTORIES
131
+ DISABLE
132
+ DISCONNECT
133
+ DISTINCT
134
+ DISTRIBUTE
135
+ DO
136
+ DOMAIN
137
+ DOUBLE
138
+ DROP
139
+ DUMP
140
+ DURATION
141
+ DYNAMIC
142
+ EACH
143
+ ELEMENT
144
+ ELSE
145
+ ELSEIF
146
+ EMPTY
147
+ ENABLE
148
+ END
149
+ EQUAL
150
+ EQUALS
151
+ ERROR
152
+ ESCAPE
153
+ ESCAPED
154
+ EVAL
155
+ EVALUATE
156
+ EXCEEDED
157
+ EXCEPT
158
+ EXCEPTION
159
+ EXCEPTIONS
160
+ EXCLUSIVE
161
+ EXEC
162
+ EXECUTE
163
+ EXISTS
164
+ EXIT
165
+ EXPLAIN
166
+ EXPLODE
167
+ EXPORT
168
+ EXPRESSION
169
+ EXTENDED
170
+ EXTERNAL
171
+ EXTRACT
172
+ FAIL
173
+ FALSE
174
+ FAMILY
175
+ FETCH
176
+ FIELDS
177
+ FILE
178
+ FILTER
179
+ FILTERING
180
+ FINAL
181
+ FINISH
182
+ FIRST
183
+ FIXED
184
+ FLATTERN
185
+ FLOAT
186
+ FOR
187
+ FORCE
188
+ FOREIGN
189
+ FORMAT
190
+ FORWARD
191
+ FOUND
192
+ FREE
193
+ FROM
194
+ FULL
195
+ FUNCTION
196
+ FUNCTIONS
197
+ GENERAL
198
+ GENERATE
199
+ GET
200
+ GLOB
201
+ GLOBAL
202
+ GO
203
+ GOTO
204
+ GRANT
205
+ GREATER
206
+ GROUP
207
+ GROUPING
208
+ HANDLER
209
+ HASH
210
+ HAVE
211
+ HAVING
212
+ HEAP
213
+ HIDDEN
214
+ HOLD
215
+ HOUR
216
+ IDENTIFIED
217
+ IDENTITY
218
+ IF
219
+ IGNORE
220
+ IMMEDIATE
221
+ IMPORT
222
+ IN
223
+ INCLUDING
224
+ INCLUSIVE
225
+ INCREMENT
226
+ INCREMENTAL
227
+ INDEX
228
+ INDEXED
229
+ INDEXES
230
+ INDICATOR
231
+ INFINITE
232
+ INITIALLY
233
+ INLINE
234
+ INNER
235
+ INNTER
236
+ INOUT
237
+ INPUT
238
+ INSENSITIVE
239
+ INSERT
240
+ INSTEAD
241
+ INT
242
+ INTEGER
243
+ INTERSECT
244
+ INTERVAL
245
+ INTO
246
+ INVALIDATE
247
+ IS
248
+ ISOLATION
249
+ ITEM
250
+ ITEMS
251
+ ITERATE
252
+ JOIN
253
+ KEY
254
+ KEYS
255
+ LAG
256
+ LANGUAGE
257
+ LARGE
258
+ LAST
259
+ LATERAL
260
+ LEAD
261
+ LEADING
262
+ LEAVE
263
+ LEFT
264
+ LENGTH
265
+ LESS
266
+ LEVEL
267
+ LIKE
268
+ LIMIT
269
+ LIMITED
270
+ LINES
271
+ LIST
272
+ LOAD
273
+ LOCAL
274
+ LOCALTIME
275
+ LOCALTIMESTAMP
276
+ LOCATION
277
+ LOCATOR
278
+ LOCK
279
+ LOCKS
280
+ LOG
281
+ LOGED
282
+ LONG
283
+ LOOP
284
+ LOWER
285
+ MAP
286
+ MATCH
287
+ MATERIALIZED
288
+ MAX
289
+ MAXLEN
290
+ MEMBER
291
+ MERGE
292
+ METHOD
293
+ METRICS
294
+ MIN
295
+ MINUS
296
+ MINUTE
297
+ MISSING
298
+ MOD
299
+ MODE
300
+ MODIFIES
301
+ MODIFY
302
+ MODULE
303
+ MONTH
304
+ MULTI
305
+ MULTISET
306
+ NAME
307
+ NAMES
308
+ NATIONAL
309
+ NATURAL
310
+ NCHAR
311
+ NCLOB
312
+ NEW
313
+ NEXT
314
+ NO
315
+ NONE
316
+ NOT
317
+ NULL
318
+ NULLIF
319
+ NUMBER
320
+ NUMERIC
321
+ OBJECT
322
+ OF
323
+ OFFLINE
324
+ OFFSET
325
+ OLD
326
+ ON
327
+ ONLINE
328
+ ONLY
329
+ OPAQUE
330
+ OPEN
331
+ OPERATOR
332
+ OPTION
333
+ OR
334
+ ORDER
335
+ ORDINALITY
336
+ OTHER
337
+ OTHERS
338
+ OUT
339
+ OUTER
340
+ OUTPUT
341
+ OVER
342
+ OVERLAPS
343
+ OVERRIDE
344
+ OWNER
345
+ PAD
346
+ PARALLEL
347
+ PARAMETER
348
+ PARAMETERS
349
+ PARTIAL
350
+ PARTITION
351
+ PARTITIONED
352
+ PARTITIONS
353
+ PATH
354
+ PERCENT
355
+ PERCENTILE
356
+ PERMISSION
357
+ PERMISSIONS
358
+ PIPE
359
+ PIPELINED
360
+ PLAN
361
+ POOL
362
+ POSITION
363
+ PRECISION
364
+ PREPARE
365
+ PRESERVE
366
+ PRIMARY
367
+ PRIOR
368
+ PRIVATE
369
+ PRIVILEGES
370
+ PROCEDURE
371
+ PROCESSED
372
+ PROJECT
373
+ PROJECTION
374
+ PROPERTY
375
+ PROVISIONING
376
+ PUBLIC
377
+ PUT
378
+ QUERY
379
+ QUIT
380
+ QUORUM
381
+ RAISE
382
+ RANDOM
383
+ RANGE
384
+ RANK
385
+ RAW
386
+ READ
387
+ READS
388
+ REAL
389
+ REBUILD
390
+ RECORD
391
+ RECURSIVE
392
+ REDUCE
393
+ REF
394
+ REFERENCE
395
+ REFERENCES
396
+ REFERENCING
397
+ REGEXP
398
+ REGION
399
+ REINDEX
400
+ RELATIVE
401
+ RELEASE
402
+ REMAINDER
403
+ RENAME
404
+ REPEAT
405
+ REPLACE
406
+ REQUEST
407
+ RESET
408
+ RESIGNAL
409
+ RESOURCE
410
+ RESPONSE
411
+ RESTORE
412
+ RESTRICT
413
+ RESULT
414
+ RETURN
415
+ RETURNING
416
+ RETURNS
417
+ REVERSE
418
+ REVOKE
419
+ RIGHT
420
+ ROLE
421
+ ROLES
422
+ ROLLBACK
423
+ ROLLUP
424
+ ROUTINE
425
+ ROW
426
+ ROWS
427
+ RULE
428
+ RULES
429
+ SAMPLE
430
+ SATISFIES
431
+ SAVE
432
+ SAVEPOINT
433
+ SCAN
434
+ SCHEMA
435
+ SCOPE
436
+ SCROLL
437
+ SEARCH
438
+ SECOND
439
+ SECTION
440
+ SEGMENT
441
+ SEGMENTS
442
+ SELECT
443
+ SELF
444
+ SEMI
445
+ SENSITIVE
446
+ SEPARATE
447
+ SEQUENCE
448
+ SERIALIZABLE
449
+ SESSION
450
+ SET
451
+ SETS
452
+ SHARD
453
+ SHARE
454
+ SHARED
455
+ SHORT
456
+ SHOW
457
+ SIGNAL
458
+ SIMILAR
459
+ SIZE
460
+ SKEWED
461
+ SMALLINT
462
+ SNAPSHOT
463
+ SOME
464
+ SOURCE
465
+ SPACE
466
+ SPACES
467
+ SPARSE
468
+ SPECIFIC
469
+ SPECIFICTYPE
470
+ SPLIT
471
+ SQL
472
+ SQLCODE
473
+ SQLERROR
474
+ SQLEXCEPTION
475
+ SQLSTATE
476
+ SQLWARNING
477
+ START
478
+ STATE
479
+ STATIC
480
+ STATUS
481
+ STORAGE
482
+ STORE
483
+ STORED
484
+ STREAM
485
+ STRING
486
+ STRUCT
487
+ STYLE
488
+ SUB
489
+ SUBMULTISET
490
+ SUBPARTITION
491
+ SUBSTRING
492
+ SUBTYPE
493
+ SUM
494
+ SUPER
495
+ SYMMETRIC
496
+ SYNONYM
497
+ SYSTEM
498
+ TABLE
499
+ TABLESAMPLE
500
+ TEMP
501
+ TEMPORARY
502
+ TERMINATED
503
+ TEXT
504
+ THAN
505
+ THEN
506
+ THROUGHPUT
507
+ TIME
508
+ TIMESTAMP
509
+ TIMEZONE
510
+ TINYINT
511
+ TO
512
+ TOKEN
513
+ TOTAL
514
+ TOUCH
515
+ TRAILING
516
+ TRANSACTION
517
+ TRANSFORM
518
+ TRANSLATE
519
+ TRANSLATION
520
+ TREAT
521
+ TRIGGER
522
+ TRIM
523
+ TRUE
524
+ TRUNCATE
525
+ TTL
526
+ TUPLE
527
+ TYPE
528
+ UNDER
529
+ UNDO
530
+ UNION
531
+ UNIQUE
532
+ UNIT
533
+ UNKNOWN
534
+ UNLOGGED
535
+ UNNEST
536
+ UNPROCESSED
537
+ UNSIGNED
538
+ UNTIL
539
+ UPDATE
540
+ UPPER
541
+ URL
542
+ USAGE
543
+ USE
544
+ USER
545
+ USERS
546
+ USING
547
+ UUID
548
+ VACUUM
549
+ VALUE
550
+ VALUED
551
+ VALUES
552
+ VARCHAR
553
+ VARIABLE
554
+ VARIANCE
555
+ VARINT
556
+ VARYING
557
+ VIEW
558
+ VIEWS
559
+ VIRTUAL
560
+ VOID
561
+ WAIT
562
+ WHEN
563
+ WHENEVER
564
+ WHERE
565
+ WHILE
566
+ WINDOW
567
+ WITH
568
+ WITHIN
569
+ WITHOUT
570
+ WORK
571
+ WRAPPED
572
+ WRITE
573
+ YEAR
574
+ ZONE
boto3_assist/version.py CHANGED
@@ -1 +1 @@
1
- __version__ = '0.1.4'
1
+ __version__ = '0.1.6'
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: boto3_assist
3
- Version: 0.1.4
3
+ Version: 0.1.6
4
4
  Summary: Additional boto3 wrappers to make your life a little easier
5
5
  Author-email: Eric Wilson <boto3-assist@geekcafe.com>
6
6
  License-File: LICENSE-EXPLAINED.txt
@@ -1,18 +1,20 @@
1
1
  boto3_assist/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
2
  boto3_assist/boto3session.py,sha256=J20E2lkqJOaey4Ohi-xRe2xABj7QsA8DrggzK29-5es,6415
3
- boto3_assist/connection_tracker.py,sha256=k59-7CdEvo5Slab80wwYz65sE1-sxVP1-wpQhZZXBZo,1632
4
- boto3_assist/version.py,sha256=aBEbDvx4LMg8A1TJJR6dEHu8rQODVin528hLS_EDvuA,22
3
+ boto3_assist/connection_tracker.py,sha256=WYRdDSozJlxbFY_oYQAlGRpDgFWsF_nAiN7CIzh_yVo,2637
4
+ boto3_assist/version.py,sha256=gW5NUxwGdPsiQjn0cOuuQT11pfthByI5DITDg_HMhLQ,22
5
5
  boto3_assist/dynamodb/dynamodb.py,sha256=vV0HvFCESnVK6BcAfcrWsMsNxIIsctvDX_3xdzOVCT0,14623
6
6
  boto3_assist/dynamodb/dynamodb_connection.py,sha256=JMCmWOsMzy45rikGl3Z2xqlG2vUTEKSYqi6dpsfJ750,4418
7
7
  boto3_assist/dynamodb/dynamodb_connection_tracker.py,sha256=nTNQ99sIidDoLMhMbBju2umgLmcttsmnvmd_DMy_J9M,1582
8
8
  boto3_assist/dynamodb/dynamodb_helpers.py,sha256=ajpTJ5bJOm9PDgE2Zx9p2zkTRFV4xswqJRS81SOTn1s,12198
9
- boto3_assist/dynamodb/dynamodb_importer.py,sha256=8SlT2W03Dvb3LIs6xqtzXP4IShyv655PgMCDNr4kmPk,2559
9
+ boto3_assist/dynamodb/dynamodb_importer.py,sha256=nCKsyRQeMqDSf0Q5mQ_X_oVIg4PRnu0hcUzZnBli610,3471
10
10
  boto3_assist/dynamodb/dynamodb_index.py,sha256=LRQgSci222s-pU-JXgnaAoOa71ABX9h3uJPeCVPl1GE,6315
11
11
  boto3_assist/dynamodb/dynamodb_iservice.py,sha256=2AuaKxt7DUZbB-GpBBtPtPMpAlgZkumkAldm8vy7-sg,701
12
12
  boto3_assist/dynamodb/dynamodb_key.py,sha256=X3I3gUPx2T858vjRDi9SN8qn8ez5UJUo0vZiKBeeUWg,1776
13
- boto3_assist/dynamodb/dynamodb_model_base.py,sha256=IIcqdMN1SMvaDAvN2x1j8FMUPyVp8SdH8Vai8Qr4Nfs,11308
13
+ boto3_assist/dynamodb/dynamodb_model_base.py,sha256=oFO5xRjLy8bDK7CFUFhAdPCQNTgVF7ffSTFUuCg6qRw,12366
14
14
  boto3_assist/dynamodb/dynamodb_model_base_interfaces.py,sha256=yT4zDRI8vP15WVOHnCvY3FsEy_QSIta5-bnUby70Xow,747
15
15
  boto3_assist/dynamodb/dynamodb_reindexer.py,sha256=_I-W7Ply-82fRHnhsRZuquRYxEIXubuWGq7E7B4Pa7I,6204
16
+ boto3_assist/dynamodb/dynamodb_reserved_words.py,sha256=rXLNJrvdBxqir8HC0AZ15P8eQKiRYvQoF8ZeGQetMYY,1614
17
+ boto3_assist/dynamodb/dynamodb_reserved_words.txt,sha256=CanugFPh7rpgJ_jH9k4t8ANycrZJWTjT09sWiW4LC68,4137
16
18
  boto3_assist/dynamodb/readme.md,sha256=wNMzdRwk0qRV0kE88UUYnJos3pEK0HNjEIVkq2PATf8,1490
17
19
  boto3_assist/dynamodb/troubleshooting.md,sha256=uGpBaBUt_MyzjzwFOLOe0udTgcvaOpiTFxfj7ilLNkM,136
18
20
  boto3_assist/ec2/ec2_connection.py,sha256=KN1AivKY6yYpx_AjmaA3aQUZtUwKIvWk4FO8OPq1aTY,3182
@@ -23,8 +25,8 @@ boto3_assist/utilities/datetime_utility.py,sha256=TbqGQkJDTahqvaZAIV550nhYnW1Bsq
23
25
  boto3_assist/utilities/logging_utility.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
24
26
  boto3_assist/utilities/serialization_utility.py,sha256=s_QQRIhtwIE7xN5nU13mNk2wtWyErBX_Sg7n0gbHj-M,4308
25
27
  boto3_assist/utilities/string_utility.py,sha256=w8l063UT3GE48tuJopETyZrjG4CgAzWkyDWMAYMg5Og,7432
26
- boto3_assist-0.1.4.dist-info/METADATA,sha256=m0RXVLD_x6l3VwV3g_EaXvmpwnXfJgDVQNvbrfG0N3M,1804
27
- boto3_assist-0.1.4.dist-info/WHEEL,sha256=1yFddiXMmvYK7QYTqtRNtX66WJ0Mz8PYEiEUoOUUxRY,87
28
- boto3_assist-0.1.4.dist-info/licenses/LICENSE-EXPLAINED.txt,sha256=WFREvTpfTjPjDHpOLADxJpCKpIla3Ht87RUUGii4ODU,606
29
- boto3_assist-0.1.4.dist-info/licenses/LICENSE.txt,sha256=PXDhFWS5L5aOTkVhNvoitHKbAkgxqMI2uUPQyrnXGiI,1105
30
- boto3_assist-0.1.4.dist-info/RECORD,,
28
+ boto3_assist-0.1.6.dist-info/METADATA,sha256=F1oXRaLZiWtSBnd6aVv72rh_i7GvGqyrPdv9luI5KvY,1804
29
+ boto3_assist-0.1.6.dist-info/WHEEL,sha256=1yFddiXMmvYK7QYTqtRNtX66WJ0Mz8PYEiEUoOUUxRY,87
30
+ boto3_assist-0.1.6.dist-info/licenses/LICENSE-EXPLAINED.txt,sha256=WFREvTpfTjPjDHpOLADxJpCKpIla3Ht87RUUGii4ODU,606
31
+ boto3_assist-0.1.6.dist-info/licenses/LICENSE.txt,sha256=PXDhFWS5L5aOTkVhNvoitHKbAkgxqMI2uUPQyrnXGiI,1105
32
+ boto3_assist-0.1.6.dist-info/RECORD,,