boto3-assist 0.9.1__tar.gz → 0.9.3__tar.gz

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.
Files changed (126) hide show
  1. {boto3_assist-0.9.1 → boto3_assist-0.9.3}/PKG-INFO +1 -1
  2. {boto3_assist-0.9.1 → boto3_assist-0.9.3}/pyproject.toml +1 -1
  3. boto3_assist-0.9.3/src/boto3_assist/aws_lambda/mock_context.py +4 -0
  4. {boto3_assist-0.9.1 → boto3_assist-0.9.3}/src/boto3_assist/s3/s3_object.py +19 -0
  5. {boto3_assist-0.9.1 → boto3_assist-0.9.3}/src/boto3_assist/utilities/serialization_utility.py +3 -0
  6. boto3_assist-0.9.3/src/boto3_assist/version.py +1 -0
  7. {boto3_assist-0.9.1 → boto3_assist-0.9.3}/tests/models/serializable_model_test.py +13 -2
  8. boto3_assist-0.9.1/src/boto3_assist/version.py +0 -1
  9. {boto3_assist-0.9.1 → boto3_assist-0.9.3}/.env.docker +0 -0
  10. {boto3_assist-0.9.1 → boto3_assist-0.9.3}/.env.docker.001 +0 -0
  11. {boto3_assist-0.9.1 → boto3_assist-0.9.3}/.env.docker.nosql.workbench +0 -0
  12. {boto3_assist-0.9.1 → boto3_assist-0.9.3}/.env.unittest +0 -0
  13. {boto3_assist-0.9.1 → boto3_assist-0.9.3}/.gitignore +0 -0
  14. {boto3_assist-0.9.1 → boto3_assist-0.9.3}/.vscode/launch.json +0 -0
  15. {boto3_assist-0.9.1 → boto3_assist-0.9.3}/.vscode/settings.json +0 -0
  16. {boto3_assist-0.9.1 → boto3_assist-0.9.3}/.vscode/tasks.json +0 -0
  17. {boto3_assist-0.9.1 → boto3_assist-0.9.3}/LICENSE-EXPLAINED.txt +0 -0
  18. {boto3_assist-0.9.1 → boto3_assist-0.9.3}/LICENSE.txt +0 -0
  19. {boto3_assist-0.9.1 → boto3_assist-0.9.3}/README.md +0 -0
  20. {boto3_assist-0.9.1 → boto3_assist-0.9.3}/aws_regions_with_status.csv +0 -0
  21. {boto3_assist-0.9.1 → boto3_assist-0.9.3}/aws_regions_with_status.json +0 -0
  22. {boto3_assist-0.9.1 → boto3_assist-0.9.3}/devops/build.py +0 -0
  23. {boto3_assist-0.9.1 → boto3_assist-0.9.3}/devops/readme.md +0 -0
  24. {boto3_assist-0.9.1 → boto3_assist-0.9.3}/examples/__init__.py +0 -0
  25. {boto3_assist-0.9.1 → boto3_assist-0.9.3}/examples/cloudwatch/log_report.py +0 -0
  26. {boto3_assist-0.9.1 → boto3_assist-0.9.3}/examples/dynamodb/models/order_item_model.py +0 -0
  27. {boto3_assist-0.9.1 → boto3_assist-0.9.3}/examples/dynamodb/models/order_model.py +0 -0
  28. {boto3_assist-0.9.1 → boto3_assist-0.9.3}/examples/dynamodb/models/product_model.py +0 -0
  29. {boto3_assist-0.9.1 → boto3_assist-0.9.3}/examples/dynamodb/models/user_model.py +0 -0
  30. {boto3_assist-0.9.1 → boto3_assist-0.9.3}/examples/dynamodb/models/user_post_model.py +0 -0
  31. {boto3_assist-0.9.1 → boto3_assist-0.9.3}/examples/dynamodb/order_example/main.py +0 -0
  32. {boto3_assist-0.9.1 → boto3_assist-0.9.3}/examples/dynamodb/order_example/products.json +0 -0
  33. {boto3_assist-0.9.1 → boto3_assist-0.9.3}/examples/dynamodb/services/order_item_service.py +0 -0
  34. {boto3_assist-0.9.1 → boto3_assist-0.9.3}/examples/dynamodb/services/order_service.py +0 -0
  35. {boto3_assist-0.9.1 → boto3_assist-0.9.3}/examples/dynamodb/services/product_service.py +0 -0
  36. {boto3_assist-0.9.1 → boto3_assist-0.9.3}/examples/dynamodb/services/table_service.py +0 -0
  37. {boto3_assist-0.9.1 → boto3_assist-0.9.3}/examples/dynamodb/services/user_post_service.py +0 -0
  38. {boto3_assist-0.9.1 → boto3_assist-0.9.3}/examples/dynamodb/services/user_service.py +0 -0
  39. {boto3_assist-0.9.1 → boto3_assist-0.9.3}/examples/dynamodb/services/user_service_client_example.py +0 -0
  40. {boto3_assist-0.9.1 → boto3_assist-0.9.3}/examples/dynamodb/services/user_service_resource_example.py +0 -0
  41. {boto3_assist-0.9.1 → boto3_assist-0.9.3}/examples/dynamodb/user_post_example/main.py +0 -0
  42. {boto3_assist-0.9.1 → boto3_assist-0.9.3}/examples/ec2/regions_report.py +0 -0
  43. {boto3_assist-0.9.1 → boto3_assist-0.9.3}/module-headers.txt +0 -0
  44. {boto3_assist-0.9.1 → boto3_assist-0.9.3}/mypy.ini +0 -0
  45. {boto3_assist-0.9.1 → boto3_assist-0.9.3}/requirements-dev.txt +0 -0
  46. {boto3_assist-0.9.1 → boto3_assist-0.9.3}/requirements.txt +0 -0
  47. {boto3_assist-0.9.1 → boto3_assist-0.9.3}/run-checks.sh +0 -0
  48. {boto3_assist-0.9.1 → boto3_assist-0.9.3}/run_unit_tests.sh +0 -0
  49. {boto3_assist-0.9.1 → boto3_assist-0.9.3}/src/boto3_assist/__init__.py +0 -0
  50. {boto3_assist-0.9.1 → boto3_assist-0.9.3}/src/boto3_assist/aws_lambda/event_info.py +0 -0
  51. {boto3_assist-0.9.1 → boto3_assist-0.9.3}/src/boto3_assist/boto3session.py +0 -0
  52. {boto3_assist-0.9.1 → boto3_assist-0.9.3}/src/boto3_assist/cloudwatch/cloudwatch_connection.py +0 -0
  53. {boto3_assist-0.9.1 → boto3_assist-0.9.3}/src/boto3_assist/cloudwatch/cloudwatch_connection_tracker.py +0 -0
  54. {boto3_assist-0.9.1 → boto3_assist-0.9.3}/src/boto3_assist/cloudwatch/cloudwatch_log_connection.py +0 -0
  55. {boto3_assist-0.9.1 → boto3_assist-0.9.3}/src/boto3_assist/cloudwatch/cloudwatch_logs.py +0 -0
  56. {boto3_assist-0.9.1 → boto3_assist-0.9.3}/src/boto3_assist/cloudwatch/cloudwatch_query.py +0 -0
  57. {boto3_assist-0.9.1 → boto3_assist-0.9.3}/src/boto3_assist/cognito/cognito_authorizer.py +0 -0
  58. {boto3_assist-0.9.1 → boto3_assist-0.9.3}/src/boto3_assist/cognito/cognito_connection.py +0 -0
  59. {boto3_assist-0.9.1 → boto3_assist-0.9.3}/src/boto3_assist/cognito/cognito_utility.py +0 -0
  60. {boto3_assist-0.9.1 → boto3_assist-0.9.3}/src/boto3_assist/cognito/jwks_cache.py +0 -0
  61. {boto3_assist-0.9.1 → boto3_assist-0.9.3}/src/boto3_assist/cognito/user.py +0 -0
  62. {boto3_assist-0.9.1 → boto3_assist-0.9.3}/src/boto3_assist/connection.py +0 -0
  63. {boto3_assist-0.9.1 → boto3_assist-0.9.3}/src/boto3_assist/connection_tracker.py +0 -0
  64. {boto3_assist-0.9.1 → boto3_assist-0.9.3}/src/boto3_assist/dynamodb/dynamodb.py +0 -0
  65. {boto3_assist-0.9.1 → boto3_assist-0.9.3}/src/boto3_assist/dynamodb/dynamodb_connection.py +0 -0
  66. {boto3_assist-0.9.1 → boto3_assist-0.9.3}/src/boto3_assist/dynamodb/dynamodb_helpers.py +0 -0
  67. {boto3_assist-0.9.1 → boto3_assist-0.9.3}/src/boto3_assist/dynamodb/dynamodb_importer.py +0 -0
  68. {boto3_assist-0.9.1 → boto3_assist-0.9.3}/src/boto3_assist/dynamodb/dynamodb_index.py +0 -0
  69. {boto3_assist-0.9.1 → boto3_assist-0.9.3}/src/boto3_assist/dynamodb/dynamodb_iservice.py +0 -0
  70. {boto3_assist-0.9.1 → boto3_assist-0.9.3}/src/boto3_assist/dynamodb/dynamodb_key.py +0 -0
  71. {boto3_assist-0.9.1 → boto3_assist-0.9.3}/src/boto3_assist/dynamodb/dynamodb_model_base.py +0 -0
  72. {boto3_assist-0.9.1 → boto3_assist-0.9.3}/src/boto3_assist/dynamodb/dynamodb_model_base_interfaces.py +0 -0
  73. {boto3_assist-0.9.1 → boto3_assist-0.9.3}/src/boto3_assist/dynamodb/dynamodb_reindexer.py +0 -0
  74. {boto3_assist-0.9.1 → boto3_assist-0.9.3}/src/boto3_assist/dynamodb/dynamodb_reserved_words.py +0 -0
  75. {boto3_assist-0.9.1 → boto3_assist-0.9.3}/src/boto3_assist/dynamodb/dynamodb_reserved_words.txt +0 -0
  76. {boto3_assist-0.9.1 → boto3_assist-0.9.3}/src/boto3_assist/dynamodb/readme.md +0 -0
  77. {boto3_assist-0.9.1 → boto3_assist-0.9.3}/src/boto3_assist/dynamodb/troubleshooting.md +0 -0
  78. {boto3_assist-0.9.1 → boto3_assist-0.9.3}/src/boto3_assist/ec2/ec2_connection.py +0 -0
  79. {boto3_assist-0.9.1 → boto3_assist-0.9.3}/src/boto3_assist/environment_services/__init__.py +0 -0
  80. {boto3_assist-0.9.1 → boto3_assist-0.9.3}/src/boto3_assist/environment_services/environment_loader.py +0 -0
  81. {boto3_assist-0.9.1 → boto3_assist-0.9.3}/src/boto3_assist/environment_services/environment_variables.py +0 -0
  82. {boto3_assist-0.9.1 → boto3_assist-0.9.3}/src/boto3_assist/errors/custom_exceptions.py +0 -0
  83. {boto3_assist-0.9.1 → boto3_assist-0.9.3}/src/boto3_assist/http_status_codes.py +0 -0
  84. {boto3_assist-0.9.1 → boto3_assist-0.9.3}/src/boto3_assist/models/serializable_model.py +0 -0
  85. {boto3_assist-0.9.1 → boto3_assist-0.9.3}/src/boto3_assist/s3/s3.py +0 -0
  86. {boto3_assist-0.9.1 → boto3_assist-0.9.3}/src/boto3_assist/s3/s3_bucket.py +0 -0
  87. {boto3_assist-0.9.1 → boto3_assist-0.9.3}/src/boto3_assist/s3/s3_connection.py +0 -0
  88. {boto3_assist-0.9.1 → boto3_assist-0.9.3}/src/boto3_assist/s3/s3_event_data.py +0 -0
  89. {boto3_assist-0.9.1 → boto3_assist-0.9.3}/src/boto3_assist/securityhub/securityhub.py +0 -0
  90. {boto3_assist-0.9.1 → boto3_assist-0.9.3}/src/boto3_assist/securityhub/securityhub_connection.py +0 -0
  91. {boto3_assist-0.9.1 → boto3_assist-0.9.3}/src/boto3_assist/utilities/datetime_utility.py +0 -0
  92. {boto3_assist-0.9.1 → boto3_assist-0.9.3}/src/boto3_assist/utilities/dictionaroy_utility.py +0 -0
  93. {boto3_assist-0.9.1 → boto3_assist-0.9.3}/src/boto3_assist/utilities/file_operations.py +0 -0
  94. {boto3_assist-0.9.1 → boto3_assist-0.9.3}/src/boto3_assist/utilities/http_utility.py +0 -0
  95. {boto3_assist-0.9.1 → boto3_assist-0.9.3}/src/boto3_assist/utilities/logging_utility.py +0 -0
  96. {boto3_assist-0.9.1 → boto3_assist-0.9.3}/src/boto3_assist/utilities/numbers_utility.py +0 -0
  97. {boto3_assist-0.9.1 → boto3_assist-0.9.3}/src/boto3_assist/utilities/string_utility.py +0 -0
  98. {boto3_assist-0.9.1 → boto3_assist-0.9.3}/tests/__init__.py +0 -0
  99. {boto3_assist-0.9.1 → boto3_assist-0.9.3}/tests/__top/__init__.py +0 -0
  100. {boto3_assist-0.9.1 → boto3_assist-0.9.3}/tests/dynamodb/__init__.py +0 -0
  101. {boto3_assist-0.9.1 → boto3_assist-0.9.3}/tests/dynamodb/dbmodels/cms/base.py +0 -0
  102. {boto3_assist-0.9.1 → boto3_assist-0.9.3}/tests/dynamodb/dbmodels/cms/content_block.py +0 -0
  103. {boto3_assist-0.9.1 → boto3_assist-0.9.3}/tests/dynamodb/dbmodels/cms/page.py +0 -0
  104. {boto3_assist-0.9.1 → boto3_assist-0.9.3}/tests/dynamodb/dbmodels/cms/template.py +0 -0
  105. {boto3_assist-0.9.1 → boto3_assist-0.9.3}/tests/dynamodb/dbmodels/simple_model.py +0 -0
  106. {boto3_assist-0.9.1 → boto3_assist-0.9.3}/tests/dynamodb/dbmodels/user_model.py +0 -0
  107. {boto3_assist-0.9.1 → boto3_assist-0.9.3}/tests/dynamodb/dbmodels/user_required_fields_model.py +0 -0
  108. {boto3_assist-0.9.1 → boto3_assist-0.9.3}/tests/dynamodb/dynamodb_model_base_test.py +0 -0
  109. {boto3_assist-0.9.1 → boto3_assist-0.9.3}/tests/dynamodb/dynamodb_model_projections_test.py +0 -0
  110. {boto3_assist-0.9.1 → boto3_assist-0.9.3}/tests/dynamodb/dynamodb_model_serializtion_test.py +0 -0
  111. {boto3_assist-0.9.1 → boto3_assist-0.9.3}/tests/dynamodb/dynamodb_moto_sorting_test.py +0 -0
  112. {boto3_assist-0.9.1 → boto3_assist-0.9.3}/tests/dynamodb/dynamodb_reindex_test.py +0 -0
  113. {boto3_assist-0.9.1 → boto3_assist-0.9.3}/tests/examples_test/__init__.py +0 -0
  114. {boto3_assist-0.9.1 → boto3_assist-0.9.3}/tests/examples_test/user_service_test.py +0 -0
  115. {boto3_assist-0.9.1 → boto3_assist-0.9.3}/tests/lambda/__init__.py +0 -0
  116. {boto3_assist-0.9.1 → boto3_assist-0.9.3}/tests/lambda/event_info_test.py +0 -0
  117. {boto3_assist-0.9.1 → boto3_assist-0.9.3}/tests/models/__init__.py +0 -0
  118. {boto3_assist-0.9.1 → boto3_assist-0.9.3}/tests/models/serializable_model_wide_test.py +0 -0
  119. {boto3_assist-0.9.1 → boto3_assist-0.9.3}/tests/s3/__init__.py +0 -0
  120. {boto3_assist-0.9.1 → boto3_assist-0.9.3}/tests/s3/files/test.txt +0 -0
  121. {boto3_assist-0.9.1 → boto3_assist-0.9.3}/tests/s3/s3_event_data_test.py +0 -0
  122. {boto3_assist-0.9.1 → boto3_assist-0.9.3}/tests/s3/s3_file_delete_test.py +0 -0
  123. {boto3_assist-0.9.1 → boto3_assist-0.9.3}/tests/s3/s3_file_upload_test.py +0 -0
  124. {boto3_assist-0.9.1 → boto3_assist-0.9.3}/tests/utilities/__init__.py +0 -0
  125. {boto3_assist-0.9.1 → boto3_assist-0.9.3}/tests/utilities/serialization_utility_test.py +0 -0
  126. {boto3_assist-0.9.1 → boto3_assist-0.9.3}/tests/utilities/string_utility_test.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: boto3_assist
