boto3-assist 0.11.0__py3-none-any.whl → 0.12.0__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.
@@ -27,7 +27,7 @@ class Boto3SessionManager:
27
27
  aws_region: Optional[str] = None,
28
28
  assume_role_arn: Optional[str] = None,
29
29
  assume_role_session_name: Optional[str] = None,
30
- cross_account_role_arn: Optional[str] = None,
30
+ # cross_account_role_arn: Optional[str] = None,
31
31
  config: Optional[Config] = None,
32
32
  aws_endpoint_url: Optional[str] = None,
33
33
  aws_access_key_id: Optional[str] = None,
@@ -40,7 +40,7 @@ class Boto3SessionManager:
40
40
  self.assume_role_arn = assume_role_arn
41
41
  self.assume_role_session_name = assume_role_session_name
42
42
  self.config = config
43
- self.cross_account_role_arn = cross_account_role_arn
43
+ # # self.cross_account_role_arn = cross_account_role_arn
44
44
  self.endpoint_url = aws_endpoint_url
45
45
  self.aws_access_key_id = aws_access_key_id
46
46
  self.aws_secret_access_key = aws_secret_access_key
@@ -57,36 +57,46 @@ class Boto3SessionManager:
57
57
 
58
58
  profile = self.aws_profile or EnvironmentVariables.AWS.profile()
59
59
  region = self.aws_region or EnvironmentVariables.AWS.region()
60
- if self.assume_role_arn:
61
- self.__assume_role()
62
- else:
63
- logger.debug("Connecting without assuming a role.")
64
- self.__session = self.__get_aws_session(profile, region)
60
+
61
+ logger.debug("Connecting without assuming a role.")
62
+ self.__session = self.__get_aws_session(profile, region)
65
63
 
66
64
  if profile:
67
65
  print(f"Connecting with a profile: {profile}")
68
66
 
67
+ if self.assume_role_arn:
68
+ self.__assume_role()
69
+
69
70
  def __assume_role(self):
70
71
  """Assume an AWS IAM role."""
71
72
  try:
73
+ if not self.__session:
74
+ raise RuntimeError(
75
+ "Session must be established before assuming a role."
76
+ )
77
+
72
78
  logger.debug(f"Assuming role {self.assume_role_arn}")
73
- sts_client = boto3.client("sts")
79
+
80
+ sts_client = self.__session.client("sts")
74
81
  session_name = (
75
82
  self.assume_role_session_name
76
83
  or f"AssumeRoleSessionFor{self.service_name}"
77
84
  )
78
- if not self.assume_role_arn:
79
- raise ValueError("assume_role_arn is required")
85
+
80
86
  assumed_role_response = sts_client.assume_role(
81
87
  RoleArn=self.assume_role_arn,
82
88
  RoleSessionName=session_name,
83
89
  )
84
90
  credentials = assumed_role_response["Credentials"]
91
+
92
+ # Now override the session with assumed credentials
85
93
  self.__session = boto3.Session(
86
94
  aws_access_key_id=credentials["AccessKeyId"],
87
95
  aws_secret_access_key=credentials["SecretAccessKey"],
88
96
  aws_session_token=credentials["SessionToken"],
97
+ region_name=self.aws_region,
89
98
  )
99
+ logger.debug("Successfully assumed role and created new session.")
90
100
 
91
101
  except Exception as e:
92
102
  logger.error(f"Error assuming role: {e}")
@@ -117,9 +127,9 @@ class Boto3SessionManager:
117
127
  "region": self.aws_region,
118
128
  "aws_access_key_id": tmp_access_key_id,
119
129
  "aws_secret_access_key": tmp_secret_access_key,
120
- "aws_session_token": "*******"
121
- if self.aws_session_token is not None
122
- else "",
130
+ "aws_session_token": (
131
+ "*******" if self.aws_session_token is not None else ""
132
+ ),
123
133
  }
124
134
  )
125
135
  logger.debug("Creating boto3 session")
@@ -30,6 +30,7 @@ class Connection:
30
30
  aws_access_key_id: Optional[str] = None,
31
31
  aws_secret_access_key: Optional[str] = None,
32
32
  aws_end_point_url: Optional[str] = None,
33
+ assume_role_arn: Optional[str] = None,
33
34
  ) -> None:
34
35
  self.__aws_profile = aws_profile
35
36
  self.__aws_region = aws_region
@@ -37,7 +38,7 @@ class Connection:
37
38
  self.__aws_secret_access_key = aws_secret_access_key
38
39
  self.end_point_url = aws_end_point_url
39
40
  self.__session: Boto3SessionManager | None = None
40
-
41
+ self.__assume_role_arn: Optional[str] = assume_role_arn
41
42
  self.__service_name: str | None = service_name
42
43
 
43
44
  if self.__service_name is None:
