From f67cc6ac9f6a78bd0dc9443546824185d91ba22a Mon Sep 17 00:00:00 2001 From: Matt Daue Date: Tue, 7 Mar 2023 16:42:50 -0800 Subject: [PATCH 01/17] WIP Signed-off-by: Matt Daue --- iambic/output/__init__.py | 0 iambic/output/markdown.py | 7 ++++ .../output/templates/resource_change.jinja2 | 41 +++++++++++++++++++ pyproject.toml | 1 + 4 files changed, 49 insertions(+) create mode 100644 iambic/output/__init__.py create mode 100644 iambic/output/markdown.py create mode 100644 iambic/output/templates/resource_change.jinja2 diff --git a/iambic/output/__init__.py b/iambic/output/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/iambic/output/markdown.py b/iambic/output/markdown.py new file mode 100644 index 000000000..3e1bd8e08 --- /dev/null +++ b/iambic/output/markdown.py @@ -0,0 +1,7 @@ +from jinja2 import Environment, FileSystemLoader + + +def render_resource_changes(resource_changes): + env = Environment(loader=FileSystemLoader('templates')) + template = env.get_template("resource_change.jinja2") + return template.render(resource_changes=resource_changes) diff --git a/iambic/output/templates/resource_change.jinja2 b/iambic/output/templates/resource_change.jinja2 new file mode 100644 index 000000000..534f5a69b --- /dev/null +++ b/iambic/output/templates/resource_change.jinja2 @@ -0,0 +1,41 @@ +{% set data = [ {'resource_type': 'EC2 Instance', 'resource_id': 'i-1234567890abcdefg', 'action': 'Stop', 'proposed_change': 'None', 'accounts': ['Account A', 'Account B'], 'template_id': 'template_1'}, + {'resource_type': 'RDS Instance', 'resource_id': 'db-abcdefghijklmno', 'action': 'Delete', 'proposed_change': 'None', 'accounts': ['Account A'], 'template_id': 'template_1'}, + {'resource_type': 'Lambda Function', 'resource_id': 'arn:aws:lambda:us-west-2:123456789012:function:my-function', 'action': 'Update', 'proposed_change': 'Increase Memory', 'accounts': ['Account B'], 'template_id': 'template_2'}, + {'resource_type': 'S3 Bucket', 'resource_id': 'my-bucket', 'action': 'Delete', 'proposed_change': 'None', 'accounts': ['Account A', 'Account B'], 'template_id': 'template_2'}, +] %} + + + + + + + + + + + + + + {% for template_id, template_data in data|groupby('template_id') %} + {% for account, account_data in template_data|groupby('accounts') %} + + + + + + + + + {% for row in account_data[1:] %} + + + + + + + + {% endfor %} + {% endfor %} + {% endfor %} + +
Template IDAccountResource TypeResource IDActionProposed Change
{{ template_id }}{{ account }}{{ account_data[0]['resource_type'] }}{{ account_data[0]['resource_id'] }}{{ account_data[0]['action'] }}{{ account_data[0]['proposed_change'] }}
{{ account }}{{ row['resource_type'] }}{{ row['resource_id'] }}{{ row['action'] }}{{ row['proposed_change'] }}
\ No newline at end of file diff --git a/pyproject.toml b/pyproject.toml index 3ad4a27a5..63d792bd1 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -9,6 +9,7 @@ description = "The python package used to generate, parse, and execute noqform y authors = ["Noq Software "] readme = "README.md" exclude = ["build_util/*"] +include = ["iambic/output/templates/*"] [tool.isort] profile = "black" From 9f8ad47e74ec848e415f609e2374e1e6be0066c4 Mon Sep 17 00:00:00 2001 From: Matt Daue Date: Wed, 8 Mar 2023 16:41:32 -0800 Subject: [PATCH 02/17] Add unit test to test markdown generator and first jinja Signed-off-by: Matt Daue --- .vscode/launch.json | 2 + iambic/output/markdown.py | 4 +- .../output/templates/resource_change.jinja2 | 58 +++++++++---------- 3 files changed, 31 insertions(+), 33 deletions(-) diff --git a/.vscode/launch.json b/.vscode/launch.json index 9b0c69e20..d699cc9bd 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -13,6 +13,8 @@ "envFile": "${workspaceFolder}/.env", "args": [ "plan", + "-t", + "../noq-templates/resources/aws/roles/all_accounts/readonly.yaml", ], "justMyCode": false }, diff --git a/iambic/output/markdown.py b/iambic/output/markdown.py index 3e1bd8e08..8e3ff2e7f 100644 --- a/iambic/output/markdown.py +++ b/iambic/output/markdown.py @@ -1,7 +1,9 @@ +import pathlib from jinja2 import Environment, FileSystemLoader def render_resource_changes(resource_changes): - env = Environment(loader=FileSystemLoader('templates')) + my_path = pathlib.Path(__file__).parent.absolute() + env = Environment(loader=FileSystemLoader(my_path / 'templates')) template = env.get_template("resource_change.jinja2") return template.render(resource_changes=resource_changes) diff --git a/iambic/output/templates/resource_change.jinja2 b/iambic/output/templates/resource_change.jinja2 index 534f5a69b..1c42449a3 100644 --- a/iambic/output/templates/resource_change.jinja2 +++ b/iambic/output/templates/resource_change.jinja2 @@ -1,41 +1,35 @@ -{% set data = [ {'resource_type': 'EC2 Instance', 'resource_id': 'i-1234567890abcdefg', 'action': 'Stop', 'proposed_change': 'None', 'accounts': ['Account A', 'Account B'], 'template_id': 'template_1'}, - {'resource_type': 'RDS Instance', 'resource_id': 'db-abcdefghijklmno', 'action': 'Delete', 'proposed_change': 'None', 'accounts': ['Account A'], 'template_id': 'template_1'}, - {'resource_type': 'Lambda Function', 'resource_id': 'arn:aws:lambda:us-west-2:123456789012:function:my-function', 'action': 'Update', 'proposed_change': 'Increase Memory', 'accounts': ['Account B'], 'template_id': 'template_2'}, - {'resource_type': 'S3 Bucket', 'resource_id': 'my-bucket', 'action': 'Delete', 'proposed_change': 'None', 'accounts': ['Account A', 'Account B'], 'template_id': 'template_2'}, -] %} - - - - - - - - - - - - - {% for template_id, template_data in data|groupby('template_id') %} - {% for account, account_data in template_data|groupby('accounts') %} + + + + + + + + + + + + {% for template_id, template_data in resource_changes|groupby('template_id') -%} + {% for account, account_data in template_data|groupby('accounts') -%} - - - - - - + + + + + + - {% for row in account_data[1:] %} - + {% for row in account_data[1:] -%} + - - {% endfor %} - {% endfor %} - {% endfor %} - + + {% endfor -%} + {% endfor -%} + {% endfor -%} +
Template IDAccountResource TypeResource IDActionProposed Change
Template IDAccountResource TypeResource IDActionProposed Change
{{ template_id }}{{ account }}{{ account_data[0]['resource_type'] }}{{ account_data[0]['resource_id'] }}{{ account_data[0]['action'] }}{{ account_data[0]['proposed_change'] }}{{ template_id }}{{ ", ".join(account) }}{{ account_data[0]['resource_type'] }}{{ account_data[0]['resource_id'] }}{{ account_data[0]['action'] }}{{ account_data[0]['proposed_change'] }}
{{ account }} {{ row['resource_type'] }} {{ row['resource_id'] }} {{ row['action'] }} {{ row['proposed_change'] }}
\ No newline at end of file From 101977b8f00fbf2dd188dc58c962fbde74209356 Mon Sep 17 00:00:00 2001 From: Matt Daue Date: Thu, 9 Mar 2023 09:46:22 -0800 Subject: [PATCH 03/17] Add unit test to test markdown generator and first jinja Signed-off-by: Matt Daue --- test/output/__init__.py | 0 test/output/test_markdown_generator.py | 67 ++++++++++++++++++++++++++ 2 files changed, 67 insertions(+) create mode 100644 test/output/__init__.py create mode 100644 test/output/test_markdown_generator.py diff --git a/test/output/__init__.py b/test/output/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/test/output/test_markdown_generator.py b/test/output/test_markdown_generator.py new file mode 100644 index 000000000..5727fe460 --- /dev/null +++ b/test/output/test_markdown_generator.py @@ -0,0 +1,67 @@ +from iambic.output.markdown import render_resource_changes + +def test_render_resource_changes(): + resource_changes = [ + {'resource_type': 'EC2 Instance', 'resource_id': 'i-1234567890abcdefg', 'action': 'Stop', 'proposed_change': 'None', 'accounts': ['Account A', 'Account B'], 'template_id': 'template_1'}, + {'resource_type': 'RDS Instance', 'resource_id': 'db-abcdefghijklmno', 'action': 'Delete', 'proposed_change': 'None', 'accounts': ['Account A'], 'template_id': 'template_1'}, + {'resource_type': 'Lambda Function', 'resource_id': 'arn:aws:lambda:us-west-2:123456789012:function:my-function', 'action': 'Update', 'proposed_change': 'Increase Memory', 'accounts': ['Account B'], 'template_id': 'template_2'}, + {'resource_type': 'S3 Bucket', 'resource_id': 'my-bucket', 'action': 'Delete', 'proposed_change': 'None', 'accounts': ['Account A', 'Account B'], 'template_id': 'template_2'}, + ] + + expected_output = ''' + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Template IDAccountResource TypeResource IDActionProposed Change
template_1Account ARDS Instancedb-abcdefghijklmnoDeleteNone
template_1Account A, Account BEC2 Instancei-1234567890abcdefgStopNone
template_2Account A, Account BS3 Bucketmy-bucketDeleteNone
template_2Account BLambda Functionarn:aws:lambda:us-west-2:123456789012:function:my-functionUpdateIncrease Memory
+''' + + # Render the actual output + actual_output = render_resource_changes(resource_changes) + + with open("test.md", "w") as f: + f.write(actual_output) + + # Compare the expected and actual output + assert actual_output.strip().replace(' ', '') == expected_output.strip().replace(' ', '') From e79cefe3c57bfec2442b781774aa2502b0aa48a9 Mon Sep 17 00:00:00 2001 From: Matt Daue Date: Thu, 9 Mar 2023 17:07:22 -0800 Subject: [PATCH 04/17] Add jinja template hierarchy Signed-off-by: Matt Daue --- iambic/output/templates/accounts.jinja2 | 12 +++ iambic/output/templates/actions.jinja2 | 0 iambic/output/templates/change_details.jinja2 | 10 +++ .../output/templates/exception_details.jinja2 | 40 ++++++++++ .../output/templates/resource_change.jinja2 | 73 ++++++++++--------- iambic/output/templates/summary.jinja2 | 13 ++++ iambic/output/templates/template.jinja2 | 12 +++ 7 files changed, 126 insertions(+), 34 deletions(-) create mode 100644 iambic/output/templates/accounts.jinja2 create mode 100644 iambic/output/templates/actions.jinja2 create mode 100644 iambic/output/templates/change_details.jinja2 create mode 100644 iambic/output/templates/exception_details.jinja2 create mode 100644 iambic/output/templates/summary.jinja2 create mode 100644 iambic/output/templates/template.jinja2 diff --git a/iambic/output/templates/accounts.jinja2 b/iambic/output/templates/accounts.jinja2 new file mode 100644 index 000000000..c6c94ffa1 --- /dev/null +++ b/iambic/output/templates/accounts.jinja2 @@ -0,0 +1,12 @@ +{% extends "template.jinja2" %} +{% block account scoped %} + +{% for account in template.accounts %} +
+{{ account.meta.name }} (Count: {{ account.meta.number }}) + {% block change scoped %} + {% endblock %} +
+{% endfor %} + +{% endblock %} \ No newline at end of file diff --git a/iambic/output/templates/actions.jinja2 b/iambic/output/templates/actions.jinja2 new file mode 100644 index 000000000..e69de29bb diff --git a/iambic/output/templates/change_details.jinja2 b/iambic/output/templates/change_details.jinja2 new file mode 100644 index 000000000..00820c350 --- /dev/null +++ b/iambic/output/templates/change_details.jinja2 @@ -0,0 +1,10 @@ +{% extends "summary.jinja2" %} +{% block action %} + +{% for action in iambic.changes.actions %} +
+{{ action.meta.name }} (Count: {{ action.meta.number }}) + {% block template scoped %} + {% endblock %} +
+{% endfor %} diff --git a/iambic/output/templates/exception_details.jinja2 b/iambic/output/templates/exception_details.jinja2 new file mode 100644 index 000000000..7f668eb9a --- /dev/null +++ b/iambic/output/templates/exception_details.jinja2 @@ -0,0 +1,40 @@ +{% extends "accounts.jinja2" %} +{% block account scoped %} + +{% for exception in account.exceptions %} +
+{{ exception.meta.name }} (Count: {{ exception.meta.number }}) + + + + + + + + + + + + {% for template_id, template_data in exception.resources -%} + + + + + + + + {% for row in template_data[1:] -%} + + + + + + + {% endfor -%} + {% endfor -%} + +
Template IDResource TypeResource IDActionProposed Change
{{ template_id }}{{ template_data[0]['resource_type'] }}{{ template_data[0]['resource_id'] }}{{ template_data[0]['action'] }}{{ template_data[0]['proposed_change'] }}
{{ row['resource_type'] }}{{ row['resource_id'] }}{{ row['action'] }}{{ row['proposed_change'] }}
+
+{% endfor %} + +{% endblock %} \ No newline at end of file diff --git a/iambic/output/templates/resource_change.jinja2 b/iambic/output/templates/resource_change.jinja2 index 1c42449a3..c4f3690a4 100644 --- a/iambic/output/templates/resource_change.jinja2 +++ b/iambic/output/templates/resource_change.jinja2 @@ -1,35 +1,40 @@ - - - - - - - - - - - - - {% for template_id, template_data in resource_changes|groupby('template_id') -%} - {% for account, account_data in template_data|groupby('accounts') -%} - - - - - - - - - {% for row in account_data[1:] -%} - - - - - - - +{% extends "accounts.jinja2" %} +{% block account scoped %} + +{% for change in account.changes %} +
+{{ change.meta.name }} (Count: {{ change.meta.number }}) +
Template IDAccountResource TypeResource IDActionProposed Change
{{ template_id }}{{ ", ".join(account) }}{{ account_data[0]['resource_type'] }}{{ account_data[0]['resource_id'] }}{{ account_data[0]['action'] }}{{ account_data[0]['proposed_change'] }}
{{ account }}{{ row['resource_type'] }}{{ row['resource_id'] }}{{ row['action'] }}{{ row['proposed_change'] }}
+ + + + + + + + + + + {% for template_id, template_data in change.resources -%} + + + + + + + + {% for row in template_data[1:] -%} + + + + + + + {% endfor -%} {% endfor -%} - {% endfor -%} - {% endfor -%} - -
Template IDResource TypeResource IDActionProposed Change
{{ template_id }}{{ template_data[0]['resource_type'] }}{{ template_data[0]['resource_id'] }}{{ template_data[0]['action'] }}{{ template_data[0]['proposed_change'] }}
{{ row['resource_type'] }}{{ row['resource_id'] }}{{ row['action'] }}{{ row['proposed_change'] }}
\ No newline at end of file + + + +{% endfor %} + +{% endblock %} \ No newline at end of file diff --git a/iambic/output/templates/summary.jinja2 b/iambic/output/templates/summary.jinja2 new file mode 100644 index 000000000..f0ec343b8 --- /dev/null +++ b/iambic/output/templates/summary.jinja2 @@ -0,0 +1,13 @@ +# IAMbic Summary +## Change Detection +* {{ iambic.sum_deleted }} deleted roles. +* {{ iambic.sum_created }} created roles. +* {{ iambic.sum_updated }} updated roles. +## Exceptions +* {{ iambic.sum_exceptions }} exceptions. + +# IAMbic Change Details +{% block action %}{% endblock %} + +# IAMbic Exceptions +{ % block exception %}{ % endblock %} \ No newline at end of file diff --git a/iambic/output/templates/template.jinja2 b/iambic/output/templates/template.jinja2 new file mode 100644 index 000000000..e44d368e4 --- /dev/null +++ b/iambic/output/templates/template.jinja2 @@ -0,0 +1,12 @@ +{% extends "actions.jinja2" %} +{% block template scoped %} + +{% for template in action.templates %} +
+{{ template.meta.name }} (Count: {{ template.meta.number }}) + {% block account scoped %} + {% endblock %} +
+{% endfor %} + +{% endblock %} \ No newline at end of file From 97fa36bdd33d2a867bbcef13fc28db916b64dc85 Mon Sep 17 00:00:00 2001 From: Matt Daue Date: Sat, 11 Mar 2023 09:27:33 -0800 Subject: [PATCH 05/17] Munge data to fit in templates (wip) Signed-off-by: Matt Daue --- iambic/output/markdown.py | 115 +++++++++++++++++++++++++ iambic/output/templates/actions.jinja2 | 12 +++ 2 files changed, 127 insertions(+) diff --git a/iambic/output/markdown.py b/iambic/output/markdown.py index 8e3ff2e7f..c738faf0e 100644 --- a/iambic/output/markdown.py +++ b/iambic/output/markdown.py @@ -1,5 +1,120 @@ import pathlib +from typing import Any, Dict, List from jinja2 import Environment, FileSystemLoader +from pydantic import BaseModel as PydanticBaseModel + +from iambic.core.logger import log +from iambic.core.models import ( + AccountChangeDetails, + ProposedChange, + ProposedChangeType, + TemplateChangeDetails, +) + + +class ApplicableChange(PydanticBaseModel): + change: ProposedChange + template_change: TemplateChangeDetails + template_name: str + + def __init__(self, change: ProposedChange, template_change: TemplateChangeDetails, **data: Any) -> None: + self.template_name = pathlib.Path(template_change.template_path).name + super().__init__(change=change, template_change=template_change, **data) + + +class AccountSummary(PydanticBaseModel): + account: str + count: int + proposed_changes: List[ProposedChange] + + +class TemplateSummary(PydanticBaseModel): + template_path: str + template_name: str + count: int + accounts: List[AccountSummary] + + def __init__(self, template_path: str, template_name: str, count: int, accounts: List[AccountSummary], **data: Any) -> None: + pass + + +class ActionSummary(PydanticBaseModel): + action: str + count: int + templates: List[TemplateSummary] + + @classmethod + async def compile_proposed_changes(cls, resources_changes: List[TemplateChangeDetails], proposed_change_type: str) -> Any: + """Compile a list of TemplateChangeDetails into a list of TemplateSummary objects. + + :param resources_changes: list of TemplateChangeDetails objects + :returns: None + """ + def _get_annotated_change(change: ProposedChange, template_change: TemplateChangeDetails) -> ApplicableChange: + return ApplicableChange( + change=change, + template_change=template_change, + ) + + applicable_changes: List[ApplicableChange] = list() + for template_change in resources_changes: + for proposed_change in template_change.proposed_changes: + if isinstance(proposed_change, AccountChangeDetails): + # If proposed change is a list of AccountChangeDetails, we need to iterate through those + for account_change in proposed_change.proposed_changes: + if account_change.change_type == proposed_change_type: + applicable_changes.append(_get_annotated_change(account_change, template_change)) + if proposed_change.change_type == proposed_change_type: + # If proposed change is a single change, we can just append it + applicable_changes.append(_get_annotated_change(proposed_change, template_change)) + + log.debug(f"Found {len(applicable_changes)} applicable changes") + + self = cls(action=proposed_change_type, count=len(applicable_changes), templates=[]) + self.templates = [ + TemplateSummary( + template_path=x.template_change.template_path, + template_name=x.template_name, + count=len([y for y in applicable_changes if y.template_change.template_path == x.template_change.template_path]), + ) for x in applicable_changes] + + return self + + @classmethod + async def compile_exceptions_seen(cls, resources_changes: List[TemplateChangeDetails]) -> Any: + pass + + +async def get_template_data(resources_changes: List[TemplateChangeDetails]) -> Dict[str, Any]: + """Convert TemplateChangeDetails into a format that is oriented in this format. + + * Action (Add, Delete, Modify) + * Template Name (Count of ) + * Account Name (Count of ) + * Changes for Account (Count of ) + * Table of proposed changes + + For each, the corresponding jinja2 templates are: + + * Action: templates/actions.jinja2 + * Template Name: templates/template.jinja2 + * Account Name: templates/accounts.jinja2 + * Changes for Account: templates/resource_change.jinja2 + + There is also a jinja template to display all exceptions: + + * Exceptions: templates/exception_details.jinja2 + + :param resources_changes: list of TemplateChangeDetails objects + :returns: Dict[str, Any] + """ + action_summaries = [ActionSummary.compile] + # Get all proposed changes + proposed_changes = [x.proposed_changes for x in resources_changes] + proposed_changes.extend([x.proposed_changes for y in resources_changes for x in y.proposed_changes if isinstance(x, AccountChangeDetails)]) + template_data = {x.account for y in resources_changes for x in y.proposed_changes if isinstance(x, AccountChangeDetails)} + + return template_data def render_resource_changes(resource_changes): diff --git a/iambic/output/templates/actions.jinja2 b/iambic/output/templates/actions.jinja2 index e69de29bb..d7ce637fb 100644 --- a/iambic/output/templates/actions.jinja2 +++ b/iambic/output/templates/actions.jinja2 @@ -0,0 +1,12 @@ +{% extends "summary.jinja2" %} +{% block action scoped %} + +{% for action in iambic.actions %} +
+{{ action.action }} (Count: {{ action.count }}) + {% block template scoped %} + {% endblock %} +
+{% endfor %} + +{% endblock %}} \ No newline at end of file From 8dac3a18d79211525d2f0bcdcf7152348a9a1ab6 Mon Sep 17 00:00:00 2001 From: Matt Daue Date: Sat, 11 Mar 2023 12:55:50 -0800 Subject: [PATCH 06/17] Fix logic to handle multiple nested changes Signed-off-by: Matt Daue --- iambic/output/markdown.py | 44 ++++++++++++++++++++++++++++++--------- 1 file changed, 34 insertions(+), 10 deletions(-) diff --git a/iambic/output/markdown.py b/iambic/output/markdown.py index c738faf0e..ab296c1b0 100644 --- a/iambic/output/markdown.py +++ b/iambic/output/markdown.py @@ -6,7 +6,7 @@ from iambic.core.logger import log from iambic.core.models import ( AccountChangeDetails, - ProposedChange, + ProposedChange, ProposedChangeType, TemplateChangeDetails, ) @@ -27,6 +27,11 @@ class AccountSummary(PydanticBaseModel): count: int proposed_changes: List[ProposedChange] + def __init__(self, account: str, count: int, changes: List[ProposedChange], **data: Any) -> None: + self.account = account + self.count = count + self.proposed_changes = changes + class TemplateSummary(PydanticBaseModel): template_path: str @@ -34,8 +39,12 @@ class TemplateSummary(PydanticBaseModel): count: int accounts: List[AccountSummary] - def __init__(self, template_path: str, template_name: str, count: int, accounts: List[AccountSummary], **data: Any) -> None: - pass + def __init__(self, template_path: str, template_name: str, changes: List[ProposedChange], **data: Any) -> None: + self.accounts = [AccountSummary( + account=change.account, + count=len(changes), + proposed_changes=[x for x in changes if x.account == change.account], + ) for change in changes] class ActionSummary(PydanticBaseModel): @@ -75,8 +84,8 @@ def _get_annotated_change(change: ProposedChange, template_change: TemplateChang TemplateSummary( template_path=x.template_change.template_path, template_name=x.template_name, - count=len([y for y in applicable_changes if y.template_change.template_path == x.template_change.template_path]), - ) for x in applicable_changes] + changes=[y for y in applicable_changes if y.template_change.template_path == x.template_change.template_path], + ) for x in applicable_changes] return self @@ -85,6 +94,24 @@ async def compile_exceptions_seen(cls, resources_changes: List[TemplateChangeDet pass +class ExceptionSummary(PydanticBaseModel): + exception: str + + +class ActionSummaries(PydanticBaseModel): + num_actions: int + num_templates: int + num_accounts: int + action_summaries: List[ActionSummary] + exceptions: List[ExceptionSummary] + + def __init__(self, changes: List[TemplateChangeDetails]): + self.action_summaries = [ActionSummary.compile(changes, x) for x in list(ProposedChangeType)] + self.num_actions = len(self.action_summaries) + self.num_templates = sum([len(x.templates) for x in self.action_summaries]) + self.num_accounts = sum([len(z.accounts) for y in self.action_summaries for z in y.templates]) + + async def get_template_data(resources_changes: List[TemplateChangeDetails]) -> Dict[str, Any]: """Convert TemplateChangeDetails into a format that is oriented in this format. @@ -108,13 +135,10 @@ async def get_template_data(resources_changes: List[TemplateChangeDetails]) -> D :param resources_changes: list of TemplateChangeDetails objects :returns: Dict[str, Any] """ - action_summaries = [ActionSummary.compile] + action_summaries = ActionSummaries(resources_changes) # Get all proposed changes - proposed_changes = [x.proposed_changes for x in resources_changes] - proposed_changes.extend([x.proposed_changes for y in resources_changes for x in y.proposed_changes if isinstance(x, AccountChangeDetails)]) - template_data = {x.account for y in resources_changes for x in y.proposed_changes if isinstance(x, AccountChangeDetails)} - return template_data + return action_summaries def render_resource_changes(resource_changes): From f44f5945be596bd30118d4b791ca0c2f4d86e478 Mon Sep 17 00:00:00 2001 From: Matt Daue Date: Sat, 11 Mar 2023 14:34:41 -0800 Subject: [PATCH 07/17] Add test case for template render Signed-off-by: Matt Daue --- iambic/output/markdown.py | 2 +- test/output/test_markdown_generator.py | 3473 +++++++++++++++++++++++- 2 files changed, 3412 insertions(+), 63 deletions(-) diff --git a/iambic/output/markdown.py b/iambic/output/markdown.py index ab296c1b0..b7509e2ec 100644 --- a/iambic/output/markdown.py +++ b/iambic/output/markdown.py @@ -112,7 +112,7 @@ def __init__(self, changes: List[TemplateChangeDetails]): self.num_accounts = sum([len(z.accounts) for y in self.action_summaries for z in y.templates]) -async def get_template_data(resources_changes: List[TemplateChangeDetails]) -> Dict[str, Any]: +def get_template_data(resources_changes: List[TemplateChangeDetails]) -> Dict[str, Any]: """Convert TemplateChangeDetails into a format that is oriented in this format. * Action (Add, Delete, Modify) diff --git a/test/output/test_markdown_generator.py b/test/output/test_markdown_generator.py index 5727fe460..2e9b51fd1 100644 --- a/test/output/test_markdown_generator.py +++ b/test/output/test_markdown_generator.py @@ -1,67 +1,3416 @@ -from iambic.output.markdown import render_resource_changes +import pytest +from iambic.core.models import ProposedChange +from iambic.output.markdown import ActionSummaries, get_template_data, render_resource_changes -def test_render_resource_changes(): - resource_changes = [ - {'resource_type': 'EC2 Instance', 'resource_id': 'i-1234567890abcdefg', 'action': 'Stop', 'proposed_change': 'None', 'accounts': ['Account A', 'Account B'], 'template_id': 'template_1'}, - {'resource_type': 'RDS Instance', 'resource_id': 'db-abcdefghijklmno', 'action': 'Delete', 'proposed_change': 'None', 'accounts': ['Account A'], 'template_id': 'template_1'}, - {'resource_type': 'Lambda Function', 'resource_id': 'arn:aws:lambda:us-west-2:123456789012:function:my-function', 'action': 'Update', 'proposed_change': 'Increase Memory', 'accounts': ['Account B'], 'template_id': 'template_2'}, - {'resource_type': 'S3 Bucket', 'resource_id': 'my-bucket', 'action': 'Delete', 'proposed_change': 'None', 'accounts': ['Account A', 'Account B'], 'template_id': 'template_2'}, - ] +from iambic.core.utils import yaml +from iambic.core.models import TemplateChangeDetails - expected_output = ''' - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Template IDAccountResource TypeResource IDActionProposed Change
template_1Account ARDS Instancedb-abcdefghijklmnoDeleteNone
template_1Account A, Account BEC2 Instancei-1234567890abcdefgStopNone
template_2Account A, Account BS3 Bucketmy-bucketDeleteNone
template_2Account BLambda Functionarn:aws:lambda:us-west-2:123456789012:function:my-functionUpdateIncrease Memory
-''' - # Render the actual output - actual_output = render_resource_changes(resource_changes) +template_yaml = """ - resource_id: kris_test + resource_type: aws:iam:role + template_path: ./resources/aws/roles/development-2/kris_test.yaml + proposed_changes: + - account: development-2 - (350876197038) + resource_id: kris_test + current_value: + Path: / + RoleName: kris_test + RoleId: AROAVDMOZ4CXKLKGMPAFP + Arn: arn:aws:iam::350876197038:role/kris_test + CreateDate: '2022-04-22T00:54:28+00:00' + AssumeRolePolicyDocument: + Version: '2012-10-17' + Statement: + - Effect: Allow + Principal: + Service: ec2.amazonaws.com + Action: sts:AssumeRole + - Sid: noqdeleteon20220429curtis1650738227 + Effect: Allow + Principal: + AWS: arn:aws:iam::759357822767:role/NoqSaasRoleLocalDev + Action: + - sts:AssumeRole + - sts:TagSession + - Sid: noqdeleteon20220429curtis1650738517 + Effect: Allow + Principal: + AWS: arn:aws:iam::759357822767:role/NoqSaasRoleLocalDev + Action: + - sts:AssumeRole + - sts:TagSession + - Effect: Allow + Principal: + AWS: arn:aws:iam::759357822767:role/NoqCentralRoleLocalDev + Action: + - sts:AssumeRole + - sts:TagSession + - Effect: Allow + Principal: + AWS: arn:aws:iam::759357822767:role/NoqCentralRoleLocalDev + Action: + - sts:AssumeRole + - sts:TagSession + - Effect: Allow + Principal: + AWS: arn:aws:iam::759357822767:role/NoqCentralRoleLocalDev + Action: + - sts:AssumeRole + - sts:TagSession + Description: kris's test role + MaxSessionDuration: 3600 + Tags: + - Key: noq-authorized + Value: non-admin:TestTwo:us-east-1_CNoZribID_Google:NewTestGroup + - Key: noq-pending-resource-removal + Value: '2022-09-01T23:55:11.460450+00:00' + RoleLastUsed: + LastUsedDate: '2022-04-28T19:41:47+00:00' + Region: us-west-1 + ManagedPolicies: + - PolicyName: AWSDirectConnectReadOnlyAccess + PolicyArn: arn:aws:iam::aws:policy/AWSDirectConnectReadOnlyAccess + - PolicyName: AWSIoT1ClickReadOnlyAccess + PolicyArn: arn:aws:iam::aws:policy/AWSIoT1ClickReadOnlyAccess + InlinePolicies: + - PolicyName: noq_user_1659544539_nslq + Version: '2012-10-17' + Statement: + - Resource: + - arn:aws:s3:::noq-development-2-test-bucket + - arn:aws:s3:::noq-development-2-test-bucket/* + Action: + - s3:abortmultipartupload + - s3:deleteobject + - s3:deleteobjecttagging + - s3:deleteobjectversion + - s3:deleteobjectversiontagging + - s3:getobject + - s3:getobjectacl + - s3:getobjecttagging + - s3:getobjectversion + - s3:getobjectversionacl + - s3:getobjectversiontagging + - s3:listbucket + - s3:listbucketversions + - s3:listmultipartuploadparts* + - s3:putobject + - s3:putobjecttagging + - s3:putobjectversiontagging + Effect: Allow + Sid: noquser1659544529haql + - PolicyName: noq_user_1659545128_seob + Statement: + - Action: + - s3:putobject + - s3:putobjecttagging + - s3:putobjectversiontagging + Effect: Allow + Resource: + - arn:aws:s3:::noq-development-2-test-bucket + - arn:aws:s3:::noq-development-2-test-bucket/* + Sid: noquser1659544529haql + Version: '2012-10-17' + - PolicyName: noq_user_1665770085_lgks + Statement: + - Action: + - s3:getbucket* + - s3:getobject + - s3:getobjectacl + - s3:getobjecttagging + - s3:getobjectversion + - s3:getobjectversionacl + - s3:getobjectversiontagging + Effect: Allow + Resource: + - arn:aws:s3:::consoleme-dev-test-bucket + - arn:aws:s3:::consoleme-dev-test-bucket/* + Sid: noquser1665770063uboo + Version: '2012-10-17' + - PolicyName: noq_user_1665770091_yins + Statement: + - Action: + - s3:getbucket* + - s3:getobject + - s3:getobjectacl + - s3:getobjecttagging + - s3:getobjectversion + - s3:getobjectversionacl + - s3:getobjectversiontagging + Effect: Allow + Resource: + - arn:aws:s3:::consoleme-dev-test-bucket + - arn:aws:s3:::consoleme-dev-test-bucket/* + Sid: noquser1665770063uboo + Version: '2012-10-17' + - PolicyName: noq_will_1654542886_ekni + Version: '2012-10-17' + Statement: + - Resource: + - arn:aws:sns:us-west-2:759357822767:testtopic + Action: + - sns:confirmsubscription + - sns:getendpointattributes + - sns:gettopicattributes + - sns:subscribe + Effect: Allow + Sid: noqwill1654542862mhki + - PolicyName: noq_will_1654546707_fcqy + Version: '2012-10-17' + Statement: + - Resource: + - arn:aws:sqs:us-west-2:759357822767:testqueue + Action: + - sqs:getqueueattributes + - sqs:getqueueurl + - sqs:sendmessage + Effect: Allow + Sid: noqwill1654546703lxlj + - PolicyName: noq_will_1655326077_yhpo + Statement: + - Action: + - s3:abortmultipartupload + - s3:getobject + - s3:getobjectacl + - s3:getobjecttagging + - s3:getobjectversion + - s3:getobjectversionacl + - s3:getobjectversiontagging + - s3:listbucket + - s3:listbucketversions + - s3:listmultipartuploadparts* + - s3:putobject + - s3:putobjecttagging + - s3:putobjectversiontagging + Effect: Allow + Resource: + - arn:aws:s3:::noq-development-2-test-bucket + - arn:aws:s3:::noq-development-2-test-bucket/* + Sid: noqwill1655326065lpux + Version: '2012-10-17' + proposed_changes: + - change_type: Delete + resource_id: kris_test + resource_type: aws:iam:role + exceptions_seen: [] + exceptions_seen: [] + - resource_id: ConsoleMeCentralRoleDev + resource_type: aws:iam:role + template_path: ./resources/aws/roles/development/consolemecentralroledev.yaml + proposed_changes: + - account: development - (759357822767) + resource_id: ConsoleMeCentralRoleDev + current_value: + Path: / + RoleName: ConsoleMeCentralRoleDev + RoleId: AROA3BTKA24X4UN7VKPBQ + Arn: arn:aws:iam::759357822767:role/ConsoleMeCentralRoleDev + CreateDate: '2022-03-23T13:58:37+00:00' + AssumeRolePolicyDocument: + Version: '2012-10-17' + Statement: + - Effect: Allow + Principal: + Service: ecs-tasks.amazonaws.com + Action: sts:AssumeRole + - Effect: Allow + Principal: + AWS: arn:aws:iam::940552945933:role/NoqCentralRoleCorpNoqDev + Action: + - sts:AssumeRole + - sts:TagSession + - Effect: Allow + Principal: + AWS: arn:aws:iam::940552945933:role/NoqCentralRoleCorpNoqDev + Action: + - sts:AssumeRole + - sts:TagSession + - Effect: Allow + Principal: + AWS: arn:aws:iam::940552945933:role/NoqCentralRoleCorpNoqDev + Action: + - sts:AssumeRole + - sts:TagSession + Description: Allows EC2 instances to call AWS services on your behalf. + MaxSessionDuration: 3600 + Tags: + - Key: noq-tear-supported-groups + Value: engineering@noq.dev + RoleLastUsed: + LastUsedDate: '2022-06-16T15:13:09+00:00' + Region: us-east-1 + ManagedPolicies: [] + InlinePolicies: + - PolicyName: consoleme_policy + Version: '2012-10-17' + Statement: + - Effect: Allow + Action: + - access-analyzer:* + - cloudtrail:* + - cloudwatch:* + - config:SelectResourceConfig + - config:SelectAggregateResourceConfig + - dynamodb:batchgetitem + - dynamodb:batchwriteitem + - dynamodb:deleteitem + - dynamodb:describe* + - dynamodb:getitem + - dynamodb:getrecords + - dynamodb:getsharditerator + - dynamodb:putitem + - dynamodb:query + - dynamodb:scan + - dynamodb:updateitem + - dynamodb:CreateTable + - dynamodb:UpdateTimeToLive + - sns:createplatformapplication + - sns:createplatformendpoint + - sns:deleteendpoint + - sns:deleteplatformapplication + - sns:getendpointattributes + - sns:getplatformapplicationattributes + - sns:listendpointsbyplatformapplication + - sns:publish + - sns:setendpointattributes + - sns:setplatformapplicationattributes + - sts:assumerole + Resource: + - '*' + - Effect: Allow + Action: + - autoscaling:Describe* + - cloudwatch:Get* + - cloudwatch:List* + - config:BatchGet* + - config:List* + - config:Select* + - ec2:DescribeSubnets + - ec2:describevpcendpoints + - ec2:DescribeVpcs + - iam:GetAccountAuthorizationDetails + - iam:ListAccountAliases + - iam:ListAttachedRolePolicies + - ec2:describeregions + - s3:GetBucketPolicy + - s3:GetBucketTagging + - s3:ListAllMyBuckets + - s3:ListBucket + - s3:PutBucketPolicy + - s3:PutBucketTagging + - sns:GetTopicAttributes + - sns:ListTagsForResource + - sns:ListTopics + - sns:SetTopicAttributes + - sns:TagResource + - sns:UnTagResource + - sqs:GetQueueAttributes + - sqs:GetQueueUrl + - sqs:ListQueues + - sqs:ListQueueTags + - sqs:SetQueueAttributes + - sqs:TagQueue + - sqs:UntagQueue + Resource: '*' + - Effect: Allow + Action: + - s3:ListBucket + - s3:GetObject + - s3:PutObject + - s3:DeleteObject + Resource: + - arn:aws:s3:::consoleme-dev-test-bucket + - arn:aws:s3:::consoleme-dev-test-bucket/* + - Effect: Allow + Action: + - s3:ListBucket + - s3:GetObject + Resource: + - arn:aws:s3:::consoleme-dev-configuration-bucket + - arn:aws:s3:::consoleme-dev-configuration-bucket/* + - PolicyName: noq_delete_on_20220504_user_1651619558 + Version: '2012-10-17' + Statement: + - Effect: Allow + Action: + - s3:getobject + - s3:getobjectacl + - s3:getobjecttagging + - s3:getobjectversion + - s3:getobjectversionacl + - s3:getobjectversiontagging + - s3:listbucket + - s3:listbucketversions + Resource: + - arn:aws:s3:::noq-development-2-test-bucket + - arn:aws:s3:::noq-development-2-test-bucket/* + Sid: noquser1651619552mrrc + - PolicyName: noq_delete_on_20220711_user_1657459709 + Version: '2012-10-17' + Statement: + - Action: + - s3:getobject + - s3:getobjectacl + - s3:getobjecttagging + - s3:getobjectversion + - s3:getobjectversionacl + - s3:getobjectversiontagging + - s3:listbucket + - s3:listbucketversions + Effect: Allow + Resource: + - arn:aws:s3:::adostoma + - arn:aws:s3:::adostoma/* + Sid: noquser1657459619gxvf + proposed_changes: + - change_type: Delete + resource_id: ConsoleMeCentralRoleDev + resource_type: aws:iam:role + exceptions_seen: [] + exceptions_seen: [] + - resource_id: '{{account_name}}_multi_account_admin' + resource_type: aws:iam:role + template_path: ./resources/aws/roles/multi_account/account_name_multi_account_admin.yaml + proposed_changes: + - account: development - (759357822767) + resource_id: development_multi_account_admin + current_value: + Path: / + RoleName: development_multi_account_admin + RoleId: AROA3BTKA24XR7IH5OW2K + Arn: arn:aws:iam::759357822767:role/development_multi_account_admin + CreateDate: '2022-08-11T18:16:22+00:00' + AssumeRolePolicyDocument: + Version: '2012-10-17' + Statement: + - Effect: Allow + Principal: + AWS: arn:aws:iam::759357822767:role/NoqSaasRoleLocalDev + Action: + - sts:AssumeRole + - sts:TagSession + Description: Noq Admin Role + MaxSessionDuration: 3600 + PermissionsBoundary: + PermissionsBoundaryType: Policy + PermissionsBoundaryArn: arn:aws:iam::aws:policy/AmazonGlacierReadOnlyAccess + Tags: + - Key: account_name + Value: development + - Key: noq-managed + Value: 'true' + - Key: noq-authorized-cli-only + Value: curtis@noq.dev + - Key: owner + Value: noq_admins@noq.dev + RoleLastUsed: {} + ManagedPolicies: + - PolicyName: AWSDirectConnectReadOnlyAccess + PolicyArn: arn:aws:iam::aws:policy/AWSDirectConnectReadOnlyAccess + InlinePolicies: + - PolicyName: admin_policy + Version: '2012-10-17' + Statement: + - Action: + - '*' + Effect: Allow + Resource: '*' + proposed_changes: + - change_type: Delete + resource_id: development_multi_account_admin + resource_type: aws:iam:role + exceptions_seen: [] + - account: staging - (259868150464) + resource_id: staging_multi_account_admin + current_value: + Path: / + RoleName: staging_multi_account_admin + RoleId: AROATZAKZJLAICECXXMTP + Arn: arn:aws:iam::259868150464:role/staging_multi_account_admin + CreateDate: '2022-08-11T18:16:08+00:00' + AssumeRolePolicyDocument: + Version: '2012-10-17' + Statement: + - Effect: Allow + Principal: + AWS: arn:aws:iam::759357822767:role/NoqSaasRoleLocalDev + Action: + - sts:AssumeRole + - sts:TagSession + Description: Noq Admin Role + MaxSessionDuration: 3600 + PermissionsBoundary: + PermissionsBoundaryType: Policy + PermissionsBoundaryArn: arn:aws:iam::aws:policy/AmazonGlacierReadOnlyAccess + Tags: + - Key: account_name + Value: staging + - Key: noq-managed + Value: 'true' + - Key: noq-authorized-cli-only + Value: curtis@noq.dev + - Key: owner + Value: noq_admins@noq.dev + RoleLastUsed: {} + ManagedPolicies: + - PolicyName: NoqTestPolicy + PolicyArn: arn:aws:iam::259868150464:policy/NoqTestPolicy + - PolicyName: AWSDirectConnectReadOnlyAccess + PolicyArn: arn:aws:iam::aws:policy/AWSDirectConnectReadOnlyAccess + InlinePolicies: + - PolicyName: admin_policy + Version: '2012-10-17' + Statement: + - Action: + - '*' + Effect: Allow + Resource: '*' + - PolicyName: other_policy + Version: '2012-10-17' + Statement: + - Action: + - s3:* + Effect: Deny + Resource: '*' + proposed_changes: + - change_type: Delete + resource_id: staging_multi_account_admin + resource_type: aws:iam:role + exceptions_seen: [] + exceptions_seen: [] + - resource_id: '{{account_name}}_multi_account_role' + resource_type: aws:iam:role + template_path: ./resources/aws/roles/multi_account/account_name_multi_account_role.yaml + proposed_changes: + - account: development - (759357822767) + resource_id: development_multi_account_role + current_value: + Path: / + RoleName: development_multi_account_role + RoleId: AROA3BTKA24X6WQ7P6HJJ + Arn: arn:aws:iam::759357822767:role/development_multi_account_role + CreateDate: '2022-10-01T19:48:17+00:00' + AssumeRolePolicyDocument: + Version: '2012-10-17' + Statement: + - Effect: Allow + Principal: + AWS: arn:aws:iam::759357822767:role/NoqSaasRoleLocalDev + Action: + - sts:AssumeRole + - sts:TagSession + Description: Networking team role + MaxSessionDuration: 3600 + PermissionsBoundary: + PermissionsBoundaryType: Policy + PermissionsBoundaryArn: arn:aws:iam::aws:policy/AmazonGlacierReadOnlyAccess + Tags: + - Key: noq-managed + Value: 'true' + - Key: networking-scp-exempt + Value: 'true' + - Key: owner + Value: networking@example.com + RoleLastUsed: {} + ManagedPolicies: [] + InlinePolicies: [] + proposed_changes: + - change_type: Delete + resource_id: development_multi_account_role + resource_type: aws:iam:role + exceptions_seen: [] + - account: staging - (259868150464) + resource_id: staging_multi_account_role + current_value: + Path: / + RoleName: staging_multi_account_role + RoleId: AROATZAKZJLAN3DHYDCDU + Arn: arn:aws:iam::259868150464:role/staging_multi_account_role + CreateDate: '2022-10-01T19:49:01+00:00' + AssumeRolePolicyDocument: + Version: '2012-10-17' + Statement: + - Effect: Allow + Principal: + AWS: arn:aws:iam::759357822767:role/NoqSaasRoleLocalDev + Action: + - sts:AssumeRole + - sts:TagSession + Description: Networking team role + MaxSessionDuration: 3600 + PermissionsBoundary: + PermissionsBoundaryType: Policy + PermissionsBoundaryArn: arn:aws:iam::aws:policy/AmazonGlacierReadOnlyAccess + Tags: + - Key: noq-managed + Value: 'true' + - Key: networking-scp-exempt + Value: 'true' + - Key: owner + Value: networking@example.com + RoleLastUsed: {} + ManagedPolicies: [] + InlinePolicies: [] + proposed_changes: + - change_type: Delete + resource_id: staging_multi_account_role + resource_type: aws:iam:role + exceptions_seen: [] + exceptions_seen: [] + - resource_id: ConsoleMe + resource_type: aws:iam:role + template_path: ./resources/aws/roles/multi_account/consoleme.yaml + proposed_changes: + - account: test - (242350334841) + resource_id: ConsoleMe + current_value: + Path: / + RoleName: ConsoleMe + RoleId: AROATQ3JUUN466ZO5SECI + Arn: arn:aws:iam::242350334841:role/ConsoleMe + CreateDate: '2021-09-29T18:40:39+00:00' + AssumeRolePolicyDocument: + Version: '2012-10-17' + Statement: + - Effect: Allow + Principal: + AWS: AROATZAKZJLAO6SLARMN5 + Action: + - sts:AssumeRole + - sts:TagSession + Description: Allows EC2 instances to call AWS services on your behalf. + MaxSessionDuration: 3600 + Tags: + - Key: noq-aa + Value: aa + - Key: consoleme-authorized + Value: ccastrapel@gmail.com + RoleLastUsed: {} + ManagedPolicies: [] + InlinePolicies: + - PolicyName: cm_ccastrapel_1633107564_lsix + Statement: + - Action: + - s3:getobject + - s3:getobjectacl + - s3:getobjecttagging + - s3:getobjectversion + - s3:getobjectversionacl + - s3:getobjectversiontagging + - s3:listbucket + - s3:listbucketversions + Effect: Allow + Resource: + - arn:aws:s3:::cdktoolkit-stagingbucket-1n7p9avb83roq + - arn:aws:s3:::cdktoolkit-stagingbucket-1n7p9avb83roq/* + Sid: cmccastrapel1633107551ibwb + Version: '2012-10-17' + - PolicyName: consolemespoke + Statement: + - Action: + - autoscaling:Describe* + - cloudwatch:Get* + - cloudwatch:List* + - config:BatchGet* + - config:List* + - config:Select* + - ec2:describeregions + - ec2:DescribeSubnets + - ec2:describevpcendpoints + - ec2:DescribeVpcs + - iam:* + - s3:GetBucketPolicy + - s3:GetBucketTagging + - s3:ListAllMyBuckets + - s3:ListBucket + - s3:PutBucketPolicy + - s3:PutBucketTagging + - sns:GetTopicAttributes + - sns:ListTagsForResource + - sns:ListTopics + - sns:SetTopicAttributes + - sns:TagResource + - sns:UnTagResource + - sqs:GetQueueAttributes + - sqs:GetQueueUrl + - sqs:ListQueues + - sqs:ListQueueTags + - sqs:SetQueueAttributes + - sqs:TagQueue + - sqs:UntagQueue + Effect: Allow + Resource: + - '*' + Sid: iam + Version: '2012-10-17' + proposed_changes: + - change_type: Delete + resource_id: ConsoleMe + resource_type: aws:iam:role + exceptions_seen: [] + - account: staging - (259868150464) + resource_id: ConsoleMe + current_value: + Path: / + RoleName: ConsoleMe + RoleId: AROATZAKZJLAD5ZTJJESR + Arn: arn:aws:iam::259868150464:role/ConsoleMe + CreateDate: '2021-09-29T19:34:56+00:00' + AssumeRolePolicyDocument: + Version: '2012-10-17' + Statement: + - Effect: Allow + Principal: + AWS: arn:aws:iam::940552945933:role/NoqCentralRoleCorpNoqDev + Action: + - sts:AssumeRole + - sts:TagSession + - Effect: Allow + Principal: + AWS: arn:aws:iam::759357822767:role/NoqCentralRoleLocalDev + Action: + - sts:AssumeRole + - sts:TagSession + - Effect: Allow + Principal: + AWS: arn:aws:iam::259868150464:role/NoqCentralRoleStaging + Action: + - sts:AssumeRole + - sts:TagSession + Description: Allows EC2 instances to call AWS services on your behalf. + MaxSessionDuration: 3600 + PermissionsBoundary: + PermissionsBoundaryType: Policy + PermissionsBoundaryArn: arn:aws:iam::259868150464:policy/adino + RoleLastUsed: + LastUsedDate: '2023-03-05T21:02:39+00:00' + Region: us-east-1 + ManagedPolicies: [] + InlinePolicies: + - PolicyName: spokerole + Statement: + - Action: + - autoscaling:Describe* + - cloudwatch:Get* + - cloudwatch:List* + - config:BatchGet* + - config:List* + - config:Select* + - ec2:describeregions + - ec2:DescribeSubnets + - ec2:describevpcendpoints + - ec2:DescribeVpcs + - iam:* + - s3:GetBucketPolicy + - s3:GetBucketTagging + - s3:ListAllMyBuckets + - s3:ListBucket + - s3:PutBucketPolicy + - s3:PutBucketTagging + - sns:GetTopicAttributes + - sns:ListTagsForResource + - sns:ListTopics + - sns:SetTopicAttributes + - sns:TagResource + - sns:UnTagResource + - sqs:GetQueueAttributes + - sqs:GetQueueUrl + - sqs:ListQueues + - sqs:ListQueueTags + - sqs:SetQueueAttributes + - sqs:TagQueue + - sqs:UntagQueue + - organizations:ListAccounts + Effect: Allow + Resource: + - '*' + Sid: iam + Version: '2012-10-17' + proposed_changes: + - change_type: Delete + resource_id: ConsoleMe + resource_type: aws:iam:role + exceptions_seen: [] + exceptions_seen: [] + - resource_id: ConsoleMeCentralRole + resource_type: aws:iam:role + template_path: ./resources/aws/roles/multi_account/consolemecentralrole.yaml + proposed_changes: + - account: test - (242350334841) + resource_id: ConsoleMeCentralRole + current_value: + Path: / + RoleName: ConsoleMeCentralRole + RoleId: AROATQ3JUUN45LCF2LCMC + Arn: arn:aws:iam::242350334841:role/ConsoleMeCentralRole + CreateDate: '2021-10-18T17:48:02+00:00' + AssumeRolePolicyDocument: + Version: '2012-10-17' + Statement: + - Sid: ConsoleMeAssumesTarget + Effect: Allow + Principal: + AWS: AROATZAKZJLAFEBPSIDEJ + Action: sts:AssumeRole + Description: '' + MaxSessionDuration: 3600 + RoleLastUsed: {} + ManagedPolicies: [] + InlinePolicies: + - PolicyName: terraform-20211018174804250000000002 + Statement: + - Action: + - access-analyzer:* + - cloudtrail:* + - cloudwatch:* + - config:SelectResourceConfig + - config:SelectAggregateResourceConfig + - dynamodb:batchgetitem + - dynamodb:batchwriteitem + - dynamodb:deleteitem + - dynamodb:describe* + - dynamodb:getitem + - dynamodb:getrecords + - dynamodb:getsharditerator + - dynamodb:putitem + - dynamodb:query + - dynamodb:scan + - dynamodb:updateitem + - dynamodb:CreateTable + - dynamodb:UpdateTimeToLive + - sns:createplatformapplication + - sns:createplatformendpoint + - sns:deleteendpoint + - sns:deleteplatformapplication + - sns:getendpointattributes + - sns:getplatformapplicationattributes + - sns:listendpointsbyplatformapplication + - sns:publish + - sns:setendpointattributes + - sns:setplatformapplicationattributes + - sts:assumerole + Effect: Allow + Resource: + - '*' + - Action: + - ses:sendemail + - ses:sendrawemail + Condition: + StringLike: + ses:FromAddress: + - email_address_here@example.com + Effect: Allow + Resource: arn:aws:ses:*:123456789:identity/your_identity.example.com + - Action: + - autoscaling:Describe* + - cloudwatch:Get* + - cloudwatch:List* + - config:BatchGet* + - config:List* + - config:Select* + - ec2:DescribeSubnets + - ec2:describevpcendpoints + - ec2:DescribeVpcs + - iam:GetAccountAuthorizationDetails + - iam:ListAccountAliases + - iam:ListAttachedRolePolicies + - ec2:describeregions + - s3:GetBucketPolicy + - s3:GetBucketTagging + - s3:ListAllMyBuckets + - s3:ListBucket + - s3:PutBucketPolicy + - s3:PutBucketTagging + - sns:GetTopicAttributes + - sns:ListTagsForResource + - sns:ListTopics + - sns:SetTopicAttributes + - sns:TagResource + - sns:UnTagResource + - sqs:GetQueueAttributes + - sqs:GetQueueUrl + - sqs:ListQueues + - sqs:ListQueueTags + - sqs:SetQueueAttributes + - sqs:TagQueue + - sqs:UntagQueue + Effect: Allow + Resource: '*' + Version: '2012-10-17' + - PolicyName: terraform-20211018180128632100000001 + Statement: + - Action: + - access-analyzer:* + - cloudtrail:* + - cloudwatch:* + - config:SelectResourceConfig + - config:SelectAggregateResourceConfig + - dynamodb:batchgetitem + - dynamodb:batchwriteitem + - dynamodb:deleteitem + - dynamodb:describe* + - dynamodb:getitem + - dynamodb:getrecords + - dynamodb:getsharditerator + - dynamodb:putitem + - dynamodb:query + - dynamodb:scan + - dynamodb:updateitem + - dynamodb:CreateTable + - dynamodb:UpdateTimeToLive + - sns:createplatformapplication + - sns:createplatformendpoint + - sns:deleteendpoint + - sns:deleteplatformapplication + - sns:getendpointattributes + - sns:getplatformapplicationattributes + - sns:listendpointsbyplatformapplication + - sns:publish + - sns:setendpointattributes + - sns:setplatformapplicationattributes + - sts:assumerole + Effect: Allow + Resource: + - '*' + - Action: + - ses:sendemail + - ses:sendrawemail + Condition: + StringLike: + ses:FromAddress: + - email_address_here@example.com + Effect: Allow + Resource: arn:aws:ses:*:123456789:identity/your_identity.example.com + - Action: + - autoscaling:Describe* + - cloudwatch:Get* + - cloudwatch:List* + - config:BatchGet* + - config:List* + - config:Select* + - ec2:DescribeSubnets + - ec2:describevpcendpoints + - ec2:DescribeVpcs + - iam:GetAccountAuthorizationDetails + - iam:ListAccountAliases + - iam:ListAttachedRolePolicies + - ec2:describeregions + - s3:GetBucketPolicy + - s3:GetBucketTagging + - s3:ListAllMyBuckets + - s3:ListBucket + - s3:PutBucketPolicy + - s3:PutBucketTagging + - sns:GetTopicAttributes + - sns:ListTagsForResource + - sns:ListTopics + - sns:SetTopicAttributes + - sns:TagResource + - sns:UnTagResource + - sqs:GetQueueAttributes + - sqs:GetQueueUrl + - sqs:ListQueues + - sqs:ListQueueTags + - sqs:SetQueueAttributes + - sqs:TagQueue + - sqs:UntagQueue + Effect: Allow + Resource: '*' + Version: '2012-10-17' + proposed_changes: + - change_type: Delete + resource_id: ConsoleMeCentralRole + resource_type: aws:iam:role + exceptions_seen: [] + - account: demo-2 - (694815895589) + resource_id: ConsoleMeCentralRole + current_value: + Path: / + RoleName: ConsoleMeCentralRole + RoleId: AROA2DRSBGAS4VZRXLHLD + Arn: arn:aws:iam::694815895589:role/ConsoleMeCentralRole + CreateDate: '2021-10-18T17:46:33+00:00' + AssumeRolePolicyDocument: + Version: '2012-10-17' + Statement: + - Sid: ConsoleMeAssumesTarget + Effect: Allow + Principal: + AWS: AROATZAKZJLAFEBPSIDEJ + Action: sts:AssumeRole + Description: '' + MaxSessionDuration: 3600 + RoleLastUsed: {} + ManagedPolicies: [] + InlinePolicies: + - PolicyName: terraform-20211018174634639300000002 + Statement: + - Action: + - access-analyzer:* + - cloudtrail:* + - cloudwatch:* + - config:SelectResourceConfig + - config:SelectAggregateResourceConfig + - dynamodb:batchgetitem + - dynamodb:batchwriteitem + - dynamodb:deleteitem + - dynamodb:describe* + - dynamodb:getitem + - dynamodb:getrecords + - dynamodb:getsharditerator + - dynamodb:putitem + - dynamodb:query + - dynamodb:scan + - dynamodb:updateitem + - dynamodb:CreateTable + - dynamodb:UpdateTimeToLive + - sns:createplatformapplication + - sns:createplatformendpoint + - sns:deleteendpoint + - sns:deleteplatformapplication + - sns:getendpointattributes + - sns:getplatformapplicationattributes + - sns:listendpointsbyplatformapplication + - sns:publish + - sns:setendpointattributes + - sns:setplatformapplicationattributes + - sts:assumerole + Effect: Allow + Resource: + - '*' + - Action: + - ses:sendemail + - ses:sendrawemail + Condition: + StringLike: + ses:FromAddress: + - email_address_here@example.com + Effect: Allow + Resource: arn:aws:ses:*:123456789:identity/your_identity.example.com + - Action: + - autoscaling:Describe* + - cloudwatch:Get* + - cloudwatch:List* + - config:BatchGet* + - config:List* + - config:Select* + - ec2:DescribeSubnets + - ec2:describevpcendpoints + - ec2:DescribeVpcs + - iam:GetAccountAuthorizationDetails + - iam:ListAccountAliases + - iam:ListAttachedRolePolicies + - ec2:describeregions + - s3:GetBucketPolicy + - s3:GetBucketTagging + - s3:ListAllMyBuckets + - s3:ListBucket + - s3:PutBucketPolicy + - s3:PutBucketTagging + - sns:GetTopicAttributes + - sns:ListTagsForResource + - sns:ListTopics + - sns:SetTopicAttributes + - sns:TagResource + - sns:UnTagResource + - sqs:GetQueueAttributes + - sqs:GetQueueUrl + - sqs:ListQueues + - sqs:ListQueueTags + - sqs:SetQueueAttributes + - sqs:TagQueue + - sqs:UntagQueue + Effect: Allow + Resource: '*' + Version: '2012-10-17' + - PolicyName: terraform-20211018175424807000000001 + Statement: + - Action: + - access-analyzer:* + - cloudtrail:* + - cloudwatch:* + - config:SelectResourceConfig + - config:SelectAggregateResourceConfig + - dynamodb:batchgetitem + - dynamodb:batchwriteitem + - dynamodb:deleteitem + - dynamodb:describe* + - dynamodb:getitem + - dynamodb:getrecords + - dynamodb:getsharditerator + - dynamodb:putitem + - dynamodb:query + - dynamodb:scan + - dynamodb:updateitem + - dynamodb:CreateTable + - dynamodb:UpdateTimeToLive + - sns:createplatformapplication + - sns:createplatformendpoint + - sns:deleteendpoint + - sns:deleteplatformapplication + - sns:getendpointattributes + - sns:getplatformapplicationattributes + - sns:listendpointsbyplatformapplication + - sns:publish + - sns:setendpointattributes + - sns:setplatformapplicationattributes + - sts:assumerole + Effect: Allow + Resource: + - '*' + - Action: + - ses:sendemail + - ses:sendrawemail + Condition: + StringLike: + ses:FromAddress: + - email_address_here@example.com + Effect: Allow + Resource: arn:aws:ses:*:123456789:identity/your_identity.example.com + - Action: + - autoscaling:Describe* + - cloudwatch:Get* + - cloudwatch:List* + - config:BatchGet* + - config:List* + - config:Select* + - ec2:DescribeSubnets + - ec2:describevpcendpoints + - ec2:DescribeVpcs + - iam:GetAccountAuthorizationDetails + - iam:ListAccountAliases + - iam:ListAttachedRolePolicies + - ec2:describeregions + - s3:GetBucketPolicy + - s3:GetBucketTagging + - s3:ListAllMyBuckets + - s3:ListBucket + - s3:PutBucketPolicy + - s3:PutBucketTagging + - sns:GetTopicAttributes + - sns:ListTagsForResource + - sns:ListTopics + - sns:SetTopicAttributes + - sns:TagResource + - sns:UnTagResource + - sqs:GetQueueAttributes + - sqs:GetQueueUrl + - sqs:ListQueues + - sqs:ListQueueTags + - sqs:SetQueueAttributes + - sqs:TagQueue + - sqs:UntagQueue + Effect: Allow + Resource: '*' + Version: '2012-10-17' + proposed_changes: + - change_type: Delete + resource_id: ConsoleMeCentralRole + resource_type: aws:iam:role + exceptions_seen: [] + - account: demo-1 - (972417093400) + resource_id: ConsoleMeCentralRole + current_value: + Path: / + RoleName: ConsoleMeCentralRole + RoleId: AROA6E2ETJ4MMPHPSRDK4 + Arn: arn:aws:iam::972417093400:role/ConsoleMeCentralRole + CreateDate: '2021-10-18T18:56:39+00:00' + AssumeRolePolicyDocument: + Version: '2012-10-17' + Statement: + - Sid: ConsoleMeAssumesTarget + Effect: Allow + Principal: + AWS: + - AROATZAKZJLAFEBPSIDEJ + - AIDATZAKZJLANVTDUDSFH + Action: sts:AssumeRole + Description: '' + MaxSessionDuration: 3600 + RoleLastUsed: {} + ManagedPolicies: [] + InlinePolicies: + - PolicyName: iAMPolicy-947b4ca + Statement: + - Action: + - access-analyzer:* + - cloudtrail:* + - cloudwatch:* + - config:SelectResourceConfig + - config:SelectAggregateResourceConfig + - dynamodb:batchgetitem + - dynamodb:batchwriteitem + - dynamodb:deleteitem + - dynamodb:describe* + - dynamodb:getitem + - dynamodb:getrecords + - dynamodb:getsharditerator + - dynamodb:putitem + - dynamodb:query + - dynamodb:scan + - dynamodb:updateitem + - dynamodb:CreateTable + - dynamodb:UpdateTimeToLive + - sns:createplatformapplication + - sns:createplatformendpoint + - sns:deleteendpoint + - sns:deleteplatformapplication + - sns:getendpointattributes + - sns:getplatformapplicationattributes + - sns:listendpointsbyplatformapplication + - sns:publish + - sns:setendpointattributes + - sns:setplatformapplicationattributes + - sts:assumerole + Effect: Allow + Resource: + - '*' + - Action: + - ses:sendemail + - ses:sendrawemail + Condition: + StringLike: + ses:FromAddress: + - email_address_here@example.com + Effect: Allow + Resource: arn:aws:ses:*:123456789:identity/your_identity.example.com + - Action: + - autoscaling:Describe* + - cloudwatch:Get* + - cloudwatch:List* + - config:BatchGet* + - config:List* + - config:Select* + - ec2:DescribeSubnets + - ec2:describevpcendpoints + - ec2:DescribeVpcs + - iam:GetAccountAuthorizationDetails + - iam:ListAccountAliases + - iam:ListAttachedRolePolicies + - ec2:describeregions + - s3:GetBucketPolicy + - s3:GetBucketTagging + - s3:ListAllMyBuckets + - s3:ListBucket + - s3:PutBucketPolicy + - s3:PutBucketTagging + - sns:GetTopicAttributes + - sns:ListTagsForResource + - sns:ListTopics + - sns:SetTopicAttributes + - sns:TagResource + - sns:UnTagResource + - sqs:GetQueueAttributes + - sqs:GetQueueUrl + - sqs:ListQueues + - sqs:ListQueueTags + - sqs:SetQueueAttributes + - sqs:TagQueue + - sqs:UntagQueue + Effect: Allow + Resource: '*' + Version: '2012-10-17' + proposed_changes: + - change_type: Delete + resource_id: ConsoleMeCentralRole + resource_type: aws:iam:role + exceptions_seen: [] + - account: demo-3 - (518317429440) + resource_id: ConsoleMeCentralRole + current_value: + Path: / + RoleName: ConsoleMeCentralRole + RoleId: AROAXRLRAKLAGRKYZZEHN + Arn: arn:aws:iam::518317429440:role/ConsoleMeCentralRole + CreateDate: '2021-10-18T17:47:06+00:00' + AssumeRolePolicyDocument: + Version: '2012-10-17' + Statement: + - Sid: ConsoleMeAssumesTarget + Effect: Allow + Principal: + AWS: AROATZAKZJLAFEBPSIDEJ + Action: sts:AssumeRole + Description: '' + MaxSessionDuration: 3600 + RoleLastUsed: {} + ManagedPolicies: [] + InlinePolicies: + - PolicyName: terraform-20211018174708353000000002 + Statement: + - Action: + - access-analyzer:* + - cloudtrail:* + - cloudwatch:* + - config:SelectResourceConfig + - config:SelectAggregateResourceConfig + - dynamodb:batchgetitem + - dynamodb:batchwriteitem + - dynamodb:deleteitem + - dynamodb:describe* + - dynamodb:getitem + - dynamodb:getrecords + - dynamodb:getsharditerator + - dynamodb:putitem + - dynamodb:query + - dynamodb:scan + - dynamodb:updateitem + - dynamodb:CreateTable + - dynamodb:UpdateTimeToLive + - sns:createplatformapplication + - sns:createplatformendpoint + - sns:deleteendpoint + - sns:deleteplatformapplication + - sns:getendpointattributes + - sns:getplatformapplicationattributes + - sns:listendpointsbyplatformapplication + - sns:publish + - sns:setendpointattributes + - sns:setplatformapplicationattributes + - sts:assumerole + Effect: Allow + Resource: + - '*' + - Action: + - ses:sendemail + - ses:sendrawemail + Condition: + StringLike: + ses:FromAddress: + - email_address_here@example.com + Effect: Allow + Resource: arn:aws:ses:*:123456789:identity/your_identity.example.com + - Action: + - autoscaling:Describe* + - cloudwatch:Get* + - cloudwatch:List* + - config:BatchGet* + - config:List* + - config:Select* + - ec2:DescribeSubnets + - ec2:describevpcendpoints + - ec2:DescribeVpcs + - iam:GetAccountAuthorizationDetails + - iam:ListAccountAliases + - iam:ListAttachedRolePolicies + - ec2:describeregions + - s3:GetBucketPolicy + - s3:GetBucketTagging + - s3:ListAllMyBuckets + - s3:ListBucket + - s3:PutBucketPolicy + - s3:PutBucketTagging + - sns:GetTopicAttributes + - sns:ListTagsForResource + - sns:ListTopics + - sns:SetTopicAttributes + - sns:TagResource + - sns:UnTagResource + - sqs:GetQueueAttributes + - sqs:GetQueueUrl + - sqs:ListQueues + - sqs:ListQueueTags + - sqs:SetQueueAttributes + - sqs:TagQueue + - sqs:UntagQueue + Effect: Allow + Resource: '*' + Version: '2012-10-17' + - PolicyName: terraform-20211018175444253500000001 + Statement: + - Action: + - access-analyzer:* + - cloudtrail:* + - cloudwatch:* + - config:SelectResourceConfig + - config:SelectAggregateResourceConfig + - dynamodb:batchgetitem + - dynamodb:batchwriteitem + - dynamodb:deleteitem + - dynamodb:describe* + - dynamodb:getitem + - dynamodb:getrecords + - dynamodb:getsharditerator + - dynamodb:putitem + - dynamodb:query + - dynamodb:scan + - dynamodb:updateitem + - dynamodb:CreateTable + - dynamodb:UpdateTimeToLive + - sns:createplatformapplication + - sns:createplatformendpoint + - sns:deleteendpoint + - sns:deleteplatformapplication + - sns:getendpointattributes + - sns:getplatformapplicationattributes + - sns:listendpointsbyplatformapplication + - sns:publish + - sns:setendpointattributes + - sns:setplatformapplicationattributes + - sts:assumerole + Effect: Allow + Resource: + - '*' + - Action: + - ses:sendemail + - ses:sendrawemail + Condition: + StringLike: + ses:FromAddress: + - email_address_here@example.com + Effect: Allow + Resource: arn:aws:ses:*:123456789:identity/your_identity.example.com + - Action: + - autoscaling:Describe* + - cloudwatch:Get* + - cloudwatch:List* + - config:BatchGet* + - config:List* + - config:Select* + - ec2:DescribeSubnets + - ec2:describevpcendpoints + - ec2:DescribeVpcs + - iam:GetAccountAuthorizationDetails + - iam:ListAccountAliases + - iam:ListAttachedRolePolicies + - ec2:describeregions + - s3:GetBucketPolicy + - s3:GetBucketTagging + - s3:ListAllMyBuckets + - s3:ListBucket + - s3:PutBucketPolicy + - s3:PutBucketTagging + - sns:GetTopicAttributes + - sns:ListTagsForResource + - sns:ListTopics + - sns:SetTopicAttributes + - sns:TagResource + - sns:UnTagResource + - sqs:GetQueueAttributes + - sqs:GetQueueUrl + - sqs:ListQueues + - sqs:ListQueueTags + - sqs:SetQueueAttributes + - sqs:TagQueue + - sqs:UntagQueue + Effect: Allow + Resource: '*' + Version: '2012-10-17' + proposed_changes: + - change_type: Delete + resource_id: ConsoleMeCentralRole + resource_type: aws:iam:role + exceptions_seen: [] + exceptions_seen: [] + - resource_id: ConsoleMeSpokeRole + resource_type: aws:iam:role + template_path: ./resources/aws/roles/multi_account/consolemespokerole.yaml + proposed_changes: + - account: test - (242350334841) + resource_id: ConsoleMeSpokeRole + current_value: + Path: / + RoleName: ConsoleMeSpokeRole + RoleId: AROATQ3JUUN4R52PEIRRD + Arn: arn:aws:iam::242350334841:role/ConsoleMeSpokeRole + CreateDate: '2021-10-18T17:48:02+00:00' + AssumeRolePolicyDocument: + Version: '2012-10-17' + Statement: + - Sid: ConsoleMeAssumesTarget + Effect: Allow + Principal: + AWS: + - arn:aws:iam::242350334841:role/ConsoleMeCentralRole + - AROATZAKZJLAO6SLARMN5 + Action: sts:AssumeRole + Description: '' + MaxSessionDuration: 3600 + RoleLastUsed: {} + ManagedPolicies: [] + InlinePolicies: + - PolicyName: terraform-20211018174804249700000001 + Statement: + - Action: + - autoscaling:Describe* + - cloudwatch:Get* + - cloudwatch:List* + - config:BatchGet* + - config:List* + - config:Select* + - ec2:describeregions + - ec2:DescribeSubnets + - ec2:describevpcendpoints + - ec2:DescribeVpcs + - iam:* + - s3:GetBucketPolicy + - s3:GetBucketTagging + - s3:ListAllMyBuckets + - s3:ListBucket + - s3:PutBucketPolicy + - s3:PutBucketTagging + - sns:GetTopicAttributes + - sns:ListTagsForResource + - sns:ListTopics + - sns:SetTopicAttributes + - sns:TagResource + - sns:UnTagResource + - sqs:GetQueueAttributes + - sqs:GetQueueUrl + - sqs:ListQueues + - sqs:ListQueueTags + - sqs:SetQueueAttributes + - sqs:TagQueue + - sqs:UntagQueue + - organizations:ListAccounts + Effect: Allow + Resource: + - '*' + Sid: iam + Version: '2012-10-17' + - PolicyName: terraform-20211018180130834800000002 + Statement: + - Action: + - autoscaling:Describe* + - cloudwatch:Get* + - cloudwatch:List* + - config:BatchGet* + - config:List* + - config:Select* + - ec2:describeregions + - ec2:DescribeSubnets + - ec2:describevpcendpoints + - ec2:DescribeVpcs + - iam:* + - s3:GetBucketPolicy + - s3:GetBucketTagging + - s3:ListAllMyBuckets + - s3:ListBucket + - s3:PutBucketPolicy + - s3:PutBucketTagging + - sns:GetTopicAttributes + - sns:ListTagsForResource + - sns:ListTopics + - sns:SetTopicAttributes + - sns:TagResource + - sns:UnTagResource + - sqs:GetQueueAttributes + - sqs:GetQueueUrl + - sqs:ListQueues + - sqs:ListQueueTags + - sqs:SetQueueAttributes + - sqs:TagQueue + - sqs:UntagQueue + - organizations:ListAccounts + Effect: Allow + Resource: + - '*' + Sid: iam + Version: '2012-10-17' + proposed_changes: + - change_type: Delete + resource_id: ConsoleMeSpokeRole + resource_type: aws:iam:role + exceptions_seen: [] + - account: demo-2 - (694815895589) + resource_id: ConsoleMeSpokeRole + current_value: + Path: / + RoleName: ConsoleMeSpokeRole + RoleId: AROA2DRSBGAS3HZSCFK36 + Arn: arn:aws:iam::694815895589:role/ConsoleMeSpokeRole + CreateDate: '2021-10-18T17:46:33+00:00' + AssumeRolePolicyDocument: + Version: '2012-10-17' + Statement: + - Sid: ConsoleMeAssumesTarget + Effect: Allow + Principal: + AWS: + - arn:aws:iam::694815895589:role/ConsoleMeCentralRole + - AROATZAKZJLAO6SLARMN5 + - arn:aws:iam::972417093400:role/ConsoleMeCentralRole + Action: sts:AssumeRole + Description: '' + MaxSessionDuration: 3600 + RoleLastUsed: {} + ManagedPolicies: [] + InlinePolicies: + - PolicyName: terraform-20211018174634611600000001 + Statement: + - Action: + - autoscaling:Describe* + - cloudwatch:Get* + - cloudwatch:List* + - config:BatchGet* + - config:List* + - config:Select* + - ec2:describeregions + - ec2:DescribeSubnets + - ec2:describevpcendpoints + - ec2:DescribeVpcs + - iam:* + - s3:GetBucketPolicy + - s3:GetBucketTagging + - s3:ListAllMyBuckets + - s3:ListBucket + - s3:PutBucketPolicy + - s3:PutBucketTagging + - sns:GetTopicAttributes + - sns:ListTagsForResource + - sns:ListTopics + - sns:SetTopicAttributes + - sns:TagResource + - sns:UnTagResource + - sqs:GetQueueAttributes + - sqs:GetQueueUrl + - sqs:ListQueues + - sqs:ListQueueTags + - sqs:SetQueueAttributes + - sqs:TagQueue + - sqs:UntagQueue + - organizations:ListAccounts + Effect: Allow + Resource: + - '*' + Sid: iam + Version: '2012-10-17' + - PolicyName: terraform-20211018175426872300000002 + Statement: + - Action: + - autoscaling:Describe* + - cloudwatch:Get* + - cloudwatch:List* + - config:BatchGet* + - config:List* + - config:Select* + - ec2:describeregions + - ec2:DescribeSubnets + - ec2:describevpcendpoints + - ec2:DescribeVpcs + - iam:* + - s3:GetBucketPolicy + - s3:GetBucketTagging + - s3:ListAllMyBuckets + - s3:ListBucket + - s3:PutBucketPolicy + - s3:PutBucketTagging + - sns:GetTopicAttributes + - sns:ListTagsForResource + - sns:ListTopics + - sns:SetTopicAttributes + - sns:TagResource + - sns:UnTagResource + - sqs:GetQueueAttributes + - sqs:GetQueueUrl + - sqs:ListQueues + - sqs:ListQueueTags + - sqs:SetQueueAttributes + - sqs:TagQueue + - sqs:UntagQueue + - organizations:ListAccounts + Effect: Allow + Resource: + - '*' + Sid: iam + Version: '2012-10-17' + proposed_changes: + - change_type: Delete + resource_id: ConsoleMeSpokeRole + resource_type: aws:iam:role + exceptions_seen: [] + - account: demo-1 - (972417093400) + resource_id: ConsoleMeSpokeRole + current_value: + Path: / + RoleName: ConsoleMeSpokeRole + RoleId: AROA6E2ETJ4MAAJ2KANED + Arn: arn:aws:iam::972417093400:role/ConsoleMeSpokeRole + CreateDate: '2021-10-18T18:56:50+00:00' + AssumeRolePolicyDocument: + Version: '2012-10-17' + Statement: + - Sid: ConsoleMeAssumesTarget + Effect: Allow + Principal: + AWS: + - arn:aws:iam::972417093400:role/ConsoleMeCentralRole + - AROATZAKZJLAO6SLARMN5 + Action: sts:AssumeRole + Description: '' + MaxSessionDuration: 3600 + RoleLastUsed: {} + ManagedPolicies: [] + InlinePolicies: + - PolicyName: iAMPolicy2-040960f + Statement: + - Action: + - autoscaling:Describe* + - cloudwatch:Get* + - cloudwatch:List* + - config:BatchGet* + - config:List* + - config:Select* + - ec2:describeregions + - ec2:DescribeSubnets + - ec2:describevpcendpoints + - ec2:DescribeVpcs + - iam:* + - s3:GetBucketPolicy + - s3:GetBucketTagging + - s3:ListAllMyBuckets + - s3:ListBucket + - s3:PutBucketPolicy + - s3:PutBucketTagging + - sns:GetTopicAttributes + - sns:ListTagsForResource + - sns:ListTopics + - sns:SetTopicAttributes + - sns:TagResource + - sns:UnTagResource + - sqs:GetQueueAttributes + - sqs:GetQueueUrl + - sqs:ListQueues + - sqs:ListQueueTags + - sqs:SetQueueAttributes + - sqs:TagQueue + - sqs:UntagQueue + - organizations:ListAccounts + Effect: Allow + Resource: + - '*' + Sid: iam + Version: '2012-10-17' + proposed_changes: + - change_type: Delete + resource_id: ConsoleMeSpokeRole + resource_type: aws:iam:role + exceptions_seen: [] + - account: demo-3 - (518317429440) + resource_id: ConsoleMeSpokeRole + current_value: + Path: / + RoleName: ConsoleMeSpokeRole + RoleId: AROAXRLRAKLAHL22IWBOW + Arn: arn:aws:iam::518317429440:role/ConsoleMeSpokeRole + CreateDate: '2021-10-18T17:47:07+00:00' + AssumeRolePolicyDocument: + Version: '2012-10-17' + Statement: + - Sid: ConsoleMeAssumesTarget + Effect: Allow + Principal: + AWS: arn:aws:iam::518317429440:role/ConsoleMeCentralRole + Action: sts:AssumeRole + - Effect: Allow + Principal: + AWS: AROA6E2ETJ4MHYRF62AS5 + Action: + - sts:AssumeRole + - sts:TagSession + - Effect: Allow + Principal: + AWS: AROA6E2ETJ4MHYRF62AS5 + Action: + - sts:AssumeRole + - sts:TagSession + - Effect: Allow + Principal: + AWS: AROA6E2ETJ4MHYRF62AS5 + Action: + - sts:AssumeRole + - sts:TagSession + - Effect: Allow + Principal: + AWS: AROA6E2ETJ4MHYRF62AS5 + Action: + - sts:AssumeRole + - sts:TagSession + Description: '' + MaxSessionDuration: 3600 + Tags: + - Key: noq-authorized-demo + Value: rohit@noq.dev + RoleLastUsed: + LastUsedDate: '2022-11-07T19:47:51+00:00' + Region: us-east-1 + ManagedPolicies: [] + InlinePolicies: + - PolicyName: terraform-20211018174708352800000001 + Statement: + - Action: + - autoscaling:Describe* + - cloudwatch:Get* + - cloudwatch:List* + - config:BatchGet* + - config:List* + - config:Select* + - ec2:describeregions + - ec2:DescribeSubnets + - ec2:describevpcendpoints + - ec2:DescribeVpcs + - iam:* + - s3:GetBucketPolicy + - s3:GetBucketTagging + - s3:ListAllMyBuckets + - s3:ListBucket + - s3:PutBucketPolicy + - s3:PutBucketTagging + - sns:GetTopicAttributes + - sns:ListTagsForResource + - sns:ListTopics + - sns:SetTopicAttributes + - sns:TagResource + - sns:UnTagResource + - sqs:GetQueueAttributes + - sqs:GetQueueUrl + - sqs:ListQueues + - sqs:ListQueueTags + - sqs:SetQueueAttributes + - sqs:TagQueue + - sqs:UntagQueue + - organizations:ListAccounts + Effect: Allow + Resource: + - '*' + Sid: iam + Version: '2012-10-17' + - PolicyName: terraform-20211018175446299400000002 + Statement: + - Action: + - autoscaling:Describe* + - cloudwatch:Get* + - cloudwatch:List* + - config:BatchGet* + - config:List* + - config:Select* + - ec2:describeregions + - ec2:DescribeSubnets + - ec2:describevpcendpoints + - ec2:DescribeVpcs + - iam:* + - s3:GetBucketPolicy + - s3:GetBucketTagging + - s3:ListAllMyBuckets + - s3:ListBucket + - s3:PutBucketPolicy + - s3:PutBucketTagging + - sns:GetTopicAttributes + - sns:ListTagsForResource + - sns:ListTopics + - sns:SetTopicAttributes + - sns:TagResource + - sns:UnTagResource + - sqs:GetQueueAttributes + - sqs:GetQueueUrl + - sqs:ListQueues + - sqs:ListQueueTags + - sqs:SetQueueAttributes + - sqs:TagQueue + - sqs:UntagQueue + - organizations:ListAccounts + Effect: Allow + Resource: + - '*' + Sid: iam + Version: '2012-10-17' + proposed_changes: + - change_type: Delete + resource_id: ConsoleMeSpokeRole + resource_type: aws:iam:role + exceptions_seen: [] + exceptions_seen: [] + - resource_id: iambic_test_4327 + resource_type: aws:iam:role + template_path: ./resources/aws/roles/multi_account/iambic_test_4327.yaml + proposed_changes: + - account: Noq Audit - (420317713496) + resource_id: iambic_test_4327 + current_value: + Path: /iambic_test/ + RoleName: iambic_test_4327 + RoleId: AROAWDXHDKRMCMGYTXK3Z + Arn: arn:aws:iam::420317713496:role/iambic_test/iambic_test_4327 + CreateDate: '2023-01-09T15:21:36+00:00' + AssumeRolePolicyDocument: + Version: '2012-10-17' + Statement: + - Effect: Deny + Principal: + Service: ec2.amazonaws.com + Action: sts:AssumeRole + Description: Updated description + MaxSessionDuration: 3600 + RoleLastUsed: {} + ManagedPolicies: [] + InlinePolicies: [] + proposed_changes: + - change_type: Delete + resource_id: iambic_test_4327 + resource_type: aws:iam:role + exceptions_seen: [] + - account: global_tenant_data_prod - (306086318698) + resource_id: iambic_test_4327 + current_value: + Path: /iambic_test/ + RoleName: iambic_test_4327 + RoleId: AROAUORBKSJVLXNP6QSPO + Arn: arn:aws:iam::306086318698:role/iambic_test/iambic_test_4327 + CreateDate: '2023-01-09T15:21:36+00:00' + AssumeRolePolicyDocument: + Version: '2012-10-17' + Statement: + - Effect: Deny + Principal: + Service: ec2.amazonaws.com + Action: sts:AssumeRole + Description: Updated description + MaxSessionDuration: 3600 + RoleLastUsed: {} + ManagedPolicies: [] + InlinePolicies: [] + proposed_changes: + - change_type: Delete + resource_id: iambic_test_4327 + resource_type: aws:iam:role + exceptions_seen: [] + - account: zelkova - (894599878328) + resource_id: iambic_test_4327 + current_value: + Path: /iambic_test/ + RoleName: iambic_test_4327 + RoleId: AROA5ASSO224DRHWEMTEC + Arn: arn:aws:iam::894599878328:role/iambic_test/iambic_test_4327 + CreateDate: '2023-01-09T15:21:36+00:00' + AssumeRolePolicyDocument: + Version: '2012-10-17' + Statement: + - Effect: Deny + Principal: + Service: ec2.amazonaws.com + Action: sts:AssumeRole + Description: Updated description + MaxSessionDuration: 3600 + RoleLastUsed: {} + ManagedPolicies: [] + InlinePolicies: [] + proposed_changes: + - change_type: Delete + resource_id: iambic_test_4327 + resource_type: aws:iam:role + exceptions_seen: [] + - account: nonstandard_org_role - (869532243584) + resource_id: iambic_test_4327 + current_value: + Path: /iambic_test/ + RoleName: iambic_test_4327 + RoleId: AROA4U5BJC2ANLXIAZ3FM + Arn: arn:aws:iam::869532243584:role/iambic_test/iambic_test_4327 + CreateDate: '2023-01-09T15:21:36+00:00' + AssumeRolePolicyDocument: + Version: '2012-10-17' + Statement: + - Effect: Deny + Principal: + Service: ec2.amazonaws.com + Action: sts:AssumeRole + Description: Updated description + MaxSessionDuration: 3600 + RoleLastUsed: {} + ManagedPolicies: [] + InlinePolicies: [] + proposed_changes: + - change_type: Delete + resource_id: iambic_test_4327 + resource_type: aws:iam:role + exceptions_seen: [] + - account: test - (242350334841) + resource_id: iambic_test_4327 + current_value: + Path: /iambic_test/ + RoleName: iambic_test_4327 + RoleId: AROATQ3JUUN4UGPEVNARF + Arn: arn:aws:iam::242350334841:role/iambic_test/iambic_test_4327 + CreateDate: '2023-01-09T15:21:36+00:00' + AssumeRolePolicyDocument: + Version: '2012-10-17' + Statement: + - Effect: Deny + Principal: + Service: ec2.amazonaws.com + Action: sts:AssumeRole + Description: Updated description + MaxSessionDuration: 3600 + RoleLastUsed: {} + ManagedPolicies: [] + InlinePolicies: [] + proposed_changes: + - change_type: Delete + resource_id: iambic_test_4327 + resource_type: aws:iam:role + exceptions_seen: [] + - account: production - (940552945933) + resource_id: iambic_test_4327 + current_value: + Path: /iambic_test/ + RoleName: iambic_test_4327 + RoleId: AROA5V7KTAEG2VGPCN33G + Arn: arn:aws:iam::940552945933:role/iambic_test/iambic_test_4327 + CreateDate: '2023-01-09T15:21:36+00:00' + AssumeRolePolicyDocument: + Version: '2012-10-17' + Statement: + - Effect: Deny + Principal: + Service: ec2.amazonaws.com + Action: sts:AssumeRole + Description: Updated description + MaxSessionDuration: 3600 + RoleLastUsed: {} + ManagedPolicies: [] + InlinePolicies: [] + proposed_changes: + - change_type: Delete + resource_id: iambic_test_4327 + resource_type: aws:iam:role + exceptions_seen: [] + - account: demo-2 - (694815895589) + resource_id: iambic_test_4327 + current_value: + Path: /iambic_test/ + RoleName: iambic_test_4327 + RoleId: AROA2DRSBGAS4ESX6VECU + Arn: arn:aws:iam::694815895589:role/iambic_test/iambic_test_4327 + CreateDate: '2023-01-09T15:21:36+00:00' + AssumeRolePolicyDocument: + Version: '2012-10-17' + Statement: + - Effect: Deny + Principal: + Service: ec2.amazonaws.com + Action: sts:AssumeRole + Description: Updated description + MaxSessionDuration: 3600 + RoleLastUsed: {} + ManagedPolicies: [] + InlinePolicies: [] + proposed_changes: + - change_type: Delete + resource_id: iambic_test_4327 + resource_type: aws:iam:role + exceptions_seen: [] + - account: '@!#!@#)(%*#R)QWITFGO)FG+=0984 - (969947703986)' + resource_id: iambic_test_4327 + current_value: + Path: /iambic_test/ + RoleName: iambic_test_4327 + RoleId: AROA6DVLDNKZEUKWIDLOU + Arn: arn:aws:iam::969947703986:role/iambic_test/iambic_test_4327 + CreateDate: '2023-01-09T15:21:36+00:00' + AssumeRolePolicyDocument: + Version: '2012-10-17' + Statement: + - Effect: Deny + Principal: + Service: ec2.amazonaws.com + Action: sts:AssumeRole + Description: Updated description + MaxSessionDuration: 3600 + RoleLastUsed: {} + ManagedPolicies: [] + InlinePolicies: [] + proposed_changes: + - change_type: Delete + resource_id: iambic_test_4327 + resource_type: aws:iam:role + exceptions_seen: [] + - account: demo-1 - (972417093400) + resource_id: iambic_test_4327 + current_value: + Path: /iambic_test/ + RoleName: iambic_test_4327 + RoleId: AROA6E2ETJ4MLG6VXQJZY + Arn: arn:aws:iam::972417093400:role/iambic_test/iambic_test_4327 + CreateDate: '2023-01-09T15:21:36+00:00' + AssumeRolePolicyDocument: + Version: '2012-10-17' + Statement: + - Effect: Deny + Principal: + Service: ec2.amazonaws.com + Action: sts:AssumeRole + Description: Updated description + MaxSessionDuration: 3600 + RoleLastUsed: {} + ManagedPolicies: [] + InlinePolicies: [] + proposed_changes: + - change_type: Delete + resource_id: iambic_test_4327 + resource_type: aws:iam:role + exceptions_seen: [] + - account: Noq Log Archive - (430422300865) + resource_id: iambic_test_4327 + current_value: + Path: /iambic_test/ + RoleName: iambic_test_4327 + RoleId: AROAWINZLDDA3XUEP2J4N + Arn: arn:aws:iam::430422300865:role/iambic_test/iambic_test_4327 + CreateDate: '2023-01-09T15:21:36+00:00' + AssumeRolePolicyDocument: + Version: '2012-10-17' + Statement: + - Effect: Deny + Principal: + Service: ec2.amazonaws.com + Action: sts:AssumeRole + Description: Updated description + MaxSessionDuration: 3600 + RoleLastUsed: {} + ManagedPolicies: [] + InlinePolicies: [] + proposed_changes: + - change_type: Delete + resource_id: iambic_test_4327 + resource_type: aws:iam:role + exceptions_seen: [] + exceptions_seen: [] + - resource_id: iambic_test_505 + resource_type: aws:iam:role + template_path: ./resources/aws/roles/multi_account/iambic_test_505.yaml + proposed_changes: + - account: Noq Audit - (420317713496) + resource_id: iambic_test_505 + current_value: + Path: /iambic_test/ + RoleName: iambic_test_505 + RoleId: AROAWDXHDKRMGXEJYVLJM + Arn: arn:aws:iam::420317713496:role/iambic_test/iambic_test_505 + CreateDate: '2023-01-09T15:11:13+00:00' + AssumeRolePolicyDocument: + Version: '2012-10-17' + Statement: + - Effect: Deny + Principal: + Service: ec2.amazonaws.com + Action: sts:AssumeRole + Description: This was created by a functional test. + MaxSessionDuration: 3600 + RoleLastUsed: {} + ManagedPolicies: [] + InlinePolicies: [] + proposed_changes: + - change_type: Delete + resource_id: iambic_test_505 + resource_type: aws:iam:role + exceptions_seen: [] + - account: global_tenant_data_prod - (306086318698) + resource_id: iambic_test_505 + current_value: + Path: /iambic_test/ + RoleName: iambic_test_505 + RoleId: AROAUORBKSJVHA7ETEYHY + Arn: arn:aws:iam::306086318698:role/iambic_test/iambic_test_505 + CreateDate: '2023-01-09T15:11:13+00:00' + AssumeRolePolicyDocument: + Version: '2012-10-17' + Statement: + - Effect: Deny + Principal: + Service: ec2.amazonaws.com + Action: sts:AssumeRole + Description: This was created by a functional test. + MaxSessionDuration: 3600 + RoleLastUsed: {} + ManagedPolicies: [] + InlinePolicies: [] + proposed_changes: + - change_type: Delete + resource_id: iambic_test_505 + resource_type: aws:iam:role + exceptions_seen: [] + - account: zelkova - (894599878328) + resource_id: iambic_test_505 + current_value: + Path: /iambic_test/ + RoleName: iambic_test_505 + RoleId: AROA5ASSO224N5UENNAJG + Arn: arn:aws:iam::894599878328:role/iambic_test/iambic_test_505 + CreateDate: '2023-01-09T15:11:13+00:00' + AssumeRolePolicyDocument: + Version: '2012-10-17' + Statement: + - Effect: Deny + Principal: + Service: ec2.amazonaws.com + Action: sts:AssumeRole + Description: This was created by a functional test. + MaxSessionDuration: 3600 + RoleLastUsed: {} + ManagedPolicies: [] + InlinePolicies: [] + proposed_changes: + - change_type: Delete + resource_id: iambic_test_505 + resource_type: aws:iam:role + exceptions_seen: [] + - account: nonstandard_org_role - (869532243584) + resource_id: iambic_test_505 + current_value: + Path: /iambic_test/ + RoleName: iambic_test_505 + RoleId: AROA4U5BJC2AP3LUUJKO3 + Arn: arn:aws:iam::869532243584:role/iambic_test/iambic_test_505 + CreateDate: '2023-01-09T15:11:13+00:00' + AssumeRolePolicyDocument: + Version: '2012-10-17' + Statement: + - Effect: Deny + Principal: + Service: ec2.amazonaws.com + Action: sts:AssumeRole + Description: This was created by a functional test. + MaxSessionDuration: 3600 + RoleLastUsed: {} + ManagedPolicies: [] + InlinePolicies: [] + proposed_changes: + - change_type: Delete + resource_id: iambic_test_505 + resource_type: aws:iam:role + exceptions_seen: [] + - account: test - (242350334841) + resource_id: iambic_test_505 + current_value: + Path: /iambic_test/ + RoleName: iambic_test_505 + RoleId: AROATQ3JUUN4XPL2V7UW4 + Arn: arn:aws:iam::242350334841:role/iambic_test/iambic_test_505 + CreateDate: '2023-01-09T15:11:13+00:00' + AssumeRolePolicyDocument: + Version: '2012-10-17' + Statement: + - Effect: Deny + Principal: + Service: ec2.amazonaws.com + Action: sts:AssumeRole + Description: This was created by a functional test. + MaxSessionDuration: 3600 + RoleLastUsed: {} + ManagedPolicies: [] + InlinePolicies: [] + proposed_changes: + - change_type: Delete + resource_id: iambic_test_505 + resource_type: aws:iam:role + exceptions_seen: [] + - account: production - (940552945933) + resource_id: iambic_test_505 + current_value: + Path: /iambic_test/ + RoleName: iambic_test_505 + RoleId: AROA5V7KTAEGS2DSLD4KU + Arn: arn:aws:iam::940552945933:role/iambic_test/iambic_test_505 + CreateDate: '2023-01-09T15:11:13+00:00' + AssumeRolePolicyDocument: + Version: '2012-10-17' + Statement: + - Effect: Deny + Principal: + Service: ec2.amazonaws.com + Action: sts:AssumeRole + Description: This was created by a functional test. + MaxSessionDuration: 3600 + RoleLastUsed: {} + ManagedPolicies: [] + InlinePolicies: [] + proposed_changes: + - change_type: Delete + resource_id: iambic_test_505 + resource_type: aws:iam:role + exceptions_seen: [] + - account: demo-2 - (694815895589) + resource_id: iambic_test_505 + current_value: + Path: /iambic_test/ + RoleName: iambic_test_505 + RoleId: AROA2DRSBGASQ543SUJEY + Arn: arn:aws:iam::694815895589:role/iambic_test/iambic_test_505 + CreateDate: '2023-01-09T15:11:13+00:00' + AssumeRolePolicyDocument: + Version: '2012-10-17' + Statement: + - Effect: Deny + Principal: + Service: ec2.amazonaws.com + Action: sts:AssumeRole + Description: This was created by a functional test. + MaxSessionDuration: 3600 + RoleLastUsed: {} + ManagedPolicies: [] + InlinePolicies: [] + proposed_changes: + - change_type: Delete + resource_id: iambic_test_505 + resource_type: aws:iam:role + exceptions_seen: [] + - account: '@!#!@#)(%*#R)QWITFGO)FG+=0984 - (969947703986)' + resource_id: iambic_test_505 + current_value: + Path: /iambic_test/ + RoleName: iambic_test_505 + RoleId: AROA6DVLDNKZCVM5ZTQJC + Arn: arn:aws:iam::969947703986:role/iambic_test/iambic_test_505 + CreateDate: '2023-01-09T15:11:13+00:00' + AssumeRolePolicyDocument: + Version: '2012-10-17' + Statement: + - Effect: Deny + Principal: + Service: ec2.amazonaws.com + Action: sts:AssumeRole + Description: This was created by a functional test. + MaxSessionDuration: 3600 + RoleLastUsed: {} + ManagedPolicies: [] + InlinePolicies: [] + proposed_changes: + - change_type: Delete + resource_id: iambic_test_505 + resource_type: aws:iam:role + exceptions_seen: [] + - account: demo-1 - (972417093400) + resource_id: iambic_test_505 + current_value: + Path: /iambic_test/ + RoleName: iambic_test_505 + RoleId: AROA6E2ETJ4MJ2WVUFBFE + Arn: arn:aws:iam::972417093400:role/iambic_test/iambic_test_505 + CreateDate: '2023-01-09T15:11:13+00:00' + AssumeRolePolicyDocument: + Version: '2012-10-17' + Statement: + - Effect: Deny + Principal: + Service: ec2.amazonaws.com + Action: sts:AssumeRole + Description: This was created by a functional test. + MaxSessionDuration: 3600 + RoleLastUsed: {} + ManagedPolicies: [] + InlinePolicies: [] + proposed_changes: + - change_type: Delete + resource_id: iambic_test_505 + resource_type: aws:iam:role + exceptions_seen: [] + - account: Noq Log Archive - (430422300865) + resource_id: iambic_test_505 + current_value: + Path: /iambic_test/ + RoleName: iambic_test_505 + RoleId: AROAWINZLDDAV2JO5CVJD + Arn: arn:aws:iam::430422300865:role/iambic_test/iambic_test_505 + CreateDate: '2023-01-09T15:11:13+00:00' + AssumeRolePolicyDocument: + Version: '2012-10-17' + Statement: + - Effect: Deny + Principal: + Service: ec2.amazonaws.com + Action: sts:AssumeRole + Description: This was created by a functional test. + MaxSessionDuration: 3600 + RoleLastUsed: {} + ManagedPolicies: [] + InlinePolicies: [] + proposed_changes: + - change_type: Delete + resource_id: iambic_test_505 + resource_type: aws:iam:role + exceptions_seen: [] + exceptions_seen: [] + - resource_id: AutoCreateTest + resource_type: aws:iam:role + template_path: ./resources/aws/roles/staging/autocreatetest.yaml + proposed_changes: + - account: staging - (259868150464) + resource_id: AutoCreateTest + current_value: + Path: / + RoleName: AutoCreateTest + RoleId: AROATZAKZJLAEIJ65HNIB + Arn: arn:aws:iam::259868150464:role/AutoCreateTest + CreateDate: '2022-06-07T13:16:19+00:00' + AssumeRolePolicyDocument: + Version: '2012-10-17' + Statement: + - Sid: '123' + Effect: Allow + Principal: + Service: ec2.amazonaws.com + Action: sts:AssumeRole + Description: Something + MaxSessionDuration: 3600 + PermissionsBoundary: + PermissionsBoundaryType: Policy + PermissionsBoundaryArn: arn:aws:iam::259868150464:policy/bob + Tags: + - Key: tesa + Value: tesf + - Key: Service + Value: N/A + - Key: noq-tra-supported-groups + Value: user@noq.dev + RoleLastUsed: {} + ManagedPolicies: [] + InlinePolicies: + - PolicyName: noq_curtis_1656429523_kxhd + Statement: + - Action: + - s3:abortmultipartupload + - s3:listbucket + - s3:listbucketversions + - s3:listmultipartuploadparts* + - s3:putobject + - s3:putobjecttagging + - s3:putobjectversiontagging + Effect: Allow + Resource: + - arn:aws:s3:::noq-local-dev-cache + - arn:aws:s3:::noq-local-dev-cache/* + Sid: noqcurtis1656429515xsgn + Version: '2012-10-17' + - PolicyName: noq_curtis_1659530435_clut + Statement: + - Action: + - s3:getobject + - s3:getobjectacl + - s3:getobjecttagging + - s3:getobjectversion + - s3:getobjectversionacl + - s3:getobjectversiontagging + - s3:listbucket + - s3:listbucketversions + Effect: Allow + Resource: + - arn:aws:s3:::noq-demo2-test-bucket + - arn:aws:s3:::noq-demo2-test-bucket/* + Sid: noqcurtis1659530431sjrk + Version: '2012-10-17' + - PolicyName: noq_delete_on_20220615_user_1655227824 + Statement: + - Action: + - sts:assumerole + - sts:tagsession + Effect: Allow + Resource: + - arn:aws:iam::259868150464:role/ConsoleMe1 + Sid: noquser1655227802xrjl + - Action: + - sqs:deletemessage + - sqs:getqueueattributes + - sqs:getqueueurl + - sqs:purgequeue + - sqs:receivemessage + - sqs:sendmessage + - sqs:setqueueattributes + Effect: Allow + Resource: + - arn:aws:sqs:us-east-1:259868150464:phecfla + - arn:aws:sqs:us-west-2:759357822767:testqueue + Sid: noquser1655227802ojae + - Action: + - sns:confirmsubscription + - sns:getendpointattributes + - sns:gettopicattributes + - sns:publish + - sns:subscribe + - sns:unsubscribe + Effect: Allow + Resource: + - arn:aws:sns:us-west-2:759357822767:local-dev-registration-topic + Sid: noquser1655227802bnpj + - Action: + - s3:abortmultipartupload + - s3:deleteobject + - s3:deleteobjecttagging + - s3:deleteobjectversion + - s3:deleteobjectversiontagging + - s3:getobject + - s3:getobjectacl + - s3:getobjecttagging + - s3:getobjectversion + - s3:getobjectversionacl + - s3:getobjectversiontagging + - s3:listbucket + - s3:listbucketversions + - s3:listmultipartuploadparts* + - s3:putobject + - s3:putobjecttagging + - s3:putobjectversiontagging + Effect: Allow + Resource: + - arn:aws:s3:::ceuswiow + - arn:aws:s3:::ceuswiow/* + Sid: noquser1655227802qqoa + Version: '2012-10-17' + - PolicyName: noq_delete_on_20220618_user_1655496042 + Statement: + - Action: + - s3:abortmultipartupload + - s3:getobject + - s3:getobjectacl + - s3:getobjecttagging + - s3:getobjectversion + - s3:getobjectversionacl + - s3:getobjectversiontagging + - s3:listmultipartuploadparts* + - s3:putobject + - s3:putobjecttagging + - s3:putobjectversiontagging + Effect: Allow + Resource: + - arn:aws:s3:::consoleme-dev-test-bucket + - arn:aws:s3:::consoleme-dev-test-bucket/* + Sid: noquser1655496005ycbh + Version: '2012-10-17' + - PolicyName: noq_delete_on_20220628_user_1656338589 + Statement: + - Action: + - sts:assumerole + - sts:tagsession + Effect: Allow + Resource: + - arn:aws:iam::259868150464:role/ConsoleMe2 + Sid: noquser1656338510czhc + - Action: + - sqs:deletemessage + - sqs:getqueueattributes + - sqs:getqueueurl + - sqs:receivemessage + - sqs:sendmessage + Effect: Allow + Resource: + - arn:aws:sqs:us-west-2:759357822767:local-dev-registration-queue + Sid: noquser1656338510vmcr + - Action: + - s3:abortmultipartupload + - s3:getobject + - s3:getobjectacl + - s3:getobjecttagging + - s3:getobjectversion + - s3:getobjectversionacl + - s3:getobjectversiontagging + - s3:listbucket + - s3:listbucketversions + - s3:listmultipartuploadparts* + - s3:putobject + - s3:putobjecttagging + - s3:putobjectversiontagging + Effect: Allow + Resource: + - arn:aws:s3:::consoleme-dev-configuration-bucket + - arn:aws:s3:::consoleme-dev-configuration-bucket/* + Sid: noquser1656338510pfcf + Version: '2012-10-17' + - PolicyName: noq_delete_on_20220710_user_1657380290 + Statement: + - Action: + - s3:getobject + - s3:getobjectacl + - s3:getobjecttagging + - s3:getobjectversion + - s3:getobjectversionacl + - s3:getobjectversiontagging + - s3:listbucket + - s3:listbucketversions + Effect: Allow + Resource: + - arn:aws:s3:::adostoma + - arn:aws:s3:::adostoma/* + Sid: noquser1657380266wdnx + Version: '2012-10-17' + - PolicyName: noq_delete_on_20220711_user_1657381536 + Statement: + - Action: + - s3:getobject + - s3:getobjectacl + - s3:getobjecttagging + - s3:getobjectversion + - s3:getobjectversionacl + - s3:getobjectversiontagging + - s3:listbucket + - s3:listbucketversions + Effect: Allow + Resource: + - arn:aws:s3:::cdk-hnb659fds-assets-259868150464-us-east-1 + - arn:aws:s3:::cdk-hnb659fds-assets-259868150464-us-east-1/* + Sid: noquser1657381512ehjm + Version: '2012-10-17' + - PolicyName: noq_delete_on_20220914_080000_user_1663097282 + Version: '2012-10-17' + Statement: + - Effect: Allow + Action: + - s3:getbucket* + - s3:getobject + - s3:getobjectacl + - s3:getobjecttagging + - s3:getobjectversion + - s3:getobjectversionacl + - s3:getobjectversiontagging + - s3:listbucket + - s3:listbucketversions + Resource: + - arn:aws:s3:::noq-demo2-test-bucket + - arn:aws:s3:::noq-demo2-test-bucket/* + Sid: noquser1663097254lkqq + - PolicyName: noq_user_1654644829_rdyf + Statement: + - Action: + - sns:getendpointattributes + - sns:gettopicattributes + - sns:publish + Effect: Allow + Resource: + - arn:aws:sns:us-east-1:259868150464:thtaeeduon + Sid: noquser1654644822cbog + - Action: + - sqs:deletemessage + - sqs:getqueueattributes + - sqs:getqueueurl + - sqs:receivemessage + - sqs:sendmessage + Effect: Allow + Resource: + - arn:aws:sqs:us-east-1:259868150464:phecfla + Sid: noquser1654644822liuj + - Action: + - s3:getobject + - s3:getobjectacl + - s3:getobjecttagging + - s3:getobjectversion + - s3:getobjectversionacl + - s3:getobjectversiontagging + - s3:listbucket + - s3:listbucketversions + Effect: Allow + Resource: + - arn:aws:s3:::noq-local-dev-cache + - arn:aws:s3:::noq-local-dev-cache/* + Sid: noquser1654644822qddq + Version: '2012-10-17' + - PolicyName: noq_user_1657381790_cxyv + Statement: + - Action: + - sqs:deletemessage + - sqs:getqueueattributes + - sqs:getqueueurl + - sqs:receivemessage + - sqs:sendmessage + Effect: Allow + Resource: + - arn:aws:sqs:us-east-1:350876197038:noq-development-2-test-queue + Sid: noquser1657381787loao + Version: '2012-10-17' + - PolicyName: noq_user_1657382787_qzdj + Statement: + - Action: + - s3:getobject + - s3:getobjectacl + - s3:getobjecttagging + - s3:getobjectversion + - s3:getobjectversionacl + - s3:getobjectversiontagging + - s3:listbucket + - s3:listbucketversions + Effect: Allow + Resource: + - arn:aws:s3:::noqmeter-us-west-2 + - arn:aws:s3:::noqmeter-us-west-2/* + Sid: noquser1657382782hfao + Version: '2012-10-17' + - PolicyName: noq_user_1659130007_vbsa + Version: '2012-10-17' + Statement: + - Action: + - s3:abortmultipartupload + - s3:deleteobject + - s3:deleteobjecttagging + - s3:deleteobjectversion + - s3:deleteobjectversiontagging + - s3:getobject + - s3:getobjectacl + - s3:getobjecttagging + - s3:getobjectversion + - s3:getobjectversionacl + - s3:getobjectversiontagging + - s3:listbucket + - s3:listbucketversions + - s3:listmultipartuploadparts* + - s3:putobject + - s3:putobjecttagging + - s3:putobjectversiontagging + Effect: Allow + Resource: + - arn:aws:s3:::read-only-test-bucket-2423-5033-4841 + - arn:aws:s3:::read-only-test-bucket-2423-5033-4841/* + Sid: noquser1659129997mxch + - PolicyName: noq_user_1665875774_rwvx + Statement: + - Action: + - s3:getbucket* + - s3:getobject + - s3:getobjectacl + - s3:getobjecttagging + - s3:getobjectversion + - s3:getobjectversionacl + - s3:getobjectversiontagging + - s3:listbucket + - s3:listbucketversions + Effect: Allow + Resource: + - arn:aws:s3:::ceuswiow + - arn:aws:s3:::ceuswiow/* + Sid: noquser1665875768sdxt + Version: '2012-10-17' + - PolicyName: noq_user_1665875828_xjoz + Statement: + - Action: + - s3:getbucket* + - s3:getobject + - s3:getobjectacl + - s3:getobjecttagging + - s3:getobjectversion + - s3:getobjectversionacl + - s3:getobjectversiontagging + - s3:listbucket + - s3:listbucketversions + Effect: Allow + Resource: + - arn:aws:s3:::ceuswiow + - arn:aws:s3:::ceuswiow/* + Sid: noquser1665875768sdxt + Version: '2012-10-17' + proposed_changes: + - change_type: Delete + resource_id: AutoCreateTest + resource_type: aws:iam:role + exceptions_seen: [] + exceptions_seen: [] + - resource_id: CloudWatchToElasticSearchRole + resource_type: aws:iam:role + template_path: ./resources/aws/roles/staging/cloudwatchtoelasticsearchrole.yaml + proposed_changes: + - account: staging - (259868150464) + resource_id: CloudWatchToElasticSearchRole + current_value: + Path: / + RoleName: CloudWatchToElasticSearchRole + RoleId: AROATZAKZJLAPMWOIHJZN + Arn: arn:aws:iam::259868150464:role/CloudWatchToElasticSearchRole + CreateDate: '2022-05-02T22:52:35+00:00' + AssumeRolePolicyDocument: + Version: '2012-10-17' + Statement: + - Effect: Allow + Principal: + Service: lambda.amazonaws.com + Action: sts:AssumeRole + Description: Role created by curtis@noq.dev through ConsoleMe + MaxSessionDuration: 3600 + RoleLastUsed: + LastUsedDate: '2022-05-02T23:05:21+00:00' + Region: us-west-2 + ManagedPolicies: + - PolicyName: AWSLambdaVPCAccessExecutionRole + PolicyArn: arn:aws:iam::aws:policy/service-role/AWSLambdaVPCAccessExecutionRole + - PolicyName: AmazonOpenSearchServiceFullAccess + PolicyArn: arn:aws:iam::aws:policy/AmazonOpenSearchServiceFullAccess + InlinePolicies: [] + proposed_changes: + - change_type: Delete + resource_id: CloudWatchToElasticSearchRole + resource_type: aws:iam:role + exceptions_seen: [] + exceptions_seen: [] + - resource_id: ConsoleMe1 + resource_type: aws:iam:role + template_path: ./resources/aws/roles/staging/consoleme1.yaml + proposed_changes: + - account: staging - (259868150464) + resource_id: ConsoleMe1 + current_value: + Path: / + RoleName: ConsoleMe1 + RoleId: AROATZAKZJLAIK2WADW44 + Arn: arn:aws:iam::259868150464:role/ConsoleMe1 + CreateDate: '2021-09-29T15:57:13+00:00' + AssumeRolePolicyDocument: + Version: '2012-10-17' + Statement: + - Effect: Allow + Principal: + AWS: arn:aws:iam::940552945933:role/NoqCentralRoleCorpNoqDev + Action: sts:AssumeRole + Description: '' + MaxSessionDuration: 3600 + Tags: + - Key: noq-tra-supported-groups + Value: engineering@noq.dev + - Key: consoleme-authorized + Value: bayareasec@gmail.com:ccastrapel@gmail.com + RoleLastUsed: + LastUsedDate: '2022-10-27T16:18:46+00:00' + Region: us-east-2 + ManagedPolicies: [] + InlinePolicies: + - PolicyName: admin + Version: '2012-10-17' + Statement: + - Action: '*' + Effect: Deny + Resource: '*' + - PolicyName: noq_delete_on_20220618_user_1655495329 + Statement: + - Action: + - s3:abortmultipartupload + - s3:listbucket + - s3:listbucketversions + - s3:listmultipartuploadparts* + - s3:putobject + - s3:putobjecttagging + - s3:putobjectversiontagging + Effect: Allow + Resource: + - arn:aws:s3:::consoleme-dev-test-bucket + - arn:aws:s3:::consoleme-dev-test-bucket/* + Sid: noquser1655495264kkus + Version: '2012-10-17' + - PolicyName: noq_user_1654695156_krwp + Statement: + - Action: + - s3:getobject + - s3:getobjectacl + - s3:getobjecttagging + - s3:getobjectversion + - s3:getobjectversionacl + - s3:getobjectversiontagging + - s3:listbucket + - s3:listbucketversions + Effect: Allow + Resource: + - arn:aws:s3:::ceuswiow + - arn:aws:s3:::ceuswiow/* + Sid: noquser1654695151zcsl + Version: '2012-10-17' + proposed_changes: + - change_type: Delete + resource_id: ConsoleMe1 + resource_type: aws:iam:role + exceptions_seen: [] + exceptions_seen: [] + - resource_id: ConsoleMe2 + resource_type: aws:iam:role + template_path: ./resources/aws/roles/staging/consoleme2.yaml + proposed_changes: + - account: staging - (259868150464) + resource_id: ConsoleMe2 + current_value: + Path: / + RoleName: ConsoleMe2 + RoleId: AROATZAKZJLAHD2GGNKAX + Arn: arn:aws:iam::259868150464:role/ConsoleMe2 + CreateDate: '2021-09-29T16:37:34+00:00' + AssumeRolePolicyDocument: + Version: '2012-10-17' + Statement: + - Effect: Allow + Principal: + AWS: AROATZAKZJLAO6SLARMN5 + Action: sts:AssumeRole + - Sid: noqdeleteon20220628user1656338589 + Effect: Allow + Principal: + AWS: arn:aws:iam::259868150464:role/AutoCreateTest + Action: + - sts:TagSession + - sts:AssumeRole + Description: Role cloned via ConsoleMe by consoleme_admin@example.com from arn:aws:iam::259868150464:role/ConsoleMe1 + MaxSessionDuration: 3600 + Tags: + - Key: test + Value: test + - Key: consoleme-authorized + Value: ccastrapel@gmail.com:bayareasec@gmail.com + RoleLastUsed: {} + ManagedPolicies: + - PolicyName: aoiaedraf + PolicyArn: arn:aws:iam::259868150464:policy/aoiaedraf + InlinePolicies: + - PolicyName: cm_consoleme_admin_1632935706_heel + Statement: + - Action: + - autoscaling:Describe* + - cloudwatch:Get* + - cloudwatch:List* + - config:BatchGet* + - config:List* + - config:Select* + - ec2:describeregions + - ec2:DescribeSubnets + - ec2:describevpcendpoints + - ec2:DescribeVpcs + - iam:* + - s3:GetBucketPolicy + - s3:GetBucketTagging + - s3:ListAllMyBuckets + - s3:ListBucket + - s3:PutBucketPolicy + - s3:PutBucketTagging + - sns:GetTopicAttributes + - sns:ListTagsForResource + - sns:ListTopics + - sns:SetTopicAttributes + - sns:TagResource + - sns:UnTagResource + - sqs:GetQueueAttributes + - sqs:GetQueueUrl + - sqs:ListQueues + - sqs:ListQueueTags + - sqs:SetQueueAttributes + - sqs:TagQueue + - sqs:UntagQueue + - organizations:listaccounts + Effect: Allow + Resource: + - '*' + Sid: iam + Version: '2012-10-17' + - PolicyName: cm_consoleme_admin_1632937591_bitr + Statement: + - Action: + - sqs:ReceiveMessage + - sqs:SendMessage + - sqs:DeleteMessage + - sqs:GetQueueUrl + - sqs:GetQueueAttributes + Effect: Allow + Resource: arn:aws:sqs:us-east-1:259868150464:chiyeps + proposed_changes: + - change_type: Delete + resource_id: ConsoleMe2 + resource_type: aws:iam:role + exceptions_seen: [] + exceptions_seen: [] + - resource_id: daw + resource_type: aws:iam:role + template_path: ./resources/aws/roles/staging/daw.yaml + proposed_changes: + - account: staging - (259868150464) + resource_id: daw + current_value: + Path: / + RoleName: daw + RoleId: AROATZAKZJLANB2VI3NXY + Arn: arn:aws:iam::259868150464:role/daw + CreateDate: '2021-10-05T17:12:31+00:00' + AssumeRolePolicyDocument: + Version: '2012-10-17' + Statement: + - Effect: Allow + Principal: + Service: ec2.amazonaws.com + Action: sts:AssumeRole + - Effect: Allow + Principal: + AWS: AROATZAKZJLAO6SLARMN5 + Action: sts:AssumeRole + Description: '' + MaxSessionDuration: 3600 + Tags: + - Key: consoleme-authorized + Value: ccastrapel@gmail.com:bayareasec@gmail.com + RoleLastUsed: {} + ManagedPolicies: [] + InlinePolicies: [] + proposed_changes: + - change_type: Delete + resource_id: daw + resource_type: aws:iam:role + exceptions_seen: [] + exceptions_seen: [] + - resource_id: diseiwetuypora + resource_type: aws:iam:role + template_path: ./resources/aws/roles/staging/diseiwetuypora.yaml + proposed_changes: + - account: staging - (259868150464) + resource_id: diseiwetuypora + current_value: + Path: / + RoleName: diseiwetuypora + RoleId: AROATZAKZJLAG2V7VFQS5 + Arn: arn:aws:iam::259868150464:role/diseiwetuypora + CreateDate: '2021-10-05T17:12:37+00:00' + AssumeRolePolicyDocument: + Version: '2012-10-17' + Statement: + - Effect: Allow + Principal: + Service: ec2.amazonaws.com + Action: sts:AssumeRole + - Effect: Allow + Principal: + AWS: AROATZAKZJLAO6SLARMN5 + Action: sts:AssumeRole + Description: '' + MaxSessionDuration: 3600 + Tags: + - Key: consoleme-authorized + Value: ccastrapel@gmail.com:bayareasec@gmail.com + RoleLastUsed: {} + ManagedPolicies: [] + InlinePolicies: [] + proposed_changes: + - change_type: Delete + resource_id: diseiwetuypora + resource_type: aws:iam:role + exceptions_seen: [] + exceptions_seen: [] + - resource_id: dob + resource_type: aws:iam:role + template_path: ./resources/aws/roles/staging/dob.yaml + proposed_changes: + - account: staging - (259868150464) + resource_id: dob + current_value: + Path: / + RoleName: dob + RoleId: AROATZAKZJLAH2MAPSWLO + Arn: arn:aws:iam::259868150464:role/dob + CreateDate: '2021-10-01T17:30:47+00:00' + AssumeRolePolicyDocument: + Version: '2012-10-17' + Statement: + - Effect: Allow + Principal: + Service: ec2.amazonaws.com + Action: sts:AssumeRole + - Effect: Allow + Principal: + AWS: AROATZAKZJLAO6SLARMN5 + Action: sts:AssumeRole + Description: '' + MaxSessionDuration: 3600 + Tags: + - Key: consoleme-authorized + Value: ccastrapel@gmail.com:bayareasec@gmail.com + RoleLastUsed: {} + ManagedPolicies: [] + InlinePolicies: [] + proposed_changes: + - change_type: Delete + resource_id: dob + resource_type: aws:iam:role + exceptions_seen: [] + exceptions_seen: [] + - resource_id: efoa + resource_type: aws:iam:role + template_path: ./resources/aws/roles/staging/efoa.yaml + proposed_changes: + - account: staging - (259868150464) + resource_id: efoa + current_value: + Path: / + RoleName: efoa + RoleId: AROATZAKZJLAK3KOEYXL3 + Arn: arn:aws:iam::259868150464:role/efoa + CreateDate: '2021-10-05T17:13:02+00:00' + AssumeRolePolicyDocument: + Version: '2012-10-17' + Statement: + - Effect: Allow + Principal: + Service: ec2.amazonaws.com + Action: sts:AssumeRole + - Effect: Allow + Principal: + AWS: AROATZAKZJLAO6SLARMN5 + Action: sts:AssumeRole + Description: '' + MaxSessionDuration: 3600 + Tags: + - Key: consoleme-authorized + Value: ccastrapel@gmail.com:bayareasec@gmail.com + RoleLastUsed: {} + ManagedPolicies: [] + InlinePolicies: [] + proposed_changes: + - change_type: Delete + resource_id: efoa + resource_type: aws:iam:role + exceptions_seen: [] + exceptions_seen: [] + - resource_id: MattsExperimentingWithWeepProxyRoleTest + resource_type: aws:iam:role + template_path: ./resources/aws/roles/staging/mattsexperimentingwithweepproxyroletest.yaml + proposed_changes: + - account: staging - (259868150464) + resource_id: MattsExperimentingWithWeepProxyRoleTest + current_value: + Path: / + RoleName: MattsExperimentingWithWeepProxyRoleTest + RoleId: AROATZAKZJLAL3YWM2AGN + Arn: arn:aws:iam::259868150464:role/MattsExperimentingWithWeepProxyRoleTest + CreateDate: '2022-07-19T20:42:47+00:00' + AssumeRolePolicyDocument: + Version: '2012-10-17' + Statement: + - Effect: Allow + Principal: + Service: ec2.amazonaws.com + Action: sts:AssumeRole + - Effect: Allow + Principal: + AWS: arn:aws:iam::940552945933:role/NoqCentralRoleCorpNoqDev + Action: + - sts:AssumeRole + - sts:TagSession + - Effect: Allow + Principal: + AWS: arn:aws:iam::940552945933:role/NoqCentralRoleCorpNoqDev + Action: + - sts:AssumeRole + - sts:TagSession + - Effect: Allow + Principal: + AWS: arn:aws:iam::940552945933:role/NoqCentralRoleCorpNoqDev + Action: + - sts:AssumeRole + - sts:TagSession + - Effect: Allow + Principal: + AWS: arn:aws:iam::940552945933:role/NoqCentralRoleCorpNoqDev + Action: + - sts:AssumeRole + - sts:TagSession + - Effect: Allow + Principal: + AWS: arn:aws:iam::940552945933:role/NoqCentralRoleCorpNoqDev + Action: + - sts:AssumeRole + - sts:TagSession + - Effect: Allow + Principal: + AWS: arn:aws:iam::940552945933:role/NoqCentralRoleCorpNoqDev + Action: + - sts:AssumeRole + - sts:TagSession + Description: The role name is also the description + MaxSessionDuration: 3600 + Tags: + - Key: noq-authorized + Value: engineering@noq.dev + RoleLastUsed: + LastUsedDate: '2022-09-02T23:27:43+00:00' + Region: us-west-2 + ManagedPolicies: [] + InlinePolicies: + - PolicyName: noq_matt_1658263648_dooy + Statement: + - Action: + - s3:ListBucket + - s3:GetObject + Effect: Allow + Resource: + - arn:aws:s3:::consoleme-dev-test-bucket + - arn:aws:s3:::consoleme-dev-test-bucket/* + Sid: s3readonly + - PolicyName: noq_user_1659560951_kocq + Version: '2012-10-17' + Statement: + - Action: + - s3:abortmultipartupload + - s3:deleteobject + - s3:deleteobjecttagging + - s3:deleteobjectversion + - s3:deleteobjectversiontagging + - s3:getobject + - s3:getobjectacl + - s3:getobjecttagging + - s3:getobjectversion + - s3:getobjectversionacl + - s3:getobjectversiontagging + - s3:listbucket + - s3:listbucketversions + - s3:listmultipartuploadparts* + - s3:putobject + - s3:putobjecttagging + - s3:putobjectversiontagging + Effect: Allow + Resource: + - arn:aws:s3:::my-bucket-1234-noq-1234 + - arn:aws:s3:::my-bucket-1234-noq-1234/* + Sid: noquser1659560872akty + proposed_changes: + - change_type: Delete + resource_id: MattsExperimentingWithWeepProxyRoleTest + resource_type: aws:iam:role + exceptions_seen: [] + exceptions_seen: [] + - resource_id: shannon_access_role + resource_type: aws:iam:role + template_path: ./resources/aws/roles/unusual_demo/shannon_access_role.yaml + proposed_changes: + - account: unusual_demo - (197024362139) + resource_id: shannon_access_role + current_value: + Path: / + RoleName: shannon_access_role + RoleId: AROAS3X4RF2NZ6YI4JEHW + Arn: arn:aws:iam::197024362139:role/shannon_access_role + CreateDate: '2022-03-08T14:48:33+00:00' + AssumeRolePolicyDocument: + Version: '2012-10-17' + Statement: + - Effect: Allow + Principal: + Service: ec2.amazonaws.com + Action: sts:AssumeRole + - Effect: Allow + Principal: + AWS: arn:aws:iam::197024362139:role/NoqCentralRole + Action: + - sts:AssumeRole + - sts:TagSession + - Effect: Allow + Principal: + AWS: arn:aws:iam::197024362139:role/NoqCentralRole + Action: + - sts:AssumeRole + - sts:TagSession + - Effect: Allow + Principal: + AWS: arn:aws:iam::197024362139:role/NoqCentralRole + Action: + - sts:AssumeRole + - sts:TagSession + Description: Role created by curtis@noq.dev through ConsoleMe + MaxSessionDuration: 3600 + Tags: + - Key: noq_authorized + Value: shannon@unusual.vc:curtis@noq.dev:noq_admins + RoleLastUsed: + LastUsedDate: '2022-03-11T21:45:50+00:00' + Region: us-west-2 + ManagedPolicies: [] + InlinePolicies: + - PolicyName: noq_shannon_1647034634_ahrj + Version: '2012-10-17' + Statement: + - Action: + - s3:abortmultipartupload + - s3:deleteobject + - s3:deleteobjecttagging + - s3:deleteobjectversion + - s3:deleteobjectversiontagging + - s3:getobject + - s3:getobjectacl + - s3:getobjecttagging + - s3:getobjectversion + - s3:getobjectversionacl + - s3:getobjectversiontagging + - s3:listbucket + - s3:listbucketversions + - s3:listmultipartuploadparts* + - s3:putobject + - s3:putobjecttagging + - s3:putobjectversiontagging + Effect: Allow + Resource: + - arn:aws:s3:::* + Sid: cmshannon1647034594vcwr + - Action: + - iam:passrole + Effect: Allow + Resource: + - arn:aws:iam::197024362139:role/rds-monitoring-role + Sid: cmshannon1647034594kxfu + - Action: + - ec2:attachvolume + - ec2:createvolume + - ec2:describelicenses + - ec2:describevolumes + - ec2:detachvolume + - ec2:reportinstancestatus + - ec2:resetsnapshotattribute + Effect: Allow + Resource: + - '*' + Sid: cmshannon1647034594cwoq + - PolicyName: noq_shannon_1647035133_nlpr + Version: '2012-10-17' + Statement: + - Action: + - s3:abortmultipartupload + - s3:deleteobject + - s3:deleteobjecttagging + - s3:deleteobjectversion + - s3:deleteobjectversiontagging + - s3:getobject + - s3:getobjectacl + - s3:getobjecttagging + - s3:getobjectversion + - s3:getobjectversionacl + - s3:getobjectversiontagging + - s3:listbucket + - s3:listbucketversions + - s3:listmultipartuploadparts* + - s3:putobject + - s3:putobjecttagging + - s3:putobjectversiontagging + Effect: Allow + Resource: + - arn:aws:s3:::* + Sid: cmshannon1647035119fskh + proposed_changes: + - change_type: Delete + resource_id: shannon_access_role + resource_type: aws:iam:role + exceptions_seen: [] + exceptions_seen: [] + - resource_id: unusual_team + resource_type: aws:iam:role + template_path: ./resources/aws/roles/unusual_demo/unusual_team.yaml + proposed_changes: + - account: unusual_demo - (197024362139) + resource_id: unusual_team + current_value: + Path: / + RoleName: unusual_team + RoleId: AROAS3X4RF2NQQZON6VWU + Arn: arn:aws:iam::197024362139:role/unusual_team + CreateDate: '2022-03-08T15:29:20+00:00' + AssumeRolePolicyDocument: + Version: '2012-10-17' + Statement: + - Effect: Allow + Principal: + Service: ec2.amazonaws.com + Action: sts:AssumeRole + - Effect: Allow + Principal: + AWS: arn:aws:iam::197024362139:role/NoqCentralRole + Action: + - sts:AssumeRole + - sts:TagSession + - Effect: Allow + Principal: + AWS: arn:aws:iam::197024362139:role/NoqCentralRole + Action: + - sts:AssumeRole + - sts:TagSession + - Effect: Allow + Principal: + AWS: arn:aws:iam::197024362139:role/NoqCentralRole + Action: + - sts:AssumeRole + - sts:TagSession + Description: Role created by curtis@noq.dev through ConsoleMe + MaxSessionDuration: 3600 + Tags: + - Key: noq_authorized + Value: shannon@unusual.vc:curtis@noq.dev:noq_admins + RoleLastUsed: + LastUsedDate: '2022-03-11T21:30:04+00:00' + Region: us-east-1 + ManagedPolicies: [] + InlinePolicies: [] + proposed_changes: + - change_type: Delete + resource_id: unusual_team + resource_type: aws:iam:role + exceptions_seen: [] + exceptions_seen: [] +""" - with open("test.md", "w") as f: - f.write(actual_output) - # Compare the expected and actual output - assert actual_output.strip().replace(' ', '') == expected_output.strip().replace(' ', '') +def get_templates(): + return TemplateChangeDetails.parse_obj(yaml.load(template_yaml)) + + +# def test_render_resource_changes(): +# resource_changes = [ +# {'resource_type': 'EC2 Instance', 'resource_id': 'i-1234567890abcdefg', 'action': 'Stop', 'proposed_change': 'None', 'accounts': ['Account A', 'Account B'], 'template_id': 'template_1'}, +# {'resource_type': 'RDS Instance', 'resource_id': 'db-abcdefghijklmno', 'action': 'Delete', 'proposed_change': 'None', 'accounts': ['Account A'], 'template_id': 'template_1'}, +# {'resource_type': 'Lambda Function', 'resource_id': 'arn:aws:lambda:us-west-2:123456789012:function:my-function', 'action': 'Update', 'proposed_change': 'Increase Memory', 'accounts': ['Account B'], 'template_id': 'template_2'}, +# {'resource_type': 'S3 Bucket', 'resource_id': 'my-bucket', 'action': 'Delete', 'proposed_change': 'None', 'accounts': ['Account A', 'Account B'], 'template_id': 'template_2'}, +# ] + +# expected_output = ''' +# +# +# +# +# +# +# +# +# +# +# +# +# +# +# +# +# +# +# +# +# +# +# +# +# +# +# +# +# +# +# +# +# +# +# +# +# +# +# +# +# +# +# +# +# +#
Template IDAccountResource TypeResource IDActionProposed Change
template_1Account ARDS Instancedb-abcdefghijklmnoDeleteNone
template_1Account A, Account BEC2 Instancei-1234567890abcdefgStopNone
template_2Account A, Account BS3 Bucketmy-bucketDeleteNone
template_2Account BLambda Functionarn:aws:lambda:us-west-2:123456789012:function:my-functionUpdateIncrease Memory
+# ''' + +# # Render the actual output +# actual_output = render_resource_changes(resource_changes) + +# with open("test.md", "w") as f: +# f.write(actual_output) + +# # Compare the expected and actual output +# assert actual_output.strip().replace(' ', '') == expected_output.strip().replace(' ', '') + + +@pytest.mark.parametrize("template_change_details, expected_output", [ + (get_templates(), ActionSummaries), +]) +def test_get_template_data(template_change_details, expected_output): + template_data = get_template_data(template_change_details) + assert template_data == expected_output From 48723304e860fd8ffb972d381402dee020ab373e Mon Sep 17 00:00:00 2001 From: Matt Daue Date: Sat, 11 Mar 2023 14:38:24 -0800 Subject: [PATCH 08/17] Fixes Signed-off-by: Matt Daue --- iambic/output/markdown.py | 2 +- test/output/test_markdown_generator.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/iambic/output/markdown.py b/iambic/output/markdown.py index b7509e2ec..1eeb0a9ad 100644 --- a/iambic/output/markdown.py +++ b/iambic/output/markdown.py @@ -106,7 +106,7 @@ class ActionSummaries(PydanticBaseModel): exceptions: List[ExceptionSummary] def __init__(self, changes: List[TemplateChangeDetails]): - self.action_summaries = [ActionSummary.compile(changes, x) for x in list(ProposedChangeType)] + self.action_summaries = [ActionSummary.compile_proposed_changes(changes, x) for x in list(ProposedChangeType)] self.num_actions = len(self.action_summaries) self.num_templates = sum([len(x.templates) for x in self.action_summaries]) self.num_accounts = sum([len(z.accounts) for y in self.action_summaries for z in y.templates]) diff --git a/test/output/test_markdown_generator.py b/test/output/test_markdown_generator.py index 2e9b51fd1..b5bee6ee7 100644 --- a/test/output/test_markdown_generator.py +++ b/test/output/test_markdown_generator.py @@ -3338,7 +3338,7 @@ def get_templates(): - return TemplateChangeDetails.parse_obj(yaml.load(template_yaml)) + return [TemplateChangeDetails.parse_obj(x) for x in yaml.load(template_yaml)] # def test_render_resource_changes(): From f1f65b7ddb83d06ea78aefbcc3de0a84ec6eadba Mon Sep 17 00:00:00 2001 From: Matt Daue Date: Sat, 11 Mar 2023 19:12:23 -0800 Subject: [PATCH 09/17] Update templates to render new struct Signed-off-by: Matt Daue --- iambic/output/markdown.py | 147 ++++-- iambic/output/templates/accounts.jinja2 | 17 +- iambic/output/templates/actions.jinja2 | 4 +- iambic/output/templates/change_details.jinja2 | 10 - .../output/templates/resource_change.jinja2 | 38 +- iambic/output/templates/summary.jinja2 | 68 ++- iambic/output/templates/template.jinja2 | 4 +- test/output/test_markdown_generator.py | 491 +++++++++++++++--- 8 files changed, 608 insertions(+), 171 deletions(-) delete mode 100644 iambic/output/templates/change_details.jinja2 diff --git a/iambic/output/markdown.py b/iambic/output/markdown.py index 1eeb0a9ad..a9caba3d3 100644 --- a/iambic/output/markdown.py +++ b/iambic/output/markdown.py @@ -1,7 +1,7 @@ import pathlib -from typing import Any, Dict, List +from typing import Any, Dict, List, Set from jinja2 import Environment, FileSystemLoader -from pydantic import BaseModel as PydanticBaseModel +from pydantic import BaseModel as PydanticBaseModel, Field from iambic.core.logger import log from iambic.core.models import ( @@ -13,84 +13,115 @@ class ApplicableChange(PydanticBaseModel): - change: ProposedChange - template_change: TemplateChangeDetails - template_name: str + account: str = Field(default=None) + change: ProposedChange = Field(default=None) + template_change: TemplateChangeDetails = Field(default=None) + template_name: str = Field(default=None) + resource_id: str = Field(default=None) + resource_type: str = Field(default=None) + + def __hash__(self): + return hash((self.resource_id, self.resource_type)) def __init__(self, change: ProposedChange, template_change: TemplateChangeDetails, **data: Any) -> None: - self.template_name = pathlib.Path(template_change.template_path).name super().__init__(change=change, template_change=template_change, **data) - + self.template_name = pathlib.Path(template_change.template_path).name + class AccountSummary(PydanticBaseModel): - account: str - count: int - proposed_changes: List[ProposedChange] + account: str = Field(default="NONE") + count: int = Field(default=0) + num_changes: int = Field(default=0) + changes: List[ProposedChange] = Field(default=[]) - def __init__(self, account: str, count: int, changes: List[ProposedChange], **data: Any) -> None: - self.account = account - self.count = count - self.proposed_changes = changes + @classmethod + def compile(cls, account: str, count: int, changes: List[ProposedChange], **data: Any) -> None: + instance = cls() + instance.account = account + instance.count = count + instance.num_changes = len(changes) + instance.changes = changes + return instance class TemplateSummary(PydanticBaseModel): - template_path: str - template_name: str - count: int - accounts: List[AccountSummary] + template_path: str = Field(default="") + template_name: str = Field(default="") + count: int = Field(default=0) + num_accounts: int = Field(default=0) + accounts: List[AccountSummary] = Field(default=[]) - def __init__(self, template_path: str, template_name: str, changes: List[ProposedChange], **data: Any) -> None: - self.accounts = [AccountSummary( + def __hash__(self): + return hash(self.template_path) + + @classmethod + def compile(cls, template_path: str, template_name: str, count: int, changes: List[ProposedChange], **data: Any) -> None: + instance = cls() + instance.template_path = template_path + instance.template_name = template_name + instance.count = count + instance.num_accounts = len(set([x.account for x in changes])) + instance.accounts = [AccountSummary.compile( account=change.account, count=len(changes), - proposed_changes=[x for x in changes if x.account == change.account], + changes=[x for x in changes if x.account == change.account], ) for change in changes] + return instance class ActionSummary(PydanticBaseModel): - action: str - count: int - templates: List[TemplateSummary] + action: str = Field(default="") + count: int = Field(default=0) + num_templates = Field(default=0) + templates: List[TemplateSummary] = Field(default=[]) @classmethod - async def compile_proposed_changes(cls, resources_changes: List[TemplateChangeDetails], proposed_change_type: str) -> Any: + def compile_proposed_changes(cls, template_changes: List[TemplateChangeDetails], proposed_change_type: str) -> Any: """Compile a list of TemplateChangeDetails into a list of TemplateSummary objects. :param resources_changes: list of TemplateChangeDetails objects :returns: None """ - def _get_annotated_change(change: ProposedChange, template_change: TemplateChangeDetails) -> ApplicableChange: + def _get_annotated_change(change: ProposedChange, template_change: TemplateChangeDetails, account: str = "NONE") -> ApplicableChange: return ApplicableChange( + account=account, change=change, template_change=template_change, + resource_id=change.resource_id, + resource_type=change.resource_type, ) - applicable_changes: List[ApplicableChange] = list() - for template_change in resources_changes: + applicable_changes: Set[ApplicableChange] = set() + for template_change in template_changes: for proposed_change in template_change.proposed_changes: if isinstance(proposed_change, AccountChangeDetails): # If proposed change is a list of AccountChangeDetails, we need to iterate through those for account_change in proposed_change.proposed_changes: - if account_change.change_type == proposed_change_type: - applicable_changes.append(_get_annotated_change(account_change, template_change)) - if proposed_change.change_type == proposed_change_type: - # If proposed change is a single change, we can just append it - applicable_changes.append(_get_annotated_change(proposed_change, template_change)) - + if account_change.change_type.value == proposed_change_type: + applicable_changes.add(_get_annotated_change(account_change, template_change, proposed_change.account)) + else: + if proposed_change.change_type.value == proposed_change_type: + # If proposed change is a single change, we can just append it + applicable_changes.add(_get_annotated_change(proposed_change, template_change)) + + applicable_changes = set(applicable_changes) # collapse across accounts and no accounts log.debug(f"Found {len(applicable_changes)} applicable changes") - self = cls(action=proposed_change_type, count=len(applicable_changes), templates=[]) - self.templates = [ - TemplateSummary( + instance = cls(action=proposed_change_type, count=len(applicable_changes), templates=[]) + templates = set([ + TemplateSummary.compile( template_path=x.template_change.template_path, template_name=x.template_name, + count=1, changes=[y for y in applicable_changes if y.template_change.template_path == x.template_change.template_path], - ) for x in applicable_changes] + ) for x in applicable_changes]) + instance.templates = templates + instance.num_templates = len(templates) - return self + return instance @classmethod - async def compile_exceptions_seen(cls, resources_changes: List[TemplateChangeDetails]) -> Any: + def compile_exceptions_seen(cls, resources_changes: List[TemplateChangeDetails]) -> Any: pass @@ -99,17 +130,21 @@ class ExceptionSummary(PydanticBaseModel): class ActionSummaries(PydanticBaseModel): - num_actions: int - num_templates: int - num_accounts: int - action_summaries: List[ActionSummary] - exceptions: List[ExceptionSummary] + num_actions: int = Field(default=0) + num_templates: int = Field(default=0) + num_accounts: int = Field(default=0) + action_summaries: List[ActionSummary] = Field(default=[]) + exceptions: List[ExceptionSummary] = Field(default=[]) - def __init__(self, changes: List[TemplateChangeDetails]): - self.action_summaries = [ActionSummary.compile_proposed_changes(changes, x) for x in list(ProposedChangeType)] - self.num_actions = len(self.action_summaries) - self.num_templates = sum([len(x.templates) for x in self.action_summaries]) - self.num_accounts = sum([len(z.accounts) for y in self.action_summaries for z in y.templates]) + @classmethod + def compile(cls, changes: List[TemplateChangeDetails]): + instance = cls() + instance.action_summaries = [ ActionSummary.compile_proposed_changes(changes, x) for x in list([e.value for e in ProposedChangeType]) ] + instance.num_actions = sum([1 for x in instance.action_summaries if x.count > 0]) + instance.num_templates = sum([len(x.templates) for x in instance.action_summaries]) + accounts = set([g.account for y in instance.action_summaries for z in y.templates for g in z.accounts]) + instance.num_accounts = len(accounts) + return instance def get_template_data(resources_changes: List[TemplateChangeDetails]) -> Dict[str, Any]: @@ -135,14 +170,12 @@ def get_template_data(resources_changes: List[TemplateChangeDetails]) -> Dict[st :param resources_changes: list of TemplateChangeDetails objects :returns: Dict[str, Any] """ - action_summaries = ActionSummaries(resources_changes) - # Get all proposed changes - - return action_summaries + return ActionSummaries.compile(resources_changes) -def render_resource_changes(resource_changes): +def render_resource_changes(resource_changes: List[TemplateChangeDetails]): + template_data = get_template_data(resource_changes) my_path = pathlib.Path(__file__).parent.absolute() env = Environment(loader=FileSystemLoader(my_path / 'templates')) - template = env.get_template("resource_change.jinja2") - return template.render(resource_changes=resource_changes) + template = env.get_template("summary.jinja2") + return template.render(iambic=template_data) diff --git a/iambic/output/templates/accounts.jinja2 b/iambic/output/templates/accounts.jinja2 index c6c94ffa1..2835970ef 100644 --- a/iambic/output/templates/accounts.jinja2 +++ b/iambic/output/templates/accounts.jinja2 @@ -1,12 +1,25 @@ {% extends "template.jinja2" %} -{% block account scoped %} + +{% block account_loop %} {% for account in template.accounts %} + +{% with account=account %} + +{% block account scoped %} + +{{ super() }} +
-{{ account.meta.name }} (Count: {{ account.meta.number }}) +{{ account.account }} (Count: {{ account.count }}) {% block change scoped %} {% endblock %}
+ +{% endblock %} + +{% endwith %} + {% endfor %} {% endblock %} \ No newline at end of file diff --git a/iambic/output/templates/actions.jinja2 b/iambic/output/templates/actions.jinja2 index d7ce637fb..4e889c1e9 100644 --- a/iambic/output/templates/actions.jinja2 +++ b/iambic/output/templates/actions.jinja2 @@ -1,9 +1,9 @@ {% extends "summary.jinja2" %} {% block action scoped %} -{% for action in iambic.actions %} +{% for action_summary in iambic.action_summaries %}
-{{ action.action }} (Count: {{ action.count }}) +{{ action_summary.action }} (Count: {{ action_summary.count }}) {% block template scoped %} {% endblock %}
diff --git a/iambic/output/templates/change_details.jinja2 b/iambic/output/templates/change_details.jinja2 deleted file mode 100644 index 00820c350..000000000 --- a/iambic/output/templates/change_details.jinja2 +++ /dev/null @@ -1,10 +0,0 @@ -{% extends "summary.jinja2" %} -{% block action %} - -{% for action in iambic.changes.actions %} -
-{{ action.meta.name }} (Count: {{ action.meta.number }}) - {% block template scoped %} - {% endblock %} -
-{% endfor %} diff --git a/iambic/output/templates/resource_change.jinja2 b/iambic/output/templates/resource_change.jinja2 index c4f3690a4..2b5733328 100644 --- a/iambic/output/templates/resource_change.jinja2 +++ b/iambic/output/templates/resource_change.jinja2 @@ -1,40 +1,32 @@ {% extends "accounts.jinja2" %} -{% block account scoped %} +{% block account %} +{{ super() }} {% for change in account.changes %}
-{{ change.meta.name }} (Count: {{ change.meta.number }}) +{{ change.resource_id }} (Count: {{ change.resource_type }}) - - - - + + + + + - {% for template_id, template_data in change.resources -%} - - - - - - - - {% for row in template_data[1:] -%} - - - - - + + + + + + + - {% endfor -%} - {% endfor -%}
Template IDResource Type Resource IDActionProposed ChangeResource TypeCurrent ValueNew ValueChange SummaryExceptions
{{ template_id }}{{ template_data[0]['resource_type'] }}{{ template_data[0]['resource_id'] }}{{ template_data[0]['action'] }}{{ template_data[0]['proposed_change'] }}
{{ row['resource_type'] }}{{ row['resource_id'] }}{{ row['action'] }}{{ row['proposed_change'] }}
{{ change.resource_id }}{{ change.resource_type }}{{ change.current_value }}{{ change.new_value }}{{ change.change_summary }}{{ change.exceptions_seen }}
{% endfor %} - {% endblock %} \ No newline at end of file diff --git a/iambic/output/templates/summary.jinja2 b/iambic/output/templates/summary.jinja2 index f0ec343b8..7def207ec 100644 --- a/iambic/output/templates/summary.jinja2 +++ b/iambic/output/templates/summary.jinja2 @@ -1,13 +1,69 @@ # IAMbic Summary ## Change Detection -* {{ iambic.sum_deleted }} deleted roles. -* {{ iambic.sum_created }} created roles. -* {{ iambic.sum_updated }} updated roles. +* {{ iambic.num_actions }} distinct actions. +* {{ iambic.num_templates }} templates with changes. +* {{ iambic.num_accounts }} accounts affected. ## Exceptions -* {{ iambic.sum_exceptions }} exceptions. +* {{ iambic.exceptions|length }} exceptions were recorded. # IAMbic Change Details -{% block action %}{% endblock %} +{% for action_summary in iambic.action_summaries -%} +
+Action: {{ action_summary.action }} (Number of Templates: {{ action_summary.num_templates }}) + {% for template in action_summary.templates -%} +
+ Template: {{ template.template_name }} (Number of Accounts: {{ template.num_accounts }}) + {% for account in template.accounts -%} +
+ Account: {{ account.account }} (Number of Changes: {{ account.num_changes }}) + {% for change in account.changes -%} + + + + + + + {% if change.current_value -%} + + {% endif -%} + {% if change.new_value -%} + + {% endif -%} + {% if change.change_summary -%} + + {% endif -%} + {% if change.exceptions_seen -%} + + {% endif -%} + + + + + + + + {% if change.current_value -%} + + {% endif -%} + {% if change.new_value -%} + + {% endif -%} + {% if change.change_summary -%} + + {% endif -%} + {% if change.exceptions_seen -%} + + {% endif -%} + + +
Resource IDResource TypeChange TypeCurrent ValueNew ValueChange SummaryExceptions
{{ change.resource_id }}{{ change.resource_type }}{{ change.change.change_type.value }}{{ change.current_value }}{{ change.new_value }}{{ change.change_summary }}{{ change.exceptions_seen }}
+ {% endfor -%} +
+ {% endfor -%} +
+ {% endfor -%} +
+{% endfor -%} # IAMbic Exceptions -{ % block exception %}{ % endblock %} \ No newline at end of file +{ % block exception scoped %}{ % endblock %} \ No newline at end of file diff --git a/iambic/output/templates/template.jinja2 b/iambic/output/templates/template.jinja2 index e44d368e4..5a3316b84 100644 --- a/iambic/output/templates/template.jinja2 +++ b/iambic/output/templates/template.jinja2 @@ -1,9 +1,9 @@ {% extends "actions.jinja2" %} {% block template scoped %} -{% for template in action.templates %} +{% for template in action_summary.templates %}
-{{ template.meta.name }} (Count: {{ template.meta.number }}) +{{ template.template_name }} (Count: {{ template.count }}) {% block account scoped %} {% endblock %}
diff --git a/test/output/test_markdown_generator.py b/test/output/test_markdown_generator.py index b5bee6ee7..d962353e8 100644 --- a/test/output/test_markdown_generator.py +++ b/test/output/test_markdown_generator.py @@ -1,12 +1,11 @@ import pytest -from iambic.core.models import ProposedChange from iambic.output.markdown import ActionSummaries, get_template_data, render_resource_changes from iambic.core.utils import yaml from iambic.core.models import TemplateChangeDetails -template_yaml = """ - resource_id: kris_test +template_yaml_delete = """ - resource_id: kris_test resource_type: aws:iam:role template_path: ./resources/aws/roles/development-2/kris_test.yaml proposed_changes: @@ -3337,80 +3336,434 @@ """ -def get_templates(): - return [TemplateChangeDetails.parse_obj(x) for x in yaml.load(template_yaml)] +template_yaml_mixed = """ - resource_id: prod_iambic_test_role + resource_type: aws:iam:role + template_path: resources/aws/iam/role/design-prod/iambic_test_role_prod.yaml + proposed_changes: + - account: design-prod - (006933239187) + resource_id: prod_iambic_test_role + new_value: + RoleName: prod_iambic_test_role + Description: IAMbic test role on design-prod + MaxSessionDuration: 3600 + Path: /iambic_test/ + Tags: [] + ManagedPolicies: + - PolicyArn: arn:aws:iam::aws:policy/job-function/ViewOnlyAccess + InlinePolicies: + - PolicyName: spoke-acct-policy + Statement: + - Effect: Deny + Action: + - s3:ListBucket + Resource: '*' + - Effect: Deny + Action: + - s3:GetObject + Resource: '*' + - Effect: Deny + Action: + - s3:ListAllMyBuckets + Resource: '*' + AssumeRolePolicyDocument: + Version: '2008-10-17' + Statement: + - Effect: Deny + Principal: + Service: ec2.amazonaws.com + Action: sts:AssumeRole + PermissionsBoundary: + PolicyArn: arn:aws:iam::aws:policy/AWSDirectConnectReadOnlyAccess + proposed_changes: + - change_type: Create + resource_id: prod_iambic_test_role + resource_type: aws:iam:role + exceptions_seen: [] + exceptions_seen: [] + - resource_id: '{{account_name}}_iambic_test_role' + resource_type: aws:iam:role + template_path: resources/aws/iam/role/all_accounts/iambic_test_role.yaml + proposed_changes: + - account: product-dev - (572565049541) + resource_id: product-dev_iambic_test_role + new_value: + RoleName: product-dev_iambic_test_role + Description: IAMbic test role on product-dev + MaxSessionDuration: 3600 + Path: /iambic_test/ + Tags: [] + ManagedPolicies: + - PolicyArn: arn:aws:iam::aws:policy/job-function/ViewOnlyAccess + InlinePolicies: + - PolicyName: spoke-acct-policy + Statement: + - Effect: Deny + Action: + - s3:ListBucket + Resource: '*' + - Effect: Deny + Action: + - s3:ListAllMyBuckets + Resource: '*' + AssumeRolePolicyDocument: + Version: '2008-10-17' + Statement: + - Effect: Deny + Principal: + Service: ec2.amazonaws.com + Action: sts:AssumeRole + PermissionsBoundary: + PolicyArn: arn:aws:iam::aws:policy/AWSDirectConnectReadOnlyAccess + proposed_changes: + - change_type: Create + resource_id: product-dev_iambic_test_role + resource_type: aws:iam:role + exceptions_seen: [] + - account: Iambic Standalone Org - (566255053759) + resource_id: IambicStandaloneOrg_iambic_test_role + new_value: + RoleName: IambicStandaloneOrg_iambic_test_role + Description: IAMbic test role on IambicStandaloneOrg + MaxSessionDuration: 3600 + Path: /iambic_test/ + Tags: [] + ManagedPolicies: + - PolicyArn: arn:aws:iam::aws:policy/job-function/ViewOnlyAccess + InlinePolicies: + - PolicyName: spoke-acct-policy + Statement: + - Effect: Deny + Action: + - s3:ListBucket + Resource: '*' + - Effect: Deny + Action: + - s3:ListAllMyBuckets + Resource: '*' + AssumeRolePolicyDocument: + Version: '2008-10-17' + Statement: + - Effect: Deny + Principal: + Service: ec2.amazonaws.com + Action: sts:AssumeRole + PermissionsBoundary: + PolicyArn: arn:aws:iam::aws:policy/AWSDirectConnectReadOnlyAccess + proposed_changes: + - change_type: Create + resource_id: IambicStandaloneOrg_iambic_test_role + resource_type: aws:iam:role + exceptions_seen: [] + - account: design-dev - (570737236821) + resource_id: design-dev_iambic_test_role + new_value: + RoleName: design-dev_iambic_test_role + Description: IAMbic test role on design-dev + MaxSessionDuration: 3600 + Path: /iambic_test/ + Tags: [] + ManagedPolicies: + - PolicyArn: arn:aws:iam::aws:policy/job-function/ViewOnlyAccess + InlinePolicies: + - PolicyName: spoke-acct-policy + Statement: + - Effect: Deny + Action: + - s3:ListBucket + Resource: '*' + - Effect: Deny + Action: + - s3:ListAllMyBuckets + Resource: '*' + AssumeRolePolicyDocument: + Version: '2008-10-17' + Statement: + - Effect: Deny + Principal: + Service: ec2.amazonaws.com + Action: sts:AssumeRole + PermissionsBoundary: + PolicyArn: arn:aws:iam::aws:policy/AWSDirectConnectReadOnlyAccess + proposed_changes: + - change_type: Create + resource_id: design-dev_iambic_test_role + resource_type: aws:iam:role + exceptions_seen: [] + - account: design-tools - (728312732489) + resource_id: design-tools_iambic_test_role + new_value: + RoleName: design-tools_iambic_test_role + Description: IAMbic test role on design-tools + MaxSessionDuration: 3600 + Path: /iambic_test/ + Tags: [] + ManagedPolicies: + - PolicyArn: arn:aws:iam::aws:policy/job-function/ViewOnlyAccess + InlinePolicies: + - PolicyName: spoke-acct-policy + Statement: + - Effect: Deny + Action: + - s3:ListBucket + Resource: '*' + - Effect: Deny + Action: + - s3:ListAllMyBuckets + Resource: '*' + AssumeRolePolicyDocument: + Version: '2008-10-17' + Statement: + - Effect: Deny + Principal: + Service: ec2.amazonaws.com + Action: sts:AssumeRole + PermissionsBoundary: + PolicyArn: arn:aws:iam::aws:policy/AWSDirectConnectReadOnlyAccess + proposed_changes: + - change_type: Create + resource_id: design-tools_iambic_test_role + resource_type: aws:iam:role + exceptions_seen: [] + - account: design-staging - (158048798909) + resource_id: design-staging_iambic_test_role + new_value: + RoleName: design-staging_iambic_test_role + Description: IAMbic test role on design-staging + MaxSessionDuration: 3600 + Path: /iambic_test/ + Tags: [] + ManagedPolicies: + - PolicyArn: arn:aws:iam::aws:policy/job-function/ViewOnlyAccess + InlinePolicies: + - PolicyName: spoke-acct-policy + Statement: + - Effect: Deny + Action: + - s3:ListBucket + Resource: '*' + - Effect: Deny + Action: + - s3:ListAllMyBuckets + Resource: '*' + AssumeRolePolicyDocument: + Version: '2008-10-17' + Statement: + - Effect: Deny + Principal: + Service: ec2.amazonaws.com + Action: sts:AssumeRole + PermissionsBoundary: + PolicyArn: arn:aws:iam::aws:policy/AWSDirectConnectReadOnlyAccess + proposed_changes: + - change_type: Create + resource_id: design-staging_iambic_test_role + resource_type: aws:iam:role + exceptions_seen: [] + - account: design-prod - (006933239187) + resource_id: design-prod_iambic_test_role + new_value: + RoleName: design-prod_iambic_test_role + Description: IAMbic test role on design-prod + MaxSessionDuration: 3600 + Path: /iambic_test/ + Tags: [] + ManagedPolicies: + - PolicyArn: arn:aws:iam::aws:policy/job-function/ViewOnlyAccess + InlinePolicies: + - PolicyName: spoke-acct-policy + Statement: + - Effect: Deny + Action: + - s3:ListBucket + Resource: '*' + - Effect: Deny + Action: + - s3:ListAllMyBuckets + Resource: '*' + AssumeRolePolicyDocument: + Version: '2008-10-17' + Statement: + - Effect: Deny + Principal: + Service: ec2.amazonaws.com + Action: sts:AssumeRole + PermissionsBoundary: + PolicyArn: arn:aws:iam::aws:policy/AWSDirectConnectReadOnlyAccess + proposed_changes: + - change_type: Create + resource_id: design-prod_iambic_test_role + resource_type: aws:iam:role + exceptions_seen: [] + - account: design-vpc - (172623945520) + resource_id: design-vpc_iambic_test_role + new_value: + RoleName: design-vpc_iambic_test_role + Description: IAMbic test role on design-vpc + MaxSessionDuration: 3600 + Path: /iambic_test/ + Tags: [] + ManagedPolicies: + - PolicyArn: arn:aws:iam::aws:policy/job-function/ViewOnlyAccess + InlinePolicies: + - PolicyName: spoke-acct-policy + Statement: + - Effect: Deny + Action: + - s3:ListBucket + Resource: '*' + - Effect: Deny + Action: + - s3:ListAllMyBuckets + Resource: '*' + AssumeRolePolicyDocument: + Version: '2008-10-17' + Statement: + - Effect: Deny + Principal: + Service: ec2.amazonaws.com + Action: sts:AssumeRole + PermissionsBoundary: + PolicyArn: arn:aws:iam::aws:policy/AWSDirectConnectReadOnlyAccess + proposed_changes: + - change_type: Create + resource_id: design-vpc_iambic_test_role + resource_type: aws:iam:role + exceptions_seen: [] + - account: design-workspaces - (667373557420) + resource_id: design-workspaces_iambic_test_role + new_value: + RoleName: design-workspaces_iambic_test_role + Description: IAMbic test role on design-workspaces + MaxSessionDuration: 3600 + Path: /iambic_test/ + Tags: [] + ManagedPolicies: + - PolicyArn: arn:aws:iam::aws:policy/job-function/ViewOnlyAccess + InlinePolicies: + - PolicyName: spoke-acct-policy + Statement: + - Effect: Deny + Action: + - s3:ListBucket + Resource: '*' + - Effect: Deny + Action: + - s3:ListAllMyBuckets + Resource: '*' + AssumeRolePolicyDocument: + Version: '2008-10-17' + Statement: + - Effect: Deny + Principal: + Service: ec2.amazonaws.com + Action: sts:AssumeRole + PermissionsBoundary: + PolicyArn: arn:aws:iam::aws:policy/AWSDirectConnectReadOnlyAccess + proposed_changes: + - change_type: Create + resource_id: design-workspaces_iambic_test_role + resource_type: aws:iam:role + exceptions_seen: [] + - account: design-test - (992251240124) + resource_id: design-test_iambic_test_role + new_value: + RoleName: design-test_iambic_test_role + Description: IAMbic test role on design-test + MaxSessionDuration: 3600 + Path: /iambic_test/ + Tags: [] + ManagedPolicies: + - PolicyArn: arn:aws:iam::aws:policy/job-function/ViewOnlyAccess + InlinePolicies: + - PolicyName: spoke-acct-policy + Statement: + - Effect: Deny + Action: + - s3:ListBucket + Resource: '*' + - Effect: Deny + Action: + - s3:GetObject + Resource: '*' + AssumeRolePolicyDocument: + Version: '2008-10-17' + Statement: + - Effect: Deny + Principal: + Service: ec2.amazonaws.com + Action: sts:AssumeRole + PermissionsBoundary: + PolicyArn: arn:aws:iam::aws:policy/AWSDirectConnectReadOnlyAccess + proposed_changes: + - change_type: Create + resource_id: design-test_iambic_test_role + resource_type: aws:iam:role + exceptions_seen: [] + - account: product-prod - (883466000970) + resource_id: product-prod_iambic_test_role + new_value: + RoleName: product-prod_iambic_test_role + Description: IAMbic test role on product-prod + MaxSessionDuration: 3600 + Path: /iambic_test/ + Tags: [] + ManagedPolicies: + - PolicyArn: arn:aws:iam::aws:policy/job-function/ViewOnlyAccess + InlinePolicies: + - PolicyName: spoke-acct-policy + Statement: + - Effect: Deny + Action: + - s3:ListBucket + Resource: '*' + - Effect: Deny + Action: + - s3:ListAllMyBuckets + Resource: '*' + AssumeRolePolicyDocument: + Version: '2008-10-17' + Statement: + - Effect: Deny + Principal: + Service: ec2.amazonaws.com + Action: sts:AssumeRole + PermissionsBoundary: + PolicyArn: arn:aws:iam::aws:policy/AWSDirectConnectReadOnlyAccess + proposed_changes: + - change_type: Create + resource_id: product-prod_iambic_test_role + resource_type: aws:iam:role + exceptions_seen: [] + exceptions_seen: [] +""" -# def test_render_resource_changes(): -# resource_changes = [ -# {'resource_type': 'EC2 Instance', 'resource_id': 'i-1234567890abcdefg', 'action': 'Stop', 'proposed_change': 'None', 'accounts': ['Account A', 'Account B'], 'template_id': 'template_1'}, -# {'resource_type': 'RDS Instance', 'resource_id': 'db-abcdefghijklmno', 'action': 'Delete', 'proposed_change': 'None', 'accounts': ['Account A'], 'template_id': 'template_1'}, -# {'resource_type': 'Lambda Function', 'resource_id': 'arn:aws:lambda:us-west-2:123456789012:function:my-function', 'action': 'Update', 'proposed_change': 'Increase Memory', 'accounts': ['Account B'], 'template_id': 'template_2'}, -# {'resource_type': 'S3 Bucket', 'resource_id': 'my-bucket', 'action': 'Delete', 'proposed_change': 'None', 'accounts': ['Account A', 'Account B'], 'template_id': 'template_2'}, -# ] +def get_templates_delete(): + return [TemplateChangeDetails.parse_obj(x) for x in yaml.load(template_yaml_delete)] -# expected_output = ''' -# -# -# -# -# -# -# -# -# -# -# -# -# -# -# -# -# -# -# -# -# -# -# -# -# -# -# -# -# -# -# -# -# -# -# -# -# -# -# -# -# -# -# -# -# -#
Template IDAccountResource TypeResource IDActionProposed Change
template_1Account ARDS Instancedb-abcdefghijklmnoDeleteNone
template_1Account A, Account BEC2 Instancei-1234567890abcdefgStopNone
template_2Account A, Account BS3 Bucketmy-bucketDeleteNone
template_2Account BLambda Functionarn:aws:lambda:us-west-2:123456789012:function:my-functionUpdateIncrease Memory
-# ''' -# # Render the actual output -# actual_output = render_resource_changes(resource_changes) +def get_templates_mixed(): + return [TemplateChangeDetails.parse_obj(x) for x in yaml.load(template_yaml_mixed)] -# with open("test.md", "w") as f: -# f.write(actual_output) -# # Compare the expected and actual output -# assert actual_output.strip().replace(' ', '') == expected_output.strip().replace(' ', '') +@pytest.mark.parametrize("template_change_details, expected_output", [ + (get_templates_delete(), ActionSummaries(num_accounts=15, num_actions=1, num_templates=20)), + (get_templates_mixed(), ActionSummaries(num_accounts=10, num_actions=1, num_templates=2)), +]) +def test_get_template_data(template_change_details: list[TemplateChangeDetails], expected_output: ActionSummaries): + template_data = get_template_data(template_change_details) + assert template_data.num_accounts == expected_output.num_accounts + assert template_data.num_actions == expected_output.num_actions + assert template_data.num_templates == expected_output.num_templates @pytest.mark.parametrize("template_change_details, expected_output", [ - (get_templates(), ActionSummaries), + (get_templates_delete(), ActionSummaries(num_accounts=15, num_actions=1, num_templates=20)), + (get_templates_mixed(), ActionSummaries(num_accounts=10, num_actions=1, num_templates=2)), ]) -def test_get_template_data(template_change_details, expected_output): - template_data = get_template_data(template_change_details) - assert template_data == expected_output +def test_render_resource_changes(template_change_details: list[TemplateChangeDetails], expected_output: ActionSummaries): + rendered_markdown = render_resource_changes(template_change_details) + import time + with open(f"test_render_resource_changes-{time.time()}.md", "w") as f: + f.write(rendered_markdown) + assert rendered_markdown != "" From 51c2111211212bcb6b34322fa6fe5a050ede68ce Mon Sep 17 00:00:00 2001 From: Matt Daue Date: Sat, 11 Mar 2023 19:27:59 -0800 Subject: [PATCH 10/17] Hook up exceptions Signed-off-by: Matt Daue --- iambic/output/markdown.py | 85 ++++++++++++++++++-------- iambic/output/templates/summary.jinja2 | 60 +++++++++++++++++- 2 files changed, 116 insertions(+), 29 deletions(-) diff --git a/iambic/output/markdown.py b/iambic/output/markdown.py index a9caba3d3..240660a35 100644 --- a/iambic/output/markdown.py +++ b/iambic/output/markdown.py @@ -69,6 +69,39 @@ def compile(cls, template_path: str, template_name: str, count: int, changes: Li return instance +def get_applicable_changes(template_changes: List[TemplateChangeDetails], proposed_change_type: str, attribute: str = "proposed_changes") -> Any: + """Compile applicable changes as a list of ApplicableChange objects. + + :param template_changes: list of TemplateChangeDetails objects + :param proposed_change_type: one of ProposedChangeType values + :param attribute: str. is either "proposed_changes" or "exceptions_seen" + :return: set of ApplicableChange + """ + def _get_annotated_change(change: ProposedChange, template_change: TemplateChangeDetails, account: str = "NONE") -> ApplicableChange: + return ApplicableChange( + account=account, + change=change, + template_change=template_change, + resource_id=change.resource_id, + resource_type=change.resource_type, + ) + + applicable_changes: Set[ApplicableChange] = set() + for template_change in template_changes: + for proposed_change in getattr(template_change, attribute, []): + if isinstance(proposed_change, AccountChangeDetails): + # If proposed change is a list of AccountChangeDetails, we need to iterate through those + for account_change in proposed_change.proposed_changes: + if account_change.change_type.value == proposed_change_type: + applicable_changes.add(_get_annotated_change(account_change, template_change, proposed_change.account)) + else: + if proposed_change.change_type.value == proposed_change_type: + # If proposed change is a single change, we can just append it + applicable_changes.add(_get_annotated_change(proposed_change, template_change)) + + return set(applicable_changes) # collapse across accounts and no accounts + + class ActionSummary(PydanticBaseModel): action: str = Field(default="") count: int = Field(default=0) @@ -82,29 +115,7 @@ def compile_proposed_changes(cls, template_changes: List[TemplateChangeDetails], :param resources_changes: list of TemplateChangeDetails objects :returns: None """ - def _get_annotated_change(change: ProposedChange, template_change: TemplateChangeDetails, account: str = "NONE") -> ApplicableChange: - return ApplicableChange( - account=account, - change=change, - template_change=template_change, - resource_id=change.resource_id, - resource_type=change.resource_type, - ) - - applicable_changes: Set[ApplicableChange] = set() - for template_change in template_changes: - for proposed_change in template_change.proposed_changes: - if isinstance(proposed_change, AccountChangeDetails): - # If proposed change is a list of AccountChangeDetails, we need to iterate through those - for account_change in proposed_change.proposed_changes: - if account_change.change_type.value == proposed_change_type: - applicable_changes.add(_get_annotated_change(account_change, template_change, proposed_change.account)) - else: - if proposed_change.change_type.value == proposed_change_type: - # If proposed change is a single change, we can just append it - applicable_changes.add(_get_annotated_change(proposed_change, template_change)) - - applicable_changes = set(applicable_changes) # collapse across accounts and no accounts + applicable_changes = get_applicable_changes(template_changes, proposed_change_type, attribute="proposed_changes") log.debug(f"Found {len(applicable_changes)} applicable changes") instance = cls(action=proposed_change_type, count=len(applicable_changes), templates=[]) @@ -120,19 +131,37 @@ def _get_annotated_change(change: ProposedChange, template_change: TemplateChang return instance + +class ExceptionSummary(PydanticBaseModel): + action: str = Field(default="") + count: int = Field(default=0) + num_templates = Field(default=0) + templates: List[TemplateSummary] = Field(default=[]) + @classmethod - def compile_exceptions_seen(cls, resources_changes: List[TemplateChangeDetails]) -> Any: - pass + def compile_exceptions_seen(cls, template_changes: List[TemplateChangeDetails], proposed_change_type: str) -> Any: + exceptions = get_applicable_changes(template_changes, proposed_change_type, attribute="exceptions_seen") + log.debug(f"Found {len(exceptions)} exceptions") + instance = cls(action=proposed_change_type, count=len(exceptions), templates=[]) + templates = set([ + TemplateSummary.compile( + template_path=x.template_change.template_path, + template_name=x.template_name, + count=1, + changes=[y for y in exceptions if y.template_change.template_path == x.template_change.template_path], + ) for x in exceptions]) + instance.templates = templates + instance.num_templates = len(templates) -class ExceptionSummary(PydanticBaseModel): - exception: str + return instance class ActionSummaries(PydanticBaseModel): num_actions: int = Field(default=0) num_templates: int = Field(default=0) num_accounts: int = Field(default=0) + num_exceptions: int = Field(default=0) action_summaries: List[ActionSummary] = Field(default=[]) exceptions: List[ExceptionSummary] = Field(default=[]) @@ -144,6 +173,8 @@ def compile(cls, changes: List[TemplateChangeDetails]): instance.num_templates = sum([len(x.templates) for x in instance.action_summaries]) accounts = set([g.account for y in instance.action_summaries for z in y.templates for g in z.accounts]) instance.num_accounts = len(accounts) + instance.exceptions = [ ExceptionSummary.compile_exceptions_seen(changes, x) for x in list([e.value for e in ProposedChangeType]) ] + instance.num_exceptions = sum([1 for x in instance.exceptions if x.count > 0]) return instance diff --git a/iambic/output/templates/summary.jinja2 b/iambic/output/templates/summary.jinja2 index 7def207ec..0a3217213 100644 --- a/iambic/output/templates/summary.jinja2 +++ b/iambic/output/templates/summary.jinja2 @@ -4,7 +4,7 @@ * {{ iambic.num_templates }} templates with changes. * {{ iambic.num_accounts }} accounts affected. ## Exceptions -* {{ iambic.exceptions|length }} exceptions were recorded. +* {{ iambic.num_exceptions }} exceptions were recorded. # IAMbic Change Details {% for action_summary in iambic.action_summaries -%} @@ -66,4 +66,60 @@ {% endfor -%} # IAMbic Exceptions -{ % block exception scoped %}{ % endblock %} \ No newline at end of file +{% for action_summary in iambic.exceptions -%} +
+Action: {{ action_summary.action }} (Number of Templates: {{ action_summary.num_templates }}) + {% for template in action_summary.templates -%} +
+ Template: {{ template.template_name }} (Number of Accounts: {{ template.num_accounts }}) + {% for account in template.accounts -%} +
+ Account: {{ account.account }} (Number of Changes: {{ account.num_changes }}) + {% for change in account.changes -%} + + + + + + + {% if change.current_value -%} + + {% endif -%} + {% if change.new_value -%} + + {% endif -%} + {% if change.change_summary -%} + + {% endif -%} + {% if change.exceptions_seen -%} + + {% endif -%} + + + + + + + + {% if change.current_value -%} + + {% endif -%} + {% if change.new_value -%} + + {% endif -%} + {% if change.change_summary -%} + + {% endif -%} + {% if change.exceptions_seen -%} + + {% endif -%} + + +
Resource IDResource TypeChange TypeCurrent ValueNew ValueChange SummaryExceptions
{{ change.resource_id }}{{ change.resource_type }}{{ change.change.change_type.value }}{{ change.current_value }}{{ change.new_value }}{{ change.change_summary }}{{ change.exceptions_seen }}
+ {% endfor -%} +
+ {% endfor -%} +
+ {% endfor -%} +
+{% endfor -%} From c6fdbe0e2d3dc3c199cb5fc8b2020dee139ede88 Mon Sep 17 00:00:00 2001 From: Matt Daue Date: Sat, 11 Mar 2023 19:33:34 -0800 Subject: [PATCH 11/17] Fix formatting Signed-off-by: Matt Daue --- iambic/output/markdown.py | 2 +- iambic/output/templates/summary.jinja2 | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/iambic/output/markdown.py b/iambic/output/markdown.py index 240660a35..dbcd641f6 100644 --- a/iambic/output/markdown.py +++ b/iambic/output/markdown.py @@ -143,7 +143,7 @@ def compile_exceptions_seen(cls, template_changes: List[TemplateChangeDetails], exceptions = get_applicable_changes(template_changes, proposed_change_type, attribute="exceptions_seen") log.debug(f"Found {len(exceptions)} exceptions") - instance = cls(action=proposed_change_type, count=len(exceptions), templates=[]) + instance = cls(action=proposed_change_type, count=len(exceptions), num_templates=0, templates=[]) templates = set([ TemplateSummary.compile( template_path=x.template_change.template_path, diff --git a/iambic/output/templates/summary.jinja2 b/iambic/output/templates/summary.jinja2 index 0a3217213..e37936229 100644 --- a/iambic/output/templates/summary.jinja2 +++ b/iambic/output/templates/summary.jinja2 @@ -63,10 +63,11 @@ {% endfor -%} -{% endfor -%} +{% endfor %} # IAMbic Exceptions -{% for action_summary in iambic.exceptions -%} + +{% for action_summary in iambic.exceptions %}
Action: {{ action_summary.action }} (Number of Templates: {{ action_summary.num_templates }}) {% for template in action_summary.templates -%} From 27b6a8831cb4c89e6c48a5e05e6c82056a8a23ed Mon Sep 17 00:00:00 2001 From: Matt Daue Date: Sat, 11 Mar 2023 19:36:09 -0800 Subject: [PATCH 12/17] Remove unneeded templates Signed-off-by: Matt Daue --- iambic/output/templates/accounts.jinja2 | 25 ------------ iambic/output/templates/actions.jinja2 | 12 ------ .../output/templates/exception_details.jinja2 | 40 ------------------- .../output/templates/resource_change.jinja2 | 32 --------------- iambic/output/templates/template.jinja2 | 12 ------ 5 files changed, 121 deletions(-) delete mode 100644 iambic/output/templates/accounts.jinja2 delete mode 100644 iambic/output/templates/actions.jinja2 delete mode 100644 iambic/output/templates/exception_details.jinja2 delete mode 100644 iambic/output/templates/resource_change.jinja2 delete mode 100644 iambic/output/templates/template.jinja2 diff --git a/iambic/output/templates/accounts.jinja2 b/iambic/output/templates/accounts.jinja2 deleted file mode 100644 index 2835970ef..000000000 --- a/iambic/output/templates/accounts.jinja2 +++ /dev/null @@ -1,25 +0,0 @@ -{% extends "template.jinja2" %} - -{% block account_loop %} - -{% for account in template.accounts %} - -{% with account=account %} - -{% block account scoped %} - -{{ super() }} - -
-{{ account.account }} (Count: {{ account.count }}) - {% block change scoped %} - {% endblock %} -
- -{% endblock %} - -{% endwith %} - -{% endfor %} - -{% endblock %} \ No newline at end of file diff --git a/iambic/output/templates/actions.jinja2 b/iambic/output/templates/actions.jinja2 deleted file mode 100644 index 4e889c1e9..000000000 --- a/iambic/output/templates/actions.jinja2 +++ /dev/null @@ -1,12 +0,0 @@ -{% extends "summary.jinja2" %} -{% block action scoped %} - -{% for action_summary in iambic.action_summaries %} -
-{{ action_summary.action }} (Count: {{ action_summary.count }}) - {% block template scoped %} - {% endblock %} -
-{% endfor %} - -{% endblock %}} \ No newline at end of file diff --git a/iambic/output/templates/exception_details.jinja2 b/iambic/output/templates/exception_details.jinja2 deleted file mode 100644 index 7f668eb9a..000000000 --- a/iambic/output/templates/exception_details.jinja2 +++ /dev/null @@ -1,40 +0,0 @@ -{% extends "accounts.jinja2" %} -{% block account scoped %} - -{% for exception in account.exceptions %} -
-{{ exception.meta.name }} (Count: {{ exception.meta.number }}) - - - - - - - - - - - - {% for template_id, template_data in exception.resources -%} - - - - - - - - {% for row in template_data[1:] -%} - - - - - - - {% endfor -%} - {% endfor -%} - -
Template IDResource TypeResource IDActionProposed Change
{{ template_id }}{{ template_data[0]['resource_type'] }}{{ template_data[0]['resource_id'] }}{{ template_data[0]['action'] }}{{ template_data[0]['proposed_change'] }}
{{ row['resource_type'] }}{{ row['resource_id'] }}{{ row['action'] }}{{ row['proposed_change'] }}
-
-{% endfor %} - -{% endblock %} \ No newline at end of file diff --git a/iambic/output/templates/resource_change.jinja2 b/iambic/output/templates/resource_change.jinja2 deleted file mode 100644 index 2b5733328..000000000 --- a/iambic/output/templates/resource_change.jinja2 +++ /dev/null @@ -1,32 +0,0 @@ -{% extends "accounts.jinja2" %} -{% block account %} - -{{ super() }} -{% for change in account.changes %} -
-{{ change.resource_id }} (Count: {{ change.resource_type }}) - - - - - - - - - - - - - - - - - - - - - -
Resource IDResource TypeCurrent ValueNew ValueChange SummaryExceptions
{{ change.resource_id }}{{ change.resource_type }}{{ change.current_value }}{{ change.new_value }}{{ change.change_summary }}{{ change.exceptions_seen }}
-
-{% endfor %} -{% endblock %} \ No newline at end of file diff --git a/iambic/output/templates/template.jinja2 b/iambic/output/templates/template.jinja2 deleted file mode 100644 index 5a3316b84..000000000 --- a/iambic/output/templates/template.jinja2 +++ /dev/null @@ -1,12 +0,0 @@ -{% extends "actions.jinja2" %} -{% block template scoped %} - -{% for template in action_summary.templates %} -
-{{ template.template_name }} (Count: {{ template.count }}) - {% block account scoped %} - {% endblock %} -
-{% endfor %} - -{% endblock %} \ No newline at end of file From e333ec82f77cc55ea14bc863df06f069a4cdb9e6 Mon Sep 17 00:00:00 2001 From: Matt Daue Date: Sat, 11 Mar 2023 22:38:53 -0800 Subject: [PATCH 13/17] Clean up - echo diff of current vs new Signed-off-by: Matt Daue --- iambic/output/markdown.py | 19 +- iambic/output/templates/summary.jinja2 | 126 - poetry.lock | 155 +- pyproject.toml | 2 + test/output/test_markdown_generator.py | 3351 +----------------------- 5 files changed, 181 insertions(+), 3472 deletions(-) delete mode 100644 iambic/output/templates/summary.jinja2 diff --git a/iambic/output/markdown.py b/iambic/output/markdown.py index dbcd641f6..819b13178 100644 --- a/iambic/output/markdown.py +++ b/iambic/output/markdown.py @@ -1,7 +1,11 @@ +import json import pathlib from typing import Any, Dict, List, Set + +import frozendict from jinja2 import Environment, FileSystemLoader from pydantic import BaseModel as PydanticBaseModel, Field +from recursive_diff import recursive_diff from iambic.core.logger import log from iambic.core.models import ( @@ -10,6 +14,15 @@ ProposedChangeType, TemplateChangeDetails, ) +from iambic.core.utils import yaml + + +class ProposedChangeDiff(ProposedChange): + diff: str = Field(default=None) + + def __init__(self, proposed_change: ProposedChange) -> None: + super().__init__(**proposed_change.dict()) + self.diff = "\n".join(list(recursive_diff(self.current_value, self.new_value))) class ApplicableChange(PydanticBaseModel): @@ -24,7 +37,7 @@ def __hash__(self): return hash((self.resource_id, self.resource_type)) def __init__(self, change: ProposedChange, template_change: TemplateChangeDetails, **data: Any) -> None: - super().__init__(change=change, template_change=template_change, **data) + super().__init__(change=ProposedChangeDiff(change), template_change=template_change, **data) self.template_name = pathlib.Path(template_change.template_path).name @@ -204,9 +217,9 @@ def get_template_data(resources_changes: List[TemplateChangeDetails]) -> Dict[st return ActionSummaries.compile(resources_changes) -def render_resource_changes(resource_changes: List[TemplateChangeDetails]): +def gh_render_resource_changes(resource_changes: List[TemplateChangeDetails]): template_data = get_template_data(resource_changes) my_path = pathlib.Path(__file__).parent.absolute() env = Environment(loader=FileSystemLoader(my_path / 'templates')) - template = env.get_template("summary.jinja2") + template = env.get_template("github_summary.jinja2") return template.render(iambic=template_data) diff --git a/iambic/output/templates/summary.jinja2 b/iambic/output/templates/summary.jinja2 deleted file mode 100644 index e37936229..000000000 --- a/iambic/output/templates/summary.jinja2 +++ /dev/null @@ -1,126 +0,0 @@ -# IAMbic Summary -## Change Detection -* {{ iambic.num_actions }} distinct actions. -* {{ iambic.num_templates }} templates with changes. -* {{ iambic.num_accounts }} accounts affected. -## Exceptions -* {{ iambic.num_exceptions }} exceptions were recorded. - -# IAMbic Change Details -{% for action_summary in iambic.action_summaries -%} -
-Action: {{ action_summary.action }} (Number of Templates: {{ action_summary.num_templates }}) - {% for template in action_summary.templates -%} -
- Template: {{ template.template_name }} (Number of Accounts: {{ template.num_accounts }}) - {% for account in template.accounts -%} -
- Account: {{ account.account }} (Number of Changes: {{ account.num_changes }}) - {% for change in account.changes -%} - - - - - - - {% if change.current_value -%} - - {% endif -%} - {% if change.new_value -%} - - {% endif -%} - {% if change.change_summary -%} - - {% endif -%} - {% if change.exceptions_seen -%} - - {% endif -%} - - - - - - - - {% if change.current_value -%} - - {% endif -%} - {% if change.new_value -%} - - {% endif -%} - {% if change.change_summary -%} - - {% endif -%} - {% if change.exceptions_seen -%} - - {% endif -%} - - -
Resource IDResource TypeChange TypeCurrent ValueNew ValueChange SummaryExceptions
{{ change.resource_id }}{{ change.resource_type }}{{ change.change.change_type.value }}{{ change.current_value }}{{ change.new_value }}{{ change.change_summary }}{{ change.exceptions_seen }}
- {% endfor -%} -
- {% endfor -%} -
- {% endfor -%} -
-{% endfor %} - -# IAMbic Exceptions - -{% for action_summary in iambic.exceptions %} -
-Action: {{ action_summary.action }} (Number of Templates: {{ action_summary.num_templates }}) - {% for template in action_summary.templates -%} -
- Template: {{ template.template_name }} (Number of Accounts: {{ template.num_accounts }}) - {% for account in template.accounts -%} -
- Account: {{ account.account }} (Number of Changes: {{ account.num_changes }}) - {% for change in account.changes -%} - - - - - - - {% if change.current_value -%} - - {% endif -%} - {% if change.new_value -%} - - {% endif -%} - {% if change.change_summary -%} - - {% endif -%} - {% if change.exceptions_seen -%} - - {% endif -%} - - - - - - - - {% if change.current_value -%} - - {% endif -%} - {% if change.new_value -%} - - {% endif -%} - {% if change.change_summary -%} - - {% endif -%} - {% if change.exceptions_seen -%} - - {% endif -%} - - -
Resource IDResource TypeChange TypeCurrent ValueNew ValueChange SummaryExceptions
{{ change.resource_id }}{{ change.resource_type }}{{ change.change.change_type.value }}{{ change.current_value }}{{ change.new_value }}{{ change.change_summary }}{{ change.exceptions_seen }}
- {% endfor -%} -
- {% endfor -%} -
- {% endfor -%} -
-{% endfor -%} diff --git a/poetry.lock b/poetry.lock index 21d860ff5..f508e6be6 100644 --- a/poetry.lock +++ b/poetry.lock @@ -800,6 +800,32 @@ files = [ {file = "flatdict-4.0.1.tar.gz", hash = "sha256:cd32f08fd31ed21eb09ebc76f06b6bd12046a24f77beb1fd0281917e47f26742"}, ] +[[package]] +name = "frozendict" +version = "2.3.5" +description = "A simple immutable dictionary" +category = "main" +optional = false +python-versions = ">=3.6" +files = [ + {file = "frozendict-2.3.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:fa08c3f361e26c698c22f008804cac4a5b51437c12feafb983daadac12f66ead"}, + {file = "frozendict-2.3.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c9b8cbed40c96fce53e5a31ff2db30ca2c56992ba033555b08c22d099c3576ec"}, + {file = "frozendict-2.3.5-cp310-cp310-win_amd64.whl", hash = "sha256:64a00bcad55ff122293b0d362856dce0b248e894f1dcb0a0f68227a5ba9e4be6"}, + {file = "frozendict-2.3.5-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:08f8efd6fbe885e6217d210302cdc12cb8134aeac2b83db898511bc5e34719c5"}, + {file = "frozendict-2.3.5-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:26a2c371d23f148886864a5b82f1e5eefed35ce145b5d59dcfd3d66c9391bb45"}, + {file = "frozendict-2.3.5-cp36-cp36m-win_amd64.whl", hash = "sha256:de96ccf6e574482c9537ffa68b2cb381537a5a085483001d4a2b93847089bc04"}, + {file = "frozendict-2.3.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:1dbe11318b423fb3591e08d8b832d27dfd7b74dc20486d3384b8e05d6de2bcf7"}, + {file = "frozendict-2.3.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:30af9f39a5e29edca96b09c8d0a17fc78a0efd5f31f74d5eebb4c9a28d03032f"}, + {file = "frozendict-2.3.5-cp37-cp37m-win_amd64.whl", hash = "sha256:d1677e53d370ba44a07fbcc036fa24d4ae5693f0ed785496caf49e12a238d41f"}, + {file = "frozendict-2.3.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1411ef255b7a55fc337022ba158acf1391cd0d9a5c13142abbb7367936ab6f78"}, + {file = "frozendict-2.3.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a4a1c8febc23f3c81c2b94d70268b5b760ed7e5e81c90c3baa22bf144db3d2f9"}, + {file = "frozendict-2.3.5-cp38-cp38-win_amd64.whl", hash = "sha256:210a59a5267ae79b5d92cd50310cd5bcb122f1783a3d9016ad6db9cc179d4fbe"}, + {file = "frozendict-2.3.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:21dd627c5bdcdf0743d49f7667dd186234baa85db91517de8cb80d3bda7018d9"}, + {file = "frozendict-2.3.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d58ca5f9094725c2f44b09fe4e71f7ddd250d5cdaca7219c674bd691373fed3a"}, + {file = "frozendict-2.3.5-cp39-cp39-win_amd64.whl", hash = "sha256:f407d9d661d77896b7a6dae6ab7545c913e65d23a312cf2893406432069408db"}, + {file = "frozendict-2.3.5.tar.gz", hash = "sha256:65d7e3995c9174b77d7d80514d7062381750491e112bbeb44323368baa3e636a"}, +] + [[package]] name = "frozenlist" version = "1.3.3" @@ -1317,6 +1343,44 @@ files = [ [package.dependencies] setuptools = "*" +[[package]] +name = "numpy" +version = "1.24.2" +description = "Fundamental package for array computing in Python" +category = "main" +optional = false +python-versions = ">=3.8" +files = [ + {file = "numpy-1.24.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:eef70b4fc1e872ebddc38cddacc87c19a3709c0e3e5d20bf3954c147b1dd941d"}, + {file = "numpy-1.24.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e8d2859428712785e8a8b7d2b3ef0a1d1565892367b32f915c4a4df44d0e64f5"}, + {file = "numpy-1.24.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6524630f71631be2dabe0c541e7675db82651eb998496bbe16bc4f77f0772253"}, + {file = "numpy-1.24.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a51725a815a6188c662fb66fb32077709a9ca38053f0274640293a14fdd22978"}, + {file = "numpy-1.24.2-cp310-cp310-win32.whl", hash = "sha256:2620e8592136e073bd12ee4536149380695fbe9ebeae845b81237f986479ffc9"}, + {file = "numpy-1.24.2-cp310-cp310-win_amd64.whl", hash = "sha256:97cf27e51fa078078c649a51d7ade3c92d9e709ba2bfb97493007103c741f1d0"}, + {file = "numpy-1.24.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:7de8fdde0003f4294655aa5d5f0a89c26b9f22c0a58790c38fae1ed392d44a5a"}, + {file = "numpy-1.24.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4173bde9fa2a005c2c6e2ea8ac1618e2ed2c1c6ec8a7657237854d42094123a0"}, + {file = "numpy-1.24.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4cecaed30dc14123020f77b03601559fff3e6cd0c048f8b5289f4eeabb0eb281"}, + {file = "numpy-1.24.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9a23f8440561a633204a67fb44617ce2a299beecf3295f0d13c495518908e910"}, + {file = "numpy-1.24.2-cp311-cp311-win32.whl", hash = "sha256:e428c4fbfa085f947b536706a2fc349245d7baa8334f0c5723c56a10595f9b95"}, + {file = "numpy-1.24.2-cp311-cp311-win_amd64.whl", hash = "sha256:557d42778a6869c2162deb40ad82612645e21d79e11c1dc62c6e82a2220ffb04"}, + {file = "numpy-1.24.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d0a2db9d20117bf523dde15858398e7c0858aadca7c0f088ac0d6edd360e9ad2"}, + {file = "numpy-1.24.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:c72a6b2f4af1adfe193f7beb91ddf708ff867a3f977ef2ec53c0ffb8283ab9f5"}, + {file = "numpy-1.24.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c29e6bd0ec49a44d7690ecb623a8eac5ab8a923bce0bea6293953992edf3a76a"}, + {file = "numpy-1.24.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2eabd64ddb96a1239791da78fa5f4e1693ae2dadc82a76bc76a14cbb2b966e96"}, + {file = "numpy-1.24.2-cp38-cp38-win32.whl", hash = "sha256:e3ab5d32784e843fc0dd3ab6dcafc67ef806e6b6828dc6af2f689be0eb4d781d"}, + {file = "numpy-1.24.2-cp38-cp38-win_amd64.whl", hash = "sha256:76807b4063f0002c8532cfeac47a3068a69561e9c8715efdad3c642eb27c0756"}, + {file = "numpy-1.24.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:4199e7cfc307a778f72d293372736223e39ec9ac096ff0a2e64853b866a8e18a"}, + {file = "numpy-1.24.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:adbdce121896fd3a17a77ab0b0b5eedf05a9834a18699db6829a64e1dfccca7f"}, + {file = "numpy-1.24.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:889b2cc88b837d86eda1b17008ebeb679d82875022200c6e8e4ce6cf549b7acb"}, + {file = "numpy-1.24.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f64bb98ac59b3ea3bf74b02f13836eb2e24e48e0ab0145bbda646295769bd780"}, + {file = "numpy-1.24.2-cp39-cp39-win32.whl", hash = "sha256:63e45511ee4d9d976637d11e6c9864eae50e12dc9598f531c035265991910468"}, + {file = "numpy-1.24.2-cp39-cp39-win_amd64.whl", hash = "sha256:a77d3e1163a7770164404607b7ba3967fb49b24782a6ef85d9b5f54126cc39e5"}, + {file = "numpy-1.24.2-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:92011118955724465fb6853def593cf397b4a1367495e0b59a7e69d40c4eb71d"}, + {file = "numpy-1.24.2-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f9006288bcf4895917d02583cf3411f98631275bc67cce355a7f39f8c14338fa"}, + {file = "numpy-1.24.2-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:150947adbdfeceec4e5926d956a06865c1c690f2fd902efede4ca6fe2e657c3f"}, + {file = "numpy-1.24.2.tar.gz", hash = "sha256:003a9f530e880cb2cd177cba1af7220b9aa42def9c4afc2a2fc3ee6be7eb2b22"}, +] + [[package]] name = "okta" version = "2.8.0" @@ -1367,6 +1431,54 @@ files = [ {file = "packaging-23.0.tar.gz", hash = "sha256:b6ad297f8907de0fa2fe1ccbd26fdaf387f5f47c7275fedf8cce89f99446cf97"}, ] +[[package]] +name = "pandas" +version = "1.5.3" +description = "Powerful data structures for data analysis, time series, and statistics" +category = "main" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pandas-1.5.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:3749077d86e3a2f0ed51367f30bf5b82e131cc0f14260c4d3e499186fccc4406"}, + {file = "pandas-1.5.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:972d8a45395f2a2d26733eb8d0f629b2f90bebe8e8eddbb8829b180c09639572"}, + {file = "pandas-1.5.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:50869a35cbb0f2e0cd5ec04b191e7b12ed688874bd05dd777c19b28cbea90996"}, + {file = "pandas-1.5.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c3ac844a0fe00bfaeb2c9b51ab1424e5c8744f89860b138434a363b1f620f354"}, + {file = "pandas-1.5.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7a0a56cef15fd1586726dace5616db75ebcfec9179a3a55e78f72c5639fa2a23"}, + {file = "pandas-1.5.3-cp310-cp310-win_amd64.whl", hash = "sha256:478ff646ca42b20376e4ed3fa2e8d7341e8a63105586efe54fa2508ee087f328"}, + {file = "pandas-1.5.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:6973549c01ca91ec96199e940495219c887ea815b2083722821f1d7abfa2b4dc"}, + {file = "pandas-1.5.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c39a8da13cede5adcd3be1182883aea1c925476f4e84b2807a46e2775306305d"}, + {file = "pandas-1.5.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f76d097d12c82a535fda9dfe5e8dd4127952b45fea9b0276cb30cca5ea313fbc"}, + {file = "pandas-1.5.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e474390e60ed609cec869b0da796ad94f420bb057d86784191eefc62b65819ae"}, + {file = "pandas-1.5.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5f2b952406a1588ad4cad5b3f55f520e82e902388a6d5a4a91baa8d38d23c7f6"}, + {file = "pandas-1.5.3-cp311-cp311-win_amd64.whl", hash = "sha256:bc4c368f42b551bf72fac35c5128963a171b40dce866fb066540eeaf46faa003"}, + {file = "pandas-1.5.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:14e45300521902689a81f3f41386dc86f19b8ba8dd5ac5a3c7010ef8d2932813"}, + {file = "pandas-1.5.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:9842b6f4b8479e41968eced654487258ed81df7d1c9b7b870ceea24ed9459b31"}, + {file = "pandas-1.5.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:26d9c71772c7afb9d5046e6e9cf42d83dd147b5cf5bcb9d97252077118543792"}, + {file = "pandas-1.5.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5fbcb19d6fceb9e946b3e23258757c7b225ba450990d9ed63ccceeb8cae609f7"}, + {file = "pandas-1.5.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:565fa34a5434d38e9d250af3c12ff931abaf88050551d9fbcdfafca50d62babf"}, + {file = "pandas-1.5.3-cp38-cp38-win32.whl", hash = "sha256:87bd9c03da1ac870a6d2c8902a0e1fd4267ca00f13bc494c9e5a9020920e1d51"}, + {file = "pandas-1.5.3-cp38-cp38-win_amd64.whl", hash = "sha256:41179ce559943d83a9b4bbacb736b04c928b095b5f25dd2b7389eda08f46f373"}, + {file = "pandas-1.5.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c74a62747864ed568f5a82a49a23a8d7fe171d0c69038b38cedf0976831296fa"}, + {file = "pandas-1.5.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c4c00e0b0597c8e4f59e8d461f797e5d70b4d025880516a8261b2817c47759ee"}, + {file = "pandas-1.5.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a50d9a4336a9621cab7b8eb3fb11adb82de58f9b91d84c2cd526576b881a0c5a"}, + {file = "pandas-1.5.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dd05f7783b3274aa206a1af06f0ceed3f9b412cf665b7247eacd83be41cf7bf0"}, + {file = "pandas-1.5.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9f69c4029613de47816b1bb30ff5ac778686688751a5e9c99ad8c7031f6508e5"}, + {file = "pandas-1.5.3-cp39-cp39-win32.whl", hash = "sha256:7cec0bee9f294e5de5bbfc14d0573f65526071029d036b753ee6507d2a21480a"}, + {file = "pandas-1.5.3-cp39-cp39-win_amd64.whl", hash = "sha256:dfd681c5dc216037e0b0a2c821f5ed99ba9f03ebcf119c7dac0e9a7b960b9ec9"}, + {file = "pandas-1.5.3.tar.gz", hash = "sha256:74a3fd7e5a7ec052f183273dc7b0acd3a863edf7520f5d3a1765c04ffdb3b0b1"}, +] + +[package.dependencies] +numpy = [ + {version = ">=1.21.0", markers = "python_version >= \"3.10\""}, + {version = ">=1.23.2", markers = "python_version >= \"3.11\""}, +] +python-dateutil = ">=2.8.1" +pytz = ">=2020.1" + +[package.extras] +test = ["hypothesis (>=5.5.3)", "pytest (>=6.0)", "pytest-xdist (>=1.31)"] + [[package]] name = "pathspec" version = "0.11.0" @@ -1952,6 +2064,22 @@ prompt_toolkit = ">=2.0,<4.0" [package.extras] docs = ["Sphinx (>=3.3,<4.0)", "sphinx-autobuild (>=2020.9.1,<2021.0.0)", "sphinx-autodoc-typehints (>=1.11.1,<2.0.0)", "sphinx-copybutton (>=0.3.1,<0.4.0)", "sphinx-rtd-theme (>=0.5.0,<0.6.0)"] +[[package]] +name = "recursive-diff" +version = "1.1.0" +description = "Recursively compare two Python data structures" +category = "main" +optional = false +python-versions = ">=3.8" +files = [ + {file = "recursive_diff-1.1.0.tar.gz", hash = "sha256:3c21cac59b4236fca84ee817fe9e659e9c7e0fbb703a76f0b99a82d63f7f234a"}, +] + +[package.dependencies] +numpy = ">=1.16" +pandas = ">=0.25" +xarray = ">=0.12" + [[package]] name = "regex" version = "2022.10.31" @@ -2603,6 +2731,31 @@ files = [ {file = "wrapt-1.15.0.tar.gz", hash = "sha256:d06730c6aed78cee4126234cf2d071e01b44b915e725a6cb439a879ec9754a3a"}, ] +[[package]] +name = "xarray" +version = "2023.2.0" +description = "N-D labeled arrays and datasets in Python" +category = "main" +optional = false +python-versions = ">=3.9" +files = [ + {file = "xarray-2023.2.0-py3-none-any.whl", hash = "sha256:9fb925e47deb68e2486c8d80d13e3ad97ff6f0e02a26d622c0b6559be707c22e"}, + {file = "xarray-2023.2.0.tar.gz", hash = "sha256:aa760500a2d8f8be8efd8f3b27a94b2af3b0a8c2c037347d595eaf6ff09d8a77"}, +] + +[package.dependencies] +numpy = ">=1.21" +packaging = ">=21.3" +pandas = ">=1.4" + +[package.extras] +accel = ["bottleneck", "flox", "numbagg", "scipy"] +complete = ["bottleneck", "cfgrib", "cftime", "dask[complete]", "flox", "fsspec", "h5netcdf", "matplotlib", "nc-time-axis", "netCDF4", "numbagg", "pooch", "pydap", "rasterio", "scipy", "seaborn", "zarr"] +docs = ["bottleneck", "cfgrib", "cftime", "dask[complete]", "flox", "fsspec", "h5netcdf", "ipykernel", "ipython", "jupyter-client", "matplotlib", "nbsphinx", "nc-time-axis", "netCDF4", "numbagg", "pooch", "pydap", "rasterio", "scanpydoc", "scipy", "seaborn", "sphinx-autosummary-accessors", "sphinx-rtd-theme", "zarr"] +io = ["cfgrib", "cftime", "fsspec", "h5netcdf", "netCDF4", "pooch", "pydap", "rasterio", "scipy", "zarr"] +parallel = ["dask[complete]"] +viz = ["matplotlib", "nc-time-axis", "seaborn"] + [[package]] name = "xmltodict" version = "0.13.0" @@ -2814,4 +2967,4 @@ multidict = ">=4.0" [metadata] lock-version = "2.0" python-versions = "^3.10" -content-hash = "d80b31a78380f7d1dee3e6cd085b02273f1bb87052e7272f5500178201cd37bb" +content-hash = "8ecc8ef5304db4dcf97a395608f0c1ff259f82299ad16c9288181d4283077b15" diff --git a/pyproject.toml b/pyproject.toml index 63d792bd1..c7db39ab7 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -49,6 +49,8 @@ pytest-mock = "^3.10.0" questionary = "^1.10.0" types-dateparser = "^1.1.4.5" cryptography = "^39.0.1" +recursive-diff = "^1.1.0" +frozendict = "^2.3.5" [tool.poetry.scripts] iambic = "iambic.main:cli" diff --git a/test/output/test_markdown_generator.py b/test/output/test_markdown_generator.py index d962353e8..19f89a263 100644 --- a/test/output/test_markdown_generator.py +++ b/test/output/test_markdown_generator.py @@ -1,3342 +1,15 @@ import pytest -from iambic.output.markdown import ActionSummaries, get_template_data, render_resource_changes +from iambic.output.markdown import ( + ActionSummaries, + get_template_data, + gh_render_resource_changes, +) from iambic.core.utils import yaml from iambic.core.models import TemplateChangeDetails -template_yaml_delete = """ - resource_id: kris_test - resource_type: aws:iam:role - template_path: ./resources/aws/roles/development-2/kris_test.yaml - proposed_changes: - - account: development-2 - (350876197038) - resource_id: kris_test - current_value: - Path: / - RoleName: kris_test - RoleId: AROAVDMOZ4CXKLKGMPAFP - Arn: arn:aws:iam::350876197038:role/kris_test - CreateDate: '2022-04-22T00:54:28+00:00' - AssumeRolePolicyDocument: - Version: '2012-10-17' - Statement: - - Effect: Allow - Principal: - Service: ec2.amazonaws.com - Action: sts:AssumeRole - - Sid: noqdeleteon20220429curtis1650738227 - Effect: Allow - Principal: - AWS: arn:aws:iam::759357822767:role/NoqSaasRoleLocalDev - Action: - - sts:AssumeRole - - sts:TagSession - - Sid: noqdeleteon20220429curtis1650738517 - Effect: Allow - Principal: - AWS: arn:aws:iam::759357822767:role/NoqSaasRoleLocalDev - Action: - - sts:AssumeRole - - sts:TagSession - - Effect: Allow - Principal: - AWS: arn:aws:iam::759357822767:role/NoqCentralRoleLocalDev - Action: - - sts:AssumeRole - - sts:TagSession - - Effect: Allow - Principal: - AWS: arn:aws:iam::759357822767:role/NoqCentralRoleLocalDev - Action: - - sts:AssumeRole - - sts:TagSession - - Effect: Allow - Principal: - AWS: arn:aws:iam::759357822767:role/NoqCentralRoleLocalDev - Action: - - sts:AssumeRole - - sts:TagSession - Description: kris's test role - MaxSessionDuration: 3600 - Tags: - - Key: noq-authorized - Value: non-admin:TestTwo:us-east-1_CNoZribID_Google:NewTestGroup - - Key: noq-pending-resource-removal - Value: '2022-09-01T23:55:11.460450+00:00' - RoleLastUsed: - LastUsedDate: '2022-04-28T19:41:47+00:00' - Region: us-west-1 - ManagedPolicies: - - PolicyName: AWSDirectConnectReadOnlyAccess - PolicyArn: arn:aws:iam::aws:policy/AWSDirectConnectReadOnlyAccess - - PolicyName: AWSIoT1ClickReadOnlyAccess - PolicyArn: arn:aws:iam::aws:policy/AWSIoT1ClickReadOnlyAccess - InlinePolicies: - - PolicyName: noq_user_1659544539_nslq - Version: '2012-10-17' - Statement: - - Resource: - - arn:aws:s3:::noq-development-2-test-bucket - - arn:aws:s3:::noq-development-2-test-bucket/* - Action: - - s3:abortmultipartupload - - s3:deleteobject - - s3:deleteobjecttagging - - s3:deleteobjectversion - - s3:deleteobjectversiontagging - - s3:getobject - - s3:getobjectacl - - s3:getobjecttagging - - s3:getobjectversion - - s3:getobjectversionacl - - s3:getobjectversiontagging - - s3:listbucket - - s3:listbucketversions - - s3:listmultipartuploadparts* - - s3:putobject - - s3:putobjecttagging - - s3:putobjectversiontagging - Effect: Allow - Sid: noquser1659544529haql - - PolicyName: noq_user_1659545128_seob - Statement: - - Action: - - s3:putobject - - s3:putobjecttagging - - s3:putobjectversiontagging - Effect: Allow - Resource: - - arn:aws:s3:::noq-development-2-test-bucket - - arn:aws:s3:::noq-development-2-test-bucket/* - Sid: noquser1659544529haql - Version: '2012-10-17' - - PolicyName: noq_user_1665770085_lgks - Statement: - - Action: - - s3:getbucket* - - s3:getobject - - s3:getobjectacl - - s3:getobjecttagging - - s3:getobjectversion - - s3:getobjectversionacl - - s3:getobjectversiontagging - Effect: Allow - Resource: - - arn:aws:s3:::consoleme-dev-test-bucket - - arn:aws:s3:::consoleme-dev-test-bucket/* - Sid: noquser1665770063uboo - Version: '2012-10-17' - - PolicyName: noq_user_1665770091_yins - Statement: - - Action: - - s3:getbucket* - - s3:getobject - - s3:getobjectacl - - s3:getobjecttagging - - s3:getobjectversion - - s3:getobjectversionacl - - s3:getobjectversiontagging - Effect: Allow - Resource: - - arn:aws:s3:::consoleme-dev-test-bucket - - arn:aws:s3:::consoleme-dev-test-bucket/* - Sid: noquser1665770063uboo - Version: '2012-10-17' - - PolicyName: noq_will_1654542886_ekni - Version: '2012-10-17' - Statement: - - Resource: - - arn:aws:sns:us-west-2:759357822767:testtopic - Action: - - sns:confirmsubscription - - sns:getendpointattributes - - sns:gettopicattributes - - sns:subscribe - Effect: Allow - Sid: noqwill1654542862mhki - - PolicyName: noq_will_1654546707_fcqy - Version: '2012-10-17' - Statement: - - Resource: - - arn:aws:sqs:us-west-2:759357822767:testqueue - Action: - - sqs:getqueueattributes - - sqs:getqueueurl - - sqs:sendmessage - Effect: Allow - Sid: noqwill1654546703lxlj - - PolicyName: noq_will_1655326077_yhpo - Statement: - - Action: - - s3:abortmultipartupload - - s3:getobject - - s3:getobjectacl - - s3:getobjecttagging - - s3:getobjectversion - - s3:getobjectversionacl - - s3:getobjectversiontagging - - s3:listbucket - - s3:listbucketversions - - s3:listmultipartuploadparts* - - s3:putobject - - s3:putobjecttagging - - s3:putobjectversiontagging - Effect: Allow - Resource: - - arn:aws:s3:::noq-development-2-test-bucket - - arn:aws:s3:::noq-development-2-test-bucket/* - Sid: noqwill1655326065lpux - Version: '2012-10-17' - proposed_changes: - - change_type: Delete - resource_id: kris_test - resource_type: aws:iam:role - exceptions_seen: [] - exceptions_seen: [] - - resource_id: ConsoleMeCentralRoleDev - resource_type: aws:iam:role - template_path: ./resources/aws/roles/development/consolemecentralroledev.yaml - proposed_changes: - - account: development - (759357822767) - resource_id: ConsoleMeCentralRoleDev - current_value: - Path: / - RoleName: ConsoleMeCentralRoleDev - RoleId: AROA3BTKA24X4UN7VKPBQ - Arn: arn:aws:iam::759357822767:role/ConsoleMeCentralRoleDev - CreateDate: '2022-03-23T13:58:37+00:00' - AssumeRolePolicyDocument: - Version: '2012-10-17' - Statement: - - Effect: Allow - Principal: - Service: ecs-tasks.amazonaws.com - Action: sts:AssumeRole - - Effect: Allow - Principal: - AWS: arn:aws:iam::940552945933:role/NoqCentralRoleCorpNoqDev - Action: - - sts:AssumeRole - - sts:TagSession - - Effect: Allow - Principal: - AWS: arn:aws:iam::940552945933:role/NoqCentralRoleCorpNoqDev - Action: - - sts:AssumeRole - - sts:TagSession - - Effect: Allow - Principal: - AWS: arn:aws:iam::940552945933:role/NoqCentralRoleCorpNoqDev - Action: - - sts:AssumeRole - - sts:TagSession - Description: Allows EC2 instances to call AWS services on your behalf. - MaxSessionDuration: 3600 - Tags: - - Key: noq-tear-supported-groups - Value: engineering@noq.dev - RoleLastUsed: - LastUsedDate: '2022-06-16T15:13:09+00:00' - Region: us-east-1 - ManagedPolicies: [] - InlinePolicies: - - PolicyName: consoleme_policy - Version: '2012-10-17' - Statement: - - Effect: Allow - Action: - - access-analyzer:* - - cloudtrail:* - - cloudwatch:* - - config:SelectResourceConfig - - config:SelectAggregateResourceConfig - - dynamodb:batchgetitem - - dynamodb:batchwriteitem - - dynamodb:deleteitem - - dynamodb:describe* - - dynamodb:getitem - - dynamodb:getrecords - - dynamodb:getsharditerator - - dynamodb:putitem - - dynamodb:query - - dynamodb:scan - - dynamodb:updateitem - - dynamodb:CreateTable - - dynamodb:UpdateTimeToLive - - sns:createplatformapplication - - sns:createplatformendpoint - - sns:deleteendpoint - - sns:deleteplatformapplication - - sns:getendpointattributes - - sns:getplatformapplicationattributes - - sns:listendpointsbyplatformapplication - - sns:publish - - sns:setendpointattributes - - sns:setplatformapplicationattributes - - sts:assumerole - Resource: - - '*' - - Effect: Allow - Action: - - autoscaling:Describe* - - cloudwatch:Get* - - cloudwatch:List* - - config:BatchGet* - - config:List* - - config:Select* - - ec2:DescribeSubnets - - ec2:describevpcendpoints - - ec2:DescribeVpcs - - iam:GetAccountAuthorizationDetails - - iam:ListAccountAliases - - iam:ListAttachedRolePolicies - - ec2:describeregions - - s3:GetBucketPolicy - - s3:GetBucketTagging - - s3:ListAllMyBuckets - - s3:ListBucket - - s3:PutBucketPolicy - - s3:PutBucketTagging - - sns:GetTopicAttributes - - sns:ListTagsForResource - - sns:ListTopics - - sns:SetTopicAttributes - - sns:TagResource - - sns:UnTagResource - - sqs:GetQueueAttributes - - sqs:GetQueueUrl - - sqs:ListQueues - - sqs:ListQueueTags - - sqs:SetQueueAttributes - - sqs:TagQueue - - sqs:UntagQueue - Resource: '*' - - Effect: Allow - Action: - - s3:ListBucket - - s3:GetObject - - s3:PutObject - - s3:DeleteObject - Resource: - - arn:aws:s3:::consoleme-dev-test-bucket - - arn:aws:s3:::consoleme-dev-test-bucket/* - - Effect: Allow - Action: - - s3:ListBucket - - s3:GetObject - Resource: - - arn:aws:s3:::consoleme-dev-configuration-bucket - - arn:aws:s3:::consoleme-dev-configuration-bucket/* - - PolicyName: noq_delete_on_20220504_user_1651619558 - Version: '2012-10-17' - Statement: - - Effect: Allow - Action: - - s3:getobject - - s3:getobjectacl - - s3:getobjecttagging - - s3:getobjectversion - - s3:getobjectversionacl - - s3:getobjectversiontagging - - s3:listbucket - - s3:listbucketversions - Resource: - - arn:aws:s3:::noq-development-2-test-bucket - - arn:aws:s3:::noq-development-2-test-bucket/* - Sid: noquser1651619552mrrc - - PolicyName: noq_delete_on_20220711_user_1657459709 - Version: '2012-10-17' - Statement: - - Action: - - s3:getobject - - s3:getobjectacl - - s3:getobjecttagging - - s3:getobjectversion - - s3:getobjectversionacl - - s3:getobjectversiontagging - - s3:listbucket - - s3:listbucketversions - Effect: Allow - Resource: - - arn:aws:s3:::adostoma - - arn:aws:s3:::adostoma/* - Sid: noquser1657459619gxvf - proposed_changes: - - change_type: Delete - resource_id: ConsoleMeCentralRoleDev - resource_type: aws:iam:role - exceptions_seen: [] - exceptions_seen: [] - - resource_id: '{{account_name}}_multi_account_admin' - resource_type: aws:iam:role - template_path: ./resources/aws/roles/multi_account/account_name_multi_account_admin.yaml - proposed_changes: - - account: development - (759357822767) - resource_id: development_multi_account_admin - current_value: - Path: / - RoleName: development_multi_account_admin - RoleId: AROA3BTKA24XR7IH5OW2K - Arn: arn:aws:iam::759357822767:role/development_multi_account_admin - CreateDate: '2022-08-11T18:16:22+00:00' - AssumeRolePolicyDocument: - Version: '2012-10-17' - Statement: - - Effect: Allow - Principal: - AWS: arn:aws:iam::759357822767:role/NoqSaasRoleLocalDev - Action: - - sts:AssumeRole - - sts:TagSession - Description: Noq Admin Role - MaxSessionDuration: 3600 - PermissionsBoundary: - PermissionsBoundaryType: Policy - PermissionsBoundaryArn: arn:aws:iam::aws:policy/AmazonGlacierReadOnlyAccess - Tags: - - Key: account_name - Value: development - - Key: noq-managed - Value: 'true' - - Key: noq-authorized-cli-only - Value: curtis@noq.dev - - Key: owner - Value: noq_admins@noq.dev - RoleLastUsed: {} - ManagedPolicies: - - PolicyName: AWSDirectConnectReadOnlyAccess - PolicyArn: arn:aws:iam::aws:policy/AWSDirectConnectReadOnlyAccess - InlinePolicies: - - PolicyName: admin_policy - Version: '2012-10-17' - Statement: - - Action: - - '*' - Effect: Allow - Resource: '*' - proposed_changes: - - change_type: Delete - resource_id: development_multi_account_admin - resource_type: aws:iam:role - exceptions_seen: [] - - account: staging - (259868150464) - resource_id: staging_multi_account_admin - current_value: - Path: / - RoleName: staging_multi_account_admin - RoleId: AROATZAKZJLAICECXXMTP - Arn: arn:aws:iam::259868150464:role/staging_multi_account_admin - CreateDate: '2022-08-11T18:16:08+00:00' - AssumeRolePolicyDocument: - Version: '2012-10-17' - Statement: - - Effect: Allow - Principal: - AWS: arn:aws:iam::759357822767:role/NoqSaasRoleLocalDev - Action: - - sts:AssumeRole - - sts:TagSession - Description: Noq Admin Role - MaxSessionDuration: 3600 - PermissionsBoundary: - PermissionsBoundaryType: Policy - PermissionsBoundaryArn: arn:aws:iam::aws:policy/AmazonGlacierReadOnlyAccess - Tags: - - Key: account_name - Value: staging - - Key: noq-managed - Value: 'true' - - Key: noq-authorized-cli-only - Value: curtis@noq.dev - - Key: owner - Value: noq_admins@noq.dev - RoleLastUsed: {} - ManagedPolicies: - - PolicyName: NoqTestPolicy - PolicyArn: arn:aws:iam::259868150464:policy/NoqTestPolicy - - PolicyName: AWSDirectConnectReadOnlyAccess - PolicyArn: arn:aws:iam::aws:policy/AWSDirectConnectReadOnlyAccess - InlinePolicies: - - PolicyName: admin_policy - Version: '2012-10-17' - Statement: - - Action: - - '*' - Effect: Allow - Resource: '*' - - PolicyName: other_policy - Version: '2012-10-17' - Statement: - - Action: - - s3:* - Effect: Deny - Resource: '*' - proposed_changes: - - change_type: Delete - resource_id: staging_multi_account_admin - resource_type: aws:iam:role - exceptions_seen: [] - exceptions_seen: [] - - resource_id: '{{account_name}}_multi_account_role' - resource_type: aws:iam:role - template_path: ./resources/aws/roles/multi_account/account_name_multi_account_role.yaml - proposed_changes: - - account: development - (759357822767) - resource_id: development_multi_account_role - current_value: - Path: / - RoleName: development_multi_account_role - RoleId: AROA3BTKA24X6WQ7P6HJJ - Arn: arn:aws:iam::759357822767:role/development_multi_account_role - CreateDate: '2022-10-01T19:48:17+00:00' - AssumeRolePolicyDocument: - Version: '2012-10-17' - Statement: - - Effect: Allow - Principal: - AWS: arn:aws:iam::759357822767:role/NoqSaasRoleLocalDev - Action: - - sts:AssumeRole - - sts:TagSession - Description: Networking team role - MaxSessionDuration: 3600 - PermissionsBoundary: - PermissionsBoundaryType: Policy - PermissionsBoundaryArn: arn:aws:iam::aws:policy/AmazonGlacierReadOnlyAccess - Tags: - - Key: noq-managed - Value: 'true' - - Key: networking-scp-exempt - Value: 'true' - - Key: owner - Value: networking@example.com - RoleLastUsed: {} - ManagedPolicies: [] - InlinePolicies: [] - proposed_changes: - - change_type: Delete - resource_id: development_multi_account_role - resource_type: aws:iam:role - exceptions_seen: [] - - account: staging - (259868150464) - resource_id: staging_multi_account_role - current_value: - Path: / - RoleName: staging_multi_account_role - RoleId: AROATZAKZJLAN3DHYDCDU - Arn: arn:aws:iam::259868150464:role/staging_multi_account_role - CreateDate: '2022-10-01T19:49:01+00:00' - AssumeRolePolicyDocument: - Version: '2012-10-17' - Statement: - - Effect: Allow - Principal: - AWS: arn:aws:iam::759357822767:role/NoqSaasRoleLocalDev - Action: - - sts:AssumeRole - - sts:TagSession - Description: Networking team role - MaxSessionDuration: 3600 - PermissionsBoundary: - PermissionsBoundaryType: Policy - PermissionsBoundaryArn: arn:aws:iam::aws:policy/AmazonGlacierReadOnlyAccess - Tags: - - Key: noq-managed - Value: 'true' - - Key: networking-scp-exempt - Value: 'true' - - Key: owner - Value: networking@example.com - RoleLastUsed: {} - ManagedPolicies: [] - InlinePolicies: [] - proposed_changes: - - change_type: Delete - resource_id: staging_multi_account_role - resource_type: aws:iam:role - exceptions_seen: [] - exceptions_seen: [] - - resource_id: ConsoleMe - resource_type: aws:iam:role - template_path: ./resources/aws/roles/multi_account/consoleme.yaml - proposed_changes: - - account: test - (242350334841) - resource_id: ConsoleMe - current_value: - Path: / - RoleName: ConsoleMe - RoleId: AROATQ3JUUN466ZO5SECI - Arn: arn:aws:iam::242350334841:role/ConsoleMe - CreateDate: '2021-09-29T18:40:39+00:00' - AssumeRolePolicyDocument: - Version: '2012-10-17' - Statement: - - Effect: Allow - Principal: - AWS: AROATZAKZJLAO6SLARMN5 - Action: - - sts:AssumeRole - - sts:TagSession - Description: Allows EC2 instances to call AWS services on your behalf. - MaxSessionDuration: 3600 - Tags: - - Key: noq-aa - Value: aa - - Key: consoleme-authorized - Value: ccastrapel@gmail.com - RoleLastUsed: {} - ManagedPolicies: [] - InlinePolicies: - - PolicyName: cm_ccastrapel_1633107564_lsix - Statement: - - Action: - - s3:getobject - - s3:getobjectacl - - s3:getobjecttagging - - s3:getobjectversion - - s3:getobjectversionacl - - s3:getobjectversiontagging - - s3:listbucket - - s3:listbucketversions - Effect: Allow - Resource: - - arn:aws:s3:::cdktoolkit-stagingbucket-1n7p9avb83roq - - arn:aws:s3:::cdktoolkit-stagingbucket-1n7p9avb83roq/* - Sid: cmccastrapel1633107551ibwb - Version: '2012-10-17' - - PolicyName: consolemespoke - Statement: - - Action: - - autoscaling:Describe* - - cloudwatch:Get* - - cloudwatch:List* - - config:BatchGet* - - config:List* - - config:Select* - - ec2:describeregions - - ec2:DescribeSubnets - - ec2:describevpcendpoints - - ec2:DescribeVpcs - - iam:* - - s3:GetBucketPolicy - - s3:GetBucketTagging - - s3:ListAllMyBuckets - - s3:ListBucket - - s3:PutBucketPolicy - - s3:PutBucketTagging - - sns:GetTopicAttributes - - sns:ListTagsForResource - - sns:ListTopics - - sns:SetTopicAttributes - - sns:TagResource - - sns:UnTagResource - - sqs:GetQueueAttributes - - sqs:GetQueueUrl - - sqs:ListQueues - - sqs:ListQueueTags - - sqs:SetQueueAttributes - - sqs:TagQueue - - sqs:UntagQueue - Effect: Allow - Resource: - - '*' - Sid: iam - Version: '2012-10-17' - proposed_changes: - - change_type: Delete - resource_id: ConsoleMe - resource_type: aws:iam:role - exceptions_seen: [] - - account: staging - (259868150464) - resource_id: ConsoleMe - current_value: - Path: / - RoleName: ConsoleMe - RoleId: AROATZAKZJLAD5ZTJJESR - Arn: arn:aws:iam::259868150464:role/ConsoleMe - CreateDate: '2021-09-29T19:34:56+00:00' - AssumeRolePolicyDocument: - Version: '2012-10-17' - Statement: - - Effect: Allow - Principal: - AWS: arn:aws:iam::940552945933:role/NoqCentralRoleCorpNoqDev - Action: - - sts:AssumeRole - - sts:TagSession - - Effect: Allow - Principal: - AWS: arn:aws:iam::759357822767:role/NoqCentralRoleLocalDev - Action: - - sts:AssumeRole - - sts:TagSession - - Effect: Allow - Principal: - AWS: arn:aws:iam::259868150464:role/NoqCentralRoleStaging - Action: - - sts:AssumeRole - - sts:TagSession - Description: Allows EC2 instances to call AWS services on your behalf. - MaxSessionDuration: 3600 - PermissionsBoundary: - PermissionsBoundaryType: Policy - PermissionsBoundaryArn: arn:aws:iam::259868150464:policy/adino - RoleLastUsed: - LastUsedDate: '2023-03-05T21:02:39+00:00' - Region: us-east-1 - ManagedPolicies: [] - InlinePolicies: - - PolicyName: spokerole - Statement: - - Action: - - autoscaling:Describe* - - cloudwatch:Get* - - cloudwatch:List* - - config:BatchGet* - - config:List* - - config:Select* - - ec2:describeregions - - ec2:DescribeSubnets - - ec2:describevpcendpoints - - ec2:DescribeVpcs - - iam:* - - s3:GetBucketPolicy - - s3:GetBucketTagging - - s3:ListAllMyBuckets - - s3:ListBucket - - s3:PutBucketPolicy - - s3:PutBucketTagging - - sns:GetTopicAttributes - - sns:ListTagsForResource - - sns:ListTopics - - sns:SetTopicAttributes - - sns:TagResource - - sns:UnTagResource - - sqs:GetQueueAttributes - - sqs:GetQueueUrl - - sqs:ListQueues - - sqs:ListQueueTags - - sqs:SetQueueAttributes - - sqs:TagQueue - - sqs:UntagQueue - - organizations:ListAccounts - Effect: Allow - Resource: - - '*' - Sid: iam - Version: '2012-10-17' - proposed_changes: - - change_type: Delete - resource_id: ConsoleMe - resource_type: aws:iam:role - exceptions_seen: [] - exceptions_seen: [] - - resource_id: ConsoleMeCentralRole - resource_type: aws:iam:role - template_path: ./resources/aws/roles/multi_account/consolemecentralrole.yaml - proposed_changes: - - account: test - (242350334841) - resource_id: ConsoleMeCentralRole - current_value: - Path: / - RoleName: ConsoleMeCentralRole - RoleId: AROATQ3JUUN45LCF2LCMC - Arn: arn:aws:iam::242350334841:role/ConsoleMeCentralRole - CreateDate: '2021-10-18T17:48:02+00:00' - AssumeRolePolicyDocument: - Version: '2012-10-17' - Statement: - - Sid: ConsoleMeAssumesTarget - Effect: Allow - Principal: - AWS: AROATZAKZJLAFEBPSIDEJ - Action: sts:AssumeRole - Description: '' - MaxSessionDuration: 3600 - RoleLastUsed: {} - ManagedPolicies: [] - InlinePolicies: - - PolicyName: terraform-20211018174804250000000002 - Statement: - - Action: - - access-analyzer:* - - cloudtrail:* - - cloudwatch:* - - config:SelectResourceConfig - - config:SelectAggregateResourceConfig - - dynamodb:batchgetitem - - dynamodb:batchwriteitem - - dynamodb:deleteitem - - dynamodb:describe* - - dynamodb:getitem - - dynamodb:getrecords - - dynamodb:getsharditerator - - dynamodb:putitem - - dynamodb:query - - dynamodb:scan - - dynamodb:updateitem - - dynamodb:CreateTable - - dynamodb:UpdateTimeToLive - - sns:createplatformapplication - - sns:createplatformendpoint - - sns:deleteendpoint - - sns:deleteplatformapplication - - sns:getendpointattributes - - sns:getplatformapplicationattributes - - sns:listendpointsbyplatformapplication - - sns:publish - - sns:setendpointattributes - - sns:setplatformapplicationattributes - - sts:assumerole - Effect: Allow - Resource: - - '*' - - Action: - - ses:sendemail - - ses:sendrawemail - Condition: - StringLike: - ses:FromAddress: - - email_address_here@example.com - Effect: Allow - Resource: arn:aws:ses:*:123456789:identity/your_identity.example.com - - Action: - - autoscaling:Describe* - - cloudwatch:Get* - - cloudwatch:List* - - config:BatchGet* - - config:List* - - config:Select* - - ec2:DescribeSubnets - - ec2:describevpcendpoints - - ec2:DescribeVpcs - - iam:GetAccountAuthorizationDetails - - iam:ListAccountAliases - - iam:ListAttachedRolePolicies - - ec2:describeregions - - s3:GetBucketPolicy - - s3:GetBucketTagging - - s3:ListAllMyBuckets - - s3:ListBucket - - s3:PutBucketPolicy - - s3:PutBucketTagging - - sns:GetTopicAttributes - - sns:ListTagsForResource - - sns:ListTopics - - sns:SetTopicAttributes - - sns:TagResource - - sns:UnTagResource - - sqs:GetQueueAttributes - - sqs:GetQueueUrl - - sqs:ListQueues - - sqs:ListQueueTags - - sqs:SetQueueAttributes - - sqs:TagQueue - - sqs:UntagQueue - Effect: Allow - Resource: '*' - Version: '2012-10-17' - - PolicyName: terraform-20211018180128632100000001 - Statement: - - Action: - - access-analyzer:* - - cloudtrail:* - - cloudwatch:* - - config:SelectResourceConfig - - config:SelectAggregateResourceConfig - - dynamodb:batchgetitem - - dynamodb:batchwriteitem - - dynamodb:deleteitem - - dynamodb:describe* - - dynamodb:getitem - - dynamodb:getrecords - - dynamodb:getsharditerator - - dynamodb:putitem - - dynamodb:query - - dynamodb:scan - - dynamodb:updateitem - - dynamodb:CreateTable - - dynamodb:UpdateTimeToLive - - sns:createplatformapplication - - sns:createplatformendpoint - - sns:deleteendpoint - - sns:deleteplatformapplication - - sns:getendpointattributes - - sns:getplatformapplicationattributes - - sns:listendpointsbyplatformapplication - - sns:publish - - sns:setendpointattributes - - sns:setplatformapplicationattributes - - sts:assumerole - Effect: Allow - Resource: - - '*' - - Action: - - ses:sendemail - - ses:sendrawemail - Condition: - StringLike: - ses:FromAddress: - - email_address_here@example.com - Effect: Allow - Resource: arn:aws:ses:*:123456789:identity/your_identity.example.com - - Action: - - autoscaling:Describe* - - cloudwatch:Get* - - cloudwatch:List* - - config:BatchGet* - - config:List* - - config:Select* - - ec2:DescribeSubnets - - ec2:describevpcendpoints - - ec2:DescribeVpcs - - iam:GetAccountAuthorizationDetails - - iam:ListAccountAliases - - iam:ListAttachedRolePolicies - - ec2:describeregions - - s3:GetBucketPolicy - - s3:GetBucketTagging - - s3:ListAllMyBuckets - - s3:ListBucket - - s3:PutBucketPolicy - - s3:PutBucketTagging - - sns:GetTopicAttributes - - sns:ListTagsForResource - - sns:ListTopics - - sns:SetTopicAttributes - - sns:TagResource - - sns:UnTagResource - - sqs:GetQueueAttributes - - sqs:GetQueueUrl - - sqs:ListQueues - - sqs:ListQueueTags - - sqs:SetQueueAttributes - - sqs:TagQueue - - sqs:UntagQueue - Effect: Allow - Resource: '*' - Version: '2012-10-17' - proposed_changes: - - change_type: Delete - resource_id: ConsoleMeCentralRole - resource_type: aws:iam:role - exceptions_seen: [] - - account: demo-2 - (694815895589) - resource_id: ConsoleMeCentralRole - current_value: - Path: / - RoleName: ConsoleMeCentralRole - RoleId: AROA2DRSBGAS4VZRXLHLD - Arn: arn:aws:iam::694815895589:role/ConsoleMeCentralRole - CreateDate: '2021-10-18T17:46:33+00:00' - AssumeRolePolicyDocument: - Version: '2012-10-17' - Statement: - - Sid: ConsoleMeAssumesTarget - Effect: Allow - Principal: - AWS: AROATZAKZJLAFEBPSIDEJ - Action: sts:AssumeRole - Description: '' - MaxSessionDuration: 3600 - RoleLastUsed: {} - ManagedPolicies: [] - InlinePolicies: - - PolicyName: terraform-20211018174634639300000002 - Statement: - - Action: - - access-analyzer:* - - cloudtrail:* - - cloudwatch:* - - config:SelectResourceConfig - - config:SelectAggregateResourceConfig - - dynamodb:batchgetitem - - dynamodb:batchwriteitem - - dynamodb:deleteitem - - dynamodb:describe* - - dynamodb:getitem - - dynamodb:getrecords - - dynamodb:getsharditerator - - dynamodb:putitem - - dynamodb:query - - dynamodb:scan - - dynamodb:updateitem - - dynamodb:CreateTable - - dynamodb:UpdateTimeToLive - - sns:createplatformapplication - - sns:createplatformendpoint - - sns:deleteendpoint - - sns:deleteplatformapplication - - sns:getendpointattributes - - sns:getplatformapplicationattributes - - sns:listendpointsbyplatformapplication - - sns:publish - - sns:setendpointattributes - - sns:setplatformapplicationattributes - - sts:assumerole - Effect: Allow - Resource: - - '*' - - Action: - - ses:sendemail - - ses:sendrawemail - Condition: - StringLike: - ses:FromAddress: - - email_address_here@example.com - Effect: Allow - Resource: arn:aws:ses:*:123456789:identity/your_identity.example.com - - Action: - - autoscaling:Describe* - - cloudwatch:Get* - - cloudwatch:List* - - config:BatchGet* - - config:List* - - config:Select* - - ec2:DescribeSubnets - - ec2:describevpcendpoints - - ec2:DescribeVpcs - - iam:GetAccountAuthorizationDetails - - iam:ListAccountAliases - - iam:ListAttachedRolePolicies - - ec2:describeregions - - s3:GetBucketPolicy - - s3:GetBucketTagging - - s3:ListAllMyBuckets - - s3:ListBucket - - s3:PutBucketPolicy - - s3:PutBucketTagging - - sns:GetTopicAttributes - - sns:ListTagsForResource - - sns:ListTopics - - sns:SetTopicAttributes - - sns:TagResource - - sns:UnTagResource - - sqs:GetQueueAttributes - - sqs:GetQueueUrl - - sqs:ListQueues - - sqs:ListQueueTags - - sqs:SetQueueAttributes - - sqs:TagQueue - - sqs:UntagQueue - Effect: Allow - Resource: '*' - Version: '2012-10-17' - - PolicyName: terraform-20211018175424807000000001 - Statement: - - Action: - - access-analyzer:* - - cloudtrail:* - - cloudwatch:* - - config:SelectResourceConfig - - config:SelectAggregateResourceConfig - - dynamodb:batchgetitem - - dynamodb:batchwriteitem - - dynamodb:deleteitem - - dynamodb:describe* - - dynamodb:getitem - - dynamodb:getrecords - - dynamodb:getsharditerator - - dynamodb:putitem - - dynamodb:query - - dynamodb:scan - - dynamodb:updateitem - - dynamodb:CreateTable - - dynamodb:UpdateTimeToLive - - sns:createplatformapplication - - sns:createplatformendpoint - - sns:deleteendpoint - - sns:deleteplatformapplication - - sns:getendpointattributes - - sns:getplatformapplicationattributes - - sns:listendpointsbyplatformapplication - - sns:publish - - sns:setendpointattributes - - sns:setplatformapplicationattributes - - sts:assumerole - Effect: Allow - Resource: - - '*' - - Action: - - ses:sendemail - - ses:sendrawemail - Condition: - StringLike: - ses:FromAddress: - - email_address_here@example.com - Effect: Allow - Resource: arn:aws:ses:*:123456789:identity/your_identity.example.com - - Action: - - autoscaling:Describe* - - cloudwatch:Get* - - cloudwatch:List* - - config:BatchGet* - - config:List* - - config:Select* - - ec2:DescribeSubnets - - ec2:describevpcendpoints - - ec2:DescribeVpcs - - iam:GetAccountAuthorizationDetails - - iam:ListAccountAliases - - iam:ListAttachedRolePolicies - - ec2:describeregions - - s3:GetBucketPolicy - - s3:GetBucketTagging - - s3:ListAllMyBuckets - - s3:ListBucket - - s3:PutBucketPolicy - - s3:PutBucketTagging - - sns:GetTopicAttributes - - sns:ListTagsForResource - - sns:ListTopics - - sns:SetTopicAttributes - - sns:TagResource - - sns:UnTagResource - - sqs:GetQueueAttributes - - sqs:GetQueueUrl - - sqs:ListQueues - - sqs:ListQueueTags - - sqs:SetQueueAttributes - - sqs:TagQueue - - sqs:UntagQueue - Effect: Allow - Resource: '*' - Version: '2012-10-17' - proposed_changes: - - change_type: Delete - resource_id: ConsoleMeCentralRole - resource_type: aws:iam:role - exceptions_seen: [] - - account: demo-1 - (972417093400) - resource_id: ConsoleMeCentralRole - current_value: - Path: / - RoleName: ConsoleMeCentralRole - RoleId: AROA6E2ETJ4MMPHPSRDK4 - Arn: arn:aws:iam::972417093400:role/ConsoleMeCentralRole - CreateDate: '2021-10-18T18:56:39+00:00' - AssumeRolePolicyDocument: - Version: '2012-10-17' - Statement: - - Sid: ConsoleMeAssumesTarget - Effect: Allow - Principal: - AWS: - - AROATZAKZJLAFEBPSIDEJ - - AIDATZAKZJLANVTDUDSFH - Action: sts:AssumeRole - Description: '' - MaxSessionDuration: 3600 - RoleLastUsed: {} - ManagedPolicies: [] - InlinePolicies: - - PolicyName: iAMPolicy-947b4ca - Statement: - - Action: - - access-analyzer:* - - cloudtrail:* - - cloudwatch:* - - config:SelectResourceConfig - - config:SelectAggregateResourceConfig - - dynamodb:batchgetitem - - dynamodb:batchwriteitem - - dynamodb:deleteitem - - dynamodb:describe* - - dynamodb:getitem - - dynamodb:getrecords - - dynamodb:getsharditerator - - dynamodb:putitem - - dynamodb:query - - dynamodb:scan - - dynamodb:updateitem - - dynamodb:CreateTable - - dynamodb:UpdateTimeToLive - - sns:createplatformapplication - - sns:createplatformendpoint - - sns:deleteendpoint - - sns:deleteplatformapplication - - sns:getendpointattributes - - sns:getplatformapplicationattributes - - sns:listendpointsbyplatformapplication - - sns:publish - - sns:setendpointattributes - - sns:setplatformapplicationattributes - - sts:assumerole - Effect: Allow - Resource: - - '*' - - Action: - - ses:sendemail - - ses:sendrawemail - Condition: - StringLike: - ses:FromAddress: - - email_address_here@example.com - Effect: Allow - Resource: arn:aws:ses:*:123456789:identity/your_identity.example.com - - Action: - - autoscaling:Describe* - - cloudwatch:Get* - - cloudwatch:List* - - config:BatchGet* - - config:List* - - config:Select* - - ec2:DescribeSubnets - - ec2:describevpcendpoints - - ec2:DescribeVpcs - - iam:GetAccountAuthorizationDetails - - iam:ListAccountAliases - - iam:ListAttachedRolePolicies - - ec2:describeregions - - s3:GetBucketPolicy - - s3:GetBucketTagging - - s3:ListAllMyBuckets - - s3:ListBucket - - s3:PutBucketPolicy - - s3:PutBucketTagging - - sns:GetTopicAttributes - - sns:ListTagsForResource - - sns:ListTopics - - sns:SetTopicAttributes - - sns:TagResource - - sns:UnTagResource - - sqs:GetQueueAttributes - - sqs:GetQueueUrl - - sqs:ListQueues - - sqs:ListQueueTags - - sqs:SetQueueAttributes - - sqs:TagQueue - - sqs:UntagQueue - Effect: Allow - Resource: '*' - Version: '2012-10-17' - proposed_changes: - - change_type: Delete - resource_id: ConsoleMeCentralRole - resource_type: aws:iam:role - exceptions_seen: [] - - account: demo-3 - (518317429440) - resource_id: ConsoleMeCentralRole - current_value: - Path: / - RoleName: ConsoleMeCentralRole - RoleId: AROAXRLRAKLAGRKYZZEHN - Arn: arn:aws:iam::518317429440:role/ConsoleMeCentralRole - CreateDate: '2021-10-18T17:47:06+00:00' - AssumeRolePolicyDocument: - Version: '2012-10-17' - Statement: - - Sid: ConsoleMeAssumesTarget - Effect: Allow - Principal: - AWS: AROATZAKZJLAFEBPSIDEJ - Action: sts:AssumeRole - Description: '' - MaxSessionDuration: 3600 - RoleLastUsed: {} - ManagedPolicies: [] - InlinePolicies: - - PolicyName: terraform-20211018174708353000000002 - Statement: - - Action: - - access-analyzer:* - - cloudtrail:* - - cloudwatch:* - - config:SelectResourceConfig - - config:SelectAggregateResourceConfig - - dynamodb:batchgetitem - - dynamodb:batchwriteitem - - dynamodb:deleteitem - - dynamodb:describe* - - dynamodb:getitem - - dynamodb:getrecords - - dynamodb:getsharditerator - - dynamodb:putitem - - dynamodb:query - - dynamodb:scan - - dynamodb:updateitem - - dynamodb:CreateTable - - dynamodb:UpdateTimeToLive - - sns:createplatformapplication - - sns:createplatformendpoint - - sns:deleteendpoint - - sns:deleteplatformapplication - - sns:getendpointattributes - - sns:getplatformapplicationattributes - - sns:listendpointsbyplatformapplication - - sns:publish - - sns:setendpointattributes - - sns:setplatformapplicationattributes - - sts:assumerole - Effect: Allow - Resource: - - '*' - - Action: - - ses:sendemail - - ses:sendrawemail - Condition: - StringLike: - ses:FromAddress: - - email_address_here@example.com - Effect: Allow - Resource: arn:aws:ses:*:123456789:identity/your_identity.example.com - - Action: - - autoscaling:Describe* - - cloudwatch:Get* - - cloudwatch:List* - - config:BatchGet* - - config:List* - - config:Select* - - ec2:DescribeSubnets - - ec2:describevpcendpoints - - ec2:DescribeVpcs - - iam:GetAccountAuthorizationDetails - - iam:ListAccountAliases - - iam:ListAttachedRolePolicies - - ec2:describeregions - - s3:GetBucketPolicy - - s3:GetBucketTagging - - s3:ListAllMyBuckets - - s3:ListBucket - - s3:PutBucketPolicy - - s3:PutBucketTagging - - sns:GetTopicAttributes - - sns:ListTagsForResource - - sns:ListTopics - - sns:SetTopicAttributes - - sns:TagResource - - sns:UnTagResource - - sqs:GetQueueAttributes - - sqs:GetQueueUrl - - sqs:ListQueues - - sqs:ListQueueTags - - sqs:SetQueueAttributes - - sqs:TagQueue - - sqs:UntagQueue - Effect: Allow - Resource: '*' - Version: '2012-10-17' - - PolicyName: terraform-20211018175444253500000001 - Statement: - - Action: - - access-analyzer:* - - cloudtrail:* - - cloudwatch:* - - config:SelectResourceConfig - - config:SelectAggregateResourceConfig - - dynamodb:batchgetitem - - dynamodb:batchwriteitem - - dynamodb:deleteitem - - dynamodb:describe* - - dynamodb:getitem - - dynamodb:getrecords - - dynamodb:getsharditerator - - dynamodb:putitem - - dynamodb:query - - dynamodb:scan - - dynamodb:updateitem - - dynamodb:CreateTable - - dynamodb:UpdateTimeToLive - - sns:createplatformapplication - - sns:createplatformendpoint - - sns:deleteendpoint - - sns:deleteplatformapplication - - sns:getendpointattributes - - sns:getplatformapplicationattributes - - sns:listendpointsbyplatformapplication - - sns:publish - - sns:setendpointattributes - - sns:setplatformapplicationattributes - - sts:assumerole - Effect: Allow - Resource: - - '*' - - Action: - - ses:sendemail - - ses:sendrawemail - Condition: - StringLike: - ses:FromAddress: - - email_address_here@example.com - Effect: Allow - Resource: arn:aws:ses:*:123456789:identity/your_identity.example.com - - Action: - - autoscaling:Describe* - - cloudwatch:Get* - - cloudwatch:List* - - config:BatchGet* - - config:List* - - config:Select* - - ec2:DescribeSubnets - - ec2:describevpcendpoints - - ec2:DescribeVpcs - - iam:GetAccountAuthorizationDetails - - iam:ListAccountAliases - - iam:ListAttachedRolePolicies - - ec2:describeregions - - s3:GetBucketPolicy - - s3:GetBucketTagging - - s3:ListAllMyBuckets - - s3:ListBucket - - s3:PutBucketPolicy - - s3:PutBucketTagging - - sns:GetTopicAttributes - - sns:ListTagsForResource - - sns:ListTopics - - sns:SetTopicAttributes - - sns:TagResource - - sns:UnTagResource - - sqs:GetQueueAttributes - - sqs:GetQueueUrl - - sqs:ListQueues - - sqs:ListQueueTags - - sqs:SetQueueAttributes - - sqs:TagQueue - - sqs:UntagQueue - Effect: Allow - Resource: '*' - Version: '2012-10-17' - proposed_changes: - - change_type: Delete - resource_id: ConsoleMeCentralRole - resource_type: aws:iam:role - exceptions_seen: [] - exceptions_seen: [] - - resource_id: ConsoleMeSpokeRole - resource_type: aws:iam:role - template_path: ./resources/aws/roles/multi_account/consolemespokerole.yaml - proposed_changes: - - account: test - (242350334841) - resource_id: ConsoleMeSpokeRole - current_value: - Path: / - RoleName: ConsoleMeSpokeRole - RoleId: AROATQ3JUUN4R52PEIRRD - Arn: arn:aws:iam::242350334841:role/ConsoleMeSpokeRole - CreateDate: '2021-10-18T17:48:02+00:00' - AssumeRolePolicyDocument: - Version: '2012-10-17' - Statement: - - Sid: ConsoleMeAssumesTarget - Effect: Allow - Principal: - AWS: - - arn:aws:iam::242350334841:role/ConsoleMeCentralRole - - AROATZAKZJLAO6SLARMN5 - Action: sts:AssumeRole - Description: '' - MaxSessionDuration: 3600 - RoleLastUsed: {} - ManagedPolicies: [] - InlinePolicies: - - PolicyName: terraform-20211018174804249700000001 - Statement: - - Action: - - autoscaling:Describe* - - cloudwatch:Get* - - cloudwatch:List* - - config:BatchGet* - - config:List* - - config:Select* - - ec2:describeregions - - ec2:DescribeSubnets - - ec2:describevpcendpoints - - ec2:DescribeVpcs - - iam:* - - s3:GetBucketPolicy - - s3:GetBucketTagging - - s3:ListAllMyBuckets - - s3:ListBucket - - s3:PutBucketPolicy - - s3:PutBucketTagging - - sns:GetTopicAttributes - - sns:ListTagsForResource - - sns:ListTopics - - sns:SetTopicAttributes - - sns:TagResource - - sns:UnTagResource - - sqs:GetQueueAttributes - - sqs:GetQueueUrl - - sqs:ListQueues - - sqs:ListQueueTags - - sqs:SetQueueAttributes - - sqs:TagQueue - - sqs:UntagQueue - - organizations:ListAccounts - Effect: Allow - Resource: - - '*' - Sid: iam - Version: '2012-10-17' - - PolicyName: terraform-20211018180130834800000002 - Statement: - - Action: - - autoscaling:Describe* - - cloudwatch:Get* - - cloudwatch:List* - - config:BatchGet* - - config:List* - - config:Select* - - ec2:describeregions - - ec2:DescribeSubnets - - ec2:describevpcendpoints - - ec2:DescribeVpcs - - iam:* - - s3:GetBucketPolicy - - s3:GetBucketTagging - - s3:ListAllMyBuckets - - s3:ListBucket - - s3:PutBucketPolicy - - s3:PutBucketTagging - - sns:GetTopicAttributes - - sns:ListTagsForResource - - sns:ListTopics - - sns:SetTopicAttributes - - sns:TagResource - - sns:UnTagResource - - sqs:GetQueueAttributes - - sqs:GetQueueUrl - - sqs:ListQueues - - sqs:ListQueueTags - - sqs:SetQueueAttributes - - sqs:TagQueue - - sqs:UntagQueue - - organizations:ListAccounts - Effect: Allow - Resource: - - '*' - Sid: iam - Version: '2012-10-17' - proposed_changes: - - change_type: Delete - resource_id: ConsoleMeSpokeRole - resource_type: aws:iam:role - exceptions_seen: [] - - account: demo-2 - (694815895589) - resource_id: ConsoleMeSpokeRole - current_value: - Path: / - RoleName: ConsoleMeSpokeRole - RoleId: AROA2DRSBGAS3HZSCFK36 - Arn: arn:aws:iam::694815895589:role/ConsoleMeSpokeRole - CreateDate: '2021-10-18T17:46:33+00:00' - AssumeRolePolicyDocument: - Version: '2012-10-17' - Statement: - - Sid: ConsoleMeAssumesTarget - Effect: Allow - Principal: - AWS: - - arn:aws:iam::694815895589:role/ConsoleMeCentralRole - - AROATZAKZJLAO6SLARMN5 - - arn:aws:iam::972417093400:role/ConsoleMeCentralRole - Action: sts:AssumeRole - Description: '' - MaxSessionDuration: 3600 - RoleLastUsed: {} - ManagedPolicies: [] - InlinePolicies: - - PolicyName: terraform-20211018174634611600000001 - Statement: - - Action: - - autoscaling:Describe* - - cloudwatch:Get* - - cloudwatch:List* - - config:BatchGet* - - config:List* - - config:Select* - - ec2:describeregions - - ec2:DescribeSubnets - - ec2:describevpcendpoints - - ec2:DescribeVpcs - - iam:* - - s3:GetBucketPolicy - - s3:GetBucketTagging - - s3:ListAllMyBuckets - - s3:ListBucket - - s3:PutBucketPolicy - - s3:PutBucketTagging - - sns:GetTopicAttributes - - sns:ListTagsForResource - - sns:ListTopics - - sns:SetTopicAttributes - - sns:TagResource - - sns:UnTagResource - - sqs:GetQueueAttributes - - sqs:GetQueueUrl - - sqs:ListQueues - - sqs:ListQueueTags - - sqs:SetQueueAttributes - - sqs:TagQueue - - sqs:UntagQueue - - organizations:ListAccounts - Effect: Allow - Resource: - - '*' - Sid: iam - Version: '2012-10-17' - - PolicyName: terraform-20211018175426872300000002 - Statement: - - Action: - - autoscaling:Describe* - - cloudwatch:Get* - - cloudwatch:List* - - config:BatchGet* - - config:List* - - config:Select* - - ec2:describeregions - - ec2:DescribeSubnets - - ec2:describevpcendpoints - - ec2:DescribeVpcs - - iam:* - - s3:GetBucketPolicy - - s3:GetBucketTagging - - s3:ListAllMyBuckets - - s3:ListBucket - - s3:PutBucketPolicy - - s3:PutBucketTagging - - sns:GetTopicAttributes - - sns:ListTagsForResource - - sns:ListTopics - - sns:SetTopicAttributes - - sns:TagResource - - sns:UnTagResource - - sqs:GetQueueAttributes - - sqs:GetQueueUrl - - sqs:ListQueues - - sqs:ListQueueTags - - sqs:SetQueueAttributes - - sqs:TagQueue - - sqs:UntagQueue - - organizations:ListAccounts - Effect: Allow - Resource: - - '*' - Sid: iam - Version: '2012-10-17' - proposed_changes: - - change_type: Delete - resource_id: ConsoleMeSpokeRole - resource_type: aws:iam:role - exceptions_seen: [] - - account: demo-1 - (972417093400) - resource_id: ConsoleMeSpokeRole - current_value: - Path: / - RoleName: ConsoleMeSpokeRole - RoleId: AROA6E2ETJ4MAAJ2KANED - Arn: arn:aws:iam::972417093400:role/ConsoleMeSpokeRole - CreateDate: '2021-10-18T18:56:50+00:00' - AssumeRolePolicyDocument: - Version: '2012-10-17' - Statement: - - Sid: ConsoleMeAssumesTarget - Effect: Allow - Principal: - AWS: - - arn:aws:iam::972417093400:role/ConsoleMeCentralRole - - AROATZAKZJLAO6SLARMN5 - Action: sts:AssumeRole - Description: '' - MaxSessionDuration: 3600 - RoleLastUsed: {} - ManagedPolicies: [] - InlinePolicies: - - PolicyName: iAMPolicy2-040960f - Statement: - - Action: - - autoscaling:Describe* - - cloudwatch:Get* - - cloudwatch:List* - - config:BatchGet* - - config:List* - - config:Select* - - ec2:describeregions - - ec2:DescribeSubnets - - ec2:describevpcendpoints - - ec2:DescribeVpcs - - iam:* - - s3:GetBucketPolicy - - s3:GetBucketTagging - - s3:ListAllMyBuckets - - s3:ListBucket - - s3:PutBucketPolicy - - s3:PutBucketTagging - - sns:GetTopicAttributes - - sns:ListTagsForResource - - sns:ListTopics - - sns:SetTopicAttributes - - sns:TagResource - - sns:UnTagResource - - sqs:GetQueueAttributes - - sqs:GetQueueUrl - - sqs:ListQueues - - sqs:ListQueueTags - - sqs:SetQueueAttributes - - sqs:TagQueue - - sqs:UntagQueue - - organizations:ListAccounts - Effect: Allow - Resource: - - '*' - Sid: iam - Version: '2012-10-17' - proposed_changes: - - change_type: Delete - resource_id: ConsoleMeSpokeRole - resource_type: aws:iam:role - exceptions_seen: [] - - account: demo-3 - (518317429440) - resource_id: ConsoleMeSpokeRole - current_value: - Path: / - RoleName: ConsoleMeSpokeRole - RoleId: AROAXRLRAKLAHL22IWBOW - Arn: arn:aws:iam::518317429440:role/ConsoleMeSpokeRole - CreateDate: '2021-10-18T17:47:07+00:00' - AssumeRolePolicyDocument: - Version: '2012-10-17' - Statement: - - Sid: ConsoleMeAssumesTarget - Effect: Allow - Principal: - AWS: arn:aws:iam::518317429440:role/ConsoleMeCentralRole - Action: sts:AssumeRole - - Effect: Allow - Principal: - AWS: AROA6E2ETJ4MHYRF62AS5 - Action: - - sts:AssumeRole - - sts:TagSession - - Effect: Allow - Principal: - AWS: AROA6E2ETJ4MHYRF62AS5 - Action: - - sts:AssumeRole - - sts:TagSession - - Effect: Allow - Principal: - AWS: AROA6E2ETJ4MHYRF62AS5 - Action: - - sts:AssumeRole - - sts:TagSession - - Effect: Allow - Principal: - AWS: AROA6E2ETJ4MHYRF62AS5 - Action: - - sts:AssumeRole - - sts:TagSession - Description: '' - MaxSessionDuration: 3600 - Tags: - - Key: noq-authorized-demo - Value: rohit@noq.dev - RoleLastUsed: - LastUsedDate: '2022-11-07T19:47:51+00:00' - Region: us-east-1 - ManagedPolicies: [] - InlinePolicies: - - PolicyName: terraform-20211018174708352800000001 - Statement: - - Action: - - autoscaling:Describe* - - cloudwatch:Get* - - cloudwatch:List* - - config:BatchGet* - - config:List* - - config:Select* - - ec2:describeregions - - ec2:DescribeSubnets - - ec2:describevpcendpoints - - ec2:DescribeVpcs - - iam:* - - s3:GetBucketPolicy - - s3:GetBucketTagging - - s3:ListAllMyBuckets - - s3:ListBucket - - s3:PutBucketPolicy - - s3:PutBucketTagging - - sns:GetTopicAttributes - - sns:ListTagsForResource - - sns:ListTopics - - sns:SetTopicAttributes - - sns:TagResource - - sns:UnTagResource - - sqs:GetQueueAttributes - - sqs:GetQueueUrl - - sqs:ListQueues - - sqs:ListQueueTags - - sqs:SetQueueAttributes - - sqs:TagQueue - - sqs:UntagQueue - - organizations:ListAccounts - Effect: Allow - Resource: - - '*' - Sid: iam - Version: '2012-10-17' - - PolicyName: terraform-20211018175446299400000002 - Statement: - - Action: - - autoscaling:Describe* - - cloudwatch:Get* - - cloudwatch:List* - - config:BatchGet* - - config:List* - - config:Select* - - ec2:describeregions - - ec2:DescribeSubnets - - ec2:describevpcendpoints - - ec2:DescribeVpcs - - iam:* - - s3:GetBucketPolicy - - s3:GetBucketTagging - - s3:ListAllMyBuckets - - s3:ListBucket - - s3:PutBucketPolicy - - s3:PutBucketTagging - - sns:GetTopicAttributes - - sns:ListTagsForResource - - sns:ListTopics - - sns:SetTopicAttributes - - sns:TagResource - - sns:UnTagResource - - sqs:GetQueueAttributes - - sqs:GetQueueUrl - - sqs:ListQueues - - sqs:ListQueueTags - - sqs:SetQueueAttributes - - sqs:TagQueue - - sqs:UntagQueue - - organizations:ListAccounts - Effect: Allow - Resource: - - '*' - Sid: iam - Version: '2012-10-17' - proposed_changes: - - change_type: Delete - resource_id: ConsoleMeSpokeRole - resource_type: aws:iam:role - exceptions_seen: [] - exceptions_seen: [] - - resource_id: iambic_test_4327 - resource_type: aws:iam:role - template_path: ./resources/aws/roles/multi_account/iambic_test_4327.yaml - proposed_changes: - - account: Noq Audit - (420317713496) - resource_id: iambic_test_4327 - current_value: - Path: /iambic_test/ - RoleName: iambic_test_4327 - RoleId: AROAWDXHDKRMCMGYTXK3Z - Arn: arn:aws:iam::420317713496:role/iambic_test/iambic_test_4327 - CreateDate: '2023-01-09T15:21:36+00:00' - AssumeRolePolicyDocument: - Version: '2012-10-17' - Statement: - - Effect: Deny - Principal: - Service: ec2.amazonaws.com - Action: sts:AssumeRole - Description: Updated description - MaxSessionDuration: 3600 - RoleLastUsed: {} - ManagedPolicies: [] - InlinePolicies: [] - proposed_changes: - - change_type: Delete - resource_id: iambic_test_4327 - resource_type: aws:iam:role - exceptions_seen: [] - - account: global_tenant_data_prod - (306086318698) - resource_id: iambic_test_4327 - current_value: - Path: /iambic_test/ - RoleName: iambic_test_4327 - RoleId: AROAUORBKSJVLXNP6QSPO - Arn: arn:aws:iam::306086318698:role/iambic_test/iambic_test_4327 - CreateDate: '2023-01-09T15:21:36+00:00' - AssumeRolePolicyDocument: - Version: '2012-10-17' - Statement: - - Effect: Deny - Principal: - Service: ec2.amazonaws.com - Action: sts:AssumeRole - Description: Updated description - MaxSessionDuration: 3600 - RoleLastUsed: {} - ManagedPolicies: [] - InlinePolicies: [] - proposed_changes: - - change_type: Delete - resource_id: iambic_test_4327 - resource_type: aws:iam:role - exceptions_seen: [] - - account: zelkova - (894599878328) - resource_id: iambic_test_4327 - current_value: - Path: /iambic_test/ - RoleName: iambic_test_4327 - RoleId: AROA5ASSO224DRHWEMTEC - Arn: arn:aws:iam::894599878328:role/iambic_test/iambic_test_4327 - CreateDate: '2023-01-09T15:21:36+00:00' - AssumeRolePolicyDocument: - Version: '2012-10-17' - Statement: - - Effect: Deny - Principal: - Service: ec2.amazonaws.com - Action: sts:AssumeRole - Description: Updated description - MaxSessionDuration: 3600 - RoleLastUsed: {} - ManagedPolicies: [] - InlinePolicies: [] - proposed_changes: - - change_type: Delete - resource_id: iambic_test_4327 - resource_type: aws:iam:role - exceptions_seen: [] - - account: nonstandard_org_role - (869532243584) - resource_id: iambic_test_4327 - current_value: - Path: /iambic_test/ - RoleName: iambic_test_4327 - RoleId: AROA4U5BJC2ANLXIAZ3FM - Arn: arn:aws:iam::869532243584:role/iambic_test/iambic_test_4327 - CreateDate: '2023-01-09T15:21:36+00:00' - AssumeRolePolicyDocument: - Version: '2012-10-17' - Statement: - - Effect: Deny - Principal: - Service: ec2.amazonaws.com - Action: sts:AssumeRole - Description: Updated description - MaxSessionDuration: 3600 - RoleLastUsed: {} - ManagedPolicies: [] - InlinePolicies: [] - proposed_changes: - - change_type: Delete - resource_id: iambic_test_4327 - resource_type: aws:iam:role - exceptions_seen: [] - - account: test - (242350334841) - resource_id: iambic_test_4327 - current_value: - Path: /iambic_test/ - RoleName: iambic_test_4327 - RoleId: AROATQ3JUUN4UGPEVNARF - Arn: arn:aws:iam::242350334841:role/iambic_test/iambic_test_4327 - CreateDate: '2023-01-09T15:21:36+00:00' - AssumeRolePolicyDocument: - Version: '2012-10-17' - Statement: - - Effect: Deny - Principal: - Service: ec2.amazonaws.com - Action: sts:AssumeRole - Description: Updated description - MaxSessionDuration: 3600 - RoleLastUsed: {} - ManagedPolicies: [] - InlinePolicies: [] - proposed_changes: - - change_type: Delete - resource_id: iambic_test_4327 - resource_type: aws:iam:role - exceptions_seen: [] - - account: production - (940552945933) - resource_id: iambic_test_4327 - current_value: - Path: /iambic_test/ - RoleName: iambic_test_4327 - RoleId: AROA5V7KTAEG2VGPCN33G - Arn: arn:aws:iam::940552945933:role/iambic_test/iambic_test_4327 - CreateDate: '2023-01-09T15:21:36+00:00' - AssumeRolePolicyDocument: - Version: '2012-10-17' - Statement: - - Effect: Deny - Principal: - Service: ec2.amazonaws.com - Action: sts:AssumeRole - Description: Updated description - MaxSessionDuration: 3600 - RoleLastUsed: {} - ManagedPolicies: [] - InlinePolicies: [] - proposed_changes: - - change_type: Delete - resource_id: iambic_test_4327 - resource_type: aws:iam:role - exceptions_seen: [] - - account: demo-2 - (694815895589) - resource_id: iambic_test_4327 - current_value: - Path: /iambic_test/ - RoleName: iambic_test_4327 - RoleId: AROA2DRSBGAS4ESX6VECU - Arn: arn:aws:iam::694815895589:role/iambic_test/iambic_test_4327 - CreateDate: '2023-01-09T15:21:36+00:00' - AssumeRolePolicyDocument: - Version: '2012-10-17' - Statement: - - Effect: Deny - Principal: - Service: ec2.amazonaws.com - Action: sts:AssumeRole - Description: Updated description - MaxSessionDuration: 3600 - RoleLastUsed: {} - ManagedPolicies: [] - InlinePolicies: [] - proposed_changes: - - change_type: Delete - resource_id: iambic_test_4327 - resource_type: aws:iam:role - exceptions_seen: [] - - account: '@!#!@#)(%*#R)QWITFGO)FG+=0984 - (969947703986)' - resource_id: iambic_test_4327 - current_value: - Path: /iambic_test/ - RoleName: iambic_test_4327 - RoleId: AROA6DVLDNKZEUKWIDLOU - Arn: arn:aws:iam::969947703986:role/iambic_test/iambic_test_4327 - CreateDate: '2023-01-09T15:21:36+00:00' - AssumeRolePolicyDocument: - Version: '2012-10-17' - Statement: - - Effect: Deny - Principal: - Service: ec2.amazonaws.com - Action: sts:AssumeRole - Description: Updated description - MaxSessionDuration: 3600 - RoleLastUsed: {} - ManagedPolicies: [] - InlinePolicies: [] - proposed_changes: - - change_type: Delete - resource_id: iambic_test_4327 - resource_type: aws:iam:role - exceptions_seen: [] - - account: demo-1 - (972417093400) - resource_id: iambic_test_4327 - current_value: - Path: /iambic_test/ - RoleName: iambic_test_4327 - RoleId: AROA6E2ETJ4MLG6VXQJZY - Arn: arn:aws:iam::972417093400:role/iambic_test/iambic_test_4327 - CreateDate: '2023-01-09T15:21:36+00:00' - AssumeRolePolicyDocument: - Version: '2012-10-17' - Statement: - - Effect: Deny - Principal: - Service: ec2.amazonaws.com - Action: sts:AssumeRole - Description: Updated description - MaxSessionDuration: 3600 - RoleLastUsed: {} - ManagedPolicies: [] - InlinePolicies: [] - proposed_changes: - - change_type: Delete - resource_id: iambic_test_4327 - resource_type: aws:iam:role - exceptions_seen: [] - - account: Noq Log Archive - (430422300865) - resource_id: iambic_test_4327 - current_value: - Path: /iambic_test/ - RoleName: iambic_test_4327 - RoleId: AROAWINZLDDA3XUEP2J4N - Arn: arn:aws:iam::430422300865:role/iambic_test/iambic_test_4327 - CreateDate: '2023-01-09T15:21:36+00:00' - AssumeRolePolicyDocument: - Version: '2012-10-17' - Statement: - - Effect: Deny - Principal: - Service: ec2.amazonaws.com - Action: sts:AssumeRole - Description: Updated description - MaxSessionDuration: 3600 - RoleLastUsed: {} - ManagedPolicies: [] - InlinePolicies: [] - proposed_changes: - - change_type: Delete - resource_id: iambic_test_4327 - resource_type: aws:iam:role - exceptions_seen: [] - exceptions_seen: [] - - resource_id: iambic_test_505 - resource_type: aws:iam:role - template_path: ./resources/aws/roles/multi_account/iambic_test_505.yaml - proposed_changes: - - account: Noq Audit - (420317713496) - resource_id: iambic_test_505 - current_value: - Path: /iambic_test/ - RoleName: iambic_test_505 - RoleId: AROAWDXHDKRMGXEJYVLJM - Arn: arn:aws:iam::420317713496:role/iambic_test/iambic_test_505 - CreateDate: '2023-01-09T15:11:13+00:00' - AssumeRolePolicyDocument: - Version: '2012-10-17' - Statement: - - Effect: Deny - Principal: - Service: ec2.amazonaws.com - Action: sts:AssumeRole - Description: This was created by a functional test. - MaxSessionDuration: 3600 - RoleLastUsed: {} - ManagedPolicies: [] - InlinePolicies: [] - proposed_changes: - - change_type: Delete - resource_id: iambic_test_505 - resource_type: aws:iam:role - exceptions_seen: [] - - account: global_tenant_data_prod - (306086318698) - resource_id: iambic_test_505 - current_value: - Path: /iambic_test/ - RoleName: iambic_test_505 - RoleId: AROAUORBKSJVHA7ETEYHY - Arn: arn:aws:iam::306086318698:role/iambic_test/iambic_test_505 - CreateDate: '2023-01-09T15:11:13+00:00' - AssumeRolePolicyDocument: - Version: '2012-10-17' - Statement: - - Effect: Deny - Principal: - Service: ec2.amazonaws.com - Action: sts:AssumeRole - Description: This was created by a functional test. - MaxSessionDuration: 3600 - RoleLastUsed: {} - ManagedPolicies: [] - InlinePolicies: [] - proposed_changes: - - change_type: Delete - resource_id: iambic_test_505 - resource_type: aws:iam:role - exceptions_seen: [] - - account: zelkova - (894599878328) - resource_id: iambic_test_505 - current_value: - Path: /iambic_test/ - RoleName: iambic_test_505 - RoleId: AROA5ASSO224N5UENNAJG - Arn: arn:aws:iam::894599878328:role/iambic_test/iambic_test_505 - CreateDate: '2023-01-09T15:11:13+00:00' - AssumeRolePolicyDocument: - Version: '2012-10-17' - Statement: - - Effect: Deny - Principal: - Service: ec2.amazonaws.com - Action: sts:AssumeRole - Description: This was created by a functional test. - MaxSessionDuration: 3600 - RoleLastUsed: {} - ManagedPolicies: [] - InlinePolicies: [] - proposed_changes: - - change_type: Delete - resource_id: iambic_test_505 - resource_type: aws:iam:role - exceptions_seen: [] - - account: nonstandard_org_role - (869532243584) - resource_id: iambic_test_505 - current_value: - Path: /iambic_test/ - RoleName: iambic_test_505 - RoleId: AROA4U5BJC2AP3LUUJKO3 - Arn: arn:aws:iam::869532243584:role/iambic_test/iambic_test_505 - CreateDate: '2023-01-09T15:11:13+00:00' - AssumeRolePolicyDocument: - Version: '2012-10-17' - Statement: - - Effect: Deny - Principal: - Service: ec2.amazonaws.com - Action: sts:AssumeRole - Description: This was created by a functional test. - MaxSessionDuration: 3600 - RoleLastUsed: {} - ManagedPolicies: [] - InlinePolicies: [] - proposed_changes: - - change_type: Delete - resource_id: iambic_test_505 - resource_type: aws:iam:role - exceptions_seen: [] - - account: test - (242350334841) - resource_id: iambic_test_505 - current_value: - Path: /iambic_test/ - RoleName: iambic_test_505 - RoleId: AROATQ3JUUN4XPL2V7UW4 - Arn: arn:aws:iam::242350334841:role/iambic_test/iambic_test_505 - CreateDate: '2023-01-09T15:11:13+00:00' - AssumeRolePolicyDocument: - Version: '2012-10-17' - Statement: - - Effect: Deny - Principal: - Service: ec2.amazonaws.com - Action: sts:AssumeRole - Description: This was created by a functional test. - MaxSessionDuration: 3600 - RoleLastUsed: {} - ManagedPolicies: [] - InlinePolicies: [] - proposed_changes: - - change_type: Delete - resource_id: iambic_test_505 - resource_type: aws:iam:role - exceptions_seen: [] - - account: production - (940552945933) - resource_id: iambic_test_505 - current_value: - Path: /iambic_test/ - RoleName: iambic_test_505 - RoleId: AROA5V7KTAEGS2DSLD4KU - Arn: arn:aws:iam::940552945933:role/iambic_test/iambic_test_505 - CreateDate: '2023-01-09T15:11:13+00:00' - AssumeRolePolicyDocument: - Version: '2012-10-17' - Statement: - - Effect: Deny - Principal: - Service: ec2.amazonaws.com - Action: sts:AssumeRole - Description: This was created by a functional test. - MaxSessionDuration: 3600 - RoleLastUsed: {} - ManagedPolicies: [] - InlinePolicies: [] - proposed_changes: - - change_type: Delete - resource_id: iambic_test_505 - resource_type: aws:iam:role - exceptions_seen: [] - - account: demo-2 - (694815895589) - resource_id: iambic_test_505 - current_value: - Path: /iambic_test/ - RoleName: iambic_test_505 - RoleId: AROA2DRSBGASQ543SUJEY - Arn: arn:aws:iam::694815895589:role/iambic_test/iambic_test_505 - CreateDate: '2023-01-09T15:11:13+00:00' - AssumeRolePolicyDocument: - Version: '2012-10-17' - Statement: - - Effect: Deny - Principal: - Service: ec2.amazonaws.com - Action: sts:AssumeRole - Description: This was created by a functional test. - MaxSessionDuration: 3600 - RoleLastUsed: {} - ManagedPolicies: [] - InlinePolicies: [] - proposed_changes: - - change_type: Delete - resource_id: iambic_test_505 - resource_type: aws:iam:role - exceptions_seen: [] - - account: '@!#!@#)(%*#R)QWITFGO)FG+=0984 - (969947703986)' - resource_id: iambic_test_505 - current_value: - Path: /iambic_test/ - RoleName: iambic_test_505 - RoleId: AROA6DVLDNKZCVM5ZTQJC - Arn: arn:aws:iam::969947703986:role/iambic_test/iambic_test_505 - CreateDate: '2023-01-09T15:11:13+00:00' - AssumeRolePolicyDocument: - Version: '2012-10-17' - Statement: - - Effect: Deny - Principal: - Service: ec2.amazonaws.com - Action: sts:AssumeRole - Description: This was created by a functional test. - MaxSessionDuration: 3600 - RoleLastUsed: {} - ManagedPolicies: [] - InlinePolicies: [] - proposed_changes: - - change_type: Delete - resource_id: iambic_test_505 - resource_type: aws:iam:role - exceptions_seen: [] - - account: demo-1 - (972417093400) - resource_id: iambic_test_505 - current_value: - Path: /iambic_test/ - RoleName: iambic_test_505 - RoleId: AROA6E2ETJ4MJ2WVUFBFE - Arn: arn:aws:iam::972417093400:role/iambic_test/iambic_test_505 - CreateDate: '2023-01-09T15:11:13+00:00' - AssumeRolePolicyDocument: - Version: '2012-10-17' - Statement: - - Effect: Deny - Principal: - Service: ec2.amazonaws.com - Action: sts:AssumeRole - Description: This was created by a functional test. - MaxSessionDuration: 3600 - RoleLastUsed: {} - ManagedPolicies: [] - InlinePolicies: [] - proposed_changes: - - change_type: Delete - resource_id: iambic_test_505 - resource_type: aws:iam:role - exceptions_seen: [] - - account: Noq Log Archive - (430422300865) - resource_id: iambic_test_505 - current_value: - Path: /iambic_test/ - RoleName: iambic_test_505 - RoleId: AROAWINZLDDAV2JO5CVJD - Arn: arn:aws:iam::430422300865:role/iambic_test/iambic_test_505 - CreateDate: '2023-01-09T15:11:13+00:00' - AssumeRolePolicyDocument: - Version: '2012-10-17' - Statement: - - Effect: Deny - Principal: - Service: ec2.amazonaws.com - Action: sts:AssumeRole - Description: This was created by a functional test. - MaxSessionDuration: 3600 - RoleLastUsed: {} - ManagedPolicies: [] - InlinePolicies: [] - proposed_changes: - - change_type: Delete - resource_id: iambic_test_505 - resource_type: aws:iam:role - exceptions_seen: [] - exceptions_seen: [] - - resource_id: AutoCreateTest - resource_type: aws:iam:role - template_path: ./resources/aws/roles/staging/autocreatetest.yaml - proposed_changes: - - account: staging - (259868150464) - resource_id: AutoCreateTest - current_value: - Path: / - RoleName: AutoCreateTest - RoleId: AROATZAKZJLAEIJ65HNIB - Arn: arn:aws:iam::259868150464:role/AutoCreateTest - CreateDate: '2022-06-07T13:16:19+00:00' - AssumeRolePolicyDocument: - Version: '2012-10-17' - Statement: - - Sid: '123' - Effect: Allow - Principal: - Service: ec2.amazonaws.com - Action: sts:AssumeRole - Description: Something - MaxSessionDuration: 3600 - PermissionsBoundary: - PermissionsBoundaryType: Policy - PermissionsBoundaryArn: arn:aws:iam::259868150464:policy/bob - Tags: - - Key: tesa - Value: tesf - - Key: Service - Value: N/A - - Key: noq-tra-supported-groups - Value: user@noq.dev - RoleLastUsed: {} - ManagedPolicies: [] - InlinePolicies: - - PolicyName: noq_curtis_1656429523_kxhd - Statement: - - Action: - - s3:abortmultipartupload - - s3:listbucket - - s3:listbucketversions - - s3:listmultipartuploadparts* - - s3:putobject - - s3:putobjecttagging - - s3:putobjectversiontagging - Effect: Allow - Resource: - - arn:aws:s3:::noq-local-dev-cache - - arn:aws:s3:::noq-local-dev-cache/* - Sid: noqcurtis1656429515xsgn - Version: '2012-10-17' - - PolicyName: noq_curtis_1659530435_clut - Statement: - - Action: - - s3:getobject - - s3:getobjectacl - - s3:getobjecttagging - - s3:getobjectversion - - s3:getobjectversionacl - - s3:getobjectversiontagging - - s3:listbucket - - s3:listbucketversions - Effect: Allow - Resource: - - arn:aws:s3:::noq-demo2-test-bucket - - arn:aws:s3:::noq-demo2-test-bucket/* - Sid: noqcurtis1659530431sjrk - Version: '2012-10-17' - - PolicyName: noq_delete_on_20220615_user_1655227824 - Statement: - - Action: - - sts:assumerole - - sts:tagsession - Effect: Allow - Resource: - - arn:aws:iam::259868150464:role/ConsoleMe1 - Sid: noquser1655227802xrjl - - Action: - - sqs:deletemessage - - sqs:getqueueattributes - - sqs:getqueueurl - - sqs:purgequeue - - sqs:receivemessage - - sqs:sendmessage - - sqs:setqueueattributes - Effect: Allow - Resource: - - arn:aws:sqs:us-east-1:259868150464:phecfla - - arn:aws:sqs:us-west-2:759357822767:testqueue - Sid: noquser1655227802ojae - - Action: - - sns:confirmsubscription - - sns:getendpointattributes - - sns:gettopicattributes - - sns:publish - - sns:subscribe - - sns:unsubscribe - Effect: Allow - Resource: - - arn:aws:sns:us-west-2:759357822767:local-dev-registration-topic - Sid: noquser1655227802bnpj - - Action: - - s3:abortmultipartupload - - s3:deleteobject - - s3:deleteobjecttagging - - s3:deleteobjectversion - - s3:deleteobjectversiontagging - - s3:getobject - - s3:getobjectacl - - s3:getobjecttagging - - s3:getobjectversion - - s3:getobjectversionacl - - s3:getobjectversiontagging - - s3:listbucket - - s3:listbucketversions - - s3:listmultipartuploadparts* - - s3:putobject - - s3:putobjecttagging - - s3:putobjectversiontagging - Effect: Allow - Resource: - - arn:aws:s3:::ceuswiow - - arn:aws:s3:::ceuswiow/* - Sid: noquser1655227802qqoa - Version: '2012-10-17' - - PolicyName: noq_delete_on_20220618_user_1655496042 - Statement: - - Action: - - s3:abortmultipartupload - - s3:getobject - - s3:getobjectacl - - s3:getobjecttagging - - s3:getobjectversion - - s3:getobjectversionacl - - s3:getobjectversiontagging - - s3:listmultipartuploadparts* - - s3:putobject - - s3:putobjecttagging - - s3:putobjectversiontagging - Effect: Allow - Resource: - - arn:aws:s3:::consoleme-dev-test-bucket - - arn:aws:s3:::consoleme-dev-test-bucket/* - Sid: noquser1655496005ycbh - Version: '2012-10-17' - - PolicyName: noq_delete_on_20220628_user_1656338589 - Statement: - - Action: - - sts:assumerole - - sts:tagsession - Effect: Allow - Resource: - - arn:aws:iam::259868150464:role/ConsoleMe2 - Sid: noquser1656338510czhc - - Action: - - sqs:deletemessage - - sqs:getqueueattributes - - sqs:getqueueurl - - sqs:receivemessage - - sqs:sendmessage - Effect: Allow - Resource: - - arn:aws:sqs:us-west-2:759357822767:local-dev-registration-queue - Sid: noquser1656338510vmcr - - Action: - - s3:abortmultipartupload - - s3:getobject - - s3:getobjectacl - - s3:getobjecttagging - - s3:getobjectversion - - s3:getobjectversionacl - - s3:getobjectversiontagging - - s3:listbucket - - s3:listbucketversions - - s3:listmultipartuploadparts* - - s3:putobject - - s3:putobjecttagging - - s3:putobjectversiontagging - Effect: Allow - Resource: - - arn:aws:s3:::consoleme-dev-configuration-bucket - - arn:aws:s3:::consoleme-dev-configuration-bucket/* - Sid: noquser1656338510pfcf - Version: '2012-10-17' - - PolicyName: noq_delete_on_20220710_user_1657380290 - Statement: - - Action: - - s3:getobject - - s3:getobjectacl - - s3:getobjecttagging - - s3:getobjectversion - - s3:getobjectversionacl - - s3:getobjectversiontagging - - s3:listbucket - - s3:listbucketversions - Effect: Allow - Resource: - - arn:aws:s3:::adostoma - - arn:aws:s3:::adostoma/* - Sid: noquser1657380266wdnx - Version: '2012-10-17' - - PolicyName: noq_delete_on_20220711_user_1657381536 - Statement: - - Action: - - s3:getobject - - s3:getobjectacl - - s3:getobjecttagging - - s3:getobjectversion - - s3:getobjectversionacl - - s3:getobjectversiontagging - - s3:listbucket - - s3:listbucketversions - Effect: Allow - Resource: - - arn:aws:s3:::cdk-hnb659fds-assets-259868150464-us-east-1 - - arn:aws:s3:::cdk-hnb659fds-assets-259868150464-us-east-1/* - Sid: noquser1657381512ehjm - Version: '2012-10-17' - - PolicyName: noq_delete_on_20220914_080000_user_1663097282 - Version: '2012-10-17' - Statement: - - Effect: Allow - Action: - - s3:getbucket* - - s3:getobject - - s3:getobjectacl - - s3:getobjecttagging - - s3:getobjectversion - - s3:getobjectversionacl - - s3:getobjectversiontagging - - s3:listbucket - - s3:listbucketversions - Resource: - - arn:aws:s3:::noq-demo2-test-bucket - - arn:aws:s3:::noq-demo2-test-bucket/* - Sid: noquser1663097254lkqq - - PolicyName: noq_user_1654644829_rdyf - Statement: - - Action: - - sns:getendpointattributes - - sns:gettopicattributes - - sns:publish - Effect: Allow - Resource: - - arn:aws:sns:us-east-1:259868150464:thtaeeduon - Sid: noquser1654644822cbog - - Action: - - sqs:deletemessage - - sqs:getqueueattributes - - sqs:getqueueurl - - sqs:receivemessage - - sqs:sendmessage - Effect: Allow - Resource: - - arn:aws:sqs:us-east-1:259868150464:phecfla - Sid: noquser1654644822liuj - - Action: - - s3:getobject - - s3:getobjectacl - - s3:getobjecttagging - - s3:getobjectversion - - s3:getobjectversionacl - - s3:getobjectversiontagging - - s3:listbucket - - s3:listbucketversions - Effect: Allow - Resource: - - arn:aws:s3:::noq-local-dev-cache - - arn:aws:s3:::noq-local-dev-cache/* - Sid: noquser1654644822qddq - Version: '2012-10-17' - - PolicyName: noq_user_1657381790_cxyv - Statement: - - Action: - - sqs:deletemessage - - sqs:getqueueattributes - - sqs:getqueueurl - - sqs:receivemessage - - sqs:sendmessage - Effect: Allow - Resource: - - arn:aws:sqs:us-east-1:350876197038:noq-development-2-test-queue - Sid: noquser1657381787loao - Version: '2012-10-17' - - PolicyName: noq_user_1657382787_qzdj - Statement: - - Action: - - s3:getobject - - s3:getobjectacl - - s3:getobjecttagging - - s3:getobjectversion - - s3:getobjectversionacl - - s3:getobjectversiontagging - - s3:listbucket - - s3:listbucketversions - Effect: Allow - Resource: - - arn:aws:s3:::noqmeter-us-west-2 - - arn:aws:s3:::noqmeter-us-west-2/* - Sid: noquser1657382782hfao - Version: '2012-10-17' - - PolicyName: noq_user_1659130007_vbsa - Version: '2012-10-17' - Statement: - - Action: - - s3:abortmultipartupload - - s3:deleteobject - - s3:deleteobjecttagging - - s3:deleteobjectversion - - s3:deleteobjectversiontagging - - s3:getobject - - s3:getobjectacl - - s3:getobjecttagging - - s3:getobjectversion - - s3:getobjectversionacl - - s3:getobjectversiontagging - - s3:listbucket - - s3:listbucketversions - - s3:listmultipartuploadparts* - - s3:putobject - - s3:putobjecttagging - - s3:putobjectversiontagging - Effect: Allow - Resource: - - arn:aws:s3:::read-only-test-bucket-2423-5033-4841 - - arn:aws:s3:::read-only-test-bucket-2423-5033-4841/* - Sid: noquser1659129997mxch - - PolicyName: noq_user_1665875774_rwvx - Statement: - - Action: - - s3:getbucket* - - s3:getobject - - s3:getobjectacl - - s3:getobjecttagging - - s3:getobjectversion - - s3:getobjectversionacl - - s3:getobjectversiontagging - - s3:listbucket - - s3:listbucketversions - Effect: Allow - Resource: - - arn:aws:s3:::ceuswiow - - arn:aws:s3:::ceuswiow/* - Sid: noquser1665875768sdxt - Version: '2012-10-17' - - PolicyName: noq_user_1665875828_xjoz - Statement: - - Action: - - s3:getbucket* - - s3:getobject - - s3:getobjectacl - - s3:getobjecttagging - - s3:getobjectversion - - s3:getobjectversionacl - - s3:getobjectversiontagging - - s3:listbucket - - s3:listbucketversions - Effect: Allow - Resource: - - arn:aws:s3:::ceuswiow - - arn:aws:s3:::ceuswiow/* - Sid: noquser1665875768sdxt - Version: '2012-10-17' - proposed_changes: - - change_type: Delete - resource_id: AutoCreateTest - resource_type: aws:iam:role - exceptions_seen: [] - exceptions_seen: [] - - resource_id: CloudWatchToElasticSearchRole - resource_type: aws:iam:role - template_path: ./resources/aws/roles/staging/cloudwatchtoelasticsearchrole.yaml - proposed_changes: - - account: staging - (259868150464) - resource_id: CloudWatchToElasticSearchRole - current_value: - Path: / - RoleName: CloudWatchToElasticSearchRole - RoleId: AROATZAKZJLAPMWOIHJZN - Arn: arn:aws:iam::259868150464:role/CloudWatchToElasticSearchRole - CreateDate: '2022-05-02T22:52:35+00:00' - AssumeRolePolicyDocument: - Version: '2012-10-17' - Statement: - - Effect: Allow - Principal: - Service: lambda.amazonaws.com - Action: sts:AssumeRole - Description: Role created by curtis@noq.dev through ConsoleMe - MaxSessionDuration: 3600 - RoleLastUsed: - LastUsedDate: '2022-05-02T23:05:21+00:00' - Region: us-west-2 - ManagedPolicies: - - PolicyName: AWSLambdaVPCAccessExecutionRole - PolicyArn: arn:aws:iam::aws:policy/service-role/AWSLambdaVPCAccessExecutionRole - - PolicyName: AmazonOpenSearchServiceFullAccess - PolicyArn: arn:aws:iam::aws:policy/AmazonOpenSearchServiceFullAccess - InlinePolicies: [] - proposed_changes: - - change_type: Delete - resource_id: CloudWatchToElasticSearchRole - resource_type: aws:iam:role - exceptions_seen: [] - exceptions_seen: [] - - resource_id: ConsoleMe1 - resource_type: aws:iam:role - template_path: ./resources/aws/roles/staging/consoleme1.yaml - proposed_changes: - - account: staging - (259868150464) - resource_id: ConsoleMe1 - current_value: - Path: / - RoleName: ConsoleMe1 - RoleId: AROATZAKZJLAIK2WADW44 - Arn: arn:aws:iam::259868150464:role/ConsoleMe1 - CreateDate: '2021-09-29T15:57:13+00:00' - AssumeRolePolicyDocument: - Version: '2012-10-17' - Statement: - - Effect: Allow - Principal: - AWS: arn:aws:iam::940552945933:role/NoqCentralRoleCorpNoqDev - Action: sts:AssumeRole - Description: '' - MaxSessionDuration: 3600 - Tags: - - Key: noq-tra-supported-groups - Value: engineering@noq.dev - - Key: consoleme-authorized - Value: bayareasec@gmail.com:ccastrapel@gmail.com - RoleLastUsed: - LastUsedDate: '2022-10-27T16:18:46+00:00' - Region: us-east-2 - ManagedPolicies: [] - InlinePolicies: - - PolicyName: admin - Version: '2012-10-17' - Statement: - - Action: '*' - Effect: Deny - Resource: '*' - - PolicyName: noq_delete_on_20220618_user_1655495329 - Statement: - - Action: - - s3:abortmultipartupload - - s3:listbucket - - s3:listbucketversions - - s3:listmultipartuploadparts* - - s3:putobject - - s3:putobjecttagging - - s3:putobjectversiontagging - Effect: Allow - Resource: - - arn:aws:s3:::consoleme-dev-test-bucket - - arn:aws:s3:::consoleme-dev-test-bucket/* - Sid: noquser1655495264kkus - Version: '2012-10-17' - - PolicyName: noq_user_1654695156_krwp - Statement: - - Action: - - s3:getobject - - s3:getobjectacl - - s3:getobjecttagging - - s3:getobjectversion - - s3:getobjectversionacl - - s3:getobjectversiontagging - - s3:listbucket - - s3:listbucketversions - Effect: Allow - Resource: - - arn:aws:s3:::ceuswiow - - arn:aws:s3:::ceuswiow/* - Sid: noquser1654695151zcsl - Version: '2012-10-17' - proposed_changes: - - change_type: Delete - resource_id: ConsoleMe1 - resource_type: aws:iam:role - exceptions_seen: [] - exceptions_seen: [] - - resource_id: ConsoleMe2 - resource_type: aws:iam:role - template_path: ./resources/aws/roles/staging/consoleme2.yaml - proposed_changes: - - account: staging - (259868150464) - resource_id: ConsoleMe2 - current_value: - Path: / - RoleName: ConsoleMe2 - RoleId: AROATZAKZJLAHD2GGNKAX - Arn: arn:aws:iam::259868150464:role/ConsoleMe2 - CreateDate: '2021-09-29T16:37:34+00:00' - AssumeRolePolicyDocument: - Version: '2012-10-17' - Statement: - - Effect: Allow - Principal: - AWS: AROATZAKZJLAO6SLARMN5 - Action: sts:AssumeRole - - Sid: noqdeleteon20220628user1656338589 - Effect: Allow - Principal: - AWS: arn:aws:iam::259868150464:role/AutoCreateTest - Action: - - sts:TagSession - - sts:AssumeRole - Description: Role cloned via ConsoleMe by consoleme_admin@example.com from arn:aws:iam::259868150464:role/ConsoleMe1 - MaxSessionDuration: 3600 - Tags: - - Key: test - Value: test - - Key: consoleme-authorized - Value: ccastrapel@gmail.com:bayareasec@gmail.com - RoleLastUsed: {} - ManagedPolicies: - - PolicyName: aoiaedraf - PolicyArn: arn:aws:iam::259868150464:policy/aoiaedraf - InlinePolicies: - - PolicyName: cm_consoleme_admin_1632935706_heel - Statement: - - Action: - - autoscaling:Describe* - - cloudwatch:Get* - - cloudwatch:List* - - config:BatchGet* - - config:List* - - config:Select* - - ec2:describeregions - - ec2:DescribeSubnets - - ec2:describevpcendpoints - - ec2:DescribeVpcs - - iam:* - - s3:GetBucketPolicy - - s3:GetBucketTagging - - s3:ListAllMyBuckets - - s3:ListBucket - - s3:PutBucketPolicy - - s3:PutBucketTagging - - sns:GetTopicAttributes - - sns:ListTagsForResource - - sns:ListTopics - - sns:SetTopicAttributes - - sns:TagResource - - sns:UnTagResource - - sqs:GetQueueAttributes - - sqs:GetQueueUrl - - sqs:ListQueues - - sqs:ListQueueTags - - sqs:SetQueueAttributes - - sqs:TagQueue - - sqs:UntagQueue - - organizations:listaccounts - Effect: Allow - Resource: - - '*' - Sid: iam - Version: '2012-10-17' - - PolicyName: cm_consoleme_admin_1632937591_bitr - Statement: - - Action: - - sqs:ReceiveMessage - - sqs:SendMessage - - sqs:DeleteMessage - - sqs:GetQueueUrl - - sqs:GetQueueAttributes - Effect: Allow - Resource: arn:aws:sqs:us-east-1:259868150464:chiyeps - proposed_changes: - - change_type: Delete - resource_id: ConsoleMe2 - resource_type: aws:iam:role - exceptions_seen: [] - exceptions_seen: [] - - resource_id: daw - resource_type: aws:iam:role - template_path: ./resources/aws/roles/staging/daw.yaml - proposed_changes: - - account: staging - (259868150464) - resource_id: daw - current_value: - Path: / - RoleName: daw - RoleId: AROATZAKZJLANB2VI3NXY - Arn: arn:aws:iam::259868150464:role/daw - CreateDate: '2021-10-05T17:12:31+00:00' - AssumeRolePolicyDocument: - Version: '2012-10-17' - Statement: - - Effect: Allow - Principal: - Service: ec2.amazonaws.com - Action: sts:AssumeRole - - Effect: Allow - Principal: - AWS: AROATZAKZJLAO6SLARMN5 - Action: sts:AssumeRole - Description: '' - MaxSessionDuration: 3600 - Tags: - - Key: consoleme-authorized - Value: ccastrapel@gmail.com:bayareasec@gmail.com - RoleLastUsed: {} - ManagedPolicies: [] - InlinePolicies: [] - proposed_changes: - - change_type: Delete - resource_id: daw - resource_type: aws:iam:role - exceptions_seen: [] - exceptions_seen: [] - - resource_id: diseiwetuypora - resource_type: aws:iam:role - template_path: ./resources/aws/roles/staging/diseiwetuypora.yaml - proposed_changes: - - account: staging - (259868150464) - resource_id: diseiwetuypora - current_value: - Path: / - RoleName: diseiwetuypora - RoleId: AROATZAKZJLAG2V7VFQS5 - Arn: arn:aws:iam::259868150464:role/diseiwetuypora - CreateDate: '2021-10-05T17:12:37+00:00' - AssumeRolePolicyDocument: - Version: '2012-10-17' - Statement: - - Effect: Allow - Principal: - Service: ec2.amazonaws.com - Action: sts:AssumeRole - - Effect: Allow - Principal: - AWS: AROATZAKZJLAO6SLARMN5 - Action: sts:AssumeRole - Description: '' - MaxSessionDuration: 3600 - Tags: - - Key: consoleme-authorized - Value: ccastrapel@gmail.com:bayareasec@gmail.com - RoleLastUsed: {} - ManagedPolicies: [] - InlinePolicies: [] - proposed_changes: - - change_type: Delete - resource_id: diseiwetuypora - resource_type: aws:iam:role - exceptions_seen: [] - exceptions_seen: [] - - resource_id: dob - resource_type: aws:iam:role - template_path: ./resources/aws/roles/staging/dob.yaml - proposed_changes: - - account: staging - (259868150464) - resource_id: dob - current_value: - Path: / - RoleName: dob - RoleId: AROATZAKZJLAH2MAPSWLO - Arn: arn:aws:iam::259868150464:role/dob - CreateDate: '2021-10-01T17:30:47+00:00' - AssumeRolePolicyDocument: - Version: '2012-10-17' - Statement: - - Effect: Allow - Principal: - Service: ec2.amazonaws.com - Action: sts:AssumeRole - - Effect: Allow - Principal: - AWS: AROATZAKZJLAO6SLARMN5 - Action: sts:AssumeRole - Description: '' - MaxSessionDuration: 3600 - Tags: - - Key: consoleme-authorized - Value: ccastrapel@gmail.com:bayareasec@gmail.com - RoleLastUsed: {} - ManagedPolicies: [] - InlinePolicies: [] - proposed_changes: - - change_type: Delete - resource_id: dob - resource_type: aws:iam:role - exceptions_seen: [] - exceptions_seen: [] - - resource_id: efoa - resource_type: aws:iam:role - template_path: ./resources/aws/roles/staging/efoa.yaml - proposed_changes: - - account: staging - (259868150464) - resource_id: efoa - current_value: - Path: / - RoleName: efoa - RoleId: AROATZAKZJLAK3KOEYXL3 - Arn: arn:aws:iam::259868150464:role/efoa - CreateDate: '2021-10-05T17:13:02+00:00' - AssumeRolePolicyDocument: - Version: '2012-10-17' - Statement: - - Effect: Allow - Principal: - Service: ec2.amazonaws.com - Action: sts:AssumeRole - - Effect: Allow - Principal: - AWS: AROATZAKZJLAO6SLARMN5 - Action: sts:AssumeRole - Description: '' - MaxSessionDuration: 3600 - Tags: - - Key: consoleme-authorized - Value: ccastrapel@gmail.com:bayareasec@gmail.com - RoleLastUsed: {} - ManagedPolicies: [] - InlinePolicies: [] - proposed_changes: - - change_type: Delete - resource_id: efoa - resource_type: aws:iam:role - exceptions_seen: [] - exceptions_seen: [] - - resource_id: MattsExperimentingWithWeepProxyRoleTest - resource_type: aws:iam:role - template_path: ./resources/aws/roles/staging/mattsexperimentingwithweepproxyroletest.yaml - proposed_changes: - - account: staging - (259868150464) - resource_id: MattsExperimentingWithWeepProxyRoleTest - current_value: - Path: / - RoleName: MattsExperimentingWithWeepProxyRoleTest - RoleId: AROATZAKZJLAL3YWM2AGN - Arn: arn:aws:iam::259868150464:role/MattsExperimentingWithWeepProxyRoleTest - CreateDate: '2022-07-19T20:42:47+00:00' - AssumeRolePolicyDocument: - Version: '2012-10-17' - Statement: - - Effect: Allow - Principal: - Service: ec2.amazonaws.com - Action: sts:AssumeRole - - Effect: Allow - Principal: - AWS: arn:aws:iam::940552945933:role/NoqCentralRoleCorpNoqDev - Action: - - sts:AssumeRole - - sts:TagSession - - Effect: Allow - Principal: - AWS: arn:aws:iam::940552945933:role/NoqCentralRoleCorpNoqDev - Action: - - sts:AssumeRole - - sts:TagSession - - Effect: Allow - Principal: - AWS: arn:aws:iam::940552945933:role/NoqCentralRoleCorpNoqDev - Action: - - sts:AssumeRole - - sts:TagSession - - Effect: Allow - Principal: - AWS: arn:aws:iam::940552945933:role/NoqCentralRoleCorpNoqDev - Action: - - sts:AssumeRole - - sts:TagSession - - Effect: Allow - Principal: - AWS: arn:aws:iam::940552945933:role/NoqCentralRoleCorpNoqDev - Action: - - sts:AssumeRole - - sts:TagSession - - Effect: Allow - Principal: - AWS: arn:aws:iam::940552945933:role/NoqCentralRoleCorpNoqDev - Action: - - sts:AssumeRole - - sts:TagSession - Description: The role name is also the description - MaxSessionDuration: 3600 - Tags: - - Key: noq-authorized - Value: engineering@noq.dev - RoleLastUsed: - LastUsedDate: '2022-09-02T23:27:43+00:00' - Region: us-west-2 - ManagedPolicies: [] - InlinePolicies: - - PolicyName: noq_matt_1658263648_dooy - Statement: - - Action: - - s3:ListBucket - - s3:GetObject - Effect: Allow - Resource: - - arn:aws:s3:::consoleme-dev-test-bucket - - arn:aws:s3:::consoleme-dev-test-bucket/* - Sid: s3readonly - - PolicyName: noq_user_1659560951_kocq - Version: '2012-10-17' - Statement: - - Action: - - s3:abortmultipartupload - - s3:deleteobject - - s3:deleteobjecttagging - - s3:deleteobjectversion - - s3:deleteobjectversiontagging - - s3:getobject - - s3:getobjectacl - - s3:getobjecttagging - - s3:getobjectversion - - s3:getobjectversionacl - - s3:getobjectversiontagging - - s3:listbucket - - s3:listbucketversions - - s3:listmultipartuploadparts* - - s3:putobject - - s3:putobjecttagging - - s3:putobjectversiontagging - Effect: Allow - Resource: - - arn:aws:s3:::my-bucket-1234-noq-1234 - - arn:aws:s3:::my-bucket-1234-noq-1234/* - Sid: noquser1659560872akty - proposed_changes: - - change_type: Delete - resource_id: MattsExperimentingWithWeepProxyRoleTest - resource_type: aws:iam:role - exceptions_seen: [] - exceptions_seen: [] - - resource_id: shannon_access_role - resource_type: aws:iam:role - template_path: ./resources/aws/roles/unusual_demo/shannon_access_role.yaml - proposed_changes: - - account: unusual_demo - (197024362139) - resource_id: shannon_access_role - current_value: - Path: / - RoleName: shannon_access_role - RoleId: AROAS3X4RF2NZ6YI4JEHW - Arn: arn:aws:iam::197024362139:role/shannon_access_role - CreateDate: '2022-03-08T14:48:33+00:00' - AssumeRolePolicyDocument: - Version: '2012-10-17' - Statement: - - Effect: Allow - Principal: - Service: ec2.amazonaws.com - Action: sts:AssumeRole - - Effect: Allow - Principal: - AWS: arn:aws:iam::197024362139:role/NoqCentralRole - Action: - - sts:AssumeRole - - sts:TagSession - - Effect: Allow - Principal: - AWS: arn:aws:iam::197024362139:role/NoqCentralRole - Action: - - sts:AssumeRole - - sts:TagSession - - Effect: Allow - Principal: - AWS: arn:aws:iam::197024362139:role/NoqCentralRole - Action: - - sts:AssumeRole - - sts:TagSession - Description: Role created by curtis@noq.dev through ConsoleMe - MaxSessionDuration: 3600 - Tags: - - Key: noq_authorized - Value: shannon@unusual.vc:curtis@noq.dev:noq_admins - RoleLastUsed: - LastUsedDate: '2022-03-11T21:45:50+00:00' - Region: us-west-2 - ManagedPolicies: [] - InlinePolicies: - - PolicyName: noq_shannon_1647034634_ahrj - Version: '2012-10-17' - Statement: - - Action: - - s3:abortmultipartupload - - s3:deleteobject - - s3:deleteobjecttagging - - s3:deleteobjectversion - - s3:deleteobjectversiontagging - - s3:getobject - - s3:getobjectacl - - s3:getobjecttagging - - s3:getobjectversion - - s3:getobjectversionacl - - s3:getobjectversiontagging - - s3:listbucket - - s3:listbucketversions - - s3:listmultipartuploadparts* - - s3:putobject - - s3:putobjecttagging - - s3:putobjectversiontagging - Effect: Allow - Resource: - - arn:aws:s3:::* - Sid: cmshannon1647034594vcwr - - Action: - - iam:passrole - Effect: Allow - Resource: - - arn:aws:iam::197024362139:role/rds-monitoring-role - Sid: cmshannon1647034594kxfu - - Action: - - ec2:attachvolume - - ec2:createvolume - - ec2:describelicenses - - ec2:describevolumes - - ec2:detachvolume - - ec2:reportinstancestatus - - ec2:resetsnapshotattribute - Effect: Allow - Resource: - - '*' - Sid: cmshannon1647034594cwoq - - PolicyName: noq_shannon_1647035133_nlpr - Version: '2012-10-17' - Statement: - - Action: - - s3:abortmultipartupload - - s3:deleteobject - - s3:deleteobjecttagging - - s3:deleteobjectversion - - s3:deleteobjectversiontagging - - s3:getobject - - s3:getobjectacl - - s3:getobjecttagging - - s3:getobjectversion - - s3:getobjectversionacl - - s3:getobjectversiontagging - - s3:listbucket - - s3:listbucketversions - - s3:listmultipartuploadparts* - - s3:putobject - - s3:putobjecttagging - - s3:putobjectversiontagging - Effect: Allow - Resource: - - arn:aws:s3:::* - Sid: cmshannon1647035119fskh - proposed_changes: - - change_type: Delete - resource_id: shannon_access_role - resource_type: aws:iam:role - exceptions_seen: [] - exceptions_seen: [] - - resource_id: unusual_team - resource_type: aws:iam:role - template_path: ./resources/aws/roles/unusual_demo/unusual_team.yaml - proposed_changes: - - account: unusual_demo - (197024362139) - resource_id: unusual_team - current_value: - Path: / - RoleName: unusual_team - RoleId: AROAS3X4RF2NQQZON6VWU - Arn: arn:aws:iam::197024362139:role/unusual_team - CreateDate: '2022-03-08T15:29:20+00:00' - AssumeRolePolicyDocument: - Version: '2012-10-17' - Statement: - - Effect: Allow - Principal: - Service: ec2.amazonaws.com - Action: sts:AssumeRole - - Effect: Allow - Principal: - AWS: arn:aws:iam::197024362139:role/NoqCentralRole - Action: - - sts:AssumeRole - - sts:TagSession - - Effect: Allow - Principal: - AWS: arn:aws:iam::197024362139:role/NoqCentralRole - Action: - - sts:AssumeRole - - sts:TagSession - - Effect: Allow - Principal: - AWS: arn:aws:iam::197024362139:role/NoqCentralRole - Action: - - sts:AssumeRole - - sts:TagSession - Description: Role created by curtis@noq.dev through ConsoleMe - MaxSessionDuration: 3600 - Tags: - - Key: noq_authorized - Value: shannon@unusual.vc:curtis@noq.dev:noq_admins - RoleLastUsed: - LastUsedDate: '2022-03-11T21:30:04+00:00' - Region: us-east-1 - ManagedPolicies: [] - InlinePolicies: [] - proposed_changes: - - change_type: Delete - resource_id: unusual_team - resource_type: aws:iam:role - exceptions_seen: [] - exceptions_seen: [] -""" - - -template_yaml_mixed = """ - resource_id: prod_iambic_test_role +template_yaml = """ - resource_id: prod_iambic_test_role resource_type: aws:iam:role template_path: resources/aws/iam/role/design-prod/iambic_test_role_prod.yaml proposed_changes: @@ -3738,16 +411,11 @@ """ -def get_templates_delete(): - return [TemplateChangeDetails.parse_obj(x) for x in yaml.load(template_yaml_delete)] - - def get_templates_mixed(): - return [TemplateChangeDetails.parse_obj(x) for x in yaml.load(template_yaml_mixed)] + return [TemplateChangeDetails.parse_obj(x) for x in yaml.load(template_yaml)] @pytest.mark.parametrize("template_change_details, expected_output", [ - (get_templates_delete(), ActionSummaries(num_accounts=15, num_actions=1, num_templates=20)), (get_templates_mixed(), ActionSummaries(num_accounts=10, num_actions=1, num_templates=2)), ]) def test_get_template_data(template_change_details: list[TemplateChangeDetails], expected_output: ActionSummaries): @@ -3758,11 +426,10 @@ def test_get_template_data(template_change_details: list[TemplateChangeDetails], @pytest.mark.parametrize("template_change_details, expected_output", [ - (get_templates_delete(), ActionSummaries(num_accounts=15, num_actions=1, num_templates=20)), (get_templates_mixed(), ActionSummaries(num_accounts=10, num_actions=1, num_templates=2)), ]) -def test_render_resource_changes(template_change_details: list[TemplateChangeDetails], expected_output: ActionSummaries): - rendered_markdown = render_resource_changes(template_change_details) +def test_gh_render_resource_changes(template_change_details: list[TemplateChangeDetails], expected_output: ActionSummaries): + rendered_markdown = gh_render_resource_changes(template_change_details) import time with open(f"test_render_resource_changes-{time.time()}.md", "w") as f: f.write(rendered_markdown) From 39efb583f4caf1df8684b7d91d3541205b5191bd Mon Sep 17 00:00:00 2001 From: Matt Daue Date: Sat, 11 Mar 2023 22:41:36 -0800 Subject: [PATCH 14/17] Move summary -> github_summary template Signed-off-by: Matt Daue --- iambic/output/templates/github_summary.jinja2 | 84 +++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100644 iambic/output/templates/github_summary.jinja2 diff --git a/iambic/output/templates/github_summary.jinja2 b/iambic/output/templates/github_summary.jinja2 new file mode 100644 index 000000000..aaeb62839 --- /dev/null +++ b/iambic/output/templates/github_summary.jinja2 @@ -0,0 +1,84 @@ +# IAMbic Summary +## Change Detection +* {{ iambic.num_actions }} distinct actions. +* {{ iambic.num_templates }} templates with changes. +* {{ iambic.num_accounts }} accounts affected. +## Exceptions +* {{ iambic.num_exceptions }} exceptions were recorded. + +# IAMbic Change Details +{% for action_summary in iambic.action_summaries -%} +
+Action: {{ action_summary.action }} (Number of Templates: {{ action_summary.num_templates }}) + {% for template in action_summary.templates -%} +
+ Template: {{ template.template_name }} (Number of Accounts: {{ template.num_accounts }}) + {% for account in template.accounts -%} +
+ Account: {{ account.account }} (Number of Changes: {{ account.num_changes }}) + {% for change in account.changes -%} + + + + + + + + + + + + + + + + + + +
Resource IDResource TypeChange Type
{{ change.resource_id }}{{ change.resource_type }}{{ change.change.change_type.value }}
{{ change.diff }}
+ {% endfor -%} +
+ {% endfor -%} +
+ {% endfor -%} +
+{% endfor %} + +# IAMbic Exceptions + +{% for action_summary in iambic.exceptions %} +
+Action: {{ action_summary.action }} (Number of Templates: {{ action_summary.num_templates }}) + {% for template in action_summary.templates -%} +
+ Template: {{ template.template_name }} (Number of Accounts: {{ template.num_accounts }}) + {% for account in template.accounts -%} +
+ Account: {{ account.account }} (Number of Changes: {{ account.num_changes }}) + {% for change in account.changes -%} + + + + + + + + + + + + + + + + + + +
Resource IDResource TypeChange Type
{{ change.resource_id }}{{ change.resource_type }}{{ change.change.change_type.value }}
{{ change.diff }}
+ {% endfor -%} +
+ {% endfor -%} +
+ {% endfor -%} +
+{% endfor -%} From 0029235a93d5ffdac77b46f4816e99c3743966e4 Mon Sep 17 00:00:00 2001 From: Matt Daue Date: Sun, 12 Mar 2023 15:50:16 -0700 Subject: [PATCH 15/17] Update based on PR feedback. Signed-off-by: Matt Daue --- .vscode/launch.json | 2 - iambic/output/markdown.py | 2 - iambic/output/templates/github_summary.jinja2 | 146 +++++++++++------- poetry.lock | 36 +---- pyproject.toml | 1 - 5 files changed, 94 insertions(+), 93 deletions(-) diff --git a/.vscode/launch.json b/.vscode/launch.json index 545a7e755..211121bdb 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -13,8 +13,6 @@ "envFile": "${workspaceFolder}/.env", "args": [ "plan", - "-t", - "../noq-templates/resources/aws/roles/all_accounts/readonly.yaml", ], "justMyCode": false }, diff --git a/iambic/output/markdown.py b/iambic/output/markdown.py index 819b13178..12cdcc9d2 100644 --- a/iambic/output/markdown.py +++ b/iambic/output/markdown.py @@ -1,8 +1,6 @@ -import json import pathlib from typing import Any, Dict, List, Set -import frozendict from jinja2 import Environment, FileSystemLoader from pydantic import BaseModel as PydanticBaseModel, Field from recursive_diff import recursive_diff diff --git a/iambic/output/templates/github_summary.jinja2 b/iambic/output/templates/github_summary.jinja2 index aaeb62839..a6d1feb16 100644 --- a/iambic/output/templates/github_summary.jinja2 +++ b/iambic/output/templates/github_summary.jinja2 @@ -8,77 +8,105 @@ # IAMbic Change Details {% for action_summary in iambic.action_summaries -%} +{% if action_summary.num_templates > 0 -%}
Action: {{ action_summary.action }} (Number of Templates: {{ action_summary.num_templates }}) - {% for template in action_summary.templates -%} -
- Template: {{ template.template_name }} (Number of Accounts: {{ template.num_accounts }}) - {% for account in template.accounts -%} +
+ {% for template in action_summary.templates -%} + {% if template.num_accounts -%}
- Account: {{ account.account }} (Number of Changes: {{ account.num_changes }}) - {% for change in account.changes -%} - - - - - - - - - - - - - - - - - - -
Resource IDResource TypeChange Type
{{ change.resource_id }}{{ change.resource_type }}{{ change.change.change_type.value }}
{{ change.diff }}
- {% endfor -%} + Template: {{ template.template_name }} (Number of Accounts: {{ template.num_accounts }}) +
+ {% for account in template.accounts -%} + {% if account.num_changes -%} +
+ Account: {{ account.account }} (Number of Changes: {{ account.num_changes }}) +
+ {% for change in account.changes -%} + + + + + + + + + + + + + + + {% if change.diff -%} + + + + {% endif -%} + +
Resource IDResource TypeChange Type
{{ change.resource_id }}{{ change.resource_type }}{{ change.change.change_type.value }}
{{ change.diff }}
+ {% endfor -%} +
+
+ {% endif -%} + {% endfor -%} +
+ {% endif -%} {% endfor -%} -
- {% endfor -%} +
+{% endif -%} {% endfor %} # IAMbic Exceptions -{% for action_summary in iambic.exceptions %} +{% for exception in iambic.exceptions -%} +{% if exception.num_templates > 0 -%}
-Action: {{ action_summary.action }} (Number of Templates: {{ action_summary.num_templates }}) - {% for template in action_summary.templates -%} -
- Template: {{ template.template_name }} (Number of Accounts: {{ template.num_accounts }}) - {% for account in template.accounts -%} +Action: {{ exception.action }} (Number of Templates: {{ exception.num_templates }}) +
+ {% for template in exception.templates -%} + {% if template.num_accounts -%}
- Account: {{ account.account }} (Number of Changes: {{ account.num_changes }}) - {% for change in account.changes -%} - - - - - - - - - - - - - - - - - - -
Resource IDResource TypeChange Type
{{ change.resource_id }}{{ change.resource_type }}{{ change.change.change_type.value }}
{{ change.diff }}
- {% endfor -%} + Template: {{ template.template_name }} (Number of Accounts: {{ template.num_accounts }}) +
+ {% for account in template.accounts -%} + {% if account.num_changes -%} +
+ Account: {{ account.account }} (Number of Changes: {{ account.num_changes }}) +
+ {% for change in account.changes -%} + + + + + + + + + + + + + + + {% if change.diff -%} + + + + {% endif -%} + +
Resource IDResource TypeChange Type
{{ change.resource_id }}{{ change.resource_type }}{{ change.change.change_type.value }}
{{ change.diff }}
+ {% endfor -%} +
+
+ {% endif -%} + {% endfor -%} +
+ {% endif -%} {% endfor -%} -
- {% endfor -%} +
-{% endfor -%} +{% endif -%} +{% endfor %} diff --git a/poetry.lock b/poetry.lock index d6f164fe6..f769afff6 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry and should not be changed by hand. +# This file is automatically @generated by Poetry 1.4.0 and should not be changed by hand. [[package]] name = "aenum" @@ -253,6 +253,7 @@ mypy-extensions = ">=0.4.3" pathspec = ">=0.9.0" platformdirs = ">=2" tomli = {version = ">=1.1.0", markers = "python_full_version < \"3.11.0a7\""} +typing-extensions = {version = ">=3.10.0.0", markers = "python_version < \"3.10\""} [package.extras] colorama = ["colorama (>=0.4.3)"] @@ -815,32 +816,6 @@ files = [ {file = "flatdict-4.0.1.tar.gz", hash = "sha256:cd32f08fd31ed21eb09ebc76f06b6bd12046a24f77beb1fd0281917e47f26742"}, ] -[[package]] -name = "frozendict" -version = "2.3.5" -description = "A simple immutable dictionary" -category = "main" -optional = false -python-versions = ">=3.6" -files = [ - {file = "frozendict-2.3.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:fa08c3f361e26c698c22f008804cac4a5b51437c12feafb983daadac12f66ead"}, - {file = "frozendict-2.3.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c9b8cbed40c96fce53e5a31ff2db30ca2c56992ba033555b08c22d099c3576ec"}, - {file = "frozendict-2.3.5-cp310-cp310-win_amd64.whl", hash = "sha256:64a00bcad55ff122293b0d362856dce0b248e894f1dcb0a0f68227a5ba9e4be6"}, - {file = "frozendict-2.3.5-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:08f8efd6fbe885e6217d210302cdc12cb8134aeac2b83db898511bc5e34719c5"}, - {file = "frozendict-2.3.5-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:26a2c371d23f148886864a5b82f1e5eefed35ce145b5d59dcfd3d66c9391bb45"}, - {file = "frozendict-2.3.5-cp36-cp36m-win_amd64.whl", hash = "sha256:de96ccf6e574482c9537ffa68b2cb381537a5a085483001d4a2b93847089bc04"}, - {file = "frozendict-2.3.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:1dbe11318b423fb3591e08d8b832d27dfd7b74dc20486d3384b8e05d6de2bcf7"}, - {file = "frozendict-2.3.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:30af9f39a5e29edca96b09c8d0a17fc78a0efd5f31f74d5eebb4c9a28d03032f"}, - {file = "frozendict-2.3.5-cp37-cp37m-win_amd64.whl", hash = "sha256:d1677e53d370ba44a07fbcc036fa24d4ae5693f0ed785496caf49e12a238d41f"}, - {file = "frozendict-2.3.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1411ef255b7a55fc337022ba158acf1391cd0d9a5c13142abbb7367936ab6f78"}, - {file = "frozendict-2.3.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a4a1c8febc23f3c81c2b94d70268b5b760ed7e5e81c90c3baa22bf144db3d2f9"}, - {file = "frozendict-2.3.5-cp38-cp38-win_amd64.whl", hash = "sha256:210a59a5267ae79b5d92cd50310cd5bcb122f1783a3d9016ad6db9cc179d4fbe"}, - {file = "frozendict-2.3.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:21dd627c5bdcdf0743d49f7667dd186234baa85db91517de8cb80d3bda7018d9"}, - {file = "frozendict-2.3.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d58ca5f9094725c2f44b09fe4e71f7ddd250d5cdaca7219c674bd691373fed3a"}, - {file = "frozendict-2.3.5-cp39-cp39-win_amd64.whl", hash = "sha256:f407d9d661d77896b7a6dae6ab7545c913e65d23a312cf2893406432069408db"}, - {file = "frozendict-2.3.5.tar.gz", hash = "sha256:65d7e3995c9174b77d7d80514d7062381750491e112bbeb44323368baa3e636a"}, -] - [[package]] name = "frozenlist" version = "1.3.3" @@ -1485,6 +1460,7 @@ files = [ [package.dependencies] numpy = [ + {version = ">=1.20.3", markers = "python_version < \"3.10\""}, {version = ">=1.21.0", markers = "python_version >= \"3.10\""}, {version = ">=1.23.2", markers = "python_version >= \"3.11\""}, ] @@ -2266,6 +2242,8 @@ files = [ {file = "ruamel.yaml.clib-0.2.7-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:045e0626baf1c52e5527bd5db361bc83180faaba2ff586e763d3d5982a876a9e"}, {file = "ruamel.yaml.clib-0.2.7-cp311-cp311-macosx_12_6_arm64.whl", hash = "sha256:721bc4ba4525f53f6a611ec0967bdcee61b31df5a56801281027a3a6d1c2daf5"}, {file = "ruamel.yaml.clib-0.2.7-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:41d0f1fa4c6830176eef5b276af04c89320ea616655d01327d5ce65e50575c94"}, + {file = "ruamel.yaml.clib-0.2.7-cp311-cp311-win32.whl", hash = "sha256:f6d3d39611ac2e4f62c3128a9eed45f19a6608670c5a2f4f07f24e8de3441d38"}, + {file = "ruamel.yaml.clib-0.2.7-cp311-cp311-win_amd64.whl", hash = "sha256:da538167284de58a52109a9b89b8f6a53ff8437dd6dc26d33b57bf6699153122"}, {file = "ruamel.yaml.clib-0.2.7-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:4b3a93bb9bc662fc1f99c5c3ea8e623d8b23ad22f861eb6fce9377ac07ad6072"}, {file = "ruamel.yaml.clib-0.2.7-cp36-cp36m-macosx_12_0_arm64.whl", hash = "sha256:a234a20ae07e8469da311e182e70ef6b199d0fbeb6c6cc2901204dd87fb867e8"}, {file = "ruamel.yaml.clib-0.2.7-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:15910ef4f3e537eea7fe45f8a5d19997479940d9196f357152a09031c5be59f3"}, @@ -2981,5 +2959,5 @@ multidict = ">=4.0" [metadata] lock-version = "2.0" -python-versions = "^3.10" -content-hash = "deb659c1b2da7ae747dc94df7877786d0d1745e935991aafbb44a6257090fad8" +python-versions = "^3.9" +content-hash = "1fa528cf2ad54c891b729fd2a9ed610aa6263af6a0e9399766f8eea831d0feaf" diff --git a/pyproject.toml b/pyproject.toml index 813bf90cb..c9853fab8 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -50,7 +50,6 @@ questionary = "^1.10.0" types-dateparser = "^1.1.4.5" cryptography = "^39.0.1" recursive-diff = "^1.1.0" -frozendict = "^2.3.5" aws-error-utils = "^2.7.0" [tool.poetry.scripts] From 0c250cbc20bced931214fc2a8155bef4146abff1 Mon Sep 17 00:00:00 2001 From: Matt Daue Date: Mon, 13 Mar 2023 10:07:53 -0700 Subject: [PATCH 16/17] Do not show Exception or Change Detail if no changes Signed-off-by: Matt Daue --- iambic/output/templates/github_summary.jinja2 | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/iambic/output/templates/github_summary.jinja2 b/iambic/output/templates/github_summary.jinja2 index a6d1feb16..dcaf8c299 100644 --- a/iambic/output/templates/github_summary.jinja2 +++ b/iambic/output/templates/github_summary.jinja2 @@ -6,7 +6,10 @@ ## Exceptions * {{ iambic.num_exceptions }} exceptions were recorded. +{% if iambic.num_templates > 0 -%} + # IAMbic Change Details + {% for action_summary in iambic.action_summaries -%} {% if action_summary.num_templates > 0 -%}
@@ -57,6 +60,10 @@
{% endif -%} {% endfor %} +{% endif -%} + + +{% if iambic.num_exceptions > 0 -%} # IAMbic Exceptions @@ -110,3 +117,4 @@
{% endif -%} {% endfor %} +{% endif -%} From 07747f09a4f821774316e385e8b5d93f393128ba Mon Sep 17 00:00:00 2001 From: Matt Daue Date: Mon, 13 Mar 2023 11:17:57 -0700 Subject: [PATCH 17/17] Fix poetry.lock after merge conflict Signed-off-by: Matt Daue --- poetry.lock | 2980 +++++++++++++++++++++++++-------------------------- 1 file changed, 1453 insertions(+), 1527 deletions(-) diff --git a/poetry.lock b/poetry.lock index 31a369fe2..c915882b6 100644 --- a/poetry.lock +++ b/poetry.lock @@ -7,6 +7,11 @@ description = "Advanced Enumerations (compatible with Python's stdlib Enum), Nam category = "main" optional = false python-versions = "*" +files = [ + {file = "aenum-3.1.11-py2-none-any.whl", hash = "sha256:525b4870a27d0b471c265bda692bc657f1e0dd7597ad4186d072c59f9db666f6"}, + {file = "aenum-3.1.11-py3-none-any.whl", hash = "sha256:12ae89967f2e25c0ce28c293955d643f891603488bc3d9946158ba2b35203638"}, + {file = "aenum-3.1.11.tar.gz", hash = "sha256:aed2c273547ae72a0d5ee869719c02a643da16bf507c80958faadc7e038e3f73"}, +] [[package]] name = "aiofiles" @@ -15,6 +20,10 @@ description = "File support for asyncio." category = "main" optional = false python-versions = ">=3.7,<4.0" +files = [ + {file = "aiofiles-22.1.0-py3-none-any.whl", hash = "sha256:1142fa8e80dbae46bb6339573ad4c8c0841358f79c6eb50a493dceca14621bad"}, + {file = "aiofiles-22.1.0.tar.gz", hash = "sha256:9107f1ca0b2a5553987a94a3c9959fe5b491fdf731389aa5b7b1bd0733e32de6"}, +] [[package]] name = "aiohttp" @@ -23,6 +32,95 @@ description = "Async http client/server framework (asyncio)" category = "main" optional = false python-versions = ">=3.6" +files = [ + {file = "aiohttp-3.8.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:5ce45967538fb747370308d3145aa68a074bdecb4f3a300869590f725ced69c1"}, + {file = "aiohttp-3.8.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b744c33b6f14ca26b7544e8d8aadff6b765a80ad6164fb1a430bbadd593dfb1a"}, + {file = "aiohttp-3.8.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:1a45865451439eb320784918617ba54b7a377e3501fb70402ab84d38c2cd891b"}, + {file = "aiohttp-3.8.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a86d42d7cba1cec432d47ab13b6637bee393a10f664c425ea7b305d1301ca1a3"}, + {file = "aiohttp-3.8.4-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ee3c36df21b5714d49fc4580247947aa64bcbe2939d1b77b4c8dcb8f6c9faecc"}, + {file = "aiohttp-3.8.4-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:176a64b24c0935869d5bbc4c96e82f89f643bcdf08ec947701b9dbb3c956b7dd"}, + {file = "aiohttp-3.8.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c844fd628851c0bc309f3c801b3a3d58ce430b2ce5b359cd918a5a76d0b20cb5"}, + {file = "aiohttp-3.8.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5393fb786a9e23e4799fec788e7e735de18052f83682ce2dfcabaf1c00c2c08e"}, + {file = "aiohttp-3.8.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:e4b09863aae0dc965c3ef36500d891a3ff495a2ea9ae9171e4519963c12ceefd"}, + {file = "aiohttp-3.8.4-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:adfbc22e87365a6e564c804c58fc44ff7727deea782d175c33602737b7feadb6"}, + {file = "aiohttp-3.8.4-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:147ae376f14b55f4f3c2b118b95be50a369b89b38a971e80a17c3fd623f280c9"}, + {file = "aiohttp-3.8.4-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:eafb3e874816ebe2a92f5e155f17260034c8c341dad1df25672fb710627c6949"}, + {file = "aiohttp-3.8.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c6cc15d58053c76eacac5fa9152d7d84b8d67b3fde92709195cb984cfb3475ea"}, + {file = "aiohttp-3.8.4-cp310-cp310-win32.whl", hash = "sha256:59f029a5f6e2d679296db7bee982bb3d20c088e52a2977e3175faf31d6fb75d1"}, + {file = "aiohttp-3.8.4-cp310-cp310-win_amd64.whl", hash = "sha256:fe7ba4a51f33ab275515f66b0a236bcde4fb5561498fe8f898d4e549b2e4509f"}, + {file = "aiohttp-3.8.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:3d8ef1a630519a26d6760bc695842579cb09e373c5f227a21b67dc3eb16cfea4"}, + {file = "aiohttp-3.8.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:5b3f2e06a512e94722886c0827bee9807c86a9f698fac6b3aee841fab49bbfb4"}, + {file = "aiohttp-3.8.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3a80464982d41b1fbfe3154e440ba4904b71c1a53e9cd584098cd41efdb188ef"}, + {file = "aiohttp-3.8.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b631e26df63e52f7cce0cce6507b7a7f1bc9b0c501fcde69742130b32e8782f"}, + {file = "aiohttp-3.8.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3f43255086fe25e36fd5ed8f2ee47477408a73ef00e804cb2b5cba4bf2ac7f5e"}, + {file = "aiohttp-3.8.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4d347a172f866cd1d93126d9b239fcbe682acb39b48ee0873c73c933dd23bd0f"}, + {file = "aiohttp-3.8.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a3fec6a4cb5551721cdd70473eb009d90935b4063acc5f40905d40ecfea23e05"}, + {file = "aiohttp-3.8.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:80a37fe8f7c1e6ce8f2d9c411676e4bc633a8462844e38f46156d07a7d401654"}, + {file = "aiohttp-3.8.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:d1e6a862b76f34395a985b3cd39a0d949ca80a70b6ebdea37d3ab39ceea6698a"}, + {file = "aiohttp-3.8.4-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:cd468460eefef601ece4428d3cf4562459157c0f6523db89365202c31b6daebb"}, + {file = "aiohttp-3.8.4-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:618c901dd3aad4ace71dfa0f5e82e88b46ef57e3239fc7027773cb6d4ed53531"}, + {file = "aiohttp-3.8.4-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:652b1bff4f15f6287550b4670546a2947f2a4575b6c6dff7760eafb22eacbf0b"}, + {file = "aiohttp-3.8.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:80575ba9377c5171407a06d0196b2310b679dc752d02a1fcaa2bc20b235dbf24"}, + {file = "aiohttp-3.8.4-cp311-cp311-win32.whl", hash = "sha256:bbcf1a76cf6f6dacf2c7f4d2ebd411438c275faa1dc0c68e46eb84eebd05dd7d"}, + {file = "aiohttp-3.8.4-cp311-cp311-win_amd64.whl", hash = "sha256:6e74dd54f7239fcffe07913ff8b964e28b712f09846e20de78676ce2a3dc0bfc"}, + {file = "aiohttp-3.8.4-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:880e15bb6dad90549b43f796b391cfffd7af373f4646784795e20d92606b7a51"}, + {file = "aiohttp-3.8.4-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bb96fa6b56bb536c42d6a4a87dfca570ff8e52de2d63cabebfd6fb67049c34b6"}, + {file = "aiohttp-3.8.4-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4a6cadebe132e90cefa77e45f2d2f1a4b2ce5c6b1bfc1656c1ddafcfe4ba8131"}, + {file = "aiohttp-3.8.4-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f352b62b45dff37b55ddd7b9c0c8672c4dd2eb9c0f9c11d395075a84e2c40f75"}, + {file = "aiohttp-3.8.4-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7ab43061a0c81198d88f39aaf90dae9a7744620978f7ef3e3708339b8ed2ef01"}, + {file = "aiohttp-3.8.4-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c9cb1565a7ad52e096a6988e2ee0397f72fe056dadf75d17fa6b5aebaea05622"}, + {file = "aiohttp-3.8.4-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:1b3ea7edd2d24538959c1c1abf97c744d879d4e541d38305f9bd7d9b10c9ec41"}, + {file = "aiohttp-3.8.4-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:7c7837fe8037e96b6dd5cfcf47263c1620a9d332a87ec06a6ca4564e56bd0f36"}, + {file = "aiohttp-3.8.4-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:3b90467ebc3d9fa5b0f9b6489dfb2c304a1db7b9946fa92aa76a831b9d587e99"}, + {file = "aiohttp-3.8.4-cp36-cp36m-musllinux_1_1_s390x.whl", hash = "sha256:cab9401de3ea52b4b4c6971db5fb5c999bd4260898af972bf23de1c6b5dd9d71"}, + {file = "aiohttp-3.8.4-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:d1f9282c5f2b5e241034a009779e7b2a1aa045f667ff521e7948ea9b56e0c5ff"}, + {file = "aiohttp-3.8.4-cp36-cp36m-win32.whl", hash = "sha256:5e14f25765a578a0a634d5f0cd1e2c3f53964553a00347998dfdf96b8137f777"}, + {file = "aiohttp-3.8.4-cp36-cp36m-win_amd64.whl", hash = "sha256:4c745b109057e7e5f1848c689ee4fb3a016c8d4d92da52b312f8a509f83aa05e"}, + {file = "aiohttp-3.8.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:aede4df4eeb926c8fa70de46c340a1bc2c6079e1c40ccf7b0eae1313ffd33519"}, + {file = "aiohttp-3.8.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4ddaae3f3d32fc2cb4c53fab020b69a05c8ab1f02e0e59665c6f7a0d3a5be54f"}, + {file = "aiohttp-3.8.4-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c4eb3b82ca349cf6fadcdc7abcc8b3a50ab74a62e9113ab7a8ebc268aad35bb9"}, + {file = "aiohttp-3.8.4-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9bcb89336efa095ea21b30f9e686763f2be4478f1b0a616969551982c4ee4c3b"}, + {file = "aiohttp-3.8.4-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c08e8ed6fa3d477e501ec9db169bfac8140e830aa372d77e4a43084d8dd91ab"}, + {file = "aiohttp-3.8.4-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c6cd05ea06daca6ad6a4ca3ba7fe7dc5b5de063ff4daec6170ec0f9979f6c332"}, + {file = "aiohttp-3.8.4-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:b7a00a9ed8d6e725b55ef98b1b35c88013245f35f68b1b12c5cd4100dddac333"}, + {file = "aiohttp-3.8.4-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:de04b491d0e5007ee1b63a309956eaed959a49f5bb4e84b26c8f5d49de140fa9"}, + {file = "aiohttp-3.8.4-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:40653609b3bf50611356e6b6554e3a331f6879fa7116f3959b20e3528783e699"}, + {file = "aiohttp-3.8.4-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:dbf3a08a06b3f433013c143ebd72c15cac33d2914b8ea4bea7ac2c23578815d6"}, + {file = "aiohttp-3.8.4-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:854f422ac44af92bfe172d8e73229c270dc09b96535e8a548f99c84f82dde241"}, + {file = "aiohttp-3.8.4-cp37-cp37m-win32.whl", hash = "sha256:aeb29c84bb53a84b1a81c6c09d24cf33bb8432cc5c39979021cc0f98c1292a1a"}, + {file = "aiohttp-3.8.4-cp37-cp37m-win_amd64.whl", hash = "sha256:db3fc6120bce9f446d13b1b834ea5b15341ca9ff3f335e4a951a6ead31105480"}, + {file = "aiohttp-3.8.4-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:fabb87dd8850ef0f7fe2b366d44b77d7e6fa2ea87861ab3844da99291e81e60f"}, + {file = "aiohttp-3.8.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:91f6d540163f90bbaef9387e65f18f73ffd7c79f5225ac3d3f61df7b0d01ad15"}, + {file = "aiohttp-3.8.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:d265f09a75a79a788237d7f9054f929ced2e69eb0bb79de3798c468d8a90f945"}, + {file = "aiohttp-3.8.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3d89efa095ca7d442a6d0cbc755f9e08190ba40069b235c9886a8763b03785da"}, + {file = "aiohttp-3.8.4-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4dac314662f4e2aa5009977b652d9b8db7121b46c38f2073bfeed9f4049732cd"}, + {file = "aiohttp-3.8.4-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fe11310ae1e4cd560035598c3f29d86cef39a83d244c7466f95c27ae04850f10"}, + {file = "aiohttp-3.8.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6ddb2a2026c3f6a68c3998a6c47ab6795e4127315d2e35a09997da21865757f8"}, + {file = "aiohttp-3.8.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e75b89ac3bd27d2d043b234aa7b734c38ba1b0e43f07787130a0ecac1e12228a"}, + {file = "aiohttp-3.8.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6e601588f2b502c93c30cd5a45bfc665faaf37bbe835b7cfd461753068232074"}, + {file = "aiohttp-3.8.4-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a5d794d1ae64e7753e405ba58e08fcfa73e3fad93ef9b7e31112ef3c9a0efb52"}, + {file = "aiohttp-3.8.4-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:a1f4689c9a1462f3df0a1f7e797791cd6b124ddbee2b570d34e7f38ade0e2c71"}, + {file = "aiohttp-3.8.4-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:3032dcb1c35bc330134a5b8a5d4f68c1a87252dfc6e1262c65a7e30e62298275"}, + {file = "aiohttp-3.8.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:8189c56eb0ddbb95bfadb8f60ea1b22fcfa659396ea36f6adcc521213cd7b44d"}, + {file = "aiohttp-3.8.4-cp38-cp38-win32.whl", hash = "sha256:33587f26dcee66efb2fff3c177547bd0449ab7edf1b73a7f5dea1e38609a0c54"}, + {file = "aiohttp-3.8.4-cp38-cp38-win_amd64.whl", hash = "sha256:e595432ac259af2d4630008bf638873d69346372d38255774c0e286951e8b79f"}, + {file = "aiohttp-3.8.4-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:5a7bdf9e57126dc345b683c3632e8ba317c31d2a41acd5800c10640387d193ed"}, + {file = "aiohttp-3.8.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:22f6eab15b6db242499a16de87939a342f5a950ad0abaf1532038e2ce7d31567"}, + {file = "aiohttp-3.8.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:7235604476a76ef249bd64cb8274ed24ccf6995c4a8b51a237005ee7a57e8643"}, + {file = "aiohttp-3.8.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ea9eb976ffdd79d0e893869cfe179a8f60f152d42cb64622fca418cd9b18dc2a"}, + {file = "aiohttp-3.8.4-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:92c0cea74a2a81c4c76b62ea1cac163ecb20fb3ba3a75c909b9fa71b4ad493cf"}, + {file = "aiohttp-3.8.4-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:493f5bc2f8307286b7799c6d899d388bbaa7dfa6c4caf4f97ef7521b9cb13719"}, + {file = "aiohttp-3.8.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0a63f03189a6fa7c900226e3ef5ba4d3bd047e18f445e69adbd65af433add5a2"}, + {file = "aiohttp-3.8.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:10c8cefcff98fd9168cdd86c4da8b84baaa90bf2da2269c6161984e6737bf23e"}, + {file = "aiohttp-3.8.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:bca5f24726e2919de94f047739d0a4fc01372801a3672708260546aa2601bf57"}, + {file = "aiohttp-3.8.4-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:03baa76b730e4e15a45f81dfe29a8d910314143414e528737f8589ec60cf7391"}, + {file = "aiohttp-3.8.4-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:8c29c77cc57e40f84acef9bfb904373a4e89a4e8b74e71aa8075c021ec9078c2"}, + {file = "aiohttp-3.8.4-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:03543dcf98a6619254b409be2d22b51f21ec66272be4ebda7b04e6412e4b2e14"}, + {file = "aiohttp-3.8.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:17b79c2963db82086229012cff93ea55196ed31f6493bb1ccd2c62f1724324e4"}, + {file = "aiohttp-3.8.4-cp39-cp39-win32.whl", hash = "sha256:34ce9f93a4a68d1272d26030655dd1b58ff727b3ed2a33d80ec433561b03d67a"}, + {file = "aiohttp-3.8.4-cp39-cp39-win_amd64.whl", hash = "sha256:41a86a69bb63bb2fc3dc9ad5ea9f10f1c9c8e282b471931be0268ddd09430b04"}, + {file = "aiohttp-3.8.4.tar.gz", hash = "sha256:bf2e1a9162c1e441bf805a1fd166e249d574ca04e03b34f97e2928769e91ab5c"}, +] [package.dependencies] aiosignal = ">=1.1.2" @@ -43,6 +141,10 @@ description = "aiosignal: a list of registered asynchronous callbacks" category = "main" optional = false python-versions = ">=3.7" +files = [ + {file = "aiosignal-1.3.1-py3-none-any.whl", hash = "sha256:f8376fb07dd1e86a584e4fcdec80b36b7f81aac666ebc724e2c090300dd83b17"}, + {file = "aiosignal-1.3.1.tar.gz", hash = "sha256:54cd96e15e1649b75d6c87526a6ff0b6c1b0dd3459f43d9ca11d48c339b68cfc"}, +] [package.dependencies] frozenlist = ">=1.1.0" @@ -54,6 +156,10 @@ description = "ASGI specs, helper code, and adapters" category = "main" optional = false python-versions = ">=3.7" +files = [ + {file = "asgiref-3.6.0-py3-none-any.whl", hash = "sha256:71e68008da809b957b7ee4b43dbccff33d1b23519fb8344e33f049897077afac"}, + {file = "asgiref-3.6.0.tar.gz", hash = "sha256:9567dfe7bd8d3c8c892227827c41cce860b368104c3431da67a0c5a65a949506"}, +] [package.extras] tests = ["mypy (>=0.800)", "pytest", "pytest-asyncio"] @@ -65,6 +171,10 @@ description = "Timeout context manager for asyncio programs" category = "main" optional = false python-versions = ">=3.6" +files = [ + {file = "async-timeout-4.0.2.tar.gz", hash = "sha256:2163e1640ddb52b7a8c80d0a67a08587e5d245cc9c553a74a847056bc2976b15"}, + {file = "async_timeout-4.0.2-py3-none-any.whl", hash = "sha256:8ca1e4fcf50d07413d66d1a5e416e42cfdf5851c981d679a09851a6853383b3c"}, +] [[package]] name = "asyncache" @@ -73,6 +183,10 @@ description = "Helpers to use cachetools with async code." category = "main" optional = false python-versions = ">=3.8,<4.0" +files = [ + {file = "asyncache-0.3.1-py3-none-any.whl", hash = "sha256:ef20a1024d265090dd1e0785c961cf98b9c32cc7d9478973dcf25ac1b80011f5"}, + {file = "asyncache-0.3.1.tar.gz", hash = "sha256:9a1e60a75668e794657489bdea6540ee7e3259c483517b934670db7600bf5035"}, +] [package.dependencies] cachetools = ">=5.2.0,<6.0.0" @@ -84,6 +198,10 @@ description = "Classes Without Boilerplate" category = "main" optional = false python-versions = ">=3.6" +files = [ + {file = "attrs-22.2.0-py3-none-any.whl", hash = "sha256:29e95c7f6778868dbd49170f98f8818f78f3dc5e0e37c0b1f474e3561b240836"}, + {file = "attrs-22.2.0.tar.gz", hash = "sha256:c9227bfc2f01993c03f68db37d1d15c9690188323c067c641f1a35ca58185f99"}, +] [package.extras] cov = ["attrs[tests]", "coverage-enable-subprocess", "coverage[toml] (>=5.3)"] @@ -99,6 +217,10 @@ description = "Error-handling functions for boto3/botocore" category = "main" optional = false python-versions = ">=3.7,<4" +files = [ + {file = "aws_error_utils-2.7.0-py3-none-any.whl", hash = "sha256:fc6e556340a14af58e19bc60faf635d3eea9abbacb7f06e54a908e8234c60a50"}, + {file = "aws_error_utils-2.7.0.tar.gz", hash = "sha256:07107af2a2c26706cd9525b7ffbed43f2d07b50d27e39f9e9156c11b2e993c97"}, +] [package.dependencies] botocore = "*" @@ -110,6 +232,20 @@ description = "The uncompromising code formatter." category = "main" optional = false python-versions = ">=3.7" +files = [ + {file = "black-22.12.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9eedd20838bd5d75b80c9f5487dbcb06836a43833a37846cf1d8c1cc01cef59d"}, + {file = "black-22.12.0-cp310-cp310-win_amd64.whl", hash = "sha256:159a46a4947f73387b4d83e87ea006dbb2337eab6c879620a3ba52699b1f4351"}, + {file = "black-22.12.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d30b212bffeb1e252b31dd269dfae69dd17e06d92b87ad26e23890f3efea366f"}, + {file = "black-22.12.0-cp311-cp311-win_amd64.whl", hash = "sha256:7412e75863aa5c5411886804678b7d083c7c28421210180d67dfd8cf1221e1f4"}, + {file = "black-22.12.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c116eed0efb9ff870ded8b62fe9f28dd61ef6e9ddd28d83d7d264a38417dcee2"}, + {file = "black-22.12.0-cp37-cp37m-win_amd64.whl", hash = "sha256:1f58cbe16dfe8c12b7434e50ff889fa479072096d79f0a7f25e4ab8e94cd8350"}, + {file = "black-22.12.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:77d86c9f3db9b1bf6761244bc0b3572a546f5fe37917a044e02f3166d5aafa7d"}, + {file = "black-22.12.0-cp38-cp38-win_amd64.whl", hash = "sha256:82d9fe8fee3401e02e79767016b4907820a7dc28d70d137eb397b92ef3cc5bfc"}, + {file = "black-22.12.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:101c69b23df9b44247bd88e1d7e90154336ac4992502d4197bdac35dd7ee3320"}, + {file = "black-22.12.0-cp39-cp39-win_amd64.whl", hash = "sha256:559c7a1ba9a006226f09e4916060982fd27334ae1998e7a38b3f33a37f7a2148"}, + {file = "black-22.12.0-py3-none-any.whl", hash = "sha256:436cc9167dd28040ad90d3b404aec22cedf24a6e4d7de221bec2730ec0c97bcf"}, + {file = "black-22.12.0.tar.gz", hash = "sha256:229351e5a18ca30f447bf724d007f890f97e13af070bb6ad4c0a441cd7596a2f"}, +] [package.dependencies] click = ">=8.0.0" @@ -132,6 +268,10 @@ description = "The AWS SDK for Python" category = "main" optional = false python-versions = ">= 3.7" +files = [ + {file = "boto3-1.26.89-py3-none-any.whl", hash = "sha256:09929b24aaec4951e435d53d31f800e2ca52244af049dc11e5385ce062e106e9"}, + {file = "boto3-1.26.89.tar.gz", hash = "sha256:e819812f16fab46fadf9b2853a46aaa126e108e7f038502dde555ebbbfc80133"}, +] [package.dependencies] botocore = ">=1.29.89,<1.30.0" @@ -148,6 +288,10 @@ description = "Low-level, data-driven core of boto 3." category = "main" optional = false python-versions = ">= 3.7" +files = [ + {file = "botocore-1.29.89-py3-none-any.whl", hash = "sha256:b757e59feca82ac62934f658918133116b4535cf66f1d72ff4935fa24e522527"}, + {file = "botocore-1.29.89.tar.gz", hash = "sha256:ac8da651f73a9d5759cf5d80beba68deda407e56aaaeb10d249fd557459f3b56"}, +] [package.dependencies] jmespath = ">=0.7.1,<2.0.0" @@ -164,6 +308,10 @@ description = "Extensible memoizing collections and decorators" category = "main" optional = false python-versions = "~=3.7" +files = [ + {file = "cachetools-5.3.0-py3-none-any.whl", hash = "sha256:429e1a1e845c008ea6c85aa35d4b98b65d6a9763eeef3e37e92728a12d1de9d4"}, + {file = "cachetools-5.3.0.tar.gz", hash = "sha256:13dfddc7b8df938c21a940dfa6557ce6e94a2f1cdfa58eb90c805721d58f2c14"}, +] [[package]] name = "certifi" @@ -172,6 +320,10 @@ description = "Python package for providing Mozilla's CA Bundle." category = "main" optional = false python-versions = ">=3.6" +files = [ + {file = "certifi-2022.12.7-py3-none-any.whl", hash = "sha256:4ad3232f5e926d6718ec31cfc1fcadfde020920e278684144551c91769c7bc18"}, + {file = "certifi-2022.12.7.tar.gz", hash = "sha256:35824b4c3a97115964b408844d64aa14db1cc518f6562e8d7261699d1350a9e3"}, +] [[package]] name = "cffi" @@ -180,6 +332,72 @@ description = "Foreign Function Interface for Python calling C code." category = "main" optional = false python-versions = "*" +files = [ + {file = "cffi-1.15.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:a66d3508133af6e8548451b25058d5812812ec3798c886bf38ed24a98216fab2"}, + {file = "cffi-1.15.1-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:470c103ae716238bbe698d67ad020e1db9d9dba34fa5a899b5e21577e6d52ed2"}, + {file = "cffi-1.15.1-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:9ad5db27f9cabae298d151c85cf2bad1d359a1b9c686a275df03385758e2f914"}, + {file = "cffi-1.15.1-cp27-cp27m-win32.whl", hash = "sha256:b3bbeb01c2b273cca1e1e0c5df57f12dce9a4dd331b4fa1635b8bec26350bde3"}, + {file = "cffi-1.15.1-cp27-cp27m-win_amd64.whl", hash = "sha256:e00b098126fd45523dd056d2efba6c5a63b71ffe9f2bbe1a4fe1716e1d0c331e"}, + {file = "cffi-1.15.1-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:d61f4695e6c866a23a21acab0509af1cdfd2c013cf256bbf5b6b5e2695827162"}, + {file = "cffi-1.15.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:ed9cb427ba5504c1dc15ede7d516b84757c3e3d7868ccc85121d9310d27eed0b"}, + {file = "cffi-1.15.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:39d39875251ca8f612b6f33e6b1195af86d1b3e60086068be9cc053aa4376e21"}, + {file = "cffi-1.15.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:285d29981935eb726a4399badae8f0ffdff4f5050eaa6d0cfc3f64b857b77185"}, + {file = "cffi-1.15.1-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3eb6971dcff08619f8d91607cfc726518b6fa2a9eba42856be181c6d0d9515fd"}, + {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:21157295583fe8943475029ed5abdcf71eb3911894724e360acff1d61c1d54bc"}, + {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5635bd9cb9731e6d4a1132a498dd34f764034a8ce60cef4f5319c0541159392f"}, + {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2012c72d854c2d03e45d06ae57f40d78e5770d252f195b93f581acf3ba44496e"}, + {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd86c085fae2efd48ac91dd7ccffcfc0571387fe1193d33b6394db7ef31fe2a4"}, + {file = "cffi-1.15.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:fa6693661a4c91757f4412306191b6dc88c1703f780c8234035eac011922bc01"}, + {file = "cffi-1.15.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:59c0b02d0a6c384d453fece7566d1c7e6b7bae4fc5874ef2ef46d56776d61c9e"}, + {file = "cffi-1.15.1-cp310-cp310-win32.whl", hash = "sha256:cba9d6b9a7d64d4bd46167096fc9d2f835e25d7e4c121fb2ddfc6528fb0413b2"}, + {file = "cffi-1.15.1-cp310-cp310-win_amd64.whl", hash = "sha256:ce4bcc037df4fc5e3d184794f27bdaab018943698f4ca31630bc7f84a7b69c6d"}, + {file = "cffi-1.15.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3d08afd128ddaa624a48cf2b859afef385b720bb4b43df214f85616922e6a5ac"}, + {file = "cffi-1.15.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3799aecf2e17cf585d977b780ce79ff0dc9b78d799fc694221ce814c2c19db83"}, + {file = "cffi-1.15.1-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a591fe9e525846e4d154205572a029f653ada1a78b93697f3b5a8f1f2bc055b9"}, + {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3548db281cd7d2561c9ad9984681c95f7b0e38881201e157833a2342c30d5e8c"}, + {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:91fc98adde3d7881af9b59ed0294046f3806221863722ba7d8d120c575314325"}, + {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:94411f22c3985acaec6f83c6df553f2dbe17b698cc7f8ae751ff2237d96b9e3c"}, + {file = "cffi-1.15.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:03425bdae262c76aad70202debd780501fabeaca237cdfddc008987c0e0f59ef"}, + {file = "cffi-1.15.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:cc4d65aeeaa04136a12677d3dd0b1c0c94dc43abac5860ab33cceb42b801c1e8"}, + {file = "cffi-1.15.1-cp311-cp311-win32.whl", hash = "sha256:a0f100c8912c114ff53e1202d0078b425bee3649ae34d7b070e9697f93c5d52d"}, + {file = "cffi-1.15.1-cp311-cp311-win_amd64.whl", hash = "sha256:04ed324bda3cda42b9b695d51bb7d54b680b9719cfab04227cdd1e04e5de3104"}, + {file = "cffi-1.15.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50a74364d85fd319352182ef59c5c790484a336f6db772c1a9231f1c3ed0cbd7"}, + {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e263d77ee3dd201c3a142934a086a4450861778baaeeb45db4591ef65550b0a6"}, + {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cec7d9412a9102bdc577382c3929b337320c4c4c4849f2c5cdd14d7368c5562d"}, + {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4289fc34b2f5316fbb762d75362931e351941fa95fa18789191b33fc4cf9504a"}, + {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:173379135477dc8cac4bc58f45db08ab45d228b3363adb7af79436135d028405"}, + {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:6975a3fac6bc83c4a65c9f9fcab9e47019a11d3d2cf7f3c0d03431bf145a941e"}, + {file = "cffi-1.15.1-cp36-cp36m-win32.whl", hash = "sha256:2470043b93ff09bf8fb1d46d1cb756ce6132c54826661a32d4e4d132e1977adf"}, + {file = "cffi-1.15.1-cp36-cp36m-win_amd64.whl", hash = "sha256:30d78fbc8ebf9c92c9b7823ee18eb92f2e6ef79b45ac84db507f52fbe3ec4497"}, + {file = "cffi-1.15.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:198caafb44239b60e252492445da556afafc7d1e3ab7a1fb3f0584ef6d742375"}, + {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5ef34d190326c3b1f822a5b7a45f6c4535e2f47ed06fec77d3d799c450b2651e"}, + {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8102eaf27e1e448db915d08afa8b41d6c7ca7a04b7d73af6514df10a3e74bd82"}, + {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5df2768244d19ab7f60546d0c7c63ce1581f7af8b5de3eb3004b9b6fc8a9f84b"}, + {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a8c4917bd7ad33e8eb21e9a5bbba979b49d9a97acb3a803092cbc1133e20343c"}, + {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0e2642fe3142e4cc4af0799748233ad6da94c62a8bec3a6648bf8ee68b1c7426"}, + {file = "cffi-1.15.1-cp37-cp37m-win32.whl", hash = "sha256:e229a521186c75c8ad9490854fd8bbdd9a0c9aa3a524326b55be83b54d4e0ad9"}, + {file = "cffi-1.15.1-cp37-cp37m-win_amd64.whl", hash = "sha256:a0b71b1b8fbf2b96e41c4d990244165e2c9be83d54962a9a1d118fd8657d2045"}, + {file = "cffi-1.15.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:320dab6e7cb2eacdf0e658569d2575c4dad258c0fcc794f46215e1e39f90f2c3"}, + {file = "cffi-1.15.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1e74c6b51a9ed6589199c787bf5f9875612ca4a8a0785fb2d4a84429badaf22a"}, + {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5c84c68147988265e60416b57fc83425a78058853509c1b0629c180094904a5"}, + {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3b926aa83d1edb5aa5b427b4053dc420ec295a08e40911296b9eb1b6170f6cca"}, + {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:87c450779d0914f2861b8526e035c5e6da0a3199d8f1add1a665e1cbc6fc6d02"}, + {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4f2c9f67e9821cad2e5f480bc8d83b8742896f1242dba247911072d4fa94c192"}, + {file = "cffi-1.15.1-cp38-cp38-win32.whl", hash = "sha256:8b7ee99e510d7b66cdb6c593f21c043c248537a32e0bedf02e01e9553a172314"}, + {file = "cffi-1.15.1-cp38-cp38-win_amd64.whl", hash = "sha256:00a9ed42e88df81ffae7a8ab6d9356b371399b91dbdf0c3cb1e84c03a13aceb5"}, + {file = "cffi-1.15.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:54a2db7b78338edd780e7ef7f9f6c442500fb0d41a5a4ea24fff1c929d5af585"}, + {file = "cffi-1.15.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:fcd131dd944808b5bdb38e6f5b53013c5aa4f334c5cad0c72742f6eba4b73db0"}, + {file = "cffi-1.15.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7473e861101c9e72452f9bf8acb984947aa1661a7704553a9f6e4baa5ba64415"}, + {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6c9a799e985904922a4d207a94eae35c78ebae90e128f0c4e521ce339396be9d"}, + {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3bcde07039e586f91b45c88f8583ea7cf7a0770df3a1649627bf598332cb6984"}, + {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:33ab79603146aace82c2427da5ca6e58f2b3f2fb5da893ceac0c42218a40be35"}, + {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d598b938678ebf3c67377cdd45e09d431369c3b1a5b331058c338e201f12b27"}, + {file = "cffi-1.15.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:db0fbb9c62743ce59a9ff687eb5f4afbe77e5e8403d6697f7446e5f609976f76"}, + {file = "cffi-1.15.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:98d85c6a2bef81588d9227dde12db8a7f47f639f4a17c9ae08e773aa9c697bf3"}, + {file = "cffi-1.15.1-cp39-cp39-win32.whl", hash = "sha256:40f4774f5a9d4f5e344f31a32b5096977b5d48560c5592e2f3d2c4374bd543ee"}, + {file = "cffi-1.15.1-cp39-cp39-win_amd64.whl", hash = "sha256:70df4e3b545a17496c9b3f41f5115e69a4f2e77e94e1d2a8e1070bc0c38c8a3c"}, + {file = "cffi-1.15.1.tar.gz", hash = "sha256:d400bfb9a37b1351253cb402671cea7e89bdecc294e8016a707f6d1d8ac934f9"}, +] [package.dependencies] pycparser = "*" @@ -191,6 +409,10 @@ description = "Validate configuration and produce human readable error messages. category = "main" optional = false python-versions = ">=3.6.1" +files = [ + {file = "cfgv-3.3.1-py2.py3-none-any.whl", hash = "sha256:c6a0883f3917a037485059700b9e75da2464e6c27051014ad85ba6aaa5884426"}, + {file = "cfgv-3.3.1.tar.gz", hash = "sha256:f5a830efb9ce7a445376bb66ec94c638a9787422f96264c98edc6bdeed8ab736"}, +] [[package]] name = "charset-normalizer" @@ -199,1432 +421,7 @@ description = "The Real First Universal Charset Detector. Open, modern and activ category = "main" optional = false python-versions = ">=3.7.0" - -[[package]] -name = "click" -version = "8.1.3" -description = "Composable command line interface toolkit" -category = "main" -optional = false -python-versions = ">=3.7" - -[package.dependencies] -colorama = {version = "*", markers = "platform_system == \"Windows\""} - -[[package]] -name = "colorama" -version = "0.4.6" -description = "Cross-platform colored terminal text." -category = "main" -optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" - -[[package]] -name = "coverage" -version = "7.2.1" -description = "Code coverage measurement for Python" -category = "main" -optional = false -python-versions = ">=3.7" - -[package.dependencies] -tomli = {version = "*", optional = true, markers = "python_full_version <= \"3.11.0a6\" and extra == \"toml\""} - -[package.extras] -toml = ["tomli"] - -[[package]] -name = "cryptography" -version = "39.0.2" -description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers." -category = "main" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -cffi = ">=1.12" - -[package.extras] -docs = ["sphinx (>=5.3.0)", "sphinx-rtd-theme (>=1.1.1)"] -docstest = ["pyenchant (>=1.6.11)", "sphinxcontrib-spelling (>=4.0.1)", "twine (>=1.12.0)"] -pep8test = ["black", "check-manifest", "mypy", "ruff", "types-pytz", "types-requests"] -sdist = ["setuptools-rust (>=0.11.4)"] -ssh = ["bcrypt (>=3.1.5)"] -test = ["hypothesis (>=1.11.4,!=3.79.2)", "iso8601", "pretend", "pytest (>=6.2.0)", "pytest-benchmark", "pytest-cov", "pytest-shard (>=0.1.2)", "pytest-subtests", "pytest-xdist", "pytz"] -test-randomorder = ["pytest-randomly"] -tox = ["tox"] - -[[package]] -name = "dateparser" -version = "1.1.7" -description = "Date parsing library designed to parse dates from HTML pages" -category = "main" -optional = false -python-versions = ">=3.7" - -[package.dependencies] -python-dateutil = "*" -pytz = "*" -regex = "<2019.02.19 || >2019.02.19,<2021.8.27 || >2021.8.27" -tzlocal = "*" - -[package.extras] -calendars = ["convertdate", "hijri-converter"] -fasttext = ["fasttext"] -langdetect = ["langdetect"] - -[[package]] -name = "deepdiff" -version = "5.8.1" -description = "Deep Difference and Search of any Python object/data." -category = "main" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -ordered-set = ">=4.1.0,<4.2.0" - -[package.extras] -cli = ["clevercsv (==0.7.1)", "click (==8.0.3)", "pyyaml (==5.4.1)", "toml (==0.10.2)"] - -[[package]] -name = "deprecated" -version = "1.2.13" -description = "Python @deprecated decorator to deprecate old python classes, functions or methods." -category = "main" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" - -[package.dependencies] -wrapt = ">=1.10,<2" - -[package.extras] -dev = ["PyTest", "PyTest (<5)", "PyTest-Cov", "PyTest-Cov (<2.6)", "bump2version (<1)", "configparser (<5)", "importlib-metadata (<3)", "importlib-resources (<4)", "sphinx (<2)", "sphinxcontrib-websupport (<2)", "tox", "zipp (<2)"] - -[[package]] -name = "distlib" -version = "0.3.6" -description = "Distribution utilities" -category = "main" -optional = false -python-versions = "*" - -[[package]] -name = "ecdsa" -version = "0.18.0" -description = "ECDSA cryptographic signature library (pure python)" -category = "main" -optional = false -python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" - -[package.dependencies] -six = ">=1.9.0" - -[package.extras] -gmpy = ["gmpy"] -gmpy2 = ["gmpy2"] - -[[package]] -name = "exceptiongroup" -version = "1.1.1" -description = "Backport of PEP 654 (exception groups)" -category = "main" -optional = false -python-versions = ">=3.7" - -[package.extras] -test = ["pytest (>=6)"] - -[[package]] -name = "faker" -version = "17.6.0" -description = "Faker is a Python package that generates fake data for you." -category = "main" -optional = false -python-versions = ">=3.7" - -[package.dependencies] -python-dateutil = ">=2.4" - -[[package]] -name = "filelock" -version = "3.9.0" -description = "A platform independent file lock." -category = "main" -optional = false -python-versions = ">=3.7" - -[package.extras] -docs = ["furo (>=2022.12.7)", "sphinx (>=5.3)", "sphinx-autodoc-typehints (>=1.19.5)"] -testing = ["covdefaults (>=2.2.2)", "coverage (>=7.0.1)", "pytest (>=7.2)", "pytest-cov (>=4)", "pytest-timeout (>=2.1)"] - -[[package]] -name = "flake8" -version = "5.0.4" -description = "the modular source code checker: pep8 pyflakes and co" -category = "main" -optional = false -python-versions = ">=3.6.1" - -[package.dependencies] -mccabe = ">=0.7.0,<0.8.0" -pycodestyle = ">=2.9.0,<2.10.0" -pyflakes = ">=2.5.0,<2.6.0" - -[[package]] -name = "flatdict" -version = "4.0.1" -description = "Python module for interacting with nested dicts as a single level dict with delimited keys." -category = "main" -optional = false -python-versions = "*" - -[[package]] -name = "frozenlist" -version = "1.3.3" -description = "A list-like structure which implements collections.abc.MutableSequence" -category = "main" -optional = false -python-versions = ">=3.7" - -[[package]] -name = "gitdb" -version = "4.0.10" -description = "Git Object Database" -category = "main" -optional = false -python-versions = ">=3.7" - -[package.dependencies] -smmap = ">=3.0.1,<6" - -[[package]] -name = "gitpython" -version = "3.1.31" -description = "GitPython is a Python library used to interact with Git repositories" -category = "main" -optional = false -python-versions = ">=3.7" - -[package.dependencies] -gitdb = ">=4.0.1,<5" - -[[package]] -name = "google-api-core" -version = "2.11.0" -description = "Google API client core library" -category = "main" -optional = false -python-versions = ">=3.7" - -[package.dependencies] -google-auth = ">=2.14.1,<3.0dev" -googleapis-common-protos = ">=1.56.2,<2.0dev" -protobuf = ">=3.19.5,<3.20.0 || >3.20.0,<3.20.1 || >3.20.1,<4.21.0 || >4.21.0,<4.21.1 || >4.21.1,<4.21.2 || >4.21.2,<4.21.3 || >4.21.3,<4.21.4 || >4.21.4,<4.21.5 || >4.21.5,<5.0.0dev" -requests = ">=2.18.0,<3.0.0dev" - -[package.extras] -grpc = ["grpcio (>=1.33.2,<2.0dev)", "grpcio (>=1.49.1,<2.0dev)", "grpcio-status (>=1.33.2,<2.0dev)", "grpcio-status (>=1.49.1,<2.0dev)"] -grpcgcp = ["grpcio-gcp (>=0.2.2,<1.0dev)"] -grpcio-gcp = ["grpcio-gcp (>=0.2.2,<1.0dev)"] - -[[package]] -name = "google-api-python-client" -version = "2.80.0" -description = "Google API Client Library for Python" -category = "main" -optional = false -python-versions = ">=3.7" - -[package.dependencies] -google-api-core = ">=1.31.5,<2.0.0 || >2.3.0,<3.0.0dev" -google-auth = ">=1.19.0,<3.0.0dev" -google-auth-httplib2 = ">=0.1.0" -httplib2 = ">=0.15.0,<1dev" -uritemplate = ">=3.0.1,<5" - -[[package]] -name = "google-auth" -version = "2.16.2" -description = "Google Authentication Library" -category = "main" -optional = false -python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*" - -[package.dependencies] -cachetools = ">=2.0.0,<6.0" -pyasn1-modules = ">=0.2.1" -rsa = {version = ">=3.1.4,<5", markers = "python_version >= \"3.6\""} -six = ">=1.9.0" - -[package.extras] -aiohttp = ["aiohttp (>=3.6.2,<4.0.0dev)", "requests (>=2.20.0,<3.0.0dev)"] -enterprise-cert = ["cryptography (==36.0.2)", "pyopenssl (==22.0.0)"] -pyopenssl = ["cryptography (>=38.0.3)", "pyopenssl (>=20.0.0)"] -reauth = ["pyu2f (>=0.1.5)"] -requests = ["requests (>=2.20.0,<3.0.0dev)"] - -[[package]] -name = "google-auth-httplib2" -version = "0.1.0" -description = "Google Authentication Library: httplib2 transport" -category = "main" -optional = false -python-versions = "*" - -[package.dependencies] -google-auth = "*" -httplib2 = ">=0.15.0" -six = "*" - -[[package]] -name = "googleapis-common-protos" -version = "1.58.0" -description = "Common protobufs used in Google APIs" -category = "main" -optional = false -python-versions = ">=3.7" - -[package.dependencies] -protobuf = ">=3.19.5,<3.20.0 || >3.20.0,<3.20.1 || >3.20.1,<4.21.1 || >4.21.1,<4.21.2 || >4.21.2,<4.21.3 || >4.21.3,<4.21.4 || >4.21.4,<4.21.5 || >4.21.5,<5.0.0dev" - -[package.extras] -grpc = ["grpcio (>=1.44.0,<2.0.0dev)"] - -[[package]] -name = "httplib2" -version = "0.21.0" -description = "A comprehensive HTTP client library." -category = "main" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" - -[package.dependencies] -pyparsing = {version = ">=2.4.2,<3.0.0 || >3.0.0,<3.0.1 || >3.0.1,<3.0.2 || >3.0.2,<3.0.3 || >3.0.3,<4", markers = "python_version > \"3.0\""} - -[[package]] -name = "identify" -version = "2.5.20" -description = "File identification library for Python" -category = "main" -optional = false -python-versions = ">=3.7" - -[package.extras] -license = ["ukkonen"] - -[[package]] -name = "idna" -version = "3.4" -description = "Internationalized Domain Names in Applications (IDNA)" -category = "main" -optional = false -python-versions = ">=3.5" - -[[package]] -name = "iniconfig" -version = "2.0.0" -description = "brain-dead simple config-ini parsing" -category = "main" -optional = false -python-versions = ">=3.7" - -[[package]] -name = "isort" -version = "5.12.0" -description = "A Python utility / library to sort Python imports." -category = "main" -optional = false -python-versions = ">=3.8.0" - -[package.extras] -colors = ["colorama (>=0.4.3)"] -pipfile-deprecated-finder = ["pip-shims (>=0.5.2)", "pipreqs", "requirementslib"] -plugins = ["setuptools"] -requirements-deprecated-finder = ["pip-api", "pipreqs"] - -[[package]] -name = "jinja2" -version = "3.1.2" -description = "A very fast and expressive template engine." -category = "main" -optional = false -python-versions = ">=3.7" - -[package.dependencies] -MarkupSafe = ">=2.0" - -[package.extras] -i18n = ["Babel (>=2.7)"] - -[[package]] -name = "jmespath" -version = "1.0.1" -description = "JSON Matching Expressions" -category = "main" -optional = false -python-versions = ">=3.7" - -[[package]] -name = "jsonschema2md2" -version = "0.6.0" -description = "Convert JSON Schema to human-readable Markdown documentation" -category = "main" -optional = false -python-versions = ">=3.6,<4.0" - -[package.dependencies] -click = ">=7" -PyYAML = ">=5.1" - -[[package]] -name = "markupsafe" -version = "2.1.2" -description = "Safely add untrusted strings to HTML/XML markup." -category = "main" -optional = false -python-versions = ">=3.7" - -[[package]] -name = "mccabe" -version = "0.7.0" -description = "McCabe checker, plugin for flake8" -category = "main" -optional = false -python-versions = ">=3.6" - -[[package]] -name = "mock" -version = "5.0.1" -description = "Rolling backport of unittest.mock for all Pythons" -category = "dev" -optional = false -python-versions = ">=3.6" - -[package.extras] -build = ["blurb", "twine", "wheel"] -docs = ["sphinx"] -test = ["pytest", "pytest-cov"] - -[[package]] -name = "mock-generator" -version = "2.4.0" -description = "Generate python mocks and assertions quickly" -category = "dev" -optional = false -python-versions = ">=3.7" - -[package.dependencies] -mock = ">=3.0.5" -pyperclip = "1.8.2" - -[[package]] -name = "multidict" -version = "6.0.4" -description = "multidict implementation" -category = "main" -optional = false -python-versions = ">=3.7" - -[[package]] -name = "mypy-extensions" -version = "1.0.0" -description = "Type system extensions for programs checked with the mypy type checker." -category = "main" -optional = false -python-versions = ">=3.5" - -[[package]] -name = "nodeenv" -version = "1.7.0" -description = "Node.js virtual environment builder" -category = "main" -optional = false -python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*" - -[package.dependencies] -setuptools = "*" - -[[package]] -name = "okta" -version = "2.8.0" -description = "Python SDK for the Okta Management API" -category = "main" -optional = false -python-versions = ">=3.7" - -[package.dependencies] -aenum = "*" -aiohttp = "*" -flatdict = "*" -pycryptodome = "*" -pydash = "*" -python-jose = "*" -pyyaml = "*" -xmltodict = "*" -yarl = "*" - -[[package]] -name = "ordered-set" -version = "4.1.0" -description = "An OrderedSet is a custom MutableSet that remembers its order, so that every" -category = "main" -optional = false -python-versions = ">=3.7" - -[package.extras] -dev = ["black", "mypy", "pytest"] - -[[package]] -name = "packaging" -version = "23.0" -description = "Core utilities for Python packages" -category = "main" -optional = false -python-versions = ">=3.7" - -[[package]] -name = "pathspec" -version = "0.11.0" -description = "Utility library for gitignore style pattern matching of file paths." -category = "main" -optional = false -python-versions = ">=3.7" - -[[package]] -name = "platformdirs" -version = "3.1.1" -description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." -category = "main" -optional = false -python-versions = ">=3.7" - -[package.extras] -docs = ["furo (>=2022.12.7)", "proselint (>=0.13)", "sphinx (>=6.1.3)", "sphinx-autodoc-typehints (>=1.22,!=1.23.4)"] -test = ["appdirs (==1.4.4)", "covdefaults (>=2.2.2)", "pytest (>=7.2.1)", "pytest-cov (>=4)", "pytest-mock (>=3.10)"] - -[[package]] -name = "pluggy" -version = "1.0.0" -description = "plugin and hook calling mechanisms for python" -category = "main" -optional = false -python-versions = ">=3.6" - -[package.extras] -dev = ["pre-commit", "tox"] -testing = ["pytest", "pytest-benchmark"] - -[[package]] -name = "pre-commit" -version = "2.21.0" -description = "A framework for managing and maintaining multi-language pre-commit hooks." -category = "main" -optional = false -python-versions = ">=3.7" - -[package.dependencies] -cfgv = ">=2.0.0" -identify = ">=1.0.0" -nodeenv = ">=0.11.1" -pyyaml = ">=5.1" -virtualenv = ">=20.10.0" - -[[package]] -name = "prompt-toolkit" -version = "3.0.38" -description = "Library for building powerful interactive command lines in Python" -category = "main" -optional = false -python-versions = ">=3.7.0" - -[package.dependencies] -wcwidth = "*" - -[[package]] -name = "protobuf" -version = "4.22.1" -description = "" -category = "main" -optional = false -python-versions = ">=3.7" - -[[package]] -name = "pyasn1" -version = "0.4.8" -description = "ASN.1 types and codecs" -category = "main" -optional = false -python-versions = "*" - -[[package]] -name = "pyasn1-modules" -version = "0.2.8" -description = "A collection of ASN.1-based protocols modules." -category = "main" -optional = false -python-versions = "*" - -[package.dependencies] -pyasn1 = ">=0.4.6,<0.5.0" - -[[package]] -name = "pycodestyle" -version = "2.9.1" -description = "Python style guide checker" -category = "main" -optional = false -python-versions = ">=3.6" - -[[package]] -name = "pycparser" -version = "2.21" -description = "C parser in Python" -category = "main" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" - -[[package]] -name = "pycryptodome" -version = "3.17" -description = "Cryptographic library for Python" -category = "main" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" - -[[package]] -name = "pydantic" -version = "1.10.6" -description = "Data validation and settings management using python type hints" -category = "main" -optional = false -python-versions = ">=3.7" - -[package.dependencies] -typing-extensions = ">=4.2.0" - -[package.extras] -dotenv = ["python-dotenv (>=0.10.4)"] -email = ["email-validator (>=1.0.3)"] - -[[package]] -name = "pydantic-factories" -version = "1.17.2" -description = "Mock data generation for pydantic based models and python dataclasses" -category = "main" -optional = false -python-versions = ">=3.8,<4.0" - -[package.dependencies] -faker = "*" -pydantic = ">=1.10.0" -typing-extensions = "*" - -[[package]] -name = "pydash" -version = "6.0.2" -description = "The kitchen sink of Python utility libraries for doing \"stuff\" in a functional way. Based on the Lo-Dash Javascript library." -category = "main" -optional = false -python-versions = ">=3.7" - -[package.extras] -dev = ["Sphinx", "black", "build", "coverage", "docformatter", "flake8", "flake8-black", "flake8-bugbear", "flake8-isort", "importlib-metadata (<5)", "invoke", "isort", "pylint", "pytest", "pytest-cov", "sphinx-rtd-theme", "tox", "twine", "wheel"] - -[[package]] -name = "pyflakes" -version = "2.5.0" -description = "passive checker of Python programs" -category = "main" -optional = false -python-versions = ">=3.6" - -[[package]] -name = "pygithub" -version = "1.57" -description = "Use the full Github API v3" -category = "main" -optional = false -python-versions = ">=3.7" - -[package.dependencies] -deprecated = "*" -pyjwt = ">=2.4.0" -pynacl = ">=1.4.0" -requests = ">=2.14.0" - -[package.extras] -integrations = ["cryptography"] - -[[package]] -name = "pyjwt" -version = "2.6.0" -description = "JSON Web Token implementation in Python" -category = "main" -optional = false -python-versions = ">=3.7" - -[package.extras] -crypto = ["cryptography (>=3.4.0)"] -dev = ["coverage[toml] (==5.0.4)", "cryptography (>=3.4.0)", "pre-commit", "pytest (>=6.0.0,<7.0.0)", "sphinx (>=4.5.0,<5.0.0)", "sphinx-rtd-theme", "zope.interface"] -docs = ["sphinx (>=4.5.0,<5.0.0)", "sphinx-rtd-theme", "zope.interface"] -tests = ["coverage[toml] (==5.0.4)", "pytest (>=6.0.0,<7.0.0)"] - -[[package]] -name = "pynacl" -version = "1.5.0" -description = "Python binding to the Networking and Cryptography (NaCl) library" -category = "main" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -cffi = ">=1.4.1" - -[package.extras] -docs = ["sphinx (>=1.6.5)", "sphinx_rtd_theme"] -tests = ["hypothesis (>=3.27.0)", "pytest (>=3.2.1,!=3.3.0)"] - -[[package]] -name = "pyparsing" -version = "3.0.9" -description = "pyparsing module - Classes and methods to define and execute parsing grammars" -category = "main" -optional = false -python-versions = ">=3.6.8" - -[package.extras] -diagrams = ["jinja2", "railroad-diagrams"] - -[[package]] -name = "pyperclip" -version = "1.8.2" -description = "A cross-platform clipboard module for Python. (Only handles plain text for now.)" -category = "dev" -optional = false -python-versions = "*" - -[[package]] -name = "pytest" -version = "7.2.2" -description = "pytest: simple powerful testing with Python" -category = "main" -optional = false -python-versions = ">=3.7" - -[package.dependencies] -attrs = ">=19.2.0" -colorama = {version = "*", markers = "sys_platform == \"win32\""} -exceptiongroup = {version = ">=1.0.0rc8", markers = "python_version < \"3.11\""} -iniconfig = "*" -packaging = "*" -pluggy = ">=0.12,<2.0" -tomli = {version = ">=1.0.0", markers = "python_version < \"3.11\""} - -[package.extras] -testing = ["argcomplete", "hypothesis (>=3.56)", "mock", "nose", "pygments (>=2.7.2)", "requests", "xmlschema"] - -[[package]] -name = "pytest-asyncio" -version = "0.20.3" -description = "Pytest support for asyncio" -category = "main" -optional = false -python-versions = ">=3.7" - -[package.dependencies] -pytest = ">=6.1.0" - -[package.extras] -docs = ["sphinx (>=5.3)", "sphinx-rtd-theme (>=1.0)"] -testing = ["coverage (>=6.2)", "flaky (>=3.5.0)", "hypothesis (>=5.7.1)", "mypy (>=0.931)", "pytest-trio (>=0.7.0)"] - -[[package]] -name = "pytest-cov" -version = "4.0.0" -description = "Pytest plugin for measuring coverage." -category = "main" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -coverage = {version = ">=5.2.1", extras = ["toml"]} -pytest = ">=4.6" - -[package.extras] -testing = ["fields", "hunter", "process-tests", "pytest-xdist", "six", "virtualenv"] - -[[package]] -name = "pytest-mock" -version = "3.10.0" -description = "Thin-wrapper around the mock package for easier use with pytest" -category = "main" -optional = false -python-versions = ">=3.7" - -[package.dependencies] -pytest = ">=5.0" - -[package.extras] -dev = ["pre-commit", "pytest-asyncio", "tox"] - -[[package]] -name = "pytest-mock-generator" -version = "1.2.0" -description = "A pytest fixture wrapper for https://pypi.org/project/mock-generator" -category = "dev" -optional = false -python-versions = ">=3.7,<4.0" - -[package.dependencies] -mock-generator = ">=2.4,<3.0" - -[[package]] -name = "python-dateutil" -version = "2.8.2" -description = "Extensions to the standard Python datetime module" -category = "main" -optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" - -[package.dependencies] -six = ">=1.5" - -[[package]] -name = "python-jose" -version = "3.3.0" -description = "JOSE implementation in Python" -category = "main" -optional = false -python-versions = "*" - -[package.dependencies] -ecdsa = "!=0.15" -pyasn1 = "*" -rsa = "*" - -[package.extras] -cryptography = ["cryptography (>=3.4.0)"] -pycrypto = ["pyasn1", "pycrypto (>=2.6.0,<2.7.0)"] -pycryptodome = ["pyasn1", "pycryptodome (>=3.3.1,<4.0.0)"] - -[[package]] -name = "pytz" -version = "2022.7.1" -description = "World timezone definitions, modern and historical" -category = "main" -optional = false -python-versions = "*" - -[[package]] -name = "pytz-deprecation-shim" -version = "0.1.0.post0" -description = "Shims to make deprecation of pytz easier" -category = "main" -optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" - -[package.dependencies] -tzdata = {version = "*", markers = "python_version >= \"3.6\""} - -[[package]] -name = "pyyaml" -version = "6.0" -description = "YAML parser and emitter for Python" -category = "main" -optional = false -python-versions = ">=3.6" - -[[package]] -name = "questionary" -version = "1.10.0" -description = "Python library to build pretty command line user prompts ⭐️" -category = "main" -optional = false -python-versions = ">=3.6,<4.0" - -[package.dependencies] -prompt_toolkit = ">=2.0,<4.0" - -[package.extras] -docs = ["Sphinx (>=3.3,<4.0)", "sphinx-autobuild (>=2020.9.1,<2021.0.0)", "sphinx-autodoc-typehints (>=1.11.1,<2.0.0)", "sphinx-copybutton (>=0.3.1,<0.4.0)", "sphinx-rtd-theme (>=0.5.0,<0.6.0)"] - -[[package]] -name = "regex" -version = "2022.10.31" -description = "Alternative regular expression module, to replace re." -category = "main" -optional = false -python-versions = ">=3.6" - -[[package]] -name = "requests" -version = "2.28.2" -description = "Python HTTP for Humans." -category = "main" -optional = false -python-versions = ">=3.7, <4" - -[package.dependencies] -certifi = ">=2017.4.17" -charset-normalizer = ">=2,<4" -idna = ">=2.5,<4" -urllib3 = ">=1.21.1,<1.27" - -[package.extras] -socks = ["PySocks (>=1.5.6,!=1.5.7)"] -use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] - -[[package]] -name = "rsa" -version = "4.9" -description = "Pure-Python RSA implementation" -category = "main" -optional = false -python-versions = ">=3.6,<4" - -[package.dependencies] -pyasn1 = ">=0.1.3" - -[[package]] -name = "ruamel-yaml" -version = "0.17.21" -description = "ruamel.yaml is a YAML parser/emitter that supports roundtrip preservation of comments, seq/map flow style, and map key order" -category = "main" -optional = false -python-versions = ">=3" - -[package.dependencies] -"ruamel.yaml.clib" = {version = ">=0.2.6", markers = "platform_python_implementation == \"CPython\" and python_version < \"3.11\""} - -[package.extras] -docs = ["ryd"] -jinja2 = ["ruamel.yaml.jinja2 (>=0.2)"] - -[[package]] -name = "ruamel-yaml-clib" -version = "0.2.7" -description = "C version of reader, parser and emitter for ruamel.yaml derived from libyaml" -category = "main" -optional = false -python-versions = ">=3.5" - -[[package]] -name = "s3transfer" -version = "0.6.0" -description = "An Amazon S3 Transfer Manager" -category = "main" -optional = false -python-versions = ">= 3.7" - -[package.dependencies] -botocore = ">=1.12.36,<2.0a.0" - -[package.extras] -crt = ["botocore[crt] (>=1.20.29,<2.0a.0)"] - -[[package]] -name = "setuptools" -version = "67.6.0" -description = "Easily download, build, install, upgrade, and uninstall Python packages" -category = "main" -optional = false -python-versions = ">=3.7" - -[package.extras] -docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-hoverxref (<2)", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (==0.8.3)", "sphinx-reredirects", "sphinxcontrib-towncrier"] -testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8 (<5)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pip (>=19.1)", "pip-run (>=8.8)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] -testing-integration = ["build[virtualenv]", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] - -[[package]] -name = "six" -version = "1.16.0" -description = "Python 2 and 3 compatibility utilities" -category = "main" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" - -[[package]] -name = "slack-bolt" -version = "1.16.4" -description = "The Bolt Framework for Python" -category = "main" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -slack-sdk = ">=3.20.2,<4" - -[package.extras] -adapter = ["CherryPy (>=18,<19)", "Django (>=3,<5)", "Flask (>=1,<3)", "Werkzeug (>=2,<3)", "boto3 (<=2)", "bottle (>=0.12,<1)", "chalice (<=1.27.3)", "falcon (>=2,<4)", "fastapi (>=0.70.0,<1)", "gunicorn (>=20,<21)", "pyramid (>=1,<3)", "sanic (>=22,<23)", "starlette (>=0.14,<1)", "tornado (>=6,<7)", "uvicorn (<1)", "websocket-client (>=1.2.3,<2)"] -adapter-testing = ["Flask (>=1,<2)", "Werkzeug (>=1,<2)", "boddle (>=0.2,<0.3)", "docker (>=5,<6)", "moto (>=3,<4)", "requests (>=2,<3)", "sanic-testing (>=0.7)"] -async = ["aiohttp (>=3,<4)", "websockets (>=10,<11)"] -testing = ["Flask-Sockets (>=0.2,<1)", "Jinja2 (==3.0.3)", "Werkzeug (>=1,<2)", "aiohttp (>=3,<4)", "black (==22.8.0)", "click (<=8.0.4)", "itsdangerous (==2.0.1)", "pytest (>=6.2.5,<7)", "pytest-asyncio (>=0.18.2,<1)", "pytest-cov (>=3,<4)"] -testing-without-asyncio = ["Flask-Sockets (>=0.2,<1)", "Jinja2 (==3.0.3)", "Werkzeug (>=1,<2)", "black (==22.8.0)", "click (<=8.0.4)", "itsdangerous (==2.0.1)", "pytest (>=6.2.5,<7)", "pytest-cov (>=3,<4)"] - -[[package]] -name = "slack-sdk" -version = "3.20.2" -description = "The Slack API Platform SDK for Python" -category = "main" -optional = false -python-versions = ">=3.6.0" - -[package.extras] -optional = ["SQLAlchemy (>=1.4,<3)", "aiodns (>1.0)", "aiohttp (>=3.7.3,<4)", "boto3 (<=2)", "websocket-client (>=1,<2)", "websockets (>=10,<11)"] -testing = ["Flask (>=1,<2)", "Flask-Sockets (>=0.2,<1)", "Jinja2 (==3.0.3)", "Werkzeug (<2)", "black (==22.8.0)", "boto3 (<=2)", "click (==8.0.4)", "codecov (>=2,<3)", "databases (>=0.5)", "flake8 (>=5,<6)", "itsdangerous (==1.1.0)", "moto (>=3,<4)", "psutil (>=5,<6)", "pytest (>=6.2.5,<7)", "pytest-asyncio (<1)", "pytest-cov (>=2,<3)"] - -[[package]] -name = "smmap" -version = "5.0.0" -description = "A pure Python implementation of a sliding window memory map manager" -category = "main" -optional = false -python-versions = ">=3.6" - -[[package]] -name = "structlog" -version = "22.3.0" -description = "Structured Logging for Python" -category = "main" -optional = false -python-versions = ">=3.7" - -[package.extras] -dev = ["structlog[docs,tests,typing]"] -docs = ["furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-mermaid", "twisted"] -tests = ["coverage[toml]", "freezegun (>=0.2.8)", "pretend", "pytest (>=6.0)", "pytest-asyncio (>=0.17)", "simplejson"] -typing = ["mypy", "rich", "twisted"] - -[[package]] -name = "tomli" -version = "2.0.1" -description = "A lil' TOML parser" -category = "main" -optional = false -python-versions = ">=3.7" - -[[package]] -name = "types-aiofiles" -version = "22.1.0.9" -description = "Typing stubs for aiofiles" -category = "dev" -optional = false -python-versions = "*" - -[[package]] -name = "types-cachetools" -version = "5.3.0.4" -description = "Typing stubs for cachetools" -category = "dev" -optional = false -python-versions = "*" - -[[package]] -name = "types-dateparser" -version = "1.1.4.8" -description = "Typing stubs for dateparser" -category = "main" -optional = false -python-versions = "*" - -[[package]] -name = "types-mock" -version = "5.0.0.5" -description = "Typing stubs for mock" -category = "main" -optional = false -python-versions = "*" - -[[package]] -name = "types-pyyaml" -version = "6.0.12.8" -description = "Typing stubs for PyYAML" -category = "dev" -optional = false -python-versions = "*" - -[[package]] -name = "types-ujson" -version = "5.7.0.1" -description = "Typing stubs for ujson" -category = "dev" -optional = false -python-versions = "*" - -[[package]] -name = "typing-extensions" -version = "4.5.0" -description = "Backported and Experimental Type Hints for Python 3.7+" -category = "main" -optional = false -python-versions = ">=3.7" - -[[package]] -name = "tzdata" -version = "2022.7" -description = "Provider of IANA time zone data" -category = "main" -optional = false -python-versions = ">=2" - -[[package]] -name = "tzlocal" -version = "4.2" -description = "tzinfo object for the local timezone" -category = "main" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -pytz-deprecation-shim = "*" -tzdata = {version = "*", markers = "platform_system == \"Windows\""} - -[package.extras] -devenv = ["black", "pyroma", "pytest-cov", "zest.releaser"] -test = ["pytest (>=4.3)", "pytest-mock (>=3.3)"] - -[[package]] -name = "ujson" -version = "5.7.0" -description = "Ultra fast JSON encoder and decoder for Python" -category = "main" -optional = false -python-versions = ">=3.7" - -[[package]] -name = "uritemplate" -version = "4.1.1" -description = "Implementation of RFC 6570 URI Templates" -category = "main" -optional = false -python-versions = ">=3.6" - -[[package]] -name = "urllib3" -version = "1.26.15" -description = "HTTP library with thread-safe connection pooling, file post, and more." -category = "main" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" - -[package.extras] -brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)", "brotlipy (>=0.6.0)"] -secure = ["certifi", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "ipaddress", "pyOpenSSL (>=0.14)", "urllib3-secure-extra"] -socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] - -[[package]] -name = "virtualenv" -version = "20.21.0" -description = "Virtual Python Environment builder" -category = "main" -optional = false -python-versions = ">=3.7" - -[package.dependencies] -distlib = ">=0.3.6,<1" -filelock = ">=3.4.1,<4" -platformdirs = ">=2.4,<4" - -[package.extras] -docs = ["furo (>=2022.12.7)", "proselint (>=0.13)", "sphinx (>=6.1.3)", "sphinx-argparse (>=0.4)", "sphinxcontrib-towncrier (>=0.2.1a0)", "towncrier (>=22.12)"] -test = ["covdefaults (>=2.2.2)", "coverage (>=7.1)", "coverage-enable-subprocess (>=1)", "flaky (>=3.7)", "packaging (>=23)", "pytest (>=7.2.1)", "pytest-env (>=0.8.1)", "pytest-freezegun (>=0.4.2)", "pytest-mock (>=3.10)", "pytest-randomly (>=3.12)", "pytest-timeout (>=2.1)"] - -[[package]] -name = "wcwidth" -version = "0.2.6" -description = "Measures the displayed width of unicode strings in a terminal" -category = "main" -optional = false -python-versions = "*" - -[[package]] -name = "wrapt" -version = "1.15.0" -description = "Module for decorators, wrappers and monkey patching." -category = "main" -optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" - -[[package]] -name = "xmltodict" -version = "0.13.0" -description = "Makes working with XML feel like you are working with JSON" -category = "main" -optional = false -python-versions = ">=3.4" - -[[package]] -name = "xxhash" -version = "3.2.0" -description = "Python binding for xxHash" -category = "main" -optional = false -python-versions = ">=3.6" - -[[package]] -name = "yarl" -version = "1.8.2" -description = "Yet another URL library" -category = "main" -optional = false -python-versions = ">=3.7" - -[package.dependencies] -idna = ">=2.0" -multidict = ">=4.0" - -[metadata] -lock-version = "1.1" -python-versions = "^3.9" -content-hash = "aff0a0dfa9283267906bb7ff3e3c6ee4746cc8666e0f0652fc57db729cbc009a" - -[metadata.files] -aenum = [ - {file = "aenum-3.1.11-py2-none-any.whl", hash = "sha256:525b4870a27d0b471c265bda692bc657f1e0dd7597ad4186d072c59f9db666f6"}, - {file = "aenum-3.1.11-py3-none-any.whl", hash = "sha256:12ae89967f2e25c0ce28c293955d643f891603488bc3d9946158ba2b35203638"}, - {file = "aenum-3.1.11.tar.gz", hash = "sha256:aed2c273547ae72a0d5ee869719c02a643da16bf507c80958faadc7e038e3f73"}, -] -aiofiles = [ - {file = "aiofiles-22.1.0-py3-none-any.whl", hash = "sha256:1142fa8e80dbae46bb6339573ad4c8c0841358f79c6eb50a493dceca14621bad"}, - {file = "aiofiles-22.1.0.tar.gz", hash = "sha256:9107f1ca0b2a5553987a94a3c9959fe5b491fdf731389aa5b7b1bd0733e32de6"}, -] -aiohttp = [ - {file = "aiohttp-3.8.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:5ce45967538fb747370308d3145aa68a074bdecb4f3a300869590f725ced69c1"}, - {file = "aiohttp-3.8.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b744c33b6f14ca26b7544e8d8aadff6b765a80ad6164fb1a430bbadd593dfb1a"}, - {file = "aiohttp-3.8.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:1a45865451439eb320784918617ba54b7a377e3501fb70402ab84d38c2cd891b"}, - {file = "aiohttp-3.8.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a86d42d7cba1cec432d47ab13b6637bee393a10f664c425ea7b305d1301ca1a3"}, - {file = "aiohttp-3.8.4-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ee3c36df21b5714d49fc4580247947aa64bcbe2939d1b77b4c8dcb8f6c9faecc"}, - {file = "aiohttp-3.8.4-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:176a64b24c0935869d5bbc4c96e82f89f643bcdf08ec947701b9dbb3c956b7dd"}, - {file = "aiohttp-3.8.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c844fd628851c0bc309f3c801b3a3d58ce430b2ce5b359cd918a5a76d0b20cb5"}, - {file = "aiohttp-3.8.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5393fb786a9e23e4799fec788e7e735de18052f83682ce2dfcabaf1c00c2c08e"}, - {file = "aiohttp-3.8.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:e4b09863aae0dc965c3ef36500d891a3ff495a2ea9ae9171e4519963c12ceefd"}, - {file = "aiohttp-3.8.4-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:adfbc22e87365a6e564c804c58fc44ff7727deea782d175c33602737b7feadb6"}, - {file = "aiohttp-3.8.4-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:147ae376f14b55f4f3c2b118b95be50a369b89b38a971e80a17c3fd623f280c9"}, - {file = "aiohttp-3.8.4-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:eafb3e874816ebe2a92f5e155f17260034c8c341dad1df25672fb710627c6949"}, - {file = "aiohttp-3.8.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c6cc15d58053c76eacac5fa9152d7d84b8d67b3fde92709195cb984cfb3475ea"}, - {file = "aiohttp-3.8.4-cp310-cp310-win32.whl", hash = "sha256:59f029a5f6e2d679296db7bee982bb3d20c088e52a2977e3175faf31d6fb75d1"}, - {file = "aiohttp-3.8.4-cp310-cp310-win_amd64.whl", hash = "sha256:fe7ba4a51f33ab275515f66b0a236bcde4fb5561498fe8f898d4e549b2e4509f"}, - {file = "aiohttp-3.8.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:3d8ef1a630519a26d6760bc695842579cb09e373c5f227a21b67dc3eb16cfea4"}, - {file = "aiohttp-3.8.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:5b3f2e06a512e94722886c0827bee9807c86a9f698fac6b3aee841fab49bbfb4"}, - {file = "aiohttp-3.8.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3a80464982d41b1fbfe3154e440ba4904b71c1a53e9cd584098cd41efdb188ef"}, - {file = "aiohttp-3.8.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b631e26df63e52f7cce0cce6507b7a7f1bc9b0c501fcde69742130b32e8782f"}, - {file = "aiohttp-3.8.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3f43255086fe25e36fd5ed8f2ee47477408a73ef00e804cb2b5cba4bf2ac7f5e"}, - {file = "aiohttp-3.8.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4d347a172f866cd1d93126d9b239fcbe682acb39b48ee0873c73c933dd23bd0f"}, - {file = "aiohttp-3.8.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a3fec6a4cb5551721cdd70473eb009d90935b4063acc5f40905d40ecfea23e05"}, - {file = "aiohttp-3.8.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:80a37fe8f7c1e6ce8f2d9c411676e4bc633a8462844e38f46156d07a7d401654"}, - {file = "aiohttp-3.8.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:d1e6a862b76f34395a985b3cd39a0d949ca80a70b6ebdea37d3ab39ceea6698a"}, - {file = "aiohttp-3.8.4-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:cd468460eefef601ece4428d3cf4562459157c0f6523db89365202c31b6daebb"}, - {file = "aiohttp-3.8.4-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:618c901dd3aad4ace71dfa0f5e82e88b46ef57e3239fc7027773cb6d4ed53531"}, - {file = "aiohttp-3.8.4-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:652b1bff4f15f6287550b4670546a2947f2a4575b6c6dff7760eafb22eacbf0b"}, - {file = "aiohttp-3.8.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:80575ba9377c5171407a06d0196b2310b679dc752d02a1fcaa2bc20b235dbf24"}, - {file = "aiohttp-3.8.4-cp311-cp311-win32.whl", hash = "sha256:bbcf1a76cf6f6dacf2c7f4d2ebd411438c275faa1dc0c68e46eb84eebd05dd7d"}, - {file = "aiohttp-3.8.4-cp311-cp311-win_amd64.whl", hash = "sha256:6e74dd54f7239fcffe07913ff8b964e28b712f09846e20de78676ce2a3dc0bfc"}, - {file = "aiohttp-3.8.4-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:880e15bb6dad90549b43f796b391cfffd7af373f4646784795e20d92606b7a51"}, - {file = "aiohttp-3.8.4-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bb96fa6b56bb536c42d6a4a87dfca570ff8e52de2d63cabebfd6fb67049c34b6"}, - {file = "aiohttp-3.8.4-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4a6cadebe132e90cefa77e45f2d2f1a4b2ce5c6b1bfc1656c1ddafcfe4ba8131"}, - {file = "aiohttp-3.8.4-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f352b62b45dff37b55ddd7b9c0c8672c4dd2eb9c0f9c11d395075a84e2c40f75"}, - {file = "aiohttp-3.8.4-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7ab43061a0c81198d88f39aaf90dae9a7744620978f7ef3e3708339b8ed2ef01"}, - {file = "aiohttp-3.8.4-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c9cb1565a7ad52e096a6988e2ee0397f72fe056dadf75d17fa6b5aebaea05622"}, - {file = "aiohttp-3.8.4-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:1b3ea7edd2d24538959c1c1abf97c744d879d4e541d38305f9bd7d9b10c9ec41"}, - {file = "aiohttp-3.8.4-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:7c7837fe8037e96b6dd5cfcf47263c1620a9d332a87ec06a6ca4564e56bd0f36"}, - {file = "aiohttp-3.8.4-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:3b90467ebc3d9fa5b0f9b6489dfb2c304a1db7b9946fa92aa76a831b9d587e99"}, - {file = "aiohttp-3.8.4-cp36-cp36m-musllinux_1_1_s390x.whl", hash = "sha256:cab9401de3ea52b4b4c6971db5fb5c999bd4260898af972bf23de1c6b5dd9d71"}, - {file = "aiohttp-3.8.4-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:d1f9282c5f2b5e241034a009779e7b2a1aa045f667ff521e7948ea9b56e0c5ff"}, - {file = "aiohttp-3.8.4-cp36-cp36m-win32.whl", hash = "sha256:5e14f25765a578a0a634d5f0cd1e2c3f53964553a00347998dfdf96b8137f777"}, - {file = "aiohttp-3.8.4-cp36-cp36m-win_amd64.whl", hash = "sha256:4c745b109057e7e5f1848c689ee4fb3a016c8d4d92da52b312f8a509f83aa05e"}, - {file = "aiohttp-3.8.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:aede4df4eeb926c8fa70de46c340a1bc2c6079e1c40ccf7b0eae1313ffd33519"}, - {file = "aiohttp-3.8.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4ddaae3f3d32fc2cb4c53fab020b69a05c8ab1f02e0e59665c6f7a0d3a5be54f"}, - {file = "aiohttp-3.8.4-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c4eb3b82ca349cf6fadcdc7abcc8b3a50ab74a62e9113ab7a8ebc268aad35bb9"}, - {file = "aiohttp-3.8.4-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9bcb89336efa095ea21b30f9e686763f2be4478f1b0a616969551982c4ee4c3b"}, - {file = "aiohttp-3.8.4-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c08e8ed6fa3d477e501ec9db169bfac8140e830aa372d77e4a43084d8dd91ab"}, - {file = "aiohttp-3.8.4-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c6cd05ea06daca6ad6a4ca3ba7fe7dc5b5de063ff4daec6170ec0f9979f6c332"}, - {file = "aiohttp-3.8.4-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:b7a00a9ed8d6e725b55ef98b1b35c88013245f35f68b1b12c5cd4100dddac333"}, - {file = "aiohttp-3.8.4-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:de04b491d0e5007ee1b63a309956eaed959a49f5bb4e84b26c8f5d49de140fa9"}, - {file = "aiohttp-3.8.4-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:40653609b3bf50611356e6b6554e3a331f6879fa7116f3959b20e3528783e699"}, - {file = "aiohttp-3.8.4-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:dbf3a08a06b3f433013c143ebd72c15cac33d2914b8ea4bea7ac2c23578815d6"}, - {file = "aiohttp-3.8.4-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:854f422ac44af92bfe172d8e73229c270dc09b96535e8a548f99c84f82dde241"}, - {file = "aiohttp-3.8.4-cp37-cp37m-win32.whl", hash = "sha256:aeb29c84bb53a84b1a81c6c09d24cf33bb8432cc5c39979021cc0f98c1292a1a"}, - {file = "aiohttp-3.8.4-cp37-cp37m-win_amd64.whl", hash = "sha256:db3fc6120bce9f446d13b1b834ea5b15341ca9ff3f335e4a951a6ead31105480"}, - {file = "aiohttp-3.8.4-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:fabb87dd8850ef0f7fe2b366d44b77d7e6fa2ea87861ab3844da99291e81e60f"}, - {file = "aiohttp-3.8.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:91f6d540163f90bbaef9387e65f18f73ffd7c79f5225ac3d3f61df7b0d01ad15"}, - {file = "aiohttp-3.8.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:d265f09a75a79a788237d7f9054f929ced2e69eb0bb79de3798c468d8a90f945"}, - {file = "aiohttp-3.8.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3d89efa095ca7d442a6d0cbc755f9e08190ba40069b235c9886a8763b03785da"}, - {file = "aiohttp-3.8.4-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4dac314662f4e2aa5009977b652d9b8db7121b46c38f2073bfeed9f4049732cd"}, - {file = "aiohttp-3.8.4-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fe11310ae1e4cd560035598c3f29d86cef39a83d244c7466f95c27ae04850f10"}, - {file = "aiohttp-3.8.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6ddb2a2026c3f6a68c3998a6c47ab6795e4127315d2e35a09997da21865757f8"}, - {file = "aiohttp-3.8.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e75b89ac3bd27d2d043b234aa7b734c38ba1b0e43f07787130a0ecac1e12228a"}, - {file = "aiohttp-3.8.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6e601588f2b502c93c30cd5a45bfc665faaf37bbe835b7cfd461753068232074"}, - {file = "aiohttp-3.8.4-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a5d794d1ae64e7753e405ba58e08fcfa73e3fad93ef9b7e31112ef3c9a0efb52"}, - {file = "aiohttp-3.8.4-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:a1f4689c9a1462f3df0a1f7e797791cd6b124ddbee2b570d34e7f38ade0e2c71"}, - {file = "aiohttp-3.8.4-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:3032dcb1c35bc330134a5b8a5d4f68c1a87252dfc6e1262c65a7e30e62298275"}, - {file = "aiohttp-3.8.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:8189c56eb0ddbb95bfadb8f60ea1b22fcfa659396ea36f6adcc521213cd7b44d"}, - {file = "aiohttp-3.8.4-cp38-cp38-win32.whl", hash = "sha256:33587f26dcee66efb2fff3c177547bd0449ab7edf1b73a7f5dea1e38609a0c54"}, - {file = "aiohttp-3.8.4-cp38-cp38-win_amd64.whl", hash = "sha256:e595432ac259af2d4630008bf638873d69346372d38255774c0e286951e8b79f"}, - {file = "aiohttp-3.8.4-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:5a7bdf9e57126dc345b683c3632e8ba317c31d2a41acd5800c10640387d193ed"}, - {file = "aiohttp-3.8.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:22f6eab15b6db242499a16de87939a342f5a950ad0abaf1532038e2ce7d31567"}, - {file = "aiohttp-3.8.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:7235604476a76ef249bd64cb8274ed24ccf6995c4a8b51a237005ee7a57e8643"}, - {file = "aiohttp-3.8.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ea9eb976ffdd79d0e893869cfe179a8f60f152d42cb64622fca418cd9b18dc2a"}, - {file = "aiohttp-3.8.4-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:92c0cea74a2a81c4c76b62ea1cac163ecb20fb3ba3a75c909b9fa71b4ad493cf"}, - {file = "aiohttp-3.8.4-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:493f5bc2f8307286b7799c6d899d388bbaa7dfa6c4caf4f97ef7521b9cb13719"}, - {file = "aiohttp-3.8.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0a63f03189a6fa7c900226e3ef5ba4d3bd047e18f445e69adbd65af433add5a2"}, - {file = "aiohttp-3.8.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:10c8cefcff98fd9168cdd86c4da8b84baaa90bf2da2269c6161984e6737bf23e"}, - {file = "aiohttp-3.8.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:bca5f24726e2919de94f047739d0a4fc01372801a3672708260546aa2601bf57"}, - {file = "aiohttp-3.8.4-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:03baa76b730e4e15a45f81dfe29a8d910314143414e528737f8589ec60cf7391"}, - {file = "aiohttp-3.8.4-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:8c29c77cc57e40f84acef9bfb904373a4e89a4e8b74e71aa8075c021ec9078c2"}, - {file = "aiohttp-3.8.4-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:03543dcf98a6619254b409be2d22b51f21ec66272be4ebda7b04e6412e4b2e14"}, - {file = "aiohttp-3.8.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:17b79c2963db82086229012cff93ea55196ed31f6493bb1ccd2c62f1724324e4"}, - {file = "aiohttp-3.8.4-cp39-cp39-win32.whl", hash = "sha256:34ce9f93a4a68d1272d26030655dd1b58ff727b3ed2a33d80ec433561b03d67a"}, - {file = "aiohttp-3.8.4-cp39-cp39-win_amd64.whl", hash = "sha256:41a86a69bb63bb2fc3dc9ad5ea9f10f1c9c8e282b471931be0268ddd09430b04"}, - {file = "aiohttp-3.8.4.tar.gz", hash = "sha256:bf2e1a9162c1e441bf805a1fd166e249d574ca04e03b34f97e2928769e91ab5c"}, -] -aiosignal = [ - {file = "aiosignal-1.3.1-py3-none-any.whl", hash = "sha256:f8376fb07dd1e86a584e4fcdec80b36b7f81aac666ebc724e2c090300dd83b17"}, - {file = "aiosignal-1.3.1.tar.gz", hash = "sha256:54cd96e15e1649b75d6c87526a6ff0b6c1b0dd3459f43d9ca11d48c339b68cfc"}, -] -asgiref = [ - {file = "asgiref-3.6.0-py3-none-any.whl", hash = "sha256:71e68008da809b957b7ee4b43dbccff33d1b23519fb8344e33f049897077afac"}, - {file = "asgiref-3.6.0.tar.gz", hash = "sha256:9567dfe7bd8d3c8c892227827c41cce860b368104c3431da67a0c5a65a949506"}, -] -async-timeout = [ - {file = "async-timeout-4.0.2.tar.gz", hash = "sha256:2163e1640ddb52b7a8c80d0a67a08587e5d245cc9c553a74a847056bc2976b15"}, - {file = "async_timeout-4.0.2-py3-none-any.whl", hash = "sha256:8ca1e4fcf50d07413d66d1a5e416e42cfdf5851c981d679a09851a6853383b3c"}, -] -asyncache = [ - {file = "asyncache-0.3.1-py3-none-any.whl", hash = "sha256:ef20a1024d265090dd1e0785c961cf98b9c32cc7d9478973dcf25ac1b80011f5"}, - {file = "asyncache-0.3.1.tar.gz", hash = "sha256:9a1e60a75668e794657489bdea6540ee7e3259c483517b934670db7600bf5035"}, -] -attrs = [ - {file = "attrs-22.2.0-py3-none-any.whl", hash = "sha256:29e95c7f6778868dbd49170f98f8818f78f3dc5e0e37c0b1f474e3561b240836"}, - {file = "attrs-22.2.0.tar.gz", hash = "sha256:c9227bfc2f01993c03f68db37d1d15c9690188323c067c641f1a35ca58185f99"}, -] -aws-error-utils = [ - {file = "aws_error_utils-2.7.0-py3-none-any.whl", hash = "sha256:fc6e556340a14af58e19bc60faf635d3eea9abbacb7f06e54a908e8234c60a50"}, - {file = "aws_error_utils-2.7.0.tar.gz", hash = "sha256:07107af2a2c26706cd9525b7ffbed43f2d07b50d27e39f9e9156c11b2e993c97"}, -] -black = [ - {file = "black-22.12.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9eedd20838bd5d75b80c9f5487dbcb06836a43833a37846cf1d8c1cc01cef59d"}, - {file = "black-22.12.0-cp310-cp310-win_amd64.whl", hash = "sha256:159a46a4947f73387b4d83e87ea006dbb2337eab6c879620a3ba52699b1f4351"}, - {file = "black-22.12.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d30b212bffeb1e252b31dd269dfae69dd17e06d92b87ad26e23890f3efea366f"}, - {file = "black-22.12.0-cp311-cp311-win_amd64.whl", hash = "sha256:7412e75863aa5c5411886804678b7d083c7c28421210180d67dfd8cf1221e1f4"}, - {file = "black-22.12.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c116eed0efb9ff870ded8b62fe9f28dd61ef6e9ddd28d83d7d264a38417dcee2"}, - {file = "black-22.12.0-cp37-cp37m-win_amd64.whl", hash = "sha256:1f58cbe16dfe8c12b7434e50ff889fa479072096d79f0a7f25e4ab8e94cd8350"}, - {file = "black-22.12.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:77d86c9f3db9b1bf6761244bc0b3572a546f5fe37917a044e02f3166d5aafa7d"}, - {file = "black-22.12.0-cp38-cp38-win_amd64.whl", hash = "sha256:82d9fe8fee3401e02e79767016b4907820a7dc28d70d137eb397b92ef3cc5bfc"}, - {file = "black-22.12.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:101c69b23df9b44247bd88e1d7e90154336ac4992502d4197bdac35dd7ee3320"}, - {file = "black-22.12.0-cp39-cp39-win_amd64.whl", hash = "sha256:559c7a1ba9a006226f09e4916060982fd27334ae1998e7a38b3f33a37f7a2148"}, - {file = "black-22.12.0-py3-none-any.whl", hash = "sha256:436cc9167dd28040ad90d3b404aec22cedf24a6e4d7de221bec2730ec0c97bcf"}, - {file = "black-22.12.0.tar.gz", hash = "sha256:229351e5a18ca30f447bf724d007f890f97e13af070bb6ad4c0a441cd7596a2f"}, -] - -[package.dependencies] -click = ">=8.0.0" -mypy-extensions = ">=0.4.3" -pathspec = ">=0.9.0" -platformdirs = ">=2" -tomli = {version = ">=1.1.0", markers = "python_full_version < \"3.11.0a7\""} -typing-extensions = {version = ">=3.10.0.0", markers = "python_version < \"3.10\""} - -[package.extras] -colorama = ["colorama (>=0.4.3)"] -d = ["aiohttp (>=3.7.4)"] -jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"] -uvloop = ["uvloop (>=0.15.2)"] - -[[package]] -name = "boto3" -version = "1.26.81" -description = "The AWS SDK for Python" -category = "main" -optional = false -python-versions = ">= 3.7" -files = [ - {file = "boto3-1.26.89-py3-none-any.whl", hash = "sha256:09929b24aaec4951e435d53d31f800e2ca52244af049dc11e5385ce062e106e9"}, - {file = "boto3-1.26.89.tar.gz", hash = "sha256:e819812f16fab46fadf9b2853a46aaa126e108e7f038502dde555ebbbfc80133"}, -] -botocore = [ - {file = "botocore-1.29.89-py3-none-any.whl", hash = "sha256:b757e59feca82ac62934f658918133116b4535cf66f1d72ff4935fa24e522527"}, - {file = "botocore-1.29.89.tar.gz", hash = "sha256:ac8da651f73a9d5759cf5d80beba68deda407e56aaaeb10d249fd557459f3b56"}, -] -cachetools = [ - {file = "cachetools-5.3.0-py3-none-any.whl", hash = "sha256:429e1a1e845c008ea6c85aa35d4b98b65d6a9763eeef3e37e92728a12d1de9d4"}, - {file = "cachetools-5.3.0.tar.gz", hash = "sha256:13dfddc7b8df938c21a940dfa6557ce6e94a2f1cdfa58eb90c805721d58f2c14"}, -] -certifi = [ - {file = "certifi-2022.12.7-py3-none-any.whl", hash = "sha256:4ad3232f5e926d6718ec31cfc1fcadfde020920e278684144551c91769c7bc18"}, - {file = "certifi-2022.12.7.tar.gz", hash = "sha256:35824b4c3a97115964b408844d64aa14db1cc518f6562e8d7261699d1350a9e3"}, -] -cffi = [ - {file = "cffi-1.15.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:a66d3508133af6e8548451b25058d5812812ec3798c886bf38ed24a98216fab2"}, - {file = "cffi-1.15.1-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:470c103ae716238bbe698d67ad020e1db9d9dba34fa5a899b5e21577e6d52ed2"}, - {file = "cffi-1.15.1-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:9ad5db27f9cabae298d151c85cf2bad1d359a1b9c686a275df03385758e2f914"}, - {file = "cffi-1.15.1-cp27-cp27m-win32.whl", hash = "sha256:b3bbeb01c2b273cca1e1e0c5df57f12dce9a4dd331b4fa1635b8bec26350bde3"}, - {file = "cffi-1.15.1-cp27-cp27m-win_amd64.whl", hash = "sha256:e00b098126fd45523dd056d2efba6c5a63b71ffe9f2bbe1a4fe1716e1d0c331e"}, - {file = "cffi-1.15.1-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:d61f4695e6c866a23a21acab0509af1cdfd2c013cf256bbf5b6b5e2695827162"}, - {file = "cffi-1.15.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:ed9cb427ba5504c1dc15ede7d516b84757c3e3d7868ccc85121d9310d27eed0b"}, - {file = "cffi-1.15.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:39d39875251ca8f612b6f33e6b1195af86d1b3e60086068be9cc053aa4376e21"}, - {file = "cffi-1.15.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:285d29981935eb726a4399badae8f0ffdff4f5050eaa6d0cfc3f64b857b77185"}, - {file = "cffi-1.15.1-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3eb6971dcff08619f8d91607cfc726518b6fa2a9eba42856be181c6d0d9515fd"}, - {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:21157295583fe8943475029ed5abdcf71eb3911894724e360acff1d61c1d54bc"}, - {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5635bd9cb9731e6d4a1132a498dd34f764034a8ce60cef4f5319c0541159392f"}, - {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2012c72d854c2d03e45d06ae57f40d78e5770d252f195b93f581acf3ba44496e"}, - {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd86c085fae2efd48ac91dd7ccffcfc0571387fe1193d33b6394db7ef31fe2a4"}, - {file = "cffi-1.15.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:fa6693661a4c91757f4412306191b6dc88c1703f780c8234035eac011922bc01"}, - {file = "cffi-1.15.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:59c0b02d0a6c384d453fece7566d1c7e6b7bae4fc5874ef2ef46d56776d61c9e"}, - {file = "cffi-1.15.1-cp310-cp310-win32.whl", hash = "sha256:cba9d6b9a7d64d4bd46167096fc9d2f835e25d7e4c121fb2ddfc6528fb0413b2"}, - {file = "cffi-1.15.1-cp310-cp310-win_amd64.whl", hash = "sha256:ce4bcc037df4fc5e3d184794f27bdaab018943698f4ca31630bc7f84a7b69c6d"}, - {file = "cffi-1.15.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3d08afd128ddaa624a48cf2b859afef385b720bb4b43df214f85616922e6a5ac"}, - {file = "cffi-1.15.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3799aecf2e17cf585d977b780ce79ff0dc9b78d799fc694221ce814c2c19db83"}, - {file = "cffi-1.15.1-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a591fe9e525846e4d154205572a029f653ada1a78b93697f3b5a8f1f2bc055b9"}, - {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3548db281cd7d2561c9ad9984681c95f7b0e38881201e157833a2342c30d5e8c"}, - {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:91fc98adde3d7881af9b59ed0294046f3806221863722ba7d8d120c575314325"}, - {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:94411f22c3985acaec6f83c6df553f2dbe17b698cc7f8ae751ff2237d96b9e3c"}, - {file = "cffi-1.15.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:03425bdae262c76aad70202debd780501fabeaca237cdfddc008987c0e0f59ef"}, - {file = "cffi-1.15.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:cc4d65aeeaa04136a12677d3dd0b1c0c94dc43abac5860ab33cceb42b801c1e8"}, - {file = "cffi-1.15.1-cp311-cp311-win32.whl", hash = "sha256:a0f100c8912c114ff53e1202d0078b425bee3649ae34d7b070e9697f93c5d52d"}, - {file = "cffi-1.15.1-cp311-cp311-win_amd64.whl", hash = "sha256:04ed324bda3cda42b9b695d51bb7d54b680b9719cfab04227cdd1e04e5de3104"}, - {file = "cffi-1.15.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50a74364d85fd319352182ef59c5c790484a336f6db772c1a9231f1c3ed0cbd7"}, - {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e263d77ee3dd201c3a142934a086a4450861778baaeeb45db4591ef65550b0a6"}, - {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cec7d9412a9102bdc577382c3929b337320c4c4c4849f2c5cdd14d7368c5562d"}, - {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4289fc34b2f5316fbb762d75362931e351941fa95fa18789191b33fc4cf9504a"}, - {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:173379135477dc8cac4bc58f45db08ab45d228b3363adb7af79436135d028405"}, - {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:6975a3fac6bc83c4a65c9f9fcab9e47019a11d3d2cf7f3c0d03431bf145a941e"}, - {file = "cffi-1.15.1-cp36-cp36m-win32.whl", hash = "sha256:2470043b93ff09bf8fb1d46d1cb756ce6132c54826661a32d4e4d132e1977adf"}, - {file = "cffi-1.15.1-cp36-cp36m-win_amd64.whl", hash = "sha256:30d78fbc8ebf9c92c9b7823ee18eb92f2e6ef79b45ac84db507f52fbe3ec4497"}, - {file = "cffi-1.15.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:198caafb44239b60e252492445da556afafc7d1e3ab7a1fb3f0584ef6d742375"}, - {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5ef34d190326c3b1f822a5b7a45f6c4535e2f47ed06fec77d3d799c450b2651e"}, - {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8102eaf27e1e448db915d08afa8b41d6c7ca7a04b7d73af6514df10a3e74bd82"}, - {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5df2768244d19ab7f60546d0c7c63ce1581f7af8b5de3eb3004b9b6fc8a9f84b"}, - {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a8c4917bd7ad33e8eb21e9a5bbba979b49d9a97acb3a803092cbc1133e20343c"}, - {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0e2642fe3142e4cc4af0799748233ad6da94c62a8bec3a6648bf8ee68b1c7426"}, - {file = "cffi-1.15.1-cp37-cp37m-win32.whl", hash = "sha256:e229a521186c75c8ad9490854fd8bbdd9a0c9aa3a524326b55be83b54d4e0ad9"}, - {file = "cffi-1.15.1-cp37-cp37m-win_amd64.whl", hash = "sha256:a0b71b1b8fbf2b96e41c4d990244165e2c9be83d54962a9a1d118fd8657d2045"}, - {file = "cffi-1.15.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:320dab6e7cb2eacdf0e658569d2575c4dad258c0fcc794f46215e1e39f90f2c3"}, - {file = "cffi-1.15.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1e74c6b51a9ed6589199c787bf5f9875612ca4a8a0785fb2d4a84429badaf22a"}, - {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5c84c68147988265e60416b57fc83425a78058853509c1b0629c180094904a5"}, - {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3b926aa83d1edb5aa5b427b4053dc420ec295a08e40911296b9eb1b6170f6cca"}, - {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:87c450779d0914f2861b8526e035c5e6da0a3199d8f1add1a665e1cbc6fc6d02"}, - {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4f2c9f67e9821cad2e5f480bc8d83b8742896f1242dba247911072d4fa94c192"}, - {file = "cffi-1.15.1-cp38-cp38-win32.whl", hash = "sha256:8b7ee99e510d7b66cdb6c593f21c043c248537a32e0bedf02e01e9553a172314"}, - {file = "cffi-1.15.1-cp38-cp38-win_amd64.whl", hash = "sha256:00a9ed42e88df81ffae7a8ab6d9356b371399b91dbdf0c3cb1e84c03a13aceb5"}, - {file = "cffi-1.15.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:54a2db7b78338edd780e7ef7f9f6c442500fb0d41a5a4ea24fff1c929d5af585"}, - {file = "cffi-1.15.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:fcd131dd944808b5bdb38e6f5b53013c5aa4f334c5cad0c72742f6eba4b73db0"}, - {file = "cffi-1.15.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7473e861101c9e72452f9bf8acb984947aa1661a7704553a9f6e4baa5ba64415"}, - {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6c9a799e985904922a4d207a94eae35c78ebae90e128f0c4e521ce339396be9d"}, - {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3bcde07039e586f91b45c88f8583ea7cf7a0770df3a1649627bf598332cb6984"}, - {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:33ab79603146aace82c2427da5ca6e58f2b3f2fb5da893ceac0c42218a40be35"}, - {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d598b938678ebf3c67377cdd45e09d431369c3b1a5b331058c338e201f12b27"}, - {file = "cffi-1.15.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:db0fbb9c62743ce59a9ff687eb5f4afbe77e5e8403d6697f7446e5f609976f76"}, - {file = "cffi-1.15.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:98d85c6a2bef81588d9227dde12db8a7f47f639f4a17c9ae08e773aa9c697bf3"}, - {file = "cffi-1.15.1-cp39-cp39-win32.whl", hash = "sha256:40f4774f5a9d4f5e344f31a32b5096977b5d48560c5592e2f3d2c4374bd543ee"}, - {file = "cffi-1.15.1-cp39-cp39-win_amd64.whl", hash = "sha256:70df4e3b545a17496c9b3f41f5115e69a4f2e77e94e1d2a8e1070bc0c38c8a3c"}, - {file = "cffi-1.15.1.tar.gz", hash = "sha256:d400bfb9a37b1351253cb402671cea7e89bdecc294e8016a707f6d1d8ac934f9"}, -] -cfgv = [ - {file = "cfgv-3.3.1-py2.py3-none-any.whl", hash = "sha256:c6a0883f3917a037485059700b9e75da2464e6c27051014ad85ba6aaa5884426"}, - {file = "cfgv-3.3.1.tar.gz", hash = "sha256:f5a830efb9ce7a445376bb66ec94c638a9787422f96264c98edc6bdeed8ab736"}, -] -charset-normalizer = [ +files = [ {file = "charset-normalizer-3.1.0.tar.gz", hash = "sha256:34e0a2f9c370eb95597aae63bf85eb5e96826d81e3dcf88b8886012906f509b5"}, {file = "charset_normalizer-3.1.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:e0ac8959c929593fee38da1c2b64ee9778733cdf03c482c9ff1d508b6b593b2b"}, {file = "charset_normalizer-3.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d7fc3fca01da18fbabe4625d64bb612b533533ed10045a2ac3dd194bfa656b60"}, @@ -1701,15 +498,42 @@ charset-normalizer = [ {file = "charset_normalizer-3.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:830d2948a5ec37c386d3170c483063798d7879037492540f10a475e3fd6f244b"}, {file = "charset_normalizer-3.1.0-py3-none-any.whl", hash = "sha256:3d9098b479e78c85080c98e1e35ff40b4a31d8953102bb0fd7d1b6f8a2111a3d"}, ] -click = [ + +[[package]] +name = "click" +version = "8.1.3" +description = "Composable command line interface toolkit" +category = "main" +optional = false +python-versions = ">=3.7" +files = [ {file = "click-8.1.3-py3-none-any.whl", hash = "sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48"}, {file = "click-8.1.3.tar.gz", hash = "sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e"}, ] -colorama = [ + +[package.dependencies] +colorama = {version = "*", markers = "platform_system == \"Windows\""} + +[[package]] +name = "colorama" +version = "0.4.6" +description = "Cross-platform colored terminal text." +category = "main" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" +files = [ {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, ] -coverage = [ + +[[package]] +name = "coverage" +version = "7.2.1" +description = "Code coverage measurement for Python" +category = "main" +optional = false +python-versions = ">=3.7" +files = [ {file = "coverage-7.2.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:49567ec91fc5e0b15356da07a2feabb421d62f52a9fff4b1ec40e9e19772f5f8"}, {file = "coverage-7.2.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d2ef6cae70168815ed91388948b5f4fcc69681480a0061114db737f957719f03"}, {file = "coverage-7.2.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3004765bca3acd9e015794e5c2f0c9a05587f5e698127ff95e9cfba0d3f29339"}, @@ -1762,7 +586,21 @@ coverage = [ {file = "coverage-7.2.1-pp37.pp38.pp39-none-any.whl", hash = "sha256:436313d129db7cf5b4ac355dd2bd3f7c7e5294af077b090b85de75f8458b8616"}, {file = "coverage-7.2.1.tar.gz", hash = "sha256:c77f2a9093ccf329dd523a9b2b3c854c20d2a3d968b6def3b820272ca6732242"}, ] -cryptography = [ + +[package.dependencies] +tomli = {version = "*", optional = true, markers = "python_full_version <= \"3.11.0a6\" and extra == \"toml\""} + +[package.extras] +toml = ["tomli"] + +[[package]] +name = "cryptography" +version = "39.0.2" +description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers." +category = "main" +optional = false +python-versions = ">=3.6" +files = [ {file = "cryptography-39.0.2-cp36-abi3-macosx_10_12_universal2.whl", hash = "sha256:2725672bb53bb92dc7b4150d233cd4b8c59615cd8288d495eaa86db00d4e5c06"}, {file = "cryptography-39.0.2-cp36-abi3-macosx_10_12_x86_64.whl", hash = "sha256:23df8ca3f24699167daf3e23e51f7ba7334d504af63a94af468f468b975b7dd7"}, {file = "cryptography-39.0.2-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:eb40fe69cfc6f5cdab9a5ebd022131ba21453cf7b8a7fd3631f45bbf52bed612"}, @@ -1787,46 +625,192 @@ cryptography = [ {file = "cryptography-39.0.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:8bc0008ef798231fac03fe7d26e82d601d15bd16f3afaad1c6113771566570f3"}, {file = "cryptography-39.0.2.tar.gz", hash = "sha256:bc5b871e977c8ee5a1bbc42fa8d19bcc08baf0c51cbf1586b0e87a2694dde42f"}, ] -dateparser = [ + +[package.dependencies] +cffi = ">=1.12" + +[package.extras] +docs = ["sphinx (>=5.3.0)", "sphinx-rtd-theme (>=1.1.1)"] +docstest = ["pyenchant (>=1.6.11)", "sphinxcontrib-spelling (>=4.0.1)", "twine (>=1.12.0)"] +pep8test = ["black", "check-manifest", "mypy", "ruff", "types-pytz", "types-requests"] +sdist = ["setuptools-rust (>=0.11.4)"] +ssh = ["bcrypt (>=3.1.5)"] +test = ["hypothesis (>=1.11.4,!=3.79.2)", "iso8601", "pretend", "pytest (>=6.2.0)", "pytest-benchmark", "pytest-cov", "pytest-shard (>=0.1.2)", "pytest-subtests", "pytest-xdist", "pytz"] +test-randomorder = ["pytest-randomly"] +tox = ["tox"] + +[[package]] +name = "dateparser" +version = "1.1.7" +description = "Date parsing library designed to parse dates from HTML pages" +category = "main" +optional = false +python-versions = ">=3.7" +files = [ {file = "dateparser-1.1.7-py2.py3-none-any.whl", hash = "sha256:fbed8b738a24c9cd7f47c4f2089527926566fe539e1a06125eddba75917b1eef"}, {file = "dateparser-1.1.7.tar.gz", hash = "sha256:ff047d9cffad4d3113ead8ec0faf8a7fc43bab7d853ac8715e071312b53c465a"}, ] -deepdiff = [ + +[package.dependencies] +python-dateutil = "*" +pytz = "*" +regex = "<2019.02.19 || >2019.02.19,<2021.8.27 || >2021.8.27" +tzlocal = "*" + +[package.extras] +calendars = ["convertdate", "hijri-converter"] +fasttext = ["fasttext"] +langdetect = ["langdetect"] + +[[package]] +name = "deepdiff" +version = "5.8.1" +description = "Deep Difference and Search of any Python object/data." +category = "main" +optional = false +python-versions = ">=3.6" +files = [ {file = "deepdiff-5.8.1-py3-none-any.whl", hash = "sha256:e9aea49733f34fab9a0897038d8f26f9d94a97db1790f1b814cced89e9e0d2b7"}, {file = "deepdiff-5.8.1.tar.gz", hash = "sha256:8d4eb2c4e6cbc80b811266419cb71dd95a157094a3947ccf937a94d44943c7b8"}, ] -deprecated = [ + +[package.dependencies] +ordered-set = ">=4.1.0,<4.2.0" + +[package.extras] +cli = ["clevercsv (==0.7.1)", "click (==8.0.3)", "pyyaml (==5.4.1)", "toml (==0.10.2)"] + +[[package]] +name = "deprecated" +version = "1.2.13" +description = "Python @deprecated decorator to deprecate old python classes, functions or methods." +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +files = [ {file = "Deprecated-1.2.13-py2.py3-none-any.whl", hash = "sha256:64756e3e14c8c5eea9795d93c524551432a0be75629f8f29e67ab8caf076c76d"}, {file = "Deprecated-1.2.13.tar.gz", hash = "sha256:43ac5335da90c31c24ba028af536a91d41d53f9e6901ddb021bcc572ce44e38d"}, ] -distlib = [ + +[package.dependencies] +wrapt = ">=1.10,<2" + +[package.extras] +dev = ["PyTest", "PyTest (<5)", "PyTest-Cov", "PyTest-Cov (<2.6)", "bump2version (<1)", "configparser (<5)", "importlib-metadata (<3)", "importlib-resources (<4)", "sphinx (<2)", "sphinxcontrib-websupport (<2)", "tox", "zipp (<2)"] + +[[package]] +name = "distlib" +version = "0.3.6" +description = "Distribution utilities" +category = "main" +optional = false +python-versions = "*" +files = [ {file = "distlib-0.3.6-py2.py3-none-any.whl", hash = "sha256:f35c4b692542ca110de7ef0bea44d73981caeb34ca0b9b6b2e6d7790dda8f80e"}, {file = "distlib-0.3.6.tar.gz", hash = "sha256:14bad2d9b04d3a36127ac97f30b12a19268f211063d8f8ee4f47108896e11b46"}, ] -ecdsa = [ + +[[package]] +name = "ecdsa" +version = "0.18.0" +description = "ECDSA cryptographic signature library (pure python)" +category = "main" +optional = false +python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" +files = [ {file = "ecdsa-0.18.0-py2.py3-none-any.whl", hash = "sha256:80600258e7ed2f16b9aa1d7c295bd70194109ad5a30fdee0eaeefef1d4c559dd"}, {file = "ecdsa-0.18.0.tar.gz", hash = "sha256:190348041559e21b22a1d65cee485282ca11a6f81d503fddb84d5017e9ed1e49"}, ] -exceptiongroup = [ + +[package.dependencies] +six = ">=1.9.0" + +[package.extras] +gmpy = ["gmpy"] +gmpy2 = ["gmpy2"] + +[[package]] +name = "exceptiongroup" +version = "1.1.1" +description = "Backport of PEP 654 (exception groups)" +category = "main" +optional = false +python-versions = ">=3.7" +files = [ {file = "exceptiongroup-1.1.1-py3-none-any.whl", hash = "sha256:232c37c63e4f682982c8b6459f33a8981039e5fb8756b2074364e5055c498c9e"}, {file = "exceptiongroup-1.1.1.tar.gz", hash = "sha256:d484c3090ba2889ae2928419117447a14daf3c1231d5e30d0aae34f354f01785"}, ] -faker = [ + +[package.extras] +test = ["pytest (>=6)"] + +[[package]] +name = "faker" +version = "17.6.0" +description = "Faker is a Python package that generates fake data for you." +category = "main" +optional = false +python-versions = ">=3.7" +files = [ {file = "Faker-17.6.0-py3-none-any.whl", hash = "sha256:5aaa16fa9cfde7d117eef70b6b293a705021e57158f3fa6b44ed1b70202d2065"}, {file = "Faker-17.6.0.tar.gz", hash = "sha256:51f37ff9df710159d6d736d0ba1c75e063430a8c806b91334d7794305b5a6114"}, ] -filelock = [ + +[package.dependencies] +python-dateutil = ">=2.4" + +[[package]] +name = "filelock" +version = "3.9.0" +description = "A platform independent file lock." +category = "main" +optional = false +python-versions = ">=3.7" +files = [ {file = "filelock-3.9.0-py3-none-any.whl", hash = "sha256:f58d535af89bb9ad5cd4df046f741f8553a418c01a7856bf0d173bbc9f6bd16d"}, {file = "filelock-3.9.0.tar.gz", hash = "sha256:7b319f24340b51f55a2bf7a12ac0755a9b03e718311dac567a0f4f7fabd2f5de"}, ] -flake8 = [ + +[package.extras] +docs = ["furo (>=2022.12.7)", "sphinx (>=5.3)", "sphinx-autodoc-typehints (>=1.19.5)"] +testing = ["covdefaults (>=2.2.2)", "coverage (>=7.0.1)", "pytest (>=7.2)", "pytest-cov (>=4)", "pytest-timeout (>=2.1)"] + +[[package]] +name = "flake8" +version = "5.0.4" +description = "the modular source code checker: pep8 pyflakes and co" +category = "main" +optional = false +python-versions = ">=3.6.1" +files = [ {file = "flake8-5.0.4-py2.py3-none-any.whl", hash = "sha256:7a1cf6b73744f5806ab95e526f6f0d8c01c66d7bbe349562d22dfca20610b248"}, {file = "flake8-5.0.4.tar.gz", hash = "sha256:6fbe320aad8d6b95cec8b8e47bc933004678dc63095be98528b7bdd2a9f510db"}, ] -flatdict = [ + +[package.dependencies] +mccabe = ">=0.7.0,<0.8.0" +pycodestyle = ">=2.9.0,<2.10.0" +pyflakes = ">=2.5.0,<2.6.0" + +[[package]] +name = "flatdict" +version = "4.0.1" +description = "Python module for interacting with nested dicts as a single level dict with delimited keys." +category = "main" +optional = false +python-versions = "*" +files = [ {file = "flatdict-4.0.1.tar.gz", hash = "sha256:cd32f08fd31ed21eb09ebc76f06b6bd12046a24f77beb1fd0281917e47f26742"}, ] -frozenlist = [ + +[[package]] +name = "frozenlist" +version = "1.3.3" +description = "A list-like structure which implements collections.abc.MutableSequence" +category = "main" +optional = false +python-versions = ">=3.7" +files = [ {file = "frozenlist-1.3.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:ff8bf625fe85e119553b5383ba0fb6aa3d0ec2ae980295aaefa552374926b3f4"}, {file = "frozenlist-1.3.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:dfbac4c2dfcc082fcf8d942d1e49b6aa0766c19d3358bd86e2000bf0fa4a9cf0"}, {file = "frozenlist-1.3.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b1c63e8d377d039ac769cd0926558bb7068a1f7abb0f003e3717ee003ad85530"}, @@ -1902,67 +886,265 @@ frozenlist = [ {file = "frozenlist-1.3.3-cp39-cp39-win_amd64.whl", hash = "sha256:cfe33efc9cb900a4c46f91a5ceba26d6df370ffddd9ca386eb1d4f0ad97b9ea9"}, {file = "frozenlist-1.3.3.tar.gz", hash = "sha256:58bcc55721e8a90b88332d6cd441261ebb22342e238296bb330968952fbb3a6a"}, ] -gitdb = [ + +[[package]] +name = "gitdb" +version = "4.0.10" +description = "Git Object Database" +category = "main" +optional = false +python-versions = ">=3.7" +files = [ {file = "gitdb-4.0.10-py3-none-any.whl", hash = "sha256:c286cf298426064079ed96a9e4a9d39e7f3e9bf15ba60701e95f5492f28415c7"}, {file = "gitdb-4.0.10.tar.gz", hash = "sha256:6eb990b69df4e15bad899ea868dc46572c3f75339735663b81de79b06f17eb9a"}, ] -gitpython = [ + +[package.dependencies] +smmap = ">=3.0.1,<6" + +[[package]] +name = "gitpython" +version = "3.1.31" +description = "GitPython is a Python library used to interact with Git repositories" +category = "main" +optional = false +python-versions = ">=3.7" +files = [ {file = "GitPython-3.1.31-py3-none-any.whl", hash = "sha256:f04893614f6aa713a60cbbe1e6a97403ef633103cdd0ef5eb6efe0deb98dbe8d"}, {file = "GitPython-3.1.31.tar.gz", hash = "sha256:8ce3bcf69adfdf7c7d503e78fd3b1c492af782d58893b650adb2ac8912ddd573"}, ] -google-api-core = [ + +[package.dependencies] +gitdb = ">=4.0.1,<5" + +[[package]] +name = "google-api-core" +version = "2.11.0" +description = "Google API client core library" +category = "main" +optional = false +python-versions = ">=3.7" +files = [ {file = "google-api-core-2.11.0.tar.gz", hash = "sha256:4b9bb5d5a380a0befa0573b302651b8a9a89262c1730e37bf423cec511804c22"}, {file = "google_api_core-2.11.0-py3-none-any.whl", hash = "sha256:ce222e27b0de0d7bc63eb043b956996d6dccab14cc3b690aaea91c9cc99dc16e"}, ] -google-api-python-client = [ - {file = "google-api-python-client-2.80.0.tar.gz", hash = "sha256:51dd62d467da7ad3df63c3f0e6fca84266ce50c2218691204b2e8cd651a0719a"}, - {file = "google_api_python_client-2.80.0-py2.py3-none-any.whl", hash = "sha256:b9cd2550c2cdfeb78c3150d8c52208841082dabe597063a116476937170907ab"}, + +[package.dependencies] +google-auth = ">=2.14.1,<3.0dev" +googleapis-common-protos = ">=1.56.2,<2.0dev" +protobuf = ">=3.19.5,<3.20.0 || >3.20.0,<3.20.1 || >3.20.1,<4.21.0 || >4.21.0,<4.21.1 || >4.21.1,<4.21.2 || >4.21.2,<4.21.3 || >4.21.3,<4.21.4 || >4.21.4,<4.21.5 || >4.21.5,<5.0.0dev" +requests = ">=2.18.0,<3.0.0dev" + +[package.extras] +grpc = ["grpcio (>=1.33.2,<2.0dev)", "grpcio (>=1.49.1,<2.0dev)", "grpcio-status (>=1.33.2,<2.0dev)", "grpcio-status (>=1.49.1,<2.0dev)"] +grpcgcp = ["grpcio-gcp (>=0.2.2,<1.0dev)"] +grpcio-gcp = ["grpcio-gcp (>=0.2.2,<1.0dev)"] + +[[package]] +name = "google-api-python-client" +version = "2.81.0" +description = "Google API Client Library for Python" +category = "main" +optional = false +python-versions = ">=3.7" +files = [ + {file = "google-api-python-client-2.81.0.tar.gz", hash = "sha256:8faab0b9b19d3797b455d33320c643253b6761fd0d3f3adb54792ab155d0795a"}, + {file = "google_api_python_client-2.81.0-py2.py3-none-any.whl", hash = "sha256:ad6700ae3a76ead8956d7f30935978cea308530e342ad8c1e26a4e40fc05c054"}, ] -google-auth = [ + +[package.dependencies] +google-api-core = ">=1.31.5,<2.0.0 || >2.3.0,<3.0.0dev" +google-auth = ">=1.19.0,<3.0.0dev" +google-auth-httplib2 = ">=0.1.0" +httplib2 = ">=0.15.0,<1dev" +uritemplate = ">=3.0.1,<5" + +[[package]] +name = "google-auth" +version = "2.16.2" +description = "Google Authentication Library" +category = "main" +optional = false +python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*" +files = [ {file = "google-auth-2.16.2.tar.gz", hash = "sha256:07e14f34ec288e3f33e00e2e3cc40c8942aa5d4ceac06256a28cd8e786591420"}, {file = "google_auth-2.16.2-py2.py3-none-any.whl", hash = "sha256:2fef3cf94876d1a0e204afece58bb4d83fb57228aaa366c64045039fda6770a2"}, ] -google-auth-httplib2 = [ + +[package.dependencies] +cachetools = ">=2.0.0,<6.0" +pyasn1-modules = ">=0.2.1" +rsa = {version = ">=3.1.4,<5", markers = "python_version >= \"3.6\""} +six = ">=1.9.0" + +[package.extras] +aiohttp = ["aiohttp (>=3.6.2,<4.0.0dev)", "requests (>=2.20.0,<3.0.0dev)"] +enterprise-cert = ["cryptography (==36.0.2)", "pyopenssl (==22.0.0)"] +pyopenssl = ["cryptography (>=38.0.3)", "pyopenssl (>=20.0.0)"] +reauth = ["pyu2f (>=0.1.5)"] +requests = ["requests (>=2.20.0,<3.0.0dev)"] + +[[package]] +name = "google-auth-httplib2" +version = "0.1.0" +description = "Google Authentication Library: httplib2 transport" +category = "main" +optional = false +python-versions = "*" +files = [ {file = "google-auth-httplib2-0.1.0.tar.gz", hash = "sha256:a07c39fd632becacd3f07718dfd6021bf396978f03ad3ce4321d060015cc30ac"}, {file = "google_auth_httplib2-0.1.0-py2.py3-none-any.whl", hash = "sha256:31e49c36c6b5643b57e82617cb3e021e3e1d2df9da63af67252c02fa9c1f4a10"}, ] -googleapis-common-protos = [ + +[package.dependencies] +google-auth = "*" +httplib2 = ">=0.15.0" +six = "*" + +[[package]] +name = "googleapis-common-protos" +version = "1.58.0" +description = "Common protobufs used in Google APIs" +category = "main" +optional = false +python-versions = ">=3.7" +files = [ {file = "googleapis-common-protos-1.58.0.tar.gz", hash = "sha256:c727251ec025947d545184ba17e3578840fc3a24a0516a020479edab660457df"}, {file = "googleapis_common_protos-1.58.0-py2.py3-none-any.whl", hash = "sha256:ca3befcd4580dab6ad49356b46bf165bb68ff4b32389f028f1abd7c10ab9519a"}, ] -httplib2 = [ + +[package.dependencies] +protobuf = ">=3.19.5,<3.20.0 || >3.20.0,<3.20.1 || >3.20.1,<4.21.1 || >4.21.1,<4.21.2 || >4.21.2,<4.21.3 || >4.21.3,<4.21.4 || >4.21.4,<4.21.5 || >4.21.5,<5.0.0dev" + +[package.extras] +grpc = ["grpcio (>=1.44.0,<2.0.0dev)"] + +[[package]] +name = "httplib2" +version = "0.21.0" +description = "A comprehensive HTTP client library." +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +files = [ {file = "httplib2-0.21.0-py3-none-any.whl", hash = "sha256:987c8bb3eb82d3fa60c68699510a692aa2ad9c4bd4f123e51dfb1488c14cdd01"}, {file = "httplib2-0.21.0.tar.gz", hash = "sha256:fc144f091c7286b82bec71bdbd9b27323ba709cc612568d3000893bfd9cb4b34"}, ] -identify = [ + +[package.dependencies] +pyparsing = {version = ">=2.4.2,<3.0.0 || >3.0.0,<3.0.1 || >3.0.1,<3.0.2 || >3.0.2,<3.0.3 || >3.0.3,<4", markers = "python_version > \"3.0\""} + +[[package]] +name = "identify" +version = "2.5.20" +description = "File identification library for Python" +category = "main" +optional = false +python-versions = ">=3.7" +files = [ {file = "identify-2.5.20-py2.py3-none-any.whl", hash = "sha256:5dfef8a745ca4f2c95f27e9db74cb4c8b6d9916383988e8791f3595868f78a33"}, {file = "identify-2.5.20.tar.gz", hash = "sha256:c8b288552bc5f05a08aff09af2f58e6976bf8ac87beb38498a0e3d98ba64eb18"}, ] -idna = [ + +[package.extras] +license = ["ukkonen"] + +[[package]] +name = "idna" +version = "3.4" +description = "Internationalized Domain Names in Applications (IDNA)" +category = "main" +optional = false +python-versions = ">=3.5" +files = [ {file = "idna-3.4-py3-none-any.whl", hash = "sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2"}, {file = "idna-3.4.tar.gz", hash = "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4"}, ] -iniconfig = [ + +[[package]] +name = "iniconfig" +version = "2.0.0" +description = "brain-dead simple config-ini parsing" +category = "main" +optional = false +python-versions = ">=3.7" +files = [ {file = "iniconfig-2.0.0-py3-none-any.whl", hash = "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374"}, {file = "iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3"}, ] -isort = [ + +[[package]] +name = "isort" +version = "5.12.0" +description = "A Python utility / library to sort Python imports." +category = "main" +optional = false +python-versions = ">=3.8.0" +files = [ {file = "isort-5.12.0-py3-none-any.whl", hash = "sha256:f84c2818376e66cf843d497486ea8fed8700b340f308f076c6fb1229dff318b6"}, {file = "isort-5.12.0.tar.gz", hash = "sha256:8bef7dde241278824a6d83f44a544709b065191b95b6e50894bdc722fcba0504"}, ] -jinja2 = [ + +[package.extras] +colors = ["colorama (>=0.4.3)"] +pipfile-deprecated-finder = ["pip-shims (>=0.5.2)", "pipreqs", "requirementslib"] +plugins = ["setuptools"] +requirements-deprecated-finder = ["pip-api", "pipreqs"] + +[[package]] +name = "jinja2" +version = "3.1.2" +description = "A very fast and expressive template engine." +category = "main" +optional = false +python-versions = ">=3.7" +files = [ {file = "Jinja2-3.1.2-py3-none-any.whl", hash = "sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61"}, {file = "Jinja2-3.1.2.tar.gz", hash = "sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852"}, ] -jmespath = [ + +[package.dependencies] +MarkupSafe = ">=2.0" + +[package.extras] +i18n = ["Babel (>=2.7)"] + +[[package]] +name = "jmespath" +version = "1.0.1" +description = "JSON Matching Expressions" +category = "main" +optional = false +python-versions = ">=3.7" +files = [ {file = "jmespath-1.0.1-py3-none-any.whl", hash = "sha256:02e2e4cc71b5bcab88332eebf907519190dd9e6e82107fa7f83b1003a6252980"}, {file = "jmespath-1.0.1.tar.gz", hash = "sha256:90261b206d6defd58fdd5e85f478bf633a2901798906be2ad389150c5c60edbe"}, ] -jsonschema2md2 = [ + +[[package]] +name = "jsonschema2md2" +version = "0.6.0" +description = "Convert JSON Schema to human-readable Markdown documentation" +category = "main" +optional = false +python-versions = ">=3.6,<4.0" +files = [ {file = "jsonschema2md2-0.6.0-py3-none-any.whl", hash = "sha256:d71fe2c8418a93821597bfe151636e25eccedc41afa29e9ca875951f4966e451"}, {file = "jsonschema2md2-0.6.0.tar.gz", hash = "sha256:9c397bf3977290267dde4293e88f33feee41f90d9f77c61857447be7ce16d15b"}, ] -markupsafe = [ + +[package.dependencies] +click = ">=7" +PyYAML = ">=5.1" + +[[package]] +name = "markupsafe" +version = "2.1.2" +description = "Safely add untrusted strings to HTML/XML markup." +category = "main" +optional = false +python-versions = ">=3.7" +files = [ {file = "MarkupSafe-2.1.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:665a36ae6f8f20a4676b53224e33d456a6f5a72657d9c83c2aa00765072f31f7"}, {file = "MarkupSafe-2.1.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:340bea174e9761308703ae988e982005aedf427de816d1afe98147668cc03036"}, {file = "MarkupSafe-2.1.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22152d00bf4a9c7c83960521fc558f55a1adbc0631fbb00a9471e097b19d72e1"}, @@ -2014,19 +1196,60 @@ markupsafe = [ {file = "MarkupSafe-2.1.2-cp39-cp39-win_amd64.whl", hash = "sha256:0576fe974b40a400449768941d5d0858cc624e3249dfd1e0c33674e5c7ca7aed"}, {file = "MarkupSafe-2.1.2.tar.gz", hash = "sha256:abcabc8c2b26036d62d4c746381a6f7cf60aafcc653198ad678306986b09450d"}, ] -mccabe = [ + +[[package]] +name = "mccabe" +version = "0.7.0" +description = "McCabe checker, plugin for flake8" +category = "main" +optional = false +python-versions = ">=3.6" +files = [ {file = "mccabe-0.7.0-py2.py3-none-any.whl", hash = "sha256:6c2d30ab6be0e4a46919781807b4f0d834ebdd6c6e3dca0bda5a15f863427b6e"}, {file = "mccabe-0.7.0.tar.gz", hash = "sha256:348e0240c33b60bbdf4e523192ef919f28cb2c3d7d5c7794f74009290f236325"}, ] -mock = [ + +[[package]] +name = "mock" +version = "5.0.1" +description = "Rolling backport of unittest.mock for all Pythons" +category = "dev" +optional = false +python-versions = ">=3.6" +files = [ {file = "mock-5.0.1-py3-none-any.whl", hash = "sha256:c41cfb1e99ba5d341fbcc5308836e7d7c9786d302f995b2c271ce2144dece9eb"}, {file = "mock-5.0.1.tar.gz", hash = "sha256:e3ea505c03babf7977fd21674a69ad328053d414f05e6433c30d8fa14a534a6b"}, ] -mock-generator = [ + +[package.extras] +build = ["blurb", "twine", "wheel"] +docs = ["sphinx"] +test = ["pytest", "pytest-cov"] + +[[package]] +name = "mock-generator" +version = "2.4.0" +description = "Generate python mocks and assertions quickly" +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ {file = "mock-generator-2.4.0.tar.gz", hash = "sha256:8750092440a903a56d0afe5e2c4b1ea1f498a452c9cb5edea736927d30be4bf7"}, {file = "mock_generator-2.4.0-py3-none-any.whl", hash = "sha256:fae15d936bb5fa3866686f33be512d9513861885b6305d590d30f27993002226"}, ] -multidict = [ + +[package.dependencies] +mock = ">=3.0.5" +pyperclip = "1.8.2" + +[[package]] +name = "multidict" +version = "6.0.4" +description = "multidict implementation" +category = "main" +optional = false +python-versions = ">=3.7" +files = [ {file = "multidict-6.0.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:0b1a97283e0c85772d613878028fec909f003993e1007eafa715b24b377cb9b8"}, {file = "multidict-6.0.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:eeb6dcc05e911516ae3d1f207d4b0520d07f54484c49dfc294d6e7d63b734171"}, {file = "multidict-6.0.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d6d635d5209b82a3492508cf5b365f3446afb65ae7ebd755e70e18f287b0adf7"}, @@ -2102,11 +1325,27 @@ multidict = [ {file = "multidict-6.0.4-cp39-cp39-win_amd64.whl", hash = "sha256:33029f5734336aa0d4c0384525da0387ef89148dc7191aae00ca5fb23d7aafc2"}, {file = "multidict-6.0.4.tar.gz", hash = "sha256:3666906492efb76453c0e7b97f2cf459b0682e7402c0489a95484965dbc1da49"}, ] -mypy-extensions = [ + +[[package]] +name = "mypy-extensions" +version = "1.0.0" +description = "Type system extensions for programs checked with the mypy type checker." +category = "main" +optional = false +python-versions = ">=3.5" +files = [ {file = "mypy_extensions-1.0.0-py3-none-any.whl", hash = "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d"}, {file = "mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782"}, ] -nodeenv = [ + +[[package]] +name = "nodeenv" +version = "1.7.0" +description = "Node.js virtual environment builder" +category = "main" +optional = false +python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*" +files = [ {file = "nodeenv-1.7.0-py2.py3-none-any.whl", hash = "sha256:27083a7b96a25f2f5e1d8cb4b6317ee8aeda3bdd121394e5ac54e498028a042e"}, {file = "nodeenv-1.7.0.tar.gz", hash = "sha256:e0e7f7dfb85fc5394c6fe1e8fa98131a2473e04311a45afb6508f7cf1836fa2b"}, ] @@ -2163,11 +1402,41 @@ files = [ {file = "okta-2.8.0-py2.py3-none-any.whl", hash = "sha256:437c00626c02698e1559473391c5464193db50a301b91ae028701bc8d7c37d42"}, {file = "okta-2.8.0.tar.gz", hash = "sha256:c88549a0a5fd6fd63b61d976f2dc07c603db51ae7c2c9d763b3dedbe953b0807"}, ] -ordered-set = [ + +[package.dependencies] +aenum = "*" +aiohttp = "*" +flatdict = "*" +pycryptodome = "*" +pydash = "*" +python-jose = "*" +pyyaml = "*" +xmltodict = "*" +yarl = "*" + +[[package]] +name = "ordered-set" +version = "4.1.0" +description = "An OrderedSet is a custom MutableSet that remembers its order, so that every" +category = "main" +optional = false +python-versions = ">=3.7" +files = [ {file = "ordered-set-4.1.0.tar.gz", hash = "sha256:694a8e44c87657c59292ede72891eb91d34131f6531463aab3009191c77364a8"}, {file = "ordered_set-4.1.0-py3-none-any.whl", hash = "sha256:046e1132c71fcf3330438a539928932caf51ddbc582496833e23de611de14562"}, ] -packaging = [ + +[package.extras] +dev = ["black", "mypy", "pytest"] + +[[package]] +name = "packaging" +version = "23.0" +description = "Core utilities for Python packages" +category = "main" +optional = false +python-versions = ">=3.7" +files = [ {file = "packaging-23.0-py3-none-any.whl", hash = "sha256:714ac14496c3e68c99c29b00845f7a2b85f3bb6f1078fd9f72fd20f0570002b2"}, {file = "packaging-23.0.tar.gz", hash = "sha256:b6ad297f8907de0fa2fe1ccbd26fdaf387f5f47c7275fedf8cce89f99446cf97"}, ] @@ -2232,23 +1501,81 @@ files = [ {file = "pathspec-0.11.0-py3-none-any.whl", hash = "sha256:3a66eb970cbac598f9e5ccb5b2cf58930cd8e3ed86d393d541eaf2d8b1705229"}, {file = "pathspec-0.11.0.tar.gz", hash = "sha256:64d338d4e0914e91c1792321e6907b5a593f1ab1851de7fc269557a21b30ebbc"}, ] -platformdirs = [ + +[[package]] +name = "platformdirs" +version = "3.1.1" +description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." +category = "main" +optional = false +python-versions = ">=3.7" +files = [ {file = "platformdirs-3.1.1-py3-none-any.whl", hash = "sha256:e5986afb596e4bb5bde29a79ac9061aa955b94fca2399b7aaac4090860920dd8"}, {file = "platformdirs-3.1.1.tar.gz", hash = "sha256:024996549ee88ec1a9aa99ff7f8fc819bb59e2c3477b410d90a16d32d6e707aa"}, ] -pluggy = [ + +[package.extras] +docs = ["furo (>=2022.12.7)", "proselint (>=0.13)", "sphinx (>=6.1.3)", "sphinx-autodoc-typehints (>=1.22,!=1.23.4)"] +test = ["appdirs (==1.4.4)", "covdefaults (>=2.2.2)", "pytest (>=7.2.1)", "pytest-cov (>=4)", "pytest-mock (>=3.10)"] + +[[package]] +name = "pluggy" +version = "1.0.0" +description = "plugin and hook calling mechanisms for python" +category = "main" +optional = false +python-versions = ">=3.6" +files = [ {file = "pluggy-1.0.0-py2.py3-none-any.whl", hash = "sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3"}, {file = "pluggy-1.0.0.tar.gz", hash = "sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159"}, ] -pre-commit = [ + +[package.extras] +dev = ["pre-commit", "tox"] +testing = ["pytest", "pytest-benchmark"] + +[[package]] +name = "pre-commit" +version = "2.21.0" +description = "A framework for managing and maintaining multi-language pre-commit hooks." +category = "main" +optional = false +python-versions = ">=3.7" +files = [ {file = "pre_commit-2.21.0-py2.py3-none-any.whl", hash = "sha256:e2f91727039fc39a92f58a588a25b87f936de6567eed4f0e673e0507edc75bad"}, {file = "pre_commit-2.21.0.tar.gz", hash = "sha256:31ef31af7e474a8d8995027fefdfcf509b5c913ff31f2015b4ec4beb26a6f658"}, ] -prompt-toolkit = [ + +[package.dependencies] +cfgv = ">=2.0.0" +identify = ">=1.0.0" +nodeenv = ">=0.11.1" +pyyaml = ">=5.1" +virtualenv = ">=20.10.0" + +[[package]] +name = "prompt-toolkit" +version = "3.0.38" +description = "Library for building powerful interactive command lines in Python" +category = "main" +optional = false +python-versions = ">=3.7.0" +files = [ {file = "prompt_toolkit-3.0.38-py3-none-any.whl", hash = "sha256:45ea77a2f7c60418850331366c81cf6b5b9cf4c7fd34616f733c5427e6abbb1f"}, {file = "prompt_toolkit-3.0.38.tar.gz", hash = "sha256:23ac5d50538a9a38c8bde05fecb47d0b403ecd0662857a86f886f798563d5b9b"}, ] -protobuf = [ + +[package.dependencies] +wcwidth = "*" + +[[package]] +name = "protobuf" +version = "4.22.1" +description = "" +category = "main" +optional = false +python-versions = ">=3.7" +files = [ {file = "protobuf-4.22.1-cp310-abi3-win32.whl", hash = "sha256:85aa9acc5a777adc0c21b449dafbc40d9a0b6413ff3a4f77ef9df194be7f975b"}, {file = "protobuf-4.22.1-cp310-abi3-win_amd64.whl", hash = "sha256:8bc971d76c03f1dd49f18115b002254f2ddb2d4b143c583bb860b796bb0d399e"}, {file = "protobuf-4.22.1-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:5917412347e1da08ce2939eb5cd60650dfb1a9ab4606a415b9278a1041fb4d19"}, @@ -2263,23 +1590,66 @@ protobuf = [ {file = "protobuf-4.22.1-py3-none-any.whl", hash = "sha256:3e19dcf4adbf608924d3486ece469dd4f4f2cf7d2649900f0efcd1a84e8fd3ba"}, {file = "protobuf-4.22.1.tar.gz", hash = "sha256:dce7a55d501c31ecf688adb2f6c3f763cf11bc0be815d1946a84d74772ab07a7"}, ] -pyasn1 = [ + +[[package]] +name = "pyasn1" +version = "0.4.8" +description = "ASN.1 types and codecs" +category = "main" +optional = false +python-versions = "*" +files = [ {file = "pyasn1-0.4.8-py2.py3-none-any.whl", hash = "sha256:39c7e2ec30515947ff4e87fb6f456dfc6e84857d34be479c9d4a4ba4bf46aa5d"}, {file = "pyasn1-0.4.8.tar.gz", hash = "sha256:aef77c9fb94a3ac588e87841208bdec464471d9871bd5050a287cc9a475cd0ba"}, ] -pyasn1-modules = [ + +[[package]] +name = "pyasn1-modules" +version = "0.2.8" +description = "A collection of ASN.1-based protocols modules." +category = "main" +optional = false +python-versions = "*" +files = [ {file = "pyasn1-modules-0.2.8.tar.gz", hash = "sha256:905f84c712230b2c592c19470d3ca8d552de726050d1d1716282a1f6146be65e"}, {file = "pyasn1_modules-0.2.8-py2.py3-none-any.whl", hash = "sha256:a50b808ffeb97cb3601dd25981f6b016cbb3d31fbf57a8b8a87428e6158d0c74"}, ] -pycodestyle = [ + +[package.dependencies] +pyasn1 = ">=0.4.6,<0.5.0" + +[[package]] +name = "pycodestyle" +version = "2.9.1" +description = "Python style guide checker" +category = "main" +optional = false +python-versions = ">=3.6" +files = [ {file = "pycodestyle-2.9.1-py2.py3-none-any.whl", hash = "sha256:d1735fc58b418fd7c5f658d28d943854f8a849b01a5d0a1e6f3f3fdd0166804b"}, {file = "pycodestyle-2.9.1.tar.gz", hash = "sha256:2c9607871d58c76354b697b42f5d57e1ada7d261c261efac224b664affdc5785"}, ] -pycparser = [ + +[[package]] +name = "pycparser" +version = "2.21" +description = "C parser in Python" +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +files = [ {file = "pycparser-2.21-py2.py3-none-any.whl", hash = "sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9"}, {file = "pycparser-2.21.tar.gz", hash = "sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206"}, ] -pycryptodome = [ + +[[package]] +name = "pycryptodome" +version = "3.17" +description = "Cryptographic library for Python" +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +files = [ {file = "pycryptodome-3.17-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:2c5631204ebcc7ae33d11c43037b2dafe25e2ab9c1de6448eb6502ac69c19a56"}, {file = "pycryptodome-3.17-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:04779cc588ad8f13c80a060b0b1c9d1c203d051d8a43879117fe6b8aaf1cd3fa"}, {file = "pycryptodome-3.17-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:f812d58c5af06d939b2baccdda614a3ffd80531a26e5faca2c9f8b1770b2b7af"}, @@ -2314,7 +1684,15 @@ pycryptodome = [ {file = "pycryptodome-3.17-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:74794a2e2896cd0cf56fdc9db61ef755fa812b4a4900fa46c49045663a92b8d0"}, {file = "pycryptodome-3.17.tar.gz", hash = "sha256:bce2e2d8e82fcf972005652371a3e8731956a0c1fbb719cc897943b3695ad91b"}, ] -pydantic = [ + +[[package]] +name = "pydantic" +version = "1.10.6" +description = "Data validation and settings management using python type hints" +category = "main" +optional = false +python-versions = ">=3.7" +files = [ {file = "pydantic-1.10.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f9289065611c48147c1dd1fd344e9d57ab45f1d99b0fb26c51f1cf72cd9bcd31"}, {file = "pydantic-1.10.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8c32b6bba301490d9bb2bf5f631907803135e8085b6aa3e5fe5a770d46dd0160"}, {file = "pydantic-1.10.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd9b9e98068fa1068edfc9eabde70a7132017bdd4f362f8b4fd0abed79c33083"}, @@ -2352,27 +1730,105 @@ pydantic = [ {file = "pydantic-1.10.6-py3-none-any.whl", hash = "sha256:acc6783751ac9c9bc4680379edd6d286468a1dc8d7d9906cd6f1186ed682b2b0"}, {file = "pydantic-1.10.6.tar.gz", hash = "sha256:cf95adb0d1671fc38d8c43dd921ad5814a735e7d9b4d9e437c088002863854fd"}, ] -pydantic-factories = [ + +[package.dependencies] +typing-extensions = ">=4.2.0" + +[package.extras] +dotenv = ["python-dotenv (>=0.10.4)"] +email = ["email-validator (>=1.0.3)"] + +[[package]] +name = "pydantic-factories" +version = "1.17.2" +description = "Mock data generation for pydantic based models and python dataclasses" +category = "main" +optional = false +python-versions = ">=3.8,<4.0" +files = [ {file = "pydantic_factories-1.17.2-py3-none-any.whl", hash = "sha256:e1378700a9e963b368b602e46e8ccc3331027f10233e617eb47b3a3dd052ee25"}, {file = "pydantic_factories-1.17.2.tar.gz", hash = "sha256:a1ea1d3a595235a65f954d6e182ec4bfe94645f2c4d986fd43ae19a62ffb90b0"}, ] -pydash = [ + +[package.dependencies] +faker = "*" +pydantic = ">=1.10.0" +typing-extensions = "*" + +[[package]] +name = "pydash" +version = "6.0.2" +description = "The kitchen sink of Python utility libraries for doing \"stuff\" in a functional way. Based on the Lo-Dash Javascript library." +category = "main" +optional = false +python-versions = ">=3.7" +files = [ {file = "pydash-6.0.2-py3-none-any.whl", hash = "sha256:6d3ce5cbbc8ca3533c12782ac201c2ec756d1e1703ec3efc88f2b95d1ed2bb31"}, {file = "pydash-6.0.2.tar.gz", hash = "sha256:35caa588e01d293713655e0870544d25128cd414c5e19477a0d63adc2b2ca03e"}, ] -pyflakes = [ + +[package.extras] +dev = ["Sphinx", "black", "build", "coverage", "docformatter", "flake8", "flake8-black", "flake8-bugbear", "flake8-isort", "importlib-metadata (<5)", "invoke", "isort", "pylint", "pytest", "pytest-cov", "sphinx-rtd-theme", "tox", "twine", "wheel"] + +[[package]] +name = "pyflakes" +version = "2.5.0" +description = "passive checker of Python programs" +category = "main" +optional = false +python-versions = ">=3.6" +files = [ {file = "pyflakes-2.5.0-py2.py3-none-any.whl", hash = "sha256:4579f67d887f804e67edb544428f264b7b24f435b263c4614f384135cea553d2"}, {file = "pyflakes-2.5.0.tar.gz", hash = "sha256:491feb020dca48ccc562a8c0cbe8df07ee13078df59813b83959cbdada312ea3"}, ] -pygithub = [ + +[[package]] +name = "pygithub" +version = "1.57" +description = "Use the full Github API v3" +category = "main" +optional = false +python-versions = ">=3.7" +files = [ {file = "PyGithub-1.57-py3-none-any.whl", hash = "sha256:5822febeac2391f1306c55a99af2bc8f86c8bf82ded000030cd02c18f31b731f"}, {file = "PyGithub-1.57.tar.gz", hash = "sha256:c273f252b278fb81f1769505cc6921bdb6791e1cebd6ac850cc97dad13c31ff3"}, ] -pyjwt = [ + +[package.dependencies] +deprecated = "*" +pyjwt = ">=2.4.0" +pynacl = ">=1.4.0" +requests = ">=2.14.0" + +[package.extras] +integrations = ["cryptography"] + +[[package]] +name = "pyjwt" +version = "2.6.0" +description = "JSON Web Token implementation in Python" +category = "main" +optional = false +python-versions = ">=3.7" +files = [ {file = "PyJWT-2.6.0-py3-none-any.whl", hash = "sha256:d83c3d892a77bbb74d3e1a2cfa90afaadb60945205d1095d9221f04466f64c14"}, {file = "PyJWT-2.6.0.tar.gz", hash = "sha256:69285c7e31fc44f68a1feb309e948e0df53259d579295e6cfe2b1792329f05fd"}, ] -pynacl = [ + +[package.extras] +crypto = ["cryptography (>=3.4.0)"] +dev = ["coverage[toml] (==5.0.4)", "cryptography (>=3.4.0)", "pre-commit", "pytest (>=6.0.0,<7.0.0)", "sphinx (>=4.5.0,<5.0.0)", "sphinx-rtd-theme", "zope.interface"] +docs = ["sphinx (>=4.5.0,<5.0.0)", "sphinx-rtd-theme", "zope.interface"] +tests = ["coverage[toml] (==5.0.4)", "pytest (>=6.0.0,<7.0.0)"] + +[[package]] +name = "pynacl" +version = "1.5.0" +description = "Python binding to the Networking and Cryptography (NaCl) library" +category = "main" +optional = false +python-versions = ">=3.6" +files = [ {file = "PyNaCl-1.5.0-cp36-abi3-macosx_10_10_universal2.whl", hash = "sha256:401002a4aaa07c9414132aaed7f6836ff98f59277a234704ff66878c2ee4a0d1"}, {file = "PyNaCl-1.5.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:52cb72a79269189d4e0dc537556f4740f7f0a9ec41c1322598799b0bdad4ef92"}, {file = "PyNaCl-1.5.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a36d4a9dda1f19ce6e03c9a784a2921a4b726b02e1c736600ca9c22029474394"}, @@ -2384,50 +1840,207 @@ pynacl = [ {file = "PyNaCl-1.5.0-cp36-abi3-win_amd64.whl", hash = "sha256:20f42270d27e1b6a29f54032090b972d97f0a1b0948cc52392041ef7831fee93"}, {file = "PyNaCl-1.5.0.tar.gz", hash = "sha256:8ac7448f09ab85811607bdd21ec2464495ac8b7c66d146bf545b0f08fb9220ba"}, ] -pyparsing = [ + +[package.dependencies] +cffi = ">=1.4.1" + +[package.extras] +docs = ["sphinx (>=1.6.5)", "sphinx-rtd-theme"] +tests = ["hypothesis (>=3.27.0)", "pytest (>=3.2.1,!=3.3.0)"] + +[[package]] +name = "pyparsing" +version = "3.0.9" +description = "pyparsing module - Classes and methods to define and execute parsing grammars" +category = "main" +optional = false +python-versions = ">=3.6.8" +files = [ {file = "pyparsing-3.0.9-py3-none-any.whl", hash = "sha256:5026bae9a10eeaefb61dab2f09052b9f4307d44aee4eda64b309723d8d206bbc"}, {file = "pyparsing-3.0.9.tar.gz", hash = "sha256:2b020ecf7d21b687f219b71ecad3631f644a47f01403fa1d1036b0c6416d70fb"}, ] -pyperclip = [ + +[package.extras] +diagrams = ["jinja2", "railroad-diagrams"] + +[[package]] +name = "pyperclip" +version = "1.8.2" +description = "A cross-platform clipboard module for Python. (Only handles plain text for now.)" +category = "dev" +optional = false +python-versions = "*" +files = [ {file = "pyperclip-1.8.2.tar.gz", hash = "sha256:105254a8b04934f0bc84e9c24eb360a591aaf6535c9def5f29d92af107a9bf57"}, ] -pytest = [ + +[[package]] +name = "pytest" +version = "7.2.2" +description = "pytest: simple powerful testing with Python" +category = "main" +optional = false +python-versions = ">=3.7" +files = [ {file = "pytest-7.2.2-py3-none-any.whl", hash = "sha256:130328f552dcfac0b1cec75c12e3f005619dc5f874f0a06e8ff7263f0ee6225e"}, {file = "pytest-7.2.2.tar.gz", hash = "sha256:c99ab0c73aceb050f68929bc93af19ab6db0558791c6a0715723abe9d0ade9d4"}, ] -pytest-asyncio = [ + +[package.dependencies] +attrs = ">=19.2.0" +colorama = {version = "*", markers = "sys_platform == \"win32\""} +exceptiongroup = {version = ">=1.0.0rc8", markers = "python_version < \"3.11\""} +iniconfig = "*" +packaging = "*" +pluggy = ">=0.12,<2.0" +tomli = {version = ">=1.0.0", markers = "python_version < \"3.11\""} + +[package.extras] +testing = ["argcomplete", "hypothesis (>=3.56)", "mock", "nose", "pygments (>=2.7.2)", "requests", "xmlschema"] + +[[package]] +name = "pytest-asyncio" +version = "0.20.3" +description = "Pytest support for asyncio" +category = "main" +optional = false +python-versions = ">=3.7" +files = [ {file = "pytest-asyncio-0.20.3.tar.gz", hash = "sha256:83cbf01169ce3e8eb71c6c278ccb0574d1a7a3bb8eaaf5e50e0ad342afb33b36"}, {file = "pytest_asyncio-0.20.3-py3-none-any.whl", hash = "sha256:f129998b209d04fcc65c96fc85c11e5316738358909a8399e93be553d7656442"}, ] -pytest-cov = [ + +[package.dependencies] +pytest = ">=6.1.0" + +[package.extras] +docs = ["sphinx (>=5.3)", "sphinx-rtd-theme (>=1.0)"] +testing = ["coverage (>=6.2)", "flaky (>=3.5.0)", "hypothesis (>=5.7.1)", "mypy (>=0.931)", "pytest-trio (>=0.7.0)"] + +[[package]] +name = "pytest-cov" +version = "4.0.0" +description = "Pytest plugin for measuring coverage." +category = "main" +optional = false +python-versions = ">=3.6" +files = [ {file = "pytest-cov-4.0.0.tar.gz", hash = "sha256:996b79efde6433cdbd0088872dbc5fb3ed7fe1578b68cdbba634f14bb8dd0470"}, {file = "pytest_cov-4.0.0-py3-none-any.whl", hash = "sha256:2feb1b751d66a8bd934e5edfa2e961d11309dc37b73b0eabe73b5945fee20f6b"}, ] -pytest-mock = [ + +[package.dependencies] +coverage = {version = ">=5.2.1", extras = ["toml"]} +pytest = ">=4.6" + +[package.extras] +testing = ["fields", "hunter", "process-tests", "pytest-xdist", "six", "virtualenv"] + +[[package]] +name = "pytest-mock" +version = "3.10.0" +description = "Thin-wrapper around the mock package for easier use with pytest" +category = "main" +optional = false +python-versions = ">=3.7" +files = [ {file = "pytest-mock-3.10.0.tar.gz", hash = "sha256:fbbdb085ef7c252a326fd8cdcac0aa3b1333d8811f131bdcc701002e1be7ed4f"}, {file = "pytest_mock-3.10.0-py3-none-any.whl", hash = "sha256:f4c973eeae0282963eb293eb173ce91b091a79c1334455acfac9ddee8a1c784b"}, ] -pytest-mock-generator = [ + +[package.dependencies] +pytest = ">=5.0" + +[package.extras] +dev = ["pre-commit", "pytest-asyncio", "tox"] + +[[package]] +name = "pytest-mock-generator" +version = "1.2.0" +description = "A pytest fixture wrapper for https://pypi.org/project/mock-generator" +category = "dev" +optional = false +python-versions = ">=3.7,<4.0" +files = [ {file = "pytest-mock-generator-1.2.0.tar.gz", hash = "sha256:89a08abe2ce09bbf0e6d41c3903a790448aad3be0748e3a8faaebcdde6ec3788"}, {file = "pytest_mock_generator-1.2.0-py3-none-any.whl", hash = "sha256:251b6fabc1182e30a685ed34d60331c33ae95c3ecf06c3dcdec11da18120468c"}, ] -python-dateutil = [ + +[package.dependencies] +mock-generator = ">=2.4,<3.0" + +[[package]] +name = "python-dateutil" +version = "2.8.2" +description = "Extensions to the standard Python datetime module" +category = "main" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" +files = [ {file = "python-dateutil-2.8.2.tar.gz", hash = "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86"}, {file = "python_dateutil-2.8.2-py2.py3-none-any.whl", hash = "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"}, ] -python-jose = [ + +[package.dependencies] +six = ">=1.5" + +[[package]] +name = "python-jose" +version = "3.3.0" +description = "JOSE implementation in Python" +category = "main" +optional = false +python-versions = "*" +files = [ {file = "python-jose-3.3.0.tar.gz", hash = "sha256:55779b5e6ad599c6336191246e95eb2293a9ddebd555f796a65f838f07e5d78a"}, {file = "python_jose-3.3.0-py2.py3-none-any.whl", hash = "sha256:9b1376b023f8b298536eedd47ae1089bcdb848f1535ab30555cd92002d78923a"}, ] -pytz = [ + +[package.dependencies] +ecdsa = "!=0.15" +pyasn1 = "*" +rsa = "*" + +[package.extras] +cryptography = ["cryptography (>=3.4.0)"] +pycrypto = ["pyasn1", "pycrypto (>=2.6.0,<2.7.0)"] +pycryptodome = ["pyasn1", "pycryptodome (>=3.3.1,<4.0.0)"] + +[[package]] +name = "pytz" +version = "2022.7.1" +description = "World timezone definitions, modern and historical" +category = "main" +optional = false +python-versions = "*" +files = [ {file = "pytz-2022.7.1-py2.py3-none-any.whl", hash = "sha256:78f4f37d8198e0627c5f1143240bb0206b8691d8d7ac6d78fee88b78733f8c4a"}, {file = "pytz-2022.7.1.tar.gz", hash = "sha256:01a0681c4b9684a28304615eba55d1ab31ae00bf68ec157ec3708a8182dbbcd0"}, ] -pytz-deprecation-shim = [ + +[[package]] +name = "pytz-deprecation-shim" +version = "0.1.0.post0" +description = "Shims to make deprecation of pytz easier" +category = "main" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" +files = [ {file = "pytz_deprecation_shim-0.1.0.post0-py2.py3-none-any.whl", hash = "sha256:8314c9692a636c8eb3bda879b9f119e350e93223ae83e70e80c31675a0fdc1a6"}, {file = "pytz_deprecation_shim-0.1.0.post0.tar.gz", hash = "sha256:af097bae1b616dde5c5744441e2ddc69e74dfdcb0c263129610d85b87445a59d"}, ] -pyyaml = [ + +[package.dependencies] +tzdata = {version = "*", markers = "python_version >= \"3.6\""} + +[[package]] +name = "pyyaml" +version = "6.0" +description = "YAML parser and emitter for Python" +category = "main" +optional = false +python-versions = ">=3.6" +files = [ {file = "PyYAML-6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d4db7c7aef085872ef65a8fd7d6d09a14ae91f691dec3e87ee5ee0539d516f53"}, {file = "PyYAML-6.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9df7ed3b3d2e0ecfe09e14741b857df43adb5a3ddadc919a2d94fbdf78fea53c"}, {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77f396e6ef4c73fdc33a9157446466f1cff553d979bd00ecb64385760c6babdc"}, @@ -2469,7 +2082,15 @@ pyyaml = [ {file = "PyYAML-6.0-cp39-cp39-win_amd64.whl", hash = "sha256:b3d267842bf12586ba6c734f89d1f5b871df0273157918b0ccefa29deb05c21c"}, {file = "PyYAML-6.0.tar.gz", hash = "sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2"}, ] -questionary = [ + +[[package]] +name = "questionary" +version = "1.10.0" +description = "Python library to build pretty command line user prompts ⭐️" +category = "main" +optional = false +python-versions = ">=3.6,<4.0" +files = [ {file = "questionary-1.10.0-py3-none-any.whl", hash = "sha256:fecfcc8cca110fda9d561cb83f1e97ecbb93c613ff857f655818839dac74ce90"}, {file = "questionary-1.10.0.tar.gz", hash = "sha256:600d3aefecce26d48d97eee936fdb66e4bc27f934c3ab6dd1e292c4f43946d90"}, ] @@ -2593,19 +2214,71 @@ files = [ {file = "regex-2022.10.31-cp39-cp39-win_amd64.whl", hash = "sha256:957403a978e10fb3ca42572a23e6f7badff39aa1ce2f4ade68ee452dc6807692"}, {file = "regex-2022.10.31.tar.gz", hash = "sha256:a3a98921da9a1bf8457aeee6a551948a83601689e5ecdd736894ea9bbec77e83"}, ] -requests = [ + +[[package]] +name = "requests" +version = "2.28.2" +description = "Python HTTP for Humans." +category = "main" +optional = false +python-versions = ">=3.7, <4" +files = [ {file = "requests-2.28.2-py3-none-any.whl", hash = "sha256:64299f4909223da747622c030b781c0d7811e359c37124b4bd368fb8c6518baa"}, {file = "requests-2.28.2.tar.gz", hash = "sha256:98b1b2782e3c6c4904938b84c0eb932721069dfdb9134313beff7c83c2df24bf"}, ] -rsa = [ + +[package.dependencies] +certifi = ">=2017.4.17" +charset-normalizer = ">=2,<4" +idna = ">=2.5,<4" +urllib3 = ">=1.21.1,<1.27" + +[package.extras] +socks = ["PySocks (>=1.5.6,!=1.5.7)"] +use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] + +[[package]] +name = "rsa" +version = "4.9" +description = "Pure-Python RSA implementation" +category = "main" +optional = false +python-versions = ">=3.6,<4" +files = [ {file = "rsa-4.9-py3-none-any.whl", hash = "sha256:90260d9058e514786967344d0ef75fa8727eed8a7d2e43ce9f4bcf1b536174f7"}, {file = "rsa-4.9.tar.gz", hash = "sha256:e38464a49c6c85d7f1351b0126661487a7e0a14a50f1675ec50eb34d4f20ef21"}, ] -ruamel-yaml = [ + +[package.dependencies] +pyasn1 = ">=0.1.3" + +[[package]] +name = "ruamel-yaml" +version = "0.17.21" +description = "ruamel.yaml is a YAML parser/emitter that supports roundtrip preservation of comments, seq/map flow style, and map key order" +category = "main" +optional = false +python-versions = ">=3" +files = [ {file = "ruamel.yaml-0.17.21-py3-none-any.whl", hash = "sha256:742b35d3d665023981bd6d16b3d24248ce5df75fdb4e2924e93a05c1f8b61ca7"}, {file = "ruamel.yaml-0.17.21.tar.gz", hash = "sha256:8b7ce697a2f212752a35c1ac414471dc16c424c9573be4926b56ff3f5d23b7af"}, ] -ruamel-yaml-clib = [ + +[package.dependencies] +"ruamel.yaml.clib" = {version = ">=0.2.6", markers = "platform_python_implementation == \"CPython\" and python_version < \"3.11\""} + +[package.extras] +docs = ["ryd"] +jinja2 = ["ruamel.yaml.jinja2 (>=0.2)"] + +[[package]] +name = "ruamel-yaml-clib" +version = "0.2.7" +description = "C version of reader, parser and emitter for ruamel.yaml derived from libyaml" +category = "main" +optional = false +python-versions = ">=3.5" +files = [ {file = "ruamel.yaml.clib-0.2.7-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d5859983f26d8cd7bb5c287ef452e8aacc86501487634573d260968f753e1d71"}, {file = "ruamel.yaml.clib-0.2.7-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:debc87a9516b237d0466a711b18b6ebeb17ba9f391eb7f91c649c5c4ec5006c7"}, {file = "ruamel.yaml.clib-0.2.7-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:df5828871e6648db72d1c19b4bd24819b80a755c4541d3409f0f7acd0f335c80"}, @@ -2643,75 +2316,258 @@ ruamel-yaml-clib = [ {file = "ruamel.yaml.clib-0.2.7-cp39-cp39-win_amd64.whl", hash = "sha256:184faeaec61dbaa3cace407cffc5819f7b977e75360e8d5ca19461cd851a5fc5"}, {file = "ruamel.yaml.clib-0.2.7.tar.gz", hash = "sha256:1f08fd5a2bea9c4180db71678e850b995d2a5f4537be0e94557668cf0f5f9497"}, ] -s3transfer = [ + +[[package]] +name = "s3transfer" +version = "0.6.0" +description = "An Amazon S3 Transfer Manager" +category = "main" +optional = false +python-versions = ">= 3.7" +files = [ {file = "s3transfer-0.6.0-py3-none-any.whl", hash = "sha256:06176b74f3a15f61f1b4f25a1fc29a4429040b7647133a463da8fa5bd28d5ecd"}, {file = "s3transfer-0.6.0.tar.gz", hash = "sha256:2ed07d3866f523cc561bf4a00fc5535827981b117dd7876f036b0c1aca42c947"}, ] -setuptools = [ + +[package.dependencies] +botocore = ">=1.12.36,<2.0a.0" + +[package.extras] +crt = ["botocore[crt] (>=1.20.29,<2.0a.0)"] + +[[package]] +name = "setuptools" +version = "67.6.0" +description = "Easily download, build, install, upgrade, and uninstall Python packages" +category = "main" +optional = false +python-versions = ">=3.7" +files = [ {file = "setuptools-67.6.0-py3-none-any.whl", hash = "sha256:b78aaa36f6b90a074c1fa651168723acbf45d14cb1196b6f02c0fd07f17623b2"}, {file = "setuptools-67.6.0.tar.gz", hash = "sha256:2ee892cd5f29f3373097f5a814697e397cf3ce313616df0af11231e2ad118077"}, ] -six = [ + +[package.extras] +docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-hoverxref (<2)", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (==0.8.3)", "sphinx-reredirects", "sphinxcontrib-towncrier"] +testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8 (<5)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pip (>=19.1)", "pip-run (>=8.8)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] +testing-integration = ["build[virtualenv]", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] + +[[package]] +name = "six" +version = "1.16.0" +description = "Python 2 and 3 compatibility utilities" +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" +files = [ {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, ] -slack-bolt = [ + +[[package]] +name = "slack-bolt" +version = "1.16.4" +description = "The Bolt Framework for Python" +category = "main" +optional = false +python-versions = ">=3.6" +files = [ {file = "slack_bolt-1.16.4-py2.py3-none-any.whl", hash = "sha256:21819e680b9ac64e9228ba3d586367bf550710c16d0f4dc1729fc81f7ec1ac55"}, {file = "slack_bolt-1.16.4.tar.gz", hash = "sha256:3b4eeb72a7ecbfc83957de20d72196dfcef7b705bef8124719d703f7156094db"}, ] -slack-sdk = [ + +[package.dependencies] +slack-sdk = ">=3.20.2,<4" + +[package.extras] +adapter = ["CherryPy (>=18,<19)", "Django (>=3,<5)", "Flask (>=1,<3)", "Werkzeug (>=2,<3)", "boto3 (<=2)", "bottle (>=0.12,<1)", "chalice (<=1.27.3)", "falcon (>=2,<4)", "fastapi (>=0.70.0,<1)", "gunicorn (>=20,<21)", "pyramid (>=1,<3)", "sanic (>=22,<23)", "starlette (>=0.14,<1)", "tornado (>=6,<7)", "uvicorn (<1)", "websocket-client (>=1.2.3,<2)"] +adapter-testing = ["Flask (>=1,<2)", "Werkzeug (>=1,<2)", "boddle (>=0.2,<0.3)", "docker (>=5,<6)", "moto (>=3,<4)", "requests (>=2,<3)", "sanic-testing (>=0.7)"] +async = ["aiohttp (>=3,<4)", "websockets (>=10,<11)"] +testing = ["Flask-Sockets (>=0.2,<1)", "Jinja2 (==3.0.3)", "Werkzeug (>=1,<2)", "aiohttp (>=3,<4)", "black (==22.8.0)", "click (<=8.0.4)", "itsdangerous (==2.0.1)", "pytest (>=6.2.5,<7)", "pytest-asyncio (>=0.18.2,<1)", "pytest-cov (>=3,<4)"] +testing-without-asyncio = ["Flask-Sockets (>=0.2,<1)", "Jinja2 (==3.0.3)", "Werkzeug (>=1,<2)", "black (==22.8.0)", "click (<=8.0.4)", "itsdangerous (==2.0.1)", "pytest (>=6.2.5,<7)", "pytest-cov (>=3,<4)"] + +[[package]] +name = "slack-sdk" +version = "3.20.2" +description = "The Slack API Platform SDK for Python" +category = "main" +optional = false +python-versions = ">=3.6.0" +files = [ {file = "slack_sdk-3.20.2-py2.py3-none-any.whl", hash = "sha256:224fcb4fef9575226e76555d9a0acdbd93d7596a416bc3ae7b443b3b64e9f0e3"}, {file = "slack_sdk-3.20.2.tar.gz", hash = "sha256:f61db1f6e49dd2ee84e82ddb5d1c5db7a5987b8be9ba975dc00799334c84f8cd"}, ] -smmap = [ + +[package.extras] +optional = ["SQLAlchemy (>=1.4,<3)", "aiodns (>1.0)", "aiohttp (>=3.7.3,<4)", "boto3 (<=2)", "websocket-client (>=1,<2)", "websockets (>=10,<11)"] +testing = ["Flask (>=1,<2)", "Flask-Sockets (>=0.2,<1)", "Jinja2 (==3.0.3)", "Werkzeug (<2)", "black (==22.8.0)", "boto3 (<=2)", "click (==8.0.4)", "codecov (>=2,<3)", "databases (>=0.5)", "flake8 (>=5,<6)", "itsdangerous (==1.1.0)", "moto (>=3,<4)", "psutil (>=5,<6)", "pytest (>=6.2.5,<7)", "pytest-asyncio (<1)", "pytest-cov (>=2,<3)"] + +[[package]] +name = "smmap" +version = "5.0.0" +description = "A pure Python implementation of a sliding window memory map manager" +category = "main" +optional = false +python-versions = ">=3.6" +files = [ {file = "smmap-5.0.0-py3-none-any.whl", hash = "sha256:2aba19d6a040e78d8b09de5c57e96207b09ed71d8e55ce0959eeee6c8e190d94"}, {file = "smmap-5.0.0.tar.gz", hash = "sha256:c840e62059cd3be204b0c9c9f74be2c09d5648eddd4580d9314c3ecde0b30936"}, ] -structlog = [ + +[[package]] +name = "structlog" +version = "22.3.0" +description = "Structured Logging for Python" +category = "main" +optional = false +python-versions = ">=3.7" +files = [ {file = "structlog-22.3.0-py3-none-any.whl", hash = "sha256:b403f344f902b220648fa9f286a23c0cc5439a5844d271fec40562dbadbc70ad"}, {file = "structlog-22.3.0.tar.gz", hash = "sha256:e7509391f215e4afb88b1b80fa3ea074be57a5a17d794bd436a5c949da023333"}, ] -tomli = [ + +[package.extras] +dev = ["structlog[docs,tests,typing]"] +docs = ["furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-mermaid", "twisted"] +tests = ["coverage[toml]", "freezegun (>=0.2.8)", "pretend", "pytest (>=6.0)", "pytest-asyncio (>=0.17)", "simplejson"] +typing = ["mypy", "rich", "twisted"] + +[[package]] +name = "tomli" +version = "2.0.1" +description = "A lil' TOML parser" +category = "main" +optional = false +python-versions = ">=3.7" +files = [ {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"}, {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, ] -types-aiofiles = [ + +[[package]] +name = "types-aiofiles" +version = "22.1.0.9" +description = "Typing stubs for aiofiles" +category = "dev" +optional = false +python-versions = "*" +files = [ {file = "types-aiofiles-22.1.0.9.tar.gz", hash = "sha256:d46712556746cb4c9b63f86217c8cc0e9c54b5cf228ed9d8c1c21e38c2d9de99"}, {file = "types_aiofiles-22.1.0.9-py3-none-any.whl", hash = "sha256:d0bdc4d978528c6df37816879b7ff9dc0096dd70483d885e9c8624a560f31cc5"}, ] -types-cachetools = [ + +[[package]] +name = "types-cachetools" +version = "5.3.0.4" +description = "Typing stubs for cachetools" +category = "dev" +optional = false +python-versions = "*" +files = [ {file = "types-cachetools-5.3.0.4.tar.gz", hash = "sha256:9734ae93fe7fcf42693808bae643ae537a005c39d298718069393e6326f58184"}, {file = "types_cachetools-5.3.0.4-py3-none-any.whl", hash = "sha256:611b8c11c4a8df39bef25db1ae41d9c48517d0f5fa0fa1d46c62f3bb677309e7"}, ] -types-dateparser = [ + +[[package]] +name = "types-dateparser" +version = "1.1.4.8" +description = "Typing stubs for dateparser" +category = "main" +optional = false +python-versions = "*" +files = [ {file = "types-dateparser-1.1.4.8.tar.gz", hash = "sha256:b2d674d196076875ace0a800dd6496a6739f3c66f65080759819737bdbad012e"}, {file = "types_dateparser-1.1.4.8-py3-none-any.whl", hash = "sha256:16b1855dd02e255a6bac8e58a13f30f9fa585442fd0e4a1430312fad72143a76"}, ] -types-mock = [ + +[[package]] +name = "types-mock" +version = "5.0.0.5" +description = "Typing stubs for mock" +category = "main" +optional = false +python-versions = "*" +files = [ {file = "types-mock-5.0.0.5.tar.gz", hash = "sha256:171e6618583db52cfa72386538022892e2d341b2b5bc47c07cba90c96d0e8735"}, {file = "types_mock-5.0.0.5-py3-none-any.whl", hash = "sha256:03790888cd33d9fef408f0391aa20803d44d4c21b021dd8a08de8763ffdd2c91"}, ] -types-pyyaml = [ + +[[package]] +name = "types-pyyaml" +version = "6.0.12.8" +description = "Typing stubs for PyYAML" +category = "dev" +optional = false +python-versions = "*" +files = [ {file = "types-PyYAML-6.0.12.8.tar.gz", hash = "sha256:19304869a89d49af00be681e7b267414df213f4eb89634c4495fa62e8f942b9f"}, {file = "types_PyYAML-6.0.12.8-py3-none-any.whl", hash = "sha256:5314a4b2580999b2ea06b2e5f9a7763d860d6e09cdf21c0e9561daa9cbd60178"}, ] -types-ujson = [ + +[[package]] +name = "types-ujson" +version = "5.7.0.1" +description = "Typing stubs for ujson" +category = "dev" +optional = false +python-versions = "*" +files = [ {file = "types-ujson-5.7.0.1.tar.gz", hash = "sha256:54351a62ec1b6550efb17af63ef7f0c00d0efa9c099de7da5c627e1efa280553"}, {file = "types_ujson-5.7.0.1-py3-none-any.whl", hash = "sha256:67cdedbab6ea905f21e236497e9e97d8f7f0845d72b47a7404974dcb88adeb22"}, ] -typing-extensions = [ + +[[package]] +name = "typing-extensions" +version = "4.5.0" +description = "Backported and Experimental Type Hints for Python 3.7+" +category = "main" +optional = false +python-versions = ">=3.7" +files = [ {file = "typing_extensions-4.5.0-py3-none-any.whl", hash = "sha256:fb33085c39dd998ac16d1431ebc293a8b3eedd00fd4a32de0ff79002c19511b4"}, {file = "typing_extensions-4.5.0.tar.gz", hash = "sha256:5cb5f4a79139d699607b3ef622a1dedafa84e115ab0024e0d9c044a9479ca7cb"}, ] -tzdata = [ + +[[package]] +name = "tzdata" +version = "2022.7" +description = "Provider of IANA time zone data" +category = "main" +optional = false +python-versions = ">=2" +files = [ {file = "tzdata-2022.7-py2.py3-none-any.whl", hash = "sha256:2b88858b0e3120792a3c0635c23daf36a7d7eeeca657c323da299d2094402a0d"}, {file = "tzdata-2022.7.tar.gz", hash = "sha256:fe5f866eddd8b96e9fcba978f8e503c909b19ea7efda11e52e39494bad3a7bfa"}, ] -tzlocal = [ + +[[package]] +name = "tzlocal" +version = "4.2" +description = "tzinfo object for the local timezone" +category = "main" +optional = false +python-versions = ">=3.6" +files = [ {file = "tzlocal-4.2-py3-none-any.whl", hash = "sha256:89885494684c929d9191c57aa27502afc87a579be5cdd3225c77c463ea043745"}, {file = "tzlocal-4.2.tar.gz", hash = "sha256:ee5842fa3a795f023514ac2d801c4a81d1743bbe642e3940143326b3a00addd7"}, ] -ujson = [ + +[package.dependencies] +pytz-deprecation-shim = "*" +tzdata = {version = "*", markers = "platform_system == \"Windows\""} + +[package.extras] +devenv = ["black", "pyroma", "pytest-cov", "zest.releaser"] +test = ["pytest (>=4.3)", "pytest-mock (>=3.3)"] + +[[package]] +name = "ujson" +version = "5.7.0" +description = "Ultra fast JSON encoder and decoder for Python" +category = "main" +optional = false +python-versions = ">=3.7" +files = [ {file = "ujson-5.7.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5eba5e69e4361ac3a311cf44fa71bc619361b6e0626768a494771aacd1c2f09b"}, {file = "ujson-5.7.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:aae4d9e1b4c7b61780f0a006c897a4a1904f862fdab1abb3ea8f45bd11aa58f3"}, {file = "ujson-5.7.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d2e43ccdba1cb5c6d3448eadf6fc0dae7be6c77e357a3abc968d1b44e265866d"}, @@ -2778,23 +2634,77 @@ ujson = [ {file = "ujson-5.7.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:4c592eb91a5968058a561d358d0fef59099ed152cfb3e1cd14eee51a7a93879e"}, {file = "ujson-5.7.0.tar.gz", hash = "sha256:e788e5d5dcae8f6118ac9b45d0b891a0d55f7ac480eddcb7f07263f2bcf37b23"}, ] -uritemplate = [ + +[[package]] +name = "uritemplate" +version = "4.1.1" +description = "Implementation of RFC 6570 URI Templates" +category = "main" +optional = false +python-versions = ">=3.6" +files = [ {file = "uritemplate-4.1.1-py2.py3-none-any.whl", hash = "sha256:830c08b8d99bdd312ea4ead05994a38e8936266f84b9a7878232db50b044e02e"}, {file = "uritemplate-4.1.1.tar.gz", hash = "sha256:4346edfc5c3b79f694bccd6d6099a322bbeb628dbf2cd86eea55a456ce5124f0"}, ] -urllib3 = [ + +[[package]] +name = "urllib3" +version = "1.26.15" +description = "HTTP library with thread-safe connection pooling, file post, and more." +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" +files = [ {file = "urllib3-1.26.15-py2.py3-none-any.whl", hash = "sha256:aa751d169e23c7479ce47a0cb0da579e3ede798f994f5816a74e4f4500dcea42"}, {file = "urllib3-1.26.15.tar.gz", hash = "sha256:8a388717b9476f934a21484e8c8e61875ab60644d29b9b39e11e4b9dc1c6b305"}, ] -virtualenv = [ + +[package.extras] +brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)", "brotlipy (>=0.6.0)"] +secure = ["certifi", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "ipaddress", "pyOpenSSL (>=0.14)", "urllib3-secure-extra"] +socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] + +[[package]] +name = "virtualenv" +version = "20.21.0" +description = "Virtual Python Environment builder" +category = "main" +optional = false +python-versions = ">=3.7" +files = [ {file = "virtualenv-20.21.0-py3-none-any.whl", hash = "sha256:31712f8f2a17bd06234fa97fdf19609e789dd4e3e4bf108c3da71d710651adbc"}, {file = "virtualenv-20.21.0.tar.gz", hash = "sha256:f50e3e60f990a0757c9b68333c9fdaa72d7188caa417f96af9e52407831a3b68"}, ] -wcwidth = [ + +[package.dependencies] +distlib = ">=0.3.6,<1" +filelock = ">=3.4.1,<4" +platformdirs = ">=2.4,<4" + +[package.extras] +docs = ["furo (>=2022.12.7)", "proselint (>=0.13)", "sphinx (>=6.1.3)", "sphinx-argparse (>=0.4)", "sphinxcontrib-towncrier (>=0.2.1a0)", "towncrier (>=22.12)"] +test = ["covdefaults (>=2.2.2)", "coverage (>=7.1)", "coverage-enable-subprocess (>=1)", "flaky (>=3.7)", "packaging (>=23)", "pytest (>=7.2.1)", "pytest-env (>=0.8.1)", "pytest-freezegun (>=0.4.2)", "pytest-mock (>=3.10)", "pytest-randomly (>=3.12)", "pytest-timeout (>=2.1)"] + +[[package]] +name = "wcwidth" +version = "0.2.6" +description = "Measures the displayed width of unicode strings in a terminal" +category = "main" +optional = false +python-versions = "*" +files = [ {file = "wcwidth-0.2.6-py2.py3-none-any.whl", hash = "sha256:795b138f6875577cd91bba52baf9e445cd5118fd32723b460e30a0af30ea230e"}, {file = "wcwidth-0.2.6.tar.gz", hash = "sha256:a5220780a404dbe3353789870978e472cfe477761f06ee55077256e509b156d0"}, ] -wrapt = [ + +[[package]] +name = "wrapt" +version = "1.15.0" +description = "Module for decorators, wrappers and monkey patching." +category = "main" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" +files = [ {file = "wrapt-1.15.0-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:ca1cccf838cd28d5a0883b342474c630ac48cac5df0ee6eacc9c7290f76b11c1"}, {file = "wrapt-1.15.0-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:e826aadda3cae59295b95343db8f3d965fb31059da7de01ee8d1c40a60398b29"}, {file = "wrapt-1.15.0-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:5fc8e02f5984a55d2c653f5fea93531e9836abbd84342c1d1e17abc4a15084c2"}, @@ -2908,7 +2818,15 @@ files = [ {file = "xmltodict-0.13.0-py2.py3-none-any.whl", hash = "sha256:aa89e8fd76320154a40d19a0df04a4695fb9dc5ba977cbb68ab3e4eb225e7852"}, {file = "xmltodict-0.13.0.tar.gz", hash = "sha256:341595a488e3e01a85a9d8911d8912fd922ede5fecc4dce437eb4b6c8d037e56"}, ] -xxhash = [ + +[[package]] +name = "xxhash" +version = "3.2.0" +description = "Python binding for xxHash" +category = "main" +optional = false +python-versions = ">=3.6" +files = [ {file = "xxhash-3.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:af44b9e59c4b2926a4e3c7f9d29949ff42fcea28637ff6b8182e654461932be8"}, {file = "xxhash-3.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:1bdd57973e2b802ef32553d7bebf9402dac1557874dbe5c908b499ea917662cd"}, {file = "xxhash-3.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6b7c9aa77bbce61a5e681bd39cb6a804338474dcc90abe3c543592aa5d6c9a9b"}, @@ -3008,7 +2926,15 @@ xxhash = [ {file = "xxhash-3.2.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:9d3f686e3d1c8900c5459eee02b60c7399e20ec5c6402364068a343c83a61d90"}, {file = "xxhash-3.2.0.tar.gz", hash = "sha256:1afd47af8955c5db730f630ad53ae798cf7fae0acb64cebb3cf94d35c47dd088"}, ] -yarl = [ + +[[package]] +name = "yarl" +version = "1.8.2" +description = "Yet another URL library" +category = "main" +optional = false +python-versions = ">=3.7" +files = [ {file = "yarl-1.8.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:bb81f753c815f6b8e2ddd2eef3c855cf7da193b82396ac013c661aaa6cc6b0a5"}, {file = "yarl-1.8.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:47d49ac96156f0928f002e2424299b2c91d9db73e08c4cd6742923a086f1c863"}, {file = "yarl-1.8.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:3fc056e35fa6fba63248d93ff6e672c096f95f7836938241ebc8260e062832fe"}, @@ -3092,4 +3018,4 @@ multidict = ">=4.0" [metadata] lock-version = "2.0" python-versions = "^3.9" -content-hash = "1fa528cf2ad54c891b729fd2a9ed610aa6263af6a0e9399766f8eea831d0feaf" +content-hash = "5380858639b8d84acea4a5a311e2ac39b205d75575ed82823f1822c917cd41f0"