3
- Version: 0.9.1
3
+ Version: 0.9.3
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
@@ -7,7 +7,7 @@ packages = ["src/boto3_assist"]
7
7
 
8
8
  [project]
9
9
  name = "boto3_assist"
10
- version = "0.9.1"
10
+ version = "0.9.3"
11
11
 
12
12
  authors = [
13
13
  { name="Eric Wilson", email="boto3-assist@geekcafe.com" }
@@ -0,0 +1,4 @@
1
+ from aws_lambda_powertools.utilities.typing import LambdaContext
2
+
3
+
4
+ class MockLambdaContext(LambdaContext)
@@ -193,6 +193,12 @@ class S3Object:
193
193
 
194
194
  return response
195
195
 
196
+ def put(self, *, bucket: str, key: str, data: bytes | str) -> str:
197
+ """
198
+ Uploads a file object to s3. Returns the full s3 path s3://<bucket>/<key>
199
+ """
200
+ return self.upload_file_obj(bucket=bucket, key=key, file_obj=data)
201
+
196
202
  def upload_file_obj(self, *, bucket: str, key: str, file_obj: bytes | str) -> str:
197
203
  """
198
204
  Uploads a file object to s3. Returns the full s3 path s3://<bucket>/<key>
@@ -414,6 +420,19 @@ class S3Object:
414
420
  The "Body" is a streaming body object. You can read it like a file.
415
421
  For example:
416
422
 
423
+ with response["Body"] as f:
424
+ data = f.read()
425
+ print(data)
426
+
427
+ """
428
+ return self.get_object(bucket_name=bucket_name, key=key)
429
+
430
+ def get_object(self, bucket_name: str, key: str) -> Dict[str, Any]:
431
+ """
432
+ Gets a file from s3 and returns the response.
433
+ The "Body" is a streaming body object. You can read it like a file.
434
+ For example:
435
+
417
436
  with response["Body"] as f:
418
437
  data = f.read()
419
438
  print(data)
@@ -275,6 +275,9 @@ class Serialization:
275
275
  if coerce:
276
276
  # Attempt to coerce the value to the expected type
277
277
  try:
278
+ if isinstance(value, list) and expected_type is str:
279
+ value = "".join(value)
280
+
278
281
  value = expected_type(value)
279
282
  except ValueError as e:
280
283
  logger.warning(
@@ -0,0 +1 @@
1
+ __version__ = '0.9.3'
@@ -5,7 +5,7 @@ MIT License. See Project Root for the license information.
5
5
  """
6
6
 
7
7
  import unittest
8
- from typing import Dict
8
+ from typing import Dict, List
9
9
  from boto3_assist.models.serializable_model import SerializableModel
10
10
 
11
11
 
@@ -16,6 +16,15 @@ class ExampleModel(SerializableModel):
16
16
  self.name = name
17
17
  self.age = age
18
18
  self.active = active
19
+ self.__pets: List[str] = []
20
+
21
+ @property
22
+ def pets(self) -> List[str]:
23
+ return self.__pets
24
+
25
+ @pets.setter
26
+ def pets(self, value: List[str]):
27
+ self.__pets = value
19
28
 
20
29
 
21
30
  class TestSerializableModel(unittest.TestCase):
@@ -26,6 +35,7 @@ class TestSerializableModel(unittest.TestCase):
26
35
  "name": "John Doe",
27
36
  "age": 30,
28
37
  "active": True,
38
+ "pets": ["abby", "lexie", "lena", "keisha"],
29
39
  }
30
40
 
31
41
  def test_map_valid_data(self):
@@ -37,6 +47,7 @@ class TestSerializableModel(unittest.TestCase):
37
47
  self.assertEqual(result.name, "John Doe")
38
48
  self.assertEqual(result.age, 30)
39
49
  self.assertEqual(result.active, True)
50
+ self.assertEqual(len(result.pets), 4)
40
51
 
41
52
  def test_map_partial_data(self):
42
53
  """
@@ -128,7 +139,7 @@ class TestSerializableModel(unittest.TestCase):
128
139
  result = model.to_dictionary()
129
140
 
130
141
  self.assertIsInstance(result, dict)
131
- self.assertEqual(len(result), 3)
142
+ self.assertEqual(len(result), 4)
132
143
  self.assertEqual(result.get("name"), "Bob")
133
144
  self.assertEqual(result.get("age"), 35)
134
145
  self.assertEqual(result.get("active"), False)
@@ -1 +0,0 @@
1
- __version__ = '0.9.1'
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes