clear-skies-aws 2.0.7__py3-none-any.whl → 2.0.9__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.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: clear-skies-aws
3
- Version: 2.0.7
3
+ Version: 2.0.9
4
4
  Summary: clearskies bindings for working in AWS
5
5
  Project-URL: Repository, https://github.com/clearskies-py/clearskies-aws
6
6
  Project-URL: Issues, https://github.com/clearskies-py/clearskies-aws/issues
@@ -25,7 +25,7 @@ clearskies_aws/cursors/__init__.py,sha256=vy-WYxNEy5nd9fqY0En3T6WhE3omoV1tE-A5Uz
25
25
  clearskies_aws/cursors/iam/__init__.py,sha256=dY410gfPoMXB42jhmamqD5IiCeopDnxr5wIibpqaYcY,127
26
26
  clearskies_aws/cursors/iam/rds_mysql.py,sha256=bdAYTLg9t8DsoSi0otY9bmIgLCbrezczxd_3hWuEkeE,5639
27
27
  clearskies_aws/cursors/port_forwarding/__init__.py,sha256=LBcFYeIIfmGhxf3Ezn1KChOUdkpF5AjJL1xE_ak-x3s,78
28
- clearskies_aws/cursors/port_forwarding/ssm.py,sha256=RJXU6meeX9GNSbcxTGf6c9LcI4I0_wvYHnS_DzRSEXM,4498
28
+ clearskies_aws/cursors/port_forwarding/ssm.py,sha256=2tEznKflMG5a8g1AzHWghHkMp4BdBFhewB8WigFR5F4,4878
29
29
  clearskies_aws/di/__init__.py,sha256=pLHSIKxS1oELOgttRuwM0yXdJRxjZKXQ6tPxme2db0U,222
30
30
  clearskies_aws/di/aws_additional_config_auto_import.py,sha256=94h_YsPBcdwMhqn0VAAfId1jLL5vCsk76kUrr-6ET_U,1275
31
31
  clearskies_aws/di/inject/__init__.py,sha256=5_x5_BBQwC6J4k5YLdTm1DfIDM-95zXz1L5a1nMrlrY,186
@@ -40,10 +40,10 @@ clearskies_aws/input_outputs/cli_web_socket_mock.py,sha256=cp0MaJjVnsXE1rx5K44lp
40
40
  clearskies_aws/input_outputs/lambda_alb.py,sha256=iYooG5AlkrQQgzSt304A5_u_UhuqYh-9PeLvFdGM_Eg,2013
41
41
  clearskies_aws/input_outputs/lambda_api_gateway.py,sha256=n5XiaxmaFKJ9wMQcNQwizpjcA-L_bdLk1aUk-QyO58w,4672
42
42
  clearskies_aws/input_outputs/lambda_api_gateway_web_socket.py,sha256=B7LIXI_9HpquTtUuPVnb7aH1agJt9qTWiISWiNlobdo,2926
43
- clearskies_aws/input_outputs/lambda_input_output.py,sha256=nJza0TFdAYOHdLvq6eFDW-TobpeF3EzuIsW9rdhrj3U,2819
44
- clearskies_aws/input_outputs/lambda_invoke.py,sha256=9TvtxVn2MYxUq9luZ-o0DMboFulA5ff-G8RFo3_x-nA,2861
45
- clearskies_aws/input_outputs/lambda_sns.py,sha256=nPvLxi5EUmgSeDYxFHnosG9mEzVKjt_mOFJvjsb1gQ4,3084
46
- clearskies_aws/input_outputs/lambda_sqs_standard.py,sha256=rtOH75SKuT4ByOn4tfgDvvLog0IZVaZUh8zQ_E4Yygw,2945
43
+ clearskies_aws/input_outputs/lambda_input_output.py,sha256=7RzKRi7dRHizxUzbewcdfw3xRBwYJvOH9IuNIrmklUc,2880
44
+ clearskies_aws/input_outputs/lambda_invoke.py,sha256=7OXA2ZIN3FqHS0sOib6jIkPVVG06K1V-UDcrkL1ZfQQ,2784
45
+ clearskies_aws/input_outputs/lambda_sns.py,sha256=o8PZMKBImZtbl3Ki07qRFDDu-OmxqQhBX7eGEtHBvqk,2980
46
+ clearskies_aws/input_outputs/lambda_sqs_standard.py,sha256=0FJt9DksjSSTLnlRqJ4aG6PX81f9QN6RCOoFKo9w5fw,2841
47
47
  clearskies_aws/mocks/__init__.py,sha256=mn764gINN667tYoJfnsM6HjAAhCsO_kZ6E-fUwdLY50,22
48
48
  clearskies_aws/mocks/actions/__init__.py,sha256=to1r8B365Et2PRVfUWWnJGt7Hdr8vwwQuNyZvTSTP6g,152
49
49
  clearskies_aws/mocks/actions/ses.py,sha256=KsII9ggU364BQoxgHfO2rxi6tjVsdnwJyMhtclOhWLQ,998
@@ -62,7 +62,7 @@ clearskies_aws/secrets/additional_configs/iam_db_auth.py,sha256=PwyiLaacpRfhBKzQ
62
62
  clearskies_aws/secrets/additional_configs/iam_db_auth_with_ssm.py,sha256=ABY29X-YvrE6vvNo6kVdf4DqyRNq5cFR5SfK7MNkltE,3463
63
63
  clearskies_aws/secrets/additional_configs/mysql_connection_dynamic_producer_via_ssh_cert_bastion.py,sha256=mLaplwvJLSbGh6oXgdOKL9Mv-6hLv5OUYCfEwHbHvLE,3700
