cloudconsolelink 4.1.1__tar.gz → 4.1.2__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 (32) hide show
  1. {cloudconsolelink-4.1.1/cloudconsolelink.egg-info → cloudconsolelink-4.1.2}/PKG-INFO +1 -1
  2. {cloudconsolelink-4.1.1 → cloudconsolelink-4.1.2}/cloudconsolelink/clouds/aws/__init__.py +4 -0
  3. {cloudconsolelink-4.1.1 → cloudconsolelink-4.1.2}/cloudconsolelink/clouds/aws/links.py +2 -1
  4. {cloudconsolelink-4.1.1 → cloudconsolelink-4.1.2/cloudconsolelink.egg-info}/PKG-INFO +1 -1
  5. {cloudconsolelink-4.1.1 → cloudconsolelink-4.1.2}/tests/test_aws.py +27 -0
  6. {cloudconsolelink-4.1.1 → cloudconsolelink-4.1.2}/LICENSE +0 -0
  7. {cloudconsolelink-4.1.1 → cloudconsolelink-4.1.2}/MANIFEST.in +0 -0
  8. {cloudconsolelink-4.1.1 → cloudconsolelink-4.1.2}/README.md +0 -0
  9. {cloudconsolelink-4.1.1 → cloudconsolelink-4.1.2}/cloudconsolelink/__init__.py +0 -0
  10. {cloudconsolelink-4.1.1 → cloudconsolelink-4.1.2}/cloudconsolelink/clouds/__init__.py +0 -0
  11. {cloudconsolelink-4.1.1 → cloudconsolelink-4.1.2}/cloudconsolelink/clouds/aws/errors.py +0 -0
  12. {cloudconsolelink-4.1.1 → cloudconsolelink-4.1.2}/cloudconsolelink/clouds/azure/__init__.py +0 -0
  13. {cloudconsolelink-4.1.1 → cloudconsolelink-4.1.2}/cloudconsolelink/clouds/gcp/__init__.py +0 -0
  14. {cloudconsolelink-4.1.1 → cloudconsolelink-4.1.2}/cloudconsolelink/clouds/gcp/links.py +0 -0
  15. {cloudconsolelink-4.1.1 → cloudconsolelink-4.1.2}/cloudconsolelink/clouds/oci/__init__.py +0 -0
  16. {cloudconsolelink-4.1.1 → cloudconsolelink-4.1.2}/cloudconsolelink/clouds/oci/links.py +0 -0
  17. {cloudconsolelink-4.1.1 → cloudconsolelink-4.1.2}/cloudconsolelink/clouds/registry/__init__.py +0 -0
  18. {cloudconsolelink-4.1.1 → cloudconsolelink-4.1.2}/cloudconsolelink.egg-info/SOURCES.txt +0 -0
  19. {cloudconsolelink-4.1.1 → cloudconsolelink-4.1.2}/cloudconsolelink.egg-info/dependency_links.txt +0 -0
  20. {cloudconsolelink-4.1.1 → cloudconsolelink-4.1.2}/cloudconsolelink.egg-info/requires.txt +0 -0
  21. {cloudconsolelink-4.1.1 → cloudconsolelink-4.1.2}/cloudconsolelink.egg-info/top_level.txt +0 -0
  22. {cloudconsolelink-4.1.1 → cloudconsolelink-4.1.2}/requirements-dev.txt +0 -0
  23. {cloudconsolelink-4.1.1 → cloudconsolelink-4.1.2}/requirements.txt +0 -0
  24. {cloudconsolelink-4.1.1 → cloudconsolelink-4.1.2}/setup.cfg +0 -0
  25. {cloudconsolelink-4.1.1 → cloudconsolelink-4.1.2}/setup.py +0 -0
  26. {cloudconsolelink-4.1.1 → cloudconsolelink-4.1.2}/tests/test_azure.py +0 -0
  27. {cloudconsolelink-4.1.1 → cloudconsolelink-4.1.2}/tests/test_gcp.py +0 -0
  28. {cloudconsolelink-4.1.1 → cloudconsolelink-4.1.2}/tests/test_oci.py +0 -0
  29. {cloudconsolelink-4.1.1 → cloudconsolelink-4.1.2}/tests/test_packaging.py +0 -0
  30. {cloudconsolelink-4.1.1 → cloudconsolelink-4.1.2}/tests/test_provider_coverage.py +0 -0
  31. {cloudconsolelink-4.1.1 → cloudconsolelink-4.1.2}/tests/test_registry_link.py +0 -0
  32. {cloudconsolelink-4.1.1 → cloudconsolelink-4.1.2}/tests/test_registry_parse.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cloudconsolelink