@@ -73,6 +74,7 @@ class Connection:
73
74
  aws_access_key_id=self.aws_access_key_id,
74
75
  aws_secret_access_key=self.aws_secret_access_key,
75
76
  aws_endpoint_url=self.end_point_url,
77
+ assume_role_arn=self.__assume_role_arn,
76
78
  )
77
79
 
78
80
  tracker.add(service_name=self.service_name)
@@ -24,7 +24,6 @@ from boto3_assist.utilities.string_utility import StringUtility
24
24
  logger = Logger()
25
25
 
26
26
 
27
-
28
27
  class DynamoDB(DynamoDBConnection):
29
28
  """
30
29
  DynamoDB. Wrapper for basic DynamoDB Connection and Actions
@@ -41,6 +40,7 @@ class DynamoDB(DynamoDBConnection):
41
40
  aws_end_point_url: Optional[str] = None,
42
41
  aws_access_key_id: Optional[str] = None,
43
42
  aws_secret_access_key: Optional[str] = None,
43
+ assume_role_arn: Optional[str] = None,
44
44
  ) -> None:
45
45
  super().__init__(
46
46
  aws_profile=aws_profile,
@@ -48,6 +48,7 @@ class DynamoDB(DynamoDBConnection):
48
48
  aws_end_point_url=aws_end_point_url,
49
49
  aws_access_key_id=aws_access_key_id,
50
50
  aws_secret_access_key=aws_secret_access_key,
51
+ assume_role_arn=assume_role_arn,
51
52
  )
52
53
  self.helpers: DynamoDBHelpers = DynamoDBHelpers()
53
54
  self.log_dynamodb_item_size = (
@@ -55,7 +56,6 @@ class DynamoDB(DynamoDBConnection):
55
56
  )
56
57
  logger.setLevel(os.getenv("LOG_LEVEL", "INFO"))
57
58
 
58
-
59
59
  def save(
60
60
  self,
61
61
  item: dict | DynamoDBModelBase,
@@ -169,7 +169,6 @@ class DynamoDB(DynamoDBConnection):
169
169
  call_type: str = "resource",
170
170
  ) -> Dict[str, Any]: ...
171
171
 
172
-
173
172
  def get(
174
173
  self,
175
174
  key: Optional[dict] = None,
@@ -344,7 +343,6 @@ class DynamoDB(DynamoDBConnection):
344
343
  ) -> dict:
345
344
  pass
346
345
 
347
-
348
346
  def delete(
349
347
  self,
350
348
  *,
@@ -32,6 +32,7 @@ class DynamoDBConnection(Connection):
32
32
  aws_end_point_url: Optional[str] = None,
33
33
  aws_access_key_id: Optional[str] = None,
34
34
  aws_secret_access_key: Optional[str] = None,
35
+ assume_role_arn: Optional[str] = None,
35
36
  ) -> None:
36
37
  super().__init__(
37
38
  service_name="dynamodb",
@@ -40,6 +41,7 @@ class DynamoDBConnection(Connection):
40
41
  aws_access_key_id=aws_access_key_id,
41
42
  aws_secret_access_key=aws_secret_access_key,
42
43
  aws_end_point_url=aws_end_point_url,
44
+ assume_role_arn=assume_role_arn,
43
45
  )
44
46
 
45
47
  self.__dynamodb_client: DynamoDBClient | None = None
boto3_assist/version.py CHANGED
@@ -1 +1 @@
1
- __version__ = '0.11.0'
1
+ __version__ = '0.12.0'
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: boto3_assist
3
- Version: 0.11.0
3
+ Version: 0.12.0
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,9 +1,9 @@
1
1
  boto3_assist/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
- boto3_assist/boto3session.py,sha256=JnZIRbut5R_C_r50bY2xiF6CjR93jQSOeVmhdK97mDg,6712
3
- boto3_assist/connection.py,sha256=-z_OZtZmSVjSSECpoqx1FnqW7B9A_LovfN_cJ_nhHgg,4361
2
+ boto3_assist/boto3session.py,sha256=eXmsOXsQoXaVnis6hiTXwNaRA6Vnjvj7sZnMUGRsrdU,6965
3
+ boto3_assist/connection.py,sha256=UJg6YHxVpz3F51Lih5cjfPhbkheRvXoJTpCilErNzkc,4523
4
4
  boto3_assist/connection_tracker.py,sha256=UgfR9RlvXf3A4ssMr3gDMpw89ka8mSRvJn4M34SzhbU,4378
5
5
  boto3_assist/http_status_codes.py,sha256=G0zRSWenwavYKETvDF9tNVUXQz3Ae2gXdBETYbjvJe8,3284
6
- boto3_assist/version.py,sha256=UHGsGhGjMtfvoaFMaJdv4diSXG2uXo8Y2yCo7kiUOdk,23
6
+ boto3_assist/version.py,sha256=qHJ_q-NtoZ98rdflBB5GKtBzx_sUvAVe96rJSun_DEU,23
7
7
  boto3_assist/aws_lambda/event_info.py,sha256=OkZ4WzuGaHEu_T8sB188KBgShAJhZpWASALKRGBOhMg,14648
8
8
  boto3_assist/aws_lambda/mock_context.py,sha256=LPjHP-3YSoY6iPl1kPqJDwSVf1zLNTcukUunDtYcbK0,116
9
9
  boto3_assist/cloudwatch/cloudwatch_connection.py,sha256=mnGWaLSQpHh5EeY7Ek_2o9JKHJxOELIYtQVMX1IaHn4,2480
@@ -16,8 +16,8 @@ boto3_assist/cognito/cognito_connection.py,sha256=deuXR3cNHz0mCYff2k0LfAvK--9Okq
16
16
  boto3_assist/cognito/cognito_utility.py,sha256=IVZAg58nHG1U7uxe7FsTYpqwwZiwwdIBGiVTZuLCFqg,18417
17
17
  boto3_assist/cognito/jwks_cache.py,sha256=1Y9r-YfQ8qrgZN5xYPvjUEEV0vthbdcPdAIaPbZP7kU,373
18
18
  boto3_assist/cognito/user.py,sha256=qc44qLx3gwq6q2zMxcPQze1EjeZwy5Kuav93vbe-4WU,820
19
- boto3_assist/dynamodb/dynamodb.py,sha256=ARbxuAQitqDBdEb_vHiRaC7x9nDMr71SgRA7tD6NVKk,15681
20
- boto3_assist/dynamodb/dynamodb_connection.py,sha256=x6Ylb_uVAY5TS0AIBUNOSyywKIqros3xX8diLTjZUsc,3275
19
+ boto3_assist/dynamodb/dynamodb.py,sha256=8uzKaw9knqPvlkroQK5aMR-ASRxFwCCcMacm6wWpp8g,15757
20
+ boto3_assist/dynamodb/dynamodb_connection.py,sha256=kOFB07ulFM3ohtqr_Ytk4OaCfPL_DdCQ-GXGq6Gi-Ag,3367
21
21
  boto3_assist/dynamodb/dynamodb_helpers.py,sha256=RoRRqKjdwfC-2-gvlkLvCoNWhIoMrHm-68dkyhXI_Xk,12080
22
22
  boto3_assist/dynamodb/dynamodb_importer.py,sha256=nCKsyRQeMqDSf0Q5mQ_X_oVIg4PRnu0hcUzZnBli610,3471
23
23
  boto3_assist/dynamodb/dynamodb_index.py,sha256=D0Lq121qk1cXeMetPeqnzvv6CXd0XfEygfdUXaljLG8,8551
@@ -53,8 +53,8 @@ boto3_assist/utilities/logging_utility.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5N
53
53
  boto3_assist/utilities/numbers_utility.py,sha256=wzv9d0uXT_2_ZHHio7LBzibwxPqhGpvbq9HinrVn_4A,10160
54
54
  boto3_assist/utilities/serialization_utility.py,sha256=nieqW9b71Dr0X2HPsNmCei6zoIbsPRl9fDAigBQkaUg,21730
55
55
  boto3_assist/utilities/string_utility.py,sha256=0ChxbuT37xdG4y3cKzbNTHk4T3fl8lNMdOT7L5aJBQk,10382
56
- boto3_assist-0.11.0.dist-info/METADATA,sha256=bXUuUsYCrxXCm125R0K6pI13n3oh8rfRdJPj9mNrCdA,2875
57
- boto3_assist-0.11.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
58
- boto3_assist-0.11.0.dist-info/licenses/LICENSE-EXPLAINED.txt,sha256=WFREvTpfTjPjDHpOLADxJpCKpIla3Ht87RUUGii4ODU,606
59
- boto3_assist-0.11.0.dist-info/licenses/LICENSE.txt,sha256=PXDhFWS5L5aOTkVhNvoitHKbAkgxqMI2uUPQyrnXGiI,1105
60
- boto3_assist-0.11.0.dist-info/RECORD,,
56
+ boto3_assist-0.12.0.dist-info/METADATA,sha256=Lxa_QRidcIM16fqlmi0IQpW7CPBnWrphIktDAUuAvKc,2875
57
+ boto3_assist-0.12.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
58
+ boto3_assist-0.12.0.dist-info/licenses/LICENSE-EXPLAINED.txt,sha256=WFREvTpfTjPjDHpOLADxJpCKpIla3Ht87RUUGii4ODU,606
59
+ boto3_assist-0.12.0.dist-info/licenses/LICENSE.txt,sha256=PXDhFWS5L5aOTkVhNvoitHKbAkgxqMI2uUPQyrnXGiI,1105
60
+ boto3_assist-0.12.0.dist-info/RECORD,,