64
64
  clearskies_aws/secrets/additional_configs/mysql_connection_dynamic_producer_via_ssm_bastion.py,sha256=2VHOwto4I9gBwrpd2HGpL-Wr0T2S-jFjUhe2Ib8hNJ8,6596
65
- clear_skies_aws-2.0.7.dist-info/METADATA,sha256=EnxcOA1Ehm_jw5cazHSldQKPmAAS6u_Hf-6kTLNXko8,9084
66
- clear_skies_aws-2.0.7.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
67
- clear_skies_aws-2.0.7.dist-info/licenses/LICENSE,sha256=MkEX8JF8kZxdyBpTTcB0YTd-xZpWnHvbRlw-pQh8u58,1069
68
- clear_skies_aws-2.0.7.dist-info/RECORD,,
65
+ clear_skies_aws-2.0.9.dist-info/METADATA,sha256=rcubN31MrrscF5Ml6X8nT2dfzKP7qelUvIoOrparv-Q,9084
66
+ clear_skies_aws-2.0.9.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
67
+ clear_skies_aws-2.0.9.dist-info/licenses/LICENSE,sha256=MkEX8JF8kZxdyBpTTcB0YTd-xZpWnHvbRlw-pQh8u58,1069
68
+ clear_skies_aws-2.0.9.dist-info/RECORD,,
@@ -92,6 +92,9 @@ class Ssm(PortForwarder):
92
92
  if self.local_port == 0:
93
93
  self.local_port = self.pick_free_port("127.0.0.1")
94
94
 
95
+ if self.remote_port is None:
96
+ raise ValueError("remote_port must be set for SSM port forwarding.")
97
+
95
98
  if self.is_port_open("127.0.0.1", self.local_port):
96
99
  return "127.0.0.1", self.local_port
97
100
 
@@ -102,15 +105,17 @@ class Ssm(PortForwarder):
102
105
  "--target",
103
106
  self.instance_id,
104
107
  "--document-name",
105
- "AWS-StartPortForwardingSession",
108
+ "AWS-StartPortForwardingSessionToRemoteHost",
106
109
  "--parameters",
107
- f"portNumber={self.remote_port},localPort={self.local_port}",
110
+ f'{{"host":["{original_host}"],"portNumber":["{self.remote_port}"],"localPortNumber":["{self.local_port}"]}}',
108
111
  ]
109
112
  if self.region:
110
113
  ssm_cmd += ["--region", self.region]
111
114
  if self.profile:
112
115
  ssm_cmd += ["--profile", self.profile]
113
116
 
117
+ self.logger.debug(f"Starting SSM port forwarding session: {' '.join(ssm_cmd)}")
118
+
114
119
  self._proc = self.subprocess.Popen(ssm_cmd, stdout=self.subprocess.PIPE, stderr=self.subprocess.PIPE)
115
120
 
116
121
  start = time.time()
@@ -123,7 +128,8 @@ class Ssm(PortForwarder):
123
128
  break
124
129
  except Exception:
125
130
  if self._proc is not None and self._proc.poll() is not None:
126
- raise RuntimeError("SSM process exited unexpectedly")
131
+ stderr = self._proc.stderr.read().decode() if self._proc.stderr else ""
132
+ raise RuntimeError(f"SSM process exited unexpectedly. Stderr: {stderr}")
127
133
  if time.time() - start > 10:
128
134
  raise TimeoutError(f"Timeout waiting for port {self.local_port} to open")
129
135
  time.sleep(0.1)
@@ -79,6 +79,8 @@ class LambdaInputOutput(InputOutput):
79
79
 
80
80
  def get_full_path(self) -> str:
81
81
  """Get full path."""
82
+ if self.url is not None:
83
+ return self.url
82
84
  return self.path
83
85
 
84
86
  def context_specifics(self) -> dict[str, Any]:
@@ -24,6 +24,7 @@ class LambdaInvoke(lambda_input_output.LambdaInputOutput):
24
24
 
25
25
  # Direct invocation specific initialization
26
26
  if url:
27
+ self.url = url
27
28
  self.path = url
28
29
  else:
29
30
  self.supports_url = True
@@ -59,10 +60,6 @@ class LambdaInvoke(lambda_input_output.LambdaInputOutput):
59
60
  """Direct invocations don't have a protocol."""
60
61
  return "lambda"
61
62
 
62
- def get_full_path(self) -> str:
63
- """Return the configured path."""
64
- return self.path
65
-
66
63
  def context_specifics(self) -> dict[str, Any]:
67
64
  """Provide direct invocation specific context data."""
68
65
  return {
@@ -66,10 +66,6 @@ class LambdaSns(lambda_input_output.LambdaInputOutput):
66
66
  """SNS events don't have a protocol."""
67
67
  return "sns"
68
68
 
69
- def get_full_path(self) -> str:
70
- """Return the configured path."""
71
- return self.path
72
-
73
69
  def context_specifics(self) -> dict[str, Any]:
74
70
  """Provide SNS specific context data."""
75
71
  sns_record = self.event.get("Records", [{}])[0].get("Sns", {})
@@ -68,10 +68,6 @@ class LambdaSqsStandard(lambda_input_output.LambdaInputOutput):
68
68
  """SQS events don't have a protocol."""
69
69
  return "sqs"
70
70
 
71
- def get_full_path(self) -> str:
72
- """Return the configured path."""
73
- return self.path
74
-
75
71
  def context_specifics(self) -> dict[str, Any]:
76
72
  """Provide SQS specific context data."""
77
73
  return {