3
- Version: 4.1.1
3
+ Version: 4.1.2
4
4
  Summary: Generate console links for cloud resources
5
5
  Home-page: https://github.com/Cloudanix/cloud-console-links
6
6
  Maintainer: Cloudanix
@@ -126,6 +126,10 @@ class AWSLinker:
126
126
  }
127
127
 
128
128
  resource_tokens = tokens[5:]
129
+ # API Gateway ARNs are paths: arn:aws:apigateway:us-east-1::/restapis/abc123. Drop the
130
+ # leading "/" so the first segment is the resource type, as in every other path-style ARN.
131
+ if resource_tokens and resource_tokens[0].startswith("/"):
132
+ resource_tokens[0] = resource_tokens[0][1:]
129
133
 
130
134
  console = get_console(str(data.get("partition", "")))
131
135
  if not console:
@@ -983,7 +983,8 @@ def get_links() -> Dict:
983
983
  {data.get("resource", "")}',
984
984
  "trafficpolicyinstance": 'https://{data.get("console", "")}/route53/trafficflow/home#/\
985
985
  modify-records/edit/{data.get("resource", "")}',
986
- "domains": 'https://{data.get("region", "")}.{data.get("console", "")}/route53/home#DomainListing:',
986
+ # Route 53 Domains is global: its ARNs carry no region, so the host has none.
987
+ "domains": 'https://{data.get("console", "")}/route53/home#DomainListing:',
987
988
  },
988
989
  "route53resolver": { # Amazon Route 53 Resolver
989
990
  "resolver-endpoint": 'https://{data.get("region", "")}.{data.get("console", "")}/route53resolver/home?region={data.get("region", "")}#/endpoints/{data.get("resource", "")}',
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cloudconsolelink
3
- Version: 4.1.1
3
+ Version: 4.1.2
4
4
  Summary: Generate console links for cloud resources
5
5
  Home-page: https://github.com/Cloudanix/cloud-console-links
6
6
  Maintainer: Cloudanix
@@ -172,6 +172,33 @@ def test_aws_apigateway_client_certificate():
172
172
  assert out_link == expected_link
173
173
 
174
174
 
175
+ def test_aws_apigateway_documented_arns_with_leading_slash():
176
+ # AWS documents API Gateway ARNs as paths (::/restapis/...). Before: the "/" left an empty
177
+ # resource type, so every one fell back to the API Gateway home page.
178
+ home = "https://us-east-1.console.aws.amazon.com/apigateway/home?region=us-east-1"
179
+ cases = {
180
+ "arn:aws:apigateway:us-east-1::/restapis/abc123": f"{home}#/abc123/resources/",
181
+ "arn:aws:apigateway:us-east-1::/restapis/abc123/stages/prod": f"{home}#/abc123/stages/prod/resources/",
182
+ "arn:aws:apigateway:us-east-1::/apis/abc123": f"{home}#/abc123/resources/",
183
+ "arn:aws:apigateway:us-east-1::/clientcertificates/abc123": f"{home}#/client-certificates",
184
+ }
185
+ for arn, expected_link in cases.items():
186
+ assert aws.get_console_link(arn=arn) == expected_link
187
+ # Same link as the slash-less form callers send today.
188
+ assert aws.get_console_link(arn=arn.replace("::/", "::")) == expected_link
189
+
190
+
191
+ def test_aws_route53_domain_has_no_region_host():
192
+ # Before: the empty region produced the host "https://.console.aws.amazon.com".
193
+ arn = "arn:aws:route53:::domains/example.com"
194
+
195
+ assert aws.get_console_link(arn=arn) == "https://console.aws.amazon.com/route53/home#DomainListing:"
196
+ assert (
197
+ aws.get_console_link(arn="arn:aws-us-gov:route53:::domains/example.com")
198
+ == "https://console.amazonaws-us-gov.com/route53/home#DomainListing:"
199
+ )
200
+
201
+
175
202
  def test_aws_cloudwatch_loggroup():
176
203
  arn = "arn:aws:logs:us-east-2:123456789012:log-group/LogGroupName-123"
177
204
  expected_link = 'https://us-east-2.console.aws.amazon.com/cloudwatch/home?region=us-east-2#logsV2:log-groups/log-group/LogGroupName-123'