The length of time, in minutes, that a streaming session can be active before it is\n stopped or terminated. After this point, Nimble Studio automatically terminates or\n stops the session. The default length of time is 690 minutes, and the maximum length of\n time is 30 days.
Integer that determines if you can start and stop your sessions and how long a session\n can stay in the STOPPED state. The default value is 0. The maximum value is 5760.
\n
If the value is missing or set to 0, your sessions can?t be stopped. If you then call\n StopStreamingSession, the session fails. If the time that a session stays in the READY\n state exceeds the maxSessionLengthInMinutes value, the session will automatically be\n terminated by AWS (instead of stopped).
\n
If the value is set to a positive number, the session can be stopped. You can call\n StopStreamingSession to stop sessions in the READY state. If the time that a session\n stays in the READY state exceeds the maxSessionLengthInMinutes value, the session will\n automatically be stopped by AWS (instead of terminated).
The owner of the streaming image, either the studioId that contains the streaming image, or 'amazon' for images that are provided by Amazon Nimble Studio.
The Amazon Web Services SSO application client ID used to integrate with Amazon Web Services SSO to enable Amazon Web Services SSO users to log in to Nimble Studio portal.
The Amazon Resource Name (ARN) of the principal. This can be one of the\n following:
\n
\n
\n
The ARN of an Amazon QuickSight user or group associated with a data source or dataset. (This is common.)
\n
\n
\n
The ARN of an Amazon QuickSight user, group, or namespace associated with an analysis, dashboard, template, or theme. (This is common.)
\n
\n
\n
The ARN of an AWS account root: This is an IAM ARN rather than a QuickSight\n ARN. Use this option only to share resources (templates) across AWS accounts.\n (This is less common.)
A sheet, which is an object that contains a set of visuals that\n are viewed together on one page in the Amazon QuickSight console. Every analysis and dashboard\n contains at least one sheet. Each sheet contains at least one visualization widget, for\n example a chart, pivot table, or narrative insight. Sheets can be associated with other\n components, such as controls, filters, and so on.
A structure that describes the principals and the resource-level permissions on an\n analysis. You can use the Permissions structure to grant permissions by\n providing a list of AWS Identity and Access Management (IAM) action information for each\n principal listed by Amazon Resource Name (ARN).
The Amazon Resource Name (ARN) of the principal. This can be one of the\n following:
\n
\n
\n
The ARN of an Amazon QuickSight user or group associated with a data source or dataset. (This is common.)
\n
\n
\n
The ARN of an Amazon QuickSight user, group, or namespace associated with an analysis, dashboard, template, or theme. (This is common.)
\n
\n
\n
The ARN of an AWS account root: This is an IAM ARN rather than a QuickSight\n ARN. Use this option only to share resources (templates) across AWS accounts.\n (This is less common.)
A sheet, which is an object that contains a set of visuals that\n are viewed together on one page in the Amazon QuickSight console. Every analysis and dashboard\n contains at least one sheet. Each sheet contains at least one visualization widget, for\n example a chart, pivot table, or narrative insight. Sheets can be associated with other\n components, such as controls, filters, and so on.
A structure that contains the permissions of the dashboard. You can use this structure\n for granting permissions by providing a list of IAM action information for each\n principal ARN.
\n\n
To specify no permissions, omit the permissions list.
The Amazon Resource Name (ARN) of the theme that is being used for this dashboard. If\n you add a value for this field, it overrides the value that is used in the source\n entity. The theme ARN must exist in the same AWS account where you create the\n dashboard.
A unique ID to identify a calculated column. During a dataset update, if the column ID\n of a calculated column matches that of an existing calculated column, Amazon QuickSight\n preserves the existing calculated column.
When casting a column from string to datetime type, you can supply a string in a\n format supported by Amazon QuickSight to denote the source data format.
Groupings of columns that work together in certain Amazon QuickSight features. This is\n a variant type structure. For this structure to be valid, only one of the attributes can\n be non-null.
A tag for a column in a TagColumnOperation structure. This is a\n variant type structure. For this structure to be valid, only one of the attributes can\n be non-null.
A logical table is a unit that joins and that data\n transformations operate on. A logical table has a source, which can be either a physical\n table or result of a join. When a logical table points to a physical table, the logical\n table acts as a mutable copy of that physical table through transform operations.
Information about the source of a logical table. This is a variant type structure. For\n this structure to be valid, only one of the attributes can be non-null.
A view of a data source that contains information about the shape of the data in the\n underlying source. This is a variant type structure. For this structure to be valid,\n only one of the attributes can be non-null.
The Amazon Resource Name (ARN) of the principal. This can be one of the\n following:
\n
\n
\n
The ARN of an Amazon QuickSight user or group associated with a data source or dataset. (This is common.)
\n
\n
\n
The ARN of an Amazon QuickSight user, group, or namespace associated with an analysis, dashboard, template, or theme. (This is common.)
\n
\n
\n
The ARN of an AWS account root: This is an IAM ARN rather than a QuickSight\n ARN. Use this option only to share resources (templates) across AWS accounts.\n (This is less common.)
A data transformation on a logical table. This is a variant type structure. For this\n structure to be valid, only one of the attributes can be non-null.
Wait for SPICE ingestion to finish to mark dataset creation/update successful. Default (true).\n Applicable only when DataSetImportMode mode is set to SPICE.
The maximum time (in hours) to wait for Ingestion to complete. Default timeout is 36 hours.\n Applicable only when DataSetImportMode mode is set to SPICE and WaitForSpiceIngestion is set to true.
A set of alternate data source parameters that you want to share for these\n credentials. The credentials are applied in tandem with the data source parameters when\n you copy a data source by using a create or update request. The API operation compares\n the DataSourceParameters structure that's in the request with the\n structures in the AlternateDataSourceParameters allow list. If the\n structures are an exact match, the request is allowed to use the new data source with\n the existing credentials. If the AlternateDataSourceParameters list is\n null, the DataSourceParameters originally used with these\n Credentials is automatically allowed.
The Amazon Resource Name (ARN) of a data source that has the credential pair that you\n want to use. When CopySourceArn is not null, the credential pair from the\n data source in the ARN is used as the credentials for the\n DataSourceCredentials structure.
The parameters that Amazon QuickSight uses to connect to your underlying data source.\n This is a variant type structure. For this structure to be valid, only one of the\n attributes can be non-null.
Amazon Redshift parameters. The ClusterId field can be blank if\n Host and Port are both set. The Host and\n Port fields can be blank if the ClusterId field is set.
The Amazon Resource Name (ARN) of the principal. This can be one of the\n following:
\n
\n
\n
The ARN of an Amazon QuickSight user or group associated with a data source or dataset. (This is common.)
\n
\n
\n
The ARN of an Amazon QuickSight user, group, or namespace associated with an analysis, dashboard, template, or theme. (This is common.)
\n
\n
\n
The ARN of an AWS account root: This is an IAM ARN rather than a QuickSight\n ARN. Use this option only to share resources (templates) across AWS accounts.\n (This is less common.)
A set of alternate data source parameters that you want to share for the credentials\n stored with this data source. The credentials are applied in tandem with the data source\n parameters when you copy a data source by using a create or update request. The API\n operation compares the DataSourceParameters structure that's in the request\n with the structures in the AlternateDataSourceParameters allow list. If the\n structures are an exact match, the request is allowed to use the credentials from this\n existing data source. If the AlternateDataSourceParameters list is null,\n the Credentials originally used with this DataSourceParameters\n are automatically allowed.
The Amazon Resource Name (ARN) of the principal. This can be one of the\n following:
\n
\n
\n
The ARN of an Amazon QuickSight user or group associated with a data source or dataset. (This is common.)
\n
\n
\n
The ARN of an Amazon QuickSight user, group, or namespace associated with an analysis, dashboard, template, or theme. (This is common.)
\n
\n
\n
The ARN of an AWS account root: This is an IAM ARN rather than a QuickSight\n ARN. Use this option only to share resources (templates) across AWS accounts.\n (This is less common.)
A sheet, which is an object that contains a set of visuals that\n are viewed together on one page in the Amazon QuickSight console. Every analysis and dashboard\n contains at least one sheet. Each sheet contains at least one visualization widget, for\n example a chart, pivot table, or narrative insight. Sheets can be associated with other\n components, such as controls, filters, and so on.
Schema of the dataset identified by the placeholder. Any dashboard created from this\n template should be bound to new datasets matching the same schema described through this\n API operation.
A description of the current template version being created. This API operation creates the\n\t\t\tfirst version of the template. Every time UpdateTemplate is called, a new\n\t\t\tversion is created. Each version of the template maintains a description of the version\n\t\t\tin the VersionDescription field.
The theme colors that are used for data colors in charts. The colors description is a\n hexadecimal color code that consists of six alphanumerical characters, prefixed with\n #, for example #37BFF5.
The Amazon Resource Name (ARN) of the principal. This can be one of the\n following:
\n
\n
\n
The ARN of an Amazon QuickSight user or group associated with a data source or dataset. (This is common.)
\n
\n
\n
The ARN of an Amazon QuickSight user, group, or namespace associated with an analysis, dashboard, template, or theme. (This is common.)
\n
\n
\n
The ARN of an AWS account root: This is an IAM ARN rather than a QuickSight\n ARN. Use this option only to share resources (templates) across AWS accounts.\n (This is less common.)
The theme colors that apply to UI and to charts, excluding data colors. The colors\n description is a hexadecimal color code that consists of six alphanumerical characters,\n prefixed with #, for example #37BFF5. For more information, see Using Themes in Amazon QuickSight in the Amazon QuickSight User\n Guide.\n
The color of text and other foreground elements that appear over the primary\n background regions, such as grid lines, borders, table banding, icons, and so on.
The ID of the theme that a custom theme will inherit from. All themes inherit from one of\n\t\t\tthe starting themes defined by Amazon QuickSight. For a list of the starting themes, use\n\t\t\t\tListThemes or choose Themes from\n\t\t\twithin a QuickSight analysis.
A description of the first version of the theme that you're creating. Every time\n\t\t\t\tUpdateTheme is called, a new version is created. Each version of the\n\t\t\ttheme has a description of the version in the VersionDescription\n\t\t\tfield.
"
+ }
+ },
+ "required": [
+ "AwsAccountId",
+ "ThemeId"
+ ],
+ "additionalProperties": false,
+ "readOnlyProperties": [
+ "/properties/ThemeError",
+ "/properties/CreatedTime",
+ "/properties/Version",
+ "/properties/LastUpdatedTime",
+ "/properties/Arn",
+ "/properties/Type"
+ ],
+ "writeOnlyProperties": [
+ "/properties/VersionDescription",
+ "/properties/Configuration",
+ "/properties/BaseThemeId"
+ ],
+ "createOnlyProperties": [
+ "/properties/ThemeId",
+ "/properties/AwsAccountId"
+ ],
+ "primaryIdentifier": [
+ "/properties/ThemeId",
+ "/properties/AwsAccountId"
+ ],
+ "handlers": {
+ "read": {
+ "permissions": [
+ "quicksight:DescribeTheme"
+ ]
+ },
+ "create": {
+ "permissions": [
+ "quicksight:DescribeTheme",
+ "quicksight:DescribeThemePermissions",
+ "quicksight:CreateTheme",
+ "quicksight:ListTagsForResource"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "quicksight:ListThemes"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "quicksight:DescribeTheme",
+ "quicksight:DescribeThemePermissions",
+ "quicksight:UpdateTheme",
+ "quicksight:UpdateThemePermissions",
+ "quicksight:TagResource",
+ "quicksight:UntagResource",
+ "quicksight:ListTagsForResource"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "quicksight:DescribeTheme",
+ "quicksight:DeleteTheme"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_rds_dbproxy.json b/tools/c7n_awscc/c7n_awscc/data/aws_rds_dbproxy.json
new file mode 100644
index 00000000000..a5bcb56a90e
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_rds_dbproxy.json
@@ -0,0 +1,178 @@
+{
+ "typeName": "AWS::RDS::DBProxy",
+ "description": "Resource schema for AWS::RDS::DBProxy",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git",
+ "definitions": {
+ "AuthFormat": {
+ "type": "object",
+ "properties": {
+ "AuthScheme": {
+ "description": "The type of authentication that the proxy uses for connections from the proxy to the underlying database. ",
+ "type": "string",
+ "enum": [
+ "SECRETS"
+ ]
+ },
+ "Description": {
+ "description": "A user-specified description about the authentication used by a proxy to log in as a specific database user. ",
+ "type": "string"
+ },
+ "IAMAuth": {
+ "description": "Whether to require or disallow AWS Identity and Access Management (IAM) authentication for connections to the proxy. ",
+ "type": "string",
+ "enum": [
+ "DISABLED",
+ "REQUIRED"
+ ]
+ },
+ "SecretArn": {
+ "description": "The Amazon Resource Name (ARN) representing the secret that the proxy uses to authenticate to the RDS DB instance or Aurora DB cluster. These secrets are stored within Amazon Secrets Manager. ",
+ "type": "string"
+ },
+ "UserName": {
+ "description": "The name of the database user to which the proxy connects.",
+ "type": "string"
+ }
+ }
+ },
+ "TagFormat": {
+ "type": "object",
+ "properties": {
+ "Key": {
+ "type": "string",
+ "pattern": "(\\w|\\d|\\s|\\\\|-|\\.:=+-)*",
+ "maxLength": 128
+ },
+ "Value": {
+ "type": "string",
+ "pattern": "(\\w|\\d|\\s|\\\\|-|\\.:=+-)*",
+ "maxLength": 128
+ }
+ }
+ }
+ },
+ "properties": {
+ "Auth": {
+ "description": "The authorization mechanism that the proxy uses.",
+ "type": "array",
+ "minItems": 1,
+ "items": {
+ "$ref": "#/definitions/AuthFormat"
+ }
+ },
+ "DBProxyArn": {
+ "description": "The Amazon Resource Name (ARN) for the proxy.",
+ "type": "string"
+ },
+ "DBProxyName": {
+ "description": "The identifier for the proxy. This name must be unique for all proxies owned by your AWS account in the specified AWS Region.",
+ "type": "string",
+ "pattern": "[0-z]*",
+ "maxLength": 64
+ },
+ "DebugLogging": {
+ "description": "Whether the proxy includes detailed information about SQL statements in its logs.",
+ "type": "boolean"
+ },
+ "Endpoint": {
+ "description": "The endpoint that you can use to connect to the proxy. You include the endpoint value in the connection string for a database client application.",
+ "type": "string"
+ },
+ "EngineFamily": {
+ "description": "The kinds of databases that the proxy can connect to.",
+ "type": "string",
+ "enum": [
+ "MYSQL",
+ "POSTGRESQL"
+ ]
+ },
+ "IdleClientTimeout": {
+ "description": "The number of seconds that a connection to the proxy can be inactive before the proxy disconnects it.",
+ "type": "integer"
+ },
+ "RequireTLS": {
+ "description": "A Boolean parameter that specifies whether Transport Layer Security (TLS) encryption is required for connections to the proxy.",
+ "type": "boolean"
+ },
+ "RoleArn": {
+ "description": "The Amazon Resource Name (ARN) of the IAM role that the proxy uses to access secrets in AWS Secrets Manager.",
+ "type": "string"
+ },
+ "Tags": {
+ "description": "An optional set of key-value pairs to associate arbitrary data of your choosing with the proxy.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/TagFormat"
+ }
+ },
+ "VpcSecurityGroupIds": {
+ "description": "VPC security group IDs to associate with the new proxy.",
+ "type": "array",
+ "minItems": 1,
+ "items": {
+ "type": "string"
+ }
+ },
+ "VpcSubnetIds": {
+ "description": "VPC subnet IDs to associate with the new proxy.",
+ "type": "array",
+ "minItems": 2,
+ "items": {
+ "type": "string"
+ }
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "Auth",
+ "DBProxyName",
+ "EngineFamily",
+ "RoleArn",
+ "VpcSubnetIds"
+ ],
+ "readOnlyProperties": [
+ "/properties/DBProxyArn",
+ "/properties/Endpoint"
+ ],
+ "createOnlyProperties": [
+ "/properties/DBProxyName",
+ "/properties/EngineFamily",
+ "/properties/VpcSubnetIds"
+ ],
+ "primaryIdentifier": [
+ "/properties/DBProxyName"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "rds:CreateDBProxy",
+ "rds:DescribeDBProxies",
+ "iam:PassRole"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "rds:DescribeDBProxies"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "rds:ModifyDBProxy",
+ "rds:AddTagsToResource",
+ "rds:RemoveTagsFromResource",
+ "iam:PassRole"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "rds:DescribeDBProxies",
+ "rds:DeleteDBProxy"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "rds:DescribeDBProxies"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_rds_dbproxyendpoint.json b/tools/c7n_awscc/c7n_awscc/data/aws_rds_dbproxyendpoint.json
new file mode 100644
index 00000000000..1552eae78a0
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_rds_dbproxyendpoint.json
@@ -0,0 +1,142 @@
+{
+ "typeName": "AWS::RDS::DBProxyEndpoint",
+ "description": "Resource schema for AWS::RDS::DBProxyEndpoint.",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git",
+ "definitions": {
+ "TagFormat": {
+ "type": "object",
+ "properties": {
+ "Key": {
+ "type": "string",
+ "pattern": "(\\w|\\d|\\s|\\\\|-|\\.:=+-)*",
+ "maxLength": 128
+ },
+ "Value": {
+ "type": "string",
+ "pattern": "(\\w|\\d|\\s|\\\\|-|\\.:=+-)*",
+ "maxLength": 128
+ }
+ },
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "DBProxyEndpointName": {
+ "description": "The identifier for the DB proxy endpoint. This name must be unique for all DB proxy endpoints owned by your AWS account in the specified AWS Region.",
+ "type": "string",
+ "pattern": "[0-z]*",
+ "maxLength": 64
+ },
+ "DBProxyEndpointArn": {
+ "description": "The Amazon Resource Name (ARN) for the DB proxy endpoint.",
+ "type": "string",
+ "pattern": "arn:aws[A-Za-z0-9-]{0,64}:rds:[A-Za-z0-9-]{1,64}:[0-9]{12}:.*"
+ },
+ "DBProxyName": {
+ "description": "The identifier for the proxy. This name must be unique for all proxies owned by your AWS account in the specified AWS Region.",
+ "type": "string",
+ "pattern": "[0-z]*",
+ "maxLength": 64
+ },
+ "VpcId": {
+ "description": "VPC ID to associate with the new DB proxy endpoint.",
+ "type": "string"
+ },
+ "VpcSecurityGroupIds": {
+ "description": "VPC security group IDs to associate with the new DB proxy endpoint.",
+ "type": "array",
+ "insertionOrder": false,
+ "minItems": 1,
+ "items": {
+ "type": "string"
+ }
+ },
+ "VpcSubnetIds": {
+ "description": "VPC subnet IDs to associate with the new DB proxy endpoint.",
+ "type": "array",
+ "minItems": 2,
+ "insertionOrder": false,
+ "items": {
+ "type": "string"
+ }
+ },
+ "Endpoint": {
+ "description": "The endpoint that you can use to connect to the DB proxy. You include the endpoint value in the connection string for a database client application.",
+ "type": "string",
+ "maxLength": 256
+ },
+ "TargetRole": {
+ "description": "A value that indicates whether the DB proxy endpoint can be used for read/write or read-only operations.",
+ "type": "string",
+ "enum": [
+ "READ_WRITE",
+ "READ_ONLY"
+ ]
+ },
+ "IsDefault": {
+ "description": "A value that indicates whether this endpoint is the default endpoint for the associated DB proxy. Default DB proxy endpoints always have read/write capability. Other endpoints that you associate with the DB proxy can be either read/write or read-only.",
+ "type": "boolean"
+ },
+ "Tags": {
+ "description": "An optional set of key-value pairs to associate arbitrary data of your choosing with the DB proxy endpoint.",
+ "type": "array",
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/TagFormat"
+ }
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "DBProxyName",
+ "DBProxyEndpointName",
+ "VpcSubnetIds"
+ ],
+ "readOnlyProperties": [
+ "/properties/DBProxyEndpointArn",
+ "/properties/Endpoint",
+ "/properties/VpcId",
+ "/properties/IsDefault"
+ ],
+ "createOnlyProperties": [
+ "/properties/DBProxyName",
+ "/properties/DBProxyEndpointName",
+ "/properties/VpcSubnetIds",
+ "/properties/TargetRole"
+ ],
+ "primaryIdentifier": [
+ "/properties/DBProxyEndpointName"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "rds:CreateDBProxyEndpoint",
+ "rds:DescribeDBProxyEndpoints"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "rds:DescribeDBProxyEndpoints",
+ "rds:ListTagsForResource"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "rds:ModifyDBProxyEndpoint",
+ "rds:AddTagsToResource",
+ "rds:RemoveTagsFromResource"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "rds:DescribeDBProxyEndpoints",
+ "rds:DeleteDBProxyEndpoint"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "rds:DescribeDBProxyEndpoints"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_rds_dbproxytargetgroup.json b/tools/c7n_awscc/c7n_awscc/data/aws_rds_dbproxytargetgroup.json
new file mode 100644
index 00000000000..231e2bca25b
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_rds_dbproxytargetgroup.json
@@ -0,0 +1,122 @@
+{
+ "typeName": "AWS::RDS::DBProxyTargetGroup",
+ "description": "Resource schema for AWS::RDS::DBProxyTargetGroup",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds-proxy",
+ "definitions": {
+ "ConnectionPoolConfigurationInfoFormat": {
+ "type": "object",
+ "properties": {
+ "MaxConnectionsPercent": {
+ "description": "The maximum size of the connection pool for each target in a target group.",
+ "type": "integer",
+ "minimum": 0,
+ "maximum": 100
+ },
+ "MaxIdleConnectionsPercent": {
+ "description": "Controls how actively the proxy closes idle database connections in the connection pool.",
+ "type": "integer",
+ "minimum": 0,
+ "maximum": 100
+ },
+ "ConnectionBorrowTimeout": {
+ "description": "The number of seconds for a proxy to wait for a connection to become available in the connection pool.",
+ "type": "integer"
+ },
+ "SessionPinningFilters": {
+ "description": "Each item in the list represents a class of SQL operations that normally cause all later statements in a session using a proxy to be pinned to the same underlying database connection.",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "InitQuery": {
+ "description": "One or more SQL statements for the proxy to run when opening each new database connection.",
+ "type": "string"
+ }
+ }
+ }
+ },
+ "properties": {
+ "DBProxyName": {
+ "description": "The identifier for the proxy.",
+ "type": "string",
+ "pattern": "[A-z][0-z]*",
+ "maxLength": 64
+ },
+ "TargetGroupArn": {
+ "description": "The Amazon Resource Name (ARN) representing the target group.",
+ "type": "string"
+ },
+ "TargetGroupName": {
+ "description": "The identifier for the DBProxyTargetGroup",
+ "type": "string",
+ "enum": [
+ "default"
+ ]
+ },
+ "ConnectionPoolConfigurationInfo": {
+ "$ref": "#/definitions/ConnectionPoolConfigurationInfoFormat"
+ },
+ "DBInstanceIdentifiers": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "DBClusterIdentifiers": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "DBProxyName",
+ "TargetGroupName"
+ ],
+ "readOnlyProperties": [
+ "/properties/TargetGroupArn"
+ ],
+ "createOnlyProperties": [
+ "/properties/DBProxyName",
+ "/properties/TargetGroupName"
+ ],
+ "primaryIdentifier": [
+ "/properties/TargetGroupArn"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "rds:DescribeDBProxies",
+ "rds:DescribeDBProxyTargetGroups",
+ "rds:ModifyDBProxyTargetGroup",
+ "rds:RegisterDBProxyTargets"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "rds:DescribeDBProxyTargetGroups",
+ "rds:DescribeDBProxyTargets"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "rds:DescribeDBProxyTargetGroups",
+ "rds:ModifyDBProxyTargetGroup",
+ "rds:RegisterDBProxyTargets",
+ "rds:DeregisterDBProxyTargets"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "rds:DeregisterDBProxyTargets"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "rds:DescribeDBProxyTargetGroups"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_rds_globalcluster.json b/tools/c7n_awscc/c7n_awscc/data/aws_rds_globalcluster.json
new file mode 100644
index 00000000000..6232f85e8ba
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_rds_globalcluster.json
@@ -0,0 +1,101 @@
+{
+ "typeName": "AWS::RDS::GlobalCluster",
+ "description": "Resource Type definition for AWS::RDS::GlobalCluster",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-rds",
+ "properties": {
+ "Engine": {
+ "description": "The name of the database engine to be used for this DB cluster. Valid Values: aurora (for MySQL 5.6-compatible Aurora), aurora-mysql (for MySQL 5.7-compatible Aurora).\nIf you specify the SourceDBClusterIdentifier property, don't specify this property. The value is inherited from the cluster.",
+ "type": "string",
+ "enum": [
+ "aurora",
+ "aurora-mysql",
+ "aurora-postgresql"
+ ]
+ },
+ "EngineVersion": {
+ "description": "The version number of the database engine to use. If you specify the SourceDBClusterIdentifier property, don't specify this property. The value is inherited from the cluster.",
+ "type": "string"
+ },
+ "DeletionProtection": {
+ "description": "The deletion protection setting for the new global database. The global database can't be deleted when deletion protection is enabled.",
+ "type": "boolean"
+ },
+ "GlobalClusterIdentifier": {
+ "description": "The cluster identifier of the new global database cluster. This parameter is stored as a lowercase string.",
+ "type": "string",
+ "pattern": "^[a-zA-Z]{1}(?:-?[a-zA-Z0-9]){0,62}$"
+ },
+ "SourceDBClusterIdentifier": {
+ "description": "The Amazon Resource Name (ARN) to use as the primary cluster of the global database. This parameter is optional. This parameter is stored as a lowercase string.",
+ "type": "string",
+ "oneOf": [
+ {
+ "pattern": "^[a-zA-Z]{1}(?:-?[a-zA-Z0-9]){0,62}$"
+ },
+ {
+ "pattern": "^(?=.{40,128}$)arn.*"
+ }
+ ]
+ },
+ "StorageEncrypted": {
+ "description": " The storage encryption setting for the new global database cluster.\nIf you specify the SourceDBClusterIdentifier property, don't specify this property. The value is inherited from the cluster.",
+ "type": "boolean"
+ }
+ },
+ "oneOf": [
+ {
+ "required": [
+ "SourceDBClusterIdentifier"
+ ]
+ },
+ {
+ "required": [
+ "Engine"
+ ]
+ }
+ ],
+ "additionalProperties": false,
+ "createOnlyProperties": [
+ "/properties/GlobalClusterIdentifier",
+ "/properties/SourceDBClusterIdentifier",
+ "/properties/StorageEncrypted",
+ "/properties/Engine",
+ "/properties/EngineVersion"
+ ],
+ "primaryIdentifier": [
+ "/properties/GlobalClusterIdentifier"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "rds:CreateGlobalCluster",
+ "rds:DescribeDBClusters",
+ "rds:DescribeGlobalClusters"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "rds:DescribeGlobalClusters"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "rds:ModifyGlobalCluster",
+ "rds:DescribeGlobalClusters"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "rds:DescribeGlobalClusters",
+ "rds:DeleteGlobalCluster",
+ "rds:RemoveFromGlobalCluster",
+ "rds:DescribeDBClusters"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "rds:DescribeGlobalClusters"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_redshift_cluster.json b/tools/c7n_awscc/c7n_awscc/data/aws_redshift_cluster.json
new file mode 100644
index 00000000000..9c1c750fb4d
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_redshift_cluster.json
@@ -0,0 +1,360 @@
+{
+ "typeName": "AWS::Redshift::Cluster",
+ "description": "An example resource schema demonstrating some basic constructs and validation rules.",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git",
+ "definitions": {
+ "Tag": {
+ "description": "A key-value pair to associate with a resource.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Key": {
+ "type": "string",
+ "description": "The key name of the tag. You can specify a value that is 1 to 127 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.",
+ "minLength": 1,
+ "maxLength": 127
+ },
+ "Value": {
+ "type": "string",
+ "description": "The value for the tag. You can specify a value that is 1 to 255 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.",
+ "minLength": 1,
+ "maxLength": 255
+ }
+ },
+ "required": [
+ "Value",
+ "Key"
+ ]
+ },
+ "LoggingProperties": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "BucketName": {
+ "type": "string"
+ },
+ "S3KeyPrefix": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "BucketName"
+ ]
+ },
+ "Endpoint": {
+ "type": "object",
+ "properties": {
+ "Port": {
+ "type": "string"
+ },
+ "Address": {
+ "type": "string"
+ }
+ }
+ }
+ },
+ "properties": {
+ "ClusterIdentifier": {
+ "description": "A unique identifier for the cluster. You use this identifier to refer to the cluster for any subsequent cluster operations such as deleting or modifying. All alphabetical characters must be lower case, no hypens at the end, no two consecutive hyphens. Cluster name should be unique for all clusters within an AWS account",
+ "type": "string",
+ "maxLength": 63
+ },
+ "MasterUsername": {
+ "description": "The user name associated with the master user account for the cluster that is being created. The user name can't be PUBLIC and first character must be a letter.",
+ "type": "string",
+ "maxLength": 128
+ },
+ "MasterUserPassword": {
+ "description": "The password associated with the master user account for the cluster that is being created. Password must be between 8 and 64 characters in length, should have at least one uppercase letter.Must contain at least one lowercase letter.Must contain one number.Can be any printable ASCII character.",
+ "type": "string",
+ "maxLength": 64
+ },
+ "NodeType": {
+ "description": "The node type to be provisioned for the cluster.Valid Values: ds2.xlarge | ds2.8xlarge | dc1.large | dc1.8xlarge | dc2.large | dc2.8xlarge | ra3.4xlarge | ra3.16xlarge",
+ "type": "string"
+ },
+ "AllowVersionUpgrade": {
+ "description": "Major version upgrades can be applied during the maintenance window to the Amazon Redshift engine that is running on the cluster. Default value is True",
+ "type": "boolean"
+ },
+ "AutomatedSnapshotRetentionPeriod": {
+ "description": "The number of days that automated snapshots are retained. If the value is 0, automated snapshots are disabled. Default value is 1",
+ "type": "integer"
+ },
+ "AvailabilityZone": {
+ "description": "The EC2 Availability Zone (AZ) in which you want Amazon Redshift to provision the cluster. Default: A random, system-chosen Availability Zone in the region that is specified by the endpoint",
+ "type": "string"
+ },
+ "ClusterParameterGroupName": {
+ "description": "The name of the parameter group to be associated with this cluster.",
+ "type": "string",
+ "maxLength": 255
+ },
+ "ClusterType": {
+ "description": "The type of the cluster. When cluster type is specified as single-node, the NumberOfNodes parameter is not required and if multi-node, the NumberOfNodes parameter is required",
+ "type": "string"
+ },
+ "ClusterVersion": {
+ "description": "The version of the Amazon Redshift engine software that you want to deploy on the cluster.The version selected runs on all the nodes in the cluster.",
+ "type": "string"
+ },
+ "ClusterSubnetGroupName": {
+ "description": "The name of a cluster subnet group to be associated with this cluster.",
+ "type": "string"
+ },
+ "DBName": {
+ "description": "The name of the first database to be created when the cluster is created. To create additional databases after the cluster is created, connect to the cluster with a SQL client and use SQL commands to create a database.",
+ "type": "string"
+ },
+ "ElasticIp": {
+ "description": "The Elastic IP (EIP) address for the cluster.",
+ "type": "string"
+ },
+ "Encrypted": {
+ "description": "If true, the data in the cluster is encrypted at rest.",
+ "type": "boolean"
+ },
+ "HsmClientCertificateIdentifier": {
+ "description": "Specifies the name of the HSM client certificate the Amazon Redshift cluster uses to retrieve the data encryption keys stored in an HSM",
+ "type": "string"
+ },
+ "HsmConfigurationIdentifier": {
+ "description": "Specifies the name of the HSM configuration that contains the information the Amazon Redshift cluster can use to retrieve and store keys in an HSM.",
+ "type": "string"
+ },
+ "KmsKeyId": {
+ "description": "The AWS Key Management Service (KMS) key ID of the encryption key that you want to use to encrypt data in the cluster.",
+ "type": "string"
+ },
+ "NumberOfNodes": {
+ "description": "The number of compute nodes in the cluster. This parameter is required when the ClusterType parameter is specified as multi-node.",
+ "type": "integer"
+ },
+ "Port": {
+ "description": "The port number on which the cluster accepts incoming connections. The cluster is accessible only via the JDBC and ODBC connection strings",
+ "type": "integer"
+ },
+ "PreferredMaintenanceWindow": {
+ "description": "The weekly time range (in UTC) during which automated cluster maintenance can occur.",
+ "type": "string"
+ },
+ "PubliclyAccessible": {
+ "description": "If true, the cluster can be accessed from a public network.",
+ "type": "boolean"
+ },
+ "ClusterSecurityGroups": {
+ "description": "A list of security groups to be associated with this cluster.",
+ "type": "array",
+ "uniqueItems": false,
+ "items": {
+ "type": "string"
+ }
+ },
+ "IamRoles": {
+ "description": "A list of AWS Identity and Access Management (IAM) roles that can be used by the cluster to access other AWS services. You must supply the IAM roles in their Amazon Resource Name (ARN) format. You can supply up to 10 IAM roles in a single request",
+ "type": "array",
+ "maxItems": 10,
+ "uniqueItems": true,
+ "items": {
+ "type": "string"
+ }
+ },
+ "Tags": {
+ "description": "The list of tags for the cluster parameter group.",
+ "type": "array",
+ "maxItems": 50,
+ "uniqueItems": false,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ },
+ "VpcSecurityGroupIds": {
+ "description": "A list of Virtual Private Cloud (VPC) security groups to be associated with the cluster.",
+ "type": "array",
+ "uniqueItems": false,
+ "items": {
+ "type": "string"
+ }
+ },
+ "SnapshotClusterIdentifier": {
+ "description": "The name of the cluster the source snapshot was created from. This parameter is required if your IAM user has a policy containing a snapshot resource element that specifies anything other than * for the cluster name.",
+ "type": "string"
+ },
+ "SnapshotIdentifier": {
+ "description": "The name of the snapshot from which to create the new cluster. This parameter isn't case sensitive.",
+ "type": "string"
+ },
+ "Id": {
+ "type": "string"
+ },
+ "OwnerAccount": {
+ "type": "string"
+ },
+ "LoggingProperties": {
+ "$ref": "#/definitions/LoggingProperties"
+ },
+ "Endpoint": {
+ "$ref": "#/definitions/Endpoint"
+ },
+ "DestinationRegion": {
+ "description": "The destination AWS Region that you want to copy snapshots to. Constraints: Must be the name of a valid AWS Region. For more information, see Regions and Endpoints in the Amazon Web Services [https://docs.aws.amazon.com/general/latest/gr/rande.html#redshift_region] General Reference",
+ "type": "string"
+ },
+ "SnapshotCopyRetentionPeriod": {
+ "description": "The number of days to retain automated snapshots in the destination region after they are copied from the source region. \n\n Default is 7. \n\n Constraints: Must be at least 1 and no more than 35.",
+ "type": "integer"
+ },
+ "SnapshotCopyGrantName": {
+ "description": "The name of the snapshot copy grant to use when snapshots of an AWS KMS-encrypted cluster are copied to the destination region.",
+ "type": "string"
+ },
+ "ManualSnapshotRetentionPeriod": {
+ "description": "The number of days to retain newly copied snapshots in the destination AWS Region after they are copied from the source AWS Region. If the value is -1, the manual snapshot is retained indefinitely.\n\nThe value must be either -1 or an integer between 1 and 3,653.",
+ "type": "integer"
+ },
+ "SnapshotCopyManual": {
+ "description": "Indicates whether to apply the snapshot retention period to newly copied manual snapshots instead of automated snapshots.",
+ "type": "boolean"
+ },
+ "AvailabilityZoneRelocation": {
+ "description": "The option to enable relocation for an Amazon Redshift cluster between Availability Zones after the cluster modification is complete.",
+ "type": "boolean"
+ },
+ "AvailabilityZoneRelocationStatus": {
+ "description": "The availability zone relocation status of the cluster",
+ "type": "string"
+ },
+ "AquaConfigurationStatus": {
+ "description": "The value represents how the cluster is configured to use AQUA (Advanced Query Accelerator) after the cluster is restored. Possible values include the following.\n\nenabled - Use AQUA if it is available for the current Region and Amazon Redshift node type.\ndisabled - Don't use AQUA.\nauto - Amazon Redshift determines whether to use AQUA.\n",
+ "type": "string"
+ },
+ "Classic": {
+ "description": "A boolean value indicating whether the resize operation is using the classic resize process. If you don't provide this parameter or set the value to false , the resize type is elastic.",
+ "type": "boolean"
+ },
+ "EnhancedVpcRouting": {
+ "description": "An option that specifies whether to create the cluster with enhanced VPC routing enabled. To create a cluster that uses enhanced VPC routing, the cluster must be in a VPC. For more information, see Enhanced VPC Routing in the Amazon Redshift Cluster Management Guide.\n\nIf this option is true , enhanced VPC routing is enabled.\n\nDefault: false",
+ "type": "boolean"
+ },
+ "MaintenanceTrackName": {
+ "description": "The name for the maintenance track that you want to assign for the cluster. This name change is asynchronous. The new track name stays in the PendingModifiedValues for the cluster until the next maintenance window. When the maintenance track changes, the cluster is switched to the latest cluster release available for the maintenance track. At this point, the maintenance track name is applied.",
+ "type": "string"
+ },
+ "DeferMaintenance": {
+ "description": "A boolean indicating whether to enable the deferred maintenance window.",
+ "type": "boolean"
+ },
+ "DeferMaintenanceIdentifier": {
+ "description": "A unique identifier for the deferred maintenance window.",
+ "type": "string"
+ },
+ "DeferMaintenanceStartTime": {
+ "description": "A timestamp indicating the start time for the deferred maintenance window.",
+ "type": "string"
+ },
+ "DeferMaintenanceEndTime": {
+ "description": "A timestamp indicating end time for the deferred maintenance window. If you specify an end time, you can't specify a duration.",
+ "type": "string"
+ },
+ "DeferMaintenanceDuration": {
+ "description": "An integer indicating the duration of the maintenance window in days. If you specify a duration, you can't specify an end time. The duration must be 45 days or less.",
+ "type": "integer"
+ },
+ "RevisionTarget": {
+ "description": "The identifier of the database revision. You can retrieve this value from the response to the DescribeClusterDbRevisions request.",
+ "type": "string"
+ },
+ "ResourceAction": {
+ "description": "The Redshift operation to be performed. Resource Action supports pause-cluster, resume-cluster APIs",
+ "type": "string"
+ },
+ "RotateEncryptionKey": {
+ "description": "A boolean indicating if we want to rotate Encryption Keys.",
+ "type": "boolean"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "MasterUserPassword",
+ "NodeType",
+ "MasterUsername",
+ "DBName",
+ "ClusterType"
+ ],
+ "primaryIdentifier": [
+ "/properties/ClusterIdentifier"
+ ],
+ "readOnlyProperties": [
+ "/properties/Id",
+ "/properties/DeferMaintenanceIdentifier",
+ "/properties/Endpoint/Port",
+ "/properties/Endpoint/Address"
+ ],
+ "createOnlyProperties": [
+ "/properties/ClusterIdentifier",
+ "/properties/OwnerAccount",
+ "/properties/SnapshotIdentifier",
+ "/properties/DBName",
+ "/properties/SnapshotClusterIdentifier",
+ "/properties/ClusterSubnetGroupName",
+ "/properties/MasterUsername"
+ ],
+ "writeOnlyProperties": [
+ "/properties/MasterUserPassword"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "redshift:DescribeClusters",
+ "redshift:CreateCluster",
+ "redshift:RestoreFromClusterSnapshot",
+ "redshift:EnableLogging"
+ ],
+ "timeoutInMinutes": 2160
+ },
+ "read": {
+ "permissions": [
+ "redshift:DescribeClusters",
+ "redshift:DescribeLoggingStatus",
+ "redshift:DescribeSnapshotCopyGrant",
+ "redshift:DescribeClusterDbRevisions"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "redshift:DescribeClusters",
+ "redshift:ModifyCluster",
+ "redshift:ModifyClusterIamRoles",
+ "redshift:EnableLogging",
+ "redshift:CreateTags",
+ "redshift:DeleteTags",
+ "redshift:DisableLogging",
+ "redshift:RebootCluster",
+ "redshift:EnableSnapshotCopy",
+ "redshift:DisableSnapshotCopy",
+ "redshift:ModifySnapshotCopyRetentionPeriod",
+ "redshift:ModifyAquaConfiguration",
+ "redshift:ResizeCluster",
+ "redshift:ModifyClusterMaintenance",
+ "redshift:DescribeClusterDbRevisions",
+ "redshift:ModifyClusterDbRevisions",
+ "redshift:PauseCluster",
+ "redshift:ResumeCluster",
+ "redshift:RotateEncryptionKey"
+ ],
+ "timeoutInMinutes": 2160
+ },
+ "delete": {
+ "permissions": [
+ "redshift:DescribeClusters",
+ "redshift:DeleteCluster"
+ ],
+ "timeoutInMinutes": 2160
+ },
+ "list": {
+ "permissions": [
+ "redshift:DescribeClusters"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_redshift_endpointaccess.json b/tools/c7n_awscc/c7n_awscc/data/aws_redshift_endpointaccess.json
new file mode 100644
index 00000000000..387ceccd5d2
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_redshift_endpointaccess.json
@@ -0,0 +1,204 @@
+{
+ "typeName": "AWS::Redshift::EndpointAccess",
+ "description": "Resource schema for a Redshift-managed VPC endpoint.",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-redshift",
+ "definitions": {
+ "VpcSecurityGroup": {
+ "description": "Describes the members of a VPC security group.",
+ "type": "object",
+ "properties": {
+ "VpcSecurityGroupId": {
+ "type": "string",
+ "description": "The identifier of the VPC security group."
+ },
+ "Status": {
+ "type": "string",
+ "description": "The status of the VPC security group."
+ }
+ },
+ "additionalProperties": false
+ },
+ "NetworkInterface": {
+ "description": "Describes a network interface.",
+ "type": "object",
+ "properties": {
+ "NetworkInterfaceId": {
+ "type": "string",
+ "description": "The network interface identifier."
+ },
+ "SubnetId": {
+ "type": "string",
+ "description": "The subnet identifier."
+ },
+ "PrivateIpAddress": {
+ "type": "string",
+ "description": "The IPv4 address of the network interface within the subnet."
+ },
+ "AvailabilityZone": {
+ "type": "string",
+ "description": "The Availability Zone."
+ }
+ },
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "Address": {
+ "description": "The DNS address of the endpoint.",
+ "type": "string"
+ },
+ "ClusterIdentifier": {
+ "description": "A unique identifier for the cluster. You use this identifier to refer to the cluster for any subsequent cluster operations such as deleting or modifying. All alphabetical characters must be lower case, no hypens at the end, no two consecutive hyphens. Cluster name should be unique for all clusters within an AWS account",
+ "type": "string"
+ },
+ "VpcSecurityGroups": {
+ "description": "A list of Virtual Private Cloud (VPC) security groups to be associated with the endpoint.",
+ "type": "array",
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/VpcSecurityGroup"
+ }
+ },
+ "ResourceOwner": {
+ "description": "The AWS account ID of the owner of the cluster.",
+ "type": "string",
+ "pattern": "^\\d{12}$"
+ },
+ "EndpointStatus": {
+ "description": "The status of the endpoint.",
+ "type": "string"
+ },
+ "EndpointName": {
+ "description": "The name of the endpoint.",
+ "type": "string",
+ "pattern": "^(?=^[a-z][a-z0-9]*(-[a-z0-9]+)*$).{1,30}$"
+ },
+ "EndpointCreateTime": {
+ "description": "The time (UTC) that the endpoint was created.",
+ "type": "string"
+ },
+ "SubnetGroupName": {
+ "description": "The subnet group name where Amazon Redshift chooses to deploy the endpoint.",
+ "type": "string",
+ "pattern": "^(?=^[a-zA-Z0-9-]+$).{1,255}$"
+ },
+ "Port": {
+ "description": "The port number on which the cluster accepts incoming connections.",
+ "type": "integer"
+ },
+ "VpcSecurityGroupIds": {
+ "description": "A list of vpc security group ids to apply to the created endpoint access.",
+ "type": "array",
+ "insertionOrder": false,
+ "items": {
+ "type": "string"
+ }
+ },
+ "VpcEndpoint": {
+ "description": "The connection endpoint for connecting to an Amazon Redshift cluster through the proxy.",
+ "type": "object",
+ "properties": {
+ "VpcEndpointId": {
+ "type": "string",
+ "description": "The connection endpoint ID for connecting an Amazon Redshift cluster through the proxy."
+ },
+ "VpcId": {
+ "type": "string",
+ "description": "The VPC identifier that the endpoint is associated."
+ },
+ "NetworkInterfaces": {
+ "type": "array",
+ "insertionOrder": false,
+ "description": "One or more network interfaces of the endpoint. Also known as an interface endpoint.",
+ "items": {
+ "$ref": "#/definitions/NetworkInterface"
+ }
+ }
+ },
+ "additionalProperties": false
+ }
+ },
+ "taggable": false,
+ "additionalProperties": false,
+ "required": [
+ "EndpointName",
+ "VpcSecurityGroupIds"
+ ],
+ "primaryIdentifier": [
+ "/properties/EndpointName"
+ ],
+ "createOnlyProperties": [
+ "/properties/EndpointName",
+ "/properties/ClusterIdentifier",
+ "/properties/ResourceOwner",
+ "/properties/SubnetGroupName"
+ ],
+ "readOnlyProperties": [
+ "/properties/Address",
+ "/properties/EndpointStatus",
+ "/properties/EndpointCreateTime",
+ "/properties/Port",
+ "/properties/VpcSecurityGroups",
+ "/properties/VpcEndpoint"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "redshift:CreateEndpointAccess",
+ "ec2:CreateClientVpnEndpoint",
+ "ec2:DescribeVpcAttribute",
+ "ec2:DescribeSecurityGroups",
+ "ec2:DescribeAddresses",
+ "ec2:DescribeInternetGateways",
+ "ec2:DescribeSubnets"
+ ],
+ "timeoutInMinutes": 60
+ },
+ "read": {
+ "permissions": [
+ "redshift:DescribeEndpointAccess",
+ "ec2:DescribeClientVpnEndpoints",
+ "ec2:DescribeVpcAttribute",
+ "ec2:DescribeSecurityGroups",
+ "ec2:DescribeAddresses",
+ "ec2:DescribeInternetGateways",
+ "ec2:DescribeSubnets"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "redshift:ModifyEndpointAccess",
+ "ec2:ModifyClientVpnEndpoint",
+ "ec2:DescribeVpcAttribute",
+ "ec2:DescribeSecurityGroups",
+ "ec2:DescribeAddresses",
+ "ec2:DescribeInternetGateways",
+ "ec2:DescribeSubnets"
+ ],
+ "timeoutInMinutes": 60
+ },
+ "delete": {
+ "permissions": [
+ "redshift:DeleteEndpointAccess",
+ "ec2:DeleteClientVpnEndpoint",
+ "ec2:DescribeVpcAttribute",
+ "ec2:DescribeSecurityGroups",
+ "ec2:DescribeAddresses",
+ "ec2:DescribeInternetGateways",
+ "ec2:DescribeSubnets"
+ ],
+ "timeoutInMinutes": 60
+ },
+ "list": {
+ "permissions": [
+ "redshift:DescribeEndpointAccess",
+ "ec2:DescribeClientVpnEndpoints",
+ "ec2:DescribeVpcAttribute",
+ "ec2:DescribeSecurityGroups",
+ "ec2:DescribeAddresses",
+ "ec2:DescribeInternetGateways",
+ "ec2:DescribeSubnets"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_redshift_endpointauthorization.json b/tools/c7n_awscc/c7n_awscc/data/aws_redshift_endpointauthorization.json
new file mode 100644
index 00000000000..a053c158e81
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_redshift_endpointauthorization.json
@@ -0,0 +1,139 @@
+{
+ "typeName": "AWS::Redshift::EndpointAuthorization",
+ "description": "Describes an endpoint authorization for authorizing Redshift-managed VPC endpoint access to a cluster across AWS accounts.",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-redshift",
+ "definitions": {
+ "AwsAccount": {
+ "type": "string",
+ "pattern": "^\\d{12}$"
+ },
+ "VpcId": {
+ "type": "string",
+ "pattern": "^vpc-\\d{1,17}$"
+ }
+ },
+ "properties": {
+ "Grantor": {
+ "description": "The AWS account ID of the cluster owner.",
+ "$ref": "#/definitions/AwsAccount"
+ },
+ "Grantee": {
+ "description": "The AWS account ID of the grantee of the cluster.",
+ "$ref": "#/definitions/AwsAccount"
+ },
+ "ClusterIdentifier": {
+ "description": "The cluster identifier.",
+ "type": "string",
+ "pattern": "^(?=^[a-z][a-z0-9]*(-[a-z0-9]+)*$).{1,63}$"
+ },
+ "AuthorizeTime": {
+ "description": "The time (UTC) when the authorization was created.",
+ "type": "string"
+ },
+ "ClusterStatus": {
+ "description": "The status of the cluster.",
+ "type": "string"
+ },
+ "Status": {
+ "description": "The status of the authorization action.",
+ "type": "string"
+ },
+ "AllowedAllVPCs": {
+ "description": "Indicates whether all VPCs in the grantee account are allowed access to the cluster.",
+ "type": "boolean"
+ },
+ "AllowedVPCs": {
+ "description": "The VPCs allowed access to the cluster.",
+ "type": "array",
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/VpcId"
+ }
+ },
+ "EndpointCount": {
+ "description": "The number of Redshift-managed VPC endpoints created for the authorization.",
+ "type": "integer"
+ },
+ "Account": {
+ "description": "The target AWS account ID to grant or revoke access for.",
+ "$ref": "#/definitions/AwsAccount"
+ },
+ "VpcIds": {
+ "description": "The virtual private cloud (VPC) identifiers to grant or revoke access to.",
+ "type": "array",
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/VpcId"
+ }
+ },
+ "Force": {
+ "description": " Indicates whether to force the revoke action. If true, the Redshift-managed VPC endpoints associated with the endpoint authorization are also deleted.",
+ "type": "boolean"
+ }
+ },
+ "taggable": false,
+ "additionalProperties": false,
+ "required": [
+ "ClusterIdentifier",
+ "Account"
+ ],
+ "primaryIdentifier": [
+ "/properties/ClusterIdentifier",
+ "/properties/Account"
+ ],
+ "createOnlyProperties": [
+ "/properties/ClusterIdentifier",
+ "/properties/Account"
+ ],
+ "readOnlyProperties": [
+ "/properties/Grantor",
+ "/properties/Grantee",
+ "/properties/AuthorizeTime",
+ "/properties/ClusterStatus",
+ "/properties/Status",
+ "/properties/AllowedAllVPCs",
+ "/properties/AllowedVPCs",
+ "/properties/EndpointCount"
+ ],
+ "writeOnlyProperties": [
+ "/properties/Force"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "redshift:AuthorizeEndpointAccess"
+ ],
+ "timeoutInMinutes": 60
+ },
+ "read": {
+ "permissions": [
+ "redshift:DescribeEndpointAuthorization"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "redshift:AuthorizeEndpointAccess",
+ "redshift:RevokeEndpointAccess"
+ ],
+ "timeoutInMinutes": 60
+ },
+ "delete": {
+ "permissions": [
+ "redshift:RevokeEndpointAccess",
+ "redshift:DeleteEndpointAccess",
+ "ec2:DeleteClientVpnEndpoint",
+ "ec2:DescribeVpcAttribute",
+ "ec2:DescribeSecurityGroups",
+ "ec2:DescribeAddresses",
+ "ec2:DescribeInternetGateways",
+ "ec2:DescribeSubnets"
+ ],
+ "timeoutInMinutes": 60
+ },
+ "list": {
+ "permissions": [
+ "redshift:DescribeEndpointAuthorization"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_redshift_eventsubscription.json b/tools/c7n_awscc/c7n_awscc/data/aws_redshift_eventsubscription.json
new file mode 100644
index 00000000000..c87ed6b2b12
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_redshift_eventsubscription.json
@@ -0,0 +1,186 @@
+{
+ "typeName": "AWS::Redshift::EventSubscription",
+ "description": "The `AWS::Redshift::EventSubscription` resource creates an Amazon Redshift Event Subscription.",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-redshift",
+ "definitions": {
+ "Tag": {
+ "description": "A key-value pair to associate with a resource.",
+ "type": "object",
+ "properties": {
+ "Key": {
+ "type": "string",
+ "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Value": {
+ "type": "string",
+ "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.",
+ "minLength": 0,
+ "maxLength": 256
+ }
+ },
+ "required": [
+ "Key",
+ "Value"
+ ],
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "SubscriptionName": {
+ "description": "The name of the Amazon Redshift event notification subscription",
+ "type": "string",
+ "pattern": "^(?=^[a-z][a-z0-9]*(-[a-z0-9]+)*$).{1,255}$"
+ },
+ "SnsTopicArn": {
+ "description": "The Amazon Resource Name (ARN) of the Amazon SNS topic used to transmit the event notifications.",
+ "type": "string"
+ },
+ "SourceType": {
+ "description": "The type of source that will be generating the events.",
+ "type": "string",
+ "enum": [
+ "cluster",
+ "cluster-parameter-group",
+ "cluster-security-group",
+ "cluster-snapshot",
+ "scheduled-action"
+ ]
+ },
+ "SourceIds": {
+ "description": "A list of one or more identifiers of Amazon Redshift source objects.",
+ "type": "array",
+ "insertionOrder": false,
+ "items": {
+ "type": "string"
+ }
+ },
+ "EventCategories": {
+ "description": "Specifies the Amazon Redshift event categories to be published by the event notification subscription.",
+ "type": "array",
+ "insertionOrder": false,
+ "uniqueItems": true,
+ "items": {
+ "type": "string",
+ "enum": [
+ "configuration",
+ "management",
+ "monitoring",
+ "security",
+ "pending"
+ ]
+ }
+ },
+ "Severity": {
+ "description": "Specifies the Amazon Redshift event severity to be published by the event notification subscription.",
+ "type": "string",
+ "enum": [
+ "ERROR",
+ "INFO"
+ ]
+ },
+ "Enabled": {
+ "description": "A boolean value; set to true to activate the subscription, and set to false to create the subscription but not activate it.",
+ "type": "boolean"
+ },
+ "Tags": {
+ "description": "An array of key-value pairs to apply to this resource.",
+ "type": "array",
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ },
+ "CustomerAwsId": {
+ "description": "The AWS account associated with the Amazon Redshift event notification subscription.",
+ "type": "string"
+ },
+ "CustSubscriptionId": {
+ "description": "The name of the Amazon Redshift event notification subscription.",
+ "type": "string"
+ },
+ "Status": {
+ "description": "The status of the Amazon Redshift event notification subscription.",
+ "type": "string",
+ "enum": [
+ "active",
+ "no-permission",
+ "topic-not-exist"
+ ]
+ },
+ "SubscriptionCreationTime": {
+ "description": "The date and time the Amazon Redshift event notification subscription was created.",
+ "type": "string"
+ },
+ "SourceIdsList": {
+ "description": "A list of the sources that publish events to the Amazon Redshift event notification subscription.",
+ "type": "array",
+ "insertionOrder": false,
+ "items": {
+ "type": "string"
+ }
+ },
+ "EventCategoriesList": {
+ "description": "The list of Amazon Redshift event categories specified in the event notification subscription.",
+ "type": "array",
+ "insertionOrder": false,
+ "uniqueItems": true,
+ "items": {
+ "type": "string"
+ }
+ }
+ },
+ "taggable": true,
+ "additionalProperties": false,
+ "required": [
+ "SubscriptionName"
+ ],
+ "primaryIdentifier": [
+ "/properties/SubscriptionName"
+ ],
+ "createOnlyProperties": [
+ "/properties/SubscriptionName"
+ ],
+ "readOnlyProperties": [
+ "/properties/CustomerAwsId",
+ "/properties/CustSubscriptionId",
+ "/properties/Status",
+ "/properties/SubscriptionCreationTime",
+ "/properties/SourceIdsList",
+ "/properties/EventCategoriesList"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "redshift:CreateEventSubscription",
+ "redshift:CreateTags"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "redshift:DescribeEventSubscriptions",
+ "redshift:DescribeTags"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "redshift:ModifyEventSubscription",
+ "redshift:CreateTags",
+ "redshift:DescribeTags",
+ "redshift:DeleteTags"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "redshift:DeleteEventSubscription",
+ "redshift:DeleteTags"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "redshift:DescribeEventSubscriptions"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_redshift_scheduledaction.json b/tools/c7n_awscc/c7n_awscc/data/aws_redshift_scheduledaction.json
new file mode 100644
index 00000000000..504b613f85c
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_redshift_scheduledaction.json
@@ -0,0 +1,178 @@
+{
+ "typeName": "AWS::Redshift::ScheduledAction",
+ "description": "The `AWS::Redshift::ScheduledAction` resource creates an Amazon Redshift Scheduled Action.",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-redshift",
+ "definitions": {
+ "ResizeClusterMessage": {
+ "description": "Describes a resize cluster operation. For example, a scheduled action to run the `ResizeCluster` API operation.",
+ "type": "object",
+ "properties": {
+ "ClusterIdentifier": {
+ "type": "string"
+ },
+ "ClusterType": {
+ "type": "string"
+ },
+ "NodeType": {
+ "type": "string"
+ },
+ "NumberOfNodes": {
+ "type": "integer"
+ },
+ "Classic": {
+ "type": "boolean"
+ }
+ },
+ "required": [
+ "ClusterIdentifier"
+ ],
+ "additionalProperties": false
+ },
+ "PauseClusterMessage": {
+ "description": "Describes a pause cluster operation. For example, a scheduled action to run the `PauseCluster` API operation.",
+ "type": "object",
+ "properties": {
+ "ClusterIdentifier": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "ClusterIdentifier"
+ ],
+ "additionalProperties": false
+ },
+ "ResumeClusterMessage": {
+ "description": "Describes a resume cluster operation. For example, a scheduled action to run the `ResumeCluster` API operation.",
+ "type": "object",
+ "properties": {
+ "ClusterIdentifier": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "ClusterIdentifier"
+ ],
+ "additionalProperties": false
+ },
+ "ScheduledActionType": {
+ "type": "object",
+ "properties": {
+ "ResizeCluster": {
+ "$ref": "#/definitions/ResizeClusterMessage"
+ },
+ "PauseCluster": {
+ "$ref": "#/definitions/PauseClusterMessage"
+ },
+ "ResumeCluster": {
+ "$ref": "#/definitions/ResumeClusterMessage"
+ }
+ },
+ "additionalProperties": false
+ },
+ "timestamp": {
+ "type": "string"
+ }
+ },
+ "properties": {
+ "ScheduledActionName": {
+ "description": "The name of the scheduled action. The name must be unique within an account.",
+ "type": "string",
+ "pattern": "^(?=^[a-z][a-z0-9]*(-[a-z0-9]+)*$).{1,60}$"
+ },
+ "TargetAction": {
+ "description": "A JSON format string of the Amazon Redshift API operation with input parameters.",
+ "$ref": "#/definitions/ScheduledActionType"
+ },
+ "Schedule": {
+ "description": "The schedule in `at( )` or `cron( )` format.",
+ "type": "string"
+ },
+ "IamRole": {
+ "description": "The IAM role to assume to run the target action.",
+ "type": "string"
+ },
+ "ScheduledActionDescription": {
+ "description": "The description of the scheduled action.",
+ "type": "string",
+ "pattern": "^(?=^[\\x09\\x0a\\x0d\\x20-\\xff]*$).{1,255}$"
+ },
+ "StartTime": {
+ "description": "The start time in UTC of the scheduled action. Before this time, the scheduled action does not trigger.",
+ "$ref": "#/definitions/timestamp"
+ },
+ "EndTime": {
+ "description": "The end time in UTC of the scheduled action. After this time, the scheduled action does not trigger.",
+ "$ref": "#/definitions/timestamp"
+ },
+ "Enable": {
+ "description": "If true, the schedule is enabled. If false, the scheduled action does not trigger.",
+ "type": "boolean"
+ },
+ "State": {
+ "description": "The state of the scheduled action.",
+ "type": "string",
+ "enum": [
+ "ACTIVE",
+ "DISABLED"
+ ]
+ },
+ "NextInvocations": {
+ "description": "List of times when the scheduled action will run.",
+ "type": "array",
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/timestamp"
+ }
+ }
+ },
+ "taggable": false,
+ "additionalProperties": false,
+ "required": [
+ "ScheduledActionName"
+ ],
+ "primaryIdentifier": [
+ "/properties/ScheduledActionName"
+ ],
+ "createOnlyProperties": [
+ "/properties/ScheduledActionName"
+ ],
+ "readOnlyProperties": [
+ "/properties/State",
+ "/properties/NextInvocations"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "redshift:CreateScheduledAction",
+ "redshift:PauseCluster",
+ "redshift:ResumeCluster",
+ "redshift:ResizeCluster",
+ "iam:PassRole"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "redshift:DescribeScheduledActions"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "redshift:ModifyScheduledAction",
+ "redshift:PauseCluster",
+ "redshift:ResumeCluster",
+ "redshift:ResizeCluster",
+ "iam:PassRole"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "redshift:DeleteScheduledAction"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "redshift:DescribeScheduledActions"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_rekognition_project.json b/tools/c7n_awscc/c7n_awscc/data/aws_rekognition_project.json
new file mode 100644
index 00000000000..b94f7ea16e2
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_rekognition_project.json
@@ -0,0 +1,71 @@
+{
+ "typeName": "AWS::Rekognition::Project",
+ "description": "The AWS::Rekognition::Project type creates an Amazon Rekognition CustomLabels Project. A project is a grouping of the resources needed to create and manage Dataset and ProjectVersions.",
+ "sourceUrl": "https://docs.aws.amazon.com/rekognition/latest/customlabels-dg/cp-manage-project.html",
+ "definitions": {
+ "Arn": {
+ "type": "string",
+ "maxLength": 2048,
+ "pattern": "(^arn:[a-z\\d-]+:rekognition:[a-z\\d-]+:\\d{12}:project/[a-zA-Z0-9_.\\-]{1,255}/[0-9]+$)"
+ },
+ "ProjectName": {
+ "description": "The name of the project",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 255,
+ "pattern": "[a-zA-Z0-9][a-zA-Z0-9_\\-]*"
+ }
+ },
+ "properties": {
+ "Arn": {
+ "$ref": "#/definitions/Arn"
+ },
+ "ProjectName": {
+ "$ref": "#/definitions/ProjectName"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "ProjectName"
+ ],
+ "readOnlyProperties": [
+ "/properties/Arn"
+ ],
+ "createOnlyProperties": [
+ "/properties/ProjectName"
+ ],
+ "primaryIdentifier": [
+ "/properties/ProjectName"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "rekognition:CreateProject"
+ ],
+ "timeoutInMinutes": 15
+ },
+ "read": {
+ "permissions": [
+ "rekognition:DescribeProjects"
+ ],
+ "timeoutInMinutes": 15
+ },
+ "update": {
+ "permissions": [],
+ "timeoutInMinutes": 15
+ },
+ "delete": {
+ "permissions": [
+ "rekognition:DescribeProjects",
+ "rekognition:DeleteProject"
+ ],
+ "timeoutInMinutes": 15
+ },
+ "list": {
+ "permissions": [
+ "rekognition:DescribeProjects"
+ ],
+ "timeoutInMinutes": 15
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_resiliencehub_app.json b/tools/c7n_awscc/c7n_awscc/data/aws_resiliencehub_app.json
new file mode 100644
index 00000000000..9b88de2f101
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_resiliencehub_app.json
@@ -0,0 +1,176 @@
+{
+ "typeName": "AWS::ResilienceHub::App",
+ "description": "Resource Type Definition for AWS::ResilienceHub::App.",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-resiliencehub",
+ "definitions": {
+ "TagValue": {
+ "type": "string",
+ "maxLength": 256
+ },
+ "TagMap": {
+ "type": "object",
+ "patternProperties": {
+ ".{1,128}": {
+ "$ref": "#/definitions/TagValue"
+ }
+ },
+ "additionalProperties": false
+ },
+ "PhysicalResourceId": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "AwsAccountId": {
+ "type": "string",
+ "pattern": "^[0-9]{12}$"
+ },
+ "AwsRegion": {
+ "type": "string",
+ "pattern": "^[a-z]{2}-((iso[a-z]{0,1}-)|(gov-)){0,1}[a-z]+-[0-9]$"
+ },
+ "Identifier": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 255
+ },
+ "Type": {
+ "type": "string",
+ "pattern": "Arn|Native"
+ }
+ },
+ "required": [
+ "Identifier",
+ "Type"
+ ]
+ },
+ "ResourceMapping": {
+ "description": "Resource mapping is used to map logical resources from template to physical resource",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "LogicalStackName": {
+ "type": "string"
+ },
+ "MappingType": {
+ "type": "string",
+ "pattern": "CfnStack|Resource"
+ },
+ "ResourceName": {
+ "type": "string",
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9_\\-]{1,59}$"
+ },
+ "PhysicalResourceId": {
+ "$ref": "#/definitions/PhysicalResourceId"
+ }
+ },
+ "required": [
+ "MappingType",
+ "PhysicalResourceId"
+ ]
+ }
+ },
+ "properties": {
+ "Name": {
+ "description": "Name of the app.",
+ "type": "string",
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9_\\-]{1,59}$"
+ },
+ "Description": {
+ "description": "App description.",
+ "type": "string",
+ "minLength": 0,
+ "maxLength": 500
+ },
+ "AppArn": {
+ "type": "string",
+ "description": "Amazon Resource Name (ARN) of the App.",
+ "pattern": "^arn:(aws|aws-cn|aws-iso|aws-iso-[a-z]{1}|aws-us-gov):[A-Za-z0-9][A-Za-z0-9_/.-]{0,62}:([a-z]{2}-((iso[a-z]{0,1}-)|(gov-)){0,1}[a-z]+-[0-9]):[0-9]{12}:[A-Za-z0-9][A-Za-z0-9:_/+=,@.-]{0,1023}$"
+ },
+ "ResiliencyPolicyArn": {
+ "type": "string",
+ "description": "Amazon Resource Name (ARN) of the Resiliency Policy.",
+ "pattern": "^arn:(aws|aws-cn|aws-iso|aws-iso-[a-z]{1}|aws-us-gov):[A-Za-z0-9][A-Za-z0-9_/.-]{0,62}:([a-z]{2}-((iso[a-z]{0,1}-)|(gov-)){0,1}[a-z]+-[0-9]):[0-9]{12}:[A-Za-z0-9][A-Za-z0-9:_/+=,@.-]{0,1023}$"
+ },
+ "Tags": {
+ "$ref": "#/definitions/TagMap"
+ },
+ "AppTemplateBody": {
+ "description": "A string containing full ResilienceHub app template body.",
+ "type": "string",
+ "minLength": 0,
+ "maxLength": 5000,
+ "pattern": "^[\\w\\s:,-\\.'{}\\[\\]:\"]+$"
+ },
+ "ResourceMappings": {
+ "description": "An array of ResourceMapping objects.",
+ "type": "array",
+ "uniqueItems": false,
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/ResourceMapping"
+ }
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "Name",
+ "AppTemplateBody",
+ "ResourceMappings"
+ ],
+ "createOnlyProperties": [
+ "/properties/Name"
+ ],
+ "readOnlyProperties": [
+ "/properties/AppArn"
+ ],
+ "primaryIdentifier": [
+ "/properties/AppArn"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "cloudformation:DescribeStacks",
+ "cloudformation:ListStackResources",
+ "resiliencehub:CreateApp",
+ "resiliencehub:TagResource",
+ "resiliencehub:PutDraftAppVersionTemplate",
+ "resiliencehub:AddDraftAppVersionResourceMappings",
+ "resiliencehub:PublishAppVersion"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "resiliencehub:DescribeApp",
+ "resiliencehub:DescribeAppVersionTemplate",
+ "resiliencehub:ListAppVersionResourceMappings",
+ "resiliencehub:ListTagsForResource"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "cloudformation:DescribeStacks",
+ "cloudformation:ListStackResources",
+ "resiliencehub:UpdateApp",
+ "resiliencehub:PutDraftAppVersionTemplate",
+ "resiliencehub:AddDraftAppVersionResourceMappings",
+ "resiliencehub:RemoveDraftAppVersionResourceMappings",
+ "resiliencehub:PublishAppVersion",
+ "resiliencehub:TagResource",
+ "resiliencehub:UntagResource",
+ "resiliencehub:ListTagsForResource"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "resiliencehub:DeleteApp",
+ "resiliencehub:UntagResource",
+ "resiliencehub:ListApps"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "resiliencehub:ListApps"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_resiliencehub_resiliencypolicy.json b/tools/c7n_awscc/c7n_awscc/data/aws_resiliencehub_resiliencypolicy.json
new file mode 100644
index 00000000000..8ce0a0de9bb
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_resiliencehub_resiliencypolicy.json
@@ -0,0 +1,136 @@
+{
+ "typeName": "AWS::ResilienceHub::ResiliencyPolicy",
+ "description": "Resource Type Definition for Resiliency Policy.",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-resiliencehub",
+ "definitions": {
+ "FailurePolicy": {
+ "description": "Failure Policy.",
+ "type": "object",
+ "properties": {
+ "RtoInSecs": {
+ "description": "RTO in seconds.",
+ "type": "integer"
+ },
+ "RpoInSecs": {
+ "description": "RPO in seconds.",
+ "type": "integer"
+ }
+ },
+ "required": [
+ "RtoInSecs",
+ "RpoInSecs"
+ ],
+ "additionalProperties": false
+ },
+ "PolicyMap": {
+ "type": "object",
+ "patternProperties": {
+ ".*{1,8}": {
+ "$ref": "#/definitions/FailurePolicy"
+ }
+ },
+ "additionalProperties": false
+ },
+ "TagValue": {
+ "type": "string",
+ "maxLength": 256
+ },
+ "TagMap": {
+ "type": "object",
+ "patternProperties": {
+ ".{1,128}": {
+ "$ref": "#/definitions/TagValue"
+ }
+ },
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "PolicyName": {
+ "description": "Name of Resiliency Policy.",
+ "type": "string",
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9_\\-]{1,59}$"
+ },
+ "PolicyDescription": {
+ "description": "Description of Resiliency Policy.",
+ "type": "string",
+ "maxLength": 500
+ },
+ "DataLocationConstraint": {
+ "type": "string",
+ "description": "Data Location Constraint of the Policy.",
+ "enum": [
+ "AnyLocation",
+ "SameContinent",
+ "SameCountry"
+ ]
+ },
+ "Tier": {
+ "type": "string",
+ "description": "Resiliency Policy Tier.",
+ "enum": [
+ "MissionCritical",
+ "Critical",
+ "Important",
+ "CoreServices",
+ "NonCritical"
+ ]
+ },
+ "Policy": {
+ "$ref": "#/definitions/PolicyMap"
+ },
+ "PolicyArn": {
+ "type": "string",
+ "description": "Amazon Resource Name (ARN) of the Resiliency Policy.",
+ "pattern": "^arn:(aws|aws-cn|aws-iso|aws-iso-[a-z]{1}|aws-us-gov):[A-Za-z0-9][A-Za-z0-9_/.-]{0,62}:([a-z]{2}-((iso[a-z]{0,1}-)|(gov-)){0,1}[a-z]+-[0-9]):[0-9]{12}:[A-Za-z0-9][A-Za-z0-9:_/+=,@.-]{0,1023}$"
+ },
+ "Tags": {
+ "$ref": "#/definitions/TagMap"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "PolicyName",
+ "Tier",
+ "Policy"
+ ],
+ "readOnlyProperties": [
+ "/properties/PolicyArn"
+ ],
+ "primaryIdentifier": [
+ "/properties/PolicyArn"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "resiliencehub:CreateResiliencyPolicy",
+ "resiliencehub:TagResource"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "resiliencehub:UpdateResiliencyPolicy",
+ "resiliencehub:TagResource",
+ "resiliencehub:UntagResource",
+ "resiliencehub:ListTagsForResource"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "resiliencehub:DescribeResiliencyPolicy",
+ "resiliencehub:ListTagsForResource"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "resiliencehub:DeleteResiliencyPolicy",
+ "resiliencehub:UntagResource"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "resiliencehub:ListResiliencyPolicies"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_resourcegroups_group.json b/tools/c7n_awscc/c7n_awscc/data/aws_resourcegroups_group.json
new file mode 100644
index 00000000000..d44a610c1c9
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_resourcegroups_group.json
@@ -0,0 +1,202 @@
+{
+ "typeName": "AWS::ResourceGroups::Group",
+ "description": "Schema for ResourceGroups::Group",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git",
+ "definitions": {
+ "ResourceQuery": {
+ "type": "object",
+ "properties": {
+ "Type": {
+ "type": "string",
+ "enum": [
+ "TAG_FILTERS_1_0",
+ "CLOUDFORMATION_STACK_1_0"
+ ]
+ },
+ "Query": {
+ "$ref": "#/definitions/Query"
+ }
+ },
+ "additionalProperties": false
+ },
+ "Query": {
+ "type": "object",
+ "properties": {
+ "ResourceTypeFilters": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "StackIdentifier": {
+ "type": "string"
+ },
+ "TagFilters": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/TagFilter"
+ }
+ }
+ },
+ "additionalProperties": false
+ },
+ "TagFilter": {
+ "type": "object",
+ "properties": {
+ "Key": {
+ "type": "string"
+ },
+ "Values": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ },
+ "additionalProperties": false
+ },
+ "Tag": {
+ "type": "object",
+ "properties": {
+ "Key": {
+ "type": "string",
+ "pattern": "^(?!aws:).+"
+ },
+ "Value": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ },
+ "Configuration": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/ConfigurationItem"
+ }
+ },
+ "ConfigurationItem": {
+ "type": "object",
+ "properties": {
+ "Type": {
+ "type": "string"
+ },
+ "Parameters": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/ConfigurationParameter"
+ }
+ }
+ },
+ "additionalProperties": false
+ },
+ "ConfigurationParameter": {
+ "type": "object",
+ "properties": {
+ "Name": {
+ "type": "string"
+ },
+ "Values": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ },
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "Name": {
+ "description": "The name of the resource group",
+ "type": "string",
+ "maxLength": 128
+ },
+ "Description": {
+ "description": "The description of the resource group",
+ "type": "string",
+ "maxLength": 512
+ },
+ "ResourceQuery": {
+ "$ref": "#/definitions/ResourceQuery"
+ },
+ "Tags": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ },
+ "Arn": {
+ "description": "The Resource Group ARN.",
+ "type": "string"
+ },
+ "Configuration": {
+ "$ref": "#/definitions/Configuration"
+ },
+ "Resources": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "Name"
+ ],
+ "createOnlyProperties": [
+ "/properties/Name"
+ ],
+ "readOnlyProperties": [
+ "/properties/Arn"
+ ],
+ "primaryIdentifier": [
+ "/properties/Name"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "resource-groups:CreateGroup",
+ "resource-groups:Tag",
+ "cloudformation:DescribeStacks",
+ "cloudformation:ListStackResources",
+ "resource-groups:ListGroupResources",
+ "resource-groups:GroupResources"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "resource-groups:GetGroup",
+ "resource-groups:GetGroupQuery",
+ "resource-groups:GetTags",
+ "resource-groups:GetGroupConfiguration",
+ "resource-groups:ListGroupResources"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "resource-groups:UpdateGroup",
+ "resource-groups:GetTags",
+ "resource-groups:GetGroupQuery",
+ "resource-groups:UpdateGroupQuery",
+ "resource-groups:Tag",
+ "resource-groups:Untag",
+ "resource-groups:PutGroupConfiguration",
+ "resource-groups:GetGroupConfiguration",
+ "resource-groups:ListGroupResources",
+ "resource-groups:GroupResources",
+ "resource-groups:UnGroupResources"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "resource-groups:DeleteGroup",
+ "resource-groups:UnGroupResources"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "resource-groups:ListGroups"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_robomaker_fleet.json b/tools/c7n_awscc/c7n_awscc/data/aws_robomaker_fleet.json
new file mode 100644
index 00000000000..505c1123f04
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_robomaker_fleet.json
@@ -0,0 +1,78 @@
+{
+ "typeName": "AWS::RoboMaker::Fleet",
+ "description": "AWS::RoboMaker::Fleet resource creates an AWS RoboMaker fleet. Fleets contain robots and can receive deployments.",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-robomaker.git",
+ "additionalProperties": false,
+ "definitions": {
+ "Arn": {
+ "type": "string",
+ "pattern": "arn:[\\w+=/,.@-]+:[\\w+=/,.@-]+:[\\w+=/,.@-]*:[0-9]*:[\\w+=,.@-]+(/[\\w+=,.@-]+)*"
+ },
+ "Tags": {
+ "description": "A key-value pair to associate with a resource.",
+ "type": "object",
+ "additionalProperties": false,
+ "patternProperties": {
+ "^[a-zA-Z0-9-]{1,128}$": {
+ "type": "string",
+ "description": "The value for the tag. You can specify a value that is 1 to 255 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.",
+ "minLength": 1,
+ "maxLength": 256
+ }
+ }
+ }
+ },
+ "properties": {
+ "Arn": {
+ "$ref": "#/definitions/Arn"
+ },
+ "Tags": {
+ "$ref": "#/definitions/Tags"
+ },
+ "Name": {
+ "description": "The name of the fleet.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 255,
+ "pattern": "[a-zA-Z0-9_\\-]{1,255}$"
+ }
+ },
+ "handlers": {
+ "create": {
+ "permissions": [
+ "robomaker:CreateFleet"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "robomaker:DescribeFleet"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "robomaker:DeleteFleet"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "robomaker:TagResource",
+ "robomaker:UntagResource"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "robomaker:ListFleets"
+ ]
+ }
+ },
+ "required": [],
+ "readOnlyProperties": [
+ "/properties/Arn"
+ ],
+ "createOnlyProperties": [
+ "/properties/Name"
+ ],
+ "primaryIdentifier": [
+ "/properties/Arn"
+ ]
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_robomaker_robot.json b/tools/c7n_awscc/c7n_awscc/data/aws_robomaker_robot.json
new file mode 100644
index 00000000000..e94110414bd
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_robomaker_robot.json
@@ -0,0 +1,107 @@
+{
+ "typeName": "AWS::RoboMaker::Robot",
+ "description": "AWS::RoboMaker::Robot resource creates an AWS RoboMaker fleet.",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-robomaker.git",
+ "additionalProperties": false,
+ "definitions": {
+ "Arn": {
+ "type": "string",
+ "pattern": "arn:[\\w+=/,.@-]+:[\\w+=/,.@-]+:[\\w+=/,.@-]*:[0-9]*:[\\w+=,.@-]+(/[\\w+=,.@-]+)*"
+ },
+ "Tags": {
+ "description": "A key-value pair to associate with a resource.",
+ "type": "object",
+ "additionalProperties": false,
+ "patternProperties": {
+ "^[a-zA-Z0-9-]{1,128}$": {
+ "type": "string",
+ "description": "The value for the tag. You can specify a value that is 1 to 255 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.",
+ "minLength": 1,
+ "maxLength": 256
+ }
+ }
+ }
+ },
+ "properties": {
+ "Arn": {
+ "$ref": "#/definitions/Arn"
+ },
+ "Fleet": {
+ "description": "The Amazon Resource Name (ARN) of the fleet.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 1224
+ },
+ "Architecture": {
+ "description": "The target architecture of the robot.",
+ "type": "string",
+ "enum": [
+ "X86_64",
+ "ARM64",
+ "ARMHF"
+ ]
+ },
+ "GreengrassGroupId": {
+ "description": "The Greengrass group id.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 1224
+ },
+ "Tags": {
+ "$ref": "#/definitions/Tags"
+ },
+ "Name": {
+ "description": "The name for the robot.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 255
+ }
+ },
+ "required": [
+ "GreengrassGroupId",
+ "Architecture"
+ ],
+ "readOnlyProperties": [
+ "/properties/Arn"
+ ],
+ "primaryIdentifier": [
+ "/properties/Arn"
+ ],
+ "createOnlyProperties": [
+ "/properties/GreengrassGroupId",
+ "/properties/Name",
+ "/properties/Architecture",
+ "/properties/Fleet"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "robomaker:CreateRobot",
+ "robomaker:RegisterRobot"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "robomaker:DescribeRobot"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "robomaker:DescribeRobot",
+ "robomaker:DeleteRobot",
+ "robomaker:DeregisterRobot"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "robomaker:ListRobots"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "robomaker:TagResource",
+ "robomaker:UntagResource"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_robomaker_simulationapplication.json b/tools/c7n_awscc/c7n_awscc/data/aws_robomaker_simulationapplication.json
new file mode 100644
index 00000000000..b6076676947
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_robomaker_simulationapplication.json
@@ -0,0 +1,226 @@
+{
+ "typeName": "AWS::RoboMaker::SimulationApplication",
+ "description": "An example resource schema demonstrating some basic constructs and validation rules.",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git",
+ "definitions": {
+ "Arn": {
+ "type": "string",
+ "pattern": "arn:[\\w+=/,.@-]+:[\\w+=/,.@-]+:[\\w+=/,.@-]*:[0-9]*:[\\w+=,.@-]+(/[\\w+=,.@-]+)*"
+ },
+ "Tags": {
+ "description": "A key-value pair to associate with a resource.",
+ "type": "object",
+ "additionalProperties": false,
+ "patternProperties": {
+ "^[a-zA-Z0-9-]{1,128}$": {
+ "type": "string",
+ "description": "The value for the tag. You can specify a value that is 1 to 255 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.",
+ "minLength": 1,
+ "maxLength": 256
+ }
+ }
+ },
+ "RenderingEngine": {
+ "description": "Information about a rendering engine.",
+ "type": "object",
+ "properties": {
+ "Name": {
+ "type": "string",
+ "description": "The name of the rendering engine.",
+ "enum": [
+ "OGRE"
+ ]
+ },
+ "Version": {
+ "type": "string",
+ "description": "The version of the rendering engine.",
+ "pattern": "1.x"
+ }
+ },
+ "required": [
+ "Name",
+ "Version"
+ ],
+ "additionalProperties": false
+ },
+ "RobotSoftwareSuite": {
+ "description": "Information about a robot software suite (ROS distribution).",
+ "type": "object",
+ "properties": {
+ "Name": {
+ "type": "string",
+ "description": "The name of the robot software suite (ROS distribution).",
+ "enum": [
+ "ROS",
+ "ROS2"
+ ]
+ },
+ "Version": {
+ "type": "string",
+ "description": "The version of the robot software suite (ROS distribution).",
+ "enum": [
+ "Kinetic",
+ "Melodic",
+ "Dashing",
+ "Foxy"
+ ]
+ }
+ },
+ "required": [
+ "Name",
+ "Version"
+ ],
+ "additionalProperties": false
+ },
+ "SourceConfig": {
+ "type": "object",
+ "description": "Information about a source configuration.",
+ "properties": {
+ "S3Bucket": {
+ "type": "string",
+ "description": "The Amazon S3 bucket name.",
+ "pattern": "[a-z0-9][a-z0-9.\\-]*[a-z0-9]"
+ },
+ "S3Key": {
+ "type": "string",
+ "description": "The s3 object key.",
+ "minLength": 1,
+ "maxLength": 1024
+ },
+ "Architecture": {
+ "type": "string",
+ "description": "The target processor architecture for the application.",
+ "enum": [
+ "X86_64",
+ "ARM64",
+ "ARMHF"
+ ]
+ }
+ },
+ "required": [
+ "S3Bucket",
+ "S3Key",
+ "Architecture"
+ ],
+ "additionalProperties": false
+ },
+ "SimulationSoftwareSuite": {
+ "description": "Information about a simulation software suite.",
+ "type": "object",
+ "properties": {
+ "Name": {
+ "type": "string",
+ "description": "The name of the simulation software suite.",
+ "enum": [
+ "Gazebo",
+ "RosbagPlay"
+ ]
+ },
+ "Version": {
+ "type": "string",
+ "description": "The version of the simulation software suite.",
+ "enum": [
+ "7",
+ "9",
+ "11",
+ "Kinetic",
+ "Melodic",
+ "Dashing",
+ "Foxy"
+ ]
+ }
+ },
+ "required": [
+ "Name",
+ "Version"
+ ],
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "Arn": {
+ "$ref": "#/definitions/Arn"
+ },
+ "Name": {
+ "description": "The name of the simulation application.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 255,
+ "pattern": "[a-zA-Z0-9_\\-]*"
+ },
+ "CurrentRevisionId": {
+ "description": "The current revision id.",
+ "type": "string"
+ },
+ "RenderingEngine": {
+ "description": "The rendering engine for the simulation application.",
+ "$ref": "#/definitions/RenderingEngine"
+ },
+ "RobotSoftwareSuite": {
+ "description": "The robot software suite (ROS distribution) used by the simulation application.",
+ "$ref": "#/definitions/RobotSoftwareSuite"
+ },
+ "SimulationSoftwareSuite": {
+ "description": "The simulation software suite used by the simulation application.",
+ "$ref": "#/definitions/SimulationSoftwareSuite"
+ },
+ "Sources": {
+ "description": "The sources of the simulation application.",
+ "type": "array",
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/SourceConfig"
+ }
+ },
+ "Environment": {
+ "description": "The URI of the Docker image for the robot application.",
+ "type": "string"
+ },
+ "Tags": {
+ "$ref": "#/definitions/Tags"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "RobotSoftwareSuite",
+ "SimulationSoftwareSuite"
+ ],
+ "readOnlyProperties": [
+ "/properties/Arn"
+ ],
+ "createOnlyProperties": [
+ "/properties/Name"
+ ],
+ "primaryIdentifier": [
+ "/properties/Arn"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "robomaker:CreateSimulationApplication"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "robomaker:DescribeSimulationApplication"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "robomaker:TagResource",
+ "robomaker:UntagResource",
+ "robomaker:UpdateSimulationApplication"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "robomaker:DeleteSimulationApplication"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "robomaker:ListSimulationApplications"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_route53_healthcheck.json b/tools/c7n_awscc/c7n_awscc/data/aws_route53_healthcheck.json
new file mode 100644
index 00000000000..949e6be5827
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_route53_healthcheck.json
@@ -0,0 +1,215 @@
+{
+ "typeName": "AWS::Route53::HealthCheck",
+ "description": "Resource schema for AWS::Route53::HealthCheck.",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53.git",
+ "definitions": {
+ "AlarmIdentifier": {
+ "description": "A complex type that identifies the CloudWatch alarm that you want Amazon Route 53 health checkers to use to determine whether the specified health check is healthy.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Name": {
+ "description": "The name of the CloudWatch alarm that you want Amazon Route 53 health checkers to use to determine whether this health check is healthy.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 256
+ },
+ "Region": {
+ "description": "For the CloudWatch alarm that you want Route 53 health checkers to use to determine whether this health check is healthy, the region that the alarm was created in.",
+ "type": "string"
+ }
+ },
+ "required": [
+ "Name",
+ "Region"
+ ]
+ },
+ "HealthCheckTag": {
+ "description": "A key-value pair to associate with a resource.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Key": {
+ "type": "string",
+ "description": "The key name of the tag.",
+ "maxLength": 128
+ },
+ "Value": {
+ "type": "string",
+ "description": "The value for the tag.",
+ "maxLength": 256
+ }
+ },
+ "required": [
+ "Value",
+ "Key"
+ ]
+ }
+ },
+ "properties": {
+ "HealthCheckId": {
+ "type": "string"
+ },
+ "HealthCheckConfig": {
+ "description": "A complex type that contains information about the health check.",
+ "type": "object",
+ "properties": {
+ "AlarmIdentifier": {
+ "$ref": "#/definitions/AlarmIdentifier"
+ },
+ "ChildHealthChecks": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "maxItems": 256,
+ "insertionOrder": false
+ },
+ "EnableSNI": {
+ "type": "boolean"
+ },
+ "FailureThreshold": {
+ "type": "integer",
+ "minimum": 1,
+ "maximum": 10
+ },
+ "FullyQualifiedDomainName": {
+ "type": "string",
+ "maxLength": 255
+ },
+ "HealthThreshold": {
+ "type": "integer",
+ "minimum": 0,
+ "maximum": 256
+ },
+ "InsufficientDataHealthStatus": {
+ "type": "string",
+ "enum": [
+ "Healthy",
+ "LastKnownStatus",
+ "Unhealthy"
+ ]
+ },
+ "Inverted": {
+ "type": "boolean"
+ },
+ "IPAddress": {
+ "type": "string",
+ "maxLength": 45,
+ "pattern": "^((([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]))$|^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$"
+ },
+ "MeasureLatency": {
+ "type": "boolean"
+ },
+ "Port": {
+ "type": "integer",
+ "minimum": 1,
+ "maximum": 65535
+ },
+ "Regions": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "maxItems": 64,
+ "insertionOrder": false
+ },
+ "RequestInterval": {
+ "type": "integer",
+ "minimum": 10,
+ "maximum": 30
+ },
+ "ResourcePath": {
+ "type": "string",
+ "maxLength": 255
+ },
+ "SearchString": {
+ "type": "string",
+ "maxLength": 255
+ },
+ "RoutingControlArn": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 255
+ },
+ "Type": {
+ "type": "string",
+ "enum": [
+ "CALCULATED",
+ "CLOUDWATCH_METRIC",
+ "HTTP",
+ "HTTP_STR_MATCH",
+ "HTTPS",
+ "HTTPS_STR_MATCH",
+ "TCP",
+ "RECOVERY_CONTROL"
+ ]
+ }
+ },
+ "required": [
+ "Type"
+ ],
+ "additionalProperties": false
+ },
+ "HealthCheckTags": {
+ "type": "array",
+ "uniqueItems": true,
+ "insertionOrder": false,
+ "description": "An array of key-value pairs to apply to this resource.",
+ "items": {
+ "$ref": "#/definitions/HealthCheckTag"
+ }
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "HealthCheckConfig"
+ ],
+ "createOnlyProperties": [
+ "/properties/HealthCheckConfig/Type",
+ "/properties/HealthCheckConfig/MeasureLatency",
+ "/properties/HealthCheckConfig/RequestInterval"
+ ],
+ "readOnlyProperties": [
+ "/properties/HealthCheckId"
+ ],
+ "primaryIdentifier": [
+ "/properties/HealthCheckId"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "route53:CreateHealthCheck",
+ "route53:ChangeTagsForResource",
+ "cloudwatch:DescribeAlarms",
+ "route53-recovery-control-config:DescribeRoutingControl"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "route53:GetHealthCheck",
+ "route53:ListTagsForResource"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "route53:UpdateHealthCheck",
+ "route53:ChangeTagsForResource",
+ "route53:ListTagsForResource",
+ "cloudwatch:DescribeAlarms"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "route53:DeleteHealthCheck"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "route53:ListHealthChecks",
+ "route53:ListTagsForResource"
+ ]
+ }
+ },
+ "taggable": true
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_route53_hostedzone.json b/tools/c7n_awscc/c7n_awscc/data/aws_route53_hostedzone.json
new file mode 100644
index 00000000000..355dac93890
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_route53_hostedzone.json
@@ -0,0 +1,173 @@
+{
+ "typeName": "AWS::Route53::HostedZone",
+ "description": "Resource schema for AWS::Route53::HostedZone.",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53.git",
+ "definitions": {
+ "HostedZoneConfig": {
+ "description": "A complex type that contains an optional comment.\n\nIf you don't want to specify a comment, omit the HostedZoneConfig and Comment elements.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Comment": {
+ "description": "Any comments that you want to include about the hosted zone.",
+ "type": "string",
+ "maxLength": 256
+ }
+ }
+ },
+ "HostedZoneTag": {
+ "description": "A complex type that contains information about a tag that you want to add or edit for the specified health check or hosted zone.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Key": {
+ "type": "string",
+ "description": "The key name of the tag.",
+ "maxLength": 128
+ },
+ "Value": {
+ "type": "string",
+ "description": "The value for the tag.",
+ "maxLength": 256
+ }
+ },
+ "required": [
+ "Value",
+ "Key"
+ ]
+ },
+ "QueryLoggingConfig": {
+ "description": "A complex type that contains information about a configuration for DNS query logging.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "CloudWatchLogsLogGroupArn": {
+ "description": "The Amazon Resource Name (ARN) of the CloudWatch Logs log group that Amazon Route 53 is publishing logs to.",
+ "type": "string"
+ }
+ },
+ "required": [
+ "CloudWatchLogsLogGroupArn"
+ ]
+ },
+ "VPC": {
+ "description": "A complex type that contains information about an Amazon VPC. Route 53 Resolver uses the records in the private hosted zone to route traffic in that VPC.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "VPCId": {
+ "description": "The ID of an Amazon VPC.",
+ "type": "string"
+ },
+ "VPCRegion": {
+ "description": "The region that an Amazon VPC was created in. See https://docs.aws.amazon.com/general/latest/gr/rande.html for a list of up to date regions.",
+ "type": "string"
+ }
+ },
+ "required": [
+ "VPCId",
+ "VPCRegion"
+ ]
+ }
+ },
+ "properties": {
+ "Id": {
+ "type": "string"
+ },
+ "HostedZoneConfig": {
+ "$ref": "#/definitions/HostedZoneConfig"
+ },
+ "HostedZoneTags": {
+ "description": "Adds, edits, or deletes tags for a health check or a hosted zone.\n\nFor information about using tags for cost allocation, see Using Cost Allocation Tags in the AWS Billing and Cost Management User Guide.",
+ "type": "array",
+ "uniqueItems": true,
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/HostedZoneTag"
+ }
+ },
+ "Name": {
+ "description": "The name of the domain. Specify a fully qualified domain name, for example, www.example.com. The trailing dot is optional; Amazon Route 53 assumes that the domain name is fully qualified. This means that Route 53 treats www.example.com (without a trailing dot) and www.example.com. (with a trailing dot) as identical.\n\nIf you're creating a public hosted zone, this is the name you have registered with your DNS registrar. If your domain name is registered with a registrar other than Route 53, change the name servers for your domain to the set of NameServers that are returned by the Fn::GetAtt intrinsic function.",
+ "type": "string",
+ "maxLength": 1024
+ },
+ "QueryLoggingConfig": {
+ "$ref": "#/definitions/QueryLoggingConfig"
+ },
+ "VPCs": {
+ "description": "A complex type that contains information about the VPCs that are associated with the specified hosted zone.",
+ "type": "array",
+ "uniqueItems": true,
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/VPC"
+ }
+ },
+ "NameServers": {
+ "type": "array",
+ "uniqueItems": false,
+ "items": {
+ "type": "string"
+ }
+ }
+ },
+ "additionalProperties": false,
+ "createOnlyProperties": [
+ "/properties/Name"
+ ],
+ "readOnlyProperties": [
+ "/properties/Id",
+ "/properties/NameServers"
+ ],
+ "primaryIdentifier": [
+ "/properties/Id"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "route53:CreateHostedZone",
+ "route53:CreateQueryLoggingConfig",
+ "route53:ChangeTagsForResource",
+ "route53:GetChange",
+ "route53:AssociateVPCWithHostedZone",
+ "ec2:DescribeVpcs"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "route53:GetHostedZone",
+ "route53:ListTagsForResource",
+ "route53:ListQueryLoggingConfigs"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "route53:GetChange",
+ "route53:ListTagsForResource",
+ "route53:UpdateHostedZoneComment",
+ "route53:ChangeTagsForResource",
+ "route53:AssociateVPCWithHostedZone",
+ "route53:DisassociateVPCFromHostedZone",
+ "route53:CreateQueryLoggingConfig",
+ "route53:DeleteQueryLoggingConfig",
+ "ec2:DescribeVpcs"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "route53:DeleteHostedZone",
+ "route53:DeleteQueryLoggingConfig",
+ "route53:ListQueryLoggingConfigs",
+ "route53:GetChange"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "route53:GetHostedZone",
+ "route53:ListHostedZones",
+ "route53:ListHostedZonesByName",
+ "route53:ListQueryLoggingConfigs"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_route53_keysigningkey.json b/tools/c7n_awscc/c7n_awscc/data/aws_route53_keysigningkey.json
new file mode 100644
index 00000000000..0d109d5b32c
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_route53_keysigningkey.json
@@ -0,0 +1,89 @@
+{
+ "typeName": "AWS::Route53::KeySigningKey",
+ "description": "Represents a key signing key (KSK) associated with a hosted zone. You can only have two KSKs per hosted zone.",
+ "properties": {
+ "HostedZoneId": {
+ "description": "The unique string (ID) used to identify a hosted zone.",
+ "type": "string",
+ "pattern": "^[A-Z0-9]{1,32}$"
+ },
+ "Status": {
+ "description": "A string specifying the initial status of the key signing key (KSK). You can set the value to ACTIVE or INACTIVE.",
+ "type": "string",
+ "enum": [
+ "ACTIVE",
+ "INACTIVE"
+ ]
+ },
+ "Name": {
+ "description": "An alphanumeric string used to identify a key signing key (KSK). Name must be unique for each key signing key in the same hosted zone.",
+ "type": "string",
+ "pattern": "^[a-zA-Z0-9_]{3,128}$"
+ },
+ "KeyManagementServiceArn": {
+ "description": "The Amazon resource name (ARN) for a customer managed key (CMK) in AWS Key Management Service (KMS). The KeyManagementServiceArn must be unique for each key signing key (KSK) in a single hosted zone.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 256
+ }
+ },
+ "additionalProperties": false,
+ "createOnlyProperties": [
+ "/properties/HostedZoneId",
+ "/properties/Name",
+ "/properties/KeyManagementServiceArn"
+ ],
+ "required": [
+ "Status",
+ "HostedZoneId",
+ "Name",
+ "KeyManagementServiceArn"
+ ],
+ "primaryIdentifier": [
+ "/properties/HostedZoneId",
+ "/properties/Name"
+ ],
+ "taggable": false,
+ "handlers": {
+ "create": {
+ "permissions": [
+ "route53:CreateKeySigningKey",
+ "kms:DescribeKey",
+ "kms:GetPublicKey",
+ "kms:Sign",
+ "kms:CreateGrant"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "route53:GetDNSSEC"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "route53:ActivateKeySigningKey",
+ "route53:DeactivateKeySigningKey",
+ "kms:DescribeKey",
+ "kms:GetPublicKey",
+ "kms:Sign",
+ "kms:CreateGrant"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "route53:DeactivateKeySigningKey",
+ "route53:DeleteKeySigningKey",
+ "kms:DescribeKey",
+ "kms:GetPublicKey",
+ "kms:Sign",
+ "kms:CreateGrant"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "route53:GetDNSSEC",
+ "route53:ListHostedZones"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_route53recoverycontrol_controlpanel.json b/tools/c7n_awscc/c7n_awscc/data/aws_route53recoverycontrol_controlpanel.json
new file mode 100644
index 00000000000..196724ec050
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_route53recoverycontrol_controlpanel.json
@@ -0,0 +1,119 @@
+{
+ "typeName": "AWS::Route53RecoveryControl::ControlPanel",
+ "description": "AWS Route53 Recovery Control Control Panel resource schema .",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53-recovery-control.git",
+ "taggable": true,
+ "definitions": {
+ "Tag": {
+ "type": "object",
+ "properties": {
+ "Key": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Value": {
+ "type": "string",
+ "maxLength": 256
+ }
+ },
+ "required": [
+ "Value",
+ "Key"
+ ],
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "ClusterArn": {
+ "description": "Cluster to associate with the Control Panel",
+ "type": "string"
+ },
+ "ControlPanelArn": {
+ "description": "The Amazon Resource Name (ARN) of the cluster.",
+ "type": "string"
+ },
+ "Name": {
+ "description": "The name of the control panel. You can use any non-white space character in the name.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 64
+ },
+ "Status": {
+ "description": "The deployment status of control panel. Status can be one of the following: PENDING, DEPLOYED, PENDING_DELETION.",
+ "type": "string",
+ "enum": [
+ "PENDING",
+ "DEPLOYED",
+ "PENDING_DELETION"
+ ]
+ },
+ "DefaultControlPanel": {
+ "description": "A flag that Amazon Route 53 Application Recovery Controller sets to true to designate the default control panel for a cluster. When you create a cluster, Amazon Route 53 Application Recovery Controller creates a control panel, and sets this flag for that control panel. If you create a control panel yourself, this flag is set to false.",
+ "type": "boolean"
+ },
+ "RoutingControlCount": {
+ "description": "Count of associated routing controls",
+ "type": "integer"
+ },
+ "Tags": {
+ "description": "A collection of tags associated with a resource",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Tag",
+ "maxItems": 20
+ },
+ "insertionOrder": false
+ }
+ },
+ "required": [
+ "Name"
+ ],
+ "additionalProperties": false,
+ "createOnlyProperties": [
+ "/properties/ClusterArn",
+ "/properties/Tags"
+ ],
+ "writeOnlyProperties": [
+ "/properties/Tags"
+ ],
+ "primaryIdentifier": [
+ "/properties/ControlPanelArn"
+ ],
+ "readOnlyProperties": [
+ "/properties/ControlPanelArn",
+ "/properties/Status",
+ "/properties/RoutingControlCount",
+ "/properties/DefaultControlPanel"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "route53-recovery-control-config:CreateControlPanel",
+ "route53-recovery-control-config:DescribeCluster",
+ "route53-recovery-control-config:DescribeControlPanel"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "route53-recovery-control-config:DescribeControlPanel"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "route53-recovery-control-config:UpdateControlPanel",
+ "route53-recovery-control-config:DescribeControlPanel"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "route53-recovery-control-config:DeleteControlPanel"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "route53-recovery-control-config:ListControlPanels"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_route53recoverycontrol_routingcontrol.json b/tools/c7n_awscc/c7n_awscc/data/aws_route53recoverycontrol_routingcontrol.json
new file mode 100644
index 00000000000..903996f711c
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_route53recoverycontrol_routingcontrol.json
@@ -0,0 +1,86 @@
+{
+ "typeName": "AWS::Route53RecoveryControl::RoutingControl",
+ "description": "AWS Route53 Recovery Control Routing Control resource schema .",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53-recovery-control.git",
+ "taggable": false,
+ "definitions": {},
+ "properties": {
+ "RoutingControlArn": {
+ "description": "The Amazon Resource Name (ARN) of the routing control.",
+ "type": "string"
+ },
+ "ControlPanelArn": {
+ "description": "The Amazon Resource Name (ARN) of the control panel.",
+ "type": "string"
+ },
+ "Name": {
+ "description": "The name of the routing control. You can use any non-white space character in the name.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 64
+ },
+ "Status": {
+ "description": "The deployment status of the routing control. Status can be one of the following: PENDING, DEPLOYED, PENDING_DELETION.",
+ "type": "string",
+ "enum": [
+ "PENDING",
+ "DEPLOYED",
+ "PENDING_DELETION"
+ ]
+ },
+ "ClusterArn": {
+ "description": "Arn associated with Control Panel",
+ "type": "string"
+ }
+ },
+ "required": [
+ "Name"
+ ],
+ "additionalProperties": false,
+ "createOnlyProperties": [
+ "/properties/ControlPanelArn",
+ "/properties/ClusterArn"
+ ],
+ "primaryIdentifier": [
+ "/properties/RoutingControlArn"
+ ],
+ "readOnlyProperties": [
+ "/properties/RoutingControlArn",
+ "/properties/Status"
+ ],
+ "writeOnlyProperties": [
+ "/properties/ClusterArn"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "route53-recovery-control-config:CreateRoutingControl",
+ "route53-recovery-control-config:DescribeRoutingControl",
+ "route53-recovery-control-config:DescribeControlPanel",
+ "route53-recovery-control-config:DescribeCluster"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "route53-recovery-control-config:DescribeRoutingControl"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "route53-recovery-control-config:UpdateRoutingControl",
+ "route53-recovery-control-config:DescribeRoutingControl",
+ "route53-recovery-control-config:DescribeControlPanel"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "route53-recovery-control-config:DeleteRoutingControl"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "route53-recovery-control-config:ListRoutingControls"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_route53recoverycontrol_safetyrule.json b/tools/c7n_awscc/c7n_awscc/data/aws_route53recoverycontrol_safetyrule.json
new file mode 100644
index 00000000000..b76b0dc20e4
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_route53recoverycontrol_safetyrule.json
@@ -0,0 +1,223 @@
+{
+ "typeName": "AWS::Route53RecoveryControl::SafetyRule",
+ "description": "Resource schema for AWS Route53 Recovery Control basic constructs and validation rules.",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53-recovery-control.git",
+ "taggable": true,
+ "definitions": {
+ "SafetyRuleName": {
+ "description": "The name for the safety rule.",
+ "type": "string"
+ },
+ "RuleType": {
+ "description": "A rule can be one of the following: ATLEAST, AND, or OR.",
+ "type": "string",
+ "enum": [
+ "AND",
+ "OR",
+ "ATLEAST"
+ ]
+ },
+ "RuleConfig": {
+ "description": "The rule configuration for an assertion rule or gating rule. This is the criteria that you set for specific assertion controls (routing controls) or gating controls. This configuration specifies how many controls must be enabled after a transaction completes.",
+ "type": "object",
+ "properties": {
+ "Type": {
+ "$ref": "#/definitions/RuleType"
+ },
+ "Threshold": {
+ "description": "The value of N, when you specify an ATLEAST rule type. That is, Threshold is the number of controls that must be set when you specify an ATLEAST type.",
+ "type": "integer"
+ },
+ "Inverted": {
+ "description": "Logical negation of the rule. If the rule would usually evaluate true, it's evaluated as false, and vice versa.",
+ "type": "boolean"
+ }
+ },
+ "required": [
+ "Type",
+ "Threshold",
+ "Inverted"
+ ],
+ "additionalProperties": false
+ },
+ "GatingRule": {
+ "description": "A gating rule verifies that a set of gating controls evaluates as true, based on a rule configuration that you specify. If the gating rule evaluates to true, Amazon Route 53 Application Recovery Controller allows a set of routing control state changes to run and complete against the set of target controls.",
+ "type": "object",
+ "properties": {
+ "GatingControls": {
+ "description": "The gating controls for the gating rule. That is, routing controls that are evaluated by the rule configuration that you specify.",
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "insertionOrder": false
+ },
+ "TargetControls": {
+ "description": "Routing controls that can only be set or unset if the specified RuleConfig evaluates to true for the specified GatingControls. For example, say you have three gating controls, one for each of three AWS Regions. Now you specify AtLeast 2 as your RuleConfig. With these settings, you can only change (set or unset) the routing controls that you have specified as TargetControls if that rule evaluates to true. \nIn other words, your ability to change the routing controls that you have specified as TargetControls is gated by the rule that you set for the routing controls in GatingControls.",
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "insertionOrder": false
+ },
+ "WaitPeriodMs": {
+ "description": "An evaluation period, in milliseconds (ms), during which any request against the target routing controls will fail. This helps prevent \"flapping\" of state. The wait period is 5000 ms by default, but you can choose a custom value.",
+ "type": "integer"
+ }
+ },
+ "required": [
+ "WaitPeriodMs",
+ "TargetControls",
+ "GatingControls"
+ ],
+ "additionalProperties": false
+ },
+ "AssertionRule": {
+ "description": "An assertion rule enforces that, when a routing control state is changed, that the criteria set by the rule configuration is met. Otherwise, the change to the routing control is not accepted.",
+ "type": "object",
+ "properties": {
+ "WaitPeriodMs": {
+ "description": "An evaluation period, in milliseconds (ms), during which any request against the target routing controls will fail. This helps prevent \"flapping\" of state. The wait period is 5000 ms by default, but you can choose a custom value.",
+ "type": "integer"
+ },
+ "AssertedControls": {
+ "description": "The routing controls that are part of transactions that are evaluated to determine if a request to change a routing control state is allowed. For example, you might include three routing controls, one for each of three AWS Regions.",
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "insertionOrder": false
+ }
+ },
+ "required": [
+ "AssertedControls",
+ "WaitPeriodMs"
+ ],
+ "additionalProperties": false
+ },
+ "Tag": {
+ "type": "object",
+ "properties": {
+ "Key": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Value": {
+ "type": "string",
+ "maxLength": 256
+ }
+ },
+ "required": [
+ "Value",
+ "Key"
+ ],
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "AssertionRule": {
+ "$ref": "#/definitions/AssertionRule"
+ },
+ "GatingRule": {
+ "$ref": "#/definitions/GatingRule"
+ },
+ "Name": {
+ "$ref": "#/definitions/SafetyRuleName"
+ },
+ "SafetyRuleArn": {
+ "description": "The Amazon Resource Name (ARN) of the safety rule.",
+ "type": "string"
+ },
+ "ControlPanelArn": {
+ "description": "The Amazon Resource Name (ARN) of the control panel.",
+ "type": "string"
+ },
+ "Status": {
+ "description": "The deployment status of the routing control. Status can be one of the following: PENDING, DEPLOYED, PENDING_DELETION.",
+ "type": "string",
+ "enum": [
+ "PENDING",
+ "DEPLOYED",
+ "PENDING_DELETION"
+ ]
+ },
+ "RuleConfig": {
+ "$ref": "#/definitions/RuleConfig"
+ },
+ "Tags": {
+ "description": "A collection of tags associated with a resource",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Tag",
+ "maxItems": 20
+ },
+ "insertionOrder": false
+ }
+ },
+ "oneOf": [
+ {
+ "required": [
+ "AssertionRule",
+ "Name",
+ "ControlPanelArn",
+ "RuleConfig"
+ ]
+ },
+ {
+ "required": [
+ "GatingRule",
+ "Name",
+ "ControlPanelArn",
+ "RuleConfig"
+ ]
+ }
+ ],
+ "required": [],
+ "additionalProperties": false,
+ "createOnlyProperties": [
+ "/properties/ControlPanelArn",
+ "/properties/RuleConfig",
+ "/properties/ControlPanelArn",
+ "/properties/Tags"
+ ],
+ "writeOnlyProperties": [
+ "/properties/Tags"
+ ],
+ "readOnlyProperties": [
+ "/properties/SafetyRuleArn",
+ "/properties/Status"
+ ],
+ "primaryIdentifier": [
+ "/properties/SafetyRuleArn"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "route53-recovery-control-config:CreateSafetyRule",
+ "route53-recovery-control-config:DescribeControlPanel",
+ "route53-recovery-control-config:DescribeRoutingControl"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "route53-recovery-control-config:DescribeSafetyRule"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "route53-recovery-control-config:UpdateSafetyRule"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "route53-recovery-control-config:DeleteSafetyRule"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "route53-recovery-control-config:ListSafetyRules"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_route53recoveryreadiness_cell.json b/tools/c7n_awscc/c7n_awscc/data/aws_route53recoveryreadiness_cell.json
new file mode 100644
index 00000000000..818f70105bd
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_route53recoveryreadiness_cell.json
@@ -0,0 +1,113 @@
+{
+ "typeName": "AWS::Route53RecoveryReadiness::Cell",
+ "description": "The API Schema for AWS Route53 Recovery Readiness Cells.",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-reoute53-recovery-readiness.git",
+ "taggable": true,
+ "definitions": {
+ "Tag": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Key": {
+ "type": "string"
+ },
+ "Value": {
+ "type": "array",
+ "items": {
+ "type": "string",
+ "maxItems": 50
+ },
+ "insertionOrder": false
+ }
+ },
+ "required": [
+ "Value",
+ "Key"
+ ]
+ }
+ },
+ "properties": {
+ "CellName": {
+ "description": "The name of the cell to create.",
+ "type": "string",
+ "pattern": "[a-zA-Z0-9_]+",
+ "maxLength": 64
+ },
+ "CellArn": {
+ "description": "The Amazon Resource Name (ARN) of the cell.",
+ "type": "string",
+ "maxLength": 256
+ },
+ "Cells": {
+ "description": "A list of cell Amazon Resource Names (ARNs) contained within this cell, for use in nested cells. For example, Availability Zones within specific Regions.",
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "maxItems": 5,
+ "insertionOrder": false
+ },
+ "ParentReadinessScopes": {
+ "description": "The readiness scope for the cell, which can be a cell Amazon Resource Name (ARN) or a recovery group ARN. This is a list but currently can have only one element.",
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "maxItems": 5,
+ "insertionOrder": false
+ },
+ "Tags": {
+ "description": "A collection of tags associated with a resource",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Tag",
+ "maxItems": 20
+ },
+ "insertionOrder": false
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "CellName"
+ ],
+ "readOnlyProperties": [
+ "/properties/CellArn",
+ "/properties/ParentReadinessScopes"
+ ],
+ "createOnlyProperties": [
+ "/properties/CellName"
+ ],
+ "primaryIdentifier": [
+ "/properties/CellName"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "route53-recovery-readiness:CreateCell",
+ "route53-recovery-readiness:GetCell"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "route53-recovery-readiness:GetCell"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "route53-recovery-readiness:UpdateCell",
+ "route53-recovery-readiness:GetCell"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "route53-recovery-readiness:DeleteCell",
+ "route53-recovery-readiness:GetCell"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "route53-recovery-readiness:ListCells"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_route53recoveryreadiness_readinesscheck.json b/tools/c7n_awscc/c7n_awscc/data/aws_route53recoveryreadiness_readinesscheck.json
new file mode 100644
index 00000000000..5f35c08c174
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_route53recoveryreadiness_readinesscheck.json
@@ -0,0 +1,105 @@
+{
+ "typeName": "AWS::Route53RecoveryReadiness::ReadinessCheck",
+ "description": "Aws Route53 Recovery Readiness Check Schema and API specification.",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53-recovery-readiness.git",
+ "taggable": true,
+ "definitions": {
+ "Tag": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Key": {
+ "type": "string"
+ },
+ "Value": {
+ "type": "array",
+ "items": {
+ "type": "string",
+ "maxItems": 50
+ },
+ "insertionOrder": false
+ }
+ },
+ "required": [
+ "Value",
+ "Key"
+ ]
+ }
+ },
+ "properties": {
+ "ResourceSetName": {
+ "description": "The name of the resource set to check.",
+ "type": "string",
+ "pattern": "[a-zA-Z0-9_]+",
+ "minLength": 1,
+ "maxLength": 64
+ },
+ "ReadinessCheckName": {
+ "description": "Name of the ReadinessCheck to create.",
+ "type": "string",
+ "pattern": "[a-zA-Z0-9_]+",
+ "minLength": 1,
+ "maxLength": 64
+ },
+ "ReadinessCheckArn": {
+ "description": "The Amazon Resource Name (ARN) of the readiness check.",
+ "type": "string",
+ "maxLength": 256
+ },
+ "Tags": {
+ "description": "A collection of tags associated with a resource.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Tag",
+ "maxItems": 20
+ },
+ "insertionOrder": false
+ }
+ },
+ "required": [
+ "ReadinessCheckName"
+ ],
+ "additionalProperties": false,
+ "createOnlyProperties": [
+ "/properties/ReadinessCheckName"
+ ],
+ "readOnlyProperties": [
+ "/properties/ReadinessCheckArn"
+ ],
+ "primaryIdentifier": [
+ "/properties/ReadinessCheckName"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "route53-recovery-readiness:CreateReadinessCheck",
+ "route53-recovery-readiness:GetResourceSet",
+ "route53-recovery-readiness:GetReadinessCheck"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "route53-recovery-readiness:GetReadinessCheck"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "route53-recovery-readiness:UpdateReadinessCheck",
+ "route53-recovery-readiness:GetResourceSet",
+ "route53-recovery-readiness:GetReadinessCheck"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "route53-recovery-readiness:DeleteReadinessCheck",
+ "route53-recovery-readiness:GetReadinessCheck"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "route53-recovery-readiness:ListReadinessChecks",
+ "route53-recovery-readiness:GetReadinessChecks"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_route53recoveryreadiness_recoverygroup.json b/tools/c7n_awscc/c7n_awscc/data/aws_route53recoveryreadiness_recoverygroup.json
new file mode 100644
index 00000000000..89cf7984ae5
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_route53recoveryreadiness_recoverygroup.json
@@ -0,0 +1,108 @@
+{
+ "typeName": "AWS::Route53RecoveryReadiness::RecoveryGroup",
+ "description": "AWS Route53 Recovery Readiness Recovery Group Schema and API specifications.",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53-recovery-readiness-readiness.git",
+ "taggable": true,
+ "definitions": {
+ "Tag": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Key": {
+ "type": "string"
+ },
+ "Value": {
+ "type": "array",
+ "items": {
+ "type": "string",
+ "maxItems": 50
+ },
+ "insertionOrder": false
+ }
+ },
+ "required": [
+ "Value",
+ "Key"
+ ]
+ }
+ },
+ "properties": {
+ "RecoveryGroupName": {
+ "description": "The name of the recovery group to create.",
+ "type": "string",
+ "pattern": "[a-zA-Z0-9_]+",
+ "minLength": 1,
+ "maxLength": 64
+ },
+ "Cells": {
+ "description": "A list of the cell Amazon Resource Names (ARNs) in the recovery group.",
+ "type": "array",
+ "items": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 256
+ },
+ "maxItems": 5,
+ "insertionOrder": false
+ },
+ "RecoveryGroupArn": {
+ "description": "A collection of tags associated with a resource.",
+ "type": "string",
+ "maxLength": 256
+ },
+ "Tags": {
+ "description": "A collection of tags associated with a resource.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Tag",
+ "maxItems": 20
+ },
+ "insertionOrder": false
+ }
+ },
+ "additionalProperties": false,
+ "createOnlyProperties": [
+ "/properties/RecoveryGroupName"
+ ],
+ "readOnlyProperties": [
+ "/properties/RecoveryGroupArn"
+ ],
+ "primaryIdentifier": [
+ "/properties/RecoveryGroupName"
+ ],
+ "required": [
+ "RecoveryGroupName"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "route53-recovery-readiness:CreateRecoveryGroup",
+ "route53-recovery-readiness:GetRecoveryGroup",
+ "route53-recovery-readiness:GetCell"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "route53-recovery-readiness:GetRecoveryGroup"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "route53-recovery-readiness:UpdateRecoveryGroup",
+ "route53-recovery-readiness:GetRecoveryGroup",
+ "route53-recovery-readiness:GetCell"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "route53-recovery-readiness:DeleteRecoveryGroup",
+ "route53-recovery-readiness:GetRecoveryGroup"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "route53-recovery-readiness:ListRecoveryGroups"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_route53recoveryreadiness_resourceset.json b/tools/c7n_awscc/c7n_awscc/data/aws_route53recoveryreadiness_resourceset.json
new file mode 100644
index 00000000000..67b25f0f509
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_route53recoveryreadiness_resourceset.json
@@ -0,0 +1,218 @@
+{
+ "typeName": "AWS::Route53RecoveryReadiness::ResourceSet",
+ "description": "Schema for the AWS Route53 Recovery Readiness ResourceSet Resource and API.",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53-recovery-readiness.git",
+ "taggable": true,
+ "definitions": {
+ "Tag": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Key": {
+ "type": "string"
+ },
+ "Value": {
+ "type": "array",
+ "items": {
+ "type": "string",
+ "maxItems": 50
+ },
+ "insertionOrder": false
+ }
+ },
+ "required": [
+ "Value",
+ "Key"
+ ]
+ },
+ "NLBResource": {
+ "description": "The Network Load Balancer resource that a DNS target resource points to.",
+ "type": "object",
+ "properties": {
+ "Arn": {
+ "description": "A Network Load Balancer resource Amazon Resource Name (ARN).",
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ },
+ "R53ResourceRecord": {
+ "description": "The Route 53 resource that a DNS target resource record points to.",
+ "type": "object",
+ "properties": {
+ "DomainName": {
+ "description": "The DNS target domain name.",
+ "type": "string"
+ },
+ "RecordSetId": {
+ "description": "The Resource Record set id.",
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ },
+ "TargetResource": {
+ "description": "The target resource that the Route 53 record points to.",
+ "type": "object",
+ "properties": {
+ "NLBResource": {
+ "$ref": "#/definitions/NLBResource"
+ },
+ "R53Resource": {
+ "$ref": "#/definitions/R53ResourceRecord"
+ }
+ },
+ "oneOf": [
+ {
+ "required": [
+ "NLBResource"
+ ]
+ },
+ {
+ "required": [
+ "R53Resource"
+ ]
+ }
+ ],
+ "additionalProperties": false
+ },
+ "DNSTargetResource": {
+ "description": "A component for DNS/routing control readiness checks.",
+ "type": "object",
+ "properties": {
+ "DomainName": {
+ "description": "The domain name that acts as an ingress point to a portion of the customer application.",
+ "type": "string"
+ },
+ "RecordSetId": {
+ "description": "The Route 53 record set ID that will uniquely identify a DNS record, given a name and a type.",
+ "type": "string"
+ },
+ "HostedZoneArn": {
+ "description": "The hosted zone Amazon Resource Name (ARN) that contains the DNS record with the provided name of the target resource.",
+ "type": "string"
+ },
+ "RecordType": {
+ "description": "The type of DNS record of the target resource.",
+ "type": "string"
+ },
+ "TargetResource": {
+ "$ref": "#/definitions/TargetResource"
+ }
+ },
+ "additionalProperties": false
+ },
+ "Resource": {
+ "description": "The resource element of a ResourceSet",
+ "type": "object",
+ "properties": {
+ "ResourceArn": {
+ "description": "The Amazon Resource Name (ARN) of the AWS resource.",
+ "type": "string"
+ },
+ "ComponentId": {
+ "description": "The component identifier of the resource, generated when DNS target resource is used.",
+ "type": "string"
+ },
+ "DnsTargetResource": {
+ "$ref": "#/definitions/DNSTargetResource"
+ },
+ "ReadinessScopes": {
+ "description": "A list of recovery group Amazon Resource Names (ARNs) and cell ARNs that this resource is contained within.",
+ "type": "array",
+ "items": {
+ "type": "string",
+ "maxItems": 5
+ },
+ "insertionOrder": false
+ }
+ },
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "ResourceSetName": {
+ "description": "The name of the resource set to create.",
+ "type": "string"
+ },
+ "Resources": {
+ "description": "A list of resource objects in the resource set.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Resource"
+ },
+ "minItems": 1,
+ "maxItems": 6,
+ "insertionOrder": false
+ },
+ "ResourceSetArn": {
+ "description": "The Amazon Resource Name (ARN) of the resource set.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 256
+ },
+ "ResourceSetType": {
+ "description": "The resource type of the resources in the resource set. Enter one of the following values for resource type: \n\nAWS: :AutoScaling: :AutoScalingGroup, AWS: :CloudWatch: :Alarm, AWS: :EC2: :CustomerGateway, AWS: :DynamoDB: :Table, AWS: :EC2: :Volume, AWS: :ElasticLoadBalancing: :LoadBalancer, AWS: :ElasticLoadBalancingV2: :LoadBalancer, AWS: :MSK: :Cluster, AWS: :RDS: :DBCluster, AWS: :Route53: :HealthCheck, AWS: :SQS: :Queue, AWS: :SNS: :Topic, AWS: :SNS: :Subscription, AWS: :EC2: :VPC, AWS: :EC2: :VPNConnection, AWS: :EC2: :VPNGateway, AWS::Route53RecoveryReadiness::DNSTargetResource",
+ "type": "string"
+ },
+ "Tags": {
+ "description": "A tag to associate with the parameters for a resource set.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Tag",
+ "maxItems": 20
+ },
+ "insertionOrder": false
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "ResourceSetName",
+ "ResourceSetType",
+ "Resources"
+ ],
+ "createOnlyProperties": [
+ "/properties/ResourceSetName",
+ "/properties/ResourceSetType"
+ ],
+ "readOnlyProperties": [
+ "/properties/ResourceSetArn"
+ ],
+ "primaryIdentifier": [
+ "/properties/ResourceSetName"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "route53-recovery-readiness:CreateResourceSet",
+ "route53-recovery-readiness:GetResourceSet",
+ "route53-recovery-readiness:GetRecoveryGroup",
+ "route53-recovery-readiness:GetCell"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "route53-recovery-readiness:GetResourceSet"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "route53-recovery-readiness:UpdateResourceSet",
+ "route53-recovery-readiness:GetResourceSet",
+ "route53-recovery-readiness:GetRecoveryGroup",
+ "route53-recovery-readiness:GetCell"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "route53-recovery-readiness:DeleteResourceSet",
+ "route53-recovery-readiness:GetResourceSet"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "route53-recovery-readiness:ListResourceSets"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_route53resolver_firewalldomainlist.json b/tools/c7n_awscc/c7n_awscc/data/aws_route53resolver_firewalldomainlist.json
new file mode 100644
index 00000000000..91cb5fcb0b0
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_route53resolver_firewalldomainlist.json
@@ -0,0 +1,177 @@
+{
+ "typeName": "AWS::Route53Resolver::FirewallDomainList",
+ "description": "Resource schema for AWS::Route53Resolver::FirewallDomainList.",
+ "definitions": {
+ "Domains": {
+ "description": "An inline list of domains to use for this domain list.",
+ "type": "array",
+ "uniqueItems": true,
+ "items": {
+ "description": "FirewallDomainName",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 255
+ }
+ },
+ "Tag": {
+ "description": "A key-value pair to associate with a resource.",
+ "type": "object",
+ "properties": {
+ "Key": {
+ "description": "The key name of the tag. You can specify a value that is 1 to 127 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 127
+ },
+ "Value": {
+ "description": "The value for the tag. You can specify a value that is 1 to 255 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.",
+ "type": "string",
+ "minLength": 0,
+ "maxLength": 255
+ }
+ },
+ "required": [
+ "Key",
+ "Value"
+ ],
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "Id": {
+ "description": "ResourceId",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 64
+ },
+ "Arn": {
+ "description": "Arn",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 600
+ },
+ "Name": {
+ "description": "FirewallDomainListName",
+ "type": "string",
+ "pattern": "(?!^[0-9]+$)([a-zA-Z0-9\\-_' ']+)",
+ "minLength": 1,
+ "maxLength": 64
+ },
+ "DomainCount": {
+ "description": "Count",
+ "type": "integer",
+ "minimum": 0
+ },
+ "Status": {
+ "description": "ResolverFirewallDomainList, possible values are COMPLETE, DELETING, UPDATING, COMPLETE_IMPORT_FAILED, IMPORTING, and INACTIVE_OWNER_ACCOUNT_CLOSED.",
+ "type": "string",
+ "enum": [
+ "COMPLETE",
+ "DELETING",
+ "UPDATING",
+ "COMPLETE_IMPORT_FAILED",
+ "IMPORTING",
+ "INACTIVE_OWNER_ACCOUNT_CLOSED"
+ ]
+ },
+ "StatusMessage": {
+ "description": "FirewallDomainListAssociationStatus",
+ "type": "string"
+ },
+ "ManagedOwnerName": {
+ "description": "ServicePrincipal",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 512
+ },
+ "CreatorRequestId": {
+ "description": "The id of the creator request.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 255
+ },
+ "CreationTime": {
+ "description": "Rfc3339TimeString",
+ "type": "string",
+ "minLength": 20,
+ "maxLength": 40
+ },
+ "ModificationTime": {
+ "description": "Rfc3339TimeString",
+ "type": "string",
+ "minLength": 20,
+ "maxLength": 40
+ },
+ "Domains": {
+ "$ref": "#/definitions/Domains"
+ },
+ "DomainFileUrl": {
+ "description": "S3 URL to import domains from.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 1024
+ },
+ "Tags": {
+ "description": "Tags",
+ "type": "array",
+ "insertionOrder": false,
+ "uniqueItems": true,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ }
+ },
+ "createOnlyProperties": [
+ "/properties/Name"
+ ],
+ "readOnlyProperties": [
+ "/properties/Id",
+ "/properties/Arn",
+ "/properties/DomainCount",
+ "/properties/Status",
+ "/properties/StatusMessage",
+ "/properties/ManagedOwnerName",
+ "/properties/CreatorRequestId",
+ "/properties/CreationTime",
+ "/properties/ModificationTime"
+ ],
+ "writeOnlyProperties": [
+ "/properties/Domains",
+ "/properties/DomainFileUrl"
+ ],
+ "primaryIdentifier": [
+ "/properties/Id"
+ ],
+ "additionalProperties": false,
+ "handlers": {
+ "create": {
+ "permissions": [
+ "route53resolver:CreateFirewallDomainList",
+ "route53resolver:UpdateFirewallDomains",
+ "route53resolver:ImportFirewallDomains",
+ "route53resolver:TagResource"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "route53resolver:GetFirewallDomainList",
+ "route53resolver:ListFirewallDomains",
+ "route53resolver:ListTagsForResource"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "route53resolver:DeleteFirewallDomainList",
+ "route53resolver:UntagResource"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "route53resolver:UpdateFirewallDomains",
+ "route53resolver:ImportFirewallDomains",
+ "route53resolver:TagResource",
+ "route53resolver:UntagResource"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_route53resolver_firewallrulegroup.json b/tools/c7n_awscc/c7n_awscc/data/aws_route53resolver_firewallrulegroup.json
new file mode 100644
index 00000000000..b36aaef4afd
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_route53resolver_firewallrulegroup.json
@@ -0,0 +1,229 @@
+{
+ "typeName": "AWS::Route53Resolver::FirewallRuleGroup",
+ "description": "Resource schema for AWS::Route53Resolver::FirewallRuleGroup.",
+ "definitions": {
+ "FirewallRule": {
+ "description": "Firewall Rule associating the Rule Group to a Domain List",
+ "type": "object",
+ "properties": {
+ "FirewallDomainListId": {
+ "description": "ResourceId",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 64
+ },
+ "Priority": {
+ "description": "Rule Priority",
+ "type": "integer"
+ },
+ "Action": {
+ "description": "Rule Action",
+ "type": "string",
+ "enum": [
+ "ALLOW",
+ "BLOCK",
+ "ALERT"
+ ]
+ },
+ "BlockResponse": {
+ "description": "BlockResponse",
+ "type": "string",
+ "enum": [
+ "NODATA",
+ "NXDOMAIN",
+ "OVERRIDE"
+ ]
+ },
+ "BlockOverrideDomain": {
+ "description": "BlockOverrideDomain",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 255
+ },
+ "BlockOverrideDnsType": {
+ "description": "BlockOverrideDnsType",
+ "type": "string",
+ "enum": [
+ "CNAME"
+ ]
+ },
+ "BlockOverrideTtl": {
+ "description": "BlockOverrideTtl",
+ "type": "integer",
+ "minimum": 0,
+ "maximum": 604800
+ }
+ },
+ "required": [
+ "FirewallDomainListId",
+ "Priority",
+ "Action"
+ ],
+ "additionalProperties": false
+ },
+ "Tag": {
+ "description": "A key-value pair to associate with a resource.",
+ "type": "object",
+ "properties": {
+ "Key": {
+ "description": "The key name of the tag. You can specify a value that is 1 to 127 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 127
+ },
+ "Value": {
+ "description": "The value for the tag. You can specify a value that is 1 to 255 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.",
+ "type": "string",
+ "minLength": 0,
+ "maxLength": 255
+ }
+ },
+ "required": [
+ "Key",
+ "Value"
+ ],
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "Id": {
+ "description": "ResourceId",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 64
+ },
+ "Arn": {
+ "description": "Arn",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 600
+ },
+ "Name": {
+ "description": "FirewallRuleGroupName",
+ "type": "string",
+ "pattern": "(?!^[0-9]+$)([a-zA-Z0-9\\-_' ']+)",
+ "minLength": 1,
+ "maxLength": 64
+ },
+ "RuleCount": {
+ "description": "Count",
+ "type": "integer"
+ },
+ "Status": {
+ "description": "ResolverFirewallRuleGroupAssociation, possible values are COMPLETE, DELETING, UPDATING, and INACTIVE_OWNER_ACCOUNT_CLOSED.",
+ "type": "string",
+ "enum": [
+ "COMPLETE",
+ "DELETING",
+ "UPDATING",
+ "INACTIVE_OWNER_ACCOUNT_CLOSED"
+ ]
+ },
+ "StatusMessage": {
+ "description": "FirewallRuleGroupStatus",
+ "type": "string"
+ },
+ "OwnerId": {
+ "description": "AccountId",
+ "type": "string",
+ "minLength": 12,
+ "maxLength": 32
+ },
+ "ShareStatus": {
+ "description": "ShareStatus, possible values are NOT_SHARED, SHARED_WITH_ME, SHARED_BY_ME.",
+ "type": "string",
+ "enum": [
+ "NOT_SHARED",
+ "SHARED_WITH_ME",
+ "SHARED_BY_ME"
+ ]
+ },
+ "CreatorRequestId": {
+ "description": "The id of the creator request.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 255
+ },
+ "CreationTime": {
+ "description": "Rfc3339TimeString",
+ "type": "string",
+ "minLength": 20,
+ "maxLength": 40
+ },
+ "ModificationTime": {
+ "description": "Rfc3339TimeString",
+ "type": "string",
+ "minLength": 20,
+ "maxLength": 40
+ },
+ "FirewallRules": {
+ "description": "FirewallRules",
+ "type": "array",
+ "insertionOrder": false,
+ "uniqueItems": true,
+ "items": {
+ "$ref": "#/definitions/FirewallRule"
+ }
+ },
+ "Tags": {
+ "description": "Tags",
+ "type": "array",
+ "insertionOrder": false,
+ "uniqueItems": true,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ }
+ },
+ "createOnlyProperties": [
+ "/properties/Name"
+ ],
+ "readOnlyProperties": [
+ "/properties/Id",
+ "/properties/Arn",
+ "/properties/RuleCount",
+ "/properties/Status",
+ "/properties/StatusMessage",
+ "/properties/OwnerId",
+ "/properties/ShareStatus",
+ "/properties/CreatorRequestId",
+ "/properties/CreationTime",
+ "/properties/ModificationTime"
+ ],
+ "primaryIdentifier": [
+ "/properties/Id"
+ ],
+ "additionalProperties": false,
+ "handlers": {
+ "create": {
+ "permissions": [
+ "route53resolver:CreateFirewallRuleGroup",
+ "route53resolver:CreateFirewallRule",
+ "route53resolver:TagResource"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "route53resolver:GetFirewallRuleGroup",
+ "route53resolver:ListFirewallRules",
+ "route53resolver:ListTagsForResource"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "route53resolver:DeleteFirewallRuleGroup",
+ "route53resolver:DeleteFirewallRule",
+ "route53resolver:UntagResource"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "route53resolver:CreateFirewallRule",
+ "route53resolver:DeleteFirewallRule",
+ "route53resolver:UpdateFirewallRule",
+ "route53resolver:TagResource",
+ "route53resolver:UntagResource"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_route53resolver_firewallrulegroupassociation.json b/tools/c7n_awscc/c7n_awscc/data/aws_route53resolver_firewallrulegroupassociation.json
new file mode 100644
index 00000000000..d49f9667270
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_route53resolver_firewallrulegroupassociation.json
@@ -0,0 +1,171 @@
+{
+ "typeName": "AWS::Route53Resolver::FirewallRuleGroupAssociation",
+ "description": "Resource schema for AWS::Route53Resolver::FirewallRuleGroupAssociation.",
+ "definitions": {
+ "Tag": {
+ "description": "A key-value pair to associate with a resource.",
+ "type": "object",
+ "properties": {
+ "Key": {
+ "description": "The key name of the tag. You can specify a value that is 1 to 127 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 127
+ },
+ "Value": {
+ "description": "The value for the tag. You can specify a value that is 1 to 255 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.",
+ "type": "string",
+ "minLength": 0,
+ "maxLength": 255
+ }
+ },
+ "required": [
+ "Key",
+ "Value"
+ ],
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "Id": {
+ "description": "Id",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 64
+ },
+ "Arn": {
+ "description": "Arn",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 600
+ },
+ "FirewallRuleGroupId": {
+ "description": "FirewallRuleGroupId",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 64
+ },
+ "VpcId": {
+ "description": "VpcId",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 64
+ },
+ "Name": {
+ "description": "FirewallRuleGroupAssociationName",
+ "type": "string",
+ "pattern": "(?!^[0-9]+$)([a-zA-Z0-9\\-_' ']+)",
+ "minLength": 0,
+ "maxLength": 64
+ },
+ "Priority": {
+ "description": "Priority",
+ "type": "integer"
+ },
+ "MutationProtection": {
+ "description": "MutationProtectionStatus",
+ "type": "string",
+ "enum": [
+ "ENABLED",
+ "DISABLED"
+ ]
+ },
+ "ManagedOwnerName": {
+ "description": "ServicePrincipal",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 512
+ },
+ "Status": {
+ "description": "ResolverFirewallRuleGroupAssociation, possible values are COMPLETE, DELETING, UPDATING, and INACTIVE_OWNER_ACCOUNT_CLOSED.",
+ "type": "string",
+ "enum": [
+ "COMPLETE",
+ "DELETING",
+ "UPDATING",
+ "INACTIVE_OWNER_ACCOUNT_CLOSED"
+ ]
+ },
+ "StatusMessage": {
+ "description": "FirewallDomainListAssociationStatus",
+ "type": "string"
+ },
+ "CreatorRequestId": {
+ "description": "The id of the creator request.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 255
+ },
+ "CreationTime": {
+ "description": "Rfc3339TimeString",
+ "type": "string",
+ "minLength": 20,
+ "maxLength": 40
+ },
+ "ModificationTime": {
+ "description": "Rfc3339TimeString",
+ "type": "string",
+ "minLength": 20,
+ "maxLength": 40
+ },
+ "Tags": {
+ "description": "Tags",
+ "type": "array",
+ "insertionOrder": false,
+ "uniqueItems": true,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ }
+ },
+ "required": [
+ "FirewallRuleGroupId",
+ "VpcId",
+ "Priority"
+ ],
+ "primaryIdentifier": [
+ "/properties/Id"
+ ],
+ "createOnlyProperties": [
+ "/properties/FirewallRuleGroupId",
+ "/properties/VpcId"
+ ],
+ "readOnlyProperties": [
+ "/properties/Id",
+ "/properties/Arn",
+ "/properties/ManagedOwnerName",
+ "/properties/Status",
+ "/properties/StatusMessage",
+ "/properties/CreatorRequestId",
+ "/properties/CreationTime",
+ "/properties/ModificationTime"
+ ],
+ "additionalProperties": false,
+ "handlers": {
+ "create": {
+ "permissions": [
+ "route53resolver:AssociateFirewallRuleGroup",
+ "route53resolver:TagResource"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "route53resolver:GetFirewallRuleGroupAssociation",
+ "route53resolver:ListTagsForResource"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "route53resolver:DisassociateFirewallRuleGroup",
+ "route53resolver:UntagResource"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "route53resolver:UpdateFirewallRuleGroupAssociation",
+ "route53resolver:TagResource",
+ "route53resolver:UntagResource"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_route53resolver_resolverrule.json b/tools/c7n_awscc/c7n_awscc/data/aws_route53resolver_resolverrule.json
new file mode 100644
index 00000000000..c689ec7b261
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_route53resolver_resolverrule.json
@@ -0,0 +1,153 @@
+{
+ "typeName": "AWS::Route53Resolver::ResolverRule",
+ "description": "Resource Type definition for AWS::Route53Resolver::ResolverRule",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-route53resolver.git",
+ "additionalProperties": false,
+ "properties": {
+ "ResolverEndpointId": {
+ "type": "string",
+ "description": "The ID of the endpoint that the rule is associated with.",
+ "minLength": 1,
+ "maxLength": 64
+ },
+ "DomainName": {
+ "type": "string",
+ "description": "DNS queries for this domain name are forwarded to the IP addresses that are specified in TargetIps",
+ "minLength": 1,
+ "maxLength": 256
+ },
+ "Name": {
+ "type": "string",
+ "description": "The name for the Resolver rule",
+ "minLength": 0,
+ "maxLength": 64
+ },
+ "RuleType": {
+ "type": "string",
+ "description": "When you want to forward DNS queries for specified domain name to resolvers on your network, specify FORWARD. When you have a forwarding rule to forward DNS queries for a domain to your network and you want Resolver to process queries for a subdomain of that domain, specify SYSTEM.",
+ "enum": [
+ "FORWARD",
+ "SYSTEM",
+ "RECURSIVE"
+ ]
+ },
+ "Tags": {
+ "type": "array",
+ "description": "An array of key-value pairs to apply to this resource.",
+ "uniqueItems": false,
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ },
+ "TargetIps": {
+ "type": "array",
+ "description": "An array that contains the IP addresses and ports that an outbound endpoint forwards DNS queries to. Typically, these are the IP addresses of DNS resolvers on your network. Specify IPv4 addresses. IPv6 is not supported.",
+ "uniqueItems": false,
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/TargetAddress"
+ }
+ },
+ "Arn": {
+ "type": "string",
+ "description": "The Amazon Resource Name (ARN) of the resolver rule."
+ },
+ "ResolverRuleId": {
+ "type": "string",
+ "description": "The ID of the endpoint that the rule is associated with."
+ }
+ },
+ "definitions": {
+ "TargetAddress": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Ip": {
+ "type": "string",
+ "description": "One IP address that you want to forward DNS queries to. You can specify only IPv4 addresses. "
+ },
+ "Port": {
+ "type": "string",
+ "description": "The port at Ip that you want to forward DNS queries to. ",
+ "minLength": 0,
+ "maxLength": 65535
+ }
+ },
+ "required": [
+ "Ip"
+ ]
+ },
+ "Tag": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Key": {
+ "type": "string",
+ "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Value": {
+ "type": "string",
+ "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.",
+ "minLength": 0,
+ "maxLength": 256
+ }
+ },
+ "required": [
+ "Value",
+ "Key"
+ ]
+ }
+ },
+ "taggable": false,
+ "required": [
+ "DomainName",
+ "RuleType"
+ ],
+ "primaryIdentifier": [
+ "/properties/ResolverRuleId"
+ ],
+ "readOnlyProperties": [
+ "/properties/Arn",
+ "/properties/ResolverRuleId"
+ ],
+ "createOnlyProperties": [
+ "/properties/DomainName",
+ "/properties/RuleType"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "route53resolver:CreateResolverRule",
+ "route53resolver:GetResolverRule",
+ "route53resolver:ListTagsForResource"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "route53resolver:GetResolverRule",
+ "route53resolver:ListTagsForResource"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "route53resolver:UpdateResolverRule",
+ "route53resolver:GetResolverRule",
+ "route53resolver:ListTagsForResource"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "route53resolver:DeleteResolverRule",
+ "route53resolver:GetResolverRule"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "route53resolver:ListResolverRules"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_rum_appmonitor.json b/tools/c7n_awscc/c7n_awscc/data/aws_rum_appmonitor.json
new file mode 100644
index 00000000000..bbfa7678c1d
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_rum_appmonitor.json
@@ -0,0 +1,257 @@
+{
+ "typeName": "AWS::RUM::AppMonitor",
+ "description": "Resource Type definition for AWS::RUM::AppMonitor",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git",
+ "definitions": {
+ "AppMonitorConfiguration": {
+ "description": "AppMonitor configuration",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "IdentityPoolId": {
+ "description": "The ID of the identity pool that is used to authorize the sending of data to RUM.",
+ "minLength": 1,
+ "maxLength": 55,
+ "pattern": "[\\w-]+:[0-9a-f-]+",
+ "type": "string"
+ },
+ "ExcludedPages": {
+ "description": "A list of URLs in your website or application to exclude from RUM data collection. You can't include both ExcludedPages and IncludedPages in the same operation.",
+ "$ref": "#/definitions/Pages"
+ },
+ "IncludedPages": {
+ "description": "If this app monitor is to collect data from only certain pages in your application, this structure lists those pages. You can't include both ExcludedPages and IncludedPages in the same operation.",
+ "$ref": "#/definitions/Pages"
+ },
+ "FavoritePages": {
+ "description": "A list of pages in the RUM console that are to be displayed with a favorite icon.",
+ "$ref": "#/definitions/FavoritePages"
+ },
+ "SessionSampleRate": {
+ "description": "Specifies the percentage of user sessions to use for RUM data collection. Choosing a higher percentage gives you more data but also incurs more costs. The number you specify is the percentage of user sessions that will be used. If you omit this parameter, the default of 10 is used.",
+ "type": "number",
+ "minimum": 0,
+ "maximum": 1
+ },
+ "GuestRoleArn": {
+ "description": "The ARN of the guest IAM role that is attached to the identity pool that is used to authorize the sending of data to RUM.",
+ "$ref": "#/definitions/Arn"
+ },
+ "AllowCookies": {
+ "description": "If you set this to true, the RUM web client sets two cookies, a session cookie and a user cookie. The cookies allow the RUM web client to collect data relating to the number of users an application has and the behavior of the application across a sequence of events. Cookies are stored in the top-level domain of the current page.",
+ "type": "boolean"
+ },
+ "Telemetries": {
+ "description": "An array that lists the types of telemetry data that this app monitor is to collect.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Telemetry"
+ },
+ "insertionOrder": false
+ },
+ "EnableXRay": {
+ "description": "If you set this to true, RUM enables xray tracing for the user sessions that RUM samples. RUM adds an xray trace header to allowed HTTP requests. It also records an xray segment for allowed HTTP requests. You can see traces and segments from these user sessions in the xray console and the CW ServiceLens console.",
+ "type": "boolean"
+ }
+ }
+ },
+ "TagDef": {
+ "description": "Assigns one or more tags (key-value pairs) to the app monitor. Tags can help you organize and categorize your resources. You can also use them to scope user permissions by granting a user permission to access or change only resources with certain tag values. Tags don't have any semantic meaning to AWS and are interpreted strictly as strings of characters.You can associate as many as 50 tags with an app monitor.",
+ "type": "array",
+ "uniqueItems": true,
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ },
+ "Tag": {
+ "description": "A key-value pair to associate with a resource.",
+ "additionalProperties": false,
+ "type": "object",
+ "properties": {
+ "Key": {
+ "type": "string",
+ "pattern": "^(?!aws:)[a-zA-Z+-=._:/]+$",
+ "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. ",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Value": {
+ "type": "string",
+ "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. ",
+ "minLength": 0,
+ "maxLength": 256
+ }
+ },
+ "required": [
+ "Value",
+ "Key"
+ ]
+ },
+ "Pages": {
+ "type": "array",
+ "description": "List of url pages",
+ "minItems": 0,
+ "maxItems": 50,
+ "items": {
+ "$ref": "#/definitions/Url"
+ },
+ "insertionOrder": false
+ },
+ "FavoritePages": {
+ "type": "array",
+ "description": "List of favorite pages",
+ "minItems": 0,
+ "maxItems": 50,
+ "items": {
+ "type": "string"
+ },
+ "insertionOrder": false
+ },
+ "Url": {
+ "description": "Page Url",
+ "type": "string",
+ "pattern": "https?:\\/\\/(www\\.)?[-a-zA-Z0-9@:%._\\+~#=]{1,256}\\.[a-zA-Z0-9()]{1,6}\\b([-a-zA-Z0-9()@:%_\\+.~#?&//=]*)",
+ "minLength": 1,
+ "maxLength": 1260
+ },
+ "Arn": {
+ "description": "Resource ARN",
+ "type": "string",
+ "pattern": "arn:[^:]*:[^:]*:[^:]*:[^:]*:.*"
+ },
+ "Telemetry": {
+ "type": "string",
+ "enum": [
+ "errors",
+ "performance",
+ "http"
+ ]
+ }
+ },
+ "properties": {
+ "Name": {
+ "description": "A name for the app monitor",
+ "type": "string",
+ "pattern": "[\\.\\-_/#A-Za-z0-9]+",
+ "minLength": 1,
+ "maxLength": 255
+ },
+ "Domain": {
+ "description": "The top-level internet domain name for which your application has administrative authority.",
+ "type": "string",
+ "pattern": "^(localhost)|^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$|^(?![-.])([A-Za-z0-9-\\.\\-]{0,63})((?![-])([a-zA-Z0-9]{1}|^[a-zA-Z0-9]{0,1}))\\.(?![-])[A-Za-z-0-9]{1,63}((?![-])([a-zA-Z0-9]{1}|^[a-zA-Z0-9]{0,1}))|^(\\*\\.)(?![-.])([A-Za-z0-9-\\.\\-]{0,63})((?![-])([a-zA-Z0-9]{1}|^[a-zA-Z0-9]{0,1}))\\.(?![-])[A-Za-z-0-9]{1,63}((?![-])([a-zA-Z0-9]{1}|^[a-zA-Z0-9]{0,1}))",
+ "minLength": 1,
+ "maxLength": 253
+ },
+ "CwLogEnabled": {
+ "description": "Data collected by RUM is kept by RUM for 30 days and then deleted. This parameter specifies whether RUM sends a copy of this telemetry data to CWLlong in your account. This enables you to keep the telemetry data for more than 30 days, but it does incur CWLlong charges. If you omit this parameter, the default is false",
+ "type": "boolean"
+ },
+ "Tags": {
+ "$ref": "#/definitions/TagDef"
+ },
+ "AppMonitorConfiguration": {
+ "$ref": "#/definitions/AppMonitorConfiguration"
+ }
+ },
+ "additionalProperties": false,
+ "createOnlyProperties": [
+ "/properties/Name"
+ ],
+ "primaryIdentifier": [
+ "/properties/Name"
+ ],
+ "required": [
+ "Name",
+ "Domain"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "rum:CreateAppMonitor",
+ "dynamodb:GetItem",
+ "dynamodb:PutItem",
+ "s3:GetObject",
+ "s3:PutObject",
+ "s3:GetObjectAcl",
+ "s3:DoesObjectExist",
+ "logs:CreateLogDelivery",
+ "logs:CreateLogGroup",
+ "logs:GetLogDelivery",
+ "logs:UpdateLogDelivery",
+ "logs:PutResourcePolicy",
+ "logs:DescribeResourcePolicies",
+ "logs:DescribeLogGroups",
+ "logs:PutRetentionPolicy",
+ "rum:TagResource",
+ "cognito-identity:DescribeIdentityPool",
+ "iam:GetRole",
+ "iam:CreateServiceLinkedRole"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "rum:GetAppMonitor",
+ "dynamodb:GetItem",
+ "s3:GetObject",
+ "s3:DoesObjectExist",
+ "s3:GetObjectAcl",
+ "rum:ListTagsForResource"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "rum:UpdateAppMonitor",
+ "dynamodb:GetItem",
+ "dynamodb:PutItem",
+ "dynamodb:UpdateItem",
+ "dynamodb:Query",
+ "s3:GetObject",
+ "s3:PutObject",
+ "s3:GetObjectAcl",
+ "s3:DoesObjectExist",
+ "logs:CreateLogDelivery",
+ "logs:CreateLogGroup",
+ "logs:GetLogDelivery",
+ "logs:UpdateLogDelivery",
+ "logs:PutResourcePolicy",
+ "logs:DescribeResourcePolicies",
+ "logs:DescribeLogGroups",
+ "logs:PutRetentionPolicy",
+ "rum:TagResource",
+ "rum:UntagResource",
+ "rum:ListTagsForResource",
+ "iam:GetRole",
+ "iam:CreateServiceLinkedRole"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "rum:DeleteAppMonitor",
+ "dynamodb:DeleteItem",
+ "dynamodb:Query",
+ "logs:DeleteLogDelivery",
+ "s3:DeleteObject",
+ "s3:DoesObjectExist",
+ "rum:UntagResource"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "rum:ListAppMonitors",
+ "dynamodb:DescribeTable",
+ "rum:GetAppMonitor",
+ "dynamodb:GetItem",
+ "dynamodb:BatchGetItem",
+ "dynamodb:Query",
+ "s3:GetObject",
+ "s3:DoesObjectExist",
+ "s3:GetObjectAcl",
+ "logs:DescribeLogGroups",
+ "rum:ListTagsForResource"
+ ]
+ }
+ },
+ "taggable": true
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_s3_accesspoint.json b/tools/c7n_awscc/c7n_awscc/data/aws_s3_accesspoint.json
new file mode 100644
index 00000000000..9fa9b4b110d
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_s3_accesspoint.json
@@ -0,0 +1,159 @@
+{
+ "typeName": "AWS::S3::AccessPoint",
+ "description": "The AWS::S3::AccessPoint resource is an Amazon S3 resource type that you can use to access buckets.",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-s3",
+ "definitions": {
+ "VpcConfiguration": {
+ "description": "The Virtual Private Cloud (VPC) configuration for a bucket access point.",
+ "type": "object",
+ "properties": {
+ "VpcId": {
+ "description": "If this field is specified, this access point will only allow connections from the specified VPC ID.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 1024
+ }
+ }
+ },
+ "PublicAccessBlockConfiguration": {
+ "type": "object",
+ "properties": {
+ "BlockPublicAcls": {
+ "type": "boolean",
+ "description": "Specifies whether Amazon S3 should block public access control lists (ACLs) for buckets in this account. Setting this element to TRUE causes the following behavior:\n- PUT Bucket acl and PUT Object acl calls fail if the specified ACL is public.\n - PUT Object calls fail if the request includes a public ACL.\n. - PUT Bucket calls fail if the request includes a public ACL.\nEnabling this setting doesn't affect existing policies or ACLs."
+ },
+ "IgnorePublicAcls": {
+ "type": "boolean",
+ "description": "Specifies whether Amazon S3 should ignore public ACLs for buckets in this account. Setting this element to TRUE causes Amazon S3 to ignore all public ACLs on buckets in this account and any objects that they contain. Enabling this setting doesn't affect the persistence of any existing ACLs and doesn't prevent new public ACLs from being set."
+ },
+ "BlockPublicPolicy": {
+ "type": "boolean",
+ "description": "Specifies whether Amazon S3 should block public bucket policies for buckets in this account. Setting this element to TRUE causes Amazon S3 to reject calls to PUT Bucket policy if the specified bucket policy allows public access. Enabling this setting doesn't affect existing bucket policies."
+ },
+ "RestrictPublicBuckets": {
+ "type": "boolean",
+ "description": "Specifies whether Amazon S3 should restrict public bucket policies for this bucket. Setting this element to TRUE restricts access to this bucket to only AWS services and authorized users within this account if the bucket has a public policy.\nEnabling this setting doesn't affect previously stored bucket policies, except that public and cross-account access within any public bucket policy, including non-public delegation to specific accounts, is blocked."
+ }
+ }
+ },
+ "Arn": {
+ "description": "the Amazon Resource Name (ARN) of the specified accesspoint.",
+ "type": "string"
+ }
+ },
+ "properties": {
+ "Name": {
+ "description": "The name you want to assign to this Access Point. If you don't specify a name, AWS CloudFormation generates a unique ID and uses that ID for the access point name.",
+ "type": "string",
+ "pattern": "^[a-z0-9]([a-z0-9\\-]*[a-z0-9])?$",
+ "minLength": 3,
+ "maxLength": 50
+ },
+ "Alias": {
+ "description": "The alias of this Access Point. This alias can be used for compatibility purposes with other AWS services and third-party applications.",
+ "type": "string",
+ "pattern": "^[a-z0-9]([a-z0-9\\-]*[a-z0-9])?$",
+ "minLength": 3,
+ "maxLength": 63
+ },
+ "Bucket": {
+ "description": "The name of the bucket that you want to associate this Access Point with.",
+ "type": "string",
+ "minLength": 3,
+ "maxLength": 255
+ },
+ "VpcConfiguration": {
+ "description": "If you include this field, Amazon S3 restricts access to this Access Point to requests from the specified Virtual Private Cloud (VPC).",
+ "$ref": "#/definitions/VpcConfiguration"
+ },
+ "PublicAccessBlockConfiguration": {
+ "description": "The PublicAccessBlock configuration that you want to apply to this Access Point. You can enable the configuration options in any combination. For more information about when Amazon S3 considers a bucket or object public, see https://docs.aws.amazon.com/AmazonS3/latest/dev/access-control-block-public-access.html#access-control-block-public-access-policy-status 'The Meaning of Public' in the Amazon Simple Storage Service Developer Guide.",
+ "$ref": "#/definitions/PublicAccessBlockConfiguration"
+ },
+ "Policy": {
+ "description": "The Access Point Policy you want to apply to this access point.",
+ "type": "object"
+ },
+ "PolicyStatus": {
+ "type": "object",
+ "properties": {
+ "IsPublic": {
+ "type": "string",
+ "description": "Specifies whether the policy is public or not.",
+ "enum": [
+ "true",
+ "false"
+ ]
+ }
+ }
+ },
+ "NetworkOrigin": {
+ "description": "Indicates whether this Access Point allows access from the public Internet. If VpcConfiguration is specified for this Access Point, then NetworkOrigin is VPC, and the Access Point doesn't allow access from the public Internet. Otherwise, NetworkOrigin is Internet, and the Access Point allows access from the public Internet, subject to the Access Point and bucket access policies.",
+ "type": "string",
+ "enum": [
+ "Internet",
+ "VPC"
+ ]
+ },
+ "Arn": {
+ "$ref": "#/definitions/Arn",
+ "description": "The Amazon Resource Name (ARN) of the specified accesspoint.",
+ "examples": [
+ "arn:aws:s3:us-west-2:123456789012:accesspoint/test"
+ ]
+ }
+ },
+ "required": [
+ "Bucket"
+ ],
+ "createOnlyProperties": [
+ "/properties/Name",
+ "/properties/Bucket",
+ "/properties/VpcConfiguration",
+ "/properties/PublicAccessBlockConfiguration"
+ ],
+ "readOnlyProperties": [
+ "/properties/Name",
+ "/properties/Alias",
+ "/properties/NetworkOrigin",
+ "/properties/Arn"
+ ],
+ "primaryIdentifier": [
+ "/properties/Name"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "s3:CreateAccessPoint",
+ "s3:PutAccessPointPolicy",
+ "s3:PutAccessPointPublicAccessBlock"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "s3:GetAccessPoint",
+ "s3:GetAccessPointPolicy",
+ "s3:GetAccessPointPolicyStatus"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "s3:PutAccessPointPolicy",
+ "s3:PutAccessPointPublicAccessBlock",
+ "s3:DeleteAccessPointPolicy"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "s3:DeleteAccessPointPolicy",
+ "s3:DeleteAccessPoint"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "s3:ListAccessPoints"
+ ]
+ }
+ },
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_s3_bucket.json b/tools/c7n_awscc/c7n_awscc/data/aws_s3_bucket.json
new file mode 100644
index 00000000000..b25d4931c60
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_s3_bucket.json
@@ -0,0 +1,1552 @@
+{
+ "typeName": "AWS::S3::Bucket",
+ "description": "Resource Type definition for AWS::S3::Bucket",
+ "additionalProperties": false,
+ "properties": {
+ "AccelerateConfiguration": {
+ "$ref": "#/definitions/AccelerateConfiguration",
+ "description": "Configuration for the transfer acceleration state."
+ },
+ "AccessControl": {
+ "description": "A canned access control list (ACL) that grants predefined permissions to the bucket.",
+ "enum": [
+ "AuthenticatedRead",
+ "AwsExecRead",
+ "BucketOwnerFullControl",
+ "BucketOwnerRead",
+ "LogDeliveryWrite",
+ "Private",
+ "PublicRead",
+ "PublicReadWrite"
+ ],
+ "type": "string"
+ },
+ "AnalyticsConfigurations": {
+ "description": "The configuration and any analyses for the analytics filter of an Amazon S3 bucket.",
+ "items": {
+ "$ref": "#/definitions/AnalyticsConfiguration"
+ },
+ "type": "array",
+ "uniqueItems": true,
+ "insertionOrder": true
+ },
+ "BucketEncryption": {
+ "$ref": "#/definitions/BucketEncryption"
+ },
+ "BucketName": {
+ "description": "A name for the bucket. If you don't specify a name, AWS CloudFormation generates a unique physical ID and uses that ID for the bucket name.",
+ "maxLength": 63,
+ "minLength": 3,
+ "pattern": "^[a-z0-9][a-z0-9//.//-]*[a-z0-9]$",
+ "type": "string"
+ },
+ "CorsConfiguration": {
+ "$ref": "#/definitions/CorsConfiguration",
+ "description": "Rules that define cross-origin resource sharing of objects in this bucket."
+ },
+ "IntelligentTieringConfigurations": {
+ "description": "Specifies the S3 Intelligent-Tiering configuration for an Amazon S3 bucket.",
+ "items": {
+ "$ref": "#/definitions/IntelligentTieringConfiguration"
+ },
+ "type": "array",
+ "uniqueItems": true,
+ "insertionOrder": true
+ },
+ "InventoryConfigurations": {
+ "description": "The inventory configuration for an Amazon S3 bucket.",
+ "items": {
+ "$ref": "#/definitions/InventoryConfiguration"
+ },
+ "type": "array",
+ "uniqueItems": true,
+ "insertionOrder": true
+ },
+ "LifecycleConfiguration": {
+ "$ref": "#/definitions/LifecycleConfiguration",
+ "description": "Rules that define how Amazon S3 manages objects during their lifetime."
+ },
+ "LoggingConfiguration": {
+ "$ref": "#/definitions/LoggingConfiguration",
+ "description": "Settings that define where logs are stored."
+ },
+ "MetricsConfigurations": {
+ "description": "Settings that define a metrics configuration for the CloudWatch request metrics from the bucket.",
+ "items": {
+ "$ref": "#/definitions/MetricsConfiguration"
+ },
+ "type": "array",
+ "uniqueItems": true,
+ "insertionOrder": true
+ },
+ "NotificationConfiguration": {
+ "$ref": "#/definitions/NotificationConfiguration",
+ "description": "Configuration that defines how Amazon S3 handles bucket notifications."
+ },
+ "ObjectLockConfiguration": {
+ "$ref": "#/definitions/ObjectLockConfiguration",
+ "description": "Places an Object Lock configuration on the specified bucket."
+ },
+ "ObjectLockEnabled": {
+ "description": "Indicates whether this bucket has an Object Lock configuration enabled.",
+ "type": "boolean"
+ },
+ "OwnershipControls": {
+ "description": "Specifies the container element for object ownership rules.",
+ "$ref": "#/definitions/OwnershipControls"
+ },
+ "PublicAccessBlockConfiguration": {
+ "$ref": "#/definitions/PublicAccessBlockConfiguration"
+ },
+ "ReplicationConfiguration": {
+ "$ref": "#/definitions/ReplicationConfiguration",
+ "description": "Configuration for replicating objects in an S3 bucket."
+ },
+ "Tags": {
+ "description": "An arbitrary set of tags (key-value pairs) for this S3 bucket.",
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ },
+ "type": "array"
+ },
+ "VersioningConfiguration": {
+ "$ref": "#/definitions/VersioningConfiguration"
+ },
+ "WebsiteConfiguration": {
+ "$ref": "#/definitions/WebsiteConfiguration"
+ },
+ "Arn": {
+ "$ref": "#/definitions/Arn",
+ "description": "The Amazon Resource Name (ARN) of the specified bucket.",
+ "examples": [
+ "arn:aws:s3:::mybucket"
+ ]
+ },
+ "DomainName": {
+ "description": "The IPv4 DNS name of the specified bucket.",
+ "examples": [
+ "mystack-mybucket-kdwwxmddtr2g.s3.amazonaws.com"
+ ],
+ "type": "string"
+ },
+ "DualStackDomainName": {
+ "description": "The IPv6 DNS name of the specified bucket. For more information about dual-stack endpoints, see [Using Amazon S3 Dual-Stack Endpoints](https://docs.aws.amazon.com/AmazonS3/latest/dev/dual-stack-endpoints.html).",
+ "examples": [
+ "mystack-mybucket-kdwwxmddtr2g.s3.dualstack.us-east-2.amazonaws.com"
+ ],
+ "type": "string"
+ },
+ "RegionalDomainName": {
+ "description": "Returns the regional domain name of the specified bucket.",
+ "examples": [
+ "mystack-mybucket-kdwwxmddtr2g.s3.us-east-2.amazonaws.com"
+ ],
+ "type": "string"
+ },
+ "WebsiteURL": {
+ "description": "The Amazon S3 website endpoint for the specified bucket.",
+ "examples": [
+ "Example (IPv4): http://mystack-mybucket-kdwwxmddtr2g.s3-website-us-east-2.amazonaws.com/",
+ "Example (IPv6): http://mystack-mybucket-kdwwxmddtr2g.s3.dualstack.us-east-2.amazonaws.com/"
+ ],
+ "format": "uri",
+ "type": "string"
+ }
+ },
+ "definitions": {
+ "TagFilter": {
+ "description": "Tags to use to identify a subset of objects for an Amazon S3 bucket.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Value": {
+ "type": "string"
+ },
+ "Key": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "Value",
+ "Key"
+ ]
+ },
+ "Destination": {
+ "description": "Specifies information about where to publish analysis or configuration results for an Amazon S3 bucket and S3 Replication Time Control (S3 RTC).",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "BucketArn": {
+ "description": "The Amazon Resource Name (ARN) of the bucket to which data is exported.",
+ "type": "string"
+ },
+ "BucketAccountId": {
+ "description": "The account ID that owns the destination S3 bucket. ",
+ "type": "string"
+ },
+ "Format": {
+ "description": "Specifies the file format used when exporting data to Amazon S3.",
+ "type": "string",
+ "enum": [
+ "CSV",
+ "ORC",
+ "Parquet"
+ ]
+ },
+ "Prefix": {
+ "description": "The prefix to use when exporting data. The prefix is prepended to all results.",
+ "type": "string"
+ }
+ },
+ "required": [
+ "BucketArn",
+ "Format"
+ ]
+ },
+ "AccelerateConfiguration": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "AccelerationStatus": {
+ "description": "Configures the transfer acceleration state for an Amazon S3 bucket.",
+ "type": "string",
+ "enum": [
+ "Enabled",
+ "Suspended"
+ ]
+ }
+ },
+ "required": [
+ "AccelerationStatus"
+ ]
+ },
+ "AnalyticsConfiguration": {
+ "description": "Specifies the configuration and any analyses for the analytics filter of an Amazon S3 bucket.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "TagFilters": {
+ "type": "array",
+ "uniqueItems": true,
+ "insertionOrder": true,
+ "items": {
+ "$ref": "#/definitions/TagFilter"
+ }
+ },
+ "StorageClassAnalysis": {
+ "$ref": "#/definitions/StorageClassAnalysis"
+ },
+ "Id": {
+ "description": "The ID that identifies the analytics configuration.",
+ "type": "string"
+ },
+ "Prefix": {
+ "description": "The prefix that an object must have to be included in the analytics results.",
+ "type": "string"
+ }
+ },
+ "required": [
+ "StorageClassAnalysis",
+ "Id"
+ ]
+ },
+ "StorageClassAnalysis": {
+ "description": "Specifies data related to access patterns to be collected and made available to analyze the tradeoffs between different storage classes for an Amazon S3 bucket.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "DataExport": {
+ "$ref": "#/definitions/DataExport"
+ }
+ }
+ },
+ "DataExport": {
+ "description": "Specifies how data related to the storage class analysis for an Amazon S3 bucket should be exported.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Destination": {
+ "$ref": "#/definitions/Destination"
+ },
+ "OutputSchemaVersion": {
+ "description": "The version of the output schema to use when exporting data.",
+ "type": "string",
+ "const": "V_1"
+ }
+ },
+ "required": [
+ "Destination",
+ "OutputSchemaVersion"
+ ]
+ },
+ "BucketEncryption": {
+ "description": "Specifies default encryption for a bucket using server-side encryption with either Amazon S3-managed keys (SSE-S3) or AWS KMS-managed keys (SSE-KMS).",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "ServerSideEncryptionConfiguration": {
+ "description": "Specifies the default server-side-encryption configuration.",
+ "type": "array",
+ "uniqueItems": true,
+ "insertionOrder": true,
+ "items": {
+ "$ref": "#/definitions/ServerSideEncryptionRule"
+ }
+ }
+ },
+ "required": [
+ "ServerSideEncryptionConfiguration"
+ ]
+ },
+ "ServerSideEncryptionRule": {
+ "description": "Specifies the default server-side encryption configuration.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "BucketKeyEnabled": {
+ "description": "Specifies whether Amazon S3 should use an S3 Bucket Key with server-side encryption using KMS (SSE-KMS) for new objects in the bucket. Existing objects are not affected. Setting the BucketKeyEnabled element to true causes Amazon S3 to use an S3 Bucket Key. By default, S3 Bucket Key is not enabled.",
+ "type": "boolean"
+ },
+ "ServerSideEncryptionByDefault": {
+ "$ref": "#/definitions/ServerSideEncryptionByDefault"
+ }
+ }
+ },
+ "ServerSideEncryptionByDefault": {
+ "description": "Specifies the default server-side encryption to apply to new objects in the bucket. If a PUT Object request doesn't specify any server-side encryption, this default encryption will be applied.",
+ "type": "object",
+ "properties": {
+ "KMSMasterKeyID": {
+ "description": "\"KMSMasterKeyID\" can only be used when you set the value of SSEAlgorithm as aws:kms.",
+ "type": "string"
+ },
+ "SSEAlgorithm": {
+ "type": "string",
+ "enum": [
+ "aws:kms",
+ "AES256"
+ ]
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "SSEAlgorithm"
+ ]
+ },
+ "CorsConfiguration": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "CorsRules": {
+ "type": "array",
+ "uniqueItems": true,
+ "insertionOrder": true,
+ "items": {
+ "$ref": "#/definitions/CorsRule",
+ "maxLength": 100
+ }
+ }
+ },
+ "required": [
+ "CorsRules"
+ ]
+ },
+ "CorsRule": {
+ "type": "object",
+ "description": "A set of origins and methods (cross-origin access that you want to allow). You can add up to 100 rules to the configuration.",
+ "additionalProperties": false,
+ "properties": {
+ "AllowedHeaders": {
+ "description": "Headers that are specified in the Access-Control-Request-Headers header.",
+ "type": "array",
+ "uniqueItems": true,
+ "insertionOrder": true,
+ "items": {
+ "type": "string"
+ }
+ },
+ "AllowedMethods": {
+ "description": "An HTTP method that you allow the origin to execute.",
+ "type": "array",
+ "uniqueItems": true,
+ "insertionOrder": true,
+ "items": {
+ "type": "string",
+ "enum": [
+ "GET",
+ "PUT",
+ "HEAD",
+ "POST",
+ "DELETE"
+ ]
+ }
+ },
+ "AllowedOrigins": {
+ "description": "One or more origins you want customers to be able to access the bucket from.",
+ "type": "array",
+ "uniqueItems": true,
+ "insertionOrder": true,
+ "items": {
+ "type": "string"
+ }
+ },
+ "ExposedHeaders": {
+ "description": "One or more headers in the response that you want customers to be able to access from their applications (for example, from a JavaScript XMLHttpRequest object).",
+ "type": "array",
+ "uniqueItems": true,
+ "insertionOrder": true,
+ "items": {
+ "type": "string"
+ }
+ },
+ "Id": {
+ "description": "A unique identifier for this rule.",
+ "type": "string",
+ "maxLength": 255
+ },
+ "MaxAge": {
+ "description": "The time in seconds that your browser is to cache the preflight response for the specified resource.",
+ "type": "integer",
+ "minimum": 0
+ }
+ },
+ "required": [
+ "AllowedMethods",
+ "AllowedOrigins"
+ ]
+ },
+ "IntelligentTieringConfiguration": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Id": {
+ "description": "The ID used to identify the S3 Intelligent-Tiering configuration.",
+ "type": "string"
+ },
+ "Prefix": {
+ "description": "An object key name prefix that identifies the subset of objects to which the rule applies.",
+ "type": "string"
+ },
+ "Status": {
+ "description": "Specifies the status of the configuration.",
+ "type": "string",
+ "enum": [
+ "Disabled",
+ "Enabled"
+ ]
+ },
+ "TagFilters": {
+ "description": "A container for a key-value pair.",
+ "type": "array",
+ "uniqueItems": true,
+ "insertionOrder": true,
+ "items": {
+ "$ref": "#/definitions/TagFilter"
+ }
+ },
+ "Tierings": {
+ "description": "Specifies a list of S3 Intelligent-Tiering storage class tiers in the configuration. At least one tier must be defined in the list. At most, you can specify two tiers in the list, one for each available AccessTier: ARCHIVE_ACCESS and DEEP_ARCHIVE_ACCESS.",
+ "type": "array",
+ "uniqueItems": true,
+ "insertionOrder": true,
+ "items": {
+ "$ref": "#/definitions/Tiering"
+ }
+ }
+ },
+ "required": [
+ "Id",
+ "Status",
+ "Tierings"
+ ]
+ },
+ "Tiering": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "AccessTier": {
+ "description": "S3 Intelligent-Tiering access tier. See Storage class for automatically optimizing frequently and infrequently accessed objects for a list of access tiers in the S3 Intelligent-Tiering storage class.",
+ "type": "string",
+ "enum": [
+ "ARCHIVE_ACCESS",
+ "DEEP_ARCHIVE_ACCESS"
+ ]
+ },
+ "Days": {
+ "description": "The number of consecutive days of no access after which an object will be eligible to be transitioned to the corresponding tier. The minimum number of days specified for Archive Access tier must be at least 90 days and Deep Archive Access tier must be at least 180 days. The maximum can be up to 2 years (730 days).",
+ "type": "integer"
+ }
+ },
+ "required": [
+ "AccessTier",
+ "Days"
+ ]
+ },
+ "InventoryConfiguration": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Destination": {
+ "$ref": "#/definitions/Destination"
+ },
+ "Enabled": {
+ "description": "Specifies whether the inventory is enabled or disabled.",
+ "type": "boolean"
+ },
+ "Id": {
+ "description": "The ID used to identify the inventory configuration.",
+ "type": "string"
+ },
+ "IncludedObjectVersions": {
+ "description": "Object versions to include in the inventory list.",
+ "type": "string",
+ "enum": [
+ "All",
+ "Current"
+ ]
+ },
+ "OptionalFields": {
+ "description": "Contains the optional fields that are included in the inventory results.",
+ "type": "array",
+ "uniqueItems": true,
+ "insertionOrder": true,
+ "items": {
+ "type": "string",
+ "enum": [
+ "Size",
+ "LastModifiedDate",
+ "StorageClass",
+ "ETag",
+ "IsMultipartUploaded",
+ "ReplicationStatus",
+ "EncryptionStatus",
+ "ObjectLockRetainUntilDate",
+ "ObjectLockMode",
+ "ObjectLockLegalHoldStatus",
+ "IntelligentTieringAccessTier",
+ "BucketKeyStatus"
+ ]
+ }
+ },
+ "Prefix": {
+ "description": "The prefix that is prepended to all inventory results.",
+ "type": "string"
+ },
+ "ScheduleFrequency": {
+ "description": "Specifies the schedule for generating inventory results.",
+ "type": "string",
+ "enum": [
+ "Daily",
+ "Weekly"
+ ]
+ }
+ },
+ "required": [
+ "Destination",
+ "Enabled",
+ "Id",
+ "IncludedObjectVersions",
+ "ScheduleFrequency"
+ ]
+ },
+ "LifecycleConfiguration": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Rules": {
+ "description": "A lifecycle rule for individual objects in an Amazon S3 bucket.",
+ "type": "array",
+ "uniqueItems": true,
+ "insertionOrder": true,
+ "items": {
+ "$ref": "#/definitions/Rule"
+ }
+ }
+ },
+ "required": [
+ "Rules"
+ ]
+ },
+ "Rule": {
+ "type": "object",
+ "description": "You must specify at least one of the following properties: AbortIncompleteMultipartUpload, ExpirationDate, ExpirationInDays, NoncurrentVersionExpirationInDays, NoncurrentVersionTransition, NoncurrentVersionTransitions, Transition, or Transitions.",
+ "additionalProperties": false,
+ "properties": {
+ "AbortIncompleteMultipartUpload": {
+ "$ref": "#/definitions/AbortIncompleteMultipartUpload"
+ },
+ "ExpirationDate": {
+ "$ref": "#/definitions/iso8601UTC"
+ },
+ "ExpirationInDays": {
+ "type": "integer"
+ },
+ "ExpiredObjectDeleteMarker": {
+ "type": "boolean"
+ },
+ "Id": {
+ "type": "string",
+ "maxLength": 255
+ },
+ "NoncurrentVersionExpirationInDays": {
+ "type": "integer"
+ },
+ "NoncurrentVersionTransition": {
+ "$ref": "#/definitions/NoncurrentVersionTransition"
+ },
+ "NoncurrentVersionTransitions": {
+ "type": "array",
+ "uniqueItems": true,
+ "insertionOrder": true,
+ "items": {
+ "$ref": "#/definitions/NoncurrentVersionTransition"
+ }
+ },
+ "Prefix": {
+ "type": "string"
+ },
+ "Status": {
+ "type": "string",
+ "enum": [
+ "Enabled",
+ "Disabled"
+ ]
+ },
+ "TagFilters": {
+ "type": "array",
+ "uniqueItems": true,
+ "insertionOrder": true,
+ "items": {
+ "$ref": "#/definitions/TagFilter"
+ }
+ },
+ "Transition": {
+ "$ref": "#/definitions/Transition"
+ },
+ "Transitions": {
+ "type": "array",
+ "uniqueItems": true,
+ "insertionOrder": true,
+ "items": {
+ "$ref": "#/definitions/Transition"
+ }
+ }
+ },
+ "required": [
+ "Status"
+ ]
+ },
+ "AbortIncompleteMultipartUpload": {
+ "description": "Specifies the days since the initiation of an incomplete multipart upload that Amazon S3 will wait before permanently removing all parts of the upload.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "DaysAfterInitiation": {
+ "description": "Specifies the number of days after which Amazon S3 aborts an incomplete multipart upload.",
+ "type": "integer",
+ "minimum": 0
+ }
+ },
+ "required": [
+ "DaysAfterInitiation"
+ ]
+ },
+ "iso8601UTC": {
+ "description": "The date value in ISO 8601 format. The timezone is always UTC. (YYYY-MM-DDThh:mm:ssZ)",
+ "type": "string",
+ "pattern": "^([0-2]\\d{3})-(0[0-9]|1[0-2])-([0-2]\\d|3[01])T([01]\\d|2[0-4]):([0-5]\\d):([0-6]\\d)((\\.\\d{3})?)Z$"
+ },
+ "NoncurrentVersionTransition": {
+ "type": "object",
+ "description": "Container for the transition rule that describes when noncurrent objects transition to the STANDARD_IA, ONEZONE_IA, INTELLIGENT_TIERING, GLACIER_IR, GLACIER, or DEEP_ARCHIVE storage class. If your bucket is versioning-enabled (or versioning is suspended), you can set this action to request that Amazon S3 transition noncurrent object versions to the STANDARD_IA, ONEZONE_IA, INTELLIGENT_TIERING, GLACIER_IR, GLACIER, or DEEP_ARCHIVE storage class at a specific period in the object's lifetime.",
+ "additionalProperties": false,
+ "properties": {
+ "StorageClass": {
+ "description": "The class of storage used to store the object.",
+ "type": "string",
+ "enum": [
+ "DEEP_ARCHIVE",
+ "GLACIER",
+ "Glacier",
+ "GLACIER_IR",
+ "INTELLIGENT_TIERING",
+ "ONEZONE_IA",
+ "STANDARD_IA"
+ ]
+ },
+ "TransitionInDays": {
+ "description": "Specifies the number of days an object is noncurrent before Amazon S3 can perform the associated action.",
+ "type": "integer"
+ }
+ },
+ "required": [
+ "StorageClass",
+ "TransitionInDays"
+ ]
+ },
+ "Transition": {
+ "type": "object",
+ "properties": {
+ "StorageClass": {
+ "type": "string",
+ "enum": [
+ "DEEP_ARCHIVE",
+ "GLACIER",
+ "Glacier",
+ "GLACIER_IR",
+ "INTELLIGENT_TIERING",
+ "ONEZONE_IA",
+ "STANDARD_IA"
+ ]
+ },
+ "TransitionDate": {
+ "$ref": "#/definitions/iso8601UTC"
+ },
+ "TransitionInDays": {
+ "type": "integer"
+ }
+ },
+ "additionalProperties": false,
+ "description": "You must specify at least one of \"TransitionDate\" and \"TransitionInDays\"",
+ "required": [
+ "StorageClass"
+ ]
+ },
+ "LoggingConfiguration": {
+ "type": "object",
+ "properties": {
+ "DestinationBucketName": {
+ "type": "string",
+ "description": "The name of an Amazon S3 bucket where Amazon S3 store server access log files. You can store log files in any bucket that you own. By default, logs are stored in the bucket where the LoggingConfiguration property is defined."
+ },
+ "LogFilePrefix": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ },
+ "MetricsConfiguration": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "AccessPointArn": {
+ "type": "string"
+ },
+ "Id": {
+ "type": "string"
+ },
+ "Prefix": {
+ "type": "string"
+ },
+ "TagFilters": {
+ "type": "array",
+ "uniqueItems": true,
+ "insertionOrder": true,
+ "items": {
+ "$ref": "#/definitions/TagFilter"
+ }
+ }
+ },
+ "required": [
+ "Id"
+ ]
+ },
+ "NotificationConfiguration": {
+ "description": "Describes the notification configuration for an Amazon S3 bucket.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "LambdaConfigurations": {
+ "type": "array",
+ "uniqueItems": true,
+ "insertionOrder": true,
+ "items": {
+ "$ref": "#/definitions/LambdaConfiguration"
+ }
+ },
+ "QueueConfigurations": {
+ "type": "array",
+ "uniqueItems": true,
+ "insertionOrder": true,
+ "items": {
+ "$ref": "#/definitions/QueueConfiguration"
+ }
+ },
+ "TopicConfigurations": {
+ "type": "array",
+ "uniqueItems": true,
+ "insertionOrder": true,
+ "items": {
+ "$ref": "#/definitions/TopicConfiguration"
+ }
+ }
+ }
+ },
+ "LambdaConfiguration": {
+ "type": "object",
+ "description": "Describes the AWS Lambda functions to invoke and the events for which to invoke them.",
+ "additionalProperties": false,
+ "properties": {
+ "Event": {
+ "description": "The Amazon S3 bucket event for which to invoke the AWS Lambda function.",
+ "type": "string"
+ },
+ "Filter": {
+ "description": "The filtering rules that determine which objects invoke the AWS Lambda function.",
+ "$ref": "#/definitions/NotificationFilter"
+ },
+ "Function": {
+ "description": "The Amazon Resource Name (ARN) of the AWS Lambda function that Amazon S3 invokes when the specified event type occurs.",
+ "type": "string"
+ }
+ },
+ "required": [
+ "Function",
+ "Event"
+ ]
+ },
+ "QueueConfiguration": {
+ "type": "object",
+ "description": "The Amazon Simple Queue Service queues to publish messages to and the events for which to publish messages.",
+ "additionalProperties": false,
+ "properties": {
+ "Event": {
+ "description": "The Amazon S3 bucket event about which you want to publish messages to Amazon SQS.",
+ "type": "string"
+ },
+ "Filter": {
+ "description": "The filtering rules that determine which objects trigger notifications.",
+ "$ref": "#/definitions/NotificationFilter"
+ },
+ "Queue": {
+ "description": "The Amazon Resource Name (ARN) of the Amazon SQS queue to which Amazon S3 publishes a message when it detects events of the specified type.",
+ "type": "string"
+ }
+ },
+ "required": [
+ "Event",
+ "Queue"
+ ]
+ },
+ "TopicConfiguration": {
+ "type": "object",
+ "description": "The topic to which notifications are sent and the events for which notifications are generated.",
+ "additionalProperties": false,
+ "properties": {
+ "Event": {
+ "description": "The Amazon S3 bucket event about which to send notifications.",
+ "type": "string"
+ },
+ "Filter": {
+ "description": "The filtering rules that determine for which objects to send notifications.",
+ "$ref": "#/definitions/NotificationFilter"
+ },
+ "Topic": {
+ "description": "The Amazon Resource Name (ARN) of the Amazon SNS topic to which Amazon S3 publishes a message when it detects events of the specified type.",
+ "type": "string"
+ }
+ },
+ "required": [
+ "Event",
+ "Topic"
+ ]
+ },
+ "NotificationFilter": {
+ "type": "object",
+ "description": "Specifies object key name filtering rules.",
+ "additionalProperties": false,
+ "properties": {
+ "S3Key": {
+ "$ref": "#/definitions/S3KeyFilter"
+ }
+ },
+ "required": [
+ "S3Key"
+ ]
+ },
+ "S3KeyFilter": {
+ "type": "object",
+ "description": "A container for object key name prefix and suffix filtering rules.",
+ "additionalProperties": false,
+ "properties": {
+ "Rules": {
+ "type": "array",
+ "uniqueItems": true,
+ "insertionOrder": true,
+ "items": {
+ "$ref": "#/definitions/FilterRule"
+ }
+ }
+ },
+ "required": [
+ "Rules"
+ ]
+ },
+ "FilterRule": {
+ "type": "object",
+ "description": "Specifies the Amazon S3 object key name to filter on and whether to filter on the suffix or prefix of the key name.",
+ "additionalProperties": false,
+ "properties": {
+ "Name": {
+ "type": "string",
+ "maxLength": 1024
+ },
+ "Value": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "Value",
+ "Name"
+ ]
+ },
+ "ObjectLockConfiguration": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "ObjectLockEnabled": {
+ "type": "string",
+ "const": "Enabled"
+ },
+ "Rule": {
+ "$ref": "#/definitions/ObjectLockRule"
+ }
+ }
+ },
+ "ObjectLockRule": {
+ "type": "object",
+ "description": "The Object Lock rule in place for the specified object.",
+ "additionalProperties": false,
+ "properties": {
+ "DefaultRetention": {
+ "$ref": "#/definitions/DefaultRetention"
+ }
+ }
+ },
+ "DefaultRetention": {
+ "type": "object",
+ "description": "The default retention period that you want to apply to new objects placed in the specified bucket.",
+ "additionalProperties": false,
+ "properties": {
+ "Years": {
+ "type": "integer"
+ },
+ "Days": {
+ "type": "integer"
+ },
+ "Mode": {
+ "type": "string",
+ "enum": [
+ "COMPLIANCE",
+ "GOVERNANCE"
+ ]
+ }
+ }
+ },
+ "OwnershipControls": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Rules": {
+ "type": "array",
+ "uniqueItems": true,
+ "insertionOrder": true,
+ "items": {
+ "$ref": "#/definitions/OwnershipControlsRule"
+ }
+ }
+ },
+ "required": [
+ "Rules"
+ ]
+ },
+ "OwnershipControlsRule": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "ObjectOwnership": {
+ "description": "Specifies an object ownership rule.",
+ "type": "string",
+ "enum": [
+ "ObjectWriter",
+ "BucketOwnerPreferred"
+ ]
+ }
+ }
+ },
+ "PublicAccessBlockConfiguration": {
+ "description": "Configuration that defines how Amazon S3 handles public access.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "BlockPublicAcls": {
+ "type": "boolean",
+ "description": "Specifies whether Amazon S3 should block public access control lists (ACLs) for this bucket and objects in this bucket. Setting this element to TRUE causes the following behavior:\n- PUT Bucket acl and PUT Object acl calls fail if the specified ACL is public.\n - PUT Object calls fail if the request includes a public ACL.\nEnabling this setting doesn't affect existing policies or ACLs."
+ },
+ "BlockPublicPolicy": {
+ "type": "boolean",
+ "description": "Specifies whether Amazon S3 should block public bucket policies for this bucket. Setting this element to TRUE causes Amazon S3 to reject calls to PUT Bucket policy if the specified bucket policy allows public access.\nEnabling this setting doesn't affect existing bucket policies."
+ },
+ "IgnorePublicAcls": {
+ "type": "boolean",
+ "description": "Specifies whether Amazon S3 should ignore public ACLs for this bucket and objects in this bucket. Setting this element to TRUE causes Amazon S3 to ignore all public ACLs on this bucket and objects in this bucket.\nEnabling this setting doesn't affect the persistence of any existing ACLs and doesn't prevent new public ACLs from being set."
+ },
+ "RestrictPublicBuckets": {
+ "type": "boolean",
+ "description": "Specifies whether Amazon S3 should restrict public bucket policies for this bucket. Setting this element to TRUE restricts access to this bucket to only AWS services and authorized users within this account if the bucket has a public policy.\nEnabling this setting doesn't affect previously stored bucket policies, except that public and cross-account access within any public bucket policy, including non-public delegation to specific accounts, is blocked."
+ }
+ }
+ },
+ "ReplicationConfiguration": {
+ "type": "object",
+ "description": "A container for replication rules. You can add up to 1,000 rules. The maximum size of a replication configuration is 2 MB.",
+ "additionalProperties": false,
+ "properties": {
+ "Role": {
+ "description": "The Amazon Resource Name (ARN) of the AWS Identity and Access Management (IAM) role that Amazon S3 assumes when replicating objects.",
+ "type": "string"
+ },
+ "Rules": {
+ "description": "A container for one or more replication rules.",
+ "type": "array",
+ "uniqueItems": true,
+ "insertionOrder": true,
+ "items": {
+ "$ref": "#/definitions/ReplicationRule",
+ "maxLength": 1000,
+ "minLength": 1
+ }
+ }
+ },
+ "required": [
+ "Role",
+ "Rules"
+ ]
+ },
+ "ReplicationRule": {
+ "type": "object",
+ "description": "Specifies which Amazon S3 objects to replicate and where to store the replicas.",
+ "additionalProperties": false,
+ "properties": {
+ "DeleteMarkerReplication": {
+ "$ref": "#/definitions/DeleteMarkerReplication"
+ },
+ "Destination": {
+ "$ref": "#/definitions/ReplicationDestination"
+ },
+ "Filter": {
+ "$ref": "#/definitions/ReplicationRuleFilter"
+ },
+ "Id": {
+ "description": "A unique identifier for the rule.",
+ "type": "string",
+ "maxLength": 255
+ },
+ "Prefix": {
+ "description": "An object key name prefix that identifies the object or objects to which the rule applies.",
+ "type": "string",
+ "maxLength": 1024
+ },
+ "Priority": {
+ "type": "integer"
+ },
+ "SourceSelectionCriteria": {
+ "$ref": "#/definitions/SourceSelectionCriteria"
+ },
+ "Status": {
+ "description": "Specifies whether the rule is enabled.",
+ "type": "string",
+ "enum": [
+ "Disabled",
+ "Enabled"
+ ]
+ }
+ },
+ "required": [
+ "Destination",
+ "Status"
+ ]
+ },
+ "DeleteMarkerReplication": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Status": {
+ "type": "string",
+ "enum": [
+ "Disabled",
+ "Enabled"
+ ]
+ }
+ }
+ },
+ "ReplicationDestination": {
+ "type": "object",
+ "description": "Specifies which Amazon S3 bucket to store replicated objects in and their storage class.",
+ "additionalProperties": false,
+ "properties": {
+ "AccessControlTranslation": {
+ "$ref": "#/definitions/AccessControlTranslation"
+ },
+ "Account": {
+ "type": "string"
+ },
+ "Bucket": {
+ "type": "string"
+ },
+ "EncryptionConfiguration": {
+ "$ref": "#/definitions/EncryptionConfiguration"
+ },
+ "Metrics": {
+ "$ref": "#/definitions/Metrics"
+ },
+ "ReplicationTime": {
+ "$ref": "#/definitions/ReplicationTime"
+ },
+ "StorageClass": {
+ "description": "The storage class to use when replicating objects, such as S3 Standard or reduced redundancy.",
+ "type": "string",
+ "enum": [
+ "DEEP_ARCHIVE",
+ "GLACIER",
+ "GLACIER_IR",
+ "INTELLIGENT_TIERING",
+ "ONEZONE_IA",
+ "REDUCED_REDUNDANCY",
+ "STANDARD",
+ "STANDARD_IA"
+ ]
+ }
+ },
+ "required": [
+ "Bucket"
+ ]
+ },
+ "AccessControlTranslation": {
+ "type": "object",
+ "description": "Specify this only in a cross-account scenario (where source and destination bucket owners are not the same), and you want to change replica ownership to the AWS account that owns the destination bucket. If this is not specified in the replication configuration, the replicas are owned by same AWS account that owns the source object.",
+ "additionalProperties": false,
+ "properties": {
+ "Owner": {
+ "type": "string",
+ "const": "Destination"
+ }
+ },
+ "required": [
+ "Owner"
+ ]
+ },
+ "EncryptionConfiguration": {
+ "type": "object",
+ "description": "Specifies encryption-related information for an Amazon S3 bucket that is a destination for replicated objects.",
+ "additionalProperties": false,
+ "properties": {
+ "ReplicaKmsKeyID": {
+ "description": "Specifies the ID (Key ARN or Alias ARN) of the customer managed customer master key (CMK) stored in AWS Key Management Service (KMS) for the destination bucket.",
+ "type": "string"
+ }
+ },
+ "required": [
+ "ReplicaKmsKeyID"
+ ]
+ },
+ "Metrics": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "EventThreshold": {
+ "$ref": "#/definitions/ReplicationTimeValue"
+ },
+ "Status": {
+ "type": "string",
+ "enum": [
+ "Disabled",
+ "Enabled"
+ ]
+ }
+ },
+ "required": [
+ "Status"
+ ]
+ },
+ "ReplicationTimeValue": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Minutes": {
+ "type": "integer"
+ }
+ },
+ "required": [
+ "Minutes"
+ ]
+ },
+ "ReplicationTime": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Status": {
+ "type": "string",
+ "enum": [
+ "Disabled",
+ "Enabled"
+ ]
+ },
+ "Time": {
+ "$ref": "#/definitions/ReplicationTimeValue"
+ }
+ },
+ "required": [
+ "Status",
+ "Time"
+ ]
+ },
+ "ReplicationRuleFilter": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "And": {
+ "$ref": "#/definitions/ReplicationRuleAndOperator"
+ },
+ "Prefix": {
+ "type": "string"
+ },
+ "TagFilter": {
+ "$ref": "#/definitions/TagFilter"
+ }
+ }
+ },
+ "ReplicationRuleAndOperator": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Prefix": {
+ "type": "string"
+ },
+ "TagFilters": {
+ "type": "array",
+ "uniqueItems": true,
+ "insertionOrder": true,
+ "items": {
+ "$ref": "#/definitions/TagFilter"
+ }
+ }
+ }
+ },
+ "SourceSelectionCriteria": {
+ "description": "A container that describes additional filters for identifying the source objects that you want to replicate.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "ReplicaModifications": {
+ "description": "A filter that you can specify for selection for modifications on replicas.",
+ "$ref": "#/definitions/ReplicaModifications"
+ },
+ "SseKmsEncryptedObjects": {
+ "description": "A container for filter information for the selection of Amazon S3 objects encrypted with AWS KMS.",
+ "$ref": "#/definitions/SseKmsEncryptedObjects"
+ }
+ }
+ },
+ "ReplicaModifications": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Status": {
+ "description": "Specifies whether Amazon S3 replicates modifications on replicas.",
+ "type": "string",
+ "enum": [
+ "Enabled",
+ "Disabled"
+ ]
+ }
+ },
+ "required": [
+ "Status"
+ ]
+ },
+ "SseKmsEncryptedObjects": {
+ "type": "object",
+ "description": "A container for filter information for the selection of S3 objects encrypted with AWS KMS.",
+ "additionalProperties": false,
+ "properties": {
+ "Status": {
+ "description": "Specifies whether Amazon S3 replicates objects created with server-side encryption using a customer master key (CMK) stored in AWS Key Management Service.",
+ "type": "string",
+ "enum": [
+ "Disabled",
+ "Enabled"
+ ]
+ }
+ },
+ "required": [
+ "Status"
+ ]
+ },
+ "Tag": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Key": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 127,
+ "pattern": "^(?!aws:.*)[a-zA-Z0-9\\s\\_\\.\\/\\=\\+\\-]+$"
+ },
+ "Value": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 255,
+ "pattern": "^(?!aws:.*)[a-zA-Z0-9\\s\\_\\.\\/\\=\\+\\-]+$"
+ }
+ },
+ "required": [
+ "Value",
+ "Key"
+ ]
+ },
+ "VersioningConfiguration": {
+ "description": "Describes the versioning state of an Amazon S3 bucket.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Status": {
+ "description": "The versioning state of the bucket.",
+ "type": "string",
+ "default": "Suspended",
+ "enum": [
+ "Enabled",
+ "Suspended"
+ ]
+ }
+ },
+ "required": [
+ "Status"
+ ]
+ },
+ "WebsiteConfiguration": {
+ "type": "object",
+ "description": "Specifies website configuration parameters for an Amazon S3 bucket.",
+ "additionalProperties": false,
+ "properties": {
+ "ErrorDocument": {
+ "description": "The name of the error document for the website.",
+ "type": "string"
+ },
+ "IndexDocument": {
+ "description": "The name of the index document for the website.",
+ "type": "string"
+ },
+ "RoutingRules": {
+ "type": "array",
+ "insertionOrder": true,
+ "items": {
+ "$ref": "#/definitions/RoutingRule"
+ }
+ },
+ "RedirectAllRequestsTo": {
+ "$ref": "#/definitions/RedirectAllRequestsTo"
+ }
+ }
+ },
+ "RoutingRule": {
+ "description": "Specifies the redirect behavior and when a redirect is applied.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "RedirectRule": {
+ "description": "Container for redirect information. You can redirect requests to another host, to another page, or with another protocol. In the event of an error, you can specify a different error code to return.",
+ "$ref": "#/definitions/RedirectRule"
+ },
+ "RoutingRuleCondition": {
+ "$ref": "#/definitions/RoutingRuleCondition"
+ }
+ },
+ "required": [
+ "RedirectRule"
+ ]
+ },
+ "RedirectRule": {
+ "type": "object",
+ "description": "Specifies how requests are redirected. In the event of an error, you can specify a different error code to return.",
+ "additionalProperties": false,
+ "properties": {
+ "HostName": {
+ "description": "The host name to use in the redirect request.",
+ "type": "string"
+ },
+ "HttpRedirectCode": {
+ "description": "The HTTP redirect code to use on the response. Not required if one of the siblings is present.",
+ "type": "string"
+ },
+ "Protocol": {
+ "description": "Protocol to use when redirecting requests. The default is the protocol that is used in the original request.",
+ "enum": [
+ "http",
+ "https"
+ ],
+ "type": "string"
+ },
+ "ReplaceKeyPrefixWith": {
+ "description": "The object key prefix to use in the redirect request.",
+ "type": "string"
+ },
+ "ReplaceKeyWith": {
+ "description": "The specific object key to use in the redirect request.d",
+ "type": "string"
+ }
+ }
+ },
+ "RoutingRuleCondition": {
+ "description": "A container for describing a condition that must be met for the specified redirect to apply.You must specify at least one of HttpErrorCodeReturnedEquals and KeyPrefixEquals",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "KeyPrefixEquals": {
+ "description": "The object key name prefix when the redirect is applied.",
+ "type": "string"
+ },
+ "HttpErrorCodeReturnedEquals": {
+ "description": "The HTTP error code when the redirect is applied. ",
+ "type": "string"
+ }
+ }
+ },
+ "RedirectAllRequestsTo": {
+ "description": "Specifies the redirect behavior of all requests to a website endpoint of an Amazon S3 bucket.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "HostName": {
+ "description": "Name of the host where requests are redirected.",
+ "type": "string"
+ },
+ "Protocol": {
+ "description": "Protocol to use when redirecting requests. The default is the protocol that is used in the original request.",
+ "type": "string",
+ "enum": [
+ "http",
+ "https"
+ ]
+ }
+ },
+ "required": [
+ "HostName"
+ ]
+ },
+ "Arn": {
+ "description": "the Amazon Resource Name (ARN) of the specified bucket.",
+ "type": "string"
+ }
+ },
+ "createOnlyProperties": [
+ "/properties/BucketName",
+ "/properties/ObjectLockEnabled"
+ ],
+ "primaryIdentifier": [
+ "/properties/BucketName"
+ ],
+ "readOnlyProperties": [
+ "/properties/Arn",
+ "/properties/DomainName",
+ "/properties/DualStackDomainName",
+ "/properties/RegionalDomainName",
+ "/properties/WebsiteURL"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "s3:CreateBucket",
+ "s3:PutBucketTagging",
+ "s3:PutAnalyticsConfiguration",
+ "s3:PutEncryptionConfiguration",
+ "s3:PutBucketCORS",
+ "s3:PutInventoryConfiguration",
+ "s3:PutLifecycleConfiguration",
+ "s3:PutMetricsConfiguration",
+ "s3:PutBucketNotification",
+ "s3:PutBucketReplication",
+ "s3:PutBucketWebsite",
+ "s3:PutAccelerateConfiguration",
+ "s3:PutBucketPublicAccessBlock",
+ "s3:PutReplicationConfiguration",
+ "s3:PutObjectAcl",
+ "s3:PutBucketObjectLockConfiguration",
+ "s3:GetBucketAcl",
+ "s3:ListBucket",
+ "iam:PassRole",
+ "s3:DeleteObject",
+ "s3:PutBucketLogging",
+ "s3:PutBucketVersioning",
+ "s3:PutObjectLockConfiguration",
+ "s3:PutBucketOwnershipControls",
+ "s3:PutBucketIntelligentTieringConfiguration"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "s3:GetAccelerateConfiguration",
+ "s3:GetLifecycleConfiguration",
+ "s3:GetBucketPublicAccessBlock",
+ "s3:GetAnalyticsConfiguration",
+ "s3:GetBucketCORS",
+ "s3:GetEncryptionConfiguration",
+ "s3:GetInventoryConfiguration",
+ "s3:GetBucketLogging",
+ "s3:GetMetricsConfiguration",
+ "s3:GetBucketNotification",
+ "s3:GetBucketVersioning",
+ "s3:GetReplicationConfiguration",
+ "S3:GetBucketWebsite",
+ "s3:GetBucketPublicAccessBlock",
+ "s3:GetBucketObjectLockConfiguration",
+ "s3:GetBucketTagging",
+ "s3:GetBucketOwnershipControls",
+ "s3:GetIntelligentTieringConfiguration",
+ "s3:ListBucket"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "s3:PutBucketAcl",
+ "s3:PutBucketTagging",
+ "s3:PutAnalyticsConfiguration",
+ "s3:PutEncryptionConfiguration",
+ "s3:PutBucketCORS",
+ "s3:PutInventoryConfiguration",
+ "s3:PutLifecycleConfiguration",
+ "s3:PutMetricsConfiguration",
+ "s3:PutBucketNotification",
+ "s3:PutBucketReplication",
+ "s3:PutBucketWebsite",
+ "s3:PutAccelerateConfiguration",
+ "s3:PutBucketPublicAccessBlock",
+ "s3:PutReplicationConfiguration",
+ "s3:PutBucketOwnershipControls",
+ "s3:PutBucketIntelligentTieringConfiguration",
+ "s3:DeleteBucketWebsite",
+ "s3:PutBucketLogging",
+ "s3:PutBucketVersioning",
+ "s3:PutObjectLockConfiguration",
+ "s3:DeleteBucketAnalyticsConfiguration",
+ "s3:DeleteBucketCors",
+ "s3:DeleteBucketMetricsConfiguration",
+ "s3:DeleteBucketEncryption",
+ "s3:DeleteBucketLifecycle",
+ "s3:DeleteBucketReplication",
+ "iam:PassRole"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "s3:DeleteBucket"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "s3:ListBuckets"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_s3_multiregionaccesspoint.json b/tools/c7n_awscc/c7n_awscc/data/aws_s3_multiregionaccesspoint.json
new file mode 100644
index 00000000000..a3a11d5fd4a
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_s3_multiregionaccesspoint.json
@@ -0,0 +1,122 @@
+{
+ "typeName": "AWS::S3::MultiRegionAccessPoint",
+ "description": "AWS::S3::MultiRegionAccessPoint is an Amazon S3 resource type that dynamically routes S3 requests to easily satisfy geographic compliance requirements based on customer-defined routing policies.",
+ "definitions": {
+ "PublicAccessBlockConfiguration": {
+ "type": "object",
+ "properties": {
+ "BlockPublicAcls": {
+ "type": "boolean",
+ "description": "Specifies whether Amazon S3 should block public access control lists (ACLs) for buckets in this account. Setting this element to TRUE causes the following behavior:\n- PUT Bucket acl and PUT Object acl calls fail if the specified ACL is public.\n - PUT Object calls fail if the request includes a public ACL.\n. - PUT Bucket calls fail if the request includes a public ACL.\nEnabling this setting doesn't affect existing policies or ACLs."
+ },
+ "IgnorePublicAcls": {
+ "type": "boolean",
+ "description": "Specifies whether Amazon S3 should ignore public ACLs for buckets in this account. Setting this element to TRUE causes Amazon S3 to ignore all public ACLs on buckets in this account and any objects that they contain. Enabling this setting doesn't affect the persistence of any existing ACLs and doesn't prevent new public ACLs from being set."
+ },
+ "BlockPublicPolicy": {
+ "type": "boolean",
+ "description": "Specifies whether Amazon S3 should block public bucket policies for buckets in this account. Setting this element to TRUE causes Amazon S3 to reject calls to PUT Bucket policy if the specified bucket policy allows public access. Enabling this setting doesn't affect existing bucket policies."
+ },
+ "RestrictPublicBuckets": {
+ "type": "boolean",
+ "description": "Specifies whether Amazon S3 should restrict public bucket policies for this bucket. Setting this element to TRUE restricts access to this bucket to only AWS services and authorized users within this account if the bucket has a public policy.\nEnabling this setting doesn't affect previously stored bucket policies, except that public and cross-account access within any public bucket policy, including non-public delegation to specific accounts, is blocked."
+ }
+ },
+ "additionalProperties": false
+ },
+ "Region": {
+ "type": "object",
+ "properties": {
+ "Bucket": {
+ "type": "string",
+ "minLength": 3,
+ "maxLength": 63,
+ "pattern": "^[a-z0-9][a-z0-9//.//-]*[a-z0-9]$"
+ }
+ },
+ "required": [
+ "Bucket"
+ ],
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "Name": {
+ "description": "The name you want to assign to this Multi Region Access Point.",
+ "type": "string",
+ "pattern": "^[a-z0-9][-a-z0-9]{1,48}[a-z0-9]$",
+ "minLength": 3,
+ "maxLength": 50
+ },
+ "Alias": {
+ "description": "The alias is a unique identifier to, and is part of the public DNS name for this Multi Region Access Point",
+ "type": "string"
+ },
+ "CreatedAt": {
+ "description": "The timestamp of the when the Multi Region Access Point is created",
+ "type": "string"
+ },
+ "PublicAccessBlockConfiguration": {
+ "description": "The PublicAccessBlock configuration that you want to apply to this Multi Region Access Point. You can enable the configuration options in any combination. For more information about when Amazon S3 considers a bucket or object public, see https://docs.aws.amazon.com/AmazonS3/latest/dev/access-control-block-public-access.html#access-control-block-public-access-policy-status 'The Meaning of Public' in the Amazon Simple Storage Service Developer Guide.",
+ "$ref": "#/definitions/PublicAccessBlockConfiguration"
+ },
+ "Regions": {
+ "description": "The list of buckets that you want to associate this Multi Region Access Point with.",
+ "type": "array",
+ "uniqueItems": true,
+ "minItems": 1,
+ "items": {
+ "description": "The name of the bucket that represents of the region belonging to this Multi Region Access Point.",
+ "$ref": "#/definitions/Region"
+ }
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "Regions"
+ ],
+ "readOnlyProperties": [
+ "/properties/Alias",
+ "/properties/CreatedAt"
+ ],
+ "createOnlyProperties": [
+ "/properties/Name",
+ "/properties/PublicAccessBlockConfiguration",
+ "/properties/Regions"
+ ],
+ "primaryIdentifier": [
+ "/properties/Name"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "s3:CreateMultiRegionAccessPoint",
+ "s3:DescribeMultiRegionAccessPointOperation",
+ "s3:GetMultiRegionAccessPoint"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "s3:GetMultiRegionAccessPoint"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "s3:DescribeMultiRegionAccessPointOperation",
+ "s3:GetMultiRegionAccessPoint"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "s3:DeleteMultiRegionAccessPoint",
+ "s3:DescribeMultiRegionAccessPointOperation",
+ "s3:GetMultiRegionAccessPoint"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "s3:ListMultiRegionAccessPoints"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_s3_multiregionaccesspointpolicy.json b/tools/c7n_awscc/c7n_awscc/data/aws_s3_multiregionaccesspointpolicy.json
new file mode 100644
index 00000000000..8d3936549f8
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_s3_multiregionaccesspointpolicy.json
@@ -0,0 +1,79 @@
+{
+ "typeName": "AWS::S3::MultiRegionAccessPointPolicy",
+ "description": "The policy to be attached to a Multi Region Access Point",
+ "properties": {
+ "MrapName": {
+ "description": "The name of the Multi Region Access Point to apply policy",
+ "type": "string",
+ "pattern": "^[a-z0-9][-a-z0-9]{1,48}[a-z0-9]$",
+ "minLength": 3,
+ "maxLength": 50
+ },
+ "Policy": {
+ "description": "Policy document to apply to a Multi Region Access Point",
+ "type": "object"
+ },
+ "PolicyStatus": {
+ "description": "The Policy Status associated with this Multi Region Access Point",
+ "type": "object",
+ "properties": {
+ "IsPublic": {
+ "type": "string",
+ "description": "Specifies whether the policy is public or not.",
+ "enum": [
+ "true",
+ "false"
+ ]
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "IsPublic"
+ ]
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "Policy",
+ "MrapName"
+ ],
+ "createOnlyProperties": [
+ "/properties/MrapName"
+ ],
+ "readOnlyProperties": [
+ "/properties/PolicyStatus",
+ "/properties/PolicyStatus/IsPublic"
+ ],
+ "primaryIdentifier": [
+ "/properties/MrapName"
+ ],
+ "handlers": {
+ "update": {
+ "permissions": [
+ "s3:PutMultiRegionAccessPointPolicy",
+ "s3:DescribeMultiRegionAccessPointOperation"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "s3:GetMultiRegionAccessPointPolicy",
+ "s3:GetMultiRegionAccessPointPolicyStatus"
+ ]
+ },
+ "list": {
+ "permissions": []
+ },
+ "delete": {
+ "permissions": [
+ "s3:GetMultiRegionAccessPointPolicy",
+ "s3:GetMultiRegionAccessPoint"
+ ]
+ },
+ "create": {
+ "permissions": [
+ "s3:PutMultiRegionAccessPointPolicy",
+ "s3:DescribeMultiRegionAccessPointOperation"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_s3_storagelens.json b/tools/c7n_awscc/c7n_awscc/data/aws_s3_storagelens.json
new file mode 100644
index 00000000000..5bb8ae05deb
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_s3_storagelens.json
@@ -0,0 +1,373 @@
+{
+ "typeName": "AWS::S3::StorageLens",
+ "description": "The AWS::S3::StorageLens resource is an Amazon S3 resource type that you can use to create Storage Lens configurations.",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-s3-storagelens",
+ "definitions": {
+ "Id": {
+ "description": "The ID that identifies the Amazon S3 Storage Lens configuration.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 64,
+ "pattern": "^[a-zA-Z0-9\\-_.]+$"
+ },
+ "Arn": {
+ "description": "The Amazon Resource Name (ARN) of the specified resource.",
+ "type": "string"
+ },
+ "BucketsAndRegions": {
+ "description": "S3 buckets and Regions to include/exclude in the Amazon S3 Storage Lens configuration.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Buckets": {
+ "type": "array",
+ "insertionOrder": false,
+ "uniqueItems": true,
+ "items": {
+ "$ref": "#/definitions/Arn"
+ }
+ },
+ "Regions": {
+ "type": "array",
+ "insertionOrder": false,
+ "uniqueItems": true,
+ "items": {
+ "type": "string",
+ "description": "An AWS Region."
+ }
+ }
+ }
+ },
+ "AwsOrg": {
+ "description": "The AWS Organizations ARN to use in the Amazon S3 Storage Lens configuration.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Arn": {
+ "$ref": "#/definitions/Arn"
+ }
+ },
+ "required": [
+ "Arn"
+ ]
+ },
+ "ActivityMetrics": {
+ "description": "Enables activity metrics.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "IsEnabled": {
+ "description": "Specifies whether activity metrics are enabled or disabled.",
+ "type": "boolean"
+ }
+ }
+ },
+ "SelectionCriteria": {
+ "description": "Selection criteria for prefix-level metrics.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "MaxDepth": {
+ "description": "Max depth of prefixes of S3 key that Amazon S3 Storage Lens will analyze.",
+ "type": "integer"
+ },
+ "Delimiter": {
+ "description": "Delimiter to divide S3 key into hierarchy of prefixes.",
+ "type": "string"
+ },
+ "MinStorageBytesPercentage": {
+ "description": "The minimum storage bytes threshold for the prefixes to be included in the analysis.",
+ "type": "number"
+ }
+ }
+ },
+ "PrefixLevelStorageMetrics": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "IsEnabled": {
+ "description": "Specifies whether prefix-level storage metrics are enabled or disabled.",
+ "type": "boolean"
+ },
+ "SelectionCriteria": {
+ "$ref": "#/definitions/SelectionCriteria"
+ }
+ }
+ },
+ "PrefixLevel": {
+ "description": "Prefix-level metrics configurations.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "StorageMetrics": {
+ "$ref": "#/definitions/PrefixLevelStorageMetrics"
+ }
+ },
+ "required": [
+ "StorageMetrics"
+ ]
+ },
+ "BucketLevel": {
+ "description": "Bucket-level metrics configurations.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "ActivityMetrics": {
+ "$ref": "#/definitions/ActivityMetrics"
+ },
+ "PrefixLevel": {
+ "$ref": "#/definitions/PrefixLevel"
+ }
+ }
+ },
+ "AccountLevel": {
+ "description": "Account-level metrics configurations.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "ActivityMetrics": {
+ "$ref": "#/definitions/ActivityMetrics"
+ },
+ "BucketLevel": {
+ "$ref": "#/definitions/BucketLevel"
+ }
+ },
+ "required": [
+ "BucketLevel"
+ ]
+ },
+ "SSEKMS": {
+ "description": "AWS KMS server-side encryption.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "KeyId": {
+ "description": "The ARN of the KMS key to use for encryption.",
+ "type": "string"
+ }
+ },
+ "required": [
+ "KeyId"
+ ]
+ },
+ "Encryption": {
+ "description": "Configures the server-side encryption for Amazon S3 Storage Lens report files with either S3-managed keys (SSE-S3) or KMS-managed keys (SSE-KMS).",
+ "type": "object",
+ "oneOf": [
+ {
+ "additionalProperties": false,
+ "properties": {
+ "SSES3": {
+ "description": "S3 default server-side encryption.",
+ "type": "object",
+ "additionalProperties": false
+ }
+ },
+ "required": [
+ "SSES3"
+ ]
+ },
+ {
+ "additionalProperties": false,
+ "properties": {
+ "SSEKMS": {
+ "$ref": "#/definitions/SSEKMS"
+ }
+ },
+ "required": [
+ "SSEKMS"
+ ]
+ }
+ ]
+ },
+ "S3BucketDestination": {
+ "description": "S3 bucket destination settings for the Amazon S3 Storage Lens metrics export.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "OutputSchemaVersion": {
+ "description": "The version of the output schema to use when exporting Amazon S3 Storage Lens metrics.",
+ "type": "string",
+ "enum": [
+ "V_1"
+ ]
+ },
+ "Format": {
+ "description": "Specifies the file format to use when exporting Amazon S3 Storage Lens metrics export.",
+ "type": "string",
+ "enum": [
+ "CSV",
+ "Parquet"
+ ]
+ },
+ "AccountId": {
+ "description": "The AWS account ID that owns the destination S3 bucket.",
+ "type": "string"
+ },
+ "Arn": {
+ "description": "The ARN of the bucket to which Amazon S3 Storage Lens exports will be placed.",
+ "type": "string"
+ },
+ "Prefix": {
+ "description": "The prefix to use for Amazon S3 Storage Lens export.",
+ "type": "string"
+ },
+ "Encryption": {
+ "$ref": "#/definitions/Encryption"
+ }
+ },
+ "required": [
+ "OutputSchemaVersion",
+ "Format",
+ "AccountId",
+ "Arn"
+ ]
+ },
+ "CloudWatchMetrics": {
+ "description": "CloudWatch metrics settings for the Amazon S3 Storage Lens metrics export.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "IsEnabled": {
+ "description": "Specifies whether CloudWatch metrics are enabled or disabled.",
+ "type": "boolean"
+ }
+ },
+ "required": [
+ "IsEnabled"
+ ]
+ },
+ "DataExport": {
+ "description": "Specifies how Amazon S3 Storage Lens metrics should be exported.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "S3BucketDestination": {
+ "$ref": "#/definitions/S3BucketDestination"
+ },
+ "CloudWatchMetrics": {
+ "$ref": "#/definitions/CloudWatchMetrics"
+ }
+ }
+ },
+ "Tag": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Key": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 127,
+ "pattern": "^(?!aws:.*)[a-zA-Z0-9\\s\\_\\.\\/\\=\\+\\-]+$"
+ },
+ "Value": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 255,
+ "pattern": "^(?!aws:.*)[a-zA-Z0-9\\s\\_\\.\\/\\=\\+\\-]+$"
+ }
+ },
+ "required": [
+ "Key",
+ "Value"
+ ]
+ },
+ "StorageLensConfiguration": {
+ "description": "Specifies the details of Amazon S3 Storage Lens configuration.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Id": {
+ "$ref": "#/definitions/Id"
+ },
+ "Include": {
+ "$ref": "#/definitions/BucketsAndRegions"
+ },
+ "Exclude": {
+ "$ref": "#/definitions/BucketsAndRegions"
+ },
+ "AwsOrg": {
+ "$ref": "#/definitions/AwsOrg"
+ },
+ "AccountLevel": {
+ "$ref": "#/definitions/AccountLevel"
+ },
+ "DataExport": {
+ "$ref": "#/definitions/DataExport"
+ },
+ "IsEnabled": {
+ "description": "Specifies whether the Amazon S3 Storage Lens configuration is enabled or disabled.",
+ "type": "boolean"
+ },
+ "StorageLensArn": {
+ "description": "The ARN for the Amazon S3 Storage Lens configuration.",
+ "type": "string"
+ }
+ },
+ "required": [
+ "Id",
+ "AccountLevel",
+ "IsEnabled"
+ ]
+ }
+ },
+ "properties": {
+ "StorageLensConfiguration": {
+ "$ref": "#/definitions/StorageLensConfiguration"
+ },
+ "Tags": {
+ "description": "A set of tags (key-value pairs) for this Amazon S3 Storage Lens configuration.",
+ "type": "array",
+ "insertionOrder": false,
+ "uniqueItems": true,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ },
+ "maxItems": 50
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "StorageLensConfiguration"
+ ],
+ "readOnlyProperties": [
+ "/properties/StorageLensConfiguration/StorageLensArn"
+ ],
+ "createOnlyProperties": [
+ "/properties/StorageLensConfiguration/Id"
+ ],
+ "primaryIdentifier": [
+ "/properties/StorageLensConfiguration/Id"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "s3:PutStorageLensConfiguration",
+ "s3:PutStorageLensConfigurationTagging"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "s3:GetStorageLensConfiguration",
+ "s3:GetStorageLensConfigurationTagging"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "s3:PutStorageLensConfiguration",
+ "s3:PutStorageLensConfigurationTagging"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "s3:DeleteStorageLensConfiguration",
+ "s3:DeleteStorageLensConfigurationTagging"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "s3:ListStorageLensConfigurations"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_s3objectlambda_accesspoint.json b/tools/c7n_awscc/c7n_awscc/data/aws_s3objectlambda_accesspoint.json
new file mode 100644
index 00000000000..414cecb9904
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_s3objectlambda_accesspoint.json
@@ -0,0 +1,201 @@
+{
+ "typeName": "AWS::S3ObjectLambda::AccessPoint",
+ "description": "The AWS::S3ObjectLambda::AccessPoint resource is an Amazon S3ObjectLambda resource type that you can use to add computation to S3 actions",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git",
+ "definitions": {
+ "PublicAccessBlockConfiguration": {
+ "type": "object",
+ "additionalProperties": false,
+ "description": "The Public Access Block Configuration is used to block policies that would allow public access to this Object lambda Access Point. All public access to Object lambda Access Points are blocked by default, and any policy that would give public access to them will be also blocked. This behavior cannot be changed for Object lambda Access Points.",
+ "properties": {
+ "BlockPublicAcls": {
+ "type": "boolean",
+ "description": "Specifies whether Amazon S3 should block public access control lists (ACLs) to this object lambda access point. Setting this element to TRUE causes the following behavior:\n- PUT Bucket acl and PUT Object acl calls fail if the specified ACL is public.\n - PUT Object calls fail if the request includes a public ACL.\n. - PUT Bucket calls fail if the request includes a public ACL.\nEnabling this setting doesn't affect existing policies or ACLs."
+ },
+ "IgnorePublicAcls": {
+ "type": "boolean",
+ "description": "Specifies whether Amazon S3 should ignore public ACLs for buckets in this account. Setting this element to TRUE causes Amazon S3 to ignore all public ACLs on buckets in this account and any objects that they contain. Enabling this setting doesn't affect the persistence of any existing ACLs and doesn't prevent new public ACLs from being set."
+ },
+ "BlockPublicPolicy": {
+ "type": "boolean",
+ "description": "Specifies whether Amazon S3 should block public bucket policies for buckets in this account. Setting this element to TRUE causes Amazon S3 to reject calls to PUT Bucket policy if the specified bucket policy allows public access. Enabling this setting doesn't affect existing bucket policies."
+ },
+ "RestrictPublicBuckets": {
+ "type": "boolean",
+ "description": "Specifies whether Amazon S3 should restrict public bucket policies for this bucket. Setting this element to TRUE restricts access to this bucket to only AWS services and authorized users within this account if the bucket has a public policy.\nEnabling this setting doesn't affect previously stored bucket policies, except that public and cross-account access within any public bucket policy, including non-public delegation to specific accounts, is blocked."
+ }
+ }
+ },
+ "ObjectLambdaConfiguration": {
+ "type": "object",
+ "additionalProperties": false,
+ "description": "Configuration to be applied to this Object lambda Access Point. It specifies Supporting Access Point, Transformation Configurations. Customers can also set if they like to enable Cloudwatch metrics for accesses to this Object lambda Access Point. Default setting for Cloudwatch metrics is disable.",
+ "properties": {
+ "SupportingAccessPoint": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 2048
+ },
+ "AllowedFeatures": {
+ "type": "array",
+ "insertionOrder": false,
+ "uniqueItems": true,
+ "items": {
+ "type": "string"
+ }
+ },
+ "CloudWatchMetricsEnabled": {
+ "type": "boolean"
+ },
+ "TransformationConfigurations": {
+ "type": "array",
+ "insertionOrder": false,
+ "uniqueItems": true,
+ "items": {
+ "$ref": "#/definitions/TransformationConfiguration"
+ }
+ }
+ },
+ "required": [
+ "SupportingAccessPoint",
+ "TransformationConfigurations"
+ ]
+ },
+ "TransformationConfiguration": {
+ "type": "object",
+ "additionalProperties": false,
+ "description": "Configuration to define what content transformation will be applied on which S3 Action.",
+ "properties": {
+ "Actions": {
+ "type": "array",
+ "insertionOrder": false,
+ "uniqueItems": true,
+ "items": {
+ "$ref": "#/definitions/Action"
+ }
+ },
+ "ContentTransformation": {
+ "type": "object",
+ "oneOf": [
+ {
+ "additionalProperties": false,
+ "properties": {
+ "AwsLambda": {
+ "$ref": "#/definitions/AwsLambda"
+ }
+ },
+ "required": [
+ "AwsLambda"
+ ]
+ }
+ ]
+ }
+ },
+ "required": [
+ "Actions",
+ "ContentTransformation"
+ ]
+ },
+ "AwsLambda": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "FunctionArn": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 2048
+ },
+ "FunctionPayload": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "FunctionArn"
+ ]
+ },
+ "Action": {
+ "type": "string"
+ }
+ },
+ "properties": {
+ "Name": {
+ "description": "The name you want to assign to this Object lambda Access Point.",
+ "type": "string",
+ "pattern": "^[a-z0-9]([a-z0-9\\-]*[a-z0-9])?$",
+ "minLength": 3,
+ "maxLength": 45
+ },
+ "Arn": {
+ "type": "string",
+ "pattern": "arn:[^:]+:s3-object-lambda:[^:]*:\\d{12}:accesspoint/.*"
+ },
+ "CreationDate": {
+ "description": "The date and time when the Object lambda Access Point was created.",
+ "type": "string"
+ },
+ "PublicAccessBlockConfiguration": {
+ "description": "The PublicAccessBlock configuration that you want to apply to this Access Point. You can enable the configuration options in any combination. For more information about when Amazon S3 considers a bucket or object public, see https://docs.aws.amazon.com/AmazonS3/latest/dev/access-control-block-public-access.html#access-control-block-public-access-policy-status 'The Meaning of Public' in the Amazon Simple Storage Service Developer Guide.",
+ "$ref": "#/definitions/PublicAccessBlockConfiguration"
+ },
+ "PolicyStatus": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "IsPublic": {
+ "type": "boolean",
+ "description": "Specifies whether the Object lambda Access Point Policy is Public or not. Object lambda Access Points are private by default."
+ }
+ }
+ },
+ "ObjectLambdaConfiguration": {
+ "description": "The Object lambda Access Point Configuration that configures transformations to be applied on the objects on specified S3 Actions",
+ "$ref": "#/definitions/ObjectLambdaConfiguration"
+ }
+ },
+ "required": [
+ "ObjectLambdaConfiguration"
+ ],
+ "additionalProperties": false,
+ "createOnlyProperties": [
+ "/properties/Name"
+ ],
+ "readOnlyProperties": [
+ "/properties/Arn",
+ "/properties/CreationDate",
+ "/properties/PolicyStatus",
+ "/properties/PublicAccessBlockConfiguration"
+ ],
+ "primaryIdentifier": [
+ "/properties/Name"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "s3:CreateAccessPointForObjectLambda",
+ "s3:PutAccessPointConfigurationForObjectLambda"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "s3:GetAccessPointForObjectLambda",
+ "s3:GetAccessPointPolicyStatusForObjectLambda",
+ "s3:GetAccessPointConfigurationForObjectLambda"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "s3:PutAccessPointConfigurationForObjectLambda"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "s3:DeleteAccessPointForObjectLambda"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "s3:ListAccessPointsForObjectLambda"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_s3objectlambda_accesspointpolicy.json b/tools/c7n_awscc/c7n_awscc/data/aws_s3objectlambda_accesspointpolicy.json
new file mode 100644
index 00000000000..696f63ce46e
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_s3objectlambda_accesspointpolicy.json
@@ -0,0 +1,54 @@
+{
+ "typeName": "AWS::S3ObjectLambda::AccessPointPolicy",
+ "description": "AWS::S3ObjectLambda::AccessPointPolicy resource is an Amazon S3ObjectLambda policy type that you can use to control permissions for your S3ObjectLambda",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git",
+ "additionalProperties": false,
+ "properties": {
+ "ObjectLambdaAccessPoint": {
+ "description": "The name of the Amazon S3 ObjectLambdaAccessPoint to which the policy applies.",
+ "type": "string",
+ "pattern": "^[a-z0-9]([a-z0-9\\-]*[a-z0-9])?$",
+ "minLength": 3,
+ "maxLength": 45
+ },
+ "PolicyDocument": {
+ "description": "A policy document containing permissions to add to the specified ObjectLambdaAccessPoint. For more information, see Access Policy Language Overview (https://docs.aws.amazon.com/AmazonS3/latest/dev/access-policy-language-overview.html) in the Amazon Simple Storage Service Developer Guide. ",
+ "type": "object"
+ }
+ },
+ "required": [
+ "ObjectLambdaAccessPoint",
+ "PolicyDocument"
+ ],
+ "createOnlyProperties": [
+ "/properties/ObjectLambdaAccessPoint"
+ ],
+ "primaryIdentifier": [
+ "/properties/ObjectLambdaAccessPoint"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "s3:PutAccessPointPolicyForObjectLambda",
+ "s3:GetAccessPointPolicyForObjectLambda"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "s3:GetAccessPointPolicyForObjectLambda"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "s3:PutAccessPointPolicyForObjectLambda",
+ "s3:GetAccessPointPolicyForObjectLambda"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "s3:DeleteAccessPointPolicyForObjectLambda",
+ "s3:GetAccessPointPolicyForObjectLambda"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_s3outposts_accesspoint.json b/tools/c7n_awscc/c7n_awscc/data/aws_s3outposts_accesspoint.json
new file mode 100644
index 00000000000..55129eb3124
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_s3outposts_accesspoint.json
@@ -0,0 +1,103 @@
+{
+ "typeName": "AWS::S3Outposts::AccessPoint",
+ "description": "Resource Type Definition for AWS::S3Outposts::AccessPoint",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-s3outposts.git",
+ "definitions": {
+ "VpcConfiguration": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "VpcId": {
+ "description": "Virtual Private Cloud (VPC) Id from which AccessPoint will allow requests.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 1024
+ }
+ }
+ }
+ },
+ "properties": {
+ "Arn": {
+ "description": "The Amazon Resource Name (ARN) of the specified AccessPoint.",
+ "maxLength": 2048,
+ "minLength": 20,
+ "pattern": "^arn:[^:]+:s3-outposts:[a-zA-Z0-9\\-]+:\\d{12}:outpost\\/[^:]+\\/accesspoint\\/[^:]+$",
+ "type": "string"
+ },
+ "Bucket": {
+ "description": "The Amazon Resource Name (ARN) of the bucket you want to associate this AccessPoint with.",
+ "maxLength": 2048,
+ "minLength": 20,
+ "pattern": "^arn:[^:]+:s3-outposts:[a-zA-Z0-9\\-]+:\\d{12}:outpost\\/[^:]+\\/bucket\\/[^:]+$",
+ "type": "string"
+ },
+ "Name": {
+ "description": "A name for the AccessPoint.",
+ "maxLength": 50,
+ "minLength": 3,
+ "pattern": "^[a-z0-9]([a-z0-9\\\\-]*[a-z0-9])?$",
+ "type": "string"
+ },
+ "VpcConfiguration": {
+ "description": "Virtual Private Cloud (VPC) from which requests can be made to the AccessPoint.",
+ "$ref": "#/definitions/VpcConfiguration"
+ },
+ "Policy": {
+ "description": "The access point policy associated with this access point.",
+ "type": "object"
+ }
+ },
+ "taggable": false,
+ "additionalProperties": false,
+ "required": [
+ "Bucket",
+ "Name",
+ "VpcConfiguration"
+ ],
+ "createOnlyProperties": [
+ "/properties/Bucket",
+ "/properties/Name",
+ "/properties/VpcConfiguration"
+ ],
+ "readOnlyProperties": [
+ "/properties/Arn"
+ ],
+ "primaryIdentifier": [
+ "/properties/Arn"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "s3-outposts:CreateAccessPoint",
+ "s3-outposts:GetAccessPoint",
+ "s3-outposts:PutAccessPointPolicy",
+ "s3-outposts:GetAccessPointPolicy"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "s3-outposts:GetAccessPoint",
+ "s3-outposts:GetAccessPointPolicy"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "s3-outposts:GetAccessPoint",
+ "s3-outposts:PutAccessPointPolicy",
+ "s3-outposts:GetAccessPointPolicy",
+ "s3-outposts:DeleteAccessPointPolicy"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "s3-outposts:DeleteAccessPoint",
+ "s3-outposts:DeleteAccessPointPolicy"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "s3-outposts:ListAccessPoints"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_s3outposts_bucket.json b/tools/c7n_awscc/c7n_awscc/data/aws_s3outposts_bucket.json
new file mode 100644
index 00000000000..6991baaaaa3
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_s3outposts_bucket.json
@@ -0,0 +1,293 @@
+{
+ "typeName": "AWS::S3Outposts::Bucket",
+ "description": "Resource Type Definition for AWS::S3Outposts::Bucket",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-s3outposts.git",
+ "definitions": {
+ "Tag": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Key": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 1024,
+ "pattern": "^(?!aws:.*)([\\p{L}\\p{Z}\\p{N}_.:=+\\/\\-@%]*)$"
+ },
+ "Value": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 1024,
+ "pattern": "^([\\p{L}\\p{Z}\\p{N}_.:=+\\/\\-@%]*)$"
+ }
+ },
+ "required": [
+ "Key",
+ "Value"
+ ]
+ },
+ "LifecycleConfiguration": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Rules": {
+ "description": "A list of lifecycle rules for individual objects in an Amazon S3Outposts bucket.",
+ "type": "array",
+ "insertionOrder": false,
+ "uniqueItems": true,
+ "items": {
+ "$ref": "#/definitions/Rule"
+ }
+ }
+ },
+ "required": [
+ "Rules"
+ ]
+ },
+ "Rule": {
+ "description": "Specifies lifecycle rules for an Amazon S3Outposts bucket. You must specify at least one of the following: AbortIncompleteMultipartUpload, ExpirationDate, ExpirationInDays.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Status": {
+ "type": "string",
+ "enum": [
+ "Enabled",
+ "Disabled"
+ ]
+ },
+ "Id": {
+ "type": "string",
+ "maxLength": 255,
+ "description": "Unique identifier for the lifecycle rule. The value can't be longer than 255 characters."
+ },
+ "AbortIncompleteMultipartUpload": {
+ "description": "Specifies a lifecycle rule that stops incomplete multipart uploads to an Amazon S3Outposts bucket.",
+ "$ref": "#/definitions/AbortIncompleteMultipartUpload"
+ },
+ "ExpirationDate": {
+ "description": "Indicates when objects are deleted from Amazon S3Outposts. The date value must be in ISO 8601 format. The time is always midnight UTC.",
+ "$ref": "#/definitions/iso8601UTC"
+ },
+ "ExpirationInDays": {
+ "description": "Indicates the number of days after creation when objects are deleted from Amazon S3Outposts.",
+ "type": "integer",
+ "minimum": 1
+ },
+ "Filter": {
+ "description": "The container for the filter of the lifecycle rule.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Prefix": {
+ "description": "Object key prefix that identifies one or more objects to which this rule applies.",
+ "$ref": "#/definitions/FilterPrefix"
+ },
+ "Tag": {
+ "description": "Specifies a tag used to identify a subset of objects for an Amazon S3Outposts bucket.",
+ "$ref": "#/definitions/FilterTag"
+ },
+ "AndOperator": {
+ "description": "The container for the AND condition for the lifecycle rule. A combination of Prefix and 1 or more Tags OR a minimum of 2 or more tags.",
+ "$ref": "#/definitions/FilterAndOperator"
+ }
+ },
+ "oneOf": [
+ {
+ "required": [
+ "Prefix"
+ ]
+ },
+ {
+ "required": [
+ "Tag"
+ ]
+ },
+ {
+ "required": [
+ "AndOperator"
+ ]
+ }
+ ]
+ }
+ },
+ "anyOf": [
+ {
+ "required": [
+ "Status",
+ "AbortIncompleteMultipartUpload"
+ ]
+ },
+ {
+ "required": [
+ "Status",
+ "ExpirationDate"
+ ]
+ },
+ {
+ "required": [
+ "Status",
+ "ExpirationInDays"
+ ]
+ }
+ ]
+ },
+ "iso8601UTC": {
+ "description": "The date value in ISO 8601 format. The timezone is always UTC. (YYYY-MM-DDThh:mm:ssZ)",
+ "type": "string",
+ "pattern": "^([0-2]\\d{3})-(0[0-9]|1[0-2])-([0-2]\\d|3[01])T([01]\\d|2[0-4]):([0-5]\\d):([0-6]\\d)((\\.\\d{3})?)Z$"
+ },
+ "AbortIncompleteMultipartUpload": {
+ "description": "Specifies the days since the initiation of an incomplete multipart upload that Amazon S3Outposts will wait before permanently removing all parts of the upload.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "DaysAfterInitiation": {
+ "description": "Specifies the number of days after which Amazon S3Outposts aborts an incomplete multipart upload.",
+ "type": "integer",
+ "minimum": 0
+ }
+ },
+ "required": [
+ "DaysAfterInitiation"
+ ]
+ },
+ "FilterPrefix": {
+ "description": "Prefix identifies one or more objects to which the rule applies.",
+ "type": "string"
+ },
+ "FilterTag": {
+ "description": "Tag used to identify a subset of objects for an Amazon S3Outposts bucket.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Key": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 1024,
+ "pattern": "^([\\p{L}\\p{Z}\\p{N}_.:=+\\/\\-@%]*)$"
+ },
+ "Value": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 1024,
+ "pattern": "^([\\p{L}\\p{Z}\\p{N}_.:=+\\/\\-@%]*)$"
+ }
+ },
+ "required": [
+ "Key",
+ "Value"
+ ]
+ },
+ "FilterAndOperator": {
+ "oneOf": [
+ {
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "Tags"
+ ],
+ "properties": {
+ "Prefix": {
+ "description": "Prefix identifies one or more objects to which the rule applies.",
+ "$ref": "#/definitions/FilterPrefix"
+ },
+ "Tags": {
+ "description": "All of these tags must exist in the object's tag set in order for the rule to apply.",
+ "type": "array",
+ "insertionOrder": false,
+ "uniqueItems": true,
+ "minItems": 1,
+ "items": {
+ "$ref": "#/definitions/FilterTag"
+ }
+ }
+ }
+ }
+ ]
+ }
+ },
+ "properties": {
+ "Arn": {
+ "description": "The Amazon Resource Name (ARN) of the specified bucket.",
+ "maxLength": 2048,
+ "minLength": 20,
+ "pattern": "^arn:[^:]+:s3-outposts:[a-zA-Z0-9\\-]+:\\d{12}:outpost\\/[^:]+\\/bucket\\/[^:]+$",
+ "type": "string"
+ },
+ "BucketName": {
+ "description": "A name for the bucket.",
+ "maxLength": 63,
+ "minLength": 3,
+ "pattern": "(?=^.{3,63}$)(?!^(\\d+\\.)+\\d+$)(^(([a-z0-9]|[a-z0-9][a-z0-9\\-]*[a-z0-9])\\.)*([a-z0-9]|[a-z0-9][a-z0-9\\-]*[a-z0-9])$)",
+ "type": "string"
+ },
+ "OutpostId": {
+ "description": "The id of the customer outpost on which the bucket resides.",
+ "pattern": "^(op-[a-f0-9]{17}|\\d{12}|ec2)$",
+ "type": "string"
+ },
+ "Tags": {
+ "description": "An arbitrary set of tags (key-value pairs) for this S3Outposts bucket.",
+ "items": {
+ "$ref": "#/definitions/Tag"
+ },
+ "type": "array",
+ "insertionOrder": false,
+ "uniqueItems": true
+ },
+ "LifecycleConfiguration": {
+ "description": "Rules that define how Amazon S3Outposts manages objects during their lifetime.",
+ "$ref": "#/definitions/LifecycleConfiguration"
+ }
+ },
+ "taggable": true,
+ "additionalProperties": false,
+ "createOnlyProperties": [
+ "/properties/BucketName",
+ "/properties/OutpostId"
+ ],
+ "readOnlyProperties": [
+ "/properties/Arn"
+ ],
+ "primaryIdentifier": [
+ "/properties/Arn"
+ ],
+ "required": [
+ "BucketName",
+ "OutpostId"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "s3-outposts:CreateBucket",
+ "s3-outposts:PutBucketTagging",
+ "s3-outposts:PutBucketLifecycleConfiguration"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "s3-outposts:GetBucket",
+ "s3-outposts:GetBucketTagging",
+ "s3-outposts:GetBucketLifecycleConfiguration"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "s3-outposts:PutBucketTagging",
+ "s3-outposts:DeleteBucketTagging",
+ "s3-outposts:PutBucketLifecycleConfiguration",
+ "s3-outposts:DeleteBucketLifecycleConfiguration"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "s3-outposts:DeleteBucket"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "s3-outposts:ListRegionalBuckets"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_s3outposts_bucketpolicy.json b/tools/c7n_awscc/c7n_awscc/data/aws_s3outposts_bucketpolicy.json
new file mode 100644
index 00000000000..75d8f7731ee
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_s3outposts_bucketpolicy.json
@@ -0,0 +1,56 @@
+{
+ "typeName": "AWS::S3Outposts::BucketPolicy",
+ "description": "Resource Type Definition for AWS::S3Outposts::BucketPolicy",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-s3outposts.git",
+ "definitions": {},
+ "properties": {
+ "Bucket": {
+ "description": "The Amazon Resource Name (ARN) of the specified bucket.",
+ "maxLength": 2048,
+ "minLength": 20,
+ "pattern": "^arn:[^:]+:s3-outposts:[a-zA-Z0-9\\-]+:\\d{12}:outpost\\/[^:]+\\/bucket\\/[^:]+$",
+ "type": "string"
+ },
+ "PolicyDocument": {
+ "description": "A policy document containing permissions to add to the specified bucket.",
+ "type": "object"
+ }
+ },
+ "taggable": false,
+ "additionalProperties": false,
+ "createOnlyProperties": [
+ "/properties/Bucket"
+ ],
+ "required": [
+ "Bucket",
+ "PolicyDocument"
+ ],
+ "primaryIdentifier": [
+ "/properties/Bucket"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "s3-outposts:PutBucketPolicy",
+ "s3-outposts:GetBucketPolicy"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "s3-outposts:GetBucketPolicy"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "s3-outposts:PutBucketPolicy",
+ "s3-outposts:GetBucketPolicy"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "s3-outposts:DeleteBucketPolicy",
+ "s3-outposts:GetBucketPolicy"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_sagemaker_appimageconfig.json b/tools/c7n_awscc/c7n_awscc/data/aws_sagemaker_appimageconfig.json
new file mode 100644
index 00000000000..47c20e5a4e3
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_sagemaker_appimageconfig.json
@@ -0,0 +1,172 @@
+{
+ "typeName": "AWS::SageMaker::AppImageConfig",
+ "description": "Resource Type definition for AWS::SageMaker::AppImageConfig",
+ "additionalProperties": false,
+ "properties": {
+ "AppImageConfigArn": {
+ "type": "string",
+ "description": "The Amazon Resource Name (ARN) of the AppImageConfig.",
+ "minLength": 1,
+ "maxLength": 256,
+ "pattern": "arn:aws[a-z\\-]*:sagemaker:[a-z0-9\\-]*:[0-9]{12}:app-image-config/.*"
+ },
+ "AppImageConfigName": {
+ "type": "string",
+ "description": "The Name of the AppImageConfig.",
+ "minLength": 1,
+ "maxLength": 63,
+ "pattern": "^[a-zA-Z0-9](-*[a-zA-Z0-9]){0,62}"
+ },
+ "KernelGatewayImageConfig": {
+ "$ref": "#/definitions/KernelGatewayImageConfig",
+ "description": "The KernelGatewayImageConfig."
+ },
+ "Tags": {
+ "type": "array",
+ "description": "A list of tags to apply to the AppImageConfig.",
+ "uniqueItems": false,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ },
+ "minItems": 0,
+ "maxItems": 50
+ }
+ },
+ "definitions": {
+ "KernelGatewayImageConfig": {
+ "type": "object",
+ "description": "The configuration for the file system and kernels in a SageMaker image running as a KernelGateway app.",
+ "additionalProperties": false,
+ "properties": {
+ "FileSystemConfig": {
+ "$ref": "#/definitions/FileSystemConfig",
+ "description": "The Amazon Elastic File System (EFS) storage configuration for a SageMaker image."
+ },
+ "KernelSpecs": {
+ "type": "array",
+ "description": "The specification of the Jupyter kernels in the image.",
+ "minItems": 1,
+ "maxItems": 1,
+ "items": {
+ "$ref": "#/definitions/KernelSpec"
+ }
+ }
+ },
+ "required": [
+ "KernelSpecs"
+ ]
+ },
+ "FileSystemConfig": {
+ "type": "object",
+ "description": "The Amazon Elastic File System (EFS) storage configuration for a SageMaker image.",
+ "additionalProperties": false,
+ "properties": {
+ "DefaultGid": {
+ "type": "integer",
+ "description": "The default POSIX group ID (GID). If not specified, defaults to 100.",
+ "minimum": 0,
+ "maximum": 65535
+ },
+ "DefaultUid": {
+ "type": "integer",
+ "description": "The default POSIX user ID (UID). If not specified, defaults to 1000.",
+ "minimum": 0,
+ "maximum": 65535
+ },
+ "MountPath": {
+ "type": "string",
+ "description": "The path within the image to mount the user's EFS home directory. The directory should be empty. If not specified, defaults to /home/sagemaker-user.",
+ "minLength": 1,
+ "maxLength": 1024,
+ "pattern": "^/.*"
+ }
+ }
+ },
+ "KernelSpec": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "DisplayName": {
+ "type": "string",
+ "description": "The display name of the kernel.",
+ "minLength": 1,
+ "maxLength": 1024
+ },
+ "Name": {
+ "type": "string",
+ "description": "The name of the kernel.",
+ "minLength": 1,
+ "maxLength": 1024
+ }
+ },
+ "required": [
+ "Name"
+ ]
+ },
+ "Tag": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Value": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Key": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 128
+ }
+ },
+ "required": [
+ "Key",
+ "Value"
+ ]
+ }
+ },
+ "required": [
+ "AppImageConfigName"
+ ],
+ "createOnlyProperties": [
+ "/properties/AppImageConfigName",
+ "/properties/Tags"
+ ],
+ "writeOnlyProperties": [
+ "/properties/Tags"
+ ],
+ "readOnlyProperties": [
+ "/properties/AppImageConfigArn"
+ ],
+ "primaryIdentifier": [
+ "/properties/AppImageConfigName"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "sagemaker:CreateAppImageConfig",
+ "sagemaker:DescribeAppImageConfig"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "sagemaker:DescribeAppImageConfig"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "sagemaker:UpdateAppImageConfig",
+ "sagemaker:DescribeAppImageConfig"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "sagemaker:DeleteAppImageConfig"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "sagemaker:ListAppImageConfigs"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_sagemaker_device.json b/tools/c7n_awscc/c7n_awscc/data/aws_sagemaker_device.json
new file mode 100644
index 00000000000..34a9414a89a
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_sagemaker_device.json
@@ -0,0 +1,114 @@
+{
+ "typeName": "AWS::SageMaker::Device",
+ "description": "Resource schema for AWS::SageMaker::Device",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sagemaker-edge.git",
+ "definitions": {
+ "Device": {
+ "description": "Edge device you want to create",
+ "type": "object",
+ "properties": {
+ "Description": {
+ "description": "Description of the device",
+ "type": "string",
+ "pattern": "[\\S\\s]+",
+ "minLength": 1,
+ "maxLength": 40
+ },
+ "DeviceName": {
+ "description": "The name of the device",
+ "type": "string",
+ "pattern": "^[a-zA-Z0-9](-*[a-zA-Z0-9])*$",
+ "minLength": 1,
+ "maxLength": 63
+ },
+ "IotThingName": {
+ "description": "AWS Internet of Things (IoT) object name.",
+ "type": "string",
+ "pattern": "[a-zA-Z0-9:_-]+",
+ "maxLength": 128
+ }
+ },
+ "required": [
+ "DeviceName"
+ ],
+ "additionalProperties": false
+ },
+ "Tag": {
+ "type": "object",
+ "properties": {
+ "Key": {
+ "description": "The key name of the tag. You can specify a value that is 1 to 127 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. ",
+ "type": "string",
+ "pattern": "^((?!aws:)[\\p{L}\\p{Z}\\p{N}_.:/=+\\-@]*)$",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Value": {
+ "description": "The key value of the tag. You can specify a value that is 1 to 127 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. ",
+ "type": "string",
+ "pattern": "^([\\p{L}\\p{Z}\\p{N}_.:/=+\\-@]*)$",
+ "minLength": 0,
+ "maxLength": 256
+ }
+ },
+ "required": [
+ "Key",
+ "Value"
+ ],
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "DeviceFleetName": {
+ "description": "The name of the edge device fleet",
+ "type": "string",
+ "pattern": "^[a-zA-Z0-9](-*_*[a-zA-Z0-9])*$",
+ "minLength": 1,
+ "maxLength": 63
+ },
+ "Device": {
+ "description": "The Edge Device you want to register against a device fleet",
+ "type": "object",
+ "$ref": "#/definitions/Device"
+ },
+ "Tags": {
+ "description": "Associate tags with the resource",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ }
+ },
+ "required": [
+ "DeviceFleetName"
+ ],
+ "additionalProperties": false,
+ "primaryIdentifier": [
+ "/properties/DeviceFleetName"
+ ],
+ "createOnlyProperties": [
+ "/properties/DeviceFleetName"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "sagemaker:RegisterDevices"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "sagemaker:DescribeDevice"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "sagemaker:UpdateDevices"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "sagemaker:DeregisterDevices"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_sagemaker_devicefleet.json b/tools/c7n_awscc/c7n_awscc/data/aws_sagemaker_devicefleet.json
new file mode 100644
index 00000000000..fcbc13f5cdc
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_sagemaker_devicefleet.json
@@ -0,0 +1,124 @@
+{
+ "typeName": "AWS::SageMaker::DeviceFleet",
+ "description": "Resource schema for AWS::SageMaker::DeviceFleet",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sagemaker-edge.git",
+ "definitions": {
+ "EdgeOutputConfig": {
+ "type": "object",
+ "properties": {
+ "S3OutputLocation": {
+ "description": "The Amazon Simple Storage (S3) bucket URI",
+ "type": "string",
+ "pattern": "^s3://([^/]+)/?(.*)$",
+ "maxLength": 1024
+ },
+ "KmsKeyId": {
+ "description": "The KMS key id used for encryption on the S3 bucket",
+ "type": "string",
+ "pattern": "[a-zA-Z0-9:_-]+",
+ "minLength": 1,
+ "maxLength": 2048
+ }
+ },
+ "required": [
+ "S3OutputLocation"
+ ],
+ "additionalProperties": false
+ },
+ "Tag": {
+ "description": "Key-value pair to associate as a tag for the resource",
+ "type": "object",
+ "properties": {
+ "Key": {
+ "description": "The key name of the tag. You can specify a value that is 1 to 127 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. ",
+ "type": "string",
+ "pattern": "^((?!aws:)[\\p{L}\\p{Z}\\p{N}_.:/=+\\-@]*)$",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Value": {
+ "description": "The key value of the tag. You can specify a value that is 1 to 127 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. ",
+ "type": "string",
+ "pattern": "^([\\p{L}\\p{Z}\\p{N}_.:/=+\\-@]*)$",
+ "minLength": 0,
+ "maxLength": 256
+ }
+ },
+ "required": [
+ "Key",
+ "Value"
+ ],
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "Description": {
+ "description": "Description for the edge device fleet",
+ "type": "string",
+ "pattern": "[\\S\\s]+",
+ "minLength": 0,
+ "maxLength": 800
+ },
+ "DeviceFleetName": {
+ "description": "The name of the edge device fleet",
+ "type": "string",
+ "pattern": "^[a-zA-Z0-9](-*_*[a-zA-Z0-9])*$",
+ "minLength": 1,
+ "maxLength": 63
+ },
+ "OutputConfig": {
+ "description": "S3 bucket and an ecryption key id (if available) to store outputs for the fleet",
+ "$ref": "#/definitions/EdgeOutputConfig"
+ },
+ "RoleArn": {
+ "description": "Role associated with the device fleet",
+ "type": "string",
+ "pattern": "^arn:aws[a-z\\-]*:iam::\\d{12}:role/?[a-zA-Z_0-9+=,.@\\-_/]+$",
+ "minLength": 20,
+ "maxLength": 2048
+ },
+ "Tags": {
+ "description": "Associate tags with the resource",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ }
+ },
+ "required": [
+ "DeviceFleetName",
+ "OutputConfig",
+ "RoleArn"
+ ],
+ "additionalProperties": false,
+ "primaryIdentifier": [
+ "/properties/DeviceFleetName"
+ ],
+ "createOnlyProperties": [
+ "/properties/DeviceFleetName"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "sagemaker:CreateDeviceFleet",
+ "iam:PassRole"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "sagemaker:DescribeDeviceFleet"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "sagemaker:UpdateDeviceFleet",
+ "iam:PassRole"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "sagemaker:DeleteDeviceFleet"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_sagemaker_domain.json b/tools/c7n_awscc/c7n_awscc/data/aws_sagemaker_domain.json
new file mode 100644
index 00000000000..27b1aa22b83
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_sagemaker_domain.json
@@ -0,0 +1,367 @@
+{
+ "typeName": "AWS::SageMaker::Domain",
+ "description": "Resource Type definition for AWS::SageMaker::Domain",
+ "additionalProperties": false,
+ "properties": {
+ "DomainArn": {
+ "type": "string",
+ "description": "The Amazon Resource Name (ARN) of the created domain.",
+ "maxLength": 256,
+ "pattern": "arn:aws[a-z\\-]*:sagemaker:[a-z0-9\\-]*:[0-9]{12}:domain/.*"
+ },
+ "Url": {
+ "type": "string",
+ "description": "The URL to the created domain.",
+ "maxLength": 1024
+ },
+ "AppNetworkAccessType": {
+ "type": "string",
+ "description": "Specifies the VPC used for non-EFS traffic. The default value is PublicInternetOnly.",
+ "enum": [
+ "PublicInternetOnly",
+ "VpcOnly"
+ ]
+ },
+ "AuthMode": {
+ "type": "string",
+ "description": "The mode of authentication that members use to access the domain.",
+ "enum": [
+ "SSO",
+ "IAM"
+ ]
+ },
+ "DefaultUserSettings": {
+ "$ref": "#/definitions/UserSettings",
+ "description": "The default user settings."
+ },
+ "DomainName": {
+ "type": "string",
+ "description": "A name for the domain.",
+ "maxLength": 63,
+ "pattern": "^[a-zA-Z0-9](-*[a-zA-Z0-9]){0,62}"
+ },
+ "KmsKeyId": {
+ "type": "string",
+ "description": "SageMaker uses AWS KMS to encrypt the EFS volume attached to the domain with an AWS managed customer master key (CMK) by default.",
+ "maxLength": 2048,
+ "pattern": ".*"
+ },
+ "SubnetIds": {
+ "type": "array",
+ "description": "The VPC subnets that Studio uses for communication.",
+ "uniqueItems": false,
+ "minItems": 1,
+ "maxItems": 16,
+ "items": {
+ "type": "string",
+ "maxLength": 32,
+ "pattern": "[-0-9a-zA-Z]+"
+ }
+ },
+ "Tags": {
+ "type": "array",
+ "description": "A list of tags to apply to the user profile.",
+ "uniqueItems": false,
+ "minItems": 0,
+ "maxItems": 50,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ },
+ "VpcId": {
+ "type": "string",
+ "description": "The ID of the Amazon Virtual Private Cloud (VPC) that Studio uses for communication.",
+ "maxLength": 32,
+ "pattern": "[-0-9a-zA-Z]+"
+ },
+ "DomainId": {
+ "type": "string",
+ "description": "The domain name.",
+ "maxLength": 63,
+ "pattern": "^d-(-*[a-z0-9])+"
+ },
+ "HomeEfsFileSystemId": {
+ "type": "string",
+ "description": "The ID of the Amazon Elastic File System (EFS) managed by this Domain.",
+ "maxLength": 32
+ },
+ "SingleSignOnManagedApplicationInstanceId": {
+ "type": "string",
+ "description": "The SSO managed application instance ID.",
+ "maxLength": 256
+ }
+ },
+ "definitions": {
+ "UserSettings": {
+ "type": "object",
+ "description": "A collection of settings that apply to users of Amazon SageMaker Studio. These settings are specified when the CreateUserProfile API is called, and as DefaultUserSettings when the CreateDomain API is called.",
+ "additionalProperties": false,
+ "properties": {
+ "ExecutionRole": {
+ "type": "string",
+ "description": "The user profile Amazon Resource Name (ARN).",
+ "minLength": 20,
+ "maxLength": 2048,
+ "pattern": "^arn:aws[a-z\\-]*:iam::\\d{12}:role/?[a-zA-Z_0-9+=,.@\\-_/]+$"
+ },
+ "JupyterServerAppSettings": {
+ "$ref": "#/definitions/JupyterServerAppSettings",
+ "description": "The Jupyter server's app settings."
+ },
+ "KernelGatewayAppSettings": {
+ "$ref": "#/definitions/KernelGatewayAppSettings",
+ "description": "The kernel gateway app settings."
+ },
+ "SecurityGroups": {
+ "type": "array",
+ "description": "The security groups for the Amazon Virtual Private Cloud (VPC) that Studio uses for communication.",
+ "uniqueItems": false,
+ "minItems": 0,
+ "maxItems": 5,
+ "items": {
+ "type": "string",
+ "maxLength": 32,
+ "pattern": "[-0-9a-zA-Z]+"
+ }
+ },
+ "SharingSettings": {
+ "$ref": "#/definitions/SharingSettings",
+ "description": "The sharing settings."
+ }
+ }
+ },
+ "JupyterServerAppSettings": {
+ "type": "object",
+ "description": "The JupyterServer app settings.",
+ "additionalProperties": false,
+ "properties": {
+ "DefaultResourceSpec": {
+ "$ref": "#/definitions/ResourceSpec"
+ }
+ }
+ },
+ "ResourceSpec": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "InstanceType": {
+ "type": "string",
+ "description": "The instance type that the image version runs on.",
+ "enum": [
+ "system",
+ "ml.t3.micro",
+ "ml.t3.small",
+ "ml.t3.medium",
+ "ml.t3.large",
+ "ml.t3.xlarge",
+ "ml.t3.2xlarge",
+ "ml.m5.large",
+ "ml.m5.xlarge",
+ "ml.m5.2xlarge",
+ "ml.m5.4xlarge",
+ "ml.m5.8xlarge",
+ "ml.m5.12xlarge",
+ "ml.m5.16xlarge",
+ "ml.m5.24xlarge",
+ "ml.c5.large",
+ "ml.c5.xlarge",
+ "ml.c5.2xlarge",
+ "ml.c5.4xlarge",
+ "ml.c5.9xlarge",
+ "ml.c5.12xlarge",
+ "ml.c5.18xlarge",
+ "ml.c5.24xlarge",
+ "ml.p3.2xlarge",
+ "ml.p3.8xlarge",
+ "ml.p3.16xlarge",
+ "ml.g4dn.xlarge",
+ "ml.g4dn.2xlarge",
+ "ml.g4dn.4xlarge",
+ "ml.g4dn.8xlarge",
+ "ml.g4dn.12xlarge",
+ "ml.g4dn.16xlarge"
+ ]
+ },
+ "SageMakerImageArn": {
+ "type": "string",
+ "description": "The ARN of the SageMaker image that the image version belongs to.",
+ "maxLength": 256,
+ "pattern": "^arn:aws(-[\\w]+)*:sagemaker:.+:[0-9]{12}:image/[a-z0-9]([-.]?[a-z0-9])*$"
+ },
+ "SageMakerImageVersionArn": {
+ "type": "string",
+ "description": "The ARN of the image version created on the instance.",
+ "maxLength": 256,
+ "pattern": "^arn:aws(-[\\w]+)*:sagemaker:.+:[0-9]{12}:image-version/[a-z0-9]([-.]?[a-z0-9])*/[0-9]+$"
+ }
+ }
+ },
+ "KernelGatewayAppSettings": {
+ "type": "object",
+ "description": "The kernel gateway app settings.",
+ "additionalProperties": false,
+ "properties": {
+ "CustomImages": {
+ "type": "array",
+ "description": "A list of custom SageMaker images that are configured to run as a KernelGateway app.",
+ "uniqueItems": false,
+ "minItems": 0,
+ "maxItems": 30,
+ "items": {
+ "$ref": "#/definitions/CustomImage"
+ }
+ },
+ "DefaultResourceSpec": {
+ "$ref": "#/definitions/ResourceSpec",
+ "description": "The default instance type and the Amazon Resource Name (ARN) of the default SageMaker image used by the KernelGateway app."
+ }
+ }
+ },
+ "CustomImage": {
+ "type": "object",
+ "description": "A custom SageMaker image.",
+ "additionalProperties": false,
+ "properties": {
+ "AppImageConfigName": {
+ "type": "string",
+ "description": "The Name of the AppImageConfig.",
+ "maxLength": 63,
+ "pattern": "^[a-zA-Z0-9](-*[a-zA-Z0-9]){0,62}"
+ },
+ "ImageName": {
+ "type": "string",
+ "description": "The name of the CustomImage. Must be unique to your account.",
+ "maxLength": 63,
+ "pattern": "^[a-zA-Z0-9]([-.]?[a-zA-Z0-9]){0,62}$"
+ },
+ "ImageVersionNumber": {
+ "type": "integer",
+ "description": "The version number of the CustomImage.",
+ "minimum": 0
+ }
+ },
+ "required": [
+ "AppImageConfigName",
+ "ImageName"
+ ]
+ },
+ "SharingSettings": {
+ "type": "object",
+ "description": "Specifies options when sharing an Amazon SageMaker Studio notebook. These settings are specified as part of DefaultUserSettings when the CreateDomain API is called, and as part of UserSettings when the CreateUserProfile API is called.",
+ "additionalProperties": false,
+ "properties": {
+ "NotebookOutputOption": {
+ "type": "string",
+ "description": "Whether to include the notebook cell output when sharing the notebook. The default is Disabled.",
+ "enum": [
+ "Allowed",
+ "Disabled"
+ ]
+ },
+ "S3KmsKeyId": {
+ "type": "string",
+ "description": "When NotebookOutputOption is Allowed, the AWS Key Management Service (KMS) encryption key ID used to encrypt the notebook cell output in the Amazon S3 bucket.",
+ "maxLength": 2048,
+ "pattern": ".*"
+ },
+ "S3OutputPath": {
+ "type": "string",
+ "description": "When NotebookOutputOption is Allowed, the Amazon S3 bucket used to store the shared notebook snapshots.",
+ "maxLength": 1024,
+ "pattern": "^(https|s3)://([^/]+)/?(.*)$"
+ }
+ }
+ },
+ "Tag": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Value": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Key": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 128
+ }
+ },
+ "required": [
+ "Key",
+ "Value"
+ ]
+ }
+ },
+ "required": [
+ "AuthMode",
+ "DefaultUserSettings",
+ "DomainName",
+ "SubnetIds",
+ "VpcId"
+ ],
+ "createOnlyProperties": [
+ "/properties/AppNetworkAccessType",
+ "/properties/AuthMode",
+ "/properties/DomainName",
+ "/properties/KmsKeyId",
+ "/properties/SubnetIds",
+ "/properties/VpcId",
+ "/properties/Tags"
+ ],
+ "writeOnlyProperties": [
+ "/properties/Tags"
+ ],
+ "primaryIdentifier": [
+ "/properties/DomainId"
+ ],
+ "readOnlyProperties": [
+ "/properties/DomainArn",
+ "/properties/Url",
+ "/properties/DomainId",
+ "/properties/HomeEfsFileSystemId",
+ "/properties/SingleSignOnManagedApplicationInstanceId"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "sagemaker:CreateDomain",
+ "sagemaker:DescribeDomain",
+ "sagemaker:DescribeImage",
+ "sagemaker:DescribeImageVersion",
+ "iam:CreateServiceLinkedRole",
+ "iam:PassRole",
+ "efs:CreateFileSystem",
+ "kms:CreateGrant",
+ "kms:Decrypt",
+ "kms:DescribeKey",
+ "kms:GenerateDataKeyWithoutPlainText"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "sagemaker:DescribeDomain"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "sagemaker:UpdateDomain",
+ "sagemaker:DescribeDomain",
+ "sagemaker:DescribeImage",
+ "sagemaker:DescribeImageVersion",
+ "iam:PassRole"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "sagemaker:DeleteDomain",
+ "sagemaker:DescribeDomain"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "sagemaker:ListDomains"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_sagemaker_image.json b/tools/c7n_awscc/c7n_awscc/data/aws_sagemaker_image.json
new file mode 100644
index 00000000000..98c09be1e98
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_sagemaker_image.json
@@ -0,0 +1,143 @@
+{
+ "typeName": "AWS::SageMaker::Image",
+ "description": "Resource Type definition for AWS::SageMaker::Image",
+ "additionalProperties": false,
+ "properties": {
+ "ImageName": {
+ "$ref": "#/definitions/ImageName"
+ },
+ "ImageArn": {
+ "$ref": "#/definitions/ImageArn"
+ },
+ "ImageRoleArn": {
+ "$ref": "#/definitions/ImageRoleArn"
+ },
+ "ImageDisplayName": {
+ "$ref": "#/definitions/ImageDisplayName"
+ },
+ "ImageDescription": {
+ "$ref": "#/definitions/ImageDescription"
+ },
+ "Tags": {
+ "type": "array",
+ "minItems": 1,
+ "maxItems": 50,
+ "description": "An array of key-value pairs to apply to this resource.",
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ }
+ },
+ "definitions": {
+ "ImageName": {
+ "type": "string",
+ "description": "The name of the image.",
+ "pattern": "^[a-zA-Z0-9]([-.]?[a-zA-Z0-9])*$",
+ "minLength": 1,
+ "maxLength": 63
+ },
+ "ImageArn": {
+ "description": "The Amazon Resource Name (ARN) of the image.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 256,
+ "pattern": "^arn:aws(-[\\w]+)*:sagemaker:[a-z0-9\\-]*:[0-9]{12}:image\\/[a-z0-9]([-.]?[a-z0-9])*$"
+ },
+ "ImageRoleArn": {
+ "description": "The Amazon Resource Name (ARN) of an IAM role that enables Amazon SageMaker to perform tasks on behalf of the customer.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 256,
+ "pattern": "^arn:aws(-[\\w]+)*:iam::[0-9]{12}:role/.*$"
+ },
+ "ImageDisplayName": {
+ "type": "string",
+ "description": "The display name of the image.",
+ "pattern": "^[A-Za-z0-9 -_]+$",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "ImageDescription": {
+ "type": "string",
+ "description": "A description of the image.",
+ "pattern": ".+",
+ "minLength": 1,
+ "maxLength": 512
+ },
+ "Tag": {
+ "description": "A key-value pair to associate with a resource.",
+ "type": "object",
+ "properties": {
+ "Key": {
+ "type": "string",
+ "description": "The key name of the tag. You can specify a value that is 1 to 127 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. ",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Value": {
+ "type": "string",
+ "description": "The value for the tag. You can specify a value that is 1 to 255 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. ",
+ "maxLength": 256
+ }
+ },
+ "required": [
+ "Key",
+ "Value"
+ ],
+ "additionalProperties": false
+ }
+ },
+ "required": [
+ "ImageName",
+ "ImageRoleArn"
+ ],
+ "primaryIdentifier": [
+ "/properties/ImageArn"
+ ],
+ "additionalIdentifiers": [
+ [
+ "/properties/ImageName"
+ ]
+ ],
+ "readOnlyProperties": [
+ "/properties/ImageArn"
+ ],
+ "createOnlyProperties": [
+ "/properties/ImageName"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "sagemaker:CreateImage",
+ "iam:PassRole"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "sagemaker:DescribeImage",
+ "sagemaker:ListTags"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "sagemaker:UpdateImage",
+ "sagemaker:DescribeImage",
+ "sagemaker:ListTags",
+ "sagemaker:AddTags",
+ "sagemaker:DeleteTags",
+ "iam:PassRole"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "sagemaker:DeleteImage",
+ "sagemaker:DescribeImage"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "sagemaker:ListImages"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_sagemaker_modelpackagegroup.json b/tools/c7n_awscc/c7n_awscc/data/aws_sagemaker_modelpackagegroup.json
new file mode 100644
index 00000000000..2428a9487ae
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_sagemaker_modelpackagegroup.json
@@ -0,0 +1,148 @@
+{
+ "typeName": "AWS::SageMaker::ModelPackageGroup",
+ "description": "Resource Type definition for AWS::SageMaker::ModelPackageGroup",
+ "additionalProperties": false,
+ "properties": {
+ "Tags": {
+ "type": "array",
+ "maxItems": 50,
+ "description": "An array of key-value pairs to apply to this resource.",
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ },
+ "ModelPackageGroupArn": {
+ "$ref": "#/definitions/ModelPackageGroupArn"
+ },
+ "ModelPackageGroupName": {
+ "$ref": "#/definitions/ModelPackageGroupName"
+ },
+ "ModelPackageGroupDescription": {
+ "$ref": "#/definitions/ModelPackageGroupDescription"
+ },
+ "ModelPackageGroupPolicy": {
+ "type": [
+ "object",
+ "string"
+ ]
+ },
+ "CreationTime": {
+ "description": "The time at which the model package group was created.",
+ "type": "string"
+ },
+ "ModelPackageGroupStatus": {
+ "description": "The status of a modelpackage group job.",
+ "type": "string",
+ "enum": [
+ "Pending",
+ "InProgress",
+ "Completed",
+ "Failed",
+ "Deleting",
+ "DeleteFailed"
+ ]
+ }
+ },
+ "definitions": {
+ "Tag": {
+ "description": "A key-value pair to associate with a resource.",
+ "type": "object",
+ "properties": {
+ "Key": {
+ "type": "string",
+ "description": "The key name of the tag. You can specify a value that is 1 to 127 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. ",
+ "minLength": 1,
+ "maxLength": 128,
+ "pattern": "^([\\p{L}\\p{Z}\\p{N}_.:/=+\\-@]*)$"
+ },
+ "Value": {
+ "type": "string",
+ "description": "The value for the tag. You can specify a value that is 1 to 255 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. ",
+ "maxLength": 256,
+ "pattern": "^([\\p{L}\\p{Z}\\p{N}_.:/=+\\-@]*)$"
+ }
+ },
+ "required": [
+ "Key",
+ "Value"
+ ],
+ "additionalProperties": false
+ },
+ "ModelPackageGroupDescription": {
+ "type": "string",
+ "description": "The description of the model package group.",
+ "pattern": "[\\p{L}\\p{M}\\p{Z}\\p{S}\\p{N}\\p{P}]*",
+ "maxLength": 1024
+ },
+ "ModelPackageGroupName": {
+ "type": "string",
+ "description": "The name of the model package group.",
+ "pattern": "^[a-zA-Z0-9](-*[a-zA-Z0-9])*$",
+ "maxLength": 63
+ },
+ "ModelPackageGroupArn": {
+ "description": "The Amazon Resource Name (ARN) of the model package group.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 256,
+ "pattern": "arn:.*"
+ }
+ },
+ "required": [
+ "ModelPackageGroupName"
+ ],
+ "primaryIdentifier": [
+ "/properties/ModelPackageGroupArn"
+ ],
+ "readOnlyProperties": [
+ "/properties/ModelPackageGroupArn",
+ "/properties/CreationTime",
+ "/properties/ModelPackageGroupStatus"
+ ],
+ "createOnlyProperties": [
+ "/properties/ModelPackageGroupName",
+ "/properties/ModelPackageGroupDescription"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "sagemaker:CreateModelPackageGroup",
+ "sagemaker:DescribeModelPackageGroup",
+ "sagemaker:GetModelPackageGroupPolicy",
+ "sagemaker:PutModelPackageGroupPolicy"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "sagemaker:DeleteModelPackageGroup",
+ "sagemaker:DescribeModelPackageGroup",
+ "sagemaker:GetModelPackageGroupPolicy",
+ "sagemaker:DeleteModelPackageGroupPolicy"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "sagemaker:ListModelPackageGroups"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "sagemaker:DescribeModelPackageGroup",
+ "sagemaker:GetModelPackageGroupPolicy",
+ "sagemaker:PutModelPackageGroupPolicy",
+ "sagemaker:ListTags"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "sagemaker:DescribeModelPackageGroup",
+ "sagemaker:GetModelPackageGroupPolicy",
+ "sagemaker:DeleteModelPackageGroupPolicy",
+ "sagemaker:PutModelPackageGroupPolicy",
+ "sagemaker:ListTags",
+ "sagemaker:AddTags",
+ "sagemaker:DeleteTags"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_sagemaker_monitoringschedule.json b/tools/c7n_awscc/c7n_awscc/data/aws_sagemaker_monitoringschedule.json
new file mode 100644
index 00000000000..40520da4790
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_sagemaker_monitoringschedule.json
@@ -0,0 +1,634 @@
+{
+ "typeName": "AWS::SageMaker::MonitoringSchedule",
+ "description": "Resource Type definition for AWS::SageMaker::MonitoringSchedule",
+ "additionalProperties": false,
+ "properties": {
+ "MonitoringScheduleArn": {
+ "description": "The Amazon Resource Name (ARN) of the monitoring schedule.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 256
+ },
+ "MonitoringScheduleName": {
+ "$ref": "#/definitions/MonitoringScheduleName"
+ },
+ "MonitoringScheduleConfig": {
+ "$ref": "#/definitions/MonitoringScheduleConfig"
+ },
+ "Tags": {
+ "type": "array",
+ "maxItems": 50,
+ "description": "An array of key-value pairs to apply to this resource.",
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ },
+ "CreationTime": {
+ "description": "The time at which the schedule was created.",
+ "type": "string"
+ },
+ "EndpointName": {
+ "$ref": "#/definitions/EndpointName"
+ },
+ "FailureReason": {
+ "type": "string",
+ "description": "Contains the reason a monitoring job failed, if it failed.",
+ "minLength": 1,
+ "maxLength": 1024
+ },
+ "LastModifiedTime": {
+ "description": "A timestamp that indicates the last time the monitoring job was modified.",
+ "type": "string"
+ },
+ "LastMonitoringExecutionSummary": {
+ "description": "Describes metadata on the last execution to run, if there was one.",
+ "$ref": "#/definitions/MonitoringExecutionSummary"
+ },
+ "MonitoringScheduleStatus": {
+ "description": "The status of a schedule job.",
+ "type": "string",
+ "enum": [
+ "Pending",
+ "Failed",
+ "Scheduled",
+ "Stopped"
+ ]
+ }
+ },
+ "definitions": {
+ "MonitoringScheduleConfig": {
+ "type": "object",
+ "additionalProperties": false,
+ "description": "The configuration object that specifies the monitoring schedule and defines the monitoring job.",
+ "properties": {
+ "MonitoringJobDefinition": {
+ "$ref": "#/definitions/MonitoringJobDefinition"
+ },
+ "MonitoringJobDefinitionName": {
+ "description": "Name of the job definition",
+ "type": "string",
+ "pattern": "^[a-zA-Z0-9](-*[a-zA-Z0-9])*$",
+ "minLength": 1,
+ "maxLength": 63
+ },
+ "MonitoringType": {
+ "$ref": "#/definitions/MonitoringType"
+ },
+ "ScheduleConfig": {
+ "$ref": "#/definitions/ScheduleConfig"
+ }
+ }
+ },
+ "MonitoringType": {
+ "description": "The type of monitoring job.",
+ "type": "string",
+ "enum": [
+ "DataQuality",
+ "ModelQuality",
+ "ModelBias",
+ "ModelExplainability"
+ ]
+ },
+ "MonitoringJobDefinition": {
+ "type": "object",
+ "additionalProperties": false,
+ "description": "Defines the monitoring job.",
+ "properties": {
+ "BaselineConfig": {
+ "$ref": "#/definitions/BaselineConfig"
+ },
+ "Environment": {
+ "type": "object",
+ "description": "Sets the environment variables in the Docker container",
+ "patternProperties": {
+ "[a-zA-Z_][a-zA-Z0-9_]*": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 256
+ },
+ "[\\S\\s]*": {
+ "type": "string",
+ "maxLength": 256
+ }
+ }
+ },
+ "MonitoringAppSpecification": {
+ "$ref": "#/definitions/MonitoringAppSpecification"
+ },
+ "MonitoringInputs": {
+ "$ref": "#/definitions/MonitoringInputs"
+ },
+ "MonitoringOutputConfig": {
+ "$ref": "#/definitions/MonitoringOutputConfig"
+ },
+ "MonitoringResources": {
+ "$ref": "#/definitions/MonitoringResources"
+ },
+ "NetworkConfig": {
+ "$ref": "#/definitions/NetworkConfig"
+ },
+ "RoleArn": {
+ "description": "The Amazon Resource Name (ARN) of an IAM role that Amazon SageMaker can assume to perform tasks on your behalf.",
+ "type": "string",
+ "pattern": "^arn:aws[a-z\\-]*:iam::\\d{12}:role/?[a-zA-Z_0-9+=,.@\\-_/]+$",
+ "minLength": 20,
+ "maxLength": 2048
+ },
+ "StoppingCondition": {
+ "$ref": "#/definitions/StoppingCondition"
+ }
+ },
+ "required": [
+ "MonitoringAppSpecification",
+ "MonitoringInputs",
+ "MonitoringOutputConfig",
+ "MonitoringResources",
+ "RoleArn"
+ ]
+ },
+ "BaselineConfig": {
+ "type": "object",
+ "additionalProperties": false,
+ "description": "Baseline configuration used to validate that the data conforms to the specified constraints and statistics.",
+ "properties": {
+ "ConstraintsResource": {
+ "$ref": "#/definitions/ConstraintsResource"
+ },
+ "StatisticsResource": {
+ "$ref": "#/definitions/StatisticsResource"
+ }
+ }
+ },
+ "ConstraintsResource": {
+ "type": "object",
+ "additionalProperties": false,
+ "description": "The baseline constraints resource for a monitoring job.",
+ "properties": {
+ "S3Uri": {
+ "description": "The Amazon S3 URI for baseline constraint file in Amazon S3 that the current monitoring job should validated against.",
+ "$ref": "#/definitions/S3Uri"
+ }
+ }
+ },
+ "StatisticsResource": {
+ "type": "object",
+ "additionalProperties": false,
+ "description": "The baseline statistics resource for a monitoring job.",
+ "properties": {
+ "S3Uri": {
+ "description": "The Amazon S3 URI for the baseline statistics file in Amazon S3 that the current monitoring job should be validated against.",
+ "$ref": "#/definitions/S3Uri"
+ }
+ }
+ },
+ "S3Uri": {
+ "type": "string",
+ "description": "The Amazon S3 URI.",
+ "pattern": "^(https|s3)://([^/]+)/?(.*)$",
+ "maxLength": 1024
+ },
+ "MonitoringAppSpecification": {
+ "type": "object",
+ "additionalProperties": false,
+ "description": "Container image configuration object for the monitoring job.",
+ "properties": {
+ "ContainerArguments": {
+ "type": "array",
+ "description": "An array of arguments for the container used to run the monitoring job.",
+ "maxItems": 50,
+ "items": {
+ "$ref": "#/definitions/ContainerArgument"
+ }
+ },
+ "ContainerEntrypoint": {
+ "type": "array",
+ "description": "Specifies the entrypoint for a container used to run the monitoring job.",
+ "maxItems": 100,
+ "items": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 256
+ }
+ },
+ "ImageUri": {
+ "type": "string",
+ "description": "The container image to be run by the monitoring job.",
+ "pattern": ".*",
+ "maxLength": 255
+ },
+ "PostAnalyticsProcessorSourceUri": {
+ "description": "An Amazon S3 URI to a script that is called after analysis has been performed. Applicable only for the built-in (first party) containers.",
+ "$ref": "#/definitions/S3Uri"
+ },
+ "RecordPreprocessorSourceUri": {
+ "description": "An Amazon S3 URI to a script that is called per row prior to running analysis. It can base64 decode the payload and convert it into a flatted json so that the built-in container can use the converted data. Applicable only for the built-in (first party) containers",
+ "$ref": "#/definitions/S3Uri"
+ }
+ },
+ "required": [
+ "ImageUri"
+ ]
+ },
+ "ContainerArgument": {
+ "type": "string",
+ "additionalProperties": false,
+ "description": "Arguments for the container used to run the monitoring job.",
+ "minLength": 1,
+ "maxLength": 256
+ },
+ "MonitoringInputs": {
+ "type": "array",
+ "additionalProperties": false,
+ "description": "The array of inputs for the monitoring job.",
+ "minItems": 1,
+ "maxItems": 1,
+ "items": {
+ "$ref": "#/definitions/MonitoringInput"
+ }
+ },
+ "MonitoringInput": {
+ "type": "object",
+ "additionalProperties": false,
+ "description": "The inputs for a monitoring job.",
+ "properties": {
+ "EndpointInput": {
+ "$ref": "#/definitions/EndpointInput"
+ }
+ },
+ "required": [
+ "EndpointInput"
+ ]
+ },
+ "EndpointInput": {
+ "type": "object",
+ "additionalProperties": false,
+ "description": "The endpoint for a monitoring job.",
+ "properties": {
+ "EndpointName": {
+ "$ref": "#/definitions/EndpointName"
+ },
+ "LocalPath": {
+ "type": "string",
+ "description": "Path to the filesystem where the endpoint data is available to the container.",
+ "pattern": ".*",
+ "maxLength": 256
+ },
+ "S3DataDistributionType": {
+ "type": "string",
+ "description": "Whether input data distributed in Amazon S3 is fully replicated or sharded by an S3 key. Defauts to FullyReplicated",
+ "enum": [
+ "FullyReplicated",
+ "ShardedByS3Key"
+ ]
+ },
+ "S3InputMode": {
+ "type": "string",
+ "description": "Whether the Pipe or File is used as the input mode for transfering data for the monitoring job. Pipe mode is recommended for large datasets. File mode is useful for small files that fit in memory. Defaults to File.",
+ "enum": [
+ "Pipe",
+ "File"
+ ]
+ }
+ },
+ "required": [
+ "EndpointName",
+ "LocalPath"
+ ]
+ },
+ "MonitoringOutputConfig": {
+ "type": "object",
+ "additionalProperties": false,
+ "description": "The output configuration for monitoring jobs.",
+ "properties": {
+ "KmsKeyId": {
+ "type": "string",
+ "description": "The AWS Key Management Service (AWS KMS) key that Amazon SageMaker uses to encrypt the model artifacts at rest using Amazon S3 server-side encryption.",
+ "pattern": ".*",
+ "maxLength": 2048
+ },
+ "MonitoringOutputs": {
+ "type": "array",
+ "description": "Monitoring outputs for monitoring jobs. This is where the output of the periodic monitoring jobs is uploaded.",
+ "minLength": 1,
+ "maxLength": 1,
+ "items": {
+ "$ref": "#/definitions/MonitoringOutput"
+ }
+ }
+ },
+ "required": [
+ "MonitoringOutputs"
+ ]
+ },
+ "MonitoringOutput": {
+ "type": "object",
+ "additionalProperties": false,
+ "description": "The output object for a monitoring job.",
+ "properties": {
+ "S3Output": {
+ "$ref": "#/definitions/S3Output"
+ }
+ },
+ "required": [
+ "S3Output"
+ ]
+ },
+ "S3Output": {
+ "type": "object",
+ "additionalProperties": false,
+ "description": "Information about where and how to store the results of a monitoring job.",
+ "properties": {
+ "LocalPath": {
+ "type": "string",
+ "description": "The local path to the Amazon S3 storage location where Amazon SageMaker saves the results of a monitoring job. LocalPath is an absolute path for the output data.",
+ "pattern": ".*",
+ "maxLength": 256
+ },
+ "S3UploadMode": {
+ "type": "string",
+ "description": "Whether to upload the results of the monitoring job continuously or after the job completes.",
+ "enum": [
+ "Continuous",
+ "EndOfJob"
+ ]
+ },
+ "S3Uri": {
+ "type": "string",
+ "description": "A URI that identifies the Amazon S3 storage location where Amazon SageMaker saves the results of a monitoring job.",
+ "pattern": "^(https|s3)://([^/]+)/?(.*)$",
+ "maxLength": 512
+ }
+ },
+ "required": [
+ "LocalPath",
+ "S3Uri"
+ ]
+ },
+ "MonitoringResources": {
+ "type": "object",
+ "additionalProperties": false,
+ "description": "Identifies the resources to deploy for a monitoring job.",
+ "properties": {
+ "ClusterConfig": {
+ "$ref": "#/definitions/ClusterConfig"
+ }
+ },
+ "required": [
+ "ClusterConfig"
+ ]
+ },
+ "ClusterConfig": {
+ "type": "object",
+ "additionalProperties": false,
+ "description": "Configuration for the cluster used to run model monitoring jobs.",
+ "properties": {
+ "InstanceCount": {
+ "description": "The number of ML compute instances to use in the model monitoring job. For distributed processing jobs, specify a value greater than 1. The default value is 1.",
+ "type": "integer",
+ "minimum": 1,
+ "maximum": 100
+ },
+ "InstanceType": {
+ "description": "The ML compute instance type for the processing job.",
+ "type": "string"
+ },
+ "VolumeKmsKeyId": {
+ "description": "The AWS Key Management Service (AWS KMS) key that Amazon SageMaker uses to encrypt data on the storage volume attached to the ML compute instance(s) that run the model monitoring job.",
+ "type": "string",
+ "minimum": 1,
+ "maximum": 2048
+ },
+ "VolumeSizeInGB": {
+ "description": "The size of the ML storage volume, in gigabytes, that you want to provision. You must specify sufficient ML storage for your scenario.",
+ "type": "integer",
+ "minimum": 1,
+ "maximum": 16384
+ }
+ },
+ "required": [
+ "InstanceCount",
+ "InstanceType",
+ "VolumeSizeInGB"
+ ]
+ },
+ "NetworkConfig": {
+ "type": "object",
+ "additionalProperties": false,
+ "description": "Networking options for a job, such as network traffic encryption between containers, whether to allow inbound and outbound network calls to and from containers, and the VPC subnets and security groups to use for VPC-enabled jobs.",
+ "properties": {
+ "EnableInterContainerTrafficEncryption": {
+ "description": "Whether to encrypt all communications between distributed processing jobs. Choose True to encrypt communications. Encryption provides greater security for distributed processing jobs, but the processing might take longer.",
+ "type": "boolean"
+ },
+ "EnableNetworkIsolation": {
+ "description": "Whether to allow inbound and outbound network calls to and from the containers used for the processing job.",
+ "type": "boolean"
+ },
+ "VpcConfig": {
+ "$ref": "#/definitions/VpcConfig"
+ }
+ }
+ },
+ "VpcConfig": {
+ "type": "object",
+ "additionalProperties": false,
+ "description": "Specifies a VPC that your training jobs and hosted models have access to. Control access to and from your training and model containers by configuring the VPC.",
+ "properties": {
+ "SecurityGroupIds": {
+ "description": "The VPC security group IDs, in the form sg-xxxxxxxx. Specify the security groups for the VPC that is specified in the Subnets field.",
+ "type": "array",
+ "minItems": 1,
+ "maxItems": 5,
+ "items": {
+ "type": "string",
+ "maxLength": 32,
+ "pattern": "[-0-9a-zA-Z]+"
+ }
+ },
+ "Subnets": {
+ "description": "The ID of the subnets in the VPC to which you want to connect to your monitoring jobs.",
+ "type": "array",
+ "minItems": 1,
+ "maxItems": 16,
+ "items": {
+ "type": "string",
+ "maxLength": 32,
+ "pattern": "[-0-9a-zA-Z]+"
+ }
+ }
+ },
+ "required": [
+ "SecurityGroupIds",
+ "Subnets"
+ ]
+ },
+ "StoppingCondition": {
+ "type": "object",
+ "additionalProperties": false,
+ "description": "Specifies a time limit for how long the monitoring job is allowed to run.",
+ "properties": {
+ "MaxRuntimeInSeconds": {
+ "description": "The maximum runtime allowed in seconds.",
+ "type": "integer",
+ "minimum": 1,
+ "maximum": 86400
+ }
+ },
+ "required": [
+ "MaxRuntimeInSeconds"
+ ]
+ },
+ "ScheduleConfig": {
+ "type": "object",
+ "additionalProperties": false,
+ "description": "Configuration details about the monitoring schedule.",
+ "properties": {
+ "ScheduleExpression": {
+ "description": "A cron expression that describes details about the monitoring schedule.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 256
+ }
+ },
+ "required": [
+ "ScheduleExpression"
+ ]
+ },
+ "Tag": {
+ "description": "A key-value pair to associate with a resource.",
+ "type": "object",
+ "properties": {
+ "Key": {
+ "type": "string",
+ "description": "The key name of the tag. You can specify a value that is 1 to 127 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. ",
+ "minLength": 1,
+ "maxLength": 128,
+ "pattern": "^([\\p{L}\\p{Z}\\p{N}_.:/=+\\-@]*)$"
+ },
+ "Value": {
+ "type": "string",
+ "description": "The value for the tag. You can specify a value that is 1 to 255 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. ",
+ "maxLength": 256,
+ "pattern": "^([\\p{L}\\p{Z}\\p{N}_.:/=+\\-@]*)$"
+ }
+ },
+ "required": [
+ "Key",
+ "Value"
+ ]
+ },
+ "MonitoringExecutionSummary": {
+ "description": "Summary of information about monitoring job",
+ "type": "object",
+ "properties": {
+ "CreationTime": {
+ "description": "The time at which the monitoring job was created.",
+ "type": "string"
+ },
+ "EndpointName": {
+ "$ref": "#/definitions/EndpointName"
+ },
+ "FailureReason": {
+ "type": "string",
+ "description": "Contains the reason a monitoring job failed, if it failed.",
+ "maxLength": 1024
+ },
+ "LastModifiedTime": {
+ "description": "A timestamp that indicates the last time the monitoring job was modified.",
+ "type": "string"
+ },
+ "MonitoringExecutionStatus": {
+ "description": "The status of the monitoring job.",
+ "type": "string",
+ "enum": [
+ "Pending",
+ "Completed",
+ "CompletedWithViolations",
+ "InProgress",
+ "Failed",
+ "Stopping",
+ "Stopped"
+ ]
+ },
+ "MonitoringScheduleName": {
+ "$ref": "#/definitions/MonitoringScheduleName"
+ },
+ "ProcessingJobArn": {
+ "description": "The Amazon Resource Name (ARN) of the monitoring job.",
+ "type": "string",
+ "pattern": "aws[a-z\\-]*:sagemaker:[a-z0-9\\-]*:[0-9]{12}:processing-job/.*",
+ "maxLength": 256
+ },
+ "ScheduledTime": {
+ "description": "The time the monitoring job was scheduled.",
+ "type": "string"
+ }
+ },
+ "required": [
+ "CreationTime",
+ "LastModifiedTime",
+ "MonitoringExecutionStatus",
+ "MonitoringScheduleName",
+ "ScheduledTime"
+ ]
+ },
+ "EndpointName": {
+ "type": "string",
+ "description": "The name of the endpoint used to run the monitoring job.",
+ "pattern": "^[a-zA-Z0-9](-*[a-zA-Z0-9])*",
+ "maxLength": 63
+ },
+ "MonitoringScheduleName": {
+ "type": "string",
+ "description": "The name of the monitoring schedule.",
+ "pattern": "^[a-zA-Z0-9](-*[a-zA-Z0-9])*$",
+ "maxLength": 63
+ }
+ },
+ "required": [
+ "MonitoringScheduleConfig",
+ "MonitoringScheduleName"
+ ],
+ "primaryIdentifier": [
+ "/properties/MonitoringScheduleArn"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "sagemaker:CreateMonitoringSchedule",
+ "sagemaker:DescribeMonitoringSchedule",
+ "iam:PassRole"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "sagemaker:DeleteMonitoringSchedule",
+ "sagemaker:DescribeMonitoringSchedule"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "sagemaker:ListMonitoringSchedule"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "sagemaker:DescribeMonitoringSchedule"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "sagemaker:UpdateMonitoringSchedule",
+ "sagemaker:DescribeMonitoringSchedule"
+ ]
+ }
+ },
+ "readOnlyProperties": [
+ "/properties/MonitoringScheduleArn",
+ "/properties/CreationTime",
+ "/properties/LastModifiedTime"
+ ],
+ "createOnlyProperties": [
+ "/properties/MonitoringScheduleName"
+ ]
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_sagemaker_pipeline.json b/tools/c7n_awscc/c7n_awscc/data/aws_sagemaker_pipeline.json
new file mode 100644
index 00000000000..0c2db2901b7
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_sagemaker_pipeline.json
@@ -0,0 +1,171 @@
+{
+ "typeName": "AWS::SageMaker::Pipeline",
+ "description": "Resource Type definition for AWS::SageMaker::Pipeline",
+ "additionalProperties": false,
+ "properties": {
+ "PipelineName": {
+ "type": "string",
+ "description": "The name of the Pipeline.",
+ "minLength": 1,
+ "maxLength": 256,
+ "pattern": "^[a-zA-Z0-9](-*[a-zA-Z0-9])*"
+ },
+ "PipelineDisplayName": {
+ "type": "string",
+ "description": "The display name of the Pipeline.",
+ "minLength": 1,
+ "maxLength": 256,
+ "pattern": "^[a-zA-Z0-9](-*[a-zA-Z0-9])*"
+ },
+ "PipelineDescription": {
+ "type": "string",
+ "description": "The description of the Pipeline.",
+ "minLength": 0,
+ "maxLength": 3072
+ },
+ "PipelineDefinition": {
+ "type": "object",
+ "oneOf": [
+ {
+ "additionalProperties": false,
+ "properties": {
+ "PipelineDefinitionBody": {
+ "type": "string",
+ "description": "A specification that defines the pipeline in JSON format."
+ }
+ },
+ "required": [
+ "PipelineDefinitionBody"
+ ]
+ },
+ {
+ "additionalProperties": false,
+ "properties": {
+ "PipelineDefinitionS3Location": {
+ "$ref": "#/definitions/S3Location"
+ }
+ },
+ "required": [
+ "PipelineDefinitionS3Location"
+ ]
+ }
+ ]
+ },
+ "RoleArn": {
+ "type": "string",
+ "description": "Role Arn",
+ "minLength": 20,
+ "maxLength": 2048,
+ "pattern": "^arn:aws[a-z\\-]*:iam::\\d{12}:role/?[a-zA-Z_0-9+=,.@\\-_/]+$"
+ },
+ "Tags": {
+ "type": "array",
+ "uniqueItems": false,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ },
+ "ParallelismConfiguration": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "MaxParallelExecutionSteps": {
+ "description": "Maximum parallel execution steps",
+ "type": "integer",
+ "minimum": 1
+ }
+ },
+ "required": [
+ "MaxParallelExecutionSteps"
+ ]
+ }
+ },
+ "definitions": {
+ "S3Location": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Bucket": {
+ "description": "The name of the S3 bucket where the PipelineDefinition file is stored.",
+ "type": "string"
+ },
+ "Key": {
+ "description": "The file name of the PipelineDefinition file (Amazon S3 object name).",
+ "type": "string"
+ },
+ "Version": {
+ "description": "For versioning-enabled buckets, a specific version of the PipelineDefinition file.",
+ "type": "string"
+ },
+ "ETag": {
+ "description": "The Amazon S3 ETag (a file checksum) of the PipelineDefinition file. If you don't specify a value, SageMaker skips ETag validation of your PipelineDefinition file.",
+ "type": "string"
+ }
+ },
+ "required": [
+ "Bucket",
+ "Key"
+ ]
+ },
+ "Tag": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Value": {
+ "type": "string"
+ },
+ "Key": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "Value",
+ "Key"
+ ]
+ }
+ },
+ "required": [
+ "PipelineName",
+ "PipelineDefinition",
+ "RoleArn"
+ ],
+ "createOnlyProperties": [
+ "/properties/PipelineName"
+ ],
+ "primaryIdentifier": [
+ "/properties/PipelineName"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "iam:PassRole",
+ "s3:GetObject",
+ "sagemaker:CreatePipeline",
+ "sagemaker:DescribePipeline"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "sagemaker:DescribePipeline"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "iam:PassRole",
+ "s3:GetObject",
+ "sagemaker:UpdatePipeline",
+ "sagemaker:DescribePipeline"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "sagemaker:DeletePipeline"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "sagemaker:ListPipelines"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_sagemaker_project.json b/tools/c7n_awscc/c7n_awscc/data/aws_sagemaker_project.json
new file mode 100644
index 00000000000..bafab4ed7bb
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_sagemaker_project.json
@@ -0,0 +1,238 @@
+{
+ "typeName": "AWS::SageMaker::Project",
+ "description": "Resource Type definition for AWS::SageMaker::Project",
+ "definitions": {
+ "Tag": {
+ "description": "A key-value pair to associate with a resource.",
+ "type": "object",
+ "properties": {
+ "Key": {
+ "type": "string",
+ "description": "The key name of the tag. You can specify a value that is 1 to 127 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. ",
+ "minLength": 1,
+ "maxLength": 128,
+ "pattern": "^([\\p{L}\\p{Z}\\p{N}_.:/=+\\-@]*)$"
+ },
+ "Value": {
+ "type": "string",
+ "description": "The value for the tag. You can specify a value that is 1 to 255 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. ",
+ "maxLength": 256,
+ "pattern": "^([\\p{L}\\p{Z}\\p{N}_.:/=+\\-@]*)$"
+ }
+ },
+ "required": [
+ "Key",
+ "Value"
+ ],
+ "additionalProperties": false
+ },
+ "ProjectDescription": {
+ "type": "string",
+ "description": "The description of the project.",
+ "pattern": ".*",
+ "maxLength": 1024
+ },
+ "ProjectId": {
+ "type": "string",
+ "description": "Project Id.",
+ "pattern": "^[a-zA-Z0-9](-*[a-zA-Z0-9])*",
+ "maxLength": 20
+ },
+ "ProvisionedProductStatusMessage": {
+ "type": "string",
+ "description": "Provisioned Product Status Message"
+ },
+ "ProjectName": {
+ "type": "string",
+ "description": "The name of the project.",
+ "pattern": "^[a-zA-Z0-9](-*[a-zA-Z0-9])*$",
+ "minLength": 1,
+ "maxLength": 32
+ },
+ "ProjectArn": {
+ "description": "The Amazon Resource Name (ARN) of the Project.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 2048,
+ "pattern": "arn:aws[a-z\\-]*:sagemaker:[a-z0-9\\-]*:[0-9]{12}:project.*"
+ },
+ "ProductId": {
+ "type": "string",
+ "description": "Service Catalog product identifier.",
+ "pattern": "^[a-zA-Z0-9](-*[a-zA-Z0-9])*$",
+ "maxLength": 100
+ },
+ "ProvisioningArtifactId": {
+ "type": "string",
+ "description": "The identifier of the provisioning artifact (also known as a version).",
+ "pattern": "^[a-zA-Z0-9](-*[a-zA-Z0-9])*$",
+ "maxLength": 100
+ },
+ "PathId": {
+ "type": "string",
+ "description": "The path identifier of the product.",
+ "pattern": "^[a-zA-Z0-9](-*[a-zA-Z0-9])*$",
+ "maxLength": 100
+ },
+ "ProvisioningParameter": {
+ "description": "Information about a parameter used to provision a product.",
+ "type": "object",
+ "properties": {
+ "Key": {
+ "type": "string",
+ "description": "The parameter key.",
+ "minLength": 1,
+ "maxLength": 1000,
+ "pattern": ".*"
+ },
+ "Value": {
+ "type": "string",
+ "description": "The parameter value.",
+ "maxLength": 4096,
+ "pattern": ".*"
+ }
+ },
+ "required": [
+ "Key",
+ "Value"
+ ],
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "Tags": {
+ "type": "array",
+ "maxItems": 40,
+ "description": "An array of key-value pairs to apply to this resource.",
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ },
+ "ProjectArn": {
+ "$ref": "#/definitions/ProjectArn"
+ },
+ "ProjectId": {
+ "$ref": "#/definitions/ProjectId"
+ },
+ "ProjectName": {
+ "$ref": "#/definitions/ProjectName"
+ },
+ "ProjectDescription": {
+ "$ref": "#/definitions/ProjectDescription"
+ },
+ "CreationTime": {
+ "description": "The time at which the project was created.",
+ "type": "string"
+ },
+ "ServiceCatalogProvisioningDetails": {
+ "description": "Input ServiceCatalog Provisioning Details",
+ "type": "object",
+ "properties": {
+ "ProductId": {
+ "$ref": "#/definitions/ProductId"
+ },
+ "ProvisioningArtifactId": {
+ "$ref": "#/definitions/ProvisioningArtifactId"
+ },
+ "PathId": {
+ "$ref": "#/definitions/PathId"
+ },
+ "ProvisioningParameters": {
+ "type": "array",
+ "description": "Parameters specified by the administrator that are required for provisioning the product.",
+ "items": {
+ "$ref": "#/definitions/ProvisioningParameter"
+ }
+ }
+ },
+ "required": [
+ "ProductId"
+ ],
+ "additionalProperties": false
+ },
+ "ServiceCatalogProvisionedProductDetails": {
+ "description": "Provisioned ServiceCatalog Details",
+ "type": "object",
+ "properties": {
+ "ProvisionedProductId": {
+ "$ref": "#/definitions/ProvisioningArtifactId"
+ },
+ "ProvisionedProductStatusMessage": {
+ "$ref": "#/definitions/ProvisionedProductStatusMessage"
+ }
+ },
+ "additionalProperties": false
+ },
+ "ProjectStatus": {
+ "description": "The status of a project.",
+ "type": "string",
+ "enum": [
+ "Pending",
+ "CreateInProgress",
+ "CreateCompleted",
+ "CreateFailed",
+ "DeleteInProgress",
+ "DeleteFailed",
+ "DeleteCompleted"
+ ]
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "ProjectName",
+ "ServiceCatalogProvisioningDetails"
+ ],
+ "readOnlyProperties": [
+ "/properties/ProjectArn",
+ "/properties/CreationTime",
+ "/properties/ProjectId",
+ "/properties/ServiceCatalogProvisionedProductDetails",
+ "/properties/ProjectStatus"
+ ],
+ "createOnlyProperties": [
+ "/properties/ProjectName",
+ "/properties/ProjectDescription",
+ "/properties/ServiceCatalogProvisioningDetails",
+ "/properties/Tags"
+ ],
+ "primaryIdentifier": [
+ "/properties/ProjectArn"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "sagemaker:CreateProject",
+ "sagemaker:DescribeProject",
+ "servicecatalog:DescribeProduct",
+ "servicecatalog:DescribeProvisioningArtifact",
+ "servicecatalog:ProvisionProduct",
+ "servicecatalog:DescribeProvisionedProduct",
+ "servicecatalog:TerminateProvisionedProduct"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "sagemaker:DescribeProject",
+ "sagemaker:ListTags"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "sagemaker:DescribeProject",
+ "sagemaker:ListTags",
+ "sagemaker:AddTags",
+ "sagemaker:DeleteTags"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "sagemaker:DeleteProject"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "sagemaker:ListProjects"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_sagemaker_userprofile.json b/tools/c7n_awscc/c7n_awscc/data/aws_sagemaker_userprofile.json
new file mode 100644
index 00000000000..95d5a06233f
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_sagemaker_userprofile.json
@@ -0,0 +1,312 @@
+{
+ "typeName": "AWS::SageMaker::UserProfile",
+ "description": "Resource Type definition for AWS::SageMaker::UserProfile",
+ "additionalProperties": false,
+ "properties": {
+ "UserProfileArn": {
+ "type": "string",
+ "description": "The user profile Amazon Resource Name (ARN).",
+ "maxLength": 256,
+ "pattern": "arn:aws[a-z\\-]*:sagemaker:[a-z0-9\\-]*:[0-9]{12}:user-profile/.*"
+ },
+ "DomainId": {
+ "type": "string",
+ "description": "The ID of the associated Domain.",
+ "minLength": 1,
+ "maxLength": 63
+ },
+ "SingleSignOnUserIdentifier": {
+ "type": "string",
+ "description": "A specifier for the type of value specified in SingleSignOnUserValue. Currently, the only supported value is \"UserName\". If the Domain's AuthMode is SSO, this field is required. If the Domain's AuthMode is not SSO, this field cannot be specified.",
+ "pattern": "UserName"
+ },
+ "SingleSignOnUserValue": {
+ "type": "string",
+ "description": "The username of the associated AWS Single Sign-On User for this UserProfile. If the Domain's AuthMode is SSO, this field is required, and must match a valid username of a user in your directory. If the Domain's AuthMode is not SSO, this field cannot be specified.",
+ "minLength": 1,
+ "maxLength": 256
+ },
+ "UserProfileName": {
+ "type": "string",
+ "description": "A name for the UserProfile.",
+ "minLength": 1,
+ "maxLength": 63
+ },
+ "UserSettings": {
+ "$ref": "#/definitions/UserSettings",
+ "description": "A collection of settings.",
+ "uniqueItems": false,
+ "minItems": 0,
+ "maxItems": 50
+ },
+ "Tags": {
+ "type": "array",
+ "description": "A list of tags to apply to the user profile.",
+ "uniqueItems": false,
+ "minItems": 0,
+ "maxItems": 50,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ }
+ },
+ "definitions": {
+ "UserSettings": {
+ "type": "object",
+ "description": "A collection of settings that apply to users of Amazon SageMaker Studio. These settings are specified when the CreateUserProfile API is called, and as DefaultUserSettings when the CreateDomain API is called.",
+ "additionalProperties": false,
+ "properties": {
+ "ExecutionRole": {
+ "type": "string",
+ "description": "The user profile Amazon Resource Name (ARN).",
+ "minLength": 20,
+ "maxLength": 2048,
+ "pattern": "^arn:aws[a-z\\-]*:iam::\\d{12}:role/?[a-zA-Z_0-9+=,.@\\-_/]+$"
+ },
+ "JupyterServerAppSettings": {
+ "$ref": "#/definitions/JupyterServerAppSettings",
+ "description": "The Jupyter server's app settings."
+ },
+ "KernelGatewayAppSettings": {
+ "$ref": "#/definitions/KernelGatewayAppSettings",
+ "description": "The kernel gateway app settings."
+ },
+ "SecurityGroups": {
+ "type": "array",
+ "description": "The security groups for the Amazon Virtual Private Cloud (VPC) that Studio uses for communication.",
+ "uniqueItems": false,
+ "minItems": 0,
+ "maxItems": 5,
+ "items": {
+ "type": "string",
+ "maxLength": 32,
+ "pattern": "[-0-9a-zA-Z]+"
+ }
+ },
+ "SharingSettings": {
+ "$ref": "#/definitions/SharingSettings",
+ "description": "The sharing settings."
+ }
+ }
+ },
+ "JupyterServerAppSettings": {
+ "type": "object",
+ "description": "The JupyterServer app settings.",
+ "additionalProperties": false,
+ "properties": {
+ "DefaultResourceSpec": {
+ "$ref": "#/definitions/ResourceSpec"
+ }
+ }
+ },
+ "ResourceSpec": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "InstanceType": {
+ "type": "string",
+ "description": "The instance type that the image version runs on.",
+ "enum": [
+ "system",
+ "ml.t3.micro",
+ "ml.t3.small",
+ "ml.t3.medium",
+ "ml.t3.large",
+ "ml.t3.xlarge",
+ "ml.t3.2xlarge",
+ "ml.m5.large",
+ "ml.m5.xlarge",
+ "ml.m5.2xlarge",
+ "ml.m5.4xlarge",
+ "ml.m5.8xlarge",
+ "ml.m5.12xlarge",
+ "ml.m5.16xlarge",
+ "ml.m5.24xlarge",
+ "ml.c5.large",
+ "ml.c5.xlarge",
+ "ml.c5.2xlarge",
+ "ml.c5.4xlarge",
+ "ml.c5.9xlarge",
+ "ml.c5.12xlarge",
+ "ml.c5.18xlarge",
+ "ml.c5.24xlarge",
+ "ml.p3.2xlarge",
+ "ml.p3.8xlarge",
+ "ml.p3.16xlarge",
+ "ml.g4dn.xlarge",
+ "ml.g4dn.2xlarge",
+ "ml.g4dn.4xlarge",
+ "ml.g4dn.8xlarge",
+ "ml.g4dn.12xlarge",
+ "ml.g4dn.16xlarge"
+ ]
+ },
+ "SageMakerImageArn": {
+ "type": "string",
+ "description": "The ARN of the SageMaker image that the image version belongs to.",
+ "maxLength": 256,
+ "pattern": "^arn:aws(-[\\w]+)*:sagemaker:.+:[0-9]{12}:image/[a-z0-9]([-.]?[a-z0-9])*$"
+ },
+ "SageMakerImageVersionArn": {
+ "type": "string",
+ "description": "The ARN of the image version created on the instance.",
+ "maxLength": 256,
+ "pattern": "^arn:aws(-[\\w]+)*:sagemaker:.+:[0-9]{12}:image-version/[a-z0-9]([-.]?[a-z0-9])*/[0-9]+$"
+ }
+ }
+ },
+ "KernelGatewayAppSettings": {
+ "type": "object",
+ "description": "The kernel gateway app settings.",
+ "additionalProperties": false,
+ "properties": {
+ "CustomImages": {
+ "type": "array",
+ "description": "A list of custom SageMaker images that are configured to run as a KernelGateway app.",
+ "uniqueItems": false,
+ "minItems": 0,
+ "maxItems": 30,
+ "items": {
+ "$ref": "#/definitions/CustomImage"
+ }
+ },
+ "DefaultResourceSpec": {
+ "$ref": "#/definitions/ResourceSpec",
+ "description": "The default instance type and the Amazon Resource Name (ARN) of the default SageMaker image used by the KernelGateway app."
+ }
+ }
+ },
+ "CustomImage": {
+ "type": "object",
+ "description": "A custom SageMaker image.",
+ "additionalProperties": false,
+ "properties": {
+ "AppImageConfigName": {
+ "type": "string",
+ "description": "The Name of the AppImageConfig.",
+ "maxLength": 63,
+ "pattern": "^[a-zA-Z0-9](-*[a-zA-Z0-9]){0,62}"
+ },
+ "ImageName": {
+ "type": "string",
+ "description": "The name of the CustomImage. Must be unique to your account.",
+ "maxLength": 63,
+ "pattern": "^[a-zA-Z0-9]([-.]?[a-zA-Z0-9]){0,62}$"
+ },
+ "ImageVersionNumber": {
+ "type": "integer",
+ "description": "The version number of the CustomImage.",
+ "minimum": 0
+ }
+ },
+ "required": [
+ "AppImageConfigName",
+ "ImageName"
+ ]
+ },
+ "SharingSettings": {
+ "type": "object",
+ "description": "Specifies options when sharing an Amazon SageMaker Studio notebook. These settings are specified as part of DefaultUserSettings when the CreateDomain API is called, and as part of UserSettings when the CreateUserProfile API is called.",
+ "additionalProperties": false,
+ "properties": {
+ "NotebookOutputOption": {
+ "type": "string",
+ "description": "Whether to include the notebook cell output when sharing the notebook. The default is Disabled.",
+ "enum": [
+ "Allowed",
+ "Disabled"
+ ]
+ },
+ "S3KmsKeyId": {
+ "type": "string",
+ "description": "When NotebookOutputOption is Allowed, the AWS Key Management Service (KMS) encryption key ID used to encrypt the notebook cell output in the Amazon S3 bucket.",
+ "maxLength": 2048,
+ "pattern": ".*"
+ },
+ "S3OutputPath": {
+ "type": "string",
+ "description": "When NotebookOutputOption is Allowed, the Amazon S3 bucket used to store the shared notebook snapshots.",
+ "maxLength": 1024,
+ "pattern": "^(https|s3)://([^/]+)/?(.*)$"
+ }
+ }
+ },
+ "Tag": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Value": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Key": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 128
+ }
+ },
+ "required": [
+ "Key",
+ "Value"
+ ]
+ }
+ },
+ "required": [
+ "DomainId",
+ "UserProfileName"
+ ],
+ "createOnlyProperties": [
+ "/properties/DomainId",
+ "/properties/UserProfileName",
+ "/properties/SingleSignOnUserIdentifier",
+ "/properties/SingleSignOnUserValue",
+ "/properties/Tags"
+ ],
+ "writeOnlyProperties": [
+ "/properties/Tags"
+ ],
+ "primaryIdentifier": [
+ "/properties/UserProfileName",
+ "/properties/DomainId"
+ ],
+ "readOnlyProperties": [
+ "/properties/UserProfileArn"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "sagemaker:CreateUserProfile",
+ "sagemaker:DescribeUserProfile",
+ "sagemaker:DescribeImage",
+ "sagemaker:DescribeImageVersion",
+ "iam:PassRole"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "sagemaker:DescribeUserProfile"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "sagemaker:UpdateUserProfile",
+ "sagemaker:DescribeUserProfile",
+ "sagemaker:DescribeImage",
+ "sagemaker:DescribeImageVersion",
+ "iam:PassRole"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "sagemaker:DeleteUserProfile",
+ "sagemaker:DescribeUserProfile"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "sagemaker:ListUserProfiles"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_servicecatalog_cloudformationprovisionedproduct.json b/tools/c7n_awscc/c7n_awscc/data/aws_servicecatalog_cloudformationprovisionedproduct.json
new file mode 100644
index 00000000000..9c1786b55fc
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_servicecatalog_cloudformationprovisionedproduct.json
@@ -0,0 +1,230 @@
+{
+ "typeName": "AWS::ServiceCatalog::CloudFormationProvisionedProduct",
+ "description": "Resource Schema for AWS::ServiceCatalog::CloudFormationProvisionedProduct",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git",
+ "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-servicecatalog-cloudformationprovisionedproduct.html",
+ "definitions": {
+ "ProvisioningPreferences": {
+ "type": "object",
+ "properties": {
+ "StackSetAccounts": {
+ "type": "array",
+ "uniqueItems": true,
+ "items": {
+ "type": "string",
+ "pattern": "^[0-9]{12}$"
+ }
+ },
+ "StackSetFailureToleranceCount": {
+ "type": "integer",
+ "minimum": 0
+ },
+ "StackSetFailureTolerancePercentage": {
+ "type": "integer",
+ "minimum": 0,
+ "maximum": 100
+ },
+ "StackSetMaxConcurrencyCount": {
+ "type": "integer",
+ "minimum": 1
+ },
+ "StackSetMaxConcurrencyPercentage": {
+ "type": "integer",
+ "minimum": 1,
+ "maximum": 100
+ },
+ "StackSetOperationType": {
+ "type": "string",
+ "enum": [
+ "CREATE",
+ "UPDATE",
+ "DELETE"
+ ]
+ },
+ "StackSetRegions": {
+ "type": "array",
+ "uniqueItems": true,
+ "items": {
+ "type": "string",
+ "pattern": "^[a-z]{2}-([a-z]+-)+[1-9]"
+ }
+ }
+ },
+ "additionalProperties": false
+ },
+ "ProvisioningParameter": {
+ "type": "object",
+ "properties": {
+ "Key": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 1000
+ },
+ "Value": {
+ "type": "string",
+ "maxLength": 4096
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "Key",
+ "Value"
+ ]
+ },
+ "Tag": {
+ "type": "object",
+ "properties": {
+ "Key": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 128,
+ "pattern": "^([\\p{L}\\p{Z}\\p{N}_.:/=+\\-@]*)$"
+ },
+ "Value": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 256,
+ "pattern": "^([\\p{L}\\p{Z}\\p{N}_.:/=+\\-@]*)$"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "Key",
+ "Value"
+ ]
+ },
+ "OutputType": {
+ "type": "string"
+ }
+ },
+ "properties": {
+ "AcceptLanguage": {
+ "type": "string",
+ "enum": [
+ "en",
+ "jp",
+ "zh"
+ ]
+ },
+ "NotificationArns": {
+ "type": "array",
+ "uniqueItems": true,
+ "items": {
+ "type": "string"
+ },
+ "maxItems": 5
+ },
+ "PathId": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 100
+ },
+ "PathName": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 100
+ },
+ "ProductId": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 100
+ },
+ "ProductName": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "ProvisionedProductName": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "ProvisioningArtifactId": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 100
+ },
+ "ProvisioningArtifactName": {
+ "type": "string"
+ },
+ "ProvisioningParameters": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/ProvisioningParameter"
+ }
+ },
+ "ProvisioningPreferences": {
+ "$ref": "#/definitions/ProvisioningPreferences"
+ },
+ "Tags": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ },
+ "ProvisionedProductId": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 50
+ },
+ "RecordId": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 50
+ },
+ "CloudformationStackArn": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 256
+ },
+ "Outputs": {
+ "description": "List of key-value pair outputs.",
+ "type": "object",
+ "patternProperties": {
+ "^[A-Za-z0-9]{1,64}$": {
+ "$ref": "#/definitions/OutputType"
+ }
+ },
+ "additionalProperties": false,
+ "maxProperties": 100
+ }
+ },
+ "additionalProperties": false,
+ "readOnlyProperties": [
+ "/properties/RecordId",
+ "/properties/CloudformationStackArn",
+ "/properties/Outputs",
+ "/properties/ProvisionedProductId"
+ ],
+ "createOnlyProperties": [
+ "/properties/NotificationArns",
+ "/properties/ProvisionedProductName"
+ ],
+ "primaryIdentifier": [
+ "/properties/ProvisionedProductId"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "*"
+ ],
+ "timeoutInMinutes": 720
+ },
+ "read": {
+ "permissions": [
+ "*"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "*"
+ ],
+ "timeoutInMinutes": 720
+ },
+ "delete": {
+ "permissions": [
+ "*"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_servicecatalog_serviceaction.json b/tools/c7n_awscc/c7n_awscc/data/aws_servicecatalog_serviceaction.json
new file mode 100644
index 00000000000..0bced123741
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_servicecatalog_serviceaction.json
@@ -0,0 +1,104 @@
+{
+ "typeName": "AWS::ServiceCatalog::ServiceAction",
+ "description": "Resource Schema for AWS::ServiceCatalog::ServiceAction",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git",
+ "definitions": {
+ "DefinitionParameter": {
+ "type": "object",
+ "properties": {
+ "Key": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 1000
+ },
+ "Value": {
+ "type": "string",
+ "maxLength": 4096
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "Key",
+ "Value"
+ ]
+ }
+ },
+ "properties": {
+ "AcceptLanguage": {
+ "type": "string",
+ "enum": [
+ "en",
+ "jp",
+ "zh"
+ ]
+ },
+ "Name": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 256
+ },
+ "DefinitionType": {
+ "type": "string",
+ "enum": [
+ "SSM_AUTOMATION"
+ ]
+ },
+ "Definition": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/DefinitionParameter"
+ }
+ },
+ "Description": {
+ "type": "string",
+ "maxLength": 1024
+ },
+ "Id": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 100
+ }
+ },
+ "additionalProperties": false,
+ "primaryIdentifier": [
+ "/properties/Id"
+ ],
+ "readOnlyProperties": [
+ "/properties/Id"
+ ],
+ "required": [
+ "Name",
+ "DefinitionType",
+ "Definition"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "servicecatalog:CreateServiceAction",
+ "ssm:DescribeDocument",
+ "iam:GetRole"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "servicecatalog:DescribeServiceAction"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "servicecatalog:UpdateServiceAction",
+ "iam:GetRole"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "servicecatalog:DeleteServiceAction"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "servicecatalog:ListServiceActions"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_servicecatalogappregistry_application.json b/tools/c7n_awscc/c7n_awscc/data/aws_servicecatalogappregistry_application.json
new file mode 100644
index 00000000000..7f8bfeef8be
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_servicecatalogappregistry_application.json
@@ -0,0 +1,92 @@
+{
+ "typeName": "AWS::ServiceCatalogAppRegistry::Application",
+ "description": "Resource Schema for AWS::ServiceCatalogAppRegistry::Application",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-servicecatalog-appregistry.git",
+ "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-servicecatalog-appregistry-application.html",
+ "definitions": {
+ "Tags": {
+ "type": "object",
+ "patternProperties": {
+ "^(?!aws:)[a-zA-Z+-=._:/]+$": {
+ "type": "string",
+ "maxLength": 256
+ }
+ },
+ "maxProperties": 50,
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "Id": {
+ "type": "string",
+ "pattern": "[a-z0-9]{26}"
+ },
+ "Arn": {
+ "type": "string",
+ "pattern": "arn:aws[-a-z]*:servicecatalog:[a-z]{2}(-gov)?-[a-z]+-\\d:\\d{12}:/applications/[a-z0-9]+"
+ },
+ "Name": {
+ "type": "string",
+ "description": "The name of the application. ",
+ "minLength": 1,
+ "maxLength": 256,
+ "pattern": "\\w+"
+ },
+ "Description": {
+ "type": "string",
+ "description": "The description of the application. ",
+ "maxLength": 1024
+ },
+ "Tags": {
+ "$ref": "#/definitions/Tags"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "Name"
+ ],
+ "readOnlyProperties": [
+ "/properties/Id",
+ "/properties/Arn"
+ ],
+ "primaryIdentifier": [
+ "/properties/Id"
+ ],
+ "additionalIdentifiers": [
+ [
+ "/properties/Name"
+ ]
+ ],
+ "taggable": true,
+ "handlers": {
+ "create": {
+ "permissions": [
+ "servicecatalog:CreateApplication",
+ "servicecatalog:TagResource"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "servicecatalog:GetApplication"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "servicecatalog:ListTagsForResource",
+ "servicecatalog:TagResource",
+ "servicecatalog:UntagResource",
+ "servicecatalog:UpdateApplication"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "servicecatalog:DeleteApplication"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "servicecatalog:ListApplications"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_servicecatalogappregistry_attributegroup.json b/tools/c7n_awscc/c7n_awscc/data/aws_servicecatalogappregistry_attributegroup.json
new file mode 100644
index 00000000000..72353db4beb
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_servicecatalogappregistry_attributegroup.json
@@ -0,0 +1,96 @@
+{
+ "typeName": "AWS::ServiceCatalogAppRegistry::AttributeGroup",
+ "description": "Resource Schema for AWS::ServiceCatalogAppRegistry::AttributeGroup.",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-servicecatalog-appregistry.git",
+ "documentationUrl": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-servicecatalog-appregistry-attributegroup.html",
+ "definitions": {
+ "Tags": {
+ "type": "object",
+ "patternProperties": {
+ "^(?!aws:)[a-zA-Z+-=._:/]+$": {
+ "type": "string",
+ "maxLength": 256
+ }
+ },
+ "maxProperties": 50,
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "Id": {
+ "type": "string",
+ "pattern": "[a-z0-9]{12}"
+ },
+ "Arn": {
+ "type": "string",
+ "pattern": "arn:aws[-a-z]*:servicecatalog:[a-z]{2}(-gov)?-[a-z]+-\\d:\\d{12}:/attribute-groups/[a-z0-9]+"
+ },
+ "Name": {
+ "type": "string",
+ "description": "The name of the attribute group. ",
+ "minLength": 1,
+ "maxLength": 256,
+ "pattern": "\\w+"
+ },
+ "Description": {
+ "type": "string",
+ "description": "The description of the attribute group. ",
+ "maxLength": 1024
+ },
+ "Attributes": {
+ "type": "object"
+ },
+ "Tags": {
+ "$ref": "#/definitions/Tags"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "Name",
+ "Attributes"
+ ],
+ "readOnlyProperties": [
+ "/properties/Id",
+ "/properties/Arn"
+ ],
+ "primaryIdentifier": [
+ "/properties/Id"
+ ],
+ "additionalIdentifiers": [
+ [
+ "/properties/Name"
+ ]
+ ],
+ "taggable": true,
+ "handlers": {
+ "create": {
+ "permissions": [
+ "servicecatalog:CreateAttributeGroup",
+ "servicecatalog:TagResource"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "servicecatalog:GetAttributeGroup"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "servicecatalog:UpdateAttributeGroup",
+ "servicecatalog:ListTagsForResource",
+ "servicecatalog:TagResource",
+ "servicecatalog:UntagResource"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "servicecatalog:DeleteAttributeGroup"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "servicecatalog:ListAttributeGroups"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_ses_contactlist.json b/tools/c7n_awscc/c7n_awscc/data/aws_ses_contactlist.json
new file mode 100644
index 00000000000..8882ae57121
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_ses_contactlist.json
@@ -0,0 +1,126 @@
+{
+ "typeName": "AWS::SES::ContactList",
+ "description": "Resource schema for AWS::SES::ContactList.",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ses.git",
+ "definitions": {
+ "Tag": {
+ "type": "object",
+ "properties": {
+ "Key": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Value": {
+ "type": "string",
+ "minLength": 0,
+ "maxLength": 256
+ }
+ },
+ "required": [
+ "Key",
+ "Value"
+ ],
+ "additionalProperties": false
+ },
+ "Topic": {
+ "type": "object",
+ "properties": {
+ "TopicName": {
+ "description": "The name of the topic.",
+ "type": "string",
+ "pattern": "^[a-zA-Z0-9_-]{1,64}$"
+ },
+ "DisplayName": {
+ "description": "The display name of the topic.",
+ "type": "string",
+ "minLength": 0,
+ "maxLength": 128
+ },
+ "Description": {
+ "description": "The description of the topic.",
+ "type": "string",
+ "minLength": 0,
+ "maxLength": 500
+ },
+ "DefaultSubscriptionStatus": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "TopicName",
+ "DisplayName",
+ "DefaultSubscriptionStatus"
+ ],
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "ContactListName": {
+ "description": "The name of the contact list.",
+ "type": "string",
+ "pattern": "^[a-zA-Z0-9_-]{1,64}$"
+ },
+ "Description": {
+ "description": "The description of the contact list.",
+ "type": "string",
+ "maxLength": 500
+ },
+ "Topics": {
+ "description": "The topics associated with the contact list.",
+ "type": "array",
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/Topic"
+ },
+ "minItems": 0,
+ "maxItems": 20
+ },
+ "Tags": {
+ "description": "The tags (keys and values) associated with the contact list.",
+ "type": "array",
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ },
+ "minItems": 0,
+ "maxItems": 50
+ }
+ },
+ "additionalProperties": false,
+ "createOnlyProperties": [
+ "/properties/ContactListName"
+ ],
+ "primaryIdentifier": [
+ "/properties/ContactListName"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "ses:CreateContactList"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "ses:GetContactList"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "ses:UpdateContactList",
+ "ses:UntagResource",
+ "ses:TagResource"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "ses:DeleteContactList"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "ses:ListContactLists"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_signer_signingprofile.json b/tools/c7n_awscc/c7n_awscc/data/aws_signer_signingprofile.json
new file mode 100644
index 00000000000..d5d24164cbe
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_signer_signingprofile.json
@@ -0,0 +1,143 @@
+{
+ "typeName": "AWS::Signer::SigningProfile",
+ "description": "A signing profile is a signing template that can be used to carry out a pre-defined signing job.",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git",
+ "definitions": {
+ "PlatformId": {
+ "type": "string",
+ "enum": [
+ "AWSLambda-SHA384-ECDSA"
+ ]
+ },
+ "Arn": {
+ "type": "string",
+ "pattern": "^arn:aws(-(cn|gov))?:[a-z-]+:(([a-z]+-)+[0-9])?:([0-9]{12})?:[^.]+$"
+ },
+ "ProfileVersion": {
+ "type": "string",
+ "pattern": "^[0-9a-zA-Z]{10}$"
+ },
+ "SignatureValidityPeriod": {
+ "type": "object",
+ "properties": {
+ "Value": {
+ "type": "integer"
+ },
+ "Type": {
+ "type": "string",
+ "enum": [
+ "DAYS",
+ "MONTHS",
+ "YEARS"
+ ]
+ }
+ },
+ "additionalProperties": false
+ },
+ "Tag": {
+ "type": "object",
+ "properties": {
+ "Key": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 127,
+ "pattern": "^(?!aws:)[a-zA-Z+-=._:/]+$"
+ },
+ "Value": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 255
+ }
+ },
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "ProfileName": {
+ "description": "A name for the signing profile. AWS CloudFormation generates a unique physical ID and uses that ID for the signing profile name. ",
+ "type": "string"
+ },
+ "ProfileVersion": {
+ "description": "A version for the signing profile. AWS Signer generates a unique version for each profile of the same profile name.",
+ "$ref": "#/definitions/ProfileVersion"
+ },
+ "Arn": {
+ "description": "The Amazon Resource Name (ARN) of the specified signing profile.",
+ "$ref": "#/definitions/Arn"
+ },
+ "ProfileVersionArn": {
+ "description": "The Amazon Resource Name (ARN) of the specified signing profile version.",
+ "$ref": "#/definitions/Arn"
+ },
+ "SignatureValidityPeriod": {
+ "description": "Signature validity period of the profile.",
+ "$ref": "#/definitions/SignatureValidityPeriod"
+ },
+ "PlatformId": {
+ "description": "The ID of the target signing platform.",
+ "$ref": "#/definitions/PlatformId"
+ },
+ "Tags": {
+ "type": "array",
+ "description": "A list of tags associated with the signing profile.",
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "PlatformId"
+ ],
+ "createOnlyProperties": [
+ "/properties/PlatformId",
+ "/properties/SignatureValidityPeriod"
+ ],
+ "readOnlyProperties": [
+ "/properties/ProfileName",
+ "/properties/ProfileVersion",
+ "/properties/Arn",
+ "/properties/ProfileVersionArn"
+ ],
+ "primaryIdentifier": [
+ "/properties/Arn"
+ ],
+ "additionalIdentifiers": [
+ [
+ "/properties/ProfileName"
+ ],
+ [
+ "/properties/ProfileVersionArn"
+ ]
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "signer:PutSigningProfile"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "signer:GetSigningProfile"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "signer:CancelSigningProfile",
+ "signer:GetSigningProfile"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "signer:ListSigningProfiles"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "signer:TagResource",
+ "signer:UntagResource",
+ "signer:GetSigningProfile"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_ssm_association.json b/tools/c7n_awscc/c7n_awscc/data/aws_ssm_association.json
new file mode 100644
index 00000000000..a5cdbb48e69
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_ssm_association.json
@@ -0,0 +1,250 @@
+{
+ "typeName": "AWS::SSM::Association",
+ "description": "The AWS::SSM::Association resource associates an SSM document in AWS Systems Manager with EC2 instances that contain a configuration agent to process the document.",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ssm",
+ "definitions": {
+ "Target": {
+ "type": "object",
+ "properties": {
+ "Key": {
+ "type": "string",
+ "pattern": "^[\\p{L}\\p{Z}\\p{N}_.:/=+\\-@]{1,128}$|resource-groups:Name"
+ },
+ "Values": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "minItems": 0,
+ "maxItems": 50
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "Key",
+ "Values"
+ ]
+ },
+ "ParameterValues": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "S3Region": {
+ "type": "string",
+ "minLength": 3,
+ "maxLength": 20
+ },
+ "S3BucketName": {
+ "type": "string",
+ "minLength": 3,
+ "maxLength": 63
+ },
+ "S3KeyPrefix": {
+ "type": "string",
+ "maxLength": 1024
+ },
+ "S3OutputLocation": {
+ "type": "object",
+ "properties": {
+ "OutputS3Region": {
+ "$ref": "#/definitions/S3Region"
+ },
+ "OutputS3BucketName": {
+ "$ref": "#/definitions/S3BucketName"
+ },
+ "OutputS3KeyPrefix": {
+ "$ref": "#/definitions/S3KeyPrefix"
+ }
+ },
+ "additionalProperties": false
+ },
+ "InstanceAssociationOutputLocation": {
+ "type": "object",
+ "properties": {
+ "S3Location": {
+ "$ref": "#/definitions/S3OutputLocation"
+ }
+ },
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "AssociationId": {
+ "description": "Unique identifier of the association.",
+ "type": "string",
+ "pattern": "[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}",
+ "examples": [
+ "88df7b09-95e8-48c4-a3cb-08c2c20d5110",
+ "203dd0ec-0055-4bf0-a872-707f72ef06aa"
+ ]
+ },
+ "AssociationName": {
+ "description": "The name of the association.",
+ "type": "string",
+ "pattern": "^[a-zA-Z0-9_\\-.]{3,128}$"
+ },
+ "DocumentVersion": {
+ "description": "The version of the SSM document to associate with the target.",
+ "type": "string",
+ "pattern": "([$]LATEST|[$]DEFAULT|^[1-9][0-9]*$)"
+ },
+ "InstanceId": {
+ "description": "The ID of the instance that the SSM document is associated with.",
+ "type": "string",
+ "pattern": "(^i-(\\w{8}|\\w{17})$)|(^mi-\\w{17}$)",
+ "examples": [
+ "i-0e60836d21cf313c4",
+ "mi-0532c22e49636ee13"
+ ]
+ },
+ "Name": {
+ "description": "The name of the SSM document.",
+ "type": "string",
+ "pattern": "^[a-zA-Z0-9_\\-.:/]{3,200}$",
+ "examples": [
+ "AWS-GatherSoftwareInventory",
+ "MyCustomSSMDocument"
+ ]
+ },
+ "Parameters": {
+ "description": "Parameter values that the SSM document uses at runtime.",
+ "type": "object",
+ "patternProperties": {
+ ".*{1,255}": {
+ "$ref": "#/definitions/ParameterValues"
+ }
+ },
+ "additionalProperties": false
+ },
+ "ScheduleExpression": {
+ "description": "A Cron or Rate expression that specifies when the association is applied to the target.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 256,
+ "examples": [
+ "cron(0 0 */1 * * ? *)",
+ "cron(0 16 ? * TUE *)",
+ "rate(30 minutes)",
+ "rate(7 days)"
+ ]
+ },
+ "Targets": {
+ "description": "The targets that the SSM document sends commands to.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Target"
+ },
+ "minItems": 0,
+ "maxItems": 5
+ },
+ "OutputLocation": {
+ "$ref": "#/definitions/InstanceAssociationOutputLocation"
+ },
+ "AutomationTargetParameterName": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 50
+ },
+ "MaxErrors": {
+ "type": "string",
+ "pattern": "^([1-9][0-9]{0,6}|[0]|[1-9][0-9]%|[0-9]%|100%)$",
+ "examples": [
+ "1%",
+ "10%",
+ "50%",
+ "1"
+ ]
+ },
+ "MaxConcurrency": {
+ "type": "string",
+ "pattern": "^([1-9][0-9]{0,6}|[1-9][0-9]%|[1-9]%|100%)$",
+ "examples": [
+ "1%",
+ "10%",
+ "50%",
+ "1"
+ ]
+ },
+ "ComplianceSeverity": {
+ "type": "string",
+ "enum": [
+ "CRITICAL",
+ "HIGH",
+ "MEDIUM",
+ "LOW",
+ "UNSPECIFIED"
+ ]
+ },
+ "SyncCompliance": {
+ "type": "string",
+ "enum": [
+ "AUTO",
+ "MANUAL"
+ ]
+ },
+ "WaitForSuccessTimeoutSeconds": {
+ "type": "integer",
+ "minimum": 15,
+ "maximum": 172800
+ },
+ "ApplyOnlyAtCronInterval": {
+ "type": "boolean"
+ },
+ "CalendarNames": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "examples": [
+ [
+ "calendar1",
+ "calendar2"
+ ],
+ [
+ "calendar3"
+ ]
+ ]
+ }
+ },
+ "required": [
+ "Name"
+ ],
+ "readOnlyProperties": [
+ "/properties/AssociationId"
+ ],
+ "primaryIdentifier": [
+ "/properties/AssociationId"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "ec2:DescribeInstanceStatus",
+ "iam:PassRole",
+ "ssm:CreateAssociation",
+ "ssm:DescribeAssociation"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "ssm:DeleteAssociation"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "iam:PassRole",
+ "ssm:UpdateAssociation"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "ssm:DescribeAssociation",
+ "resource-groups:GetGroupQuery",
+ "resource-groups:ListGroups",
+ "resource-groups:ListGroupResources"
+ ]
+ }
+ },
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_ssm_document.json b/tools/c7n_awscc/c7n_awscc/data/aws_ssm_document.json
new file mode 100644
index 00000000000..64d462c95e8
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_ssm_document.json
@@ -0,0 +1,206 @@
+{
+ "typeName": "AWS::SSM::Document",
+ "description": "The AWS::SSM::Document resource is an SSM document in AWS Systems Manager that defines the actions that Systems Manager performs, which can be used to set up and run commands on your instances.",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ssm",
+ "definitions": {
+ "AttachmentsSource": {
+ "type": "object",
+ "properties": {
+ "Key": {
+ "description": "The key of a key-value pair that identifies the location of an attachment to a document.",
+ "type": "string",
+ "enum": [
+ "SourceUrl",
+ "S3FileUrl",
+ "AttachmentReference"
+ ]
+ },
+ "Values": {
+ "description": "The value of a key-value pair that identifies the location of an attachment to a document. The format for Value depends on the type of key you specify.",
+ "type": "array",
+ "items": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 100000
+ },
+ "minItems": 1,
+ "maxItems": 1,
+ "insertionOrder": false
+ },
+ "Name": {
+ "description": "The name of the document attachment file.",
+ "type": "string",
+ "pattern": "^([\\p{L}\\p{Z}\\p{N}_.:/=+\\-@]*)$",
+ "minLength": 1,
+ "maxLength": 128
+ }
+ },
+ "additionalProperties": false
+ },
+ "Tag": {
+ "type": "object",
+ "properties": {
+ "Key": {
+ "description": "The name of the tag.",
+ "type": "string",
+ "pattern": "^([\\p{L}\\p{Z}\\p{N}_.:/=+\\-@]*)$",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Value": {
+ "description": "The value of the tag.",
+ "type": "string",
+ "pattern": "^([\\p{L}\\p{Z}\\p{N}_.:/=+\\-@]*)$",
+ "minLength": 1,
+ "maxLength": 256
+ }
+ },
+ "additionalProperties": false
+ },
+ "DocumentRequires": {
+ "type": "object",
+ "properties": {
+ "Name": {
+ "description": "The name of the required SSM document. The name can be an Amazon Resource Name (ARN).",
+ "type": "string",
+ "pattern": "^[a-zA-Z0-9_\\-.:/]{3,200}$",
+ "maxLength": 200
+ },
+ "Version": {
+ "description": "The document version required by the current document.",
+ "type": "string",
+ "pattern": "([$]LATEST|[$]DEFAULT|^[1-9][0-9]*$)",
+ "maxLength": 8
+ }
+ },
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "Content": {
+ "description": "The content for the Systems Manager document in JSON, YAML or String format.",
+ "type": [
+ "object",
+ "string"
+ ]
+ },
+ "Attachments": {
+ "description": "A list of key and value pairs that describe attachments to a version of a document.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/AttachmentsSource"
+ },
+ "minItems": 0,
+ "maxItems": 20,
+ "insertionOrder": false
+ },
+ "Name": {
+ "description": "A name for the Systems Manager document.",
+ "type": "string",
+ "pattern": "^[a-zA-Z0-9_\\-.]{3,128}$"
+ },
+ "VersionName": {
+ "description": "An optional field specifying the version of the artifact you are creating with the document. This value is unique across all versions of a document, and cannot be changed.",
+ "type": "string",
+ "pattern": "^[a-zA-Z0-9_\\-.]{1,128}$"
+ },
+ "DocumentType": {
+ "description": "The type of document to create.",
+ "type": "string",
+ "enum": [
+ "ApplicationConfiguration",
+ "ApplicationConfigurationSchema",
+ "Automation",
+ "Automation.ChangeTemplate",
+ "ChangeCalendar",
+ "CloudFormation",
+ "Command",
+ "DeploymentStrategy",
+ "Package",
+ "Policy",
+ "ProblemAnalysis",
+ "ProblemAnalysisTemplate",
+ "Session"
+ ]
+ },
+ "DocumentFormat": {
+ "description": "Specify the document format for the request. The document format can be either JSON or YAML. JSON is the default format.",
+ "type": "string",
+ "enum": [
+ "YAML",
+ "JSON",
+ "TEXT"
+ ],
+ "default": "JSON"
+ },
+ "TargetType": {
+ "description": "Specify a target type to define the kinds of resources the document can run on.",
+ "type": "string",
+ "pattern": "^\\/[\\w\\.\\-\\:\\/]*$"
+ },
+ "Tags": {
+ "description": "Optional metadata that you assign to a resource. Tags enable you to categorize a resource in different ways, such as by purpose, owner, or environment.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Tag"
+ },
+ "maxItems": 1000,
+ "insertionOrder": false
+ },
+ "Requires": {
+ "description": "A list of SSM documents required by a document. For example, an ApplicationConfiguration document requires an ApplicationConfigurationSchema document.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/DocumentRequires"
+ },
+ "minItems": 1,
+ "insertionOrder": false
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "Content"
+ ],
+ "createOnlyProperties": [
+ "/properties/Content",
+ "/properties/Attachments",
+ "/properties/Name",
+ "/properties/VersionName",
+ "/properties/DocumentType",
+ "/properties/DocumentFormat",
+ "/properties/TargetType",
+ "/properties/Requires"
+ ],
+ "primaryIdentifier": [
+ "/properties/Name"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "ssm:CreateDocument",
+ "s3:GetObject",
+ "iam:PassRole"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "ssm:GetDocument"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "ssm:UpdateDocument",
+ "s3:GetObject",
+ "ssm:AddTagsToResource",
+ "ssm:RemoveTagsFromResource",
+ "ssm:ListTagsForResource",
+ "iam:PassRole"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "ssm:DeleteDocument"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_ssm_resourcedatasync.json b/tools/c7n_awscc/c7n_awscc/data/aws_ssm_resourcedatasync.json
new file mode 100644
index 00000000000..a5534663ddf
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_ssm_resourcedatasync.json
@@ -0,0 +1,184 @@
+{
+ "typeName": "AWS::SSM::ResourceDataSync",
+ "description": "Resource Type definition for AWS::SSM::ResourceDataSync",
+ "additionalProperties": false,
+ "properties": {
+ "S3Destination": {
+ "$ref": "#/definitions/S3Destination"
+ },
+ "KMSKeyArn": {
+ "type": "string",
+ "minLength": 0,
+ "maxLength": 512
+ },
+ "SyncSource": {
+ "$ref": "#/definitions/SyncSource"
+ },
+ "BucketName": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 2048
+ },
+ "BucketRegion": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 64
+ },
+ "SyncFormat": {
+ "type": "string",
+ "minLength": 0,
+ "maxLength": 1024
+ },
+ "SyncName": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 64
+ },
+ "SyncType": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 64
+ },
+ "BucketPrefix": {
+ "type": "string",
+ "minLength": 0,
+ "maxLength": 64
+ }
+ },
+ "definitions": {
+ "S3Destination": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "KMSKeyArn": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 512
+ },
+ "BucketPrefix": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 256
+ },
+ "BucketName": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 2048
+ },
+ "BucketRegion": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 64
+ },
+ "SyncFormat": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 1024
+ }
+ },
+ "required": [
+ "BucketName",
+ "BucketRegion",
+ "SyncFormat"
+ ]
+ },
+ "SyncSource": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "IncludeFutureRegions": {
+ "type": "boolean"
+ },
+ "SourceRegions": {
+ "type": "array",
+ "uniqueItems": false,
+ "items": {
+ "type": "string"
+ }
+ },
+ "SourceType": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 64
+ },
+ "AwsOrganizationsSource": {
+ "$ref": "#/definitions/AwsOrganizationsSource"
+ }
+ },
+ "required": [
+ "SourceType",
+ "SourceRegions"
+ ]
+ },
+ "AwsOrganizationsSource": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "OrganizationalUnits": {
+ "type": "array",
+ "uniqueItems": false,
+ "items": {
+ "type": "string"
+ }
+ },
+ "OrganizationSourceType": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 64
+ }
+ },
+ "required": [
+ "OrganizationSourceType"
+ ]
+ }
+ },
+ "required": [
+ "SyncName"
+ ],
+ "createOnlyProperties": [
+ "/properties/KMSKeyArn",
+ "/properties/SyncFormat",
+ "/properties/BucketPrefix",
+ "/properties/SyncName",
+ "/properties/BucketRegion",
+ "/properties/BucketName",
+ "/properties/S3Destination",
+ "/properties/SyncType"
+ ],
+ "primaryIdentifier": [
+ "/properties/SyncName"
+ ],
+ "readOnlyProperties": [
+ "/properties/SyncName"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "ssm:CreateResourceDataSync",
+ "ssm:ListResourceDataSync"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "ssm:ListResourceDataSync",
+ "ssm:DeleteResourceDataSync"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "ssm:ListResourceDataSync",
+ "ssm:UpdateResourceDataSync"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "ssm:ListResourceDataSync"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "ssm:ListResourceDataSync"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_ssmcontacts_contact.json b/tools/c7n_awscc/c7n_awscc/data/aws_ssmcontacts_contact.json
new file mode 100644
index 00000000000..4a3bfe0fd68
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_ssmcontacts_contact.json
@@ -0,0 +1,175 @@
+{
+ "typeName": "AWS::SSMContacts::Contact",
+ "description": "Resource Type definition for AWS::SSMContacts::Contact",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git",
+ "definitions": {
+ "ContactTargetInfo": {
+ "type": "object",
+ "description": "The contact that SSM Incident Manager is engaging during an incident.",
+ "properties": {
+ "ContactId": {
+ "description": "The Amazon Resource Name (ARN) of the contact.",
+ "type": "string"
+ },
+ "IsEssential": {
+ "type": "boolean",
+ "description": "A Boolean value determining if the contact's acknowledgement stops the progress of stages in the plan."
+ }
+ },
+ "required": [
+ "ContactId",
+ "IsEssential"
+ ],
+ "additionalProperties": false
+ },
+ "ChannelTargetInfo": {
+ "type": "object",
+ "description": "Information about the contact channel that SSM Incident Manager uses to engage the contact.",
+ "properties": {
+ "ChannelId": {
+ "description": "The Amazon Resource Name (ARN) of the contact channel.",
+ "type": "string"
+ },
+ "RetryIntervalInMinutes": {
+ "type": "integer",
+ "description": "The number of minutes to wait to retry sending engagement in the case the engagement initially fails."
+ }
+ },
+ "required": [
+ "ChannelId",
+ "RetryIntervalInMinutes"
+ ],
+ "additionalProperties": false
+ },
+ "Stage": {
+ "description": "A set amount of time that an escalation plan or engagement plan engages the specified contacts or contact methods.",
+ "type": "object",
+ "properties": {
+ "DurationInMinutes": {
+ "description": "The time to wait until beginning the next stage.",
+ "type": "integer"
+ },
+ "Targets": {
+ "type": "array",
+ "description": "The contacts or contact methods that the escalation plan or engagement plan is engaging.",
+ "items": {
+ "$ref": "#/definitions/Targets"
+ }
+ }
+ },
+ "required": [
+ "DurationInMinutes"
+ ],
+ "additionalProperties": false
+ },
+ "Targets": {
+ "description": "The contacts or contact methods that the escalation plan or engagement plan is engaging.",
+ "type": "object",
+ "properties": {
+ "ContactTargetInfo": {
+ "$ref": "#/definitions/ContactTargetInfo"
+ },
+ "ChannelTargetInfo": {
+ "$ref": "#/definitions/ChannelTargetInfo"
+ }
+ },
+ "additionalProperties": false,
+ "oneOf": [
+ {
+ "required": [
+ "ChannelTargetInfo"
+ ]
+ },
+ {
+ "required": [
+ "ContactTargetInfo"
+ ]
+ }
+ ]
+ }
+ },
+ "properties": {
+ "Alias": {
+ "description": "Alias of the contact. String value with 20 to 256 characters. Only alphabetical, numeric characters, dash, or underscore allowed.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 255,
+ "pattern": "^[a-z0-9_\\-\\.]*$"
+ },
+ "DisplayName": {
+ "description": "Name of the contact. String value with 3 to 256 characters. Only alphabetical, space, numeric characters, dash, or underscore allowed.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 255,
+ "pattern": "^[a-zA-Z0-9_\\-\\s]*$"
+ },
+ "Type": {
+ "description": "Contact type, which specify type of contact. Currently supported values: ?PERSONAL?, ?SHARED?, ?OTHER?.",
+ "type": "string",
+ "enum": [
+ "PERSONAL",
+ "CUSTOM",
+ "SERVICE",
+ "ESCALATION"
+ ]
+ },
+ "Plan": {
+ "description": "The stages that an escalation plan or engagement plan engages contacts and contact methods in.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Stage"
+ }
+ },
+ "Arn": {
+ "type": "string",
+ "description": "The Amazon Resource Name (ARN) of the contact."
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "Alias",
+ "DisplayName",
+ "Type",
+ "Plan"
+ ],
+ "primaryIdentifier": [
+ "/properties/Arn"
+ ],
+ "writeOnlyProperties": [
+ "/properties/Plan"
+ ],
+ "readOnlyProperties": [
+ "/properties/Arn"
+ ],
+ "createOnlyProperties": [
+ "/properties/Alias",
+ "/properties/Type"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "ssm-contacts:CreateContact"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "ssm-contacts:GetContact"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "ssm-contacts:UpdateContact"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "ssm-contacts:DeleteContact"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "ssm-contacts:ListContacts"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_ssmcontacts_contactchannel.json b/tools/c7n_awscc/c7n_awscc/data/aws_ssmcontacts_contactchannel.json
new file mode 100644
index 00000000000..3a386bfd4c5
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_ssmcontacts_contactchannel.json
@@ -0,0 +1,90 @@
+{
+ "typeName": "AWS::SSMContacts::ContactChannel",
+ "description": "Resource Type definition for AWS::SSMContacts::ContactChannel",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git",
+ "properties": {
+ "ContactId": {
+ "description": "ARN of the contact resource",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 2048,
+ "pattern": "arn:[-\\w+=\\/,.@]+:[-\\w+=\\/,.@]+:[-\\w+=\\/,.@]*:[0-9]+:([\\w+=\\/,.@:-]+)*"
+ },
+ "ChannelName": {
+ "description": "The device name. String of 6 to 50 alphabetical, numeric, dash, and underscore characters.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 255,
+ "pattern": "[a-zA-Z 0-9_\\-+'&\\uD83C-\\uDBFF\\uDC00-\\uDFFF\\u2000-\\u3300]+"
+ },
+ "ChannelType": {
+ "description": "Device type, which specify notification channel. Currently supported values: ?SMS?, ?VOICE?, ?EMAIL?, ?CHATBOT.",
+ "type": "string",
+ "enum": [
+ "SMS",
+ "VOICE",
+ "EMAIL"
+ ]
+ },
+ "DeferActivation": {
+ "type": "boolean",
+ "description": "If you want to activate the channel at a later time, you can choose to defer activation. SSM Incident Manager can't engage your contact channel until it has been activated."
+ },
+ "ChannelAddress": {
+ "description": "The details that SSM Incident Manager uses when trying to engage the contact channel.",
+ "type": "string"
+ },
+ "Arn": {
+ "type": "string",
+ "description": "The Amazon Resource Name (ARN) of the engagement to a contact channel."
+ }
+ },
+ "additionalProperties": false,
+ "oneOf": [
+ {
+ "required": [
+ "ContactId",
+ "ChannelName",
+ "ChannelType",
+ "ChannelAddress"
+ ]
+ }
+ ],
+ "primaryIdentifier": [
+ "/properties/Arn"
+ ],
+ "readOnlyProperties": [
+ "/properties/Arn"
+ ],
+ "createOnlyProperties": [
+ "/properties/ContactId",
+ "/properties/ChannelType"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "ssm-contacts:CreateContactChannel"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "ssm-contacts:GetContactChannel"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "ssm-contacts:UpdateContactChannel"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "ssm-contacts:DeleteContactChannel"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "ssm-contacts:ListContactChannels"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_ssmincidents_replicationset.json b/tools/c7n_awscc/c7n_awscc/data/aws_ssmincidents_replicationset.json
new file mode 100644
index 00000000000..936ff9e52a4
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_ssmincidents_replicationset.json
@@ -0,0 +1,118 @@
+{
+ "typeName": "AWS::SSMIncidents::ReplicationSet",
+ "description": "Resource type definition for AWS::SSMIncidents::ReplicationSet",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ssm-incidents.git",
+ "definitions": {
+ "Arn": {
+ "description": "The ARN of the ReplicationSet.",
+ "type": "string",
+ "pattern": "^arn:aws(-(cn|us-gov|iso(-b)?))?:[a-z-]+:(([a-z]+-)+[0-9])?:([0-9]{12})?:[^.]+$",
+ "maxLength": 1000
+ },
+ "RegionName": {
+ "description": "The AWS region name.",
+ "type": "string",
+ "maxLength": 20
+ },
+ "ReplicationRegion": {
+ "description": "The ReplicationSet regional configuration.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "RegionName": {
+ "$ref": "#/definitions/RegionName"
+ },
+ "RegionConfiguration": {
+ "$ref": "#/definitions/RegionConfiguration"
+ }
+ }
+ },
+ "RegionConfiguration": {
+ "description": "The ReplicationSet regional configuration.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "SseKmsKeyId": {
+ "$ref": "#/definitions/Arn"
+ }
+ },
+ "required": [
+ "SseKmsKeyId"
+ ]
+ },
+ "DeletionProtected": {
+ "description": "Configures the ReplicationSet deletion protection.",
+ "type": "boolean"
+ },
+ "RegionList": {
+ "type": "array",
+ "minItems": 1,
+ "maxItems": 3,
+ "items": {
+ "$ref": "#/definitions/ReplicationRegion"
+ },
+ "insertionOrder": false,
+ "uniqueItems": true
+ }
+ },
+ "properties": {
+ "Arn": {
+ "description": "The ARN of the ReplicationSet.",
+ "$ref": "#/definitions/Arn",
+ "additionalProperties": false
+ },
+ "Regions": {
+ "description": "The ReplicationSet configuration.",
+ "$ref": "#/definitions/RegionList"
+ },
+ "DeletionProtected": {
+ "$ref": "#/definitions/DeletionProtected",
+ "default": false
+ }
+ },
+ "additionalProperties": false,
+ "primaryIdentifier": [
+ "/properties/Arn"
+ ],
+ "required": [
+ "Regions"
+ ],
+ "taggable": false,
+ "readOnlyProperties": [
+ "/properties/Arn"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "ssm-incidents:CreateReplicationSet",
+ "ssm-incidents:ListReplicationSets",
+ "ssm-incidents:UpdateDeletionProtection",
+ "iam:CreateServiceLinkedRole"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "ssm-incidents:ListReplicationSets",
+ "ssm-incidents:GetReplicationSet"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "ssm-incidents:UpdateReplicationSet",
+ "ssm-incidents:UpdateDeletionProtection",
+ "ssm-incidents:GetReplicationSet"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "ssm-incidents:DeleteReplicationSet",
+ "ssm-incidents:GetReplicationSet"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "ssm-incidents:ListReplicationSets"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_ssmincidents_responseplan.json b/tools/c7n_awscc/c7n_awscc/data/aws_ssmincidents_responseplan.json
new file mode 100644
index 00000000000..5b9b91e5abe
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_ssmincidents_responseplan.json
@@ -0,0 +1,308 @@
+{
+ "typeName": "AWS::SSMIncidents::ResponsePlan",
+ "description": "Resource type definition for AWS::SSMIncidents::ResponsePlan",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-ssm-incidents.git",
+ "definitions": {
+ "SSMContact": {
+ "description": "The ARN of the contact.",
+ "type": "string",
+ "pattern": "^arn:aws(-(cn|us-gov))?:ssm-contacts:(([a-z]+-)+[0-9])?:([0-9]{12})?:[^.]+$",
+ "maxLength": 1000
+ },
+ "SnsArn": {
+ "description": "The ARN of the Chatbot SNS topic.",
+ "type": "string",
+ "pattern": "^arn:aws(-(cn|us-gov))?:sns:(([a-z]+-)+[0-9])?:([0-9]{12})?:[^.]+$",
+ "maxLength": 1000
+ },
+ "NotificationTargetItem": {
+ "description": "A notification target.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "SnsTopicArn": {
+ "$ref": "#/definitions/SnsArn"
+ }
+ }
+ },
+ "Action": {
+ "description": "The automation configuration to launch.",
+ "additionalProperties": false,
+ "type": "object",
+ "properties": {
+ "SsmAutomation": {
+ "$ref": "#/definitions/SsmAutomation"
+ }
+ }
+ },
+ "SsmAutomation": {
+ "description": "The configuration to use when starting the SSM automation document.",
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "RoleArn",
+ "DocumentName"
+ ],
+ "properties": {
+ "RoleArn": {
+ "description": "The role ARN to use when starting the SSM automation document.",
+ "type": "string",
+ "pattern": "^arn:aws(-(cn|us-gov))?:[a-z-]+:(([a-z]+-)+[0-9])?:([0-9]{12})?:[^.]+$",
+ "maxLength": 1000
+ },
+ "DocumentName": {
+ "description": "The document name to use when starting the SSM automation document.",
+ "type": "string",
+ "maxLength": 128
+ },
+ "DocumentVersion": {
+ "description": "The version of the document to use when starting the SSM automation document.",
+ "type": "string",
+ "maxLength": 128
+ },
+ "TargetAccount": {
+ "description": "The account type to use when starting the SSM automation document.",
+ "type": "string",
+ "enum": [
+ "IMPACTED_ACCOUNT",
+ "RESPONSE_PLAN_OWNER_ACCOUNT"
+ ]
+ },
+ "Parameters": {
+ "description": "The parameters to set when starting the SSM automation document.",
+ "type": "array",
+ "uniqueItems": true,
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/SsmParameter"
+ },
+ "maxItems": 200
+ }
+ }
+ },
+ "SsmParameter": {
+ "description": "A parameter to set when starting the SSM automation document.",
+ "type": "object",
+ "properties": {
+ "Key": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 50
+ },
+ "Values": {
+ "type": "array",
+ "uniqueItems": true,
+ "insertionOrder": true,
+ "maxItems": 10,
+ "minItems": 1,
+ "items": {
+ "$ref": "#/definitions/SsmParameterValue"
+ }
+ }
+ },
+ "required": [
+ "Values",
+ "Key"
+ ],
+ "additionalProperties": false
+ },
+ "SsmParameterValue": {
+ "description": "A value of the parameter to set when starting the SSM automation document.",
+ "type": "string",
+ "maxLength": 10000
+ },
+ "Tag": {
+ "description": "A key-value pair to tag a resource.",
+ "additionalProperties": false,
+ "type": "object",
+ "properties": {
+ "Key": {
+ "type": "string",
+ "pattern": "^(?!aws:)[a-zA-Z+-=._:/]+$",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Value": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 256
+ }
+ },
+ "required": [
+ "Value",
+ "Key"
+ ]
+ },
+ "IncidentTemplate": {
+ "description": "The incident template configuration.",
+ "additionalProperties": false,
+ "type": "object",
+ "required": [
+ "Title",
+ "Impact"
+ ],
+ "properties": {
+ "DedupeString": {
+ "description": "The deduplication string.",
+ "type": "string",
+ "maxLength": 1000,
+ "minLength": 1
+ },
+ "Impact": {
+ "description": "The impact value.",
+ "type": "integer",
+ "minimum": 1,
+ "maximum": 5
+ },
+ "NotificationTargets": {
+ "description": "The list of notification targets.",
+ "type": "array",
+ "maxItems": 10,
+ "items": {
+ "$ref": "#/definitions/NotificationTargetItem"
+ },
+ "insertionOrder": false
+ },
+ "Summary": {
+ "description": "The summary string.",
+ "type": "string",
+ "maxLength": 4000,
+ "minLength": 1
+ },
+ "Title": {
+ "description": "The title string.",
+ "type": "string",
+ "maxLength": 200
+ }
+ }
+ },
+ "ChatbotSns": {
+ "type": "array",
+ "uniqueItems": true,
+ "insertionOrder": true,
+ "items": {
+ "$ref": "#/definitions/SnsArn"
+ }
+ },
+ "ChatChannel": {
+ "description": "The chat channel configuration.",
+ "additionalProperties": false,
+ "type": "object",
+ "properties": {
+ "ChatbotSns": {
+ "$ref": "#/definitions/ChatbotSns"
+ }
+ }
+ }
+ },
+ "properties": {
+ "Arn": {
+ "description": "The ARN of the response plan.",
+ "type": "string",
+ "pattern": "^arn:aws(-(cn|us-gov))?:[a-z-]+:(([a-z]+-)+[0-9])?:([0-9]{12})?:[^.]+$",
+ "maxLength": 1000
+ },
+ "Name": {
+ "description": "The name of the response plan.",
+ "type": "string",
+ "pattern": "^[a-zA-Z0-9_-]*$",
+ "maxLength": 200,
+ "minLength": 1
+ },
+ "DisplayName": {
+ "description": "The display name of the response plan.",
+ "type": "string",
+ "maxLength": 200,
+ "minLength": 1
+ },
+ "ChatChannel": {
+ "$ref": "#/definitions/ChatChannel"
+ },
+ "Engagements": {
+ "description": "The list of engagements to use.",
+ "type": "array",
+ "default": [],
+ "maxItems": 5,
+ "minItems": 1,
+ "uniqueItems": true,
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/SSMContact"
+ }
+ },
+ "Actions": {
+ "description": "The list of actions.",
+ "type": "array",
+ "default": [],
+ "uniqueItems": true,
+ "insertionOrder": true,
+ "maxItems": 1,
+ "items": {
+ "$ref": "#/definitions/Action"
+ }
+ },
+ "Tags": {
+ "description": "The tags to apply to the response plan.",
+ "type": "array",
+ "default": [],
+ "uniqueItems": true,
+ "insertionOrder": false,
+ "minItems": 1,
+ "maxItems": 50,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ },
+ "IncidentTemplate": {
+ "$ref": "#/definitions/IncidentTemplate"
+ }
+ },
+ "additionalProperties": false,
+ "primaryIdentifier": [
+ "/properties/Arn"
+ ],
+ "createOnlyProperties": [
+ "/properties/Name"
+ ],
+ "readOnlyProperties": [
+ "/properties/Arn"
+ ],
+ "required": [
+ "Name",
+ "IncidentTemplate"
+ ],
+ "taggable": true,
+ "handlers": {
+ "create": {
+ "permissions": [
+ "ssm-incidents:CreateResponsePlan",
+ "iam:PassRole"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "ssm-incidents:GetResponsePlan",
+ "ssm-incidents:ListTagsForResource"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "ssm-incidents:UpdateResponsePlan",
+ "iam:PassRole",
+ "ssm-incidents:TagResource",
+ "ssm-incidents:UntagResource",
+ "ssm-incidents:ListTagsForResource"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "ssm-incidents:DeleteResponsePlan"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "ssm-incidents:ListResponsePlans"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_sso_instanceaccesscontrolattributeconfiguration.json b/tools/c7n_awscc/c7n_awscc/data/aws_sso_instanceaccesscontrolattributeconfiguration.json
new file mode 100644
index 00000000000..ab7b34b9b2c
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_sso_instanceaccesscontrolattributeconfiguration.json
@@ -0,0 +1,130 @@
+{
+ "typeName": "AWS::SSO::InstanceAccessControlAttributeConfiguration",
+ "taggable": false,
+ "description": "Resource Type definition for SSO InstanceAccessControlAttributeConfiguration",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sso/aws-sso-instanceaccesscontrolattributeconfiguration",
+ "definitions": {
+ "AccessControlAttributeValueSource": {
+ "type": "string",
+ "minLength": 0,
+ "maxLength": 256,
+ "pattern": "[\\p{L}\\p{Z}\\p{N}_.:\\/=+\\-@\\[\\]\\{\\}\\$\\\\\"]*"
+ },
+ "AccessControlAttributeValueSourceList": {
+ "type": "array",
+ "insertionOrder": true,
+ "items": {
+ "$ref": "#/definitions/AccessControlAttributeValueSource"
+ },
+ "maxItems": 1
+ },
+ "AccessControlAttributeValue": {
+ "type": "object",
+ "properties": {
+ "Source": {
+ "$ref": "#/definitions/AccessControlAttributeValueSourceList"
+ }
+ },
+ "required": [
+ "Source"
+ ],
+ "additionalProperties": false
+ },
+ "AccessControlAttribute": {
+ "type": "object",
+ "properties": {
+ "Key": {
+ "type": "string",
+ "pattern": "[\\p{L}\\p{Z}\\p{N}_.:\\/=+\\-@]+",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Value": {
+ "$ref": "#/definitions/AccessControlAttributeValue"
+ }
+ },
+ "required": [
+ "Key",
+ "Value"
+ ],
+ "additionalProperties": false
+ },
+ "AccessControlAttributeList": {
+ "type": "array",
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/AccessControlAttribute"
+ },
+ "maxItems": 50
+ }
+ },
+ "properties": {
+ "InstanceArn": {
+ "description": "The ARN of the AWS SSO instance under which the operation will be executed.",
+ "type": "string",
+ "pattern": "arn:(aws|aws-us-gov|aws-cn|aws-iso|aws-iso-b):sso:::instance/(sso)?ins-[a-zA-Z0-9-.]{16}",
+ "minLength": 10,
+ "maxLength": 1224
+ },
+ "InstanceAccessControlAttributeConfiguration": {
+ "description": "The InstanceAccessControlAttributeConfiguration property has been deprecated but is still supported for backwards compatibility purposes. We recomend that you use AccessControlAttributes property instead.",
+ "type": "object",
+ "properties": {
+ "AccessControlAttributes": {
+ "$ref": "#/definitions/AccessControlAttributeList"
+ }
+ },
+ "required": [
+ "AccessControlAttributes"
+ ],
+ "additionalProperties": false
+ },
+ "AccessControlAttributes": {
+ "$ref": "#/definitions/AccessControlAttributeList"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "InstanceArn"
+ ],
+ "createOnlyProperties": [
+ "/properties/InstanceArn"
+ ],
+ "primaryIdentifier": [
+ "/properties/InstanceArn"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "sso:CreateInstanceAccessControlAttributeConfiguration",
+ "sso:UpdateApplicationProfileForAWSAccountInstance",
+ "sso:DescribeInstanceAccessControlAttributeConfiguration"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "sso:DescribeInstanceAccessControlAttributeConfiguration"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "sso:UpdateInstanceAccessControlAttributeConfiguration",
+ "sso:DescribeInstanceAccessControlAttributeConfiguration"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "sso:DeleteInstanceAccessControlAttributeConfiguration",
+ "sso:DescribeInstanceAccessControlAttributeConfiguration"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "sso:DescribeInstanceAccessControlAttributeConfiguration"
+ ]
+ }
+ },
+ "deprecatedProperties": [
+ "/properties/InstanceAccessControlAttributeConfiguration"
+ ]
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_sso_permissionset.json b/tools/c7n_awscc/c7n_awscc/data/aws_sso_permissionset.json
new file mode 100644
index 00000000000..a87e63d23e8
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_sso_permissionset.json
@@ -0,0 +1,164 @@
+{
+ "typeName": "AWS::SSO::PermissionSet",
+ "taggable": true,
+ "description": "Resource Type definition for SSO PermissionSet",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-sso/aws-sso-permissionset",
+ "definitions": {
+ "Tag": {
+ "description": "The metadata that you apply to the permission set to help you categorize and organize them.",
+ "type": "object",
+ "properties": {
+ "Key": {
+ "type": "string",
+ "pattern": "[\\w+=,.@-]+",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Value": {
+ "type": "string",
+ "pattern": "[\\w+=,.@-]+",
+ "minLength": 0,
+ "maxLength": 256
+ }
+ },
+ "required": [
+ "Key",
+ "Value"
+ ],
+ "additionalProperties": false
+ },
+ "ManagedPolicyArn": {
+ "description": "The managed policy to attach.",
+ "type": "string",
+ "minLength": 20,
+ "maxLength": 2048
+ }
+ },
+ "properties": {
+ "Name": {
+ "description": "The name you want to assign to this permission set.",
+ "type": "string",
+ "pattern": "[\\w+=,.@-]+",
+ "minLength": 1,
+ "maxLength": 32
+ },
+ "PermissionSetArn": {
+ "description": "The permission set that the policy will be attached to",
+ "type": "string",
+ "pattern": "arn:(aws|aws-us-gov|aws-cn|aws-iso|aws-iso-b):sso:::permissionSet/(sso)?ins-[a-zA-Z0-9-.]{16}/ps-[a-zA-Z0-9-./]{16}",
+ "minLength": 10,
+ "maxLength": 1224
+ },
+ "Description": {
+ "description": "The permission set description.",
+ "type": "string",
+ "pattern": "[\\p{L}\\p{M}\\p{Z}\\p{S}\\p{N}\\p{P}]*",
+ "minLength": 1,
+ "maxLength": 700
+ },
+ "InstanceArn": {
+ "description": "The sso instance arn that the permission set is owned.",
+ "type": "string",
+ "pattern": "arn:(aws|aws-us-gov|aws-cn|aws-iso|aws-iso-b):sso:::instance/(sso)?ins-[a-zA-Z0-9-.]{16}",
+ "minLength": 10,
+ "maxLength": 1224
+ },
+ "SessionDuration": {
+ "description": "The length of time that a user can be signed in to an AWS account.",
+ "type": "string",
+ "pattern": "^(-?)P(?=\\d|T\\d)(?:(\\d+)Y)?(?:(\\d+)M)?(?:(\\d+)([DW]))?(?:T(?:(\\d+)H)?(?:(\\d+)M)?(?:(\\d+(?:\\.\\d+)?)S)?)?$",
+ "minLength": 1,
+ "maxLength": 100
+ },
+ "RelayStateType": {
+ "description": "The relay state URL that redirect links to any service in the AWS Management Console.",
+ "type": "string",
+ "pattern": "[a-zA-Z0-9&$@#\\/%?=~\\-_'"|!:,.;*+\\[\\]\\ \\(\\)\\{\\}]+",
+ "minLength": 1,
+ "maxLength": 240
+ },
+ "ManagedPolicies": {
+ "type": "array",
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/ManagedPolicyArn"
+ },
+ "maxItems": 20
+ },
+ "InlinePolicy": {
+ "description": "The inline policy to put in permission set.",
+ "type": [
+ "object",
+ "string"
+ ]
+ },
+ "Tags": {
+ "type": "array",
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ },
+ "maxItems": 50
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "Name",
+ "InstanceArn"
+ ],
+ "createOnlyProperties": [
+ "/properties/InstanceArn",
+ "/properties/Name"
+ ],
+ "readOnlyProperties": [
+ "/properties/PermissionSetArn"
+ ],
+ "primaryIdentifier": [
+ "/properties/InstanceArn",
+ "/properties/PermissionSetArn"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "sso:CreatePermissionSet",
+ "sso:PutInlinePolicyToPermissionSet",
+ "sso:AttachManagedPolicyToPermissionSet",
+ "sso:ListManagedPoliciesInPermissionSet",
+ "sso:TagResource"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "sso:DescribePermissionSet",
+ "sso:ListTagsForResource",
+ "sso:ListManagedPoliciesInPermissionSet",
+ "sso:GetInlinePolicyForPermissionSet"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "sso:UpdatePermissionSet",
+ "sso:TagResource",
+ "sso:UntagResource",
+ "sso:ListTagsForResource",
+ "sso:AttachManagedPolicyToPermissionSet",
+ "sso:DetachManagedPolicyFromPermissionSet",
+ "sso:ListManagedPoliciesInPermissionSet",
+ "sso:PutInlinePolicyToPermissionSet",
+ "sso:DeleteInlinePolicyFromPermissionSet",
+ "sso:ProvisionPermissionSet",
+ "sso:DescribePermissionSetProvisioningStatus"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "sso:DeletePermissionSet"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "sso:DescribePermissionSet"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_stepfunctions_activity.json b/tools/c7n_awscc/c7n_awscc/data/aws_stepfunctions_activity.json
new file mode 100644
index 00000000000..650c83ae3bf
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_stepfunctions_activity.json
@@ -0,0 +1,84 @@
+{
+ "typeName": "AWS::StepFunctions::Activity",
+ "description": "Resource schema for Activity",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-stepfunctions.git",
+ "definitions": {
+ "TagsEntry": {
+ "type": "object",
+ "properties": {
+ "Key": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Value": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 256
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "Key",
+ "Value"
+ ]
+ }
+ },
+ "properties": {
+ "Arn": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 2048
+ },
+ "Name": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 80
+ },
+ "Tags": {
+ "type": "array",
+ "uniqueItems": false,
+ "items": {
+ "$ref": "#/definitions/TagsEntry"
+ }
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "Name"
+ ],
+ "primaryIdentifier": [
+ "/properties/Arn"
+ ],
+ "readOnlyProperties": [
+ "/properties/Arn"
+ ],
+ "createOnlyProperties": [
+ "/properties/Name"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "states:CreateActivity"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "states:DescribeActivity",
+ "states:ListTagsForResource"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "states:ListTagsForResource",
+ "states:TagResource",
+ "states:UntagResource"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "states:DeleteActivity"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_stepfunctions_statemachine.json b/tools/c7n_awscc/c7n_awscc/data/aws_stepfunctions_statemachine.json
new file mode 100644
index 00000000000..dd9f8dc5674
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_stepfunctions_statemachine.json
@@ -0,0 +1,219 @@
+{
+ "typeName": "AWS::StepFunctions::StateMachine",
+ "description": "Resource schema for StateMachine",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-stepfunctions.git",
+ "definitions": {
+ "TagsEntry": {
+ "type": "object",
+ "properties": {
+ "Key": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Value": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 256
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "Key",
+ "Value"
+ ]
+ },
+ "CloudWatchLogsLogGroup": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "LogGroupArn": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 256
+ }
+ }
+ },
+ "LogDestination": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "CloudWatchLogsLogGroup": {
+ "$ref": "#/definitions/CloudWatchLogsLogGroup"
+ }
+ }
+ },
+ "LoggingConfiguration": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Level": {
+ "type": "string",
+ "enum": [
+ "ALL",
+ "ERROR",
+ "FATAL",
+ "OFF"
+ ]
+ },
+ "IncludeExecutionData": {
+ "type": "boolean"
+ },
+ "Destinations": {
+ "type": "array",
+ "minItems": 1,
+ "items": {
+ "$ref": "#/definitions/LogDestination"
+ }
+ }
+ }
+ },
+ "TracingConfiguration": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Enabled": {
+ "type": "boolean"
+ }
+ }
+ },
+ "S3Location": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Bucket": {
+ "type": "string"
+ },
+ "Key": {
+ "type": "string"
+ },
+ "Version": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "Bucket",
+ "Key"
+ ]
+ },
+ "DefinitionSubstitutions": {
+ "type": "object",
+ "additionalProperties": false,
+ "patternProperties": {
+ ".*": {
+ "type": "string"
+ }
+ },
+ "minProperties": 1
+ },
+ "Definition": {
+ "type": "object",
+ "minProperties": 1
+ }
+ },
+ "properties": {
+ "Arn": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 2048
+ },
+ "Name": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 80
+ },
+ "DefinitionString": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 1048576
+ },
+ "RoleArn": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 256
+ },
+ "StateMachineName": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 80
+ },
+ "StateMachineType": {
+ "type": "string",
+ "enum": [
+ "STANDARD",
+ "EXPRESS"
+ ]
+ },
+ "LoggingConfiguration": {
+ "$ref": "#/definitions/LoggingConfiguration"
+ },
+ "TracingConfiguration": {
+ "$ref": "#/definitions/TracingConfiguration"
+ },
+ "DefinitionS3Location": {
+ "$ref": "#/definitions/S3Location"
+ },
+ "DefinitionSubstitutions": {
+ "$ref": "#/definitions/DefinitionSubstitutions"
+ },
+ "Definition": {
+ "$ref": "#/definitions/Definition"
+ },
+ "Tags": {
+ "type": "array",
+ "uniqueItems": false,
+ "items": {
+ "$ref": "#/definitions/TagsEntry"
+ }
+ }
+ },
+ "required": [
+ "RoleArn"
+ ],
+ "additionalProperties": false,
+ "readOnlyProperties": [
+ "/properties/Arn",
+ "/properties/Name"
+ ],
+ "createOnlyProperties": [
+ "/properties/StateMachineName"
+ ],
+ "writeOnlyProperties": [
+ "/properties/Definition",
+ "/properties/DefinitionS3Location",
+ "/properties/DefinitionSubstitutions"
+ ],
+ "primaryIdentifier": [
+ "/properties/Arn"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "states:CreateStateMachine",
+ "iam:PassRole",
+ "s3:GetObject"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "states:DescribeStateMachine",
+ "states:ListTagsForResource"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "states:UpdateStateMachine",
+ "states:TagResource",
+ "states:UntagResource",
+ "states:ListTagsForResource",
+ "iam:PassRole"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "states:DeleteStateMachine",
+ "states:DescribeStateMachine"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_synthetics_canary.json b/tools/c7n_awscc/c7n_awscc/data/aws_synthetics_canary.json
new file mode 100644
index 00000000000..5997941a02b
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_synthetics_canary.json
@@ -0,0 +1,352 @@
+{
+ "typeName": "AWS::Synthetics::Canary",
+ "description": "Resource Type definition for AWS::Synthetics::Canary",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-synthetics",
+ "properties": {
+ "Name": {
+ "description": "Name of the canary.",
+ "type": "string",
+ "pattern": "^[0-9a-z_\\-]{1,21}$"
+ },
+ "Id": {
+ "description": "Id of the canary",
+ "type": "string"
+ },
+ "State": {
+ "description": "State of the canary",
+ "type": "string"
+ },
+ "Code": {
+ "description": "Provide the canary script source",
+ "$ref": "#/definitions/Code"
+ },
+ "ArtifactS3Location": {
+ "description": "Provide the s3 bucket output location for test results",
+ "type": "string",
+ "pattern": "^(s3|S3)://"
+ },
+ "ArtifactConfig": {
+ "description": "Provide artifact configuration",
+ "$ref": "#/definitions/ArtifactConfig"
+ },
+ "Schedule": {
+ "description": "Frequency to run your canaries",
+ "$ref": "#/definitions/Schedule"
+ },
+ "ExecutionRoleArn": {
+ "description": "Lambda Execution role used to run your canaries",
+ "type": "string"
+ },
+ "RuntimeVersion": {
+ "description": "Runtime version of Synthetics Library",
+ "type": "string"
+ },
+ "SuccessRetentionPeriod": {
+ "description": "Retention period of successful canary runs represented in number of days",
+ "type": "integer"
+ },
+ "FailureRetentionPeriod": {
+ "description": "Retention period of failed canary runs represented in number of days",
+ "type": "integer"
+ },
+ "Tags": {
+ "type": "array",
+ "uniqueItems": false,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ },
+ "VPCConfig": {
+ "description": "Provide VPC Configuration if enabled.",
+ "$ref": "#/definitions/VPCConfig"
+ },
+ "RunConfig": {
+ "description": "Provide canary run configuration",
+ "$ref": "#/definitions/RunConfig"
+ },
+ "StartCanaryAfterCreation": {
+ "description": "Runs canary if set to True. Default is False",
+ "type": "boolean"
+ },
+ "VisualReference": {
+ "description": "Visual reference configuration for visual testing",
+ "$ref": "#/definitions/VisualReference"
+ }
+ },
+ "definitions": {
+ "Schedule": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Expression": {
+ "type": "string"
+ },
+ "DurationInSeconds": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "Expression"
+ ]
+ },
+ "Code": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "S3Bucket": {
+ "type": "string"
+ },
+ "S3Key": {
+ "type": "string"
+ },
+ "S3ObjectVersion": {
+ "type": "string"
+ },
+ "Script": {
+ "type": "string"
+ },
+ "Handler": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "Handler"
+ ],
+ "oneOf": [
+ {
+ "required": [
+ "S3Bucket",
+ "S3Key"
+ ]
+ },
+ {
+ "required": [
+ "Script"
+ ]
+ }
+ ]
+ },
+ "Tag": {
+ "description": "A key-value pair to associate with a resource.",
+ "additionalProperties": false,
+ "type": "object",
+ "properties": {
+ "Key": {
+ "type": "string",
+ "description": "The key name of the tag. You can specify a value that is 1 to 127 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. ",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Value": {
+ "type": "string",
+ "description": "The value for the tag. You can specify a value that is 1 to 255 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -. ",
+ "minLength": 0,
+ "maxLength": 256
+ }
+ },
+ "required": [
+ "Value",
+ "Key"
+ ]
+ },
+ "VPCConfig": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "VpcId": {
+ "type": "string"
+ },
+ "SubnetIds": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "SecurityGroupIds": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ },
+ "required": [
+ "SubnetIds",
+ "SecurityGroupIds"
+ ]
+ },
+ "RunConfig": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "TimeoutInSeconds": {
+ "description": "Provide maximum canary timeout per run in seconds",
+ "type": "integer"
+ },
+ "MemoryInMB": {
+ "description": "Provide maximum memory available for canary in MB",
+ "type": "integer"
+ },
+ "ActiveTracing": {
+ "description": "Enable active tracing if set to true",
+ "type": "boolean"
+ },
+ "EnvironmentVariables": {
+ "type": "object",
+ "additionalProperties": false,
+ "description": "Environment variable key-value pairs.",
+ "patternProperties": {
+ "[a-zA-Z][a-zA-Z0-9_]+": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ },
+ "VisualReference": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "BaseCanaryRunId": {
+ "type": "string",
+ "description": "Canary run id to be used as base reference for visual testing"
+ },
+ "BaseScreenshots": {
+ "type": "array",
+ "description": "List of screenshots used as base reference for visual testing",
+ "items": {
+ "$ref": "#/definitions/BaseScreenshot"
+ }
+ }
+ },
+ "required": [
+ "BaseCanaryRunId"
+ ]
+ },
+ "BaseScreenshot": {
+ "type": "object",
+ "properties": {
+ "ScreenshotName": {
+ "type": "string",
+ "description": "Name of the screenshot to be used as base reference for visual testing"
+ },
+ "IgnoreCoordinates": {
+ "type": "array",
+ "description": "List of coordinates of rectangles to be ignored during visual testing",
+ "items": {
+ "type": "string",
+ "description": "Coordinates of a rectangle to be ignored during visual testing"
+ }
+ }
+ },
+ "required": [
+ "ScreenshotName"
+ ]
+ },
+ "ArtifactConfig": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "S3Encryption": {
+ "$ref": "#/definitions/S3Encryption",
+ "description": "Encryption configuration for uploading artifacts to S3"
+ }
+ }
+ },
+ "S3Encryption": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "EncryptionMode": {
+ "type": "string",
+ "description": "Encryption mode for encrypting artifacts when uploading to S3. Valid values: SSE_S3 and SSE_KMS."
+ },
+ "KmsKeyArn": {
+ "type": "string",
+ "description": "KMS key Arn for encrypting artifacts when uploading to S3. You must specify KMS key Arn for SSE_KMS encryption mode only."
+ }
+ }
+ }
+ },
+ "required": [
+ "Name",
+ "Code",
+ "ArtifactS3Location",
+ "ExecutionRoleArn",
+ "Schedule",
+ "RuntimeVersion",
+ "StartCanaryAfterCreation"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "synthetics:CreateCanary",
+ "synthetics:StartCanary",
+ "s3:CreateBucket",
+ "s3:GetObject",
+ "s3:GetObjectVersion",
+ "s3:PutBucketEncryption",
+ "s3:PutEncryptionConfiguration",
+ "lambda:CreateFunction",
+ "lambda:AddPermission",
+ "lambda:PublishVersion",
+ "lambda:UpdateFunctionConfiguration",
+ "lambda:GetFunctionConfiguration",
+ "lambda:GetLayerVersionByArn",
+ "lambda:GetLayerVersion",
+ "lambda:PublishLayerVersion",
+ "ec2:DescribeVpcs",
+ "ec2:DescribeSubnets",
+ "ec2:DescribeSecurityGroups",
+ "iam:PassRole"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "synthetics:UpdateCanary",
+ "synthetics:StartCanary",
+ "synthetics:StopCanary",
+ "synthetics:TagResource",
+ "synthetics:UntagResource"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "synthetics:GetCanary",
+ "synthetics:DescribeCanaries",
+ "synthetics:ListTagsForResource",
+ "iam:ListRoles",
+ "s3:ListAllMyBuckets",
+ "s3:GetBucketLocation"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "synthetics:DeleteCanary",
+ "synthetics:GetCanary"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "synthetics:DescribeCanaries"
+ ]
+ }
+ },
+ "additionalProperties": false,
+ "createOnlyProperties": [
+ "/properties/Name"
+ ],
+ "primaryIdentifier": [
+ "/properties/Name"
+ ],
+ "readOnlyProperties": [
+ "/properties/Id",
+ "/properties/State",
+ "/properties/Code/SourceLocationArn"
+ ],
+ "writeOnlyProperties": [
+ "/properties/Code/S3Bucket",
+ "/properties/Code/S3Key",
+ "/properties/Code/S3ObjectVersion",
+ "/properties/Code/Script"
+ ]
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_timestream_database.json b/tools/c7n_awscc/c7n_awscc/data/aws_timestream_database.json
new file mode 100644
index 00000000000..27545b6403e
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_timestream_database.json
@@ -0,0 +1,94 @@
+{
+ "typeName": "AWS::Timestream::Database",
+ "description": "The AWS::Timestream::Database resource creates a Timestream database.",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-timestream.git",
+ "definitions": {
+ "Tag": {
+ "description": "You can use the Resource Tags property to apply tags to resources, which can help you identify and categorize those resources.",
+ "type": "object",
+ "properties": {
+ "Key": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Value": {
+ "type": "string",
+ "minLength": 0,
+ "maxLength": 256
+ }
+ },
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "Arn": {
+ "type": "string"
+ },
+ "DatabaseName": {
+ "description": "The name for the database. If you don't specify a name, AWS CloudFormation generates a unique physical ID and uses that ID for the database name.",
+ "type": "string",
+ "pattern": "^[a-zA-Z0-9_.-]{3,256}$"
+ },
+ "KmsKeyId": {
+ "description": "The KMS key for the database. If the KMS key is not specified, the database will be encrypted with a Timestream managed KMS key located in your account.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 2048
+ },
+ "Tags": {
+ "description": "An array of key-value pairs to apply to this resource.",
+ "type": "array",
+ "maxItems": 200,
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ }
+ },
+ "additionalProperties": false,
+ "primaryIdentifier": [
+ "/properties/DatabaseName"
+ ],
+ "createOnlyProperties": [
+ "/properties/DatabaseName"
+ ],
+ "readOnlyProperties": [
+ "/properties/Arn"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "timestream:CreateDatabase",
+ "timestream:DescribeEndpoints"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "timestream:DescribeDatabase",
+ "timestream:DescribeEndpoints",
+ "timestream:ListTagsForResource"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "timestream:UpdateDatabase",
+ "timestream:DescribeEndpoints",
+ "timestream:TagResource",
+ "timestream:UntagResource"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "timestream:DeleteDatabase",
+ "timestream:DescribeEndpoints"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "timestream:ListDatabases",
+ "timestream:DescribeEndpoints"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_timestream_scheduledquery.json b/tools/c7n_awscc/c7n_awscc/data/aws_timestream_scheduledquery.json
new file mode 100644
index 00000000000..3eb526a42f2
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_timestream_scheduledquery.json
@@ -0,0 +1,545 @@
+{
+ "typeName": "AWS::Timestream::ScheduledQuery",
+ "description": "The AWS::Timestream::ScheduledQuery resource creates a Timestream Scheduled Query.",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-timestream.git",
+ "definitions": {
+ "Arn": {
+ "description": "Amazon Resource Name of the scheduled query that is generated upon creation.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 2048
+ },
+ "ScheduledQueryName": {
+ "description": "The name of the scheduled query. Scheduled query names must be unique within each Region.",
+ "type": "string",
+ "pattern": "[a-zA-Z0-9_.-]+",
+ "minLength": 1,
+ "maxLength": 64
+ },
+ "QueryString": {
+ "description": "The query string to run. Parameter names can be specified in the query string @ character followed by an identifier. The named Parameter @scheduled_runtime is reserved and can be used in the query to get the time at which the query is scheduled to run. The timestamp calculated according to the ScheduleConfiguration parameter, will be the value of @scheduled_runtime paramater for each query run. For example, consider an instance of a scheduled query executing on 2021-12-01 00:00:00. For this instance, the @scheduled_runtime parameter is initialized to the timestamp 2021-12-01 00:00:00 when invoking the query.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 262144
+ },
+ "ScheduleConfiguration": {
+ "description": "Configuration for when the scheduled query is executed.",
+ "type": "object",
+ "properties": {
+ "ScheduleExpression": {
+ "$ref": "#/definitions/ScheduleExpression"
+ }
+ },
+ "required": [
+ "ScheduleExpression"
+ ],
+ "additionalProperties": false
+ },
+ "NotificationConfiguration": {
+ "description": "Notification configuration for the scheduled query. A notification is sent by Timestream when a query run finishes, when the state is updated or when you delete it.",
+ "type": "object",
+ "properties": {
+ "SnsConfiguration": {
+ "$ref": "#/definitions/SnsConfiguration"
+ }
+ },
+ "required": [
+ "SnsConfiguration"
+ ],
+ "additionalProperties": false
+ },
+ "ClientToken": {
+ "description": "Using a ClientToken makes the call to CreateScheduledQuery idempotent, in other words, making the same request repeatedly will produce the same result. Making multiple identical CreateScheduledQuery requests has the same effect as making a single request. If CreateScheduledQuery is called without a ClientToken, the Query SDK generates a ClientToken on your behalf. After 8 hours, any request with the same ClientToken is treated as a new request.",
+ "type": "string",
+ "minLength": 32,
+ "maxLength": 128
+ },
+ "ScheduledQueryExecutionRoleArn": {
+ "description": "The ARN for the IAM role that Timestream will assume when running the scheduled query.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 2048
+ },
+ "TargetConfiguration": {
+ "description": "Configuration of target store where scheduled query results are written to.",
+ "type": "object",
+ "properties": {
+ "TimestreamConfiguration": {
+ "$ref": "#/definitions/TimestreamConfiguration"
+ }
+ },
+ "required": [
+ "TimestreamConfiguration"
+ ],
+ "additionalProperties": false
+ },
+ "ErrorReportConfiguration": {
+ "description": "Configuration for error reporting. Error reports will be generated when a problem is encountered when writing the query results.",
+ "type": "object",
+ "properties": {
+ "S3Configuration": {
+ "$ref": "#/definitions/S3Configuration"
+ }
+ },
+ "required": [
+ "S3Configuration"
+ ],
+ "additionalProperties": false
+ },
+ "KmsKeyId": {
+ "description": "The Amazon KMS key used to encrypt the scheduled query resource, at-rest. If the Amazon KMS key is not specified, the scheduled query resource will be encrypted with a Timestream owned Amazon KMS key. To specify a KMS key, use the key ID, key ARN, alias name, or alias ARN. When using an alias name, prefix the name with alias/. If ErrorReportConfiguration uses SSE_KMS as encryption type, the same KmsKeyId is used to encrypt the error report at rest.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 2048
+ },
+ "Tags": {
+ "description": "A list of key-value pairs to label the scheduled query.",
+ "type": "array",
+ "insertionOrder": false,
+ "maxItems": 200,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ },
+ "ScheduleExpression": {
+ "description": "An expression that denotes when to trigger the scheduled query run. This can be a cron expression or a rate expression.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 256
+ },
+ "SnsConfiguration": {
+ "description": "SNS configuration for notification upon scheduled query execution.",
+ "type": "object",
+ "properties": {
+ "TopicArn": {
+ "$ref": "#/definitions/TopicArn"
+ }
+ },
+ "required": [
+ "TopicArn"
+ ],
+ "additionalProperties": false
+ },
+ "TopicArn": {
+ "description": "SNS topic ARN that the scheduled query status notifications will be sent to.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 2048
+ },
+ "TimestreamConfiguration": {
+ "description": "Configuration needed to write data into the Timestream database and table.",
+ "type": "object",
+ "properties": {
+ "DatabaseName": {
+ "$ref": "#/definitions/DatabaseName"
+ },
+ "TableName": {
+ "$ref": "#/definitions/TableName"
+ },
+ "TimeColumn": {
+ "$ref": "#/definitions/TimeColumn"
+ },
+ "DimensionMappings": {
+ "$ref": "#/definitions/DimensionMappings"
+ },
+ "MultiMeasureMappings": {
+ "$ref": "#/definitions/MultiMeasureMappings"
+ },
+ "MixedMeasureMappings": {
+ "$ref": "#/definitions/MixedMeasureMappings"
+ },
+ "MeasureNameColumn": {
+ "$ref": "#/definitions/MeasureNameColumn"
+ }
+ },
+ "required": [
+ "DatabaseName",
+ "TableName",
+ "TimeColumn",
+ "DimensionMappings"
+ ],
+ "additionalProperties": false
+ },
+ "DatabaseName": {
+ "description": "Name of Timestream database to which the query result will be written.",
+ "type": "string"
+ },
+ "TableName": {
+ "description": "Name of Timestream table that the query result will be written to. The table should be within the same database that is provided in Timestream configuration.",
+ "type": "string"
+ },
+ "TimeColumn": {
+ "description": "Column from query result that should be used as the time column in destination table. Column type for this should be TIMESTAMP.",
+ "type": "string"
+ },
+ "DimensionMappings": {
+ "description": "This is to allow mapping column(s) from the query result to the dimension in the destination table.",
+ "type": "array",
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/DimensionMapping"
+ }
+ },
+ "DimensionMapping": {
+ "description": "This type is used to map column(s) from the query result to a dimension in the destination table.",
+ "type": "object",
+ "properties": {
+ "Name": {
+ "$ref": "#/definitions/DimensionMappingName"
+ },
+ "DimensionValueType": {
+ "$ref": "#/definitions/DimensionValueType"
+ }
+ },
+ "required": [
+ "Name",
+ "DimensionValueType"
+ ],
+ "additionalProperties": false
+ },
+ "DimensionMappingName": {
+ "description": "Column name from query result.",
+ "type": "string"
+ },
+ "DimensionValueType": {
+ "description": "Type for the dimension.",
+ "type": "string",
+ "enum": [
+ "VARCHAR"
+ ]
+ },
+ "MultiMeasureMappings": {
+ "description": "Only one of MixedMeasureMappings or MultiMeasureMappings is to be provided. MultiMeasureMappings can be used to ingest data as multi measures in the derived table.",
+ "type": "object",
+ "properties": {
+ "TargetMultiMeasureName": {
+ "$ref": "#/definitions/TargetMultiMeasureName"
+ },
+ "MultiMeasureAttributeMappings": {
+ "$ref": "#/definitions/MultiMeasureAttributeMappingList"
+ }
+ },
+ "required": [
+ "MultiMeasureAttributeMappings"
+ ],
+ "additionalProperties": false
+ },
+ "TargetMultiMeasureName": {
+ "description": "Name of the target multi-measure in the derived table. Required if MeasureNameColumn is not provided. If MeasureNameColumn is provided then the value from that column will be used as the multi-measure name.",
+ "type": "string"
+ },
+ "MultiMeasureAttributeMappingList": {
+ "description": "Required. Attribute mappings to be used for mapping query results to ingest data for multi-measure attributes.",
+ "type": "array",
+ "insertionOrder": false,
+ "minItems": 1,
+ "items": {
+ "$ref": "#/definitions/MultiMeasureAttributeMapping"
+ }
+ },
+ "MultiMeasureAttributeMapping": {
+ "description": "An attribute mapping to be used for mapping query results to ingest data for multi-measure attributes.",
+ "type": "object",
+ "properties": {
+ "SourceColumn": {
+ "$ref": "#/definitions/MultiMeasureAttributeMappingSourceColumn"
+ },
+ "MeasureValueType": {
+ "$ref": "#/definitions/MultiMeasureAttributeMappingMeasureValueType"
+ },
+ "TargetMultiMeasureAttributeName": {
+ "$ref": "#/definitions/TargetMultiMeasureAttributeName"
+ }
+ },
+ "required": [
+ "SourceColumn",
+ "MeasureValueType"
+ ],
+ "additionalProperties": false
+ },
+ "MultiMeasureAttributeMappingSourceColumn": {
+ "description": "Source measure value column in the query result where the attribute value is to be read.",
+ "type": "string"
+ },
+ "MultiMeasureAttributeMappingMeasureValueType": {
+ "description": "Value type of the measure value column to be read from the query result.",
+ "type": "string",
+ "enum": [
+ "BIGINT",
+ "BOOLEAN",
+ "DOUBLE",
+ "VARCHAR"
+ ]
+ },
+ "TargetMultiMeasureAttributeName": {
+ "description": "Custom name to be used for attribute name in derived table. If not provided, source column name would be used.",
+ "type": "string"
+ },
+ "MixedMeasureMappings": {
+ "description": "Specifies how to map measures to multi-measure records.",
+ "type": "array",
+ "insertionOrder": false,
+ "minItems": 1,
+ "items": {
+ "$ref": "#/definitions/MixedMeasureMapping"
+ }
+ },
+ "MixedMeasureMapping": {
+ "description": "MixedMeasureMappings are mappings that can be used to ingest data into a mixture of narrow and multi measures in the derived table.",
+ "type": "object",
+ "properties": {
+ "MeasureName": {
+ "$ref": "#/definitions/MixedMeasureMappingMeasureName"
+ },
+ "SourceColumn": {
+ "$ref": "#/definitions/MixedMeasureMappingSourceColumn"
+ },
+ "TargetMeasureName": {
+ "$ref": "#/definitions/MixedMeasureMappingTargetMeasureName"
+ },
+ "MeasureValueType": {
+ "$ref": "#/definitions/MixedMeasureMappingMeasureValueType"
+ },
+ "MultiMeasureAttributeMappings": {
+ "$ref": "#/definitions/MultiMeasureAttributeMappingList"
+ }
+ },
+ "required": [
+ "MeasureValueType"
+ ],
+ "additionalProperties": false
+ },
+ "MixedMeasureMappingMeasureName": {
+ "description": "Refers to the value of the measure name in a result row. This field is required if MeasureNameColumn is provided.",
+ "type": "string"
+ },
+ "MixedMeasureMappingSourceColumn": {
+ "description": "This field refers to the source column from which the measure value is to be read for result materialization.",
+ "type": "string"
+ },
+ "MixedMeasureMappingTargetMeasureName": {
+ "description": "Target measure name to be used. If not provided, the target measure name by default would be MeasureName if provided, or SourceColumn otherwise.",
+ "type": "string"
+ },
+ "MixedMeasureMappingMeasureValueType": {
+ "description": "Type of the value that is to be read from SourceColumn. If the mapping is for MULTI, use MeasureValueType.MULTI.",
+ "type": "string",
+ "enum": [
+ "BIGINT",
+ "BOOLEAN",
+ "DOUBLE",
+ "VARCHAR",
+ "MULTI"
+ ]
+ },
+ "MeasureNameColumn": {
+ "description": "Name of the measure name column from the query result.",
+ "type": "string"
+ },
+ "S3Configuration": {
+ "description": "Details on S3 location for error reports that result from running a query.",
+ "type": "object",
+ "properties": {
+ "BucketName": {
+ "$ref": "#/definitions/BucketName"
+ },
+ "ObjectKeyPrefix": {
+ "$ref": "#/definitions/ObjectKeyPrefix"
+ },
+ "EncryptionOption": {
+ "$ref": "#/definitions/EncryptionOption"
+ }
+ },
+ "required": [
+ "BucketName"
+ ],
+ "additionalProperties": false
+ },
+ "BucketName": {
+ "description": "Name of the S3 bucket under which error reports will be created.",
+ "type": "string",
+ "minLength": 3,
+ "maxLength": 63,
+ "pattern": "[a-z0-9][\\.\\-a-z0-9]{1,61}[a-z0-9]"
+ },
+ "ObjectKeyPrefix": {
+ "description": "Prefix for error report keys.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 896,
+ "pattern": "[a-zA-Z0-9|!\\-_*'\\(\\)]([a-zA-Z0-9]|[!\\-_*'\\(\\)\\/.])+"
+ },
+ "EncryptionOption": {
+ "description": "Encryption at rest options for the error reports. If no encryption option is specified, Timestream will choose SSE_S3 as default.",
+ "type": "string",
+ "enum": [
+ "SSE_S3",
+ "SSE_KMS"
+ ]
+ },
+ "Tag": {
+ "description": "A key-value pair to label the scheduled query.",
+ "type": "object",
+ "properties": {
+ "Key": {
+ "$ref": "#/definitions/Key"
+ },
+ "Value": {
+ "$ref": "#/definitions/Value"
+ }
+ },
+ "required": [
+ "Key",
+ "Value"
+ ],
+ "additionalProperties": false
+ },
+ "Key": {
+ "type": "string",
+ "description": "The key name of the tag. You can specify a value that is 1 to 128 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Value": {
+ "type": "string",
+ "description": "The value for the tag. You can specify a value that is 0 to 256 Unicode characters in length and cannot be prefixed with aws:. You can use any of the following characters: the set of Unicode letters, digits, whitespace, _, ., /, =, +, and -.",
+ "minLength": 0,
+ "maxLength": 256
+ }
+ },
+ "properties": {
+ "Arn": {
+ "$ref": "#/definitions/Arn"
+ },
+ "ScheduledQueryName": {
+ "$ref": "#/definitions/ScheduledQueryName"
+ },
+ "QueryString": {
+ "$ref": "#/definitions/QueryString"
+ },
+ "ScheduleConfiguration": {
+ "$ref": "#/definitions/ScheduleConfiguration"
+ },
+ "NotificationConfiguration": {
+ "$ref": "#/definitions/NotificationConfiguration"
+ },
+ "ClientToken": {
+ "$ref": "#/definitions/ClientToken"
+ },
+ "ScheduledQueryExecutionRoleArn": {
+ "$ref": "#/definitions/ScheduledQueryExecutionRoleArn"
+ },
+ "TargetConfiguration": {
+ "$ref": "#/definitions/TargetConfiguration"
+ },
+ "ErrorReportConfiguration": {
+ "$ref": "#/definitions/ErrorReportConfiguration"
+ },
+ "KmsKeyId": {
+ "$ref": "#/definitions/KmsKeyId"
+ },
+ "SQName": {
+ "description": "The name of the scheduled query. Scheduled query names must be unique within each Region.",
+ "type": "string"
+ },
+ "SQQueryString": {
+ "description": "The query string to run. Parameter names can be specified in the query string @ character followed by an identifier. The named Parameter @scheduled_runtime is reserved and can be used in the query to get the time at which the query is scheduled to run. The timestamp calculated according to the ScheduleConfiguration parameter, will be the value of @scheduled_runtime paramater for each query run. For example, consider an instance of a scheduled query executing on 2021-12-01 00:00:00. For this instance, the @scheduled_runtime parameter is initialized to the timestamp 2021-12-01 00:00:00 when invoking the query.",
+ "type": "string"
+ },
+ "SQScheduleConfiguration": {
+ "description": "Configuration for when the scheduled query is executed.",
+ "type": "string"
+ },
+ "SQNotificationConfiguration": {
+ "description": "Notification configuration for the scheduled query. A notification is sent by Timestream when a query run finishes, when the state is updated or when you delete it.",
+ "type": "string"
+ },
+ "SQScheduledQueryExecutionRoleArn": {
+ "description": "The ARN for the IAM role that Timestream will assume when running the scheduled query.",
+ "type": "string"
+ },
+ "SQTargetConfiguration": {
+ "description": "Configuration of target store where scheduled query results are written to.",
+ "type": "string"
+ },
+ "SQErrorReportConfiguration": {
+ "description": "Configuration for error reporting. Error reports will be generated when a problem is encountered when writing the query results.",
+ "type": "string"
+ },
+ "SQKmsKeyId": {
+ "description": "The Amazon KMS key used to encrypt the scheduled query resource, at-rest. If the Amazon KMS key is not specified, the scheduled query resource will be encrypted with a Timestream owned Amazon KMS key. To specify a KMS key, use the key ID, key ARN, alias name, or alias ARN. When using an alias name, prefix the name with alias/. If ErrorReportConfiguration uses SSE_KMS as encryption type, the same KmsKeyId is used to encrypt the error report at rest.",
+ "type": "string"
+ },
+ "Tags": {
+ "$ref": "#/definitions/Tags"
+ }
+ },
+ "required": [
+ "QueryString",
+ "ScheduleConfiguration",
+ "NotificationConfiguration",
+ "ScheduledQueryExecutionRoleArn",
+ "ErrorReportConfiguration"
+ ],
+ "additionalProperties": false,
+ "primaryIdentifier": [
+ "/properties/Arn"
+ ],
+ "createOnlyProperties": [
+ "/properties/ScheduledQueryName",
+ "/properties/QueryString",
+ "/properties/ScheduleConfiguration",
+ "/properties/NotificationConfiguration",
+ "/properties/ClientToken",
+ "/properties/ScheduledQueryExecutionRoleArn",
+ "/properties/TargetConfiguration",
+ "/properties/ErrorReportConfiguration",
+ "/properties/KmsKeyId"
+ ],
+ "readOnlyProperties": [
+ "/properties/Arn",
+ "/properties/SQName",
+ "/properties/SQQueryString",
+ "/properties/SQScheduleConfiguration",
+ "/properties/SQNotificationConfiguration",
+ "/properties/SQScheduledQueryExecutionRoleArn",
+ "/properties/SQTargetConfiguration",
+ "/properties/SQErrorReportConfiguration",
+ "/properties/SQKmsKeyId"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "timestream:CreateScheduledQuery",
+ "timestream:DescribeEndpoints"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "timestream:DescribeScheduledQuery",
+ "timestream:ListTagsForResource",
+ "timestream:DescribeEndpoints"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "timestream:UpdateScheduledQuery",
+ "timestream:TagResource",
+ "timestream:UntagResource",
+ "timestream:DescribeEndpoints"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "timestream:DeleteScheduledQuery",
+ "timestream:DescribeEndpoints"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "timestream:ListScheduledQueries",
+ "timestream:DescribeEndpoints"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_timestream_table.json b/tools/c7n_awscc/c7n_awscc/data/aws_timestream_table.json
new file mode 100644
index 00000000000..78ac500cae3
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_timestream_table.json
@@ -0,0 +1,118 @@
+{
+ "typeName": "AWS::Timestream::Table",
+ "description": "The AWS::Timestream::Table resource creates a Timestream Table.",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-timestream.git",
+ "definitions": {
+ "Tag": {
+ "description": "You can use the Resource Tags property to apply tags to resources, which can help you identify and categorize those resources.",
+ "type": "object",
+ "properties": {
+ "Key": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Value": {
+ "type": "string",
+ "minLength": 0,
+ "maxLength": 256
+ }
+ },
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "Arn": {
+ "type": "string"
+ },
+ "Name": {
+ "description": "The table name exposed as a read-only attribute.",
+ "type": "string"
+ },
+ "DatabaseName": {
+ "description": "The name for the database which the table to be created belongs to.",
+ "type": "string",
+ "pattern": "^[a-zA-Z0-9_.-]{3,64}$"
+ },
+ "TableName": {
+ "description": "The name for the table. If you don't specify a name, AWS CloudFormation generates a unique physical ID and uses that ID for the table name.",
+ "type": "string",
+ "pattern": "^[a-zA-Z0-9_.-]{3,64}$"
+ },
+ "RetentionProperties": {
+ "description": "The retention duration of the memory store and the magnetic store.",
+ "type": "object",
+ "properties": {
+ "MemoryStoreRetentionPeriodInHours": {
+ "description": "The duration for which data must be stored in the memory store.",
+ "type": "string"
+ },
+ "MagneticStoreRetentionPeriodInDays": {
+ "description": "The duration for which data must be stored in the magnetic store.",
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ },
+ "Tags": {
+ "description": "An array of key-value pairs to apply to this resource.",
+ "type": "array",
+ "maxItems": 200,
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "DatabaseName"
+ ],
+ "primaryIdentifier": [
+ "/properties/DatabaseName",
+ "/properties/TableName"
+ ],
+ "createOnlyProperties": [
+ "/properties/DatabaseName",
+ "/properties/TableName"
+ ],
+ "readOnlyProperties": [
+ "/properties/Arn",
+ "/properties/Name"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "timestream:CreateTable",
+ "timestream:DescribeEndpoints"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "timestream:DescribeTable",
+ "timestream:DescribeEndpoints",
+ "timestream:ListTagsForResource"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "timestream:UpdateTable",
+ "timestream:DescribeEndpoints",
+ "timestream:TagResource",
+ "timestream:UntagResource"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "timestream:DeleteTable",
+ "timestream:DescribeEndpoints"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "timestream:ListTables",
+ "timestream:DescribeEndpoints"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_transfer_workflow.json b/tools/c7n_awscc/c7n_awscc/data/aws_transfer_workflow.json
new file mode 100644
index 00000000000..4d481be3681
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_transfer_workflow.json
@@ -0,0 +1,288 @@
+{
+ "typeName": "AWS::Transfer::Workflow",
+ "description": "Resource Type definition for AWS::Transfer::Workflow",
+ "definitions": {
+ "S3Tag": {
+ "description": "Specifies the key-value pair that are assigned to a file during the execution of a Tagging step.",
+ "type": "object",
+ "properties": {
+ "Key": {
+ "description": "The name assigned to the tag that you create.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Value": {
+ "description": "The value that corresponds to the key.",
+ "type": "string",
+ "minLength": 0,
+ "maxLength": 256
+ }
+ },
+ "required": [
+ "Key",
+ "Value"
+ ],
+ "additionalProperties": false
+ },
+ "S3InputFileLocation": {
+ "description": "Specifies the details for the S3 file being copied.",
+ "type": "object",
+ "properties": {
+ "Bucket": {
+ "description": "Specifies the S3 bucket that contains the file being copied.",
+ "type": "string",
+ "pattern": "^[a-z0-9][\\.\\-a-z0-9]{1,61}[a-z0-9]$",
+ "minLength": 3,
+ "maxLength": 63
+ },
+ "Key": {
+ "description": "The name assigned to the file when it was created in S3. You use the object key to retrieve the object.",
+ "type": "string",
+ "pattern": ".*",
+ "minLength": 0,
+ "maxLength": 1024
+ }
+ },
+ "additionalProperties": false
+ },
+ "InputFileLocation": {
+ "description": "Specifies the location for the file being copied. Only applicable for the Copy type of workflow steps.",
+ "type": "object",
+ "properties": {
+ "S3FileLocation": {
+ "$ref": "#/definitions/S3InputFileLocation"
+ }
+ },
+ "additionalProperties": false
+ },
+ "WorkflowStep": {
+ "description": "The basic building block of a workflow.",
+ "type": "object",
+ "properties": {
+ "CopyStepDetails": {
+ "description": "Details for a step that performs a file copy.",
+ "type": "object",
+ "properties": {
+ "DestinationFileLocation": {
+ "$ref": "#/definitions/InputFileLocation"
+ },
+ "Name": {
+ "description": "The name of the step, used as an identifier.",
+ "type": "string",
+ "pattern": "^[\\w-]*$",
+ "minLength": 0,
+ "maxLength": 30
+ },
+ "OverwriteExisting": {
+ "description": "A flag that indicates whether or not to overwrite an existing file of the same name. The default is FALSE.",
+ "type": "string",
+ "enum": [
+ "TRUE",
+ "FALSE"
+ ]
+ }
+ },
+ "additionalProperties": false
+ },
+ "CustomStepDetails": {
+ "description": "Details for a step that invokes a lambda function.",
+ "type": "object",
+ "properties": {
+ "Name": {
+ "description": "The name of the step, used as an identifier.",
+ "type": "string",
+ "pattern": "^[\\w-]*$",
+ "minLength": 0,
+ "maxLength": 30
+ },
+ "Target": {
+ "description": "The ARN for the lambda function that is being called.",
+ "type": "string",
+ "pattern": "arn:[a-z-]+:lambda:.*$",
+ "minLength": 0,
+ "maxLength": 170
+ },
+ "TimeoutSeconds": {
+ "description": "Timeout, in seconds, for the step.",
+ "type": "integer",
+ "minimum": 1,
+ "maximum": 1800
+ }
+ },
+ "additionalProperties": false
+ },
+ "DeleteStepDetails": {
+ "description": "Details for a step that deletes the file.",
+ "type": "object",
+ "properties": {
+ "Name": {
+ "description": "The name of the step, used as an identifier.",
+ "type": "string",
+ "pattern": "^[\\w-]*$",
+ "minLength": 0,
+ "maxLength": 30
+ }
+ },
+ "additionalProperties": false
+ },
+ "TagStepDetails": {
+ "description": "Details for a step that creates one or more tags.",
+ "type": "object",
+ "properties": {
+ "Name": {
+ "description": "The name of the step, used as an identifier.",
+ "type": "string",
+ "pattern": "^[\\w-]*$",
+ "minLength": 0,
+ "maxLength": 30
+ },
+ "Tags": {
+ "description": "Array that contains from 1 to 10 key/value pairs.",
+ "type": "array",
+ "maxItems": 10,
+ "uniqueItems": true,
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/S3Tag"
+ }
+ }
+ },
+ "additionalProperties": false
+ },
+ "Type": {
+ "type": "string",
+ "enum": [
+ "COPY",
+ "CUSTOM",
+ "DELETE",
+ "TAG"
+ ]
+ }
+ },
+ "additionalProperties": false
+ },
+ "Tag": {
+ "description": "Creates a key-value pair for a specific resource.",
+ "type": "object",
+ "properties": {
+ "Key": {
+ "type": "string",
+ "description": "The name assigned to the tag that you create.",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Value": {
+ "type": "string",
+ "description": "Contains one or more values that you assigned to the key name you create.",
+ "minLength": 0,
+ "maxLength": 256
+ }
+ },
+ "required": [
+ "Key",
+ "Value"
+ ],
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "OnExceptionSteps": {
+ "description": "Specifies the steps (actions) to take if any errors are encountered during execution of the workflow.",
+ "type": "array",
+ "maxItems": 8,
+ "uniqueItems": true,
+ "insertionOrder": true,
+ "items": {
+ "$ref": "#/definitions/WorkflowStep"
+ }
+ },
+ "Steps": {
+ "description": "Specifies the details for the steps that are in the specified workflow.",
+ "type": "array",
+ "maxItems": 8,
+ "uniqueItems": true,
+ "insertionOrder": true,
+ "items": {
+ "$ref": "#/definitions/WorkflowStep"
+ }
+ },
+ "Tags": {
+ "description": "Key-value pairs that can be used to group and search for workflows. Tags are metadata attached to workflows for any purpose.",
+ "type": "array",
+ "maxItems": 50,
+ "uniqueItems": true,
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ },
+ "Description": {
+ "description": "A textual description for the workflow.",
+ "type": "string",
+ "pattern": "^[\\w\\- ]*$",
+ "minLength": 0,
+ "maxLength": 256
+ },
+ "WorkflowId": {
+ "description": "A unique identifier for the workflow.",
+ "type": "string",
+ "pattern": "^w-([a-z0-9]{17})$",
+ "minLength": 19,
+ "maxLength": 19
+ },
+ "Arn": {
+ "description": "Specifies the unique Amazon Resource Name (ARN) for the workflow.",
+ "type": "string",
+ "pattern": "arn:.*",
+ "minLength": 20,
+ "maxLength": 1600
+ }
+ },
+ "required": [
+ "Steps"
+ ],
+ "additionalProperties": false,
+ "taggable": true,
+ "readOnlyProperties": [
+ "/properties/WorkflowId",
+ "/properties/Arn"
+ ],
+ "createOnlyProperties": [
+ "/properties/Steps",
+ "/properties/OnExceptionSteps",
+ "/properties/Description"
+ ],
+ "primaryIdentifier": [
+ "/properties/WorkflowId"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "transfer:CreateWorkflow",
+ "transfer:TagResource"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "transfer:DescribeWorkflow"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "transfer:DeleteWorkflow"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "transfer:ListWorkflows"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "transfer:UnTagResource",
+ "transfer:TagResource"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_wafv2_ipset.json b/tools/c7n_awscc/c7n_awscc/data/aws_wafv2_ipset.json
new file mode 100644
index 00000000000..d7a7126bf93
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_wafv2_ipset.json
@@ -0,0 +1,150 @@
+{
+ "typeName": "AWS::WAFv2::IPSet",
+ "description": "Contains a list of IP addresses. This can be either IPV4 or IPV6. The list will be mutually",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-wafv2.git",
+ "definitions": {
+ "EntityName": {
+ "description": "Name of the IPSet.",
+ "type": "string",
+ "pattern": "^[0-9A-Za-z_-]{1,128}$"
+ },
+ "EntityDescription": {
+ "description": "Description of the entity.",
+ "type": "string",
+ "pattern": "^[a-zA-Z0-9=:#@/\\-,.][a-zA-Z0-9+=:#@/\\-,.\\s]+[a-zA-Z0-9+=:#@/\\-,.]{1,256}$"
+ },
+ "EntityId": {
+ "description": "Id of the IPSet",
+ "type": "string",
+ "pattern": "^[0-9a-f]{8}-(?:[0-9a-f]{4}-){3}[0-9a-f]{12}$"
+ },
+ "Scope": {
+ "description": "Use CLOUDFRONT for CloudFront IPSet, use REGIONAL for Application Load Balancer and API Gateway.",
+ "type": "string",
+ "enum": [
+ "CLOUDFRONT",
+ "REGIONAL"
+ ]
+ },
+ "IPAddressVersion": {
+ "description": "Type of addresses in the IPSet, use IPV4 for IPV4 IP addresses, IPV6 for IPV6 address.",
+ "type": "string",
+ "enum": [
+ "IPV4",
+ "IPV6"
+ ]
+ },
+ "IPAddress": {
+ "description": "IP address",
+ "type": "string",
+ "maxLength": 50,
+ "minLength": 1
+ },
+ "ResourceArn": {
+ "description": "ARN of the WAF entity.",
+ "type": "string"
+ },
+ "Tag": {
+ "type": "object",
+ "properties": {
+ "Key": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Value": {
+ "type": "string",
+ "minLength": 0,
+ "maxLength": 256
+ }
+ },
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "Arn": {
+ "$ref": "#/definitions/ResourceArn"
+ },
+ "Description": {
+ "$ref": "#/definitions/EntityDescription"
+ },
+ "Name": {
+ "$ref": "#/definitions/EntityName"
+ },
+ "Id": {
+ "$ref": "#/definitions/EntityId"
+ },
+ "Scope": {
+ "$ref": "#/definitions/Scope"
+ },
+ "IPAddressVersion": {
+ "$ref": "#/definitions/IPAddressVersion"
+ },
+ "Addresses": {
+ "description": "List of IPAddresses.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/IPAddress"
+ }
+ },
+ "Tags": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Tag"
+ },
+ "minItems": 1
+ }
+ },
+ "required": [
+ "Addresses",
+ "IPAddressVersion",
+ "Scope"
+ ],
+ "primaryIdentifier": [
+ "/properties/Name",
+ "/properties/Id",
+ "/properties/Scope"
+ ],
+ "createOnlyProperties": [
+ "/properties/Name",
+ "/properties/Scope"
+ ],
+ "readOnlyProperties": [
+ "/properties/Arn",
+ "/properties/Id"
+ ],
+ "additionalProperties": false,
+ "handlers": {
+ "create": {
+ "permissions": [
+ "wafv2:CreateIPSet",
+ "wafv2:GetIPSet",
+ "wafv2:ListTagsForResource"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "wafv2:DeleteIPSet",
+ "wafv2:GetIPSet"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "wafv2:GetIPSet",
+ "wafv2:ListTagsForResource"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "wafv2:UpdateIPSet",
+ "wafv2:GetIPSet",
+ "wafv2:ListTagsForResource"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "wafv2:listIPSets"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_wafv2_loggingconfiguration.json b/tools/c7n_awscc/c7n_awscc/data/aws_wafv2_loggingconfiguration.json
new file mode 100644
index 00000000000..bc7ab4a18a4
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_wafv2_loggingconfiguration.json
@@ -0,0 +1,280 @@
+{
+ "typeName": "AWS::WAFv2::LoggingConfiguration",
+ "description": "A WAFv2 Logging Configuration Resource Provider",
+ "sourceUrl": "https://github.com/advaj/aws-cloudformation-resource-providers-wafv2.git",
+ "definitions": {
+ "Filter": {
+ "type": "object",
+ "properties": {
+ "Behavior": {
+ "description": "How to handle logs that satisfy the filter's conditions and requirement. ",
+ "type": "string",
+ "enum": [
+ "KEEP",
+ "DROP"
+ ]
+ },
+ "Conditions": {
+ "description": "Match conditions for the filter.",
+ "type": "array",
+ "minItems": 1,
+ "items": {
+ "$ref": "#/definitions/Condition"
+ }
+ },
+ "Requirement": {
+ "description": "Logic to apply to the filtering conditions. You can specify that, in order to satisfy the filter, a log must match all conditions or must match at least one condition.",
+ "type": "string",
+ "enum": [
+ "MEETS_ALL",
+ "MEETS_ANY"
+ ]
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "Behavior",
+ "Conditions",
+ "Requirement"
+ ]
+ },
+ "Condition": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "ActionCondition": {
+ "description": "A single action condition.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Action": {
+ "description": "Logic to apply to the filtering conditions. You can specify that, in order to satisfy the filter, a log must match all conditions or must match at least one condition.",
+ "type": "string",
+ "enum": [
+ "ALLOW",
+ "BLOCK",
+ "COUNT",
+ "CAPTCHA",
+ "EXCLUDED_AS_COUNT"
+ ]
+ }
+ },
+ "required": [
+ "Action"
+ ]
+ },
+ "LabelNameCondition": {
+ "description": "A single label name condition.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "LabelName": {
+ "description": "The label name that a log record must contain in order to meet the condition. This must be a fully qualified label name. Fully qualified labels have a prefix, optional namespaces, and label name. The prefix identifies the rule group or web ACL context of the rule that added the label. ",
+ "type": "string"
+ }
+ },
+ "required": [
+ "LabelName"
+ ]
+ }
+ }
+ },
+ "FieldToMatch": {
+ "description": "A key-value pair to associate with a resource.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "JsonBody": {
+ "type": "object",
+ "description": "Inspect the request body as JSON. The request body immediately follows the request headers. This is the part of a request that contains any additional data that you want to send to your web server as the HTTP request body, such as data from a form. ",
+ "additionalProperties": false,
+ "properties": {
+ "InvalidFallbackBehavior": {
+ "description": "What AWS WAF should do if it fails to completely parse the JSON body.",
+ "type": "string",
+ "enum": [
+ "MATCH",
+ "NO_MATCH",
+ "EVALUATE_AS_STRING"
+ ]
+ },
+ "MatchPattern": {
+ "description": "The patterns to look for in the JSON body. AWS WAF inspects the results of these pattern matches against the rule inspection criteria. ",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "All": {
+ "description": "Match all of the elements. See also MatchScope in JsonBody. You must specify either this setting or the IncludedPaths setting, but not both.",
+ "type": "object"
+ },
+ "IncludedPaths": {
+ "description": "Match only the specified include paths. See also MatchScope in JsonBody.",
+ "type": "array",
+ "minItems": 1,
+ "items": {
+ "type": "string",
+ "pattern": "^[\\/]+([^~]*(~[01])*)*{1,512}$"
+ }
+ }
+ }
+ },
+ "MatchScope": {
+ "description": "The parts of the JSON to match against using the MatchPattern. If you specify All, AWS WAF matches against keys and values. ",
+ "type": "string",
+ "enum": [
+ "ALL",
+ "KEY",
+ "VALUE"
+ ]
+ }
+ },
+ "required": [
+ "MatchPattern",
+ "MatchScope"
+ ]
+ },
+ "Method": {
+ "description": "Inspect the HTTP method. The method indicates the type of operation that the request is asking the origin to perform. ",
+ "type": "object"
+ },
+ "QueryString": {
+ "type": "object",
+ "description": "Inspect the query string. This is the part of a URL that appears after a ? character, if any. "
+ },
+ "SingleHeader": {
+ "description": "Inspect a single header. Provide the name of the header to inspect, for example, User-Agent or Referer. This setting isn't case sensitive.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Name": {
+ "description": "The name of the query header to inspect.",
+ "type": "string"
+ }
+ },
+ "required": [
+ "Name"
+ ]
+ },
+ "UriPath": {
+ "type": "object",
+ "description": "Inspect the request URI path. This is the part of a web request that identifies a resource, for example, /images/daily-ad.jpg. "
+ }
+ }
+ }
+ },
+ "properties": {
+ "ResourceArn": {
+ "description": "The Amazon Resource Name (ARN) of the web ACL that you want to associate with LogDestinationConfigs.",
+ "type": "string"
+ },
+ "LogDestinationConfigs": {
+ "description": "The Amazon Resource Names (ARNs) of the logging destinations that you want to associate with the web ACL.",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "RedactedFields": {
+ "description": "The parts of the request that you want to keep out of the logs. For example, if you redact the HEADER field, the HEADER field in the firehose will be xxx.",
+ "type": "array",
+ "insertionOrder": false,
+ "items": {
+ "$ref": "#/definitions/FieldToMatch"
+ }
+ },
+ "ManagedByFirewallManager": {
+ "description": "Indicates whether the logging configuration was created by AWS Firewall Manager, as part of an AWS WAF policy configuration. If true, only Firewall Manager can modify or delete the configuration.",
+ "type": "boolean"
+ },
+ "LoggingFilter": {
+ "description": "Filtering that specifies which web requests are kept in the logs and which are dropped. You can filter on the rule action and on the web request labels that were applied by matching rules during web ACL evaluation.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "DefaultBehavior": {
+ "description": "Default handling for logs that don't match any of the specified filtering conditions.",
+ "type": "string",
+ "enum": [
+ "KEEP",
+ "DROP"
+ ]
+ },
+ "Filters": {
+ "description": "The filters that you want to apply to the logs.",
+ "type": "array",
+ "minItems": 1,
+ "items": {
+ "$ref": "#/definitions/Filter"
+ }
+ }
+ },
+ "required": [
+ "DefaultBehavior",
+ "Filters"
+ ]
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "ResourceArn",
+ "LogDestinationConfigs"
+ ],
+ "createOnlyProperties": [
+ "/properties/ResourceArn"
+ ],
+ "readOnlyProperties": [
+ "/properties/ManagedByFirewallManager"
+ ],
+ "primaryIdentifier": [
+ "/properties/ResourceArn"
+ ],
+ "handlers": {
+ "create": {
+ "permissions": [
+ "wafv2:PutLoggingConfiguration",
+ "wafv2:GetLoggingConfiguration",
+ "firehose:ListDeliveryStreams",
+ "iam:CreateServiceLinkedRole",
+ "iam:DescribeOrganization",
+ "logs:CreateLogDelivery",
+ "s3:PutBucketPolicy",
+ "s3:GetBucketPolicy",
+ "logs:PutResourcePolicy",
+ "logs:DescribeResourcePolicies",
+ "logs:DescribeLogGroups"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "wafv2:GetLoggingConfiguration"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "wafv2:PutLoggingConfiguration",
+ "wafv2:GetLoggingConfiguration",
+ "firehose:ListDeliveryStreams",
+ "iam:CreateServiceLinkedRole",
+ "iam:DescribeOrganization",
+ "logs:CreateLogDelivery",
+ "s3:PutBucketPolicy",
+ "s3:GetBucketPolicy",
+ "logs:PutResourcePolicy",
+ "logs:DescribeResourcePolicies",
+ "logs:DescribeLogGroups"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "wafv2:DeleteLoggingConfiguration",
+ "wafv2:GetLoggingConfiguration",
+ "logs:DeleteLogDelivery"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "wafv2:ListLoggingConfigurations"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_wafv2_regexpatternset.json b/tools/c7n_awscc/c7n_awscc/data/aws_wafv2_regexpatternset.json
new file mode 100644
index 00000000000..49b3f39711d
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_wafv2_regexpatternset.json
@@ -0,0 +1,116 @@
+{
+ "typeName": "AWS::WAFv2::RegexPatternSet",
+ "description": "Contains a list of Regular expressions based on the provided inputs. RegexPatternSet can be used with other WAF entities with RegexPatternSetReferenceStatement to perform other actions .",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-wafv2.git",
+ "definitions": {
+ "Tag": {
+ "type": "object",
+ "properties": {
+ "Key": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Value": {
+ "type": "string",
+ "minLength": 0,
+ "maxLength": 256
+ }
+ },
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "Arn": {
+ "description": "ARN of the WAF entity.",
+ "type": "string"
+ },
+ "Description": {
+ "description": "Description of the entity.",
+ "type": "string",
+ "pattern": "^[a-zA-Z0-9=:#@/\\-,.][a-zA-Z0-9+=:#@/\\-,.\\s]+[a-zA-Z0-9+=:#@/\\-,.]{1,256}$"
+ },
+ "Name": {
+ "description": "Name of the RegexPatternSet.",
+ "type": "string",
+ "pattern": "^[0-9A-Za-z_-]{1,128}$"
+ },
+ "Id": {
+ "description": "Id of the RegexPatternSet",
+ "type": "string",
+ "pattern": "^[0-9a-f]{8}-(?:[0-9a-f]{4}-){3}[0-9a-f]{12}$"
+ },
+ "RegularExpressionList": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "Scope": {
+ "description": "Use CLOUDFRONT for CloudFront RegexPatternSet, use REGIONAL for Application Load Balancer and API Gateway.",
+ "type": "string",
+ "enum": [
+ "CLOUDFRONT",
+ "REGIONAL"
+ ]
+ },
+ "Tags": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Tag"
+ },
+ "minItems": 1
+ }
+ },
+ "required": [
+ "Scope",
+ "RegularExpressionList"
+ ],
+ "primaryIdentifier": [
+ "/properties/Name",
+ "/properties/Id",
+ "/properties/Scope"
+ ],
+ "createOnlyProperties": [
+ "/properties/Name",
+ "/properties/Scope"
+ ],
+ "readOnlyProperties": [
+ "/properties/Arn",
+ "/properties/Id"
+ ],
+ "additionalProperties": false,
+ "handlers": {
+ "create": {
+ "permissions": [
+ "wafv2:CreateRegexPatternSet",
+ "wafv2:GetRegexPatternSet",
+ "wafv2:ListTagsForResource"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "wafv2:DeleteRegexPatternSet",
+ "wafv2:GetRegexPatternSet"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "wafv2:GetRegexPatternSet",
+ "wafv2:ListTagsForResource"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "wafv2:UpdateRegexPatternSet",
+ "wafv2:GetRegexPatternSet",
+ "wafv2:ListTagsForResource"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "wafv2:listRegexPatternSets"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_wafv2_rulegroup.json b/tools/c7n_awscc/c7n_awscc/data/aws_wafv2_rulegroup.json
new file mode 100644
index 00000000000..a2de1b25a06
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_wafv2_rulegroup.json
@@ -0,0 +1,1049 @@
+{
+ "typeName": "AWS::WAFv2::RuleGroup",
+ "description": "Contains the Rules that identify the requests that you want to allow, block, or count. In a RuleGroup, you also specify a default action (ALLOW or BLOCK), and the action for each Rule that you add to a RuleGroup, for example, block requests from specified IP addresses or block requests from specified referrers. You also associate the RuleGroup with a CloudFront distribution to identify the requests that you want AWS WAF to filter. If you add more than one Rule to a RuleGroup, a request needs to match only one of the specifications to be allowed, blocked, or counted.",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-wafv2.git",
+ "definitions": {
+ "AndStatement": {
+ "type": "object",
+ "properties": {
+ "Statements": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Statement"
+ }
+ }
+ },
+ "required": [
+ "Statements"
+ ],
+ "additionalProperties": false
+ },
+ "ByteMatchStatement": {
+ "description": "Byte Match statement.",
+ "type": "object",
+ "properties": {
+ "SearchString": {
+ "$ref": "#/definitions/SearchString"
+ },
+ "SearchStringBase64": {
+ "$ref": "#/definitions/SearchStringBase64"
+ },
+ "FieldToMatch": {
+ "$ref": "#/definitions/FieldToMatch"
+ },
+ "TextTransformations": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/TextTransformation"
+ }
+ },
+ "PositionalConstraint": {
+ "$ref": "#/definitions/PositionalConstraint"
+ }
+ },
+ "required": [
+ "FieldToMatch",
+ "PositionalConstraint",
+ "TextTransformations"
+ ],
+ "additionalProperties": false
+ },
+ "EntityDescription": {
+ "description": "Description of the entity.",
+ "type": "string",
+ "pattern": "^[a-zA-Z0-9=:#@/\\-,.][a-zA-Z0-9+=:#@/\\-,.\\s]+[a-zA-Z0-9+=:#@/\\-,.]{1,256}$"
+ },
+ "EntityName": {
+ "description": "Name of the RuleGroup.",
+ "type": "string",
+ "pattern": "^[0-9A-Za-z_-]{1,128}$"
+ },
+ "FieldToMatch": {
+ "description": "Field of the request to match.",
+ "type": "object",
+ "properties": {
+ "SingleHeader": {
+ "type": "object",
+ "properties": {
+ "Name": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "Name"
+ ],
+ "additionalProperties": false
+ },
+ "SingleQueryArgument": {
+ "description": "One query argument in a web request, identified by name, for example UserName or SalesRegion. The name can be up to 30 characters long and isn't case sensitive.",
+ "type": "object",
+ "properties": {
+ "Name": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "Name"
+ ],
+ "additionalProperties": false
+ },
+ "AllQueryArguments": {
+ "description": "All query arguments of a web request.",
+ "type": "object"
+ },
+ "UriPath": {
+ "description": "The path component of the URI of a web request. This is the part of a web request that identifies a resource, for example, /images/daily-ad.jpg.",
+ "type": "object"
+ },
+ "QueryString": {
+ "description": "The query string of a web request. This is the part of a URL that appears after a ? character, if any.",
+ "type": "object"
+ },
+ "Body": {
+ "description": "The body of a web request. This immediately follows the request headers.",
+ "type": "object"
+ },
+ "Method": {
+ "description": "The HTTP method of a web request. The method indicates the type of operation that the request is asking the origin to perform.",
+ "type": "object"
+ },
+ "JsonBody": {
+ "$ref": "#/definitions/JsonBody"
+ }
+ },
+ "additionalProperties": false
+ },
+ "JsonBody": {
+ "description": "Inspect the request body as JSON. The request body immediately follows the request headers.",
+ "type": "object",
+ "properties": {
+ "MatchPattern": {
+ "$ref": "#/definitions/JsonMatchPattern"
+ },
+ "MatchScope": {
+ "$ref": "#/definitions/JsonMatchScope"
+ },
+ "InvalidFallbackBehavior": {
+ "$ref": "#/definitions/BodyParsingFallbackBehavior"
+ }
+ },
+ "required": [
+ "MatchPattern",
+ "MatchScope"
+ ],
+ "additionalProperties": false
+ },
+ "BodyParsingFallbackBehavior": {
+ "description": "The inspection behavior to fall back to if the JSON in the request body is invalid.",
+ "type": "string",
+ "enum": [
+ "MATCH",
+ "NO_MATCH",
+ "EVALUATE_AS_STRING"
+ ]
+ },
+ "JsonMatchScope": {
+ "description": "The parts of the JSON to match against using the MatchPattern.",
+ "type": "string",
+ "enum": [
+ "ALL",
+ "KEY",
+ "VALUE"
+ ]
+ },
+ "JsonMatchPattern": {
+ "description": "The pattern to look for in the JSON body.",
+ "type": "object",
+ "properties": {
+ "All": {
+ "description": "Inspect all parts of the web request's JSON body.",
+ "type": "object"
+ },
+ "IncludedPaths": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/JsonPointerPath"
+ }
+ }
+ },
+ "additionalProperties": false
+ },
+ "JsonPointerPath": {
+ "description": "JSON pointer path in the web request's JSON body",
+ "type": "string",
+ "pattern": "^[\\/]+([^~]*(~[01])*)*{1,512}$"
+ },
+ "GeoMatchStatement": {
+ "type": "object",
+ "properties": {
+ "CountryCodes": {
+ "type": "array",
+ "items": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 2
+ }
+ },
+ "ForwardedIPConfig": {
+ "$ref": "#/definitions/ForwardedIPConfiguration"
+ }
+ },
+ "additionalProperties": false
+ },
+ "EntityId": {
+ "description": "Id of the RuleGroup",
+ "type": "string",
+ "pattern": "^[0-9a-f]{8}-(?:[0-9a-f]{4}-){3}[0-9a-f]{12}$"
+ },
+ "IPSetReferenceStatement": {
+ "type": "object",
+ "properties": {
+ "Arn": {
+ "$ref": "#/definitions/ResourceArn"
+ },
+ "IPSetForwardedIPConfig": {
+ "$ref": "#/definitions/IPSetForwardedIPConfiguration"
+ }
+ },
+ "required": [
+ "Arn"
+ ],
+ "additionalProperties": false
+ },
+ "NotStatement": {
+ "type": "object",
+ "properties": {
+ "Statement": {
+ "$ref": "#/definitions/Statement"
+ }
+ },
+ "required": [
+ "Statement"
+ ],
+ "additionalProperties": false
+ },
+ "OrStatement": {
+ "type": "object",
+ "properties": {
+ "Statements": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Statement"
+ }
+ }
+ },
+ "required": [
+ "Statements"
+ ],
+ "additionalProperties": false
+ },
+ "PositionalConstraint": {
+ "description": "Position of the evaluation in the FieldToMatch of request.",
+ "type": "string",
+ "enum": [
+ "EXACTLY",
+ "STARTS_WITH",
+ "ENDS_WITH",
+ "CONTAINS",
+ "CONTAINS_WORD"
+ ]
+ },
+ "RateBasedStatement": {
+ "type": "object",
+ "properties": {
+ "Limit": {
+ "$ref": "#/definitions/RateLimit"
+ },
+ "AggregateKeyType": {
+ "type": "string",
+ "enum": [
+ "IP",
+ "FORWARDED_IP"
+ ]
+ },
+ "ScopeDownStatement": {
+ "$ref": "#/definitions/Statement"
+ },
+ "ForwardedIPConfig": {
+ "$ref": "#/definitions/ForwardedIPConfiguration"
+ }
+ },
+ "required": [
+ "Limit",
+ "AggregateKeyType"
+ ],
+ "additionalProperties": false
+ },
+ "RateLimit": {
+ "type": "integer",
+ "minimum": 100,
+ "maximum": 2000000000
+ },
+ "RegexPatternSetReferenceStatement": {
+ "type": "object",
+ "properties": {
+ "Arn": {
+ "$ref": "#/definitions/ResourceArn"
+ },
+ "FieldToMatch": {
+ "$ref": "#/definitions/FieldToMatch"
+ },
+ "TextTransformations": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/TextTransformation"
+ }
+ }
+ },
+ "required": [
+ "Arn",
+ "FieldToMatch",
+ "TextTransformations"
+ ],
+ "additionalProperties": false
+ },
+ "ResourceArn": {
+ "description": "ARN of the WAF entity.",
+ "type": "string",
+ "minLength": 20,
+ "maxLength": 2048
+ },
+ "ForwardedIPConfiguration": {
+ "type": "object",
+ "properties": {
+ "HeaderName": {
+ "type": "string",
+ "pattern": "^[a-zA-Z0-9-]+{1,255}$"
+ },
+ "FallbackBehavior": {
+ "type": "string",
+ "enum": [
+ "MATCH",
+ "NO_MATCH"
+ ]
+ }
+ },
+ "required": [
+ "HeaderName",
+ "FallbackBehavior"
+ ],
+ "additionalProperties": false
+ },
+ "IPSetForwardedIPConfiguration": {
+ "type": "object",
+ "properties": {
+ "HeaderName": {
+ "type": "string",
+ "pattern": "^[a-zA-Z0-9-]+{1,255}$"
+ },
+ "FallbackBehavior": {
+ "type": "string",
+ "enum": [
+ "MATCH",
+ "NO_MATCH"
+ ]
+ },
+ "Position": {
+ "type": "string",
+ "enum": [
+ "FIRST",
+ "LAST",
+ "ANY"
+ ]
+ }
+ },
+ "required": [
+ "HeaderName",
+ "FallbackBehavior",
+ "Position"
+ ],
+ "additionalProperties": false
+ },
+ "Rule": {
+ "description": "Rule of RuleGroup that contains condition and action.",
+ "type": "object",
+ "properties": {
+ "Name": {
+ "$ref": "#/definitions/EntityName"
+ },
+ "Priority": {
+ "$ref": "#/definitions/RulePriority"
+ },
+ "Statement": {
+ "$ref": "#/definitions/Statement"
+ },
+ "Action": {
+ "$ref": "#/definitions/RuleAction"
+ },
+ "RuleLabels": {
+ "description": "Collection of Rule Labels.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Label"
+ }
+ },
+ "VisibilityConfig": {
+ "$ref": "#/definitions/VisibilityConfig"
+ },
+ "CaptchaConfig": {
+ "$ref": "#/definitions/CaptchaConfig"
+ }
+ },
+ "required": [
+ "Name",
+ "Priority",
+ "Statement",
+ "VisibilityConfig"
+ ],
+ "additionalProperties": false
+ },
+ "RuleAction": {
+ "description": "Action taken when Rule matches its condition.",
+ "type": "object",
+ "properties": {
+ "Allow": {
+ "description": "Allow traffic towards application.",
+ "type": "object",
+ "properties": {
+ "CustomRequestHandling": {
+ "$ref": "#/definitions/CustomRequestHandling"
+ }
+ },
+ "additionalProperties": false
+ },
+ "Block": {
+ "description": "Block traffic towards application.",
+ "type": "object",
+ "properties": {
+ "CustomResponse": {
+ "$ref": "#/definitions/CustomResponse"
+ }
+ },
+ "additionalProperties": false
+ },
+ "Count": {
+ "description": "Count traffic towards application.",
+ "type": "object",
+ "properties": {
+ "CustomRequestHandling": {
+ "$ref": "#/definitions/CustomRequestHandling"
+ }
+ },
+ "additionalProperties": false
+ },
+ "Captcha": {
+ "description": "Checks valid token exists with request.",
+ "type": "object",
+ "properties": {
+ "CustomRequestHandling": {
+ "$ref": "#/definitions/CustomRequestHandling"
+ }
+ },
+ "additionalProperties": false
+ }
+ },
+ "additionalProperties": false
+ },
+ "CustomHTTPHeaderName": {
+ "description": "HTTP header name.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 64
+ },
+ "CustomHTTPHeaderValue": {
+ "description": "HTTP header value.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 255
+ },
+ "CustomHTTPHeader": {
+ "description": "HTTP header.",
+ "type": "object",
+ "properties": {
+ "Name": {
+ "$ref": "#/definitions/CustomHTTPHeaderName"
+ },
+ "Value": {
+ "$ref": "#/definitions/CustomHTTPHeaderValue"
+ }
+ },
+ "required": [
+ "Name",
+ "Value"
+ ],
+ "additionalProperties": false
+ },
+ "CustomRequestHandling": {
+ "description": "Custom request handling.",
+ "type": "object",
+ "properties": {
+ "InsertHeaders": {
+ "description": "Collection of HTTP headers.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/CustomHTTPHeader"
+ },
+ "minItems": 1
+ }
+ },
+ "required": [
+ "InsertHeaders"
+ ],
+ "additionalProperties": false
+ },
+ "ResponseStatusCode": {
+ "description": "Custom response code.",
+ "type": "integer",
+ "minimum": 200,
+ "maximum": 599
+ },
+ "ResponseContentType": {
+ "description": "Valid values are TEXT_PLAIN, TEXT_HTML, and APPLICATION_JSON.",
+ "type": "string",
+ "enum": [
+ "TEXT_PLAIN",
+ "TEXT_HTML",
+ "APPLICATION_JSON"
+ ]
+ },
+ "ResponseContent": {
+ "description": "Response content.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 10240
+ },
+ "CustomResponseBody": {
+ "description": "Custom response body.",
+ "type": "object",
+ "properties": {
+ "ContentType": {
+ "$ref": "#/definitions/ResponseContentType"
+ },
+ "Content": {
+ "$ref": "#/definitions/ResponseContent"
+ }
+ },
+ "required": [
+ "ContentType",
+ "Content"
+ ],
+ "additionalProperties": false
+ },
+ "CustomResponse": {
+ "description": "Custom response.",
+ "type": "object",
+ "properties": {
+ "ResponseCode": {
+ "$ref": "#/definitions/ResponseStatusCode"
+ },
+ "CustomResponseBodyKey": {
+ "description": "Custom response body key.",
+ "type": "string",
+ "pattern": "^[\\w\\-]+$"
+ },
+ "ResponseHeaders": {
+ "description": "Collection of HTTP headers.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/CustomHTTPHeader"
+ },
+ "minItems": 1
+ }
+ },
+ "required": [
+ "ResponseCode"
+ ],
+ "additionalProperties": false
+ },
+ "CustomResponseBodies": {
+ "description": "Custom response key and body map.",
+ "type": "object",
+ "patternProperties": {
+ "^[\\w\\-]+$": {
+ "$ref": "#/definitions/CustomResponseBody"
+ }
+ },
+ "additionalProperties": false,
+ "minProperties": 1
+ },
+ "RuleGroup": {
+ "type": "object",
+ "properties": {
+ "Name": {
+ "$ref": "#/definitions/EntityName"
+ },
+ "Id": {
+ "$ref": "#/definitions/EntityId"
+ },
+ "Arn": {
+ "$ref": "#/definitions/ResourceArn"
+ },
+ "Description": {
+ "$ref": "#/definitions/EntityDescription"
+ },
+ "Rules": {
+ "description": "Collection of Rules.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Rule"
+ }
+ },
+ "VisibilityConfig": {
+ "$ref": "#/definitions/VisibilityConfig"
+ },
+ "Capacity": {
+ "type": "integer",
+ "minimum": 0
+ }
+ },
+ "additionalProperties": false
+ },
+ "RulePriority": {
+ "description": "Priority of the Rule, Rules get evaluated from lower to higher priority.",
+ "type": "integer",
+ "minimum": 0
+ },
+ "Scope": {
+ "description": "Use CLOUDFRONT for CloudFront RuleGroup, use REGIONAL for Application Load Balancer and API Gateway.",
+ "type": "string",
+ "enum": [
+ "CLOUDFRONT",
+ "REGIONAL"
+ ]
+ },
+ "SearchString": {
+ "description": "String that is searched to find a match.",
+ "type": "string"
+ },
+ "SearchStringBase64": {
+ "description": "Base64 encoded string that is searched to find a match.",
+ "type": "string"
+ },
+ "SizeConstraintStatement": {
+ "description": "Size Constraint statement.",
+ "type": "object",
+ "properties": {
+ "FieldToMatch": {
+ "$ref": "#/definitions/FieldToMatch"
+ },
+ "ComparisonOperator": {
+ "type": "string",
+ "enum": [
+ "EQ",
+ "NE",
+ "LE",
+ "LT",
+ "GE",
+ "GT"
+ ]
+ },
+ "Size": {
+ "type": "number",
+ "minimum": 0,
+ "maximum": 21474836480
+ },
+ "TextTransformations": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/TextTransformation"
+ }
+ }
+ },
+ "required": [
+ "FieldToMatch",
+ "ComparisonOperator",
+ "Size",
+ "TextTransformations"
+ ],
+ "additionalProperties": false
+ },
+ "SqliMatchStatement": {
+ "description": "Sqli Match Statement.",
+ "type": "object",
+ "properties": {
+ "FieldToMatch": {
+ "$ref": "#/definitions/FieldToMatch"
+ },
+ "TextTransformations": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/TextTransformation"
+ }
+ }
+ },
+ "required": [
+ "FieldToMatch",
+ "TextTransformations"
+ ],
+ "additionalProperties": false
+ },
+ "Statement": {
+ "description": "First level statement that contains conditions, such as ByteMatch, SizeConstraint, etc",
+ "type": "object",
+ "properties": {
+ "ByteMatchStatement": {
+ "$ref": "#/definitions/ByteMatchStatement"
+ },
+ "SqliMatchStatement": {
+ "$ref": "#/definitions/SqliMatchStatement"
+ },
+ "XssMatchStatement": {
+ "$ref": "#/definitions/XssMatchStatement"
+ },
+ "SizeConstraintStatement": {
+ "$ref": "#/definitions/SizeConstraintStatement"
+ },
+ "GeoMatchStatement": {
+ "$ref": "#/definitions/GeoMatchStatement"
+ },
+ "IPSetReferenceStatement": {
+ "$ref": "#/definitions/IPSetReferenceStatement"
+ },
+ "RegexPatternSetReferenceStatement": {
+ "$ref": "#/definitions/RegexPatternSetReferenceStatement"
+ },
+ "RateBasedStatement": {
+ "$ref": "#/definitions/RateBasedStatement"
+ },
+ "AndStatement": {
+ "$ref": "#/definitions/AndStatement"
+ },
+ "OrStatement": {
+ "$ref": "#/definitions/OrStatement"
+ },
+ "NotStatement": {
+ "$ref": "#/definitions/NotStatement"
+ },
+ "LabelMatchStatement": {
+ "$ref": "#/definitions/LabelMatchStatement"
+ },
+ "RegexMatchStatement": {
+ "$ref": "#/definitions/RegexMatchStatement"
+ }
+ },
+ "additionalProperties": false
+ },
+ "Tag": {
+ "type": "object",
+ "properties": {
+ "Key": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Value": {
+ "type": "string",
+ "minLength": 0,
+ "maxLength": 256
+ }
+ },
+ "additionalProperties": false
+ },
+ "TextTransformation": {
+ "description": "Text Transformation on the Search String before match.",
+ "type": "object",
+ "properties": {
+ "Priority": {
+ "$ref": "#/definitions/TextTransformationPriority"
+ },
+ "Type": {
+ "$ref": "#/definitions/TextTransformationType"
+ }
+ },
+ "required": [
+ "Priority",
+ "Type"
+ ],
+ "additionalProperties": false
+ },
+ "TextTransformationPriority": {
+ "description": "Priority of Rule being evaluated.",
+ "type": "integer",
+ "minimum": 0
+ },
+ "TextTransformationType": {
+ "description": "Type of text transformation.",
+ "type": "string",
+ "enum": [
+ "NONE",
+ "COMPRESS_WHITE_SPACE",
+ "HTML_ENTITY_DECODE",
+ "LOWERCASE",
+ "CMD_LINE",
+ "URL_DECODE",
+ "BASE64_DECODE",
+ "HEX_DECODE",
+ "MD5",
+ "REPLACE_COMMENTS",
+ "ESCAPE_SEQ_DECODE",
+ "SQL_HEX_DECODE",
+ "CSS_DECODE",
+ "JS_DECODE",
+ "NORMALIZE_PATH",
+ "NORMALIZE_PATH_WIN",
+ "REMOVE_NULLS",
+ "REPLACE_NULLS",
+ "BASE64_DECODE_EXT",
+ "URL_DECODE_UNI",
+ "UTF8_TO_UNICODE"
+ ]
+ },
+ "VisibilityConfig": {
+ "description": "Visibility Metric of the RuleGroup.",
+ "type": "object",
+ "properties": {
+ "SampledRequestsEnabled": {
+ "type": "boolean"
+ },
+ "CloudWatchMetricsEnabled": {
+ "type": "boolean"
+ },
+ "MetricName": {
+ "type": "string",
+ "maxLength": 128,
+ "minLength": 1
+ }
+ },
+ "required": [
+ "SampledRequestsEnabled",
+ "CloudWatchMetricsEnabled",
+ "MetricName"
+ ],
+ "additionalProperties": false
+ },
+ "XssMatchStatement": {
+ "description": "Xss Match Statement.",
+ "type": "object",
+ "properties": {
+ "FieldToMatch": {
+ "$ref": "#/definitions/FieldToMatch"
+ },
+ "TextTransformations": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/TextTransformation"
+ }
+ }
+ },
+ "required": [
+ "FieldToMatch",
+ "TextTransformations"
+ ],
+ "additionalProperties": false
+ },
+ "LabelName": {
+ "description": "Name of the Label.",
+ "type": "string",
+ "pattern": "^[0-9A-Za-z_:-]{1,1024}$"
+ },
+ "LabelSummary": {
+ "type": "object",
+ "properties": {
+ "Name": {
+ "$ref": "#/definitions/LabelName"
+ }
+ },
+ "additionalProperties": false
+ },
+ "Label": {
+ "type": "object",
+ "properties": {
+ "Name": {
+ "$ref": "#/definitions/LabelName"
+ }
+ },
+ "required": [
+ "Name"
+ ],
+ "additionalProperties": false
+ },
+ "LabelMatchKey": {
+ "type": "string",
+ "pattern": "^[0-9A-Za-z_:-]{1,1024}$"
+ },
+ "LabelMatchScope": {
+ "type": "string",
+ "enum": [
+ "LABEL",
+ "NAMESPACE"
+ ]
+ },
+ "LabelMatchStatement": {
+ "type": "object",
+ "properties": {
+ "Scope": {
+ "$ref": "#/definitions/LabelMatchScope"
+ },
+ "Key": {
+ "$ref": "#/definitions/LabelMatchKey"
+ }
+ },
+ "required": [
+ "Scope",
+ "Key"
+ ],
+ "additionalProperties": false
+ },
+ "RegexMatchStatement": {
+ "type": "object",
+ "properties": {
+ "RegexString": {
+ "type": "string",
+ "maxLength": 512,
+ "minLength": 1
+ },
+ "FieldToMatch": {
+ "$ref": "#/definitions/FieldToMatch"
+ },
+ "TextTransformations": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/TextTransformation"
+ }
+ }
+ },
+ "required": [
+ "RegexString",
+ "FieldToMatch",
+ "TextTransformations"
+ ],
+ "additionalProperties": false
+ },
+ "CaptchaConfig": {
+ "type": "object",
+ "properties": {
+ "ImmunityTimeProperty": {
+ "$ref": "#/definitions/ImmunityTimeProperty"
+ }
+ },
+ "additionalProperties": false
+ },
+ "ImmunityTimeProperty": {
+ "type": "object",
+ "properties": {
+ "ImmunityTime": {
+ "type": "integer",
+ "minimum": 60,
+ "maximum": 259200
+ }
+ },
+ "required": [
+ "ImmunityTime"
+ ],
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "Arn": {
+ "$ref": "#/definitions/ResourceArn"
+ },
+ "Capacity": {
+ "type": "integer",
+ "minimum": 0
+ },
+ "Description": {
+ "$ref": "#/definitions/EntityDescription"
+ },
+ "Name": {
+ "$ref": "#/definitions/EntityName"
+ },
+ "Id": {
+ "$ref": "#/definitions/EntityId"
+ },
+ "Scope": {
+ "$ref": "#/definitions/Scope"
+ },
+ "Rules": {
+ "description": "Collection of Rules.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Rule"
+ }
+ },
+ "VisibilityConfig": {
+ "$ref": "#/definitions/VisibilityConfig"
+ },
+ "Tags": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Tag"
+ },
+ "minItems": 1
+ },
+ "LabelNamespace": {
+ "$ref": "#/definitions/LabelName"
+ },
+ "CustomResponseBodies": {
+ "$ref": "#/definitions/CustomResponseBodies"
+ },
+ "AvailableLabels": {
+ "description": "Collection of Available Labels.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/LabelSummary"
+ }
+ },
+ "ConsumedLabels": {
+ "description": "Collection of Consumed Labels.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/LabelSummary"
+ }
+ }
+ },
+ "required": [
+ "Capacity",
+ "Scope",
+ "VisibilityConfig"
+ ],
+ "primaryIdentifier": [
+ "/properties/Name",
+ "/properties/Id",
+ "/properties/Scope"
+ ],
+ "createOnlyProperties": [
+ "/properties/Name",
+ "/properties/Scope"
+ ],
+ "readOnlyProperties": [
+ "/properties/Arn",
+ "/properties/Id",
+ "/properties/LabelNamespace",
+ "/properties/AvailableLabels",
+ "/properties/ConsumedLabels"
+ ],
+ "additionalProperties": false,
+ "handlers": {
+ "create": {
+ "permissions": [
+ "wafv2:CreateRuleGroup",
+ "wafv2:GetRuleGroup",
+ "wafv2:ListTagsForResource"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "wafv2:DeleteRuleGroup",
+ "wafv2:GetRuleGroup"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "wafv2:GetRuleGroup",
+ "wafv2:ListTagsForResource"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "wafv2:UpdateRuleGroup",
+ "wafv2:GetRuleGroup",
+ "wafv2:ListTagsForResource"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "wafv2:listRuleGroups"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_wafv2_webacl.json b/tools/c7n_awscc/c7n_awscc/data/aws_wafv2_webacl.json
new file mode 100644
index 00000000000..22fe5331e9a
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_wafv2_webacl.json
@@ -0,0 +1,1150 @@
+{
+ "typeName": "AWS::WAFv2::WebACL",
+ "description": "Contains the Rules that identify the requests that you want to allow, block, or count. In a WebACL, you also specify a default action (ALLOW or BLOCK), and the action for each Rule that you add to a WebACL, for example, block requests from specified IP addresses or block requests from specified referrers. You also associate the WebACL with a CloudFront distribution to identify the requests that you want AWS WAF to filter. If you add more than one Rule to a WebACL, a request needs to match only one of the specifications to be allowed, blocked, or counted.",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-wafv2.git",
+ "definitions": {
+ "AndStatement": {
+ "type": "object",
+ "properties": {
+ "Statements": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Statement"
+ }
+ }
+ },
+ "required": [
+ "Statements"
+ ],
+ "additionalProperties": false
+ },
+ "Body": {
+ "type": "object"
+ },
+ "ByteMatchStatement": {
+ "description": "Byte Match statement.",
+ "type": "object",
+ "properties": {
+ "SearchString": {
+ "$ref": "#/definitions/SearchString"
+ },
+ "SearchStringBase64": {
+ "$ref": "#/definitions/SearchStringBase64"
+ },
+ "FieldToMatch": {
+ "$ref": "#/definitions/FieldToMatch"
+ },
+ "TextTransformations": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/TextTransformation"
+ }
+ },
+ "PositionalConstraint": {
+ "$ref": "#/definitions/PositionalConstraint"
+ }
+ },
+ "required": [
+ "FieldToMatch",
+ "PositionalConstraint",
+ "TextTransformations"
+ ],
+ "additionalProperties": false
+ },
+ "DefaultAction": {
+ "description": "Default Action WebACL will take against ingress traffic when there is no matching Rule.",
+ "type": "object",
+ "properties": {
+ "Allow": {
+ "$ref": "#/definitions/AllowAction"
+ },
+ "Block": {
+ "$ref": "#/definitions/BlockAction"
+ }
+ },
+ "additionalProperties": false
+ },
+ "EntityDescription": {
+ "description": "Description of the entity.",
+ "type": "string",
+ "pattern": "^[a-zA-Z0-9=:#@/\\-,.][a-zA-Z0-9+=:#@/\\-,.\\s]+[a-zA-Z0-9+=:#@/\\-,.]{1,256}$"
+ },
+ "EntityName": {
+ "description": "Name of the WebACL.",
+ "type": "string",
+ "pattern": "^[0-9A-Za-z_-]{1,128}$"
+ },
+ "ExcludedRule": {
+ "description": "Excluded Rule in the RuleGroup or ManagedRuleGroup will not be evaluated.",
+ "type": "object",
+ "properties": {
+ "Name": {
+ "$ref": "#/definitions/EntityName"
+ }
+ },
+ "required": [
+ "Name"
+ ],
+ "additionalProperties": false
+ },
+ "ExcludedRules": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/ExcludedRule"
+ }
+ },
+ "FieldToMatch": {
+ "description": "Field of the request to match.",
+ "type": "object",
+ "properties": {
+ "SingleHeader": {
+ "type": "object",
+ "properties": {
+ "Name": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "Name"
+ ],
+ "additionalProperties": false
+ },
+ "SingleQueryArgument": {
+ "description": "One query argument in a web request, identified by name, for example UserName or SalesRegion. The name can be up to 30 characters long and isn't case sensitive.",
+ "type": "object",
+ "properties": {
+ "Name": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "Name"
+ ],
+ "additionalProperties": false
+ },
+ "AllQueryArguments": {
+ "description": "All query arguments of a web request.",
+ "type": "object"
+ },
+ "UriPath": {
+ "description": "The path component of the URI of a web request. This is the part of a web request that identifies a resource, for example, /images/daily-ad.jpg.",
+ "type": "object"
+ },
+ "QueryString": {
+ "description": "The query string of a web request. This is the part of a URL that appears after a ? character, if any.",
+ "type": "object"
+ },
+ "Body": {
+ "description": "The body of a web request. This immediately follows the request headers.",
+ "type": "object"
+ },
+ "Method": {
+ "description": "The HTTP method of a web request. The method indicates the type of operation that the request is asking the origin to perform.",
+ "type": "object"
+ },
+ "JsonBody": {
+ "$ref": "#/definitions/JsonBody"
+ }
+ },
+ "additionalProperties": false
+ },
+ "JsonBody": {
+ "description": "Inspect the request body as JSON. The request body immediately follows the request headers.",
+ "type": "object",
+ "properties": {
+ "MatchPattern": {
+ "$ref": "#/definitions/JsonMatchPattern"
+ },
+ "MatchScope": {
+ "$ref": "#/definitions/JsonMatchScope"
+ },
+ "InvalidFallbackBehavior": {
+ "$ref": "#/definitions/BodyParsingFallbackBehavior"
+ }
+ },
+ "required": [
+ "MatchPattern",
+ "MatchScope"
+ ],
+ "additionalProperties": false
+ },
+ "BodyParsingFallbackBehavior": {
+ "description": "The inspection behavior to fall back to if the JSON in the request body is invalid.",
+ "type": "string",
+ "enum": [
+ "MATCH",
+ "NO_MATCH",
+ "EVALUATE_AS_STRING"
+ ]
+ },
+ "JsonMatchScope": {
+ "description": "The parts of the JSON to match against using the MatchPattern.",
+ "type": "string",
+ "enum": [
+ "ALL",
+ "KEY",
+ "VALUE"
+ ]
+ },
+ "JsonMatchPattern": {
+ "description": "The pattern to look for in the JSON body.",
+ "type": "object",
+ "properties": {
+ "All": {
+ "description": "Inspect all parts of the web request's JSON body.",
+ "type": "object"
+ },
+ "IncludedPaths": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/JsonPointerPath"
+ }
+ }
+ },
+ "additionalProperties": false
+ },
+ "JsonPointerPath": {
+ "description": "JSON pointer path in the web request's JSON body",
+ "type": "string",
+ "pattern": "^[\\/]+([^~]*(~[01])*)*{1,512}$"
+ },
+ "GeoMatchStatement": {
+ "type": "object",
+ "properties": {
+ "CountryCodes": {
+ "type": "array",
+ "items": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 2
+ }
+ },
+ "ForwardedIPConfig": {
+ "$ref": "#/definitions/ForwardedIPConfiguration"
+ }
+ },
+ "additionalProperties": false
+ },
+ "EntityId": {
+ "description": "Id of the WebACL",
+ "type": "string",
+ "pattern": "^[0-9a-f]{8}-(?:[0-9a-f]{4}-){3}[0-9a-f]{12}$"
+ },
+ "IPSetReferenceStatement": {
+ "type": "object",
+ "properties": {
+ "Arn": {
+ "$ref": "#/definitions/ResourceArn"
+ },
+ "IPSetForwardedIPConfig": {
+ "$ref": "#/definitions/IPSetForwardedIPConfiguration"
+ }
+ },
+ "required": [
+ "Arn"
+ ],
+ "additionalProperties": false
+ },
+ "ManagedRuleGroupStatement": {
+ "type": "object",
+ "properties": {
+ "Name": {
+ "$ref": "#/definitions/EntityName"
+ },
+ "VendorName": {
+ "type": "string"
+ },
+ "Version": {
+ "type": "string",
+ "pattern": "^[\\w#:\\.\\-/]+$",
+ "minLength": 1,
+ "maxLength": 64
+ },
+ "ExcludedRules": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/ExcludedRule"
+ }
+ },
+ "ScopeDownStatement": {
+ "$ref": "#/definitions/Statement"
+ }
+ },
+ "required": [
+ "VendorName",
+ "Name"
+ ],
+ "additionalProperties": false
+ },
+ "NotStatement": {
+ "type": "object",
+ "properties": {
+ "Statement": {
+ "$ref": "#/definitions/Statement"
+ }
+ },
+ "required": [
+ "Statement"
+ ],
+ "additionalProperties": false
+ },
+ "OrStatement": {
+ "type": "object",
+ "properties": {
+ "Statements": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Statement"
+ }
+ }
+ },
+ "required": [
+ "Statements"
+ ],
+ "additionalProperties": false
+ },
+ "OverrideAction": {
+ "description": "Override a RuleGroup or ManagedRuleGroup behavior. This can only be applied to Rule that has RuleGroupReferenceStatement or ManagedRuleGroupReferenceStatement.",
+ "type": "object",
+ "properties": {
+ "Count": {
+ "description": "Count traffic towards application.",
+ "type": "object"
+ },
+ "None": {
+ "description": "Keep the RuleGroup or ManagedRuleGroup behavior as is.",
+ "type": "object"
+ }
+ },
+ "additionalProperties": false
+ },
+ "PositionalConstraint": {
+ "description": "Position of the evaluation in the FieldToMatch of request.",
+ "type": "string",
+ "enum": [
+ "EXACTLY",
+ "STARTS_WITH",
+ "ENDS_WITH",
+ "CONTAINS",
+ "CONTAINS_WORD"
+ ]
+ },
+ "QueryString": {
+ "type": "object"
+ },
+ "RateBasedStatement": {
+ "type": "object",
+ "properties": {
+ "Limit": {
+ "$ref": "#/definitions/RateLimit"
+ },
+ "AggregateKeyType": {
+ "type": "string",
+ "enum": [
+ "IP",
+ "FORWARDED_IP"
+ ]
+ },
+ "ScopeDownStatement": {
+ "$ref": "#/definitions/Statement"
+ },
+ "ForwardedIPConfig": {
+ "$ref": "#/definitions/ForwardedIPConfiguration"
+ }
+ },
+ "required": [
+ "Limit",
+ "AggregateKeyType"
+ ],
+ "additionalProperties": false
+ },
+ "RateLimit": {
+ "type": "integer",
+ "minimum": 100,
+ "maximum": 2000000000
+ },
+ "RegexPatternSetReferenceStatement": {
+ "type": "object",
+ "properties": {
+ "Arn": {
+ "$ref": "#/definitions/ResourceArn"
+ },
+ "FieldToMatch": {
+ "$ref": "#/definitions/FieldToMatch"
+ },
+ "TextTransformations": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/TextTransformation"
+ }
+ }
+ },
+ "required": [
+ "Arn",
+ "FieldToMatch",
+ "TextTransformations"
+ ],
+ "additionalProperties": false
+ },
+ "ResourceArn": {
+ "description": "ARN of the WAF entity.",
+ "type": "string",
+ "minLength": 20,
+ "maxLength": 2048
+ },
+ "ForwardedIPConfiguration": {
+ "type": "object",
+ "properties": {
+ "HeaderName": {
+ "type": "string",
+ "pattern": "^[a-zA-Z0-9-]+{1,255}$"
+ },
+ "FallbackBehavior": {
+ "type": "string",
+ "enum": [
+ "MATCH",
+ "NO_MATCH"
+ ]
+ }
+ },
+ "required": [
+ "HeaderName",
+ "FallbackBehavior"
+ ],
+ "additionalProperties": false
+ },
+ "IPSetForwardedIPConfiguration": {
+ "type": "object",
+ "properties": {
+ "HeaderName": {
+ "type": "string",
+ "pattern": "^[a-zA-Z0-9-]+{1,255}$"
+ },
+ "FallbackBehavior": {
+ "type": "string",
+ "enum": [
+ "MATCH",
+ "NO_MATCH"
+ ]
+ },
+ "Position": {
+ "type": "string",
+ "enum": [
+ "FIRST",
+ "LAST",
+ "ANY"
+ ]
+ }
+ },
+ "required": [
+ "HeaderName",
+ "FallbackBehavior",
+ "Position"
+ ],
+ "additionalProperties": false
+ },
+ "Rule": {
+ "description": "Rule of WebACL that contains condition and action.",
+ "type": "object",
+ "properties": {
+ "Name": {
+ "$ref": "#/definitions/EntityName"
+ },
+ "Priority": {
+ "$ref": "#/definitions/RulePriority"
+ },
+ "Statement": {
+ "$ref": "#/definitions/Statement"
+ },
+ "Action": {
+ "$ref": "#/definitions/RuleAction"
+ },
+ "OverrideAction": {
+ "$ref": "#/definitions/OverrideAction"
+ },
+ "RuleLabels": {
+ "description": "Collection of Rule Labels.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Label"
+ }
+ },
+ "VisibilityConfig": {
+ "$ref": "#/definitions/VisibilityConfig"
+ },
+ "CaptchaConfig": {
+ "$ref": "#/definitions/CaptchaConfig"
+ }
+ },
+ "required": [
+ "Name",
+ "Priority",
+ "Statement",
+ "VisibilityConfig"
+ ],
+ "additionalProperties": false
+ },
+ "Rules": {
+ "description": "Collection of Rules.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Rule"
+ }
+ },
+ "RuleAction": {
+ "description": "Action taken when Rule matches its condition.",
+ "type": "object",
+ "properties": {
+ "Allow": {
+ "$ref": "#/definitions/AllowAction"
+ },
+ "Block": {
+ "$ref": "#/definitions/BlockAction"
+ },
+ "Count": {
+ "$ref": "#/definitions/CountAction"
+ },
+ "Captcha": {
+ "$ref": "#/definitions/CaptchaAction"
+ }
+ },
+ "additionalProperties": false
+ },
+ "AllowAction": {
+ "description": "Allow traffic towards application.",
+ "type": "object",
+ "properties": {
+ "CustomRequestHandling": {
+ "$ref": "#/definitions/CustomRequestHandling"
+ }
+ },
+ "additionalProperties": false
+ },
+ "CountAction": {
+ "description": "Allow traffic towards application.",
+ "type": "object",
+ "properties": {
+ "CustomRequestHandling": {
+ "$ref": "#/definitions/CustomRequestHandling"
+ }
+ },
+ "additionalProperties": false
+ },
+ "CaptchaAction": {
+ "description": "Checks valid token exists with request.",
+ "type": "object",
+ "properties": {
+ "CustomRequestHandling": {
+ "$ref": "#/definitions/CustomRequestHandling"
+ }
+ },
+ "additionalProperties": false
+ },
+ "BlockAction": {
+ "description": "Block traffic towards application.",
+ "type": "object",
+ "properties": {
+ "CustomResponse": {
+ "$ref": "#/definitions/CustomResponse"
+ }
+ },
+ "additionalProperties": false
+ },
+ "CustomHTTPHeaderName": {
+ "description": "HTTP header name.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 64
+ },
+ "CustomHTTPHeaderValue": {
+ "description": "HTTP header value.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 255
+ },
+ "CustomHTTPHeader": {
+ "description": "HTTP header.",
+ "type": "object",
+ "properties": {
+ "Name": {
+ "$ref": "#/definitions/CustomHTTPHeaderName"
+ },
+ "Value": {
+ "$ref": "#/definitions/CustomHTTPHeaderValue"
+ }
+ },
+ "required": [
+ "Name",
+ "Value"
+ ],
+ "additionalProperties": false
+ },
+ "CustomRequestHandling": {
+ "description": "Custom request handling.",
+ "type": "object",
+ "properties": {
+ "InsertHeaders": {
+ "description": "Collection of HTTP headers.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/CustomHTTPHeader"
+ },
+ "minItems": 1
+ }
+ },
+ "required": [
+ "InsertHeaders"
+ ],
+ "additionalProperties": false
+ },
+ "ResponseStatusCode": {
+ "description": "Custom response code.",
+ "type": "integer",
+ "minimum": 200,
+ "maximum": 599
+ },
+ "ResponseContentType": {
+ "description": "Valid values are TEXT_PLAIN, TEXT_HTML, and APPLICATION_JSON.",
+ "type": "string",
+ "enum": [
+ "TEXT_PLAIN",
+ "TEXT_HTML",
+ "APPLICATION_JSON"
+ ]
+ },
+ "ResponseContent": {
+ "description": "Response content.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 10240
+ },
+ "CustomResponseBody": {
+ "description": "Custom response body.",
+ "type": "object",
+ "properties": {
+ "ContentType": {
+ "$ref": "#/definitions/ResponseContentType"
+ },
+ "Content": {
+ "$ref": "#/definitions/ResponseContent"
+ }
+ },
+ "required": [
+ "ContentType",
+ "Content"
+ ],
+ "additionalProperties": false
+ },
+ "CustomResponse": {
+ "description": "Custom response.",
+ "type": "object",
+ "properties": {
+ "ResponseCode": {
+ "$ref": "#/definitions/ResponseStatusCode"
+ },
+ "CustomResponseBodyKey": {
+ "description": "Custom response body key.",
+ "type": "string",
+ "pattern": "^[\\w\\-]+$"
+ },
+ "ResponseHeaders": {
+ "description": "Collection of HTTP headers.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/CustomHTTPHeader"
+ },
+ "minItems": 1
+ }
+ },
+ "required": [
+ "ResponseCode"
+ ],
+ "additionalProperties": false
+ },
+ "CustomResponseBodies": {
+ "description": "Custom response key and body map.",
+ "type": "object",
+ "patternProperties": {
+ "^[\\w\\-]+$": {
+ "$ref": "#/definitions/CustomResponseBody"
+ }
+ },
+ "minProperties": 1,
+ "additionalProperties": false
+ },
+ "RuleGroupReferenceStatement": {
+ "type": "object",
+ "properties": {
+ "Arn": {
+ "$ref": "#/definitions/ResourceArn"
+ },
+ "ExcludedRules": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/ExcludedRule"
+ }
+ }
+ },
+ "required": [
+ "Arn"
+ ],
+ "additionalProperties": false
+ },
+ "RulePriority": {
+ "description": "Priority of the Rule, Rules get evaluated from lower to higher priority.",
+ "type": "integer",
+ "minimum": 0
+ },
+ "Scope": {
+ "description": "Use CLOUDFRONT for CloudFront WebACL, use REGIONAL for Application Load Balancer and API Gateway.",
+ "type": "string",
+ "enum": [
+ "CLOUDFRONT",
+ "REGIONAL"
+ ]
+ },
+ "SearchString": {
+ "description": "String that is searched to find a match.",
+ "type": "string"
+ },
+ "SearchStringBase64": {
+ "description": "Base64 encoded string that is searched to find a match.",
+ "type": "string"
+ },
+ "SingleHeader": {
+ "type": "object",
+ "properties": {
+ "Name": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ },
+ "SingleQueryArgument": {
+ "type": "object",
+ "properties": {
+ "Name": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ },
+ "SizeConstraintStatement": {
+ "description": "Size Constraint statement.",
+ "type": "object",
+ "properties": {
+ "FieldToMatch": {
+ "$ref": "#/definitions/FieldToMatch"
+ },
+ "ComparisonOperator": {
+ "type": "string",
+ "enum": [
+ "EQ",
+ "NE",
+ "LE",
+ "LT",
+ "GE",
+ "GT"
+ ]
+ },
+ "Size": {
+ "type": "number",
+ "minimum": 0,
+ "maximum": 21474836480
+ },
+ "TextTransformations": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/TextTransformation"
+ }
+ }
+ },
+ "required": [
+ "FieldToMatch",
+ "ComparisonOperator",
+ "Size",
+ "TextTransformations"
+ ],
+ "additionalProperties": false
+ },
+ "SqliMatchStatement": {
+ "description": "Sqli Match Statement.",
+ "type": "object",
+ "properties": {
+ "FieldToMatch": {
+ "$ref": "#/definitions/FieldToMatch"
+ },
+ "TextTransformations": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/TextTransformation"
+ }
+ }
+ },
+ "required": [
+ "FieldToMatch",
+ "TextTransformations"
+ ],
+ "additionalProperties": false
+ },
+ "Statement": {
+ "description": "First level statement that contains conditions, such as ByteMatch, SizeConstraint, etc",
+ "type": "object",
+ "properties": {
+ "ByteMatchStatement": {
+ "$ref": "#/definitions/ByteMatchStatement"
+ },
+ "SqliMatchStatement": {
+ "$ref": "#/definitions/SqliMatchStatement"
+ },
+ "XssMatchStatement": {
+ "$ref": "#/definitions/XssMatchStatement"
+ },
+ "SizeConstraintStatement": {
+ "$ref": "#/definitions/SizeConstraintStatement"
+ },
+ "GeoMatchStatement": {
+ "$ref": "#/definitions/GeoMatchStatement"
+ },
+ "RuleGroupReferenceStatement": {
+ "$ref": "#/definitions/RuleGroupReferenceStatement"
+ },
+ "IPSetReferenceStatement": {
+ "$ref": "#/definitions/IPSetReferenceStatement"
+ },
+ "RegexPatternSetReferenceStatement": {
+ "$ref": "#/definitions/RegexPatternSetReferenceStatement"
+ },
+ "ManagedRuleGroupStatement": {
+ "$ref": "#/definitions/ManagedRuleGroupStatement"
+ },
+ "RateBasedStatement": {
+ "$ref": "#/definitions/RateBasedStatement"
+ },
+ "AndStatement": {
+ "$ref": "#/definitions/AndStatement"
+ },
+ "OrStatement": {
+ "$ref": "#/definitions/OrStatement"
+ },
+ "NotStatement": {
+ "$ref": "#/definitions/NotStatement"
+ },
+ "LabelMatchStatement": {
+ "$ref": "#/definitions/LabelMatchStatement"
+ },
+ "RegexMatchStatement": {
+ "$ref": "#/definitions/RegexMatchStatement"
+ }
+ },
+ "additionalProperties": false
+ },
+ "Tag": {
+ "type": "object",
+ "properties": {
+ "Key": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 128
+ },
+ "Value": {
+ "type": "string",
+ "minLength": 0,
+ "maxLength": 256
+ }
+ },
+ "additionalProperties": false
+ },
+ "TextTransformation": {
+ "description": "Text Transformation on the Search String before match.",
+ "type": "object",
+ "properties": {
+ "Priority": {
+ "$ref": "#/definitions/TextTransformationPriority"
+ },
+ "Type": {
+ "$ref": "#/definitions/TextTransformationType"
+ }
+ },
+ "required": [
+ "Priority",
+ "Type"
+ ],
+ "additionalProperties": false
+ },
+ "TextTransformationPriority": {
+ "description": "Priority of Rule being evaluated.",
+ "type": "integer",
+ "minimum": 0
+ },
+ "TextTransformationType": {
+ "description": "Type of text transformation.",
+ "type": "string",
+ "enum": [
+ "NONE",
+ "COMPRESS_WHITE_SPACE",
+ "HTML_ENTITY_DECODE",
+ "LOWERCASE",
+ "CMD_LINE",
+ "URL_DECODE",
+ "BASE64_DECODE",
+ "HEX_DECODE",
+ "MD5",
+ "REPLACE_COMMENTS",
+ "ESCAPE_SEQ_DECODE",
+ "SQL_HEX_DECODE",
+ "CSS_DECODE",
+ "JS_DECODE",
+ "NORMALIZE_PATH",
+ "NORMALIZE_PATH_WIN",
+ "REMOVE_NULLS",
+ "REPLACE_NULLS",
+ "BASE64_DECODE_EXT",
+ "URL_DECODE_UNI",
+ "UTF8_TO_UNICODE"
+ ]
+ },
+ "UriPath": {
+ "type": "object"
+ },
+ "VisibilityConfig": {
+ "description": "Visibility Metric of the WebACL.",
+ "type": "object",
+ "properties": {
+ "SampledRequestsEnabled": {
+ "type": "boolean"
+ },
+ "CloudWatchMetricsEnabled": {
+ "type": "boolean"
+ },
+ "MetricName": {
+ "type": "string",
+ "maxLength": 128,
+ "minLength": 1
+ }
+ },
+ "required": [
+ "SampledRequestsEnabled",
+ "CloudWatchMetricsEnabled",
+ "MetricName"
+ ],
+ "additionalProperties": false
+ },
+ "XssMatchStatement": {
+ "description": "Xss Match Statement.",
+ "type": "object",
+ "properties": {
+ "FieldToMatch": {
+ "$ref": "#/definitions/FieldToMatch"
+ },
+ "TextTransformations": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/TextTransformation"
+ }
+ }
+ },
+ "required": [
+ "FieldToMatch",
+ "TextTransformations"
+ ],
+ "additionalProperties": false
+ },
+ "LabelName": {
+ "description": "Name of the Label.",
+ "type": "string",
+ "pattern": "^[0-9A-Za-z_:-]{1,1024}$"
+ },
+ "Label": {
+ "type": "object",
+ "properties": {
+ "Name": {
+ "$ref": "#/definitions/LabelName"
+ }
+ },
+ "required": [
+ "Name"
+ ],
+ "additionalProperties": false
+ },
+ "LabelMatchKey": {
+ "type": "string",
+ "pattern": "^[0-9A-Za-z_:-]{1,1024}$"
+ },
+ "LabelMatchScope": {
+ "type": "string",
+ "enum": [
+ "LABEL",
+ "NAMESPACE"
+ ]
+ },
+ "LabelMatchStatement": {
+ "type": "object",
+ "properties": {
+ "Scope": {
+ "$ref": "#/definitions/LabelMatchScope"
+ },
+ "Key": {
+ "$ref": "#/definitions/LabelMatchKey"
+ }
+ },
+ "required": [
+ "Scope",
+ "Key"
+ ],
+ "additionalProperties": false
+ },
+ "RegexMatchStatement": {
+ "type": "object",
+ "properties": {
+ "RegexString": {
+ "type": "string",
+ "maxLength": 512,
+ "minLength": 1
+ },
+ "FieldToMatch": {
+ "$ref": "#/definitions/FieldToMatch"
+ },
+ "TextTransformations": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/TextTransformation"
+ }
+ }
+ },
+ "required": [
+ "RegexString",
+ "FieldToMatch",
+ "TextTransformations"
+ ],
+ "additionalProperties": false
+ },
+ "CaptchaConfig": {
+ "type": "object",
+ "properties": {
+ "ImmunityTimeProperty": {
+ "$ref": "#/definitions/ImmunityTimeProperty"
+ }
+ },
+ "additionalProperties": false
+ },
+ "ImmunityTimeProperty": {
+ "type": "object",
+ "properties": {
+ "ImmunityTime": {
+ "type": "integer",
+ "minimum": 60,
+ "maximum": 259200
+ }
+ },
+ "required": [
+ "ImmunityTime"
+ ],
+ "additionalProperties": false
+ }
+ },
+ "properties": {
+ "Arn": {
+ "$ref": "#/definitions/ResourceArn"
+ },
+ "Capacity": {
+ "type": "integer",
+ "minimum": 0
+ },
+ "DefaultAction": {
+ "$ref": "#/definitions/DefaultAction"
+ },
+ "Description": {
+ "$ref": "#/definitions/EntityDescription"
+ },
+ "Name": {
+ "$ref": "#/definitions/EntityName"
+ },
+ "Id": {
+ "$ref": "#/definitions/EntityId"
+ },
+ "Scope": {
+ "$ref": "#/definitions/Scope"
+ },
+ "Rules": {
+ "description": "Collection of Rules.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Rule"
+ }
+ },
+ "VisibilityConfig": {
+ "$ref": "#/definitions/VisibilityConfig"
+ },
+ "Tags": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Tag"
+ },
+ "minItems": 1
+ },
+ "LabelNamespace": {
+ "$ref": "#/definitions/LabelName"
+ },
+ "CustomResponseBodies": {
+ "$ref": "#/definitions/CustomResponseBodies"
+ },
+ "CaptchaConfig": {
+ "$ref": "#/definitions/CaptchaConfig"
+ }
+ },
+ "required": [
+ "DefaultAction",
+ "Scope",
+ "VisibilityConfig"
+ ],
+ "primaryIdentifier": [
+ "/properties/Name",
+ "/properties/Id",
+ "/properties/Scope"
+ ],
+ "createOnlyProperties": [
+ "/properties/Name",
+ "/properties/Scope"
+ ],
+ "readOnlyProperties": [
+ "/properties/Arn",
+ "/properties/Capacity",
+ "/properties/Id",
+ "/properties/LabelNamespace"
+ ],
+ "additionalProperties": false,
+ "handlers": {
+ "create": {
+ "permissions": [
+ "wafv2:CreateWebACL",
+ "wafv2:GetWebACL",
+ "wafv2:ListTagsForResource"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "wafv2:DeleteWebACL",
+ "wafv2:GetWebACL"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "wafv2:GetWebACL",
+ "wafv2:ListTagsForResource"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "wafv2:UpdateWebACL",
+ "wafv2:GetWebACL",
+ "wafv2:ListTagsForResource"
+ ]
+ },
+ "list": {
+ "permissions": [
+ "wafv2:listWebACLs"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_wafv2_webaclassociation.json b/tools/c7n_awscc/c7n_awscc/data/aws_wafv2_webaclassociation.json
new file mode 100644
index 00000000000..503936cf59d
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_wafv2_webaclassociation.json
@@ -0,0 +1,62 @@
+{
+ "typeName": "AWS::WAFv2::WebACLAssociation",
+ "description": "Associates WebACL to Application Load Balancer, CloudFront or API Gateway.",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-wafv2.git",
+ "definitions": {
+ "ResourceArn": {
+ "type": "string",
+ "minLength": 20,
+ "maxLength": 2048
+ }
+ },
+ "properties": {
+ "ResourceArn": {
+ "$ref": "#/definitions/ResourceArn"
+ },
+ "WebACLArn": {
+ "$ref": "#/definitions/ResourceArn"
+ }
+ },
+ "required": [
+ "ResourceArn",
+ "WebACLArn"
+ ],
+ "createOnlyProperties": [
+ "/properties/ResourceArn",
+ "/properties/WebACLArn"
+ ],
+ "primaryIdentifier": [
+ "/properties/ResourceArn",
+ "/properties/WebACLArn"
+ ],
+ "additionalProperties": false,
+ "handlers": {
+ "create": {
+ "permissions": [
+ "wafv2:AssociateWebACL",
+ "elasticloadbalancing:SetWebACL",
+ "apigateway:SetWebACL",
+ "appsync:SetWebACL"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "wafv2:DisassociateWebACL",
+ "wafv2:GetWebACLForResource",
+ "wafv2:GetWebACL",
+ "elasticloadbalancing:SetWebACL",
+ "apigateway:SetWebACL",
+ "appsync:SetWebACL"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "wafv2:GetWebACLForResource",
+ "wafv2:GetWebACL"
+ ]
+ },
+ "update": {
+ "permissions": []
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_xray_group.json b/tools/c7n_awscc/c7n_awscc/data/aws_xray_group.json
new file mode 100644
index 00000000000..a6977c415db
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_xray_group.json
@@ -0,0 +1,94 @@
+{
+ "typeName": "AWS::XRay::Group",
+ "description": "This schema provides construct and validation rules for AWS-XRay Group resource parameters.",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git",
+ "properties": {
+ "FilterExpression": {
+ "description": "The filter expression defining criteria by which to group traces.",
+ "type": "string"
+ },
+ "GroupName": {
+ "description": "The case-sensitive name of the new group. Names must be unique.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 32
+ },
+ "GroupARN": {
+ "description": "The ARN of the group that was generated on creation.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 400
+ },
+ "InsightsConfiguration": {
+ "$ref": "#/definitions/InsightsConfiguration"
+ },
+ "Tags": {
+ "$ref": "#/definitions/Tags"
+ }
+ },
+ "definitions": {
+ "InsightsConfiguration": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "InsightsEnabled": {
+ "description": "Set the InsightsEnabled value to true to enable insights or false to disable insights.",
+ "type": "boolean"
+ },
+ "NotificationsEnabled": {
+ "description": "Set the NotificationsEnabled value to true to enable insights notifications. Notifications can only be enabled on a group with InsightsEnabled set to true.",
+ "type": "boolean"
+ }
+ }
+ },
+ "Tags": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "required": [
+ "Key",
+ "Value"
+ ],
+ "properties": {
+ "Key": {
+ "type": "string"
+ },
+ "Value": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ }
+ }
+ },
+ "handlers": {
+ "create": {
+ "permissions": [
+ "xray:CreateGroup",
+ "xray:TagResource"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "xray:GetGroup"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "xray:UpdateGroup"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "xray:DeleteGroup"
+ ]
+ }
+ },
+ "additionalProperties": false,
+ "primaryIdentifier": [
+ "/properties/GroupARN"
+ ],
+ "readOnlyProperties": [
+ "/properties/GroupARN"
+ ]
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/aws_xray_samplingrule.json b/tools/c7n_awscc/c7n_awscc/data/aws_xray_samplingrule.json
new file mode 100644
index 00000000000..2609c801914
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/aws_xray_samplingrule.json
@@ -0,0 +1,248 @@
+{
+ "typeName": "AWS::XRay::SamplingRule",
+ "description": "This schema provides construct and validation rules for AWS-XRay SamplingRule resource parameters.",
+ "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git",
+ "properties": {
+ "SamplingRule": {
+ "$ref": "#/definitions/SamplingRule"
+ },
+ "SamplingRuleRecord": {
+ "$ref": "#/definitions/SamplingRuleRecord"
+ },
+ "SamplingRuleUpdate": {
+ "$ref": "#/definitions/SamplingRuleUpdate"
+ },
+ "RuleARN": {
+ "$ref": "#/definitions/RuleARN"
+ },
+ "RuleName": {
+ "$ref": "#/definitions/RuleName"
+ },
+ "Tags": {
+ "$ref": "#/definitions/Tags"
+ }
+ },
+ "definitions": {
+ "SamplingRule": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Attributes": {
+ "$comment": "String to string map",
+ "description": "Matches attributes derived from the request.",
+ "type": "object",
+ "patternProperties": {
+ ".{1,}": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ },
+ "FixedRate": {
+ "description": "The percentage of matching requests to instrument, after the reservoir is exhausted.",
+ "type": "number",
+ "minimum": 0,
+ "maximum": 1
+ },
+ "Host": {
+ "description": "Matches the hostname from a request URL.",
+ "type": "string",
+ "maxLength": 64
+ },
+ "HTTPMethod": {
+ "description": "Matches the HTTP method from a request URL.",
+ "type": "string",
+ "maxLength": 10
+ },
+ "Priority": {
+ "description": "The priority of the sampling rule.",
+ "type": "integer",
+ "minimum": 1,
+ "maximum": 9999
+ },
+ "ReservoirSize": {
+ "description": "A fixed number of matching requests to instrument per second, prior to applying the fixed rate. The reservoir is not used directly by services, but applies to all services using the rule collectively.",
+ "type": "integer",
+ "minimum": 0
+ },
+ "ResourceARN": {
+ "description": "Matches the ARN of the AWS resource on which the service runs.",
+ "type": "string",
+ "maxLength": 500
+ },
+ "RuleARN": {
+ "$ref": "#/definitions/RuleARN"
+ },
+ "RuleName": {
+ "$ref": "#/definitions/RuleName"
+ },
+ "ServiceName": {
+ "description": "Matches the name that the service uses to identify itself in segments.",
+ "type": "string",
+ "maxLength": 64
+ },
+ "ServiceType": {
+ "description": "Matches the origin that the service uses to identify its type in segments.",
+ "type": "string",
+ "maxLength": 64
+ },
+ "URLPath": {
+ "description": "Matches the path from a request URL.",
+ "type": "string",
+ "maxLength": 128
+ },
+ "Version": {
+ "description": "The version of the sampling rule format (1)",
+ "type": "integer",
+ "minimum": 1
+ }
+ }
+ },
+ "SamplingRuleRecord": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "CreatedAt": {
+ "description": "When the rule was created, in Unix time seconds.",
+ "type": "string"
+ },
+ "ModifiedAt": {
+ "description": "When the rule was modified, in Unix time seconds.",
+ "type": "string"
+ },
+ "SamplingRule": {
+ "$ref": "#/definitions/SamplingRule"
+ }
+ }
+ },
+ "SamplingRuleUpdate": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "Attributes": {
+ "$comment": "String to string map",
+ "description": "Matches attributes derived from the request.",
+ "type": "object",
+ "patternProperties": {
+ ".{1,}": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ },
+ "FixedRate": {
+ "description": "The percentage of matching requests to instrument, after the reservoir is exhausted.",
+ "type": "number",
+ "minimum": 0,
+ "maximum": 1
+ },
+ "Host": {
+ "description": "Matches the hostname from a request URL.",
+ "type": "string",
+ "maxLength": 64
+ },
+ "HTTPMethod": {
+ "description": "Matches the HTTP method from a request URL.",
+ "type": "string",
+ "maxLength": 10
+ },
+ "Priority": {
+ "description": "The priority of the sampling rule.",
+ "type": "integer",
+ "minimum": 1,
+ "maximum": 9999
+ },
+ "ReservoirSize": {
+ "description": "A fixed number of matching requests to instrument per second, prior to applying the fixed rate. The reservoir is not used directly by services, but applies to all services using the rule collectively.",
+ "type": "integer",
+ "minimum": 0
+ },
+ "ResourceARN": {
+ "description": "Matches the ARN of the AWS resource on which the service runs.",
+ "type": "string",
+ "maxLength": 500
+ },
+ "RuleARN": {
+ "$ref": "#/definitions/RuleARN"
+ },
+ "RuleName": {
+ "$ref": "#/definitions/RuleName"
+ },
+ "ServiceName": {
+ "description": "Matches the name that the service uses to identify itself in segments.",
+ "type": "string",
+ "maxLength": 64
+ },
+ "ServiceType": {
+ "description": "Matches the origin that the service uses to identify its type in segments.",
+ "type": "string",
+ "maxLength": 64
+ },
+ "URLPath": {
+ "description": "Matches the path from a request URL.",
+ "type": "string",
+ "maxLength": 128
+ }
+ }
+ },
+ "RuleName": {
+ "description": "The ARN of the sampling rule. Specify a rule by either name or ARN, but not both.",
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 32
+ },
+ "RuleARN": {
+ "description": "The ARN of the sampling rule. Specify a rule by either name or ARN, but not both.",
+ "type": "string"
+ },
+ "Tags": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "required": [
+ "Key",
+ "Value"
+ ],
+ "properties": {
+ "Key": {
+ "type": "string"
+ },
+ "Value": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ }
+ }
+ },
+ "handlers": {
+ "create": {
+ "permissions": [
+ "xray:CreateSamplingRule",
+ "xray:TagResource"
+ ]
+ },
+ "read": {
+ "permissions": [
+ "xray:GetSamplingRules"
+ ]
+ },
+ "update": {
+ "permissions": [
+ "xray:UpdateSamplingRule"
+ ]
+ },
+ "delete": {
+ "permissions": [
+ "xray:DeleteSamplingRule"
+ ]
+ }
+ },
+ "additionalProperties": false,
+ "primaryIdentifier": [
+ "/properties/RuleARN"
+ ],
+ "readOnlyProperties": [
+ "/properties/RuleARN"
+ ]
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/data/index.json b/tools/c7n_awscc/c7n_awscc/data/index.json
new file mode 100644
index 00000000000..908b9f3e225
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/data/index.json
@@ -0,0 +1,2033 @@
+{
+ "resources": {
+ "awscc.accessanalyzer_analyzer": "c7n_awscc.resources.accessanalyzer_analyzer.AccessanalyzerAnalyzer",
+ "awscc.acmpca_certificate": "c7n_awscc.resources.acmpca_certificate.AcmpcaCertificate",
+ "awscc.acmpca_certificateauthority": "c7n_awscc.resources.acmpca_certificateauthority.AcmpcaCertificateauthority",
+ "awscc.acmpca_certificateauthorityactivation": "c7n_awscc.resources.acmpca_certificateauthorityactivation.AcmpcaCertificateauthorityactivation",
+ "awscc.amplify_app": "c7n_awscc.resources.amplify_app.AmplifyApp",
+ "awscc.amplify_branch": "c7n_awscc.resources.amplify_branch.AmplifyBranch",
+ "awscc.amplify_domain": "c7n_awscc.resources.amplify_domain.AmplifyDomain",
+ "awscc.amplifyuibuilder_component": "c7n_awscc.resources.amplifyuibuilder_component.AmplifyuibuilderComponent",
+ "awscc.amplifyuibuilder_theme": "c7n_awscc.resources.amplifyuibuilder_theme.AmplifyuibuilderTheme",
+ "awscc.apigateway_account": "c7n_awscc.resources.apigateway_account.ApigatewayAccount",
+ "awscc.apigateway_apikey": "c7n_awscc.resources.apigateway_apikey.ApigatewayApikey",
+ "awscc.apigateway_authorizer": "c7n_awscc.resources.apigateway_authorizer.ApigatewayAuthorizer",
+ "awscc.apigateway_basepathmapping": "c7n_awscc.resources.apigateway_basepathmapping.ApigatewayBasepathmapping",
+ "awscc.apigateway_clientcertificate": "c7n_awscc.resources.apigateway_clientcertificate.ApigatewayClientcertificate",
+ "awscc.apigateway_deployment": "c7n_awscc.resources.apigateway_deployment.ApigatewayDeployment",
+ "awscc.apigateway_documentationversion": "c7n_awscc.resources.apigateway_documentationversion.ApigatewayDocumentationversion",
+ "awscc.apigateway_domainname": "c7n_awscc.resources.apigateway_domainname.ApigatewayDomainname",
+ "awscc.apigateway_method": "c7n_awscc.resources.apigateway_method.ApigatewayMethod",
+ "awscc.apigateway_model": "c7n_awscc.resources.apigateway_model.ApigatewayModel",
+ "awscc.apigateway_requestvalidator": "c7n_awscc.resources.apigateway_requestvalidator.ApigatewayRequestvalidator",
+ "awscc.apigateway_stage": "c7n_awscc.resources.apigateway_stage.ApigatewayStage",
+ "awscc.apigateway_usageplan": "c7n_awscc.resources.apigateway_usageplan.ApigatewayUsageplan",
+ "awscc.appflow_connectorprofile": "c7n_awscc.resources.appflow_connectorprofile.AppflowConnectorprofile",
+ "awscc.appflow_flow": "c7n_awscc.resources.appflow_flow.AppflowFlow",
+ "awscc.appintegrations_eventintegration": "c7n_awscc.resources.appintegrations_eventintegration.AppintegrationsEventintegration",
+ "awscc.applicationinsights_application": "c7n_awscc.resources.applicationinsights_application.ApplicationinsightsApplication",
+ "awscc.apprunner_service": "c7n_awscc.resources.apprunner_service.ApprunnerService",
+ "awscc.appstream_application": "c7n_awscc.resources.appstream_application.AppstreamApplication",
+ "awscc.appstream_entitlement": "c7n_awscc.resources.appstream_entitlement.AppstreamEntitlement",
+ "awscc.appsync_domainname": "c7n_awscc.resources.appsync_domainname.AppsyncDomainname",
+ "awscc.appsync_domainnameapiassociation": "c7n_awscc.resources.appsync_domainnameapiassociation.AppsyncDomainnameapiassociation",
+ "awscc.aps_rulegroupsnamespace": "c7n_awscc.resources.aps_rulegroupsnamespace.ApsRulegroupsnamespace",
+ "awscc.aps_workspace": "c7n_awscc.resources.aps_workspace.ApsWorkspace",
+ "awscc.athena_datacatalog": "c7n_awscc.resources.athena_datacatalog.AthenaDatacatalog",
+ "awscc.athena_namedquery": "c7n_awscc.resources.athena_namedquery.AthenaNamedquery",
+ "awscc.athena_preparedstatement": "c7n_awscc.resources.athena_preparedstatement.AthenaPreparedstatement",
+ "awscc.athena_workgroup": "c7n_awscc.resources.athena_workgroup.AthenaWorkgroup",
+ "awscc.auditmanager_assessment": "c7n_awscc.resources.auditmanager_assessment.AuditmanagerAssessment",
+ "awscc.autoscaling_lifecyclehook": "c7n_awscc.resources.autoscaling_lifecyclehook.AutoscalingLifecyclehook",
+ "awscc.autoscaling_warmpool": "c7n_awscc.resources.autoscaling_warmpool.AutoscalingWarmpool",
+ "awscc.backup_backupplan": "c7n_awscc.resources.backup_backupplan.BackupBackupplan",
+ "awscc.backup_backupvault": "c7n_awscc.resources.backup_backupvault.BackupBackupvault",
+ "awscc.backup_framework": "c7n_awscc.resources.backup_framework.BackupFramework",
+ "awscc.backup_reportplan": "c7n_awscc.resources.backup_reportplan.BackupReportplan",
+ "awscc.batch_schedulingpolicy": "c7n_awscc.resources.batch_schedulingpolicy.BatchSchedulingpolicy",
+ "awscc.budgets_budgetsaction": "c7n_awscc.resources.budgets_budgetsaction.BudgetsBudgetsaction",
+ "awscc.cassandra_keyspace": "c7n_awscc.resources.cassandra_keyspace.CassandraKeyspace",
+ "awscc.cassandra_table": "c7n_awscc.resources.cassandra_table.CassandraTable",
+ "awscc.ce_anomalymonitor": "c7n_awscc.resources.ce_anomalymonitor.CeAnomalymonitor",
+ "awscc.ce_anomalysubscription": "c7n_awscc.resources.ce_anomalysubscription.CeAnomalysubscription",
+ "awscc.ce_costcategory": "c7n_awscc.resources.ce_costcategory.CeCostcategory",
+ "awscc.certificatemanager_account": "c7n_awscc.resources.certificatemanager_account.CertificatemanagerAccount",
+ "awscc.chatbot_slackchannelconfiguration": "c7n_awscc.resources.chatbot_slackchannelconfiguration.ChatbotSlackchannelconfiguration",
+ "awscc.cloudformation_resourcedefaultversion": "c7n_awscc.resources.cloudformation_resourcedefaultversion.CloudformationResourcedefaultversion",
+ "awscc.cloudformation_stackset": "c7n_awscc.resources.cloudformation_stackset.CloudformationStackset",
+ "awscc.cloudformation_typeactivation": "c7n_awscc.resources.cloudformation_typeactivation.CloudformationTypeactivation",
+ "awscc.cloudfront_cachepolicy": "c7n_awscc.resources.cloudfront_cachepolicy.CloudfrontCachepolicy",
+ "awscc.cloudfront_cloudfrontoriginaccessidentity": "c7n_awscc.resources.cloudfront_cloudfrontoriginaccessidentity.CloudfrontCloudfrontoriginaccessidentity",
+ "awscc.cloudfront_distribution": "c7n_awscc.resources.cloudfront_distribution.CloudfrontDistribution",
+ "awscc.cloudfront_function": "c7n_awscc.resources.cloudfront_function.CloudfrontFunction",
+ "awscc.cloudfront_keygroup": "c7n_awscc.resources.cloudfront_keygroup.CloudfrontKeygroup",
+ "awscc.cloudfront_originrequestpolicy": "c7n_awscc.resources.cloudfront_originrequestpolicy.CloudfrontOriginrequestpolicy",
+ "awscc.cloudfront_publickey": "c7n_awscc.resources.cloudfront_publickey.CloudfrontPublickey",
+ "awscc.cloudfront_realtimelogconfig": "c7n_awscc.resources.cloudfront_realtimelogconfig.CloudfrontRealtimelogconfig",
+ "awscc.cloudfront_responseheaderspolicy": "c7n_awscc.resources.cloudfront_responseheaderspolicy.CloudfrontResponseheaderspolicy",
+ "awscc.cloudtrail_trail": "c7n_awscc.resources.cloudtrail_trail.CloudtrailTrail",
+ "awscc.cloudwatch_compositealarm": "c7n_awscc.resources.cloudwatch_compositealarm.CloudwatchCompositealarm",
+ "awscc.cloudwatch_metricstream": "c7n_awscc.resources.cloudwatch_metricstream.CloudwatchMetricstream",
+ "awscc.codeartifact_domain": "c7n_awscc.resources.codeartifact_domain.CodeartifactDomain",
+ "awscc.codeartifact_repository": "c7n_awscc.resources.codeartifact_repository.CodeartifactRepository",
+ "awscc.codeguruprofiler_profilinggroup": "c7n_awscc.resources.codeguruprofiler_profilinggroup.CodeguruprofilerProfilinggroup",
+ "awscc.codestarconnections_connection": "c7n_awscc.resources.codestarconnections_connection.CodestarconnectionsConnection",
+ "awscc.codestarnotifications_notificationrule": "c7n_awscc.resources.codestarnotifications_notificationrule.CodestarnotificationsNotificationrule",
+ "awscc.config_aggregationauthorization": "c7n_awscc.resources.config_aggregationauthorization.ConfigAggregationauthorization",
+ "awscc.config_configurationaggregator": "c7n_awscc.resources.config_configurationaggregator.ConfigConfigurationaggregator",
+ "awscc.config_conformancepack": "c7n_awscc.resources.config_conformancepack.ConfigConformancepack",
+ "awscc.config_organizationconformancepack": "c7n_awscc.resources.config_organizationconformancepack.ConfigOrganizationconformancepack",
+ "awscc.config_storedquery": "c7n_awscc.resources.config_storedquery.ConfigStoredquery",
+ "awscc.connect_contactflow": "c7n_awscc.resources.connect_contactflow.ConnectContactflow",
+ "awscc.connect_contactflowmodule": "c7n_awscc.resources.connect_contactflowmodule.ConnectContactflowmodule",
+ "awscc.connect_hoursofoperation": "c7n_awscc.resources.connect_hoursofoperation.ConnectHoursofoperation",
+ "awscc.connect_quickconnect": "c7n_awscc.resources.connect_quickconnect.ConnectQuickconnect",
+ "awscc.connect_user": "c7n_awscc.resources.connect_user.ConnectUser",
+ "awscc.connect_userhierarchygroup": "c7n_awscc.resources.connect_userhierarchygroup.ConnectUserhierarchygroup",
+ "awscc.cur_reportdefinition": "c7n_awscc.resources.cur_reportdefinition.CurReportdefinition",
+ "awscc.customerprofiles_domain": "c7n_awscc.resources.customerprofiles_domain.CustomerprofilesDomain",
+ "awscc.customerprofiles_integration": "c7n_awscc.resources.customerprofiles_integration.CustomerprofilesIntegration",
+ "awscc.customerprofiles_objecttype": "c7n_awscc.resources.customerprofiles_objecttype.CustomerprofilesObjecttype",
+ "awscc.databrew_dataset": "c7n_awscc.resources.databrew_dataset.DatabrewDataset",
+ "awscc.databrew_job": "c7n_awscc.resources.databrew_job.DatabrewJob",
+ "awscc.databrew_project": "c7n_awscc.resources.databrew_project.DatabrewProject",
+ "awscc.databrew_recipe": "c7n_awscc.resources.databrew_recipe.DatabrewRecipe",
+ "awscc.databrew_ruleset": "c7n_awscc.resources.databrew_ruleset.DatabrewRuleset",
+ "awscc.databrew_schedule": "c7n_awscc.resources.databrew_schedule.DatabrewSchedule",
+ "awscc.datasync_agent": "c7n_awscc.resources.datasync_agent.DatasyncAgent",
+ "awscc.datasync_locationefs": "c7n_awscc.resources.datasync_locationefs.DatasyncLocationefs",
+ "awscc.datasync_locationfsxwindows": "c7n_awscc.resources.datasync_locationfsxwindows.DatasyncLocationfsxwindows",
+ "awscc.datasync_locationhdfs": "c7n_awscc.resources.datasync_locationhdfs.DatasyncLocationhdfs",
+ "awscc.datasync_locationnfs": "c7n_awscc.resources.datasync_locationnfs.DatasyncLocationnfs",
+ "awscc.datasync_locationobjectstorage": "c7n_awscc.resources.datasync_locationobjectstorage.DatasyncLocationobjectstorage",
+ "awscc.datasync_locations3": "c7n_awscc.resources.datasync_locations3.DatasyncLocations3",
+ "awscc.datasync_locationsmb": "c7n_awscc.resources.datasync_locationsmb.DatasyncLocationsmb",
+ "awscc.datasync_task": "c7n_awscc.resources.datasync_task.DatasyncTask",
+ "awscc.detective_graph": "c7n_awscc.resources.detective_graph.DetectiveGraph",
+ "awscc.detective_memberinvitation": "c7n_awscc.resources.detective_memberinvitation.DetectiveMemberinvitation",
+ "awscc.devopsguru_resourcecollection": "c7n_awscc.resources.devopsguru_resourcecollection.DevopsguruResourcecollection",
+ "awscc.dynamodb_globaltable": "c7n_awscc.resources.dynamodb_globaltable.DynamodbGlobaltable",
+ "awscc.ec2_capacityreservationfleet": "c7n_awscc.resources.ec2_capacityreservationfleet.Ec2Capacityreservationfleet",
+ "awscc.ec2_carriergateway": "c7n_awscc.resources.ec2_carriergateway.Ec2Carriergateway",
+ "awscc.ec2_dhcpoptions": "c7n_awscc.resources.ec2_dhcpoptions.Ec2Dhcpoptions",
+ "awscc.ec2_ec2fleet": "c7n_awscc.resources.ec2_ec2fleet.Ec2Ec2Fleet",
+ "awscc.ec2_flowlog": "c7n_awscc.resources.ec2_flowlog.Ec2Flowlog",
+ "awscc.ec2_gatewayroutetableassociation": "c7n_awscc.resources.ec2_gatewayroutetableassociation.Ec2Gatewayroutetableassociation",
+ "awscc.ec2_host": "c7n_awscc.resources.ec2_host.Ec2Host",
+ "awscc.ec2_internetgateway": "c7n_awscc.resources.ec2_internetgateway.Ec2Internetgateway",
+ "awscc.ec2_ipam": "c7n_awscc.resources.ec2_ipam.Ec2Ipam",
+ "awscc.ec2_ipampool": "c7n_awscc.resources.ec2_ipampool.Ec2Ipampool",
+ "awscc.ec2_ipamscope": "c7n_awscc.resources.ec2_ipamscope.Ec2Ipamscope",
+ "awscc.ec2_localgatewayroutetablevpcassociation": "c7n_awscc.resources.ec2_localgatewayroutetablevpcassociation.Ec2Localgatewayroutetablevpcassociation",
+ "awscc.ec2_networkacl": "c7n_awscc.resources.ec2_networkacl.Ec2Networkacl",
+ "awscc.ec2_networkinsightsaccessscope": "c7n_awscc.resources.ec2_networkinsightsaccessscope.Ec2Networkinsightsaccessscope",
+ "awscc.ec2_networkinsightsaccessscopeanalysis": "c7n_awscc.resources.ec2_networkinsightsaccessscopeanalysis.Ec2Networkinsightsaccessscopeanalysis",
+ "awscc.ec2_networkinsightsanalysis": "c7n_awscc.resources.ec2_networkinsightsanalysis.Ec2Networkinsightsanalysis",
+ "awscc.ec2_networkinsightspath": "c7n_awscc.resources.ec2_networkinsightspath.Ec2Networkinsightspath",
+ "awscc.ec2_networkinterface": "c7n_awscc.resources.ec2_networkinterface.Ec2Networkinterface",
+ "awscc.ec2_prefixlist": "c7n_awscc.resources.ec2_prefixlist.Ec2Prefixlist",
+ "awscc.ec2_routetable": "c7n_awscc.resources.ec2_routetable.Ec2Routetable",
+ "awscc.ec2_spotfleet": "c7n_awscc.resources.ec2_spotfleet.Ec2Spotfleet",
+ "awscc.ec2_subnet": "c7n_awscc.resources.ec2_subnet.Ec2Subnet",
+ "awscc.ec2_transitgateway": "c7n_awscc.resources.ec2_transitgateway.Ec2Transitgateway",
+ "awscc.ec2_transitgatewayconnect": "c7n_awscc.resources.ec2_transitgatewayconnect.Ec2Transitgatewayconnect",
+ "awscc.ec2_transitgatewaymulticastdomain": "c7n_awscc.resources.ec2_transitgatewaymulticastdomain.Ec2Transitgatewaymulticastdomain",
+ "awscc.ec2_transitgatewaypeeringattachment": "c7n_awscc.resources.ec2_transitgatewaypeeringattachment.Ec2Transitgatewaypeeringattachment",
+ "awscc.ec2_transitgatewayvpcattachment": "c7n_awscc.resources.ec2_transitgatewayvpcattachment.Ec2Transitgatewayvpcattachment",
+ "awscc.ec2_vpc": "c7n_awscc.resources.ec2_vpc.Ec2Vpc",
+ "awscc.ec2_vpcdhcpoptionsassociation": "c7n_awscc.resources.ec2_vpcdhcpoptionsassociation.Ec2Vpcdhcpoptionsassociation",
+ "awscc.ec2_vpcendpoint": "c7n_awscc.resources.ec2_vpcendpoint.Ec2Vpcendpoint",
+ "awscc.ecr_publicrepository": "c7n_awscc.resources.ecr_publicrepository.EcrPublicrepository",
+ "awscc.ecr_registrypolicy": "c7n_awscc.resources.ecr_registrypolicy.EcrRegistrypolicy",
+ "awscc.ecr_replicationconfiguration": "c7n_awscc.resources.ecr_replicationconfiguration.EcrReplicationconfiguration",
+ "awscc.ecr_repository": "c7n_awscc.resources.ecr_repository.EcrRepository",
+ "awscc.ecs_capacityprovider": "c7n_awscc.resources.ecs_capacityprovider.EcsCapacityprovider",
+ "awscc.ecs_cluster": "c7n_awscc.resources.ecs_cluster.EcsCluster",
+ "awscc.ecs_clustercapacityproviderassociations": "c7n_awscc.resources.ecs_clustercapacityproviderassociations.EcsClustercapacityproviderassociations",
+ "awscc.ecs_primarytaskset": "c7n_awscc.resources.ecs_primarytaskset.EcsPrimarytaskset",
+ "awscc.ecs_service": "c7n_awscc.resources.ecs_service.EcsService",
+ "awscc.ecs_taskdefinition": "c7n_awscc.resources.ecs_taskdefinition.EcsTaskdefinition",
+ "awscc.ecs_taskset": "c7n_awscc.resources.ecs_taskset.EcsTaskset",
+ "awscc.efs_accesspoint": "c7n_awscc.resources.efs_accesspoint.EfsAccesspoint",
+ "awscc.efs_filesystem": "c7n_awscc.resources.efs_filesystem.EfsFilesystem",
+ "awscc.efs_mounttarget": "c7n_awscc.resources.efs_mounttarget.EfsMounttarget",
+ "awscc.eks_addon": "c7n_awscc.resources.eks_addon.EksAddon",
+ "awscc.eks_cluster": "c7n_awscc.resources.eks_cluster.EksCluster",
+ "awscc.eks_fargateprofile": "c7n_awscc.resources.eks_fargateprofile.EksFargateprofile",
+ "awscc.elasticache_globalreplicationgroup": "c7n_awscc.resources.elasticache_globalreplicationgroup.ElasticacheGlobalreplicationgroup",
+ "awscc.elasticache_user": "c7n_awscc.resources.elasticache_user.ElasticacheUser",
+ "awscc.elasticache_usergroup": "c7n_awscc.resources.elasticache_usergroup.ElasticacheUsergroup",
+ "awscc.elasticloadbalancingv2_listener": "c7n_awscc.resources.elasticloadbalancingv2_listener.Elasticloadbalancingv2Listener",
+ "awscc.elasticloadbalancingv2_listenerrule": "c7n_awscc.resources.elasticloadbalancingv2_listenerrule.Elasticloadbalancingv2Listenerrule",
+ "awscc.emr_studio": "c7n_awscc.resources.emr_studio.EmrStudio",
+ "awscc.emr_studiosessionmapping": "c7n_awscc.resources.emr_studiosessionmapping.EmrStudiosessionmapping",
+ "awscc.emrcontainers_virtualcluster": "c7n_awscc.resources.emrcontainers_virtualcluster.EmrcontainersVirtualcluster",
+ "awscc.events_apidestination": "c7n_awscc.resources.events_apidestination.EventsApidestination",
+ "awscc.events_archive": "c7n_awscc.resources.events_archive.EventsArchive",
+ "awscc.events_connection": "c7n_awscc.resources.events_connection.EventsConnection",
+ "awscc.eventschemas_registrypolicy": "c7n_awscc.resources.eventschemas_registrypolicy.EventschemasRegistrypolicy",
+ "awscc.evidently_experiment": "c7n_awscc.resources.evidently_experiment.EvidentlyExperiment",
+ "awscc.evidently_feature": "c7n_awscc.resources.evidently_feature.EvidentlyFeature",
+ "awscc.evidently_launch": "c7n_awscc.resources.evidently_launch.EvidentlyLaunch",
+ "awscc.evidently_project": "c7n_awscc.resources.evidently_project.EvidentlyProject",
+ "awscc.finspace_environment": "c7n_awscc.resources.finspace_environment.FinspaceEnvironment",
+ "awscc.fis_experimenttemplate": "c7n_awscc.resources.fis_experimenttemplate.FisExperimenttemplate",
+ "awscc.fms_notificationchannel": "c7n_awscc.resources.fms_notificationchannel.FmsNotificationchannel",
+ "awscc.fms_policy": "c7n_awscc.resources.fms_policy.FmsPolicy",
+ "awscc.forecast_datasetgroup": "c7n_awscc.resources.forecast_datasetgroup.ForecastDatasetgroup",
+ "awscc.frauddetector_detector": "c7n_awscc.resources.frauddetector_detector.FrauddetectorDetector",
+ "awscc.frauddetector_entitytype": "c7n_awscc.resources.frauddetector_entitytype.FrauddetectorEntitytype",
+ "awscc.frauddetector_eventtype": "c7n_awscc.resources.frauddetector_eventtype.FrauddetectorEventtype",
+ "awscc.frauddetector_label": "c7n_awscc.resources.frauddetector_label.FrauddetectorLabel",
+ "awscc.frauddetector_outcome": "c7n_awscc.resources.frauddetector_outcome.FrauddetectorOutcome",
+ "awscc.frauddetector_variable": "c7n_awscc.resources.frauddetector_variable.FrauddetectorVariable",
+ "awscc.gamelift_alias": "c7n_awscc.resources.gamelift_alias.GameliftAlias",
+ "awscc.gamelift_fleet": "c7n_awscc.resources.gamelift_fleet.GameliftFleet",
+ "awscc.gamelift_gameservergroup": "c7n_awscc.resources.gamelift_gameservergroup.GameliftGameservergroup",
+ "awscc.globalaccelerator_accelerator": "c7n_awscc.resources.globalaccelerator_accelerator.GlobalacceleratorAccelerator",
+ "awscc.globalaccelerator_endpointgroup": "c7n_awscc.resources.globalaccelerator_endpointgroup.GlobalacceleratorEndpointgroup",
+ "awscc.globalaccelerator_listener": "c7n_awscc.resources.globalaccelerator_listener.GlobalacceleratorListener",
+ "awscc.glue_registry": "c7n_awscc.resources.glue_registry.GlueRegistry",
+ "awscc.glue_schema": "c7n_awscc.resources.glue_schema.GlueSchema",
+ "awscc.greengrassv2_componentversion": "c7n_awscc.resources.greengrassv2_componentversion.Greengrassv2Componentversion",
+ "awscc.groundstation_config": "c7n_awscc.resources.groundstation_config.GroundstationConfig",
+ "awscc.groundstation_missionprofile": "c7n_awscc.resources.groundstation_missionprofile.GroundstationMissionprofile",
+ "awscc.healthlake_fhirdatastore": "c7n_awscc.resources.healthlake_fhirdatastore.HealthlakeFhirdatastore",
+ "awscc.iam_oidcprovider": "c7n_awscc.resources.iam_oidcprovider.IamOidcprovider",
+ "awscc.iam_role": "c7n_awscc.resources.iam_role.IamRole",
+ "awscc.iam_samlprovider": "c7n_awscc.resources.iam_samlprovider.IamSamlprovider",
+ "awscc.iam_servercertificate": "c7n_awscc.resources.iam_servercertificate.IamServercertificate",
+ "awscc.iam_virtualmfadevice": "c7n_awscc.resources.iam_virtualmfadevice.IamVirtualmfadevice",
+ "awscc.imagebuilder_distributionconfiguration": "c7n_awscc.resources.imagebuilder_distributionconfiguration.ImagebuilderDistributionconfiguration",
+ "awscc.imagebuilder_image": "c7n_awscc.resources.imagebuilder_image.ImagebuilderImage",
+ "awscc.imagebuilder_imagepipeline": "c7n_awscc.resources.imagebuilder_imagepipeline.ImagebuilderImagepipeline",
+ "awscc.imagebuilder_infrastructureconfiguration": "c7n_awscc.resources.imagebuilder_infrastructureconfiguration.ImagebuilderInfrastructureconfiguration",
+ "awscc.inspectorv2_filter": "c7n_awscc.resources.inspectorv2_filter.Inspectorv2Filter",
+ "awscc.iot_accountauditconfiguration": "c7n_awscc.resources.iot_accountauditconfiguration.IotAccountauditconfiguration",
+ "awscc.iot_authorizer": "c7n_awscc.resources.iot_authorizer.IotAuthorizer",
+ "awscc.iot_certificate": "c7n_awscc.resources.iot_certificate.IotCertificate",
+ "awscc.iot_custommetric": "c7n_awscc.resources.iot_custommetric.IotCustommetric",
+ "awscc.iot_dimension": "c7n_awscc.resources.iot_dimension.IotDimension",
+ "awscc.iot_domainconfiguration": "c7n_awscc.resources.iot_domainconfiguration.IotDomainconfiguration",
+ "awscc.iot_fleetmetric": "c7n_awscc.resources.iot_fleetmetric.IotFleetmetric",
+ "awscc.iot_logging": "c7n_awscc.resources.iot_logging.IotLogging",
+ "awscc.iot_mitigationaction": "c7n_awscc.resources.iot_mitigationaction.IotMitigationaction",
+ "awscc.iot_provisioningtemplate": "c7n_awscc.resources.iot_provisioningtemplate.IotProvisioningtemplate",
+ "awscc.iot_resourcespecificlogging": "c7n_awscc.resources.iot_resourcespecificlogging.IotResourcespecificlogging",
+ "awscc.iot_scheduledaudit": "c7n_awscc.resources.iot_scheduledaudit.IotScheduledaudit",
+ "awscc.iot_securityprofile": "c7n_awscc.resources.iot_securityprofile.IotSecurityprofile",
+ "awscc.iot_topicrule": "c7n_awscc.resources.iot_topicrule.IotTopicrule",
+ "awscc.iot_topicruledestination": "c7n_awscc.resources.iot_topicruledestination.IotTopicruledestination",
+ "awscc.iotanalytics_dataset": "c7n_awscc.resources.iotanalytics_dataset.IotanalyticsDataset",
+ "awscc.iotanalytics_datastore": "c7n_awscc.resources.iotanalytics_datastore.IotanalyticsDatastore",
+ "awscc.iotanalytics_pipeline": "c7n_awscc.resources.iotanalytics_pipeline.IotanalyticsPipeline",
+ "awscc.iotcoredeviceadvisor_suitedefinition": "c7n_awscc.resources.iotcoredeviceadvisor_suitedefinition.IotcoredeviceadvisorSuitedefinition",
+ "awscc.iotevents_detectormodel": "c7n_awscc.resources.iotevents_detectormodel.IoteventsDetectormodel",
+ "awscc.iotevents_input": "c7n_awscc.resources.iotevents_input.IoteventsInput",
+ "awscc.iotfleethub_application": "c7n_awscc.resources.iotfleethub_application.IotfleethubApplication",
+ "awscc.iotsitewise_accesspolicy": "c7n_awscc.resources.iotsitewise_accesspolicy.IotsitewiseAccesspolicy",
+ "awscc.iotsitewise_asset": "c7n_awscc.resources.iotsitewise_asset.IotsitewiseAsset",
+ "awscc.iotsitewise_assetmodel": "c7n_awscc.resources.iotsitewise_assetmodel.IotsitewiseAssetmodel",
+ "awscc.iotsitewise_dashboard": "c7n_awscc.resources.iotsitewise_dashboard.IotsitewiseDashboard",
+ "awscc.iotsitewise_gateway": "c7n_awscc.resources.iotsitewise_gateway.IotsitewiseGateway",
+ "awscc.iotsitewise_portal": "c7n_awscc.resources.iotsitewise_portal.IotsitewisePortal",
+ "awscc.iotsitewise_project": "c7n_awscc.resources.iotsitewise_project.IotsitewiseProject",
+ "awscc.iotwireless_destination": "c7n_awscc.resources.iotwireless_destination.IotwirelessDestination",
+ "awscc.iotwireless_fuotatask": "c7n_awscc.resources.iotwireless_fuotatask.IotwirelessFuotatask",
+ "awscc.iotwireless_multicastgroup": "c7n_awscc.resources.iotwireless_multicastgroup.IotwirelessMulticastgroup",
+ "awscc.iotwireless_partneraccount": "c7n_awscc.resources.iotwireless_partneraccount.IotwirelessPartneraccount",
+ "awscc.iotwireless_wirelessdevice": "c7n_awscc.resources.iotwireless_wirelessdevice.IotwirelessWirelessdevice",
+ "awscc.iotwireless_wirelessgateway": "c7n_awscc.resources.iotwireless_wirelessgateway.IotwirelessWirelessgateway",
+ "awscc.ivs_channel": "c7n_awscc.resources.ivs_channel.IvsChannel",
+ "awscc.ivs_playbackkeypair": "c7n_awscc.resources.ivs_playbackkeypair.IvsPlaybackkeypair",
+ "awscc.ivs_recordingconfiguration": "c7n_awscc.resources.ivs_recordingconfiguration.IvsRecordingconfiguration",
+ "awscc.ivs_streamkey": "c7n_awscc.resources.ivs_streamkey.IvsStreamkey",
+ "awscc.kendra_datasource": "c7n_awscc.resources.kendra_datasource.KendraDatasource",
+ "awscc.kendra_faq": "c7n_awscc.resources.kendra_faq.KendraFaq",
+ "awscc.kendra_index": "c7n_awscc.resources.kendra_index.KendraIndex",
+ "awscc.kinesis_stream": "c7n_awscc.resources.kinesis_stream.KinesisStream",
+ "awscc.kinesisfirehose_deliverystream": "c7n_awscc.resources.kinesisfirehose_deliverystream.KinesisfirehoseDeliverystream",
+ "awscc.kinesisvideo_signalingchannel": "c7n_awscc.resources.kinesisvideo_signalingchannel.KinesisvideoSignalingchannel",
+ "awscc.kinesisvideo_stream": "c7n_awscc.resources.kinesisvideo_stream.KinesisvideoStream",
+ "awscc.kms_alias": "c7n_awscc.resources.kms_alias.KmsAlias",
+ "awscc.kms_key": "c7n_awscc.resources.kms_key.KmsKey",
+ "awscc.kms_replicakey": "c7n_awscc.resources.kms_replicakey.KmsReplicakey",
+ "awscc.lambda_codesigningconfig": "c7n_awscc.resources.lambda_codesigningconfig.LambdaCodesigningconfig",
+ "awscc.lambda_eventsourcemapping": "c7n_awscc.resources.lambda_eventsourcemapping.LambdaEventsourcemapping",
+ "awscc.lambda_function": "c7n_awscc.resources.lambda_function.LambdaFunction",
+ "awscc.lex_bot": "c7n_awscc.resources.lex_bot.LexBot",
+ "awscc.lex_botalias": "c7n_awscc.resources.lex_botalias.LexBotalias",
+ "awscc.lex_resourcepolicy": "c7n_awscc.resources.lex_resourcepolicy.LexResourcepolicy",
+ "awscc.licensemanager_grant": "c7n_awscc.resources.licensemanager_grant.LicensemanagerGrant",
+ "awscc.licensemanager_license": "c7n_awscc.resources.licensemanager_license.LicensemanagerLicense",
+ "awscc.lightsail_alarm": "c7n_awscc.resources.lightsail_alarm.LightsailAlarm",
+ "awscc.lightsail_bucket": "c7n_awscc.resources.lightsail_bucket.LightsailBucket",
+ "awscc.lightsail_database": "c7n_awscc.resources.lightsail_database.LightsailDatabase",
+ "awscc.lightsail_disk": "c7n_awscc.resources.lightsail_disk.LightsailDisk",
+ "awscc.lightsail_instance": "c7n_awscc.resources.lightsail_instance.LightsailInstance",
+ "awscc.lightsail_loadbalancer": "c7n_awscc.resources.lightsail_loadbalancer.LightsailLoadbalancer",
+ "awscc.lightsail_loadbalancertlscertificate": "c7n_awscc.resources.lightsail_loadbalancertlscertificate.LightsailLoadbalancertlscertificate",
+ "awscc.lightsail_staticip": "c7n_awscc.resources.lightsail_staticip.LightsailStaticip",
+ "awscc.logs_loggroup": "c7n_awscc.resources.logs_loggroup.LogsLoggroup",
+ "awscc.logs_querydefinition": "c7n_awscc.resources.logs_querydefinition.LogsQuerydefinition",
+ "awscc.logs_resourcepolicy": "c7n_awscc.resources.logs_resourcepolicy.LogsResourcepolicy",
+ "awscc.lookoutequipment_inferencescheduler": "c7n_awscc.resources.lookoutequipment_inferencescheduler.LookoutequipmentInferencescheduler",
+ "awscc.lookoutmetrics_anomalydetector": "c7n_awscc.resources.lookoutmetrics_anomalydetector.LookoutmetricsAnomalydetector",
+ "awscc.lookoutvision_project": "c7n_awscc.resources.lookoutvision_project.LookoutvisionProject",
+ "awscc.macie_customdataidentifier": "c7n_awscc.resources.macie_customdataidentifier.MacieCustomdataidentifier",
+ "awscc.macie_findingsfilter": "c7n_awscc.resources.macie_findingsfilter.MacieFindingsfilter",
+ "awscc.macie_session": "c7n_awscc.resources.macie_session.MacieSession",
+ "awscc.mediaconnect_flow": "c7n_awscc.resources.mediaconnect_flow.MediaconnectFlow",
+ "awscc.mediaconnect_flowentitlement": "c7n_awscc.resources.mediaconnect_flowentitlement.MediaconnectFlowentitlement",
+ "awscc.mediaconnect_flowoutput": "c7n_awscc.resources.mediaconnect_flowoutput.MediaconnectFlowoutput",
+ "awscc.mediaconnect_flowsource": "c7n_awscc.resources.mediaconnect_flowsource.MediaconnectFlowsource",
+ "awscc.mediaconnect_flowvpcinterface": "c7n_awscc.resources.mediaconnect_flowvpcinterface.MediaconnectFlowvpcinterface",
+ "awscc.mediapackage_channel": "c7n_awscc.resources.mediapackage_channel.MediapackageChannel",
+ "awscc.mediapackage_originendpoint": "c7n_awscc.resources.mediapackage_originendpoint.MediapackageOriginendpoint",
+ "awscc.mediapackage_packaginggroup": "c7n_awscc.resources.mediapackage_packaginggroup.MediapackagePackaginggroup",
+ "awscc.memorydb_acl": "c7n_awscc.resources.memorydb_acl.MemorydbAcl",
+ "awscc.memorydb_cluster": "c7n_awscc.resources.memorydb_cluster.MemorydbCluster",
+ "awscc.memorydb_parametergroup": "c7n_awscc.resources.memorydb_parametergroup.MemorydbParametergroup",
+ "awscc.memorydb_subnetgroup": "c7n_awscc.resources.memorydb_subnetgroup.MemorydbSubnetgroup",
+ "awscc.memorydb_user": "c7n_awscc.resources.memorydb_user.MemorydbUser",
+ "awscc.mwaa_environment": "c7n_awscc.resources.mwaa_environment.MwaaEnvironment",
+ "awscc.networkfirewall_firewall": "c7n_awscc.resources.networkfirewall_firewall.NetworkfirewallFirewall",
+ "awscc.networkfirewall_firewallpolicy": "c7n_awscc.resources.networkfirewall_firewallpolicy.NetworkfirewallFirewallpolicy",
+ "awscc.networkfirewall_loggingconfiguration": "c7n_awscc.resources.networkfirewall_loggingconfiguration.NetworkfirewallLoggingconfiguration",
+ "awscc.networkfirewall_rulegroup": "c7n_awscc.resources.networkfirewall_rulegroup.NetworkfirewallRulegroup",
+ "awscc.networkmanager_device": "c7n_awscc.resources.networkmanager_device.NetworkmanagerDevice",
+ "awscc.networkmanager_globalnetwork": "c7n_awscc.resources.networkmanager_globalnetwork.NetworkmanagerGlobalnetwork",
+ "awscc.networkmanager_link": "c7n_awscc.resources.networkmanager_link.NetworkmanagerLink",
+ "awscc.networkmanager_site": "c7n_awscc.resources.networkmanager_site.NetworkmanagerSite",
+ "awscc.nimblestudio_launchprofile": "c7n_awscc.resources.nimblestudio_launchprofile.NimblestudioLaunchprofile",
+ "awscc.nimblestudio_streamingimage": "c7n_awscc.resources.nimblestudio_streamingimage.NimblestudioStreamingimage",
+ "awscc.nimblestudio_studio": "c7n_awscc.resources.nimblestudio_studio.NimblestudioStudio",
+ "awscc.nimblestudio_studiocomponent": "c7n_awscc.resources.nimblestudio_studiocomponent.NimblestudioStudiocomponent",
+ "awscc.opensearchservice_domain": "c7n_awscc.resources.opensearchservice_domain.OpensearchserviceDomain",
+ "awscc.opsworkscm_server": "c7n_awscc.resources.opsworkscm_server.OpsworkscmServer",
+ "awscc.panorama_applicationinstance": "c7n_awscc.resources.panorama_applicationinstance.PanoramaApplicationinstance",
+ "awscc.panorama_package": "c7n_awscc.resources.panorama_package.PanoramaPackage",
+ "awscc.panorama_packageversion": "c7n_awscc.resources.panorama_packageversion.PanoramaPackageversion",
+ "awscc.pinpoint_inapptemplate": "c7n_awscc.resources.pinpoint_inapptemplate.PinpointInapptemplate",
+ "awscc.qldb_stream": "c7n_awscc.resources.qldb_stream.QldbStream",
+ "awscc.quicksight_analysis": "c7n_awscc.resources.quicksight_analysis.QuicksightAnalysis",
+ "awscc.quicksight_dashboard": "c7n_awscc.resources.quicksight_dashboard.QuicksightDashboard",
+ "awscc.quicksight_dataset": "c7n_awscc.resources.quicksight_dataset.QuicksightDataset",
+ "awscc.quicksight_datasource": "c7n_awscc.resources.quicksight_datasource.QuicksightDatasource",
+ "awscc.quicksight_template": "c7n_awscc.resources.quicksight_template.QuicksightTemplate",
+ "awscc.quicksight_theme": "c7n_awscc.resources.quicksight_theme.QuicksightTheme",
+ "awscc.rds_dbproxy": "c7n_awscc.resources.rds_dbproxy.RdsDbproxy",
+ "awscc.rds_dbproxyendpoint": "c7n_awscc.resources.rds_dbproxyendpoint.RdsDbproxyendpoint",
+ "awscc.rds_dbproxytargetgroup": "c7n_awscc.resources.rds_dbproxytargetgroup.RdsDbproxytargetgroup",
+ "awscc.rds_globalcluster": "c7n_awscc.resources.rds_globalcluster.RdsGlobalcluster",
+ "awscc.redshift_cluster": "c7n_awscc.resources.redshift_cluster.RedshiftCluster",
+ "awscc.redshift_endpointaccess": "c7n_awscc.resources.redshift_endpointaccess.RedshiftEndpointaccess",
+ "awscc.redshift_endpointauthorization": "c7n_awscc.resources.redshift_endpointauthorization.RedshiftEndpointauthorization",
+ "awscc.redshift_eventsubscription": "c7n_awscc.resources.redshift_eventsubscription.RedshiftEventsubscription",
+ "awscc.redshift_scheduledaction": "c7n_awscc.resources.redshift_scheduledaction.RedshiftScheduledaction",
+ "awscc.rekognition_project": "c7n_awscc.resources.rekognition_project.RekognitionProject",
+ "awscc.resiliencehub_app": "c7n_awscc.resources.resiliencehub_app.ResiliencehubApp",
+ "awscc.resiliencehub_resiliencypolicy": "c7n_awscc.resources.resiliencehub_resiliencypolicy.ResiliencehubResiliencypolicy",
+ "awscc.resourcegroups_group": "c7n_awscc.resources.resourcegroups_group.ResourcegroupsGroup",
+ "awscc.robomaker_fleet": "c7n_awscc.resources.robomaker_fleet.RobomakerFleet",
+ "awscc.robomaker_robot": "c7n_awscc.resources.robomaker_robot.RobomakerRobot",
+ "awscc.robomaker_simulationapplication": "c7n_awscc.resources.robomaker_simulationapplication.RobomakerSimulationapplication",
+ "awscc.route53_healthcheck": "c7n_awscc.resources.route53_healthcheck.Route53Healthcheck",
+ "awscc.route53_hostedzone": "c7n_awscc.resources.route53_hostedzone.Route53Hostedzone",
+ "awscc.route53_keysigningkey": "c7n_awscc.resources.route53_keysigningkey.Route53Keysigningkey",
+ "awscc.route53recoverycontrol_controlpanel": "c7n_awscc.resources.route53recoverycontrol_controlpanel.Route53RecoverycontrolControlpanel",
+ "awscc.route53recoverycontrol_routingcontrol": "c7n_awscc.resources.route53recoverycontrol_routingcontrol.Route53RecoverycontrolRoutingcontrol",
+ "awscc.route53recoverycontrol_safetyrule": "c7n_awscc.resources.route53recoverycontrol_safetyrule.Route53RecoverycontrolSafetyrule",
+ "awscc.route53recoveryreadiness_cell": "c7n_awscc.resources.route53recoveryreadiness_cell.Route53RecoveryreadinessCell",
+ "awscc.route53recoveryreadiness_readinesscheck": "c7n_awscc.resources.route53recoveryreadiness_readinesscheck.Route53RecoveryreadinessReadinesscheck",
+ "awscc.route53recoveryreadiness_recoverygroup": "c7n_awscc.resources.route53recoveryreadiness_recoverygroup.Route53RecoveryreadinessRecoverygroup",
+ "awscc.route53recoveryreadiness_resourceset": "c7n_awscc.resources.route53recoveryreadiness_resourceset.Route53RecoveryreadinessResourceset",
+ "awscc.route53resolver_firewalldomainlist": "c7n_awscc.resources.route53resolver_firewalldomainlist.Route53ResolverFirewalldomainlist",
+ "awscc.route53resolver_firewallrulegroup": "c7n_awscc.resources.route53resolver_firewallrulegroup.Route53ResolverFirewallrulegroup",
+ "awscc.route53resolver_firewallrulegroupassociation": "c7n_awscc.resources.route53resolver_firewallrulegroupassociation.Route53ResolverFirewallrulegroupassociation",
+ "awscc.route53resolver_resolverrule": "c7n_awscc.resources.route53resolver_resolverrule.Route53ResolverResolverrule",
+ "awscc.rum_appmonitor": "c7n_awscc.resources.rum_appmonitor.RumAppmonitor",
+ "awscc.s3_accesspoint": "c7n_awscc.resources.s3_accesspoint.S3Accesspoint",
+ "awscc.s3_bucket": "c7n_awscc.resources.s3_bucket.S3Bucket",
+ "awscc.s3_multiregionaccesspoint": "c7n_awscc.resources.s3_multiregionaccesspoint.S3Multiregionaccesspoint",
+ "awscc.s3_multiregionaccesspointpolicy": "c7n_awscc.resources.s3_multiregionaccesspointpolicy.S3Multiregionaccesspointpolicy",
+ "awscc.s3_storagelens": "c7n_awscc.resources.s3_storagelens.S3Storagelens",
+ "awscc.s3objectlambda_accesspoint": "c7n_awscc.resources.s3objectlambda_accesspoint.S3ObjectlambdaAccesspoint",
+ "awscc.s3objectlambda_accesspointpolicy": "c7n_awscc.resources.s3objectlambda_accesspointpolicy.S3ObjectlambdaAccesspointpolicy",
+ "awscc.s3outposts_accesspoint": "c7n_awscc.resources.s3outposts_accesspoint.S3OutpostsAccesspoint",
+ "awscc.s3outposts_bucket": "c7n_awscc.resources.s3outposts_bucket.S3OutpostsBucket",
+ "awscc.s3outposts_bucketpolicy": "c7n_awscc.resources.s3outposts_bucketpolicy.S3OutpostsBucketpolicy",
+ "awscc.sagemaker_appimageconfig": "c7n_awscc.resources.sagemaker_appimageconfig.SagemakerAppimageconfig",
+ "awscc.sagemaker_device": "c7n_awscc.resources.sagemaker_device.SagemakerDevice",
+ "awscc.sagemaker_devicefleet": "c7n_awscc.resources.sagemaker_devicefleet.SagemakerDevicefleet",
+ "awscc.sagemaker_domain": "c7n_awscc.resources.sagemaker_domain.SagemakerDomain",
+ "awscc.sagemaker_image": "c7n_awscc.resources.sagemaker_image.SagemakerImage",
+ "awscc.sagemaker_modelpackagegroup": "c7n_awscc.resources.sagemaker_modelpackagegroup.SagemakerModelpackagegroup",
+ "awscc.sagemaker_monitoringschedule": "c7n_awscc.resources.sagemaker_monitoringschedule.SagemakerMonitoringschedule",
+ "awscc.sagemaker_pipeline": "c7n_awscc.resources.sagemaker_pipeline.SagemakerPipeline",
+ "awscc.sagemaker_project": "c7n_awscc.resources.sagemaker_project.SagemakerProject",
+ "awscc.sagemaker_userprofile": "c7n_awscc.resources.sagemaker_userprofile.SagemakerUserprofile",
+ "awscc.servicecatalog_cloudformationprovisionedproduct": "c7n_awscc.resources.servicecatalog_cloudformationprovisionedproduct.ServicecatalogCloudformationprovisionedproduct",
+ "awscc.servicecatalog_serviceaction": "c7n_awscc.resources.servicecatalog_serviceaction.ServicecatalogServiceaction",
+ "awscc.servicecatalogappregistry_application": "c7n_awscc.resources.servicecatalogappregistry_application.ServicecatalogappregistryApplication",
+ "awscc.servicecatalogappregistry_attributegroup": "c7n_awscc.resources.servicecatalogappregistry_attributegroup.ServicecatalogappregistryAttributegroup",
+ "awscc.ses_contactlist": "c7n_awscc.resources.ses_contactlist.SesContactlist",
+ "awscc.signer_signingprofile": "c7n_awscc.resources.signer_signingprofile.SignerSigningprofile",
+ "awscc.ssm_association": "c7n_awscc.resources.ssm_association.SsmAssociation",
+ "awscc.ssm_document": "c7n_awscc.resources.ssm_document.SsmDocument",
+ "awscc.ssm_resourcedatasync": "c7n_awscc.resources.ssm_resourcedatasync.SsmResourcedatasync",
+ "awscc.ssmcontacts_contact": "c7n_awscc.resources.ssmcontacts_contact.SsmcontactsContact",
+ "awscc.ssmcontacts_contactchannel": "c7n_awscc.resources.ssmcontacts_contactchannel.SsmcontactsContactchannel",
+ "awscc.ssmincidents_replicationset": "c7n_awscc.resources.ssmincidents_replicationset.SsmincidentsReplicationset",
+ "awscc.ssmincidents_responseplan": "c7n_awscc.resources.ssmincidents_responseplan.SsmincidentsResponseplan",
+ "awscc.sso_instanceaccesscontrolattributeconfiguration": "c7n_awscc.resources.sso_instanceaccesscontrolattributeconfiguration.SsoInstanceaccesscontrolattributeconfiguration",
+ "awscc.sso_permissionset": "c7n_awscc.resources.sso_permissionset.SsoPermissionset",
+ "awscc.stepfunctions_activity": "c7n_awscc.resources.stepfunctions_activity.StepfunctionsActivity",
+ "awscc.stepfunctions_statemachine": "c7n_awscc.resources.stepfunctions_statemachine.StepfunctionsStatemachine",
+ "awscc.synthetics_canary": "c7n_awscc.resources.synthetics_canary.SyntheticsCanary",
+ "awscc.timestream_database": "c7n_awscc.resources.timestream_database.TimestreamDatabase",
+ "awscc.timestream_scheduledquery": "c7n_awscc.resources.timestream_scheduledquery.TimestreamScheduledquery",
+ "awscc.timestream_table": "c7n_awscc.resources.timestream_table.TimestreamTable",
+ "awscc.transfer_workflow": "c7n_awscc.resources.transfer_workflow.TransferWorkflow",
+ "awscc.wafv2_ipset": "c7n_awscc.resources.wafv2_ipset.Wafv2Ipset",
+ "awscc.wafv2_loggingconfiguration": "c7n_awscc.resources.wafv2_loggingconfiguration.Wafv2Loggingconfiguration",
+ "awscc.wafv2_regexpatternset": "c7n_awscc.resources.wafv2_regexpatternset.Wafv2Regexpatternset",
+ "awscc.wafv2_rulegroup": "c7n_awscc.resources.wafv2_rulegroup.Wafv2Rulegroup",
+ "awscc.wafv2_webacl": "c7n_awscc.resources.wafv2_webacl.Wafv2Webacl",
+ "awscc.wafv2_webaclassociation": "c7n_awscc.resources.wafv2_webaclassociation.Wafv2Webaclassociation",
+ "awscc.xray_group": "c7n_awscc.resources.xray_group.XrayGroup",
+ "awscc.xray_samplingrule": "c7n_awscc.resources.xray_samplingrule.XraySamplingrule"
+ },
+ "augment": {
+ "AWS::AccessAnalyzer::Analyzer": {
+ "service": "accessanalyzer",
+ "type": "accessanalyzer_analyzer"
+ },
+ "AWS::ACMPCA::Certificate": {
+ "service": "acm-pca",
+ "type": "acmpca_certificate"
+ },
+ "AWS::ACMPCA::CertificateAuthority": {
+ "service": "acm-pca",
+ "type": "acmpca_certificateauthority"
+ },
+ "AWS::ACMPCA::CertificateAuthorityActivation": {
+ "service": "acm-pca",
+ "type": "acmpca_certificateauthorityactivation"
+ },
+ "AWS::Amplify::App": {
+ "service": "amplify",
+ "type": "amplify_app"
+ },
+ "AWS::Amplify::Branch": {
+ "service": "amplify",
+ "type": "amplify_branch"
+ },
+ "AWS::Amplify::Domain": {
+ "service": "amplify",
+ "type": "amplify_domain"
+ },
+ "AWS::AmplifyUIBuilder::Component": {
+ "service": "amplifyuibuilder",
+ "type": "amplifyuibuilder_component"
+ },
+ "AWS::AmplifyUIBuilder::Theme": {
+ "service": "amplifyuibuilder",
+ "type": "amplifyuibuilder_theme"
+ },
+ "AWS::ApiGateway::Account": {
+ "service": "apigateway",
+ "type": "apigateway_account"
+ },
+ "AWS::ApiGateway::ApiKey": {
+ "service": "apigateway",
+ "type": "apigateway_apikey"
+ },
+ "AWS::ApiGateway::Authorizer": {
+ "service": "apigateway",
+ "type": "apigateway_authorizer"
+ },
+ "AWS::ApiGateway::BasePathMapping": {
+ "service": "apigateway",
+ "type": "apigateway_basepathmapping"
+ },
+ "AWS::ApiGateway::ClientCertificate": {
+ "service": "apigateway",
+ "type": "apigateway_clientcertificate",
+ "c7n_type": "aws.rest-client-certificate"
+ },
+ "AWS::ApiGateway::Deployment": {
+ "service": "apigateway",
+ "type": "apigateway_deployment"
+ },
+ "AWS::ApiGateway::DocumentationVersion": {
+ "service": "apigateway",
+ "type": "apigateway_documentationversion"
+ },
+ "AWS::ApiGateway::DomainName": {
+ "service": "apigateway",
+ "type": "apigateway_domainname"
+ },
+ "AWS::ApiGateway::Method": {
+ "service": "apigateway",
+ "type": "apigateway_method"
+ },
+ "AWS::ApiGateway::Model": {
+ "service": "apigateway",
+ "type": "apigateway_model"
+ },
+ "AWS::ApiGateway::RequestValidator": {
+ "service": "apigateway",
+ "type": "apigateway_requestvalidator"
+ },
+ "AWS::ApiGateway::Stage": {
+ "service": "apigateway",
+ "type": "apigateway_stage",
+ "c7n_type": "aws.rest-stage"
+ },
+ "AWS::ApiGateway::UsagePlan": {
+ "service": "apigateway",
+ "type": "apigateway_usageplan"
+ },
+ "AWS::AppFlow::ConnectorProfile": {
+ "service": "appflow",
+ "type": "appflow_connectorprofile"
+ },
+ "AWS::AppFlow::Flow": {
+ "service": "appflow",
+ "type": "appflow_flow"
+ },
+ "AWS::AppIntegrations::EventIntegration": {
+ "service": "appintegrations",
+ "type": "appintegrations_eventintegration"
+ },
+ "AWS::ApplicationInsights::Application": {
+ "service": "application-insights",
+ "type": "applicationinsights_application"
+ },
+ "AWS::AppRunner::Service": {
+ "service": "apprunner",
+ "type": "apprunner_service"
+ },
+ "AWS::AppStream::Application": {
+ "service": "appstream",
+ "type": "appstream_application"
+ },
+ "AWS::AppStream::Entitlement": {
+ "service": "appstream",
+ "type": "appstream_entitlement"
+ },
+ "AWS::AppSync::DomainName": {
+ "service": "appsync",
+ "type": "appsync_domainname"
+ },
+ "AWS::AppSync::DomainNameApiAssociation": {
+ "service": "appsync",
+ "type": "appsync_domainnameapiassociation"
+ },
+ "AWS::APS::RuleGroupsNamespace": {
+ "service": "amp",
+ "type": "aps_rulegroupsnamespace"
+ },
+ "AWS::APS::Workspace": {
+ "service": "amp",
+ "type": "aps_workspace"
+ },
+ "AWS::Athena::DataCatalog": {
+ "service": "athena",
+ "type": "athena_datacatalog"
+ },
+ "AWS::Athena::NamedQuery": {
+ "service": "athena",
+ "type": "athena_namedquery"
+ },
+ "AWS::Athena::PreparedStatement": {
+ "service": "athena",
+ "type": "athena_preparedstatement"
+ },
+ "AWS::Athena::WorkGroup": {
+ "service": "athena",
+ "type": "athena_workgroup"
+ },
+ "AWS::AuditManager::Assessment": {
+ "service": "auditmanager",
+ "type": "auditmanager_assessment"
+ },
+ "AWS::AutoScaling::LifecycleHook": {
+ "service": "autoscaling",
+ "type": "autoscaling_lifecyclehook"
+ },
+ "AWS::AutoScaling::WarmPool": {
+ "service": "autoscaling",
+ "type": "autoscaling_warmpool"
+ },
+ "AWS::Backup::BackupPlan": {
+ "service": "backup",
+ "type": "backup_backupplan",
+ "c7n_type": "aws.backup-plan"
+ },
+ "AWS::Backup::BackupVault": {
+ "service": "backup",
+ "type": "backup_backupvault",
+ "c7n_type": "aws.backup-vault"
+ },
+ "AWS::Backup::Framework": {
+ "service": "backup",
+ "type": "backup_framework"
+ },
+ "AWS::Backup::ReportPlan": {
+ "service": "backup",
+ "type": "backup_reportplan"
+ },
+ "AWS::Batch::SchedulingPolicy": {
+ "service": "batch",
+ "type": "batch_schedulingpolicy"
+ },
+ "AWS::Budgets::BudgetsAction": {
+ "service": "budgets",
+ "type": "budgets_budgetsaction"
+ },
+ "AWS::Cassandra::Keyspace": {
+ "service": null,
+ "type": "cassandra_keyspace"
+ },
+ "AWS::Cassandra::Table": {
+ "service": null,
+ "type": "cassandra_table"
+ },
+ "AWS::CE::AnomalyMonitor": {
+ "service": "ce",
+ "type": "ce_anomalymonitor"
+ },
+ "AWS::CE::AnomalySubscription": {
+ "service": "ce",
+ "type": "ce_anomalysubscription"
+ },
+ "AWS::CE::CostCategory": {
+ "service": "ce",
+ "type": "ce_costcategory"
+ },
+ "AWS::CertificateManager::Account": {
+ "service": "acm",
+ "type": "certificatemanager_account"
+ },
+ "AWS::Chatbot::SlackChannelConfiguration": {
+ "service": null,
+ "type": "chatbot_slackchannelconfiguration"
+ },
+ "AWS::CloudFormation::ResourceDefaultVersion": {
+ "service": "cloudformation",
+ "type": "cloudformation_resourcedefaultversion"
+ },
+ "AWS::CloudFormation::StackSet": {
+ "service": "cloudformation",
+ "type": "cloudformation_stackset"
+ },
+ "AWS::CloudFormation::TypeActivation": {
+ "service": "cloudformation",
+ "type": "cloudformation_typeactivation"
+ },
+ "AWS::CloudFront::CachePolicy": {
+ "service": "cloudfront",
+ "type": "cloudfront_cachepolicy"
+ },
+ "AWS::CloudFront::CloudFrontOriginAccessIdentity": {
+ "service": "cloudfront",
+ "type": "cloudfront_cloudfrontoriginaccessidentity"
+ },
+ "AWS::CloudFront::Distribution": {
+ "service": "cloudfront",
+ "type": "cloudfront_distribution",
+ "c7n_type": "aws.distribution"
+ },
+ "AWS::CloudFront::Function": {
+ "service": "cloudfront",
+ "type": "cloudfront_function"
+ },
+ "AWS::CloudFront::KeyGroup": {
+ "service": "cloudfront",
+ "type": "cloudfront_keygroup"
+ },
+ "AWS::CloudFront::OriginRequestPolicy": {
+ "service": "cloudfront",
+ "type": "cloudfront_originrequestpolicy"
+ },
+ "AWS::CloudFront::PublicKey": {
+ "service": "cloudfront",
+ "type": "cloudfront_publickey"
+ },
+ "AWS::CloudFront::RealtimeLogConfig": {
+ "service": "cloudfront",
+ "type": "cloudfront_realtimelogconfig"
+ },
+ "AWS::CloudFront::ResponseHeadersPolicy": {
+ "service": "cloudfront",
+ "type": "cloudfront_responseheaderspolicy"
+ },
+ "AWS::CloudTrail::Trail": {
+ "service": "cloudtrail",
+ "type": "cloudtrail_trail",
+ "c7n_type": "aws.cloudtrail"
+ },
+ "AWS::CloudWatch::CompositeAlarm": {
+ "service": "cloudwatch",
+ "type": "cloudwatch_compositealarm"
+ },
+ "AWS::CloudWatch::MetricStream": {
+ "service": "cloudwatch",
+ "type": "cloudwatch_metricstream"
+ },
+ "AWS::CodeArtifact::Domain": {
+ "service": "codeartifact",
+ "type": "codeartifact_domain"
+ },
+ "AWS::CodeArtifact::Repository": {
+ "service": "codeartifact",
+ "type": "codeartifact_repository"
+ },
+ "AWS::CodeGuruProfiler::ProfilingGroup": {
+ "service": "codeguruprofiler",
+ "type": "codeguruprofiler_profilinggroup"
+ },
+ "AWS::CodeStarConnections::Connection": {
+ "service": "codestar-connections",
+ "type": "codestarconnections_connection"
+ },
+ "AWS::CodeStarNotifications::NotificationRule": {
+ "service": null,
+ "type": "codestarnotifications_notificationrule"
+ },
+ "AWS::Config::AggregationAuthorization": {
+ "service": "config",
+ "type": "config_aggregationauthorization"
+ },
+ "AWS::Config::ConfigurationAggregator": {
+ "service": "config",
+ "type": "config_configurationaggregator"
+ },
+ "AWS::Config::ConformancePack": {
+ "service": "config",
+ "type": "config_conformancepack"
+ },
+ "AWS::Config::OrganizationConformancePack": {
+ "service": "config",
+ "type": "config_organizationconformancepack"
+ },
+ "AWS::Config::StoredQuery": {
+ "service": "config",
+ "type": "config_storedquery"
+ },
+ "AWS::Connect::ContactFlow": {
+ "service": "connect",
+ "type": "connect_contactflow"
+ },
+ "AWS::Connect::ContactFlowModule": {
+ "service": "connect",
+ "type": "connect_contactflowmodule"
+ },
+ "AWS::Connect::HoursOfOperation": {
+ "service": "connect",
+ "type": "connect_hoursofoperation"
+ },
+ "AWS::Connect::QuickConnect": {
+ "service": "connect",
+ "type": "connect_quickconnect"
+ },
+ "AWS::Connect::User": {
+ "service": "connect",
+ "type": "connect_user"
+ },
+ "AWS::Connect::UserHierarchyGroup": {
+ "service": "connect",
+ "type": "connect_userhierarchygroup"
+ },
+ "AWS::CUR::ReportDefinition": {
+ "service": "cur",
+ "type": "cur_reportdefinition"
+ },
+ "AWS::CustomerProfiles::Domain": {
+ "service": "customer-profiles",
+ "type": "customerprofiles_domain"
+ },
+ "AWS::CustomerProfiles::Integration": {
+ "service": "customer-profiles",
+ "type": "customerprofiles_integration"
+ },
+ "AWS::CustomerProfiles::ObjectType": {
+ "service": "customer-profiles",
+ "type": "customerprofiles_objecttype"
+ },
+ "AWS::DataBrew::Dataset": {
+ "service": "databrew",
+ "type": "databrew_dataset"
+ },
+ "AWS::DataBrew::Job": {
+ "service": "databrew",
+ "type": "databrew_job"
+ },
+ "AWS::DataBrew::Project": {
+ "service": "databrew",
+ "type": "databrew_project"
+ },
+ "AWS::DataBrew::Recipe": {
+ "service": "databrew",
+ "type": "databrew_recipe"
+ },
+ "AWS::DataBrew::Ruleset": {
+ "service": "databrew",
+ "type": "databrew_ruleset"
+ },
+ "AWS::DataBrew::Schedule": {
+ "service": "databrew",
+ "type": "databrew_schedule"
+ },
+ "AWS::DataSync::Agent": {
+ "service": "datasync",
+ "type": "datasync_agent"
+ },
+ "AWS::DataSync::LocationEFS": {
+ "service": "datasync",
+ "type": "datasync_locationefs"
+ },
+ "AWS::DataSync::LocationFSxWindows": {
+ "service": "datasync",
+ "type": "datasync_locationfsxwindows"
+ },
+ "AWS::DataSync::LocationHDFS": {
+ "service": "datasync",
+ "type": "datasync_locationhdfs"
+ },
+ "AWS::DataSync::LocationNFS": {
+ "service": "datasync",
+ "type": "datasync_locationnfs"
+ },
+ "AWS::DataSync::LocationObjectStorage": {
+ "service": "datasync",
+ "type": "datasync_locationobjectstorage"
+ },
+ "AWS::DataSync::LocationS3": {
+ "service": "datasync",
+ "type": "datasync_locations3"
+ },
+ "AWS::DataSync::LocationSMB": {
+ "service": "datasync",
+ "type": "datasync_locationsmb"
+ },
+ "AWS::DataSync::Task": {
+ "service": "datasync",
+ "type": "datasync_task"
+ },
+ "AWS::Detective::Graph": {
+ "service": "detective",
+ "type": "detective_graph"
+ },
+ "AWS::Detective::MemberInvitation": {
+ "service": "detective",
+ "type": "detective_memberinvitation"
+ },
+ "AWS::DevOpsGuru::ResourceCollection": {
+ "service": "devops-guru",
+ "type": "devopsguru_resourcecollection"
+ },
+ "AWS::DynamoDB::GlobalTable": {
+ "service": "dynamodb",
+ "type": "dynamodb_globaltable"
+ },
+ "AWS::EC2::CapacityReservationFleet": {
+ "service": "ec2",
+ "type": "ec2_capacityreservationfleet"
+ },
+ "AWS::EC2::CarrierGateway": {
+ "service": "ec2",
+ "type": "ec2_carriergateway"
+ },
+ "AWS::EC2::DHCPOptions": {
+ "service": "ec2",
+ "type": "ec2_dhcpoptions"
+ },
+ "AWS::EC2::EC2Fleet": {
+ "service": "ec2",
+ "type": "ec2_ec2fleet"
+ },
+ "AWS::EC2::FlowLog": {
+ "service": "ec2",
+ "type": "ec2_flowlog"
+ },
+ "AWS::EC2::GatewayRouteTableAssociation": {
+ "service": "ec2",
+ "type": "ec2_gatewayroutetableassociation"
+ },
+ "AWS::EC2::Host": {
+ "service": "ec2",
+ "type": "ec2_host",
+ "c7n_type": "aws.ec2-host"
+ },
+ "AWS::EC2::InternetGateway": {
+ "service": "ec2",
+ "type": "ec2_internetgateway",
+ "c7n_type": "aws.internet-gateway"
+ },
+ "AWS::EC2::IPAM": {
+ "service": "ec2",
+ "type": "ec2_ipam"
+ },
+ "AWS::EC2::IPAMPool": {
+ "service": "ec2",
+ "type": "ec2_ipampool"
+ },
+ "AWS::EC2::IPAMScope": {
+ "service": "ec2",
+ "type": "ec2_ipamscope"
+ },
+ "AWS::EC2::LocalGatewayRouteTableVPCAssociation": {
+ "service": "ec2",
+ "type": "ec2_localgatewayroutetablevpcassociation"
+ },
+ "AWS::EC2::NetworkAcl": {
+ "service": "ec2",
+ "type": "ec2_networkacl",
+ "c7n_type": "aws.network-acl"
+ },
+ "AWS::EC2::NetworkInsightsAccessScope": {
+ "service": "ec2",
+ "type": "ec2_networkinsightsaccessscope"
+ },
+ "AWS::EC2::NetworkInsightsAccessScopeAnalysis": {
+ "service": "ec2",
+ "type": "ec2_networkinsightsaccessscopeanalysis"
+ },
+ "AWS::EC2::NetworkInsightsAnalysis": {
+ "service": "ec2",
+ "type": "ec2_networkinsightsanalysis"
+ },
+ "AWS::EC2::NetworkInsightsPath": {
+ "service": "ec2",
+ "type": "ec2_networkinsightspath"
+ },
+ "AWS::EC2::NetworkInterface": {
+ "service": "ec2",
+ "type": "ec2_networkinterface",
+ "c7n_type": "aws.eni"
+ },
+ "AWS::EC2::PrefixList": {
+ "service": "ec2",
+ "type": "ec2_prefixlist"
+ },
+ "AWS::EC2::RouteTable": {
+ "service": "ec2",
+ "type": "ec2_routetable",
+ "c7n_type": "aws.route-table"
+ },
+ "AWS::EC2::SpotFleet": {
+ "service": "ec2",
+ "type": "ec2_spotfleet",
+ "c7n_type": "aws.ec2-spot-fleet-request"
+ },
+ "AWS::EC2::Subnet": {
+ "service": "ec2",
+ "type": "ec2_subnet",
+ "c7n_type": "aws.subnet"
+ },
+ "AWS::EC2::TransitGateway": {
+ "service": "ec2",
+ "type": "ec2_transitgateway",
+ "c7n_type": "aws.transit-gateway"
+ },
+ "AWS::EC2::TransitGatewayConnect": {
+ "service": "ec2",
+ "type": "ec2_transitgatewayconnect"
+ },
+ "AWS::EC2::TransitGatewayMulticastDomain": {
+ "service": "ec2",
+ "type": "ec2_transitgatewaymulticastdomain"
+ },
+ "AWS::EC2::TransitGatewayPeeringAttachment": {
+ "service": "ec2",
+ "type": "ec2_transitgatewaypeeringattachment"
+ },
+ "AWS::EC2::TransitGatewayVpcAttachment": {
+ "service": "ec2",
+ "type": "ec2_transitgatewayvpcattachment"
+ },
+ "AWS::EC2::VPC": {
+ "service": "ec2",
+ "type": "ec2_vpc",
+ "c7n_type": "aws.vpc"
+ },
+ "AWS::EC2::VPCDHCPOptionsAssociation": {
+ "service": "ec2",
+ "type": "ec2_vpcdhcpoptionsassociation"
+ },
+ "AWS::EC2::VPCEndpoint": {
+ "service": "ec2",
+ "type": "ec2_vpcendpoint",
+ "c7n_type": "aws.vpc-endpoint"
+ },
+ "AWS::ECR::PublicRepository": {
+ "service": "ecr",
+ "type": "ecr_publicrepository"
+ },
+ "AWS::ECR::RegistryPolicy": {
+ "service": "ecr",
+ "type": "ecr_registrypolicy"
+ },
+ "AWS::ECR::ReplicationConfiguration": {
+ "service": "ecr",
+ "type": "ecr_replicationconfiguration"
+ },
+ "AWS::ECR::Repository": {
+ "service": "ecr",
+ "type": "ecr_repository",
+ "c7n_type": "aws.ecr"
+ },
+ "AWS::ECS::CapacityProvider": {
+ "service": "ecs",
+ "type": "ecs_capacityprovider"
+ },
+ "AWS::ECS::Cluster": {
+ "service": "ecs",
+ "type": "ecs_cluster",
+ "c7n_type": "aws.ecs"
+ },
+ "AWS::ECS::ClusterCapacityProviderAssociations": {
+ "service": "ecs",
+ "type": "ecs_clustercapacityproviderassociations"
+ },
+ "AWS::ECS::PrimaryTaskSet": {
+ "service": "ecs",
+ "type": "ecs_primarytaskset"
+ },
+ "AWS::ECS::Service": {
+ "service": "ecs",
+ "type": "ecs_service",
+ "c7n_type": "aws.ecs-service"
+ },
+ "AWS::ECS::TaskDefinition": {
+ "service": "ecs",
+ "type": "ecs_taskdefinition",
+ "c7n_type": "aws.ecs-task-definition"
+ },
+ "AWS::ECS::TaskSet": {
+ "service": "ecs",
+ "type": "ecs_taskset",
+ "c7n_type": "aws.ecs-task"
+ },
+ "AWS::EFS::AccessPoint": {
+ "service": "efs",
+ "type": "efs_accesspoint"
+ },
+ "AWS::EFS::FileSystem": {
+ "service": "efs",
+ "type": "efs_filesystem",
+ "c7n_type": "aws.efs"
+ },
+ "AWS::EFS::MountTarget": {
+ "service": "efs",
+ "type": "efs_mounttarget",
+ "c7n_type": "aws.efs-mount-target"
+ },
+ "AWS::EKS::Addon": {
+ "service": "eks",
+ "type": "eks_addon"
+ },
+ "AWS::EKS::Cluster": {
+ "service": "eks",
+ "type": "eks_cluster",
+ "c7n_type": "aws.eks"
+ },
+ "AWS::EKS::FargateProfile": {
+ "service": "eks",
+ "type": "eks_fargateprofile"
+ },
+ "AWS::ElastiCache::GlobalReplicationGroup": {
+ "service": "elasticache",
+ "type": "elasticache_globalreplicationgroup"
+ },
+ "AWS::ElastiCache::User": {
+ "service": "elasticache",
+ "type": "elasticache_user"
+ },
+ "AWS::ElastiCache::UserGroup": {
+ "service": "elasticache",
+ "type": "elasticache_usergroup"
+ },
+ "AWS::ElasticLoadBalancingV2::Listener": {
+ "service": "elbv2",
+ "type": "elasticloadbalancingv2_listener"
+ },
+ "AWS::ElasticLoadBalancingV2::ListenerRule": {
+ "service": "elbv2",
+ "type": "elasticloadbalancingv2_listenerrule"
+ },
+ "AWS::EMR::Studio": {
+ "service": "emr",
+ "type": "emr_studio"
+ },
+ "AWS::EMR::StudioSessionMapping": {
+ "service": "emr",
+ "type": "emr_studiosessionmapping"
+ },
+ "AWS::EMRContainers::VirtualCluster": {
+ "service": "emr-containers",
+ "type": "emrcontainers_virtualcluster"
+ },
+ "AWS::Events::ApiDestination": {
+ "service": "events",
+ "type": "events_apidestination"
+ },
+ "AWS::Events::Archive": {
+ "service": "events",
+ "type": "events_archive"
+ },
+ "AWS::Events::Connection": {
+ "service": "events",
+ "type": "events_connection"
+ },
+ "AWS::EventSchemas::RegistryPolicy": {
+ "service": "schemas",
+ "type": "eventschemas_registrypolicy"
+ },
+ "AWS::Evidently::Experiment": {
+ "service": "evidently",
+ "type": "evidently_experiment"
+ },
+ "AWS::Evidently::Feature": {
+ "service": "evidently",
+ "type": "evidently_feature"
+ },
+ "AWS::Evidently::Launch": {
+ "service": "evidently",
+ "type": "evidently_launch"
+ },
+ "AWS::Evidently::Project": {
+ "service": "evidently",
+ "type": "evidently_project"
+ },
+ "AWS::FinSpace::Environment": {
+ "service": "finspace",
+ "type": "finspace_environment"
+ },
+ "AWS::FIS::ExperimentTemplate": {
+ "service": "fis",
+ "type": "fis_experimenttemplate"
+ },
+ "AWS::FMS::NotificationChannel": {
+ "service": "fms",
+ "type": "fms_notificationchannel"
+ },
+ "AWS::FMS::Policy": {
+ "service": "fms",
+ "type": "fms_policy"
+ },
+ "AWS::Forecast::DatasetGroup": {
+ "service": "forecast",
+ "type": "forecast_datasetgroup"
+ },
+ "AWS::FraudDetector::Detector": {
+ "service": "frauddetector",
+ "type": "frauddetector_detector"
+ },
+ "AWS::FraudDetector::EntityType": {
+ "service": "frauddetector",
+ "type": "frauddetector_entitytype"
+ },
+ "AWS::FraudDetector::EventType": {
+ "service": "frauddetector",
+ "type": "frauddetector_eventtype"
+ },
+ "AWS::FraudDetector::Label": {
+ "service": "frauddetector",
+ "type": "frauddetector_label"
+ },
+ "AWS::FraudDetector::Outcome": {
+ "service": "frauddetector",
+ "type": "frauddetector_outcome"
+ },
+ "AWS::FraudDetector::Variable": {
+ "service": "frauddetector",
+ "type": "frauddetector_variable"
+ },
+ "AWS::GameLift::Alias": {
+ "service": "gamelift",
+ "type": "gamelift_alias"
+ },
+ "AWS::GameLift::Fleet": {
+ "service": "gamelift",
+ "type": "gamelift_fleet",
+ "c7n_type": "aws.gamelift-fleet"
+ },
+ "AWS::GameLift::GameServerGroup": {
+ "service": "gamelift",
+ "type": "gamelift_gameservergroup"
+ },
+ "AWS::GlobalAccelerator::Accelerator": {
+ "service": "globalaccelerator",
+ "type": "globalaccelerator_accelerator"
+ },
+ "AWS::GlobalAccelerator::EndpointGroup": {
+ "service": "globalaccelerator",
+ "type": "globalaccelerator_endpointgroup"
+ },
+ "AWS::GlobalAccelerator::Listener": {
+ "service": "globalaccelerator",
+ "type": "globalaccelerator_listener"
+ },
+ "AWS::Glue::Registry": {
+ "service": "glue",
+ "type": "glue_registry"
+ },
+ "AWS::Glue::Schema": {
+ "service": "glue",
+ "type": "glue_schema"
+ },
+ "AWS::GreengrassV2::ComponentVersion": {
+ "service": "greengrassv2",
+ "type": "greengrassv2_componentversion"
+ },
+ "AWS::GroundStation::Config": {
+ "service": "groundstation",
+ "type": "groundstation_config"
+ },
+ "AWS::GroundStation::MissionProfile": {
+ "service": "groundstation",
+ "type": "groundstation_missionprofile"
+ },
+ "AWS::HealthLake::FHIRDatastore": {
+ "service": "healthlake",
+ "type": "healthlake_fhirdatastore"
+ },
+ "AWS::IAM::OIDCProvider": {
+ "service": "iam",
+ "type": "iam_oidcprovider"
+ },
+ "AWS::IAM::Role": {
+ "service": "iam",
+ "type": "iam_role",
+ "c7n_type": "aws.iam-role"
+ },
+ "AWS::IAM::SAMLProvider": {
+ "service": "iam",
+ "type": "iam_samlprovider"
+ },
+ "AWS::IAM::ServerCertificate": {
+ "service": "iam",
+ "type": "iam_servercertificate"
+ },
+ "AWS::IAM::VirtualMFADevice": {
+ "service": "iam",
+ "type": "iam_virtualmfadevice"
+ },
+ "AWS::ImageBuilder::DistributionConfiguration": {
+ "service": "imagebuilder",
+ "type": "imagebuilder_distributionconfiguration"
+ },
+ "AWS::ImageBuilder::Image": {
+ "service": "imagebuilder",
+ "type": "imagebuilder_image"
+ },
+ "AWS::ImageBuilder::ImagePipeline": {
+ "service": "imagebuilder",
+ "type": "imagebuilder_imagepipeline"
+ },
+ "AWS::ImageBuilder::InfrastructureConfiguration": {
+ "service": "imagebuilder",
+ "type": "imagebuilder_infrastructureconfiguration"
+ },
+ "AWS::InspectorV2::Filter": {
+ "service": "inspector2",
+ "type": "inspectorv2_filter"
+ },
+ "AWS::IoT::AccountAuditConfiguration": {
+ "service": "iot",
+ "type": "iot_accountauditconfiguration"
+ },
+ "AWS::IoT::Authorizer": {
+ "service": "iot",
+ "type": "iot_authorizer"
+ },
+ "AWS::IoT::Certificate": {
+ "service": "iot",
+ "type": "iot_certificate"
+ },
+ "AWS::IoT::CustomMetric": {
+ "service": "iot",
+ "type": "iot_custommetric"
+ },
+ "AWS::IoT::Dimension": {
+ "service": "iot",
+ "type": "iot_dimension"
+ },
+ "AWS::IoT::DomainConfiguration": {
+ "service": "iot",
+ "type": "iot_domainconfiguration"
+ },
+ "AWS::IoT::FleetMetric": {
+ "service": "iot",
+ "type": "iot_fleetmetric"
+ },
+ "AWS::IoT::Logging": {
+ "service": "iot",
+ "type": "iot_logging"
+ },
+ "AWS::IoT::MitigationAction": {
+ "service": "iot",
+ "type": "iot_mitigationaction"
+ },
+ "AWS::IoT::ProvisioningTemplate": {
+ "service": "iot",
+ "type": "iot_provisioningtemplate"
+ },
+ "AWS::IoT::ResourceSpecificLogging": {
+ "service": "iot",
+ "type": "iot_resourcespecificlogging"
+ },
+ "AWS::IoT::ScheduledAudit": {
+ "service": "iot",
+ "type": "iot_scheduledaudit"
+ },
+ "AWS::IoT::SecurityProfile": {
+ "service": "iot",
+ "type": "iot_securityprofile"
+ },
+ "AWS::IoT::TopicRule": {
+ "service": "iot",
+ "type": "iot_topicrule"
+ },
+ "AWS::IoT::TopicRuleDestination": {
+ "service": "iot",
+ "type": "iot_topicruledestination"
+ },
+ "AWS::IoTAnalytics::Dataset": {
+ "service": "iotanalytics",
+ "type": "iotanalytics_dataset"
+ },
+ "AWS::IoTAnalytics::Datastore": {
+ "service": "iotanalytics",
+ "type": "iotanalytics_datastore"
+ },
+ "AWS::IoTAnalytics::Pipeline": {
+ "service": "iotanalytics",
+ "type": "iotanalytics_pipeline"
+ },
+ "AWS::IoTCoreDeviceAdvisor::SuiteDefinition": {
+ "service": "iotdeviceadvisor",
+ "type": "iotcoredeviceadvisor_suitedefinition"
+ },
+ "AWS::IoTEvents::DetectorModel": {
+ "service": "iotevents",
+ "type": "iotevents_detectormodel"
+ },
+ "AWS::IoTEvents::Input": {
+ "service": "iotevents",
+ "type": "iotevents_input"
+ },
+ "AWS::IoTFleetHub::Application": {
+ "service": "iotfleethub",
+ "type": "iotfleethub_application"
+ },
+ "AWS::IoTSiteWise::AccessPolicy": {
+ "service": "iotsitewise",
+ "type": "iotsitewise_accesspolicy"
+ },
+ "AWS::IoTSiteWise::Asset": {
+ "service": "iotsitewise",
+ "type": "iotsitewise_asset"
+ },
+ "AWS::IoTSiteWise::AssetModel": {
+ "service": "iotsitewise",
+ "type": "iotsitewise_assetmodel"
+ },
+ "AWS::IoTSiteWise::Dashboard": {
+ "service": "iotsitewise",
+ "type": "iotsitewise_dashboard"
+ },
+ "AWS::IoTSiteWise::Gateway": {
+ "service": "iotsitewise",
+ "type": "iotsitewise_gateway"
+ },
+ "AWS::IoTSiteWise::Portal": {
+ "service": "iotsitewise",
+ "type": "iotsitewise_portal"
+ },
+ "AWS::IoTSiteWise::Project": {
+ "service": "iotsitewise",
+ "type": "iotsitewise_project"
+ },
+ "AWS::IoTWireless::Destination": {
+ "service": "iotwireless",
+ "type": "iotwireless_destination"
+ },
+ "AWS::IoTWireless::FuotaTask": {
+ "service": "iotwireless",
+ "type": "iotwireless_fuotatask"
+ },
+ "AWS::IoTWireless::MulticastGroup": {
+ "service": "iotwireless",
+ "type": "iotwireless_multicastgroup"
+ },
+ "AWS::IoTWireless::PartnerAccount": {
+ "service": "iotwireless",
+ "type": "iotwireless_partneraccount"
+ },
+ "AWS::IoTWireless::WirelessDevice": {
+ "service": "iotwireless",
+ "type": "iotwireless_wirelessdevice"
+ },
+ "AWS::IoTWireless::WirelessGateway": {
+ "service": "iotwireless",
+ "type": "iotwireless_wirelessgateway"
+ },
+ "AWS::IVS::Channel": {
+ "service": "ivs",
+ "type": "ivs_channel"
+ },
+ "AWS::IVS::PlaybackKeyPair": {
+ "service": "ivs",
+ "type": "ivs_playbackkeypair"
+ },
+ "AWS::IVS::RecordingConfiguration": {
+ "service": "ivs",
+ "type": "ivs_recordingconfiguration"
+ },
+ "AWS::IVS::StreamKey": {
+ "service": "ivs",
+ "type": "ivs_streamkey"
+ },
+ "AWS::Kendra::DataSource": {
+ "service": "kendra",
+ "type": "kendra_datasource"
+ },
+ "AWS::Kendra::Faq": {
+ "service": "kendra",
+ "type": "kendra_faq"
+ },
+ "AWS::Kendra::Index": {
+ "service": "kendra",
+ "type": "kendra_index"
+ },
+ "AWS::Kinesis::Stream": {
+ "service": "kinesis",
+ "type": "kinesis_stream",
+ "c7n_type": "aws.kinesis"
+ },
+ "AWS::KinesisFirehose::DeliveryStream": {
+ "service": "kinesis-firehose",
+ "type": "kinesisfirehose_deliverystream",
+ "c7n_type": "aws.firehose"
+ },
+ "AWS::KinesisVideo::SignalingChannel": {
+ "service": "kinesisvideo",
+ "type": "kinesisvideo_signalingchannel"
+ },
+ "AWS::KinesisVideo::Stream": {
+ "service": "kinesisvideo",
+ "type": "kinesisvideo_stream"
+ },
+ "AWS::KMS::Alias": {
+ "service": "kms",
+ "type": "kms_alias",
+ "c7n_type": "aws.kms"
+ },
+ "AWS::KMS::Key": {
+ "service": "kms",
+ "type": "kms_key",
+ "c7n_type": "aws.kms-key"
+ },
+ "AWS::KMS::ReplicaKey": {
+ "service": "kms",
+ "type": "kms_replicakey"
+ },
+ "AWS::Lambda::CodeSigningConfig": {
+ "service": "lambda",
+ "type": "lambda_codesigningconfig"
+ },
+ "AWS::Lambda::EventSourceMapping": {
+ "service": "lambda",
+ "type": "lambda_eventsourcemapping"
+ },
+ "AWS::Lambda::Function": {
+ "service": "lambda",
+ "type": "lambda_function",
+ "c7n_type": "aws.lambda"
+ },
+ "AWS::Lex::Bot": {
+ "service": "lexv2-models",
+ "type": "lex_bot"
+ },
+ "AWS::Lex::BotAlias": {
+ "service": "lexv2-models",
+ "type": "lex_botalias"
+ },
+ "AWS::Lex::ResourcePolicy": {
+ "service": "lexv2-models",
+ "type": "lex_resourcepolicy"
+ },
+ "AWS::LicenseManager::Grant": {
+ "service": "license-manager",
+ "type": "licensemanager_grant"
+ },
+ "AWS::LicenseManager::License": {
+ "service": "license-manager",
+ "type": "licensemanager_license"
+ },
+ "AWS::Lightsail::Alarm": {
+ "service": "lightsail",
+ "type": "lightsail_alarm"
+ },
+ "AWS::Lightsail::Bucket": {
+ "service": "lightsail",
+ "type": "lightsail_bucket"
+ },
+ "AWS::Lightsail::Database": {
+ "service": "lightsail",
+ "type": "lightsail_database"
+ },
+ "AWS::Lightsail::Disk": {
+ "service": "lightsail",
+ "type": "lightsail_disk"
+ },
+ "AWS::Lightsail::Instance": {
+ "service": "lightsail",
+ "type": "lightsail_instance"
+ },
+ "AWS::Lightsail::LoadBalancer": {
+ "service": "lightsail",
+ "type": "lightsail_loadbalancer"
+ },
+ "AWS::Lightsail::LoadBalancerTlsCertificate": {
+ "service": "lightsail",
+ "type": "lightsail_loadbalancertlscertificate"
+ },
+ "AWS::Lightsail::StaticIp": {
+ "service": "lightsail",
+ "type": "lightsail_staticip"
+ },
+ "AWS::Logs::LogGroup": {
+ "service": "logs",
+ "type": "logs_loggroup",
+ "c7n_type": "aws.log-group"
+ },
+ "AWS::Logs::QueryDefinition": {
+ "service": "logs",
+ "type": "logs_querydefinition"
+ },
+ "AWS::Logs::ResourcePolicy": {
+ "service": "logs",
+ "type": "logs_resourcepolicy"
+ },
+ "AWS::LookoutEquipment::InferenceScheduler": {
+ "service": "lookoutequipment",
+ "type": "lookoutequipment_inferencescheduler"
+ },
+ "AWS::LookoutMetrics::AnomalyDetector": {
+ "service": "lookoutmetrics",
+ "type": "lookoutmetrics_anomalydetector"
+ },
+ "AWS::LookoutVision::Project": {
+ "service": "lookoutvision",
+ "type": "lookoutvision_project"
+ },
+ "AWS::Macie::CustomDataIdentifier": {
+ "service": "macie",
+ "type": "macie_customdataidentifier"
+ },
+ "AWS::Macie::FindingsFilter": {
+ "service": "macie",
+ "type": "macie_findingsfilter"
+ },
+ "AWS::Macie::Session": {
+ "service": "macie",
+ "type": "macie_session"
+ },
+ "AWS::MediaConnect::Flow": {
+ "service": "mediaconnect",
+ "type": "mediaconnect_flow"
+ },
+ "AWS::MediaConnect::FlowEntitlement": {
+ "service": "mediaconnect",
+ "type": "mediaconnect_flowentitlement"
+ },
+ "AWS::MediaConnect::FlowOutput": {
+ "service": "mediaconnect",
+ "type": "mediaconnect_flowoutput"
+ },
+ "AWS::MediaConnect::FlowSource": {
+ "service": "mediaconnect",
+ "type": "mediaconnect_flowsource"
+ },
+ "AWS::MediaConnect::FlowVpcInterface": {
+ "service": "mediaconnect",
+ "type": "mediaconnect_flowvpcinterface"
+ },
+ "AWS::MediaPackage::Channel": {
+ "service": "mediapackage",
+ "type": "mediapackage_channel"
+ },
+ "AWS::MediaPackage::OriginEndpoint": {
+ "service": "mediapackage",
+ "type": "mediapackage_originendpoint"
+ },
+ "AWS::MediaPackage::PackagingGroup": {
+ "service": "mediapackage",
+ "type": "mediapackage_packaginggroup"
+ },
+ "AWS::MemoryDB::ACL": {
+ "service": "memorydb",
+ "type": "memorydb_acl"
+ },
+ "AWS::MemoryDB::Cluster": {
+ "service": "memorydb",
+ "type": "memorydb_cluster"
+ },
+ "AWS::MemoryDB::ParameterGroup": {
+ "service": "memorydb",
+ "type": "memorydb_parametergroup"
+ },
+ "AWS::MemoryDB::SubnetGroup": {
+ "service": "memorydb",
+ "type": "memorydb_subnetgroup"
+ },
+ "AWS::MemoryDB::User": {
+ "service": "memorydb",
+ "type": "memorydb_user"
+ },
+ "AWS::MWAA::Environment": {
+ "service": "mwaa",
+ "type": "mwaa_environment",
+ "c7n_type": "aws.airflow"
+ },
+ "AWS::NetworkFirewall::Firewall": {
+ "service": "network-firewall",
+ "type": "networkfirewall_firewall",
+ "c7n_type": "aws.firewall"
+ },
+ "AWS::NetworkFirewall::FirewallPolicy": {
+ "service": "network-firewall",
+ "type": "networkfirewall_firewallpolicy"
+ },
+ "AWS::NetworkFirewall::LoggingConfiguration": {
+ "service": "network-firewall",
+ "type": "networkfirewall_loggingconfiguration"
+ },
+ "AWS::NetworkFirewall::RuleGroup": {
+ "service": "network-firewall",
+ "type": "networkfirewall_rulegroup"
+ },
+ "AWS::NetworkManager::Device": {
+ "service": "networkmanager",
+ "type": "networkmanager_device"
+ },
+ "AWS::NetworkManager::GlobalNetwork": {
+ "service": "networkmanager",
+ "type": "networkmanager_globalnetwork"
+ },
+ "AWS::NetworkManager::Link": {
+ "service": "networkmanager",
+ "type": "networkmanager_link"
+ },
+ "AWS::NetworkManager::Site": {
+ "service": "networkmanager",
+ "type": "networkmanager_site"
+ },
+ "AWS::NimbleStudio::LaunchProfile": {
+ "service": "nimble",
+ "type": "nimblestudio_launchprofile"
+ },
+ "AWS::NimbleStudio::StreamingImage": {
+ "service": "nimble",
+ "type": "nimblestudio_streamingimage"
+ },
+ "AWS::NimbleStudio::Studio": {
+ "service": "nimble",
+ "type": "nimblestudio_studio"
+ },
+ "AWS::NimbleStudio::StudioComponent": {
+ "service": "nimble",
+ "type": "nimblestudio_studiocomponent"
+ },
+ "AWS::OpenSearchService::Domain": {
+ "service": "es",
+ "type": "opensearchservice_domain"
+ },
+ "AWS::OpsWorksCM::Server": {
+ "service": "opsworkscm",
+ "type": "opsworkscm_server",
+ "c7n_type": "aws.opswork-cm"
+ },
+ "AWS::Panorama::ApplicationInstance": {
+ "service": "panorama",
+ "type": "panorama_applicationinstance"
+ },
+ "AWS::Panorama::Package": {
+ "service": "panorama",
+ "type": "panorama_package"
+ },
+ "AWS::Panorama::PackageVersion": {
+ "service": "panorama",
+ "type": "panorama_packageversion"
+ },
+ "AWS::Pinpoint::InAppTemplate": {
+ "service": "pinpoint",
+ "type": "pinpoint_inapptemplate"
+ },
+ "AWS::QLDB::Stream": {
+ "service": "qldb",
+ "type": "qldb_stream"
+ },
+ "AWS::QuickSight::Analysis": {
+ "service": "quicksight",
+ "type": "quicksight_analysis"
+ },
+ "AWS::QuickSight::Dashboard": {
+ "service": "quicksight",
+ "type": "quicksight_dashboard"
+ },
+ "AWS::QuickSight::DataSet": {
+ "service": "quicksight",
+ "type": "quicksight_dataset"
+ },
+ "AWS::QuickSight::DataSource": {
+ "service": "quicksight",
+ "type": "quicksight_datasource"
+ },
+ "AWS::QuickSight::Template": {
+ "service": "quicksight",
+ "type": "quicksight_template"
+ },
+ "AWS::QuickSight::Theme": {
+ "service": "quicksight",
+ "type": "quicksight_theme"
+ },
+ "AWS::RDS::DBProxy": {
+ "service": "rds",
+ "type": "rds_dbproxy"
+ },
+ "AWS::RDS::DBProxyEndpoint": {
+ "service": "rds",
+ "type": "rds_dbproxyendpoint"
+ },
+ "AWS::RDS::DBProxyTargetGroup": {
+ "service": "rds",
+ "type": "rds_dbproxytargetgroup"
+ },
+ "AWS::RDS::GlobalCluster": {
+ "service": "rds",
+ "type": "rds_globalcluster"
+ },
+ "AWS::Redshift::Cluster": {
+ "service": "redshift",
+ "type": "redshift_cluster",
+ "c7n_type": "aws.redshift"
+ },
+ "AWS::Redshift::EndpointAccess": {
+ "service": "redshift",
+ "type": "redshift_endpointaccess"
+ },
+ "AWS::Redshift::EndpointAuthorization": {
+ "service": "redshift",
+ "type": "redshift_endpointauthorization"
+ },
+ "AWS::Redshift::EventSubscription": {
+ "service": "redshift",
+ "type": "redshift_eventsubscription"
+ },
+ "AWS::Redshift::ScheduledAction": {
+ "service": "redshift",
+ "type": "redshift_scheduledaction"
+ },
+ "AWS::Rekognition::Project": {
+ "service": "rekognition",
+ "type": "rekognition_project"
+ },
+ "AWS::ResilienceHub::App": {
+ "service": "resiliencehub",
+ "type": "resiliencehub_app"
+ },
+ "AWS::ResilienceHub::ResiliencyPolicy": {
+ "service": "resiliencehub",
+ "type": "resiliencehub_resiliencypolicy"
+ },
+ "AWS::ResourceGroups::Group": {
+ "service": "resource-groups",
+ "type": "resourcegroups_group"
+ },
+ "AWS::RoboMaker::Fleet": {
+ "service": "robomaker",
+ "type": "robomaker_fleet"
+ },
+ "AWS::RoboMaker::Robot": {
+ "service": "robomaker",
+ "type": "robomaker_robot"
+ },
+ "AWS::RoboMaker::SimulationApplication": {
+ "service": "robomaker",
+ "type": "robomaker_simulationapplication"
+ },
+ "AWS::Route53::HealthCheck": {
+ "service": "route53",
+ "type": "route53_healthcheck",
+ "c7n_type": "aws.healthcheck"
+ },
+ "AWS::Route53::HostedZone": {
+ "service": "route53",
+ "type": "route53_hostedzone",
+ "c7n_type": "aws.hostedzone"
+ },
+ "AWS::Route53::KeySigningKey": {
+ "service": "route53",
+ "type": "route53_keysigningkey"
+ },
+ "AWS::Route53RecoveryControl::ControlPanel": {
+ "service": "route53-recovery-control-config",
+ "type": "route53recoverycontrol_controlpanel"
+ },
+ "AWS::Route53RecoveryControl::RoutingControl": {
+ "service": "route53-recovery-control-config",
+ "type": "route53recoverycontrol_routingcontrol"
+ },
+ "AWS::Route53RecoveryControl::SafetyRule": {
+ "service": "route53-recovery-control-config",
+ "type": "route53recoverycontrol_safetyrule"
+ },
+ "AWS::Route53RecoveryReadiness::Cell": {
+ "service": "route53-recovery-readiness",
+ "type": "route53recoveryreadiness_cell"
+ },
+ "AWS::Route53RecoveryReadiness::ReadinessCheck": {
+ "service": "route53-recovery-readiness",
+ "type": "route53recoveryreadiness_readinesscheck"
+ },
+ "AWS::Route53RecoveryReadiness::RecoveryGroup": {
+ "service": "route53-recovery-readiness",
+ "type": "route53recoveryreadiness_recoverygroup"
+ },
+ "AWS::Route53RecoveryReadiness::ResourceSet": {
+ "service": "route53-recovery-readiness",
+ "type": "route53recoveryreadiness_resourceset"
+ },
+ "AWS::Route53Resolver::FirewallDomainList": {
+ "service": "route53resolver",
+ "type": "route53resolver_firewalldomainlist"
+ },
+ "AWS::Route53Resolver::FirewallRuleGroup": {
+ "service": "route53resolver",
+ "type": "route53resolver_firewallrulegroup"
+ },
+ "AWS::Route53Resolver::FirewallRuleGroupAssociation": {
+ "service": "route53resolver",
+ "type": "route53resolver_firewallrulegroupassociation"
+ },
+ "AWS::Route53Resolver::ResolverRule": {
+ "service": "route53resolver",
+ "type": "route53resolver_resolverrule"
+ },
+ "AWS::RUM::AppMonitor": {
+ "service": "rum",
+ "type": "rum_appmonitor"
+ },
+ "AWS::S3::AccessPoint": {
+ "service": "s3",
+ "type": "s3_accesspoint",
+ "c7n_type": "aws.s3-access-point"
+ },
+ "AWS::S3::Bucket": {
+ "service": "s3",
+ "type": "s3_bucket",
+ "c7n_type": "aws.s3"
+ },
+ "AWS::S3::MultiRegionAccessPoint": {
+ "service": "s3",
+ "type": "s3_multiregionaccesspoint",
+ "c7n_type": "aws.s3-access-point-multi"
+ },
+ "AWS::S3::MultiRegionAccessPointPolicy": {
+ "service": "s3",
+ "type": "s3_multiregionaccesspointpolicy"
+ },
+ "AWS::S3::StorageLens": {
+ "service": "s3",
+ "type": "s3_storagelens"
+ },
+ "AWS::S3ObjectLambda::AccessPoint": {
+ "service": "s3control",
+ "type": "s3objectlambda_accesspoint"
+ },
+ "AWS::S3ObjectLambda::AccessPointPolicy": {
+ "service": "s3control",
+ "type": "s3objectlambda_accesspointpolicy"
+ },
+ "AWS::S3Outposts::AccessPoint": {
+ "service": "s3outposts",
+ "type": "s3outposts_accesspoint"
+ },
+ "AWS::S3Outposts::Bucket": {
+ "service": "s3outposts",
+ "type": "s3outposts_bucket"
+ },
+ "AWS::S3Outposts::BucketPolicy": {
+ "service": "s3outposts",
+ "type": "s3outposts_bucketpolicy"
+ },
+ "AWS::SageMaker::AppImageConfig": {
+ "service": "sagemaker",
+ "type": "sagemaker_appimageconfig"
+ },
+ "AWS::SageMaker::Device": {
+ "service": "sagemaker",
+ "type": "sagemaker_device"
+ },
+ "AWS::SageMaker::DeviceFleet": {
+ "service": "sagemaker",
+ "type": "sagemaker_devicefleet"
+ },
+ "AWS::SageMaker::Domain": {
+ "service": "sagemaker",
+ "type": "sagemaker_domain"
+ },
+ "AWS::SageMaker::Image": {
+ "service": "sagemaker",
+ "type": "sagemaker_image"
+ },
+ "AWS::SageMaker::ModelPackageGroup": {
+ "service": "sagemaker",
+ "type": "sagemaker_modelpackagegroup"
+ },
+ "AWS::SageMaker::MonitoringSchedule": {
+ "service": "sagemaker",
+ "type": "sagemaker_monitoringschedule"
+ },
+ "AWS::SageMaker::Pipeline": {
+ "service": "sagemaker",
+ "type": "sagemaker_pipeline"
+ },
+ "AWS::SageMaker::Project": {
+ "service": "sagemaker",
+ "type": "sagemaker_project"
+ },
+ "AWS::SageMaker::UserProfile": {
+ "service": "sagemaker",
+ "type": "sagemaker_userprofile"
+ },
+ "AWS::ServiceCatalog::CloudFormationProvisionedProduct": {
+ "service": "servicecatalog",
+ "type": "servicecatalog_cloudformationprovisionedproduct"
+ },
+ "AWS::ServiceCatalog::ServiceAction": {
+ "service": "servicecatalog",
+ "type": "servicecatalog_serviceaction"
+ },
+ "AWS::ServiceCatalogAppRegistry::Application": {
+ "service": "servicecatalog-appregistry",
+ "type": "servicecatalogappregistry_application"
+ },
+ "AWS::ServiceCatalogAppRegistry::AttributeGroup": {
+ "service": "servicecatalog-appregistry",
+ "type": "servicecatalogappregistry_attributegroup"
+ },
+ "AWS::SES::ContactList": {
+ "service": "ses",
+ "type": "ses_contactlist"
+ },
+ "AWS::Signer::SigningProfile": {
+ "service": "signer",
+ "type": "signer_signingprofile"
+ },
+ "AWS::SSM::Association": {
+ "service": "ssm",
+ "type": "ssm_association"
+ },
+ "AWS::SSM::Document": {
+ "service": "ssm",
+ "type": "ssm_document"
+ },
+ "AWS::SSM::ResourceDataSync": {
+ "service": "ssm",
+ "type": "ssm_resourcedatasync"
+ },
+ "AWS::SSMContacts::Contact": {
+ "service": "ssm-contacts",
+ "type": "ssmcontacts_contact"
+ },
+ "AWS::SSMContacts::ContactChannel": {
+ "service": "ssm-contacts",
+ "type": "ssmcontacts_contactchannel"
+ },
+ "AWS::SSMIncidents::ReplicationSet": {
+ "service": "ssm-incidents",
+ "type": "ssmincidents_replicationset"
+ },
+ "AWS::SSMIncidents::ResponsePlan": {
+ "service": "ssm-incidents",
+ "type": "ssmincidents_responseplan"
+ },
+ "AWS::SSO::InstanceAccessControlAttributeConfiguration": {
+ "service": "sso",
+ "type": "sso_instanceaccesscontrolattributeconfiguration"
+ },
+ "AWS::SSO::PermissionSet": {
+ "service": "sso",
+ "type": "sso_permissionset"
+ },
+ "AWS::StepFunctions::Activity": {
+ "service": "stepfunctions",
+ "type": "stepfunctions_activity"
+ },
+ "AWS::StepFunctions::StateMachine": {
+ "service": "stepfunctions",
+ "type": "stepfunctions_statemachine",
+ "c7n_type": "aws.step-machine"
+ },
+ "AWS::Synthetics::Canary": {
+ "service": "synthetics",
+ "type": "synthetics_canary"
+ },
+ "AWS::Timestream::Database": {
+ "service": null,
+ "type": "timestream_database"
+ },
+ "AWS::Timestream::ScheduledQuery": {
+ "service": null,
+ "type": "timestream_scheduledquery"
+ },
+ "AWS::Timestream::Table": {
+ "service": null,
+ "type": "timestream_table"
+ },
+ "AWS::Transfer::Workflow": {
+ "service": "transfer",
+ "type": "transfer_workflow"
+ },
+ "AWS::WAFv2::IPSet": {
+ "service": "wafv2",
+ "type": "wafv2_ipset"
+ },
+ "AWS::WAFv2::LoggingConfiguration": {
+ "service": "wafv2",
+ "type": "wafv2_loggingconfiguration"
+ },
+ "AWS::WAFv2::RegexPatternSet": {
+ "service": "wafv2",
+ "type": "wafv2_regexpatternset"
+ },
+ "AWS::WAFv2::RuleGroup": {
+ "service": "wafv2",
+ "type": "wafv2_rulegroup"
+ },
+ "AWS::WAFv2::WebACL": {
+ "service": "wafv2",
+ "type": "wafv2_webacl"
+ },
+ "AWS::WAFv2::WebACLAssociation": {
+ "service": "wafv2",
+ "type": "wafv2_webaclassociation"
+ },
+ "AWS::XRay::Group": {
+ "service": "xray",
+ "type": "xray_group"
+ },
+ "AWS::XRay::SamplingRule": {
+ "service": "xray",
+ "type": "xray_samplingrule"
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/c7n_awscc/entry.py b/tools/c7n_awscc/c7n_awscc/entry.py
new file mode 100644
index 00000000000..4dc85e7929c
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/entry.py
@@ -0,0 +1,7 @@
+from .provider import AwsCloudControl # noqa
+from .meta import ResourceFinder
+
+
+def initialize_awscc():
+ """Load aws cloud control provider"""
+ ResourceFinder.attach()
diff --git a/tools/c7n_awscc/c7n_awscc/manager.py b/tools/c7n_awscc/c7n_awscc/manager.py
new file mode 100644
index 00000000000..2447556101f
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/manager.py
@@ -0,0 +1,130 @@
+import json
+from pathlib import Path
+
+from c7n.filters import Filter # noqa
+
+from .actions import Delete, Update
+from .query import CloudControl
+from .provider import resources
+
+from c7n.query import TypeInfo, QueryResourceManager
+
+
+_IndexData = None
+
+
+def get_index():
+ global _IndexData
+
+ if _IndexData is not None:
+ return _IndexData
+
+ index_path = Path(__file__).parent / "data" / "index.json"
+ _IndexData = json.loads(index_path.read_text())
+ return _IndexData
+
+
+def initialize_resource(resource_name):
+ """Load a resource class from its name"""
+ rpath = Path(__file__).parent / "data" / f"aws_{resource_name}.json"
+ if not rpath.exists():
+ return None
+ rinfo = json.loads(rpath.read_text())
+
+ type_info = type(
+ "resource_type",
+ (TypeInfo,),
+ dict(
+ id=rinfo["primaryIdentifier"][0].split("/", 1)[-1],
+ service=rinfo["typeName"].split("::")[1].lower(),
+ cfn_type=rinfo["typeName"],
+ ),
+ )
+
+ rname = "_".join([s.lower() for s in rinfo["typeName"].split("::")[1:]])
+ class_name = "".join(
+ [s.lower().capitalize() for s in rinfo["typeName"].split("::")[1:]]
+ )
+ mod_name = f"c7n_awscc.resources.{resource_name}"
+ permissions = rinfo["handlers"].get("read", {}).get("permissions", []) + rinfo[
+ "handlers"
+ ].get("list", {}).get("permissions", [])
+
+ rtype = type(
+ class_name,
+ (QueryResourceManager,),
+ dict(
+ __module__=mod_name,
+ source_mapping={"describe": CloudControl},
+ resource_type=type_info,
+ permissions=permissions,
+ schema=rinfo,
+ ),
+ )
+
+ rtype.action_registry.register(
+ "delete",
+ type(
+ class_name + "Delete",
+ (Delete,),
+ {
+ "permissions": rinfo["handlers"]["delete"]["permissions"],
+ "__module__": mod_name,
+ },
+ ),
+ )
+
+ rtype.action_registry.register(
+ "update",
+ type(
+ class_name + "Update",
+ (Update,),
+ {
+ "schema": get_update_schema(rtype.schema, rname),
+ "permissions": rinfo["handlers"]["update"]["permissions"],
+ "__module__": mod_name,
+ },
+ ),
+ )
+
+ process_supplementary_data(rtype)
+ resources.register(rname, rtype)
+
+ return {rtype.__name__: rtype}
+
+
+def process_supplementary_data(rtype):
+ idx = get_index()
+ augment = idx["augment"][rtype.resource_type.cfn_type]
+ rtype.resource_type.service = augment.get("service") or ""
+
+
+def get_update_schema(schema, rname):
+ prop_names = set(schema["properties"])
+ create_only = {s.rsplit("/", 1)[-1] for s in schema.get("createOnlyProperties", ())}
+ read_only = {s.rsplit("/", 1)[-1] for s in schema.get("readOnlyProperties", ())}
+
+ updatable = prop_names - (create_only | read_only)
+ update_schema = {
+ "additionalProperties": False,
+ "properties": {u: schema["properties"][u] for u in updatable},
+ }
+ update_schema["properties"]["type"] = {"enum": ["update"]}
+
+ if "definitions" in schema:
+ update_schema["definitions"] = dict(schema["definitions"])
+ update_refs(update_schema, rname)
+
+ return update_schema
+
+
+def update_refs(schema_node, rname):
+ for k, v in schema_node.items():
+ if k == "$ref" and v.startswith("#/definitions/"):
+ # mutating while iterating but there's only ref value ever
+ schema_node[k] = "#/definitions/resources/awscc.%s/actions/update/%s" % (
+ rname,
+ v[2:],
+ )
+ elif isinstance(v, dict):
+ update_refs(v, rname)
diff --git a/tools/c7n_awscc/c7n_awscc/meta.py b/tools/c7n_awscc/c7n_awscc/meta.py
new file mode 100644
index 00000000000..061a6662c9d
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/meta.py
@@ -0,0 +1,49 @@
+from importlib.abc import MetaPathFinder, Loader
+from importlib.machinery import ModuleSpec
+import os
+import sys
+
+from .manager import initialize_resource
+
+
+class ResourceFinder(MetaPathFinder):
+ """python importer for virtual resource modules from json data files."""
+
+ @classmethod
+ def attach(cls):
+ found = False
+ for s in sys.meta_path:
+ if s == cls:
+ found = True
+ break
+
+ if not found:
+ sys.meta_path.append(cls)
+ else:
+ return False
+ return True
+
+ @staticmethod
+ def find_spec(fullname, path, target=None):
+ if not fullname.startswith("c7n_awscc.resources."):
+ return
+ module_attrs = initialize_resource(fullname.rsplit(".", 1)[-1])
+ if module_attrs is None:
+ return
+ return ModuleSpec(
+ fullname,
+ ResourceLoader(module_attrs),
+ origin=path[0] + os.sep + fullname.rsplit(".", 1)[-1] + ".py",
+ )
+
+
+class ResourceLoader(Loader):
+ def __init__(self, module_attrs):
+ self.module_attrs = module_attrs
+
+ def create_module(self, spec):
+ return None
+
+ def exec_module(self, module):
+ for k, v in self.module_attrs.items():
+ setattr(module, k, v)
diff --git a/tools/c7n_awscc/c7n_awscc/provider.py b/tools/c7n_awscc/c7n_awscc/provider.py
new file mode 100644
index 00000000000..31ff6bc64bc
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/provider.py
@@ -0,0 +1,24 @@
+import json
+from pathlib import Path
+
+from c7n.registry import PluginRegistry
+from c7n.provider import clouds
+from c7n.resources.aws import AWS
+
+
+def get_resource_map():
+ return json.loads((Path(__file__).parent / "data" / "index.json").read_text())[
+ "resources"
+ ]
+
+
+@clouds.register("awscc")
+class AwsCloudControl(AWS):
+
+ display_name = "AWS Cloud Control"
+ resource_prefix = ("awscc",)
+ resources = PluginRegistry("%s.resources" % resource_prefix)
+ resource_map = get_resource_map()
+
+
+resources = AwsCloudControl.resources
diff --git a/tools/c7n_awscc/c7n_awscc/query.py b/tools/c7n_awscc/c7n_awscc/query.py
new file mode 100644
index 00000000000..0f183936478
--- /dev/null
+++ b/tools/c7n_awscc/c7n_awscc/query.py
@@ -0,0 +1,96 @@
+import json
+import logging
+
+from botocore.exceptions import ClientError
+from botocore.paginate import Paginator
+import jmespath
+
+from c7n.query import RetryPageIterator
+from c7n.utils import local_session
+
+
+log = logging.getLogger("c7n_awscc.query")
+
+
+class CloudControl:
+
+ resources_expr = jmespath.compile("ResourceDescriptions[].Properties")
+ ids_expr = jmespath.compile("ResourceDescriptions[].Identifier")
+
+ def __init__(self, manager):
+ self.manager = manager
+
+ def get_permissions(self):
+ # cfn type registry implementations use undefined permission
+ # sets that only are discoverable at runtime :/
+ return []
+
+ def get_query_params(self, query_params):
+ # nothing useful exposed for resource filtering
+ return query_params
+
+ def _get_resource_paginator(self, client):
+ p = Paginator(
+ client.list_resources,
+ {
+ "input_token": "NextToken",
+ "output_token": "NextToken",
+ "result_key": "ResourceDescriptions",
+ },
+ client.meta.service_model.operation_model("ListResources"),
+ )
+ p.PAGE_ITERATOR_CLS = RetryPageIterator
+ return p
+
+ def resources(self, query):
+ client = local_session(self.manager.session_factory).client("cloudcontrol")
+ p = self._get_resource_paginator(client)
+
+ augment = bool(self.get_rl_perm_delta())
+ results = p.paginate(
+ TypeName=self.manager.resource_type.cfn_type
+ ).build_full_result()
+ if not augment:
+ # properties are serialized json, in json.. yo dawg :/
+ results = list(map(json.loads, self.resources_expr.search(results)))
+ return results
+ else:
+ return self.get_resources(self.ids_expr.search(results))
+
+ def get_resources(self, ids, cache=True):
+ client = local_session(self.manager.session_factory).client("cloudcontrol")
+ resources = []
+ for i in ids:
+ try:
+ r = client.get_resource(
+ TypeName=self.manager.resource_type.cfn_type, Identifier=i
+ )["ResourceDescription"]["Properties"]
+ resources.append(json.loads(r))
+ except ClientError:
+ continue
+ return resources
+
+ def get_rl_perm_delta(self):
+ lperms = set(
+ self.manager.schema["handlers"]
+ .get("list", {"permissions": ()})
+ .get("permissions")
+ )
+ rperms = set(
+ self.manager.schema["handlers"]
+ .get("read", {"permissions": ()})
+ .get("permissions")
+ )
+
+ remainder = rperms.difference(lperms)
+ if not remainder or len(remainder) < 2:
+ return False
+ print(
+ f"cloud control {self.manager.type} forces augment {remainder} {lperms} {rperms}"
+ )
+ return remainder
+
+ def augment(self, resources):
+ # nothing useful to do, most types via this control
+ # include tags.
+ return resources
diff --git a/tools/c7n_awscc/c7n_awscc/resources/__init__.py b/tools/c7n_awscc/c7n_awscc/resources/__init__.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/tools/c7n_awscc/justfile b/tools/c7n_awscc/justfile
new file mode 100644
index 00000000000..4bd605569c2
--- /dev/null
+++ b/tools/c7n_awscc/justfile
@@ -0,0 +1,6 @@
+
+
+lint:
+ black c7n_awscc tests
+ flake8 c7n_awscc tests
+
diff --git a/tools/c7n_awscc/poetry.lock b/tools/c7n_awscc/poetry.lock
new file mode 100644
index 00000000000..caf7bf22c62
--- /dev/null
+++ b/tools/c7n_awscc/poetry.lock
@@ -0,0 +1,427 @@
+[[package]]
+name = "argcomplete"
+version = "2.0.0"
+description = "Bash tab completion for argparse"
+category = "dev"
+optional = false
+python-versions = ">=3.6"
+
+[package.dependencies]
+importlib-metadata = {version = ">=0.23,<5", markers = "python_version == \"3.7\""}
+
+[package.extras]
+test = ["coverage", "flake8", "pexpect", "wheel"]
+
+[[package]]
+name = "attrs"
+version = "21.4.0"
+description = "Classes Without Boilerplate"
+category = "dev"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
+
+[package.extras]
+dev = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "furo", "sphinx", "sphinx-notfound-page", "pre-commit", "cloudpickle"]
+docs = ["furo", "sphinx", "zope.interface", "sphinx-notfound-page"]
+tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "cloudpickle"]
+tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "cloudpickle"]
+
+[[package]]
+name = "boto3"
+version = "1.21.42"
+description = "The AWS SDK for Python"
+category = "dev"
+optional = false
+python-versions = ">= 3.6"
+
+[package.dependencies]
+botocore = ">=1.24.42,<1.25.0"
+jmespath = ">=0.7.1,<2.0.0"
+s3transfer = ">=0.5.0,<0.6.0"
+
+[package.extras]
+crt = ["botocore[crt] (>=1.21.0,<2.0a0)"]
+
+[[package]]
+name = "botocore"
+version = "1.24.42"
+description = "Low-level, data-driven core of boto 3."
+category = "dev"
+optional = false
+python-versions = ">= 3.6"
+
+[package.dependencies]
+jmespath = ">=0.7.1,<2.0.0"
+python-dateutil = ">=2.1,<3.0.0"
+urllib3 = ">=1.25.4,<1.27"
+
+[package.extras]
+crt = ["awscrt (==0.13.8)"]
+
+[[package]]
+name = "c7n"
+version = "0.9.16"
+description = "Cloud Custodian - Policy Rules Engine"
+category = "dev"
+optional = false
+python-versions = "^3.7"
+develop = true
+
+[package.dependencies]
+argcomplete = ">=1.12.3"
+boto3 = "^1.12.31"
+docutils = ">=0.14,<0.18"
+importlib-metadata = ">=4.11.1"
+jsonschema = ">=3.0.0"
+python-dateutil = "^2.8.2"
+pyyaml = ">=5.4.0"
+tabulate = "^0.8.6"
+
+[package.source]
+type = "directory"
+url = "../.."
+
+[[package]]
+name = "click"
+version = "8.1.2"
+description = "Composable command line interface toolkit"
+category = "main"
+optional = false
+python-versions = ">=3.7"
+
+[package.dependencies]
+colorama = {version = "*", markers = "platform_system == \"Windows\""}
+importlib-metadata = {version = "*", markers = "python_version < \"3.8\""}
+
+[[package]]
+name = "colorama"
+version = "0.4.4"
+description = "Cross-platform colored terminal text."
+category = "main"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
+
+[[package]]
+name = "docutils"
+version = "0.17.1"
+description = "Docutils -- Python Documentation Utilities"
+category = "dev"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
+
+[[package]]
+name = "importlib-metadata"
+version = "4.11.3"
+description = "Read metadata from Python packages"
+category = "main"
+optional = false
+python-versions = ">=3.7"
+
+[package.dependencies]
+typing-extensions = {version = ">=3.6.4", markers = "python_version < \"3.8\""}
+zipp = ">=0.5"
+
+[package.extras]
+docs = ["sphinx", "jaraco.packaging (>=9)", "rst.linker (>=1.9)"]
+perf = ["ipython"]
+testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)", "importlib-resources (>=1.3)"]
+
+[[package]]
+name = "importlib-resources"
+version = "5.7.1"
+description = "Read resources from Python packages"
+category = "dev"
+optional = false
+python-versions = ">=3.7"
+
+[package.dependencies]
+zipp = {version = ">=3.1.0", markers = "python_version < \"3.10\""}
+
+[package.extras]
+docs = ["sphinx", "jaraco.packaging (>=9)", "rst.linker (>=1.9)"]
+testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)"]
+
+[[package]]
+name = "jmespath"
+version = "1.0.0"
+description = "JSON Matching Expressions"
+category = "dev"
+optional = false
+python-versions = ">=3.7"
+
+[[package]]
+name = "jsonpatch"
+version = "1.32"
+description = "Apply JSON-Patches (RFC 6902)"
+category = "main"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
+
+[package.dependencies]
+jsonpointer = ">=1.9"
+
+[[package]]
+name = "jsonpointer"
+version = "2.3"
+description = "Identify specific nodes in a JSON document (RFC 6901)"
+category = "main"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
+
+[[package]]
+name = "jsonschema"
+version = "4.4.0"
+description = "An implementation of JSON Schema validation for Python"
+category = "dev"
+optional = false
+python-versions = ">=3.7"
+
+[package.dependencies]
+attrs = ">=17.4.0"
+importlib-metadata = {version = "*", markers = "python_version < \"3.8\""}
+importlib-resources = {version = ">=1.4.0", markers = "python_version < \"3.9\""}
+pyrsistent = ">=0.14.0,<0.17.0 || >0.17.0,<0.17.1 || >0.17.1,<0.17.2 || >0.17.2"
+typing-extensions = {version = "*", markers = "python_version < \"3.8\""}
+
+[package.extras]
+format = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3987", "uri-template", "webcolors (>=1.11)"]
+format_nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3986-validator (>0.1.0)", "uri-template", "webcolors (>=1.11)"]
+
+[[package]]
+name = "pyrsistent"
+version = "0.18.1"
+description = "Persistent/Functional/Immutable data structures"
+category = "dev"
+optional = false
+python-versions = ">=3.7"
+
+[[package]]
+name = "python-dateutil"
+version = "2.8.2"
+description = "Extensions to the standard Python datetime module"
+category = "dev"
+optional = false
+python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7"
+
+[package.dependencies]
+six = ">=1.5"
+
+[[package]]
+name = "pyyaml"
+version = "6.0"
+description = "YAML parser and emitter for Python"
+category = "dev"
+optional = false
+python-versions = ">=3.6"
+
+[[package]]
+name = "s3transfer"
+version = "0.5.2"
+description = "An Amazon S3 Transfer Manager"
+category = "dev"
+optional = false
+python-versions = ">= 3.6"
+
+[package.dependencies]
+botocore = ">=1.12.36,<2.0a.0"
+
+[package.extras]
+crt = ["botocore[crt] (>=1.20.29,<2.0a.0)"]
+
+[[package]]
+name = "six"
+version = "1.16.0"
+description = "Python 2 and 3 compatibility utilities"
+category = "dev"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*"
+
+[[package]]
+name = "tabulate"
+version = "0.8.9"
+description = "Pretty-print tabular data"
+category = "dev"
+optional = false
+python-versions = "*"
+
+[package.extras]
+widechars = ["wcwidth"]
+
+[[package]]
+name = "typing-extensions"
+version = "4.2.0"
+description = "Backported and Experimental Type Hints for Python 3.7+"
+category = "main"
+optional = false
+python-versions = ">=3.7"
+
+[[package]]
+name = "urllib3"
+version = "1.26.9"
+description = "HTTP library with thread-safe connection pooling, file post, and more."
+category = "dev"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, <4"
+
+[package.extras]
+brotli = ["brotlicffi (>=0.8.0)", "brotli (>=1.0.9)", "brotlipy (>=0.6.0)"]
+secure = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "certifi", "ipaddress"]
+socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"]
+
+[[package]]
+name = "zipp"
+version = "3.8.0"
+description = "Backport of pathlib-compatible object wrapper for zip files"
+category = "main"
+optional = false
+python-versions = ">=3.7"
+
+[package.extras]
+docs = ["sphinx", "jaraco.packaging (>=9)", "rst.linker (>=1.9)"]
+testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "jaraco.itertools", "func-timeout", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)"]
+
+[metadata]
+lock-version = "1.1"
+python-versions = "^3.7"
+content-hash = "9580cb47d825e29c1df49a1a11b934738b727ed9bd3d7ec77d92b83f5a461d9c"
+
+[metadata.files]
+argcomplete = [
+ {file = "argcomplete-2.0.0-py2.py3-none-any.whl", hash = "sha256:cffa11ea77999bb0dd27bb25ff6dc142a6796142f68d45b1a26b11f58724561e"},
+ {file = "argcomplete-2.0.0.tar.gz", hash = "sha256:6372ad78c89d662035101418ae253668445b391755cfe94ea52f1b9d22425b20"},
+]
+attrs = [
+ {file = "attrs-21.4.0-py2.py3-none-any.whl", hash = "sha256:2d27e3784d7a565d36ab851fe94887c5eccd6a463168875832a1be79c82828b4"},
+ {file = "attrs-21.4.0.tar.gz", hash = "sha256:626ba8234211db98e869df76230a137c4c40a12d72445c45d5f5b716f076e2fd"},
+]
+boto3 = [
+ {file = "boto3-1.21.42-py3-none-any.whl", hash = "sha256:895fb88c69be78f82cfee58a79c97a3ad8d4a2a1209041a411d7d6b9fc5393e4"},
+ {file = "boto3-1.21.42.tar.gz", hash = "sha256:bcb541175a7d190dd919a0af0e807ee6e9d26f135551e741b10d94343f2d7588"},
+]
+botocore = [
+ {file = "botocore-1.24.42-py3-none-any.whl", hash = "sha256:14aee41c8bf59d2dd2d89e8751fa37d3c95dcb92707d1966aa02697e914c1417"},
+ {file = "botocore-1.24.42.tar.gz", hash = "sha256:a2baa9484bbaee96ef312c049b8e360badcab58329e487b57567644a571b5f4a"},
+]
+c7n = []
+click = [
+ {file = "click-8.1.2-py3-none-any.whl", hash = "sha256:24e1a4a9ec5bf6299411369b208c1df2188d9eb8d916302fe6bf03faed227f1e"},
+ {file = "click-8.1.2.tar.gz", hash = "sha256:479707fe14d9ec9a0757618b7a100a0ae4c4e236fac5b7f80ca68028141a1a72"},
+]
+colorama = [
+ {file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"},
+ {file = "colorama-0.4.4.tar.gz", hash = "sha256:5941b2b48a20143d2267e95b1c2a7603ce057ee39fd88e7329b0c292aa16869b"},
+]
+docutils = [
+ {file = "docutils-0.17.1-py2.py3-none-any.whl", hash = "sha256:cf316c8370a737a022b72b56874f6602acf974a37a9fba42ec2876387549fc61"},
+ {file = "docutils-0.17.1.tar.gz", hash = "sha256:686577d2e4c32380bb50cbb22f575ed742d58168cee37e99117a854bcd88f125"},
+]
+importlib-metadata = [
+ {file = "importlib_metadata-4.11.3-py3-none-any.whl", hash = "sha256:1208431ca90a8cca1a6b8af391bb53c1a2db74e5d1cef6ddced95d4b2062edc6"},
+ {file = "importlib_metadata-4.11.3.tar.gz", hash = "sha256:ea4c597ebf37142f827b8f39299579e31685c31d3a438b59f469406afd0f2539"},
+]
+importlib-resources = [
+ {file = "importlib_resources-5.7.1-py3-none-any.whl", hash = "sha256:e447dc01619b1e951286f3929be820029d48c75eb25d265c28b92a16548212b8"},
+ {file = "importlib_resources-5.7.1.tar.gz", hash = "sha256:b6062987dfc51f0fcb809187cffbd60f35df7acb4589091f154214af6d0d49d3"},
+]
+jmespath = [
+ {file = "jmespath-1.0.0-py3-none-any.whl", hash = "sha256:e8dcd576ed616f14ec02eed0005c85973b5890083313860136657e24784e4c04"},
+ {file = "jmespath-1.0.0.tar.gz", hash = "sha256:a490e280edd1f57d6de88636992d05b71e97d69a26a19f058ecf7d304474bf5e"},
+]
+jsonpatch = [
+ {file = "jsonpatch-1.32-py2.py3-none-any.whl", hash = "sha256:26ac385719ac9f54df8a2f0827bb8253aa3ea8ab7b3368457bcdb8c14595a397"},
+ {file = "jsonpatch-1.32.tar.gz", hash = "sha256:b6ddfe6c3db30d81a96aaeceb6baf916094ffa23d7dd5fa2c13e13f8b6e600c2"},
+]
+jsonpointer = [
+ {file = "jsonpointer-2.3-py2.py3-none-any.whl", hash = "sha256:51801e558539b4e9cd268638c078c6c5746c9ac96bc38152d443400e4f3793e9"},
+ {file = "jsonpointer-2.3.tar.gz", hash = "sha256:97cba51526c829282218feb99dab1b1e6bdf8efd1c43dc9d57be093c0d69c99a"},
+]
+jsonschema = [
+ {file = "jsonschema-4.4.0-py3-none-any.whl", hash = "sha256:77281a1f71684953ee8b3d488371b162419767973789272434bbc3f29d9c8823"},
+ {file = "jsonschema-4.4.0.tar.gz", hash = "sha256:636694eb41b3535ed608fe04129f26542b59ed99808b4f688aa32dcf55317a83"},
+]
+pyrsistent = [
+ {file = "pyrsistent-0.18.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:df46c854f490f81210870e509818b729db4488e1f30f2a1ce1698b2295a878d1"},
+ {file = "pyrsistent-0.18.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d45866ececf4a5fff8742c25722da6d4c9e180daa7b405dc0a2a2790d668c26"},
+ {file = "pyrsistent-0.18.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4ed6784ceac462a7d6fcb7e9b663e93b9a6fb373b7f43594f9ff68875788e01e"},
+ {file = "pyrsistent-0.18.1-cp310-cp310-win32.whl", hash = "sha256:e4f3149fd5eb9b285d6bfb54d2e5173f6a116fe19172686797c056672689daf6"},
+ {file = "pyrsistent-0.18.1-cp310-cp310-win_amd64.whl", hash = "sha256:636ce2dc235046ccd3d8c56a7ad54e99d5c1cd0ef07d9ae847306c91d11b5fec"},
+ {file = "pyrsistent-0.18.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:e92a52c166426efbe0d1ec1332ee9119b6d32fc1f0bbfd55d5c1088070e7fc1b"},
+ {file = "pyrsistent-0.18.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d7a096646eab884bf8bed965bad63ea327e0d0c38989fc83c5ea7b8a87037bfc"},
+ {file = "pyrsistent-0.18.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cdfd2c361b8a8e5d9499b9082b501c452ade8bbf42aef97ea04854f4a3f43b22"},
+ {file = "pyrsistent-0.18.1-cp37-cp37m-win32.whl", hash = "sha256:7ec335fc998faa4febe75cc5268a9eac0478b3f681602c1f27befaf2a1abe1d8"},
+ {file = "pyrsistent-0.18.1-cp37-cp37m-win_amd64.whl", hash = "sha256:6455fc599df93d1f60e1c5c4fe471499f08d190d57eca040c0ea182301321286"},
+ {file = "pyrsistent-0.18.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:fd8da6d0124efa2f67d86fa70c851022f87c98e205f0594e1fae044e7119a5a6"},
+ {file = "pyrsistent-0.18.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7bfe2388663fd18bd8ce7db2c91c7400bf3e1a9e8bd7d63bf7e77d39051b85ec"},
+ {file = "pyrsistent-0.18.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0e3e1fcc45199df76053026a51cc59ab2ea3fc7c094c6627e93b7b44cdae2c8c"},
+ {file = "pyrsistent-0.18.1-cp38-cp38-win32.whl", hash = "sha256:b568f35ad53a7b07ed9b1b2bae09eb15cdd671a5ba5d2c66caee40dbf91c68ca"},
+ {file = "pyrsistent-0.18.1-cp38-cp38-win_amd64.whl", hash = "sha256:d1b96547410f76078eaf66d282ddca2e4baae8964364abb4f4dcdde855cd123a"},
+ {file = "pyrsistent-0.18.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:f87cc2863ef33c709e237d4b5f4502a62a00fab450c9e020892e8e2ede5847f5"},
+ {file = "pyrsistent-0.18.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6bc66318fb7ee012071b2792024564973ecc80e9522842eb4e17743604b5e045"},
+ {file = "pyrsistent-0.18.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:914474c9f1d93080338ace89cb2acee74f4f666fb0424896fcfb8d86058bf17c"},
+ {file = "pyrsistent-0.18.1-cp39-cp39-win32.whl", hash = "sha256:1b34eedd6812bf4d33814fca1b66005805d3640ce53140ab8bbb1e2651b0d9bc"},
+ {file = "pyrsistent-0.18.1-cp39-cp39-win_amd64.whl", hash = "sha256:e24a828f57e0c337c8d8bb9f6b12f09dfdf0273da25fda9e314f0b684b415a07"},
+ {file = "pyrsistent-0.18.1.tar.gz", hash = "sha256:d4d61f8b993a7255ba714df3aca52700f8125289f84f704cf80916517c46eb96"},
+]
+python-dateutil = [
+ {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"},
+]
+pyyaml = [
+ {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"},
+ {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a80a78046a72361de73f8f395f1f1e49f956c6be882eed58505a15f3e430962b"},
+ {file = "PyYAML-6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f84fbc98b019fef2ee9a1cb3ce93e3187a6df0b2538a651bfb890254ba9f90b5"},
+ {file = "PyYAML-6.0-cp310-cp310-win32.whl", hash = "sha256:2cd5df3de48857ed0544b34e2d40e9fac445930039f3cfe4bcc592a1f836d513"},
+ {file = "PyYAML-6.0-cp310-cp310-win_amd64.whl", hash = "sha256:daf496c58a8c52083df09b80c860005194014c3698698d1a57cbcfa182142a3a"},
+ {file = "PyYAML-6.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:897b80890765f037df3403d22bab41627ca8811ae55e9a722fd0392850ec4d86"},
+ {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50602afada6d6cbfad699b0c7bb50d5ccffa7e46a3d738092afddc1f9758427f"},
+ {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:48c346915c114f5fdb3ead70312bd042a953a8ce5c7106d5bfb1a5254e47da92"},
+ {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:98c4d36e99714e55cfbaaee6dd5badbc9a1ec339ebfc3b1f52e293aee6bb71a4"},
+ {file = "PyYAML-6.0-cp36-cp36m-win32.whl", hash = "sha256:0283c35a6a9fbf047493e3a0ce8d79ef5030852c51e9d911a27badfde0605293"},
+ {file = "PyYAML-6.0-cp36-cp36m-win_amd64.whl", hash = "sha256:07751360502caac1c067a8132d150cf3d61339af5691fe9e87803040dbc5db57"},
+ {file = "PyYAML-6.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:819b3830a1543db06c4d4b865e70ded25be52a2e0631ccd2f6a47a2822f2fd7c"},
+ {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:473f9edb243cb1935ab5a084eb238d842fb8f404ed2193a915d1784b5a6b5fc0"},
+ {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0ce82d761c532fe4ec3f87fc45688bdd3a4c1dc5e0b4a19814b9009a29baefd4"},
+ {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:231710d57adfd809ef5d34183b8ed1eeae3f76459c18fb4a0b373ad56bedcdd9"},
+ {file = "PyYAML-6.0-cp37-cp37m-win32.whl", hash = "sha256:c5687b8d43cf58545ade1fe3e055f70eac7a5a1a0bf42824308d868289a95737"},
+ {file = "PyYAML-6.0-cp37-cp37m-win_amd64.whl", hash = "sha256:d15a181d1ecd0d4270dc32edb46f7cb7733c7c508857278d3d378d14d606db2d"},
+ {file = "PyYAML-6.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0b4624f379dab24d3725ffde76559cff63d9ec94e1736b556dacdfebe5ab6d4b"},
+ {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:213c60cd50106436cc818accf5baa1aba61c0189ff610f64f4a3e8c6726218ba"},
+ {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9fa600030013c4de8165339db93d182b9431076eb98eb40ee068700c9c813e34"},
+ {file = "PyYAML-6.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:277a0ef2981ca40581a47093e9e2d13b3f1fbbeffae064c1d21bfceba2030287"},
+ {file = "PyYAML-6.0-cp38-cp38-win32.whl", hash = "sha256:d4eccecf9adf6fbcc6861a38015c2a64f38b9d94838ac1810a9023a0609e1b78"},
+ {file = "PyYAML-6.0-cp38-cp38-win_amd64.whl", hash = "sha256:1e4747bc279b4f613a09eb64bba2ba602d8a6664c6ce6396a4d0cd413a50ce07"},
+ {file = "PyYAML-6.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:055d937d65826939cb044fc8c9b08889e8c743fdc6a32b33e2390f66013e449b"},
+ {file = "PyYAML-6.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e61ceaab6f49fb8bdfaa0f92c4b57bcfbea54c09277b1b4f7ac376bfb7a7c174"},
+ {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d67d839ede4ed1b28a4e8909735fc992a923cdb84e618544973d7dfc71540803"},
+ {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cba8c411ef271aa037d7357a2bc8f9ee8b58b9965831d9e51baf703280dc73d3"},
+ {file = "PyYAML-6.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:40527857252b61eacd1d9af500c3337ba8deb8fc298940291486c465c8b46ec0"},
+ {file = "PyYAML-6.0-cp39-cp39-win32.whl", hash = "sha256:b5b9eccad747aabaaffbc6064800670f0c297e52c12754eb1d976c57e4f74dcb"},
+ {file = "PyYAML-6.0-cp39-cp39-win_amd64.whl", hash = "sha256:b3d267842bf12586ba6c734f89d1f5b871df0273157918b0ccefa29deb05c21c"},
+ {file = "PyYAML-6.0.tar.gz", hash = "sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2"},
+]
+s3transfer = [
+ {file = "s3transfer-0.5.2-py3-none-any.whl", hash = "sha256:7a6f4c4d1fdb9a2b640244008e142cbc2cd3ae34b386584ef044dd0f27101971"},
+ {file = "s3transfer-0.5.2.tar.gz", hash = "sha256:95c58c194ce657a5f4fb0b9e60a84968c808888aed628cd98ab8771fe1db98ed"},
+]
+six = [
+ {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"},
+ {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"},
+]
+tabulate = [
+ {file = "tabulate-0.8.9-py3-none-any.whl", hash = "sha256:d7c013fe7abbc5e491394e10fa845f8f32fe54f8dc60c6622c6cf482d25d47e4"},
+ {file = "tabulate-0.8.9.tar.gz", hash = "sha256:eb1d13f25760052e8931f2ef80aaf6045a6cceb47514db8beab24cded16f13a7"},
+]
+typing-extensions = [
+ {file = "typing_extensions-4.2.0-py3-none-any.whl", hash = "sha256:6657594ee297170d19f67d55c05852a874e7eb634f4f753dbd667855e07c1708"},
+ {file = "typing_extensions-4.2.0.tar.gz", hash = "sha256:f1c24655a0da0d1b67f07e17a5e6b2a105894e6824b92096378bb3668ef02376"},
+]
+urllib3 = [
+ {file = "urllib3-1.26.9-py2.py3-none-any.whl", hash = "sha256:44ece4d53fb1706f667c9bd1c648f5469a2ec925fcf3a776667042d645472c14"},
+ {file = "urllib3-1.26.9.tar.gz", hash = "sha256:aabaf16477806a5e1dd19aa41f8c2b7950dd3c746362d7e3223dbe6de6ac448e"},
+]
+zipp = [
+ {file = "zipp-3.8.0-py3-none-any.whl", hash = "sha256:c4f6e5bbf48e74f7a38e7cc5b0480ff42b0ae5178957d564d18932525d5cf099"},
+ {file = "zipp-3.8.0.tar.gz", hash = "sha256:56bf8aadb83c24db6c4b577e13de374ccfb67da2078beba1d037c17980bf43ad"},
+]
diff --git a/tools/c7n_awscc/pyproject.toml b/tools/c7n_awscc/pyproject.toml
new file mode 100644
index 00000000000..6b57f6e5cbf
--- /dev/null
+++ b/tools/c7n_awscc/pyproject.toml
@@ -0,0 +1,30 @@
+[tool.poetry]
+name = "c7n_awscc"
+version = "0.1.1"
+readme = "readme.md"
+homepage = "https://cloudcustodian.io"
+repository = "https://github.com/cloud-custodian/cloud-custodian"
+description = "Cloud Custodian - AWS Cloud Control Provider"
+documentation = "https://cloudcustodian.io/docs/"
+authors = ["Cloud Custodian Project"]
+license = "Apache-2.0"
+
+classifiers=[
+ "License :: OSI Approved :: Apache Software License",
+ "Topic :: System :: Systems Administration",
+ "Topic :: System :: Distributed Computing"
+]
+
+include = ["c7n_awscc/data/*json"]
+
+[tool.poetry.dependencies]
+python = "^3.7"
+click = "^8.0"
+jsonpatch = "^1.32"
+
+[tool.poetry.dev-dependencies]
+c7n = {path = "../..", develop = true}
+
+[build-system]
+requires = ["poetry>=0.12", "setuptools"]
+build-backend = "poetry.masonry.api"
diff --git a/tools/c7n_awscc/readme.md b/tools/c7n_awscc/readme.md
new file mode 100644
index 00000000000..1646e91332a
--- /dev/null
+++ b/tools/c7n_awscc/readme.md
@@ -0,0 +1,4 @@
+
+# Custodian AWS Cloud Control Provider
+
+
diff --git a/tools/c7n_awscc/requirements.txt b/tools/c7n_awscc/requirements.txt
new file mode 100644
index 00000000000..179f9504663
--- /dev/null
+++ b/tools/c7n_awscc/requirements.txt
@@ -0,0 +1,7 @@
+click==8.1.2; python_version >= "3.7"
+colorama==0.4.4; python_version >= "3.7" and python_full_version < "3.0.0" and platform_system == "Windows" or platform_system == "Windows" and python_version >= "3.7" and python_full_version >= "3.5.0"
+importlib-metadata==4.11.3; python_version < "3.8" and python_version >= "3.7"
+jsonpatch==1.32; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.5.0")
+jsonpointer==2.3; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0"
+typing-extensions==4.2.0; python_version < "3.8" and python_version >= "3.7"
+zipp==3.8.0; python_version < "3.8" and python_version >= "3.7"
diff --git a/tools/c7n_awscc/scripts/schemas.py b/tools/c7n_awscc/scripts/schemas.py
new file mode 100644
index 00000000000..1e00fdd7aa2
--- /dev/null
+++ b/tools/c7n_awscc/scripts/schemas.py
@@ -0,0 +1,186 @@
+import click
+import boto3
+import json
+import os
+
+
+from concurrent.futures import ThreadPoolExecutor, as_completed
+from pathlib import Path
+
+
+def process_resource_schema(cfn, rtype):
+ return cfn.describe_type(TypeName=rtype, Type="RESOURCE")
+
+
+def process_resource_list(control, rinfo):
+ control.list_resources(TypeName=rinfo["typeName"])
+ return True
+
+
+def extract_custodian(rdata, c7n_resource, raugment):
+ # extract any custodian metadata if we have the same
+ # resource in both providers.
+ raugment["c7n_type"] = "aws.%s" % c7n_resource.type
+
+
+ServiceMap = {
+ "acmpca": "acm-pca",
+ "applicationinsights": "application-insights",
+ "aps": "amp",
+ # cassandra : no management api
+ "certificatemanager": "acm",
+ # chatbot: no management api
+ "codestarconnections": "codestar-connections",
+ "codestarnotification": "codestar-notifications",
+ "customerprofiles": "customer-profiles",
+ "devopsguru": "devops-guru",
+ "elasticloadbalancingv2": "elbv2",
+ "emrcontainers": "emr-containers",
+ "eventschemas": "schemas",
+ "inspectorv2": "inspector2",
+ "iotcoredeviceadvisor": "iotdeviceadvisor",
+ "kinesisfirehose": "kinesis-firehose",
+ "lex": "lexv2-models",
+ "licensemanager": "license-manager",
+ "networkfirewall": "network-firewall",
+ "nimblestudio": "nimble",
+ "opensearchservice": "es",
+ "resourcegroups": "resource-groups",
+ "route53recoverycontrol": "route53-recovery-control-config",
+ "route53recoveryreadiness": "route53-recovery-readiness",
+ "s3objectlambda": "s3control",
+ "servicecatalogappregistry": "servicecatalog-appregistry",
+ "ssmcontacts": "ssm-contacts",
+ "ssmincidents": "ssm-incidents",
+ "aws_timestream_database": "timestream-write",
+ "aws_timestream_scheduledquery": "timestream-query",
+ "aws_timestream_table": "timestream-write",
+}
+
+
+@click.group()
+def cli():
+ """ """
+ os.environ["AWS_RETRY_MODE"] = "adaptive"
+ os.environ["AWS_MAX_ATTEMPTS"] = "6"
+
+
+@cli.command()
+@click.option("-o", "--index", required=True, type=click.Path())
+@click.option("-d", "--schema-dir", required=True, type=click.Path())
+def gen_index(index, schema_dir):
+
+ index_path = Path(index)
+ schema_dir = Path(schema_dir)
+
+ from c7n.resources import load_resources
+
+ load_resources(("aws.*"))
+ from c7n.resources.aws import AWS
+
+ index_data = {"resources": {}, "augment": {}}
+
+ all_services = boto3.Session().get_available_services()
+ cfn_c7n_map = {}
+
+ for rname, rtype in AWS.resources.items():
+ if not rtype.resource_type.cfn_type:
+ continue
+ cfn_c7n_map[rtype.resource_type.cfn_type] = rtype
+
+ for path in sorted(schema_dir.rglob("*.json")):
+ if path.name == "index.json":
+ continue
+ service = path.stem.split("_")[1]
+ rdata = json.loads(path.read_text())
+
+ raugment = index_data["augment"].setdefault(rdata["typeName"], {})
+ if service not in all_services:
+ service = ServiceMap.get(service)
+ raugment["service"] = service
+
+ rname = path.stem.split("_", 1)[-1]
+ raugment["type"] = rname
+
+ c7n_resource = cfn_c7n_map.get(rdata["typeName"])
+ if c7n_resource:
+ extract_custodian(rdata, c7n_resource, raugment)
+
+ class_name = "".join([s.title() for s in path.stem.split("_")[1:]])
+ index_data["resources"]["awscc.%s" % rname] = "c7n_awscc.resources.%s.%s" % (
+ path.stem.split("_", 1)[-1],
+ class_name,
+ )
+
+ index_path.write_text(json.dumps(index_data, indent=2))
+
+
+@cli.command()
+@click.option("-d", "--schema-dir", required=True, type=click.Path())
+def check_list(schema_dir):
+
+ sdir = Path(str(schema_dir))
+ control = boto3.client("cloudcontrol")
+ with ThreadPoolExecutor(max_workers=4) as w:
+ results = {}
+
+ for p in sdir.rglob("*.json"):
+ rinfo = json.loads(p.read_text())
+ results[w.submit(process_resource_list, control, rinfo)] = (p, rinfo)
+
+ for f in as_completed(results):
+ p, rinfo = results[f]
+ exc = f.exception()
+ if exc:
+ print(f"type: {rinfo['typeName']} error {exc}")
+ p.unlink()
+ continue
+
+
+@cli.command()
+@click.option("-o", "--output", required=True, type=click.Path())
+def download(output):
+ """download schema updates"""
+ output = Path(str(output))
+
+ cfn = boto3.client("cloudformation")
+ resources = sorted(
+ [
+ t["TypeName"]
+ for t in cfn.get_paginator("list_types")
+ .paginate(
+ Visibility="PUBLIC",
+ Filters={"Category": "AWS_TYPES"},
+ ProvisioningType="FULLY_MUTABLE",
+ DeprecatedStatus="LIVE",
+ Type="RESOURCE",
+ )
+ .build_full_result()["TypeSummaries"]
+ ]
+ )
+
+ results = {}
+
+ with ThreadPoolExecutor(max_workers=4) as w:
+ results = {}
+ for r in resources:
+ results[w.submit(process_resource_schema, cfn, r)] = r
+
+ for f in as_completed(results):
+ r = results[f]
+ if f.exception():
+ print(f"type: {r} error {f.exception()}")
+ continue
+ fpath = output / ("%s.json" % r.replace("::", "_").lower())
+ fpath.write_text(json.dumps(json.loads(f.result()["Schema"]), indent=2))
+ print(f"downloaded {r}")
+
+
+if __name__ == "__main__":
+ try:
+ cli()
+ except Exception:
+ import traceback, sys, pdb
+
+ traceback.print_exc()
+ pdb.post_mortem(sys.exc_info()[-1])
diff --git a/tools/c7n_awscc/setup.py b/tools/c7n_awscc/setup.py
new file mode 100644
index 00000000000..0be43e9e8ee
--- /dev/null
+++ b/tools/c7n_awscc/setup.py
@@ -0,0 +1,59 @@
+# Automatically generated from poetry/pyproject.toml
+# flake8: noqa
+# -*- coding: utf-8 -*-
+from setuptools import setup
+
+packages = \
+['c7n_awscc', 'c7n_awscc.resources']
+
+package_data = \
+{'': ['*'], 'c7n_awscc': ['data/*']}
+
+install_requires = \
+['argcomplete (>=2.0.0,<3.0.0)',
+ 'attrs (>=21.4.0,<22.0.0)',
+ 'boto3 (>=1.21.42,<2.0.0)',
+ 'botocore (>=1.24.42,<2.0.0)',
+ 'c7n (>=0.9.16,<0.10.0)',
+ 'click>=8.0,<9.0',
+ 'docutils (>=0.17.1,<0.18.0)',
+ 'importlib-metadata (>=4.11.3,<5.0.0)',
+ 'importlib-resources (>=5.7.1,<6.0.0)',
+ 'jmespath (>=1.0.0,<2.0.0)',
+ 'jsonpatch>=1.32,<2.0',
+ 'jsonschema (>=4.4.0,<5.0.0)',
+ 'pyrsistent (>=0.18.1,<0.19.0)',
+ 'python-dateutil (>=2.8.2,<3.0.0)',
+ 'pyyaml (>=6.0,<7.0)',
+ 's3transfer (>=0.5.2,<0.6.0)',
+ 'six (>=1.16.0,<2.0.0)',
+ 'tabulate (>=0.8.9,<0.9.0)',
+ 'typing-extensions (>=4.2.0,<5.0.0)',
+ 'urllib3 (>=1.26.9,<2.0.0)',
+ 'zipp (>=3.8.0,<4.0.0)']
+
+setup_kwargs = {
+ 'name': 'c7n-awscc',
+ 'version': '0.1.1',
+ 'description': 'Cloud Custodian - AWS Cloud Control Provider',
+ 'license': 'Apache-2.0',
+ 'classifiers': [
+ 'License :: OSI Approved :: Apache Software License',
+ 'Topic :: System :: Systems Administration',
+ 'Topic :: System :: Distributed Computing'
+ ],
+ 'long_description': '\n# Custodian AWS Cloud Control Provider\n\n\n',
+ 'long_description_content_type': 'text/markdown',
+ 'author': 'Cloud Custodian Project',
+ 'author_email': None,
+ 'maintainer': None,
+ 'maintainer_email': None,
+ 'url': 'https://cloudcustodian.io',
+ 'packages': packages,
+ 'package_data': package_data,
+ 'install_requires': install_requires,
+ 'python_requires': '>=3.7,<4.0',
+}
+
+
+setup(**setup_kwargs)
diff --git a/tools/c7n_awscc/tests/conftest.py b/tools/c7n_awscc/tests/conftest.py
new file mode 100644
index 00000000000..7495aed02e1
--- /dev/null
+++ b/tools/c7n_awscc/tests/conftest.py
@@ -0,0 +1,19 @@
+from pathlib import Path
+
+import pytest
+
+from c7n.testing import PyTestUtils, reset_session_cache
+from zpill import PillTest
+
+
+class CloudControlTesting(PyTestUtils, PillTest):
+ """Pytest AWS Testing Fixture"""
+
+ placebo_dir = Path(__file__).absolute().parent / "data" / "placebo"
+
+
+@pytest.fixture(scope="function")
+def test_awscc(request):
+ test_utils = CloudControlTesting(request)
+ test_utils.addCleanup(reset_session_cache)
+ return test_utils
diff --git a/tools/c7n_awscc/tests/data/placebo/awscc_log_delete/cloudcontrolapi.DeleteResource_1.json b/tools/c7n_awscc/tests/data/placebo/awscc_log_delete/cloudcontrolapi.DeleteResource_1.json
new file mode 100644
index 00000000000..bf37806c6dc
--- /dev/null
+++ b/tools/c7n_awscc/tests/data/placebo/awscc_log_delete/cloudcontrolapi.DeleteResource_1.json
@@ -0,0 +1,23 @@
+{
+ "status_code": 200,
+ "data": {
+ "ProgressEvent": {
+ "TypeName": "AWS::Logs::LogGroup",
+ "Identifier": "/aws/apigateway/welcome",
+ "RequestToken": "be14b0b2-2aa8-4b3b-9bd5-9be1df7bcaaa",
+ "Operation": "DELETE",
+ "OperationStatus": "IN_PROGRESS",
+ "EventTime": {
+ "__class__": "datetime",
+ "year": 2022,
+ "month": 1,
+ "day": 17,
+ "hour": 12,
+ "minute": 8,
+ "second": 32,
+ "microsecond": 514000
+ }
+ },
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/tests/data/placebo/awscc_log_delete/cloudcontrolapi.ListResources_1.json b/tools/c7n_awscc/tests/data/placebo/awscc_log_delete/cloudcontrolapi.ListResources_1.json
new file mode 100644
index 00000000000..0ab86e62aaf
--- /dev/null
+++ b/tools/c7n_awscc/tests/data/placebo/awscc_log_delete/cloudcontrolapi.ListResources_1.json
@@ -0,0 +1,13 @@
+{
+ "status_code": 200,
+ "data": {
+ "TypeName": "AWS::Logs::LogGroup",
+ "ResourceDescriptions": [
+ {
+ "Identifier": "/aws/apigateway/welcome",
+ "Properties": "{\"RetentionInDays\":30,\"LogGroupName\":\"/aws/apigateway/welcome\",\"Arn\":\"arn:aws:logs:us-east-1:644160558196:log-group:/aws/apigateway/welcome:*\",\"Tags\":[{\"Value\":\"Kapil\",\"Key\":\"Owner\"}]}"
+ }
+ ],
+ "ResponseMetadata": {}
+ }
+}
diff --git a/tools/c7n_awscc/tests/data/placebo/awscc_log_delete/logs.DescribeLogGroups_1.json b/tools/c7n_awscc/tests/data/placebo/awscc_log_delete/logs.DescribeLogGroups_1.json
new file mode 100644
index 00000000000..36324363b48
--- /dev/null
+++ b/tools/c7n_awscc/tests/data/placebo/awscc_log_delete/logs.DescribeLogGroups_1.json
@@ -0,0 +1,7 @@
+{
+ "status_code": 200,
+ "data": {
+ "logGroups": [],
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/tests/data/placebo/awscc_log_update/cloudcontrolapi.GetResource_1.json b/tools/c7n_awscc/tests/data/placebo/awscc_log_update/cloudcontrolapi.GetResource_1.json
new file mode 100644
index 00000000000..bb91a744dc9
--- /dev/null
+++ b/tools/c7n_awscc/tests/data/placebo/awscc_log_update/cloudcontrolapi.GetResource_1.json
@@ -0,0 +1,11 @@
+{
+ "status_code": 200,
+ "data": {
+ "TypeName": "AWS::Logs::LogGroup",
+ "ResourceDescription": {
+ "Identifier": "/aws/codebuild/custodian-build-python",
+ "Properties": "{\"RetentionInDays\":7,\"LogGroupName\":\"/aws/codebuild/custodian-build-python\",\"Arn\":\"arn:aws:logs:us-east-1:644160558196:log-group:/aws/codebuild/custodian-build-python:*\",\"Tags\":[{\"Value\":\"Kapil\",\"Key\":\"Owner\"}]}"
+ },
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/tests/data/placebo/awscc_log_update/cloudcontrolapi.ListResources_1.json b/tools/c7n_awscc/tests/data/placebo/awscc_log_update/cloudcontrolapi.ListResources_1.json
new file mode 100644
index 00000000000..942be7d0c59
--- /dev/null
+++ b/tools/c7n_awscc/tests/data/placebo/awscc_log_update/cloudcontrolapi.ListResources_1.json
@@ -0,0 +1,13 @@
+{
+ "status_code": 200,
+ "data": {
+ "TypeName": "AWS::Logs::LogGroup",
+ "ResourceDescriptions": [
+ {
+ "Identifier": "/aws/codebuild/custodian-build-python",
+ "Properties": "{\"LogGroupName\":\"/aws/codebuild/custodian-build-python\",\"Arn\":\"arn:aws:logs:us-east-1:644160558196:log-group:/aws/codebuild/custodian-build-python:*\"}"
+ }
+ ],
+ "ResponseMetadata": {}
+ }
+}
diff --git a/tools/c7n_awscc/tests/data/placebo/awscc_log_update/cloudcontrolapi.UpdateResource_1.json b/tools/c7n_awscc/tests/data/placebo/awscc_log_update/cloudcontrolapi.UpdateResource_1.json
new file mode 100644
index 00000000000..babd8cdd627
--- /dev/null
+++ b/tools/c7n_awscc/tests/data/placebo/awscc_log_update/cloudcontrolapi.UpdateResource_1.json
@@ -0,0 +1,24 @@
+{
+ "status_code": 200,
+ "data": {
+ "ProgressEvent": {
+ "TypeName": "AWS::Logs::LogGroup",
+ "Identifier": "/aws/codebuild/custodian-build-python",
+ "RequestToken": "780fb986-08fb-496d-9bbe-0dc969639816",
+ "Operation": "UPDATE",
+ "OperationStatus": "IN_PROGRESS",
+ "EventTime": {
+ "__class__": "datetime",
+ "year": 2022,
+ "month": 1,
+ "day": 17,
+ "hour": 15,
+ "minute": 32,
+ "second": 35,
+ "microsecond": 919000
+ },
+ "ResourceModel": "{\"RetentionInDays\":7,\"LogGroupName\":\"/aws/codebuild/custodian-build-python\",\"Tags\":[{\"Value\":\"Kapil\",\"Key\":\"Owner\"}]}"
+ },
+ "ResponseMetadata": {}
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_awscc/tests/test_ccaction.py b/tools/c7n_awscc/tests/test_ccaction.py
new file mode 100644
index 00000000000..d3d1731a373
--- /dev/null
+++ b/tools/c7n_awscc/tests/test_ccaction.py
@@ -0,0 +1,68 @@
+import time
+
+
+def test_delete(test_awscc):
+ factory = test_awscc.replay_flight_data("awscc_log_delete")
+ p = test_awscc.load_policy(
+ {
+ "name": "log-del",
+ "resource": "awscc.logs_loggroup",
+ "filters": [{"LogGroupName": "/aws/apigateway/welcome"}],
+ "actions": ["delete"],
+ },
+ session_factory=factory,
+ )
+
+ resources = p.run()
+ assert len(resources) == 1
+
+ if test_awscc.recording:
+ time.sleep(2)
+
+ client = factory().client("logs")
+ assert (
+ client.describe_log_groups(logGroupNamePrefix="/aws/apigateway/welcome").get(
+ "logGroups"
+ )
+ == []
+ )
+
+
+def test_update(test_awscc):
+ factory = test_awscc.replay_flight_data("awscc_log_update")
+ group_name = "/aws/codebuild/custodian-build-python"
+ p = test_awscc.load_policy(
+ {
+ "name": "log-up",
+ "resource": "awscc.logs_loggroup",
+ "filters": [{"LogGroupName": group_name}],
+ "actions": [
+ {
+ "type": "update",
+ "RetentionInDays": 7,
+ "Tags": [{"Key": "Owner", "Value": "Kapil"}],
+ }
+ ],
+ },
+ session_factory=factory,
+ )
+
+ resources = p.run()
+ assert len(resources) == 1
+ assert "RetentionInDays" not in resources[0]
+ assert "Tags" not in resources[0]
+
+ if test_awscc.recording:
+ time.sleep(2)
+
+ updated = p.resource_manager.get_resources([group_name])
+
+ assert updated[0] == {
+ "Arn": (
+ "arn:aws:logs:us-east-1:644160558196:"
+ "log-group:/aws/codebuild/custodian-build-python:*"
+ ),
+ "LogGroupName": "/aws/codebuild/custodian-build-python",
+ "RetentionInDays": 7,
+ "Tags": [{"Key": "Owner", "Value": "Kapil"}],
+ }
diff --git a/tools/c7n_awscc/tests/test_ccmanager.py b/tools/c7n_awscc/tests/test_ccmanager.py
new file mode 100644
index 00000000000..27d3a1bdbef
--- /dev/null
+++ b/tools/c7n_awscc/tests/test_ccmanager.py
@@ -0,0 +1,20 @@
+from c7n_awscc.manager import initialize_resource, get_update_schema
+
+
+def test_init_resource_access_analyzer():
+ data = initialize_resource("eks_cluster")
+ assert "EksCluster" in data
+ klass = data["EksCluster"]
+ assert klass.permissions == ["eks:DescribeCluster", "eks:ListClusters"]
+
+
+def test_update_schema():
+ klass = initialize_resource("eks_cluster")["EksCluster"]
+ update_schema = get_update_schema(klass.schema, "eks_cluster")
+ assert set(update_schema["properties"]) == {
+ "Tags",
+ "Version",
+ "ResourcesVpcConfig",
+ "Logging",
+ "type",
+ }
diff --git a/tools/c7n_awscc/tests/zpill.py b/tools/c7n_awscc/tests/zpill.py
new file mode 120000
index 00000000000..6e5e8832dd6
--- /dev/null
+++ b/tools/c7n_awscc/tests/zpill.py
@@ -0,0 +1 @@
+../../../tests/zpill.py
\ No newline at end of file
diff --git a/tools/c7n_azure/c7n_azure/provisioning/function_app.py b/tools/c7n_azure/c7n_azure/provisioning/function_app.py
index 54cdfd9e15d..9024082fb5f 100644
--- a/tools/c7n_azure/c7n_azure/provisioning/function_app.py
+++ b/tools/c7n_azure/c7n_azure/provisioning/function_app.py
@@ -49,6 +49,7 @@ def _provision(self, params):
# consumption app plan
if params['is_consumption_plan']:
functionapp_def.kind = 'functionapp,linux'
+ site_config.linux_fx_version = FUNCTION_DOCKER_VERSION
# dedicated app plan
else:
functionapp_def.kind = 'functionapp,linux,container'
diff --git a/tools/c7n_azure/c7n_azure/resources/advisor.py b/tools/c7n_azure/c7n_azure/resources/advisor.py
new file mode 100644
index 00000000000..55222ecf143
--- /dev/null
+++ b/tools/c7n_azure/c7n_azure/resources/advisor.py
@@ -0,0 +1,45 @@
+# Copyright The Cloud Custodian Authors.
+# SPDX-License-Identifier: Apache-2.0
+
+from c7n_azure.provider import resources
+from c7n_azure.resources.arm import ArmResourceManager
+
+
+@resources.register('advisor-recommendation')
+class AdvisorRecommendation(ArmResourceManager):
+ """Azure Advisor Resource
+
+ :example:
+
+ Returns all azure advisor recommendations of type Security
+
+ .. code-block:: yaml
+
+ policies:
+ - name: list-advisor-security-recommendations
+ resource: azure.advisor-recommendation
+ filters:
+ - type: value
+ key: properties.category
+ op: equal
+ value_type: normalize
+ value: security
+ """
+
+ class resource_type(ArmResourceManager.resource_type):
+ doc_groups = ['Security']
+
+ service = 'azure.mgmt.advisor'
+ client = 'AdvisorManagementClient'
+ enum_spec = ('recommendations', 'list', None)
+ default_report_fields = (
+ 'name',
+ 'resourceGroup',
+ 'properties.category',
+ 'properties.impact',
+ 'properties.impactedField',
+ 'properties.impactedValue',
+ 'properties.shortDescription.problem',
+ 'properties.lastUpdated'
+ )
+ resource_type = 'Microsoft.Advisor/recommendations'
diff --git a/tools/c7n_azure/c7n_azure/resources/defender.py b/tools/c7n_azure/c7n_azure/resources/defender.py
new file mode 100644
index 00000000000..63925a5484d
--- /dev/null
+++ b/tools/c7n_azure/c7n_azure/resources/defender.py
@@ -0,0 +1,137 @@
+# Copyright The Cloud Custodian Authors.
+# SPDX-License-Identifier: Apache-2.0
+
+from azure.mgmt.security import SecurityCenter
+
+from c7n.utils import local_session
+from c7n_azure.provider import resources
+from c7n_azure.query import QueryResourceManager, QueryMeta, TypeInfo
+
+
+class DefenderResourceManager(QueryResourceManager):
+ """Manager for Microsoft Defender resources
+
+ Note: The "Microsoft Defender for Cloud" name replaces and
+ consolidates products previously called Azure Security Center
+ and Azure Defender.
+
+ The Azure Security SDK takes different arguments for its
+ SecurityCenter client than other service SDKs use.
+
+ We can override client creation here to help simplify individual
+ Defender resource definitions.
+ """
+
+ def get_client(self):
+ session = local_session(self.session_factory)
+
+ # The SecurityCenter client takes an "asc_location" parameter, and the
+ # documentation[^1] points out that this can come from the locations
+ # list (elsewhere there are references to using a subscription's
+ # "home region" for asc_location).
+ #
+ # However, from peeking at the Azure CLI's code it looks like they
+ # hardcode an arbitrary/common location[^2]. The initial pull request
+ # adding Defender to the CLI[^3] mentions that the intention is to
+ # remove asc_location from client creation and hide it from the user.
+ #
+ # Following the Azure CLI team's lead and hardcoding "centralus"
+ # here seems reasonable.
+ #
+ # [^1]: https://azuresdkdocs.blob.core.windows.net/$web/python/azure-mgmt-security/1.0.0/azure.mgmt.security.html#azure.mgmt.security.SecurityCenter # noqa
+ # [^2]: https://github.com/Azure/azure-cli/blob/29767d75d850ddc1c24cc85bd46d861b61d77a47/src/azure-cli/azure/cli/command_modules/security/_client_factory.py#L11 # noqa
+ # [^3]: https://github.com/Azure/azure-cli/pull/7917#discussion_r238458818 # noqa
+ return SecurityCenter(session.get_credentials(), session.subscription_id, "centralus")
+
+
+@resources.register("defender-pricing")
+class DefenderPricing(DefenderResourceManager, metaclass=QueryMeta):
+ """Active Microsoft Defender pricing details for supported resources.
+
+ :example:
+
+ Check if the Key Vaults resource is operating under the Standard
+ pricing tier. This equates to Microsoft Defender being "On" in some
+ security assessments.
+
+ .. code-block:: yaml
+
+ policies:
+ - name: azure-defender-keyvaults-enabled
+ resource: azure.defender-pricing
+ filters:
+ - name: KeyVaults
+ - properties.pricingTier: Standard
+ """
+
+ class resource_type(TypeInfo):
+ doc_groups = ["Security"]
+
+ id = "id"
+ name = "name"
+ enum_spec = ("pricings", "list", None)
+ client = "SecurityCenter"
+ filter_name = None
+ service = "security"
+ resource_type = "Microsoft.Security/pricings"
+
+
+@resources.register("defender-setting")
+class DefenderSetting(DefenderResourceManager, metaclass=QueryMeta):
+ """Top-level Microsoft Defender settings for a subscription.
+
+ :example:
+
+ Check that the MCAS integration with Microsoft Defender is enabled.
+
+ .. code-block:: yaml
+
+ policies:
+ - name: azure-defender-mcas-enabled
+ resource: azure.defender-setting
+ filters:
+ - name: MCAS
+ - kind: DataExportSettings
+ - properties.enabled: True
+ """
+
+ class resource_type(TypeInfo):
+ doc_groups = ["Security"]
+
+ id = "id"
+ name = "name"
+ enum_spec = ("settings", "list", None)
+ client = "SecurityCenter"
+ filter_name = None
+ service = "security"
+ resource_type = "Microsoft.Security/settings"
+
+
+@resources.register("defender-autoprovisioning")
+class DefenderAutoProvisioningSetting(DefenderResourceManager, metaclass=QueryMeta):
+ """Auto-provisioning settings for Microsoft Defender agents.
+
+ :example:
+
+ Check that auto-provisioning is enabled for the Microsoft Defender monitoring agent.
+
+ .. code-block:: yaml
+
+ policies:
+ - name: azure-defender-auto-provisioning-enabled
+ resource: azure.defender-autoprovisioning
+ filters:
+ - name: default
+ - properties.autoProvision: "On"
+ """
+
+ class resource_type(TypeInfo):
+ doc_groups = ["Security"]
+
+ id = "id"
+ name = "name"
+ enum_spec = ("auto_provisioning_settings", "list", None)
+ client = "SecurityCenter"
+ filter_name = None
+ service = "security"
+ resource_type = "Microsoft.Security/autoProvisioningSettings"
diff --git a/tools/c7n_azure/c7n_azure/resources/resource_map.py b/tools/c7n_azure/c7n_azure/resources/resource_map.py
index 5569a77c3f1..92d5668006a 100644
--- a/tools/c7n_azure/c7n_azure/resources/resource_map.py
+++ b/tools/c7n_azure/c7n_azure/resources/resource_map.py
@@ -1,6 +1,7 @@
# Copyright The Cloud Custodian Authors.
# SPDX-License-Identifier: Apache-2.0
ResourceMap = {
+ "azure.advisor-recommendation": "c7n_azure.resources.advisor.AdvisorRecommendation",
"azure.aks": "c7n_azure.resources.k8s_service.KubernetesService",
"azure.api-management": "c7n_azure.resources.apimanagement.ApiManagement",
"azure.appserviceplan": "c7n_azure.resources.appserviceplan.AppServicePlan",
@@ -20,6 +21,9 @@
"azure.databricks": "c7n_azure.resources.databricks.Databricks",
"azure.datafactory": "c7n_azure.resources.data_factory.DataFactory",
"azure.datalake": "c7n_azure.resources.datalake_store.DataLakeStore",
+ "azure.defender-autoprovisioning": "c7n_azure.resources.defender.DefenderAutoProvisioningSetting", # noqa
+ "azure.defender-pricing": "c7n_azure.resources.defender.DefenderPricing",
+ "azure.defender-setting": "c7n_azure.resources.defender.DefenderSetting",
"azure.disk": "c7n_azure.resources.disk.Disk",
"azure.dnszone": "c7n_azure.resources.dns_zone.DnsZone",
"azure.eventhub": "c7n_azure.resources.event_hub.EventHub",
diff --git a/tools/c7n_azure/poetry.lock b/tools/c7n_azure/poetry.lock
index dbb32cf41c9..f7be87c326c 100644
--- a/tools/c7n_azure/poetry.lock
+++ b/tools/c7n_azure/poetry.lock
@@ -22,7 +22,7 @@ python-versions = "*"
[[package]]
name = "apscheduler"
-version = "3.7.0"
+version = "3.9.1"
description = "In-process task scheduler with Cron-like capabilities"
category = "main"
optional = false
@@ -31,7 +31,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, <4"
[package.dependencies]
pytz = "*"
six = ">=1.4.0"
-tzlocal = ">=2.0,<3.0"
+tzlocal = ">=2.0,<3.0.0 || >=4.0.0"
[package.extras]
asyncio = ["trollius"]
@@ -41,42 +41,42 @@ mongodb = ["pymongo (>=3.0)"]
redis = ["redis (>=3.0)"]
rethinkdb = ["rethinkdb (>=2.4.0)"]
sqlalchemy = ["sqlalchemy (>=0.8)"]
-testing = ["pytest (<6)", "pytest-cov", "pytest-tornado5", "mock", "pytest-asyncio (<0.6)", "pytest-asyncio"]
+testing = ["pytest", "pytest-cov", "pytest-tornado5", "mock", "pytest-asyncio (<0.6)", "pytest-asyncio"]
tornado = ["tornado (>=4.3)"]
twisted = ["twisted"]
zookeeper = ["kazoo"]
[[package]]
name = "argcomplete"
-version = "1.12.3"
+version = "2.0.0"
description = "Bash tab completion for argparse"
category = "dev"
optional = false
-python-versions = "*"
+python-versions = ">=3.6"
[package.dependencies]
-importlib-metadata = {version = ">=0.23,<5", markers = "python_version == \"3.6\" or python_version == \"3.7\""}
+importlib-metadata = {version = ">=0.23,<5", markers = "python_version == \"3.7\""}
[package.extras]
test = ["coverage", "flake8", "pexpect", "wheel"]
[[package]]
name = "attrs"
-version = "21.2.0"
+version = "21.4.0"
description = "Classes Without Boilerplate"
category = "dev"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
[package.extras]
-dev = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "furo", "sphinx", "sphinx-notfound-page", "pre-commit"]
+dev = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "furo", "sphinx", "sphinx-notfound-page", "pre-commit", "cloudpickle"]
docs = ["furo", "sphinx", "zope.interface", "sphinx-notfound-page"]
-tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface"]
-tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins"]
+tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "cloudpickle"]
+tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "cloudpickle"]
[[package]]
name = "azure-common"
-version = "1.1.27"
+version = "1.1.28"
description = "Microsoft Azure Client Library for Python (Common)"
category = "main"
optional = false
@@ -84,15 +84,16 @@ python-versions = "*"
[[package]]
name = "azure-core"
-version = "1.17.0"
+version = "1.23.1"
description = "Microsoft Azure Core Library for Python"
category = "main"
optional = false
-python-versions = "*"
+python-versions = ">=3.6"
[package.dependencies]
requests = ">=2.18.4"
six = ">=1.11.0"
+typing-extensions = ">=4.0.1"
[[package]]
name = "azure-cosmos"
@@ -134,14 +135,14 @@ requests = "*"
[[package]]
name = "azure-functions"
-version = "1.7.2"
+version = "1.10.1"
description = "Azure Functions for Python"
category = "main"
optional = false
python-versions = "*"
[package.extras]
-dev = ["flake8 (>=3.7.9,<3.8.0)", "mypy", "pytest", "pytest-cov", "requests (>=2.0.0,<3.0.0)", "coverage"]
+dev = ["flake8 (>=4.0.1,<4.1.0)", "mypy", "pytest", "pytest-cov", "requests (>=2.0.0,<3.0.0)", "coverage"]
[[package]]
name = "azure-graphrbac"
@@ -158,73 +159,86 @@ msrestazure = ">=0.4.32,<2.0.0"
[[package]]
name = "azure-identity"
-version = "1.6.0"
+version = "1.9.0"
description = "Microsoft Azure Identity Library for Python"
category = "main"
optional = false
-python-versions = "*"
+python-versions = ">=3.6"
[package.dependencies]
-azure-core = ">=1.0.0,<2.0.0"
-cryptography = ">=2.1.4"
-msal = ">=1.7.0,<2.0.0"
+azure-core = ">=1.11.0,<2.0.0"
+cryptography = ">=2.5"
+msal = ">=1.12.0,<2.0.0"
msal-extensions = ">=0.3.0,<0.4.0"
six = ">=1.12.0"
[[package]]
name = "azure-keyvault"
-version = "4.1.0"
+version = "4.2.0"
description = "Microsoft Azure Key Vault Client Libraries for Python"
category = "main"
optional = false
python-versions = "*"
[package.dependencies]
-azure-keyvault-certificates = ">=4.1,<5.0"
-azure-keyvault-keys = ">=4.1,<5.0"
-azure-keyvault-secrets = ">=4.1,<5.0"
+azure-keyvault-certificates = ">=4.4,<5.0"
+azure-keyvault-keys = ">=4.5,<5.0"
+azure-keyvault-secrets = ">=4.4,<5.0"
[[package]]
name = "azure-keyvault-certificates"
-version = "4.3.0"
+version = "4.4.0"
description = "Microsoft Azure Key Vault Certificates Client Library for Python"
category = "main"
optional = false
-python-versions = "*"
+python-versions = ">=3.6"
[package.dependencies]
azure-common = ">=1.1,<2.0"
-azure-core = ">=1.7.0,<2.0.0"
+azure-core = ">=1.20.0,<2.0.0"
msrest = ">=0.6.21"
[[package]]
name = "azure-keyvault-keys"
-version = "4.4.0"
+version = "4.5.0"
description = "Microsoft Azure Key Vault Keys Client Library for Python"
category = "main"
optional = false
-python-versions = "*"
+python-versions = ">=3.6"
[package.dependencies]
azure-common = ">=1.1,<2.0"
-azure-core = ">=1.7.0,<2.0.0"
+azure-core = ">=1.20.0,<2.0.0"
cryptography = ">=2.1.4"
msrest = ">=0.6.21"
six = ">=1.12.0"
[[package]]
name = "azure-keyvault-secrets"
-version = "4.3.0"
+version = "4.4.0"
description = "Microsoft Azure Key Vault Secrets Client Library for Python"
category = "main"
optional = false
-python-versions = "*"
+python-versions = ">=3.6"
[package.dependencies]
azure-common = ">=1.1,<2.0"
-azure-core = ">=1.7.0,<2.0.0"
+azure-core = ">=1.20.0,<2.0.0"
msrest = ">=0.6.21"
+[[package]]
+name = "azure-mgmt-advisor"
+version = "9.0.0"
+description = "Microsoft Azure Advisor Client Library for Python"
+category = "main"
+optional = false
+python-versions = "*"
+
+[package.dependencies]
+azure-common = ">=1.1,<2.0"
+azure-mgmt-core = ">=1.2.0,<2.0.0"
+msrest = ">=0.5.0"
+
[[package]]
name = "azure-mgmt-apimanagement"
version = "1.0.0"
@@ -472,16 +486,16 @@ msrest = ">=0.5.0"
[[package]]
name = "azure-mgmt-frontdoor"
-version = "1.0.0"
+version = "1.0.1"
description = "Microsoft Azure Front Door Service Client Library for Python"
category = "main"
optional = false
-python-versions = "*"
+python-versions = ">=3.6"
[package.dependencies]
azure-common = ">=1.1,<2.0"
-azure-mgmt-core = ">=1.2.0,<2.0.0"
-msrest = ">=0.5.0"
+azure-mgmt-core = ">=1.3.0,<2.0.0"
+msrest = ">=0.6.21"
[[package]]
name = "azure-mgmt-hdinsight"
@@ -665,6 +679,19 @@ azure-common = ">=1.1,<2.0"
azure-mgmt-core = ">=1.2.0,<2.0.0"
msrest = ">=0.5.0"
+[[package]]
+name = "azure-mgmt-security"
+version = "1.0.0"
+description = "Microsoft Azure Security Center Management Client Library for Python"
+category = "main"
+optional = false
+python-versions = "*"
+
+[package.dependencies]
+azure-common = ">=1.1,<2.0"
+azure-mgmt-core = ">=1.2.0,<2.0.0"
+msrest = ">=0.5.0"
+
[[package]]
name = "azure-mgmt-servicefabric"
version = "1.0.0"
@@ -753,16 +780,16 @@ python-versions = "*"
[[package]]
name = "azure-storage-blob"
-version = "12.8.1"
+version = "12.11.0"
description = "Microsoft Azure Blob Storage Client Library for Python"
category = "main"
optional = false
-python-versions = "*"
+python-versions = ">=3.6"
[package.dependencies]
-azure-core = ">=1.10.0,<2.0.0"
+azure-core = ">=1.15.0,<2.0.0"
cryptography = ">=2.1.4"
-msrest = ">=0.6.18"
+msrest = ">=0.6.21"
[[package]]
name = "azure-storage-common"
@@ -792,41 +819,52 @@ azure-storage-common = ">=2.1,<3.0"
[[package]]
name = "azure-storage-file-share"
-version = "12.5.0"
+version = "12.7.0"
description = "Microsoft Azure Azure File Share Storage Client Library for Python"
category = "main"
optional = false
-python-versions = "*"
+python-versions = ">=3.6"
[package.dependencies]
-azure-core = ">=1.10.0,<2.0.0"
+azure-core = ">=1.15.0,<2.0.0"
cryptography = ">=2.1.4"
-msrest = ">=0.6.18"
+msrest = ">=0.6.21"
[[package]]
name = "azure-storage-queue"
-version = "12.1.6"
+version = "12.2.0"
description = "Microsoft Azure Azure Queue Storage Client Library for Python"
category = "main"
optional = false
-python-versions = "*"
+python-versions = ">=3.6"
[package.dependencies]
-azure-core = ">=1.10.0,<2.0.0"
+azure-core = ">=1.15.0,<2.0.0"
cryptography = ">=2.1.4"
msrest = ">=0.6.18"
+[[package]]
+name = "backports.zoneinfo"
+version = "0.2.1"
+description = "Backport of the standard library zoneinfo module"
+category = "main"
+optional = false
+python-versions = ">=3.6"
+
+[package.extras]
+tzdata = ["tzdata"]
+
[[package]]
name = "boto3"
-version = "1.18.21"
+version = "1.21.42"
description = "The AWS SDK for Python"
category = "dev"
optional = false
python-versions = ">= 3.6"
[package.dependencies]
-botocore = ">=1.21.21,<1.22.0"
-jmespath = ">=0.7.1,<1.0.0"
+botocore = ">=1.24.42,<1.25.0"
+jmespath = ">=0.7.1,<2.0.0"
s3transfer = ">=0.5.0,<0.6.0"
[package.extras]
@@ -834,36 +872,37 @@ crt = ["botocore[crt] (>=1.21.0,<2.0a0)"]
[[package]]
name = "botocore"
-version = "1.21.21"
+version = "1.24.42"
description = "Low-level, data-driven core of boto 3."
category = "dev"
optional = false
python-versions = ">= 3.6"
[package.dependencies]
-jmespath = ">=0.7.1,<1.0.0"
+jmespath = ">=0.7.1,<2.0.0"
python-dateutil = ">=2.1,<3.0.0"
urllib3 = ">=1.25.4,<1.27"
[package.extras]
-crt = ["awscrt (==0.11.24)"]
+crt = ["awscrt (==0.13.8)"]
[[package]]
name = "c7n"
-version = "0.9.14"
+version = "0.9.16"
description = "Cloud Custodian - Policy Rules Engine"
category = "dev"
optional = false
-python-versions = "^3.6"
+python-versions = "^3.7"
develop = true
[package.dependencies]
-argcomplete = "^1.11.1"
+argcomplete = ">=1.12.3"
boto3 = "^1.12.31"
-importlib-metadata = ">1.7.0;python_version<3.8"
-jsonschema = "^3.2.0"
-python-dateutil = "^2.8.1"
-pyyaml = "^5.3"
+docutils = ">=0.14,<0.18"
+importlib-metadata = ">=4.11.1"
+jsonschema = ">=3.0.0"
+python-dateutil = "^2.8.2"
+pyyaml = ">=5.4.0"
tabulate = "^0.8.6"
[package.source]
@@ -872,7 +911,7 @@ url = "../.."
[[package]]
name = "certifi"
-version = "2021.5.30"
+version = "2021.10.8"
description = "Python package for providing Mozilla's CA Bundle."
category = "main"
optional = false
@@ -880,7 +919,7 @@ python-versions = "*"
[[package]]
name = "cffi"
-version = "1.14.6"
+version = "1.15.0"
description = "Foreign Function Interface for Python calling C code."
category = "main"
optional = false
@@ -891,7 +930,7 @@ pycparser = "*"
[[package]]
name = "charset-normalizer"
-version = "2.0.4"
+version = "2.0.12"
description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet."
category = "main"
optional = false
@@ -902,15 +941,27 @@ unicode_backport = ["unicodedata2"]
[[package]]
name = "click"
-version = "7.1.2"
+version = "8.1.2"
description = "Composable command line interface toolkit"
category = "main"
optional = false
+python-versions = ">=3.7"
+
+[package.dependencies]
+colorama = {version = "*", markers = "platform_system == \"Windows\""}
+importlib-metadata = {version = "*", markers = "python_version < \"3.8\""}
+
+[[package]]
+name = "colorama"
+version = "0.4.4"
+description = "Cross-platform colored terminal text."
+category = "main"
+optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
[[package]]
name = "cryptography"
-version = "3.4.7"
+version = "36.0.2"
description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers."
category = "main"
optional = false
@@ -921,23 +972,31 @@ cffi = ">=1.12"
[package.extras]
docs = ["sphinx (>=1.6.5,!=1.8.0,!=3.1.0,!=3.1.1)", "sphinx-rtd-theme"]
-docstest = ["doc8", "pyenchant (>=1.6.11)", "twine (>=1.12.0)", "sphinxcontrib-spelling (>=4.0.1)"]
+docstest = ["pyenchant (>=1.6.11)", "twine (>=1.12.0)", "sphinxcontrib-spelling (>=4.0.1)"]
pep8test = ["black", "flake8", "flake8-import-order", "pep8-naming"]
-sdist = ["setuptools-rust (>=0.11.4)"]
+sdist = ["setuptools_rust (>=0.11.4)"]
ssh = ["bcrypt (>=3.1.5)"]
-test = ["pytest (>=6.0)", "pytest-cov", "pytest-subtests", "pytest-xdist", "pretend", "iso8601", "pytz", "hypothesis (>=1.11.4,!=3.79.2)"]
+test = ["pytest (>=6.2.0)", "pytest-cov", "pytest-subtests", "pytest-xdist", "pretend", "iso8601", "pytz", "hypothesis (>=1.11.4,!=3.79.2)"]
[[package]]
name = "distlib"
-version = "0.3.2"
+version = "0.3.4"
description = "Distribution utilities"
category = "main"
optional = false
python-versions = "*"
+[[package]]
+name = "docutils"
+version = "0.17.1"
+description = "Docutils -- Python Documentation Utilities"
+category = "dev"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
+
[[package]]
name = "idna"
-version = "3.2"
+version = "3.3"
description = "Internationalized Domain Names in Applications (IDNA)"
category = "main"
optional = false
@@ -945,39 +1004,39 @@ python-versions = ">=3.5"
[[package]]
name = "importlib-metadata"
-version = "4.6.4"
+version = "4.11.3"
description = "Read metadata from Python packages"
-category = "dev"
+category = "main"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.7"
[package.dependencies]
typing-extensions = {version = ">=3.6.4", markers = "python_version < \"3.8\""}
zipp = ">=0.5"
[package.extras]
-docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
+docs = ["sphinx", "jaraco.packaging (>=9)", "rst.linker (>=1.9)"]
perf = ["ipython"]
-testing = ["pytest (>=4.6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pep517", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy", "importlib-resources (>=1.3)"]
+testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)", "importlib-resources (>=1.3)"]
[[package]]
name = "importlib-resources"
-version = "5.2.2"
+version = "5.7.1"
description = "Read resources from Python packages"
-category = "main"
+category = "dev"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.7"
[package.dependencies]
zipp = {version = ">=3.1.0", markers = "python_version < \"3.10\""}
[package.extras]
-docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
-testing = ["pytest (>=4.6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "pytest-black (>=0.3.7)", "pytest-mypy"]
+docs = ["sphinx", "jaraco.packaging (>=9)", "rst.linker (>=1.9)"]
+testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)"]
[[package]]
name = "isodate"
-version = "0.6.0"
+version = "0.6.1"
description = "An ISO 8601 date/time/duration parser and formatter"
category = "main"
optional = false
@@ -996,38 +1055,39 @@ python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*"
[[package]]
name = "jsonschema"
-version = "3.2.0"
+version = "4.4.0"
description = "An implementation of JSON Schema validation for Python"
category = "dev"
optional = false
-python-versions = "*"
+python-versions = ">=3.7"
[package.dependencies]
attrs = ">=17.4.0"
importlib-metadata = {version = "*", markers = "python_version < \"3.8\""}
-pyrsistent = ">=0.14.0"
-six = ">=1.11.0"
+importlib-resources = {version = ">=1.4.0", markers = "python_version < \"3.9\""}
+pyrsistent = ">=0.14.0,<0.17.0 || >0.17.0,<0.17.1 || >0.17.1,<0.17.2 || >0.17.2"
+typing-extensions = {version = "*", markers = "python_version < \"3.8\""}
[package.extras]
-format = ["idna", "jsonpointer (>1.13)", "rfc3987", "strict-rfc3339", "webcolors"]
-format_nongpl = ["idna", "jsonpointer (>1.13)", "webcolors", "rfc3986-validator (>0.1.0)", "rfc3339-validator"]
+format = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3987", "uri-template", "webcolors (>=1.11)"]
+format_nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3986-validator (>0.1.0)", "uri-template", "webcolors (>=1.11)"]
[[package]]
name = "msal"
-version = "1.13.0"
+version = "1.17.0"
description = "The Microsoft Authentication Library (MSAL) for Python library enables your app to access the Microsoft Cloud by supporting authentication of users with Microsoft Azure Active Directory accounts (AAD) and Microsoft Accounts (MSA) using industry standard OAuth2 and OpenID Connect."
category = "main"
optional = false
python-versions = "*"
[package.dependencies]
-cryptography = ">=0.6,<4"
+cryptography = ">=0.6,<39"
PyJWT = {version = ">=1.0.0,<3", extras = ["crypto"]}
requests = ">=2.0.0,<3"
[[package]]
name = "msal-extensions"
-version = "0.3.0"
+version = "0.3.1"
description = ""
category = "main"
optional = false
@@ -1036,8 +1096,8 @@ python-versions = "*"
[package.dependencies]
msal = ">=0.4.1,<2.0.0"
portalocker = [
- {version = ">=1.0,<2.0", markers = "platform_system != \"Windows\""},
- {version = ">=1.6,<2.0", markers = "platform_system == \"Windows\""},
+ {version = ">=1.0,<3", markers = "python_version >= \"3.5\" and platform_system != \"Windows\""},
+ {version = ">=1.6,<3", markers = "python_version >= \"3.5\" and platform_system == \"Windows\""},
]
[[package]]
@@ -1072,11 +1132,11 @@ six = "*"
[[package]]
name = "multidict"
-version = "5.1.0"
+version = "6.0.2"
description = "multidict implementation"
category = "dev"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.7"
[[package]]
name = "netaddr"
@@ -1086,21 +1146,18 @@ category = "main"
optional = false
python-versions = "*"
-[package.dependencies]
-importlib-resources = {version = "*", markers = "python_version < \"3.7\""}
-
[[package]]
name = "oauthlib"
-version = "3.1.1"
+version = "3.2.0"
description = "A generic, spec-compliant, thorough implementation of the OAuth request-signing logic"
category = "main"
optional = false
python-versions = ">=3.6"
[package.extras]
-rsa = ["cryptography (>=3.0.0,<4)"]
+rsa = ["cryptography (>=3.0.0)"]
signals = ["blinker (>=1.4.0)"]
-signedtoken = ["cryptography (>=3.0.0,<4)", "pyjwt (>=2.0.0,<3)"]
+signedtoken = ["cryptography (>=3.0.0)", "pyjwt (>=2.0.0,<3)"]
[[package]]
name = "parameterized"
@@ -1115,22 +1172,23 @@ dev = ["jinja2"]
[[package]]
name = "portalocker"
-version = "1.7.1"
+version = "2.4.0"
description = "Wraps the portalocker recipe for easy usage"
category = "main"
optional = false
-python-versions = "*"
+python-versions = ">=3.5"
[package.dependencies]
-pywin32 = {version = "!=226", markers = "platform_system == \"Windows\""}
+pywin32 = {version = ">=226", markers = "platform_system == \"Windows\""}
[package.extras]
docs = ["sphinx (>=1.7.1)"]
-tests = ["pytest (>=4.6.9)", "pytest-cov (>=2.8.1)", "sphinx (>=1.8.5)", "pytest-flake8 (>=1.0.5)"]
+redis = ["redis"]
+tests = ["pytest (>=5.4.1)", "pytest-cov (>=2.8.1)", "sphinx (>=3.0.3)", "pytest-mypy (>=0.8.0)", "redis"]
[[package]]
name = "pycparser"
-version = "2.20"
+version = "2.21"
description = "C parser in Python"
category = "main"
optional = false
@@ -1138,27 +1196,28 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
[[package]]
name = "pyjwt"
-version = "1.7.1"
+version = "2.4.0"
description = "JSON Web Token implementation in Python"
category = "main"
optional = false
-python-versions = "*"
+python-versions = ">=3.6"
[package.dependencies]
-cryptography = {version = ">=1.4", optional = true, markers = "extra == \"crypto\""}
+cryptography = {version = ">=3.3.1", optional = true, markers = "extra == \"crypto\""}
[package.extras]
-crypto = ["cryptography (>=1.4)"]
-flake8 = ["flake8", "flake8-import-order", "pep8-naming"]
-test = ["pytest (>=4.0.1,<5.0.0)", "pytest-cov (>=2.6.0,<3.0.0)", "pytest-runner (>=4.2,<5.0.0)"]
+crypto = ["cryptography (>=3.3.1)"]
+dev = ["sphinx", "sphinx-rtd-theme", "zope.interface", "cryptography (>=3.3.1)", "pytest (>=6.0.0,<7.0.0)", "coverage[toml] (==5.0.4)", "mypy", "pre-commit"]
+docs = ["sphinx", "sphinx-rtd-theme", "zope.interface"]
+tests = ["pytest (>=6.0.0,<7.0.0)", "coverage[toml] (==5.0.4)"]
[[package]]
name = "pyrsistent"
-version = "0.18.0"
+version = "0.18.1"
description = "Persistent/Functional/Immutable data structures"
category = "dev"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.7"
[[package]]
name = "python-dateutil"
@@ -1173,15 +1232,27 @@ six = ">=1.5"
[[package]]
name = "pytz"
-version = "2021.1"
+version = "2022.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]
+"backports.zoneinfo" = {version = "*", markers = "python_version >= \"3.6\" and python_version < \"3.9\""}
+tzdata = {version = "*", markers = "python_version >= \"3.6\""}
+
[[package]]
name = "pywin32"
-version = "301"
+version = "303"
description = "Python for Window Extensions"
category = "main"
optional = false
@@ -1189,15 +1260,15 @@ python-versions = "*"
[[package]]
name = "pyyaml"
-version = "5.4.1"
+version = "6.0"
description = "YAML parser and emitter for Python"
category = "dev"
optional = false
-python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*"
+python-versions = ">=3.6"
[[package]]
name = "requests"
-version = "2.26.0"
+version = "2.27.1"
description = "Python HTTP for Humans."
category = "main"
optional = false
@@ -1215,7 +1286,7 @@ use_chardet_on_py3 = ["chardet (>=3.0.2,<5)"]
[[package]]
name = "requests-oauthlib"
-version = "1.3.0"
+version = "1.3.1"
description = "OAuthlib authentication support for Requests."
category = "main"
optional = false
@@ -1230,7 +1301,7 @@ rsa = ["oauthlib[signedtoken] (>=3.0.0)"]
[[package]]
name = "s3transfer"
-version = "0.5.0"
+version = "0.5.2"
description = "An Amazon S3 Transfer Manager"
category = "dev"
optional = false
@@ -1263,33 +1334,47 @@ widechars = ["wcwidth"]
[[package]]
name = "typing-extensions"
-version = "3.10.0.0"
-description = "Backported and Experimental Type Hints for Python 3.5+"
-category = "dev"
+version = "4.2.0"
+description = "Backported and Experimental Type Hints for Python 3.7+"
+category = "main"
optional = false
-python-versions = "*"
+python-versions = ">=3.7"
+
+[[package]]
+name = "tzdata"
+version = "2022.1"
+description = "Provider of IANA time zone data"
+category = "main"
+optional = false
+python-versions = ">=2"
[[package]]
name = "tzlocal"
-version = "2.1"
+version = "4.2"
description = "tzinfo object for the local timezone"
category = "main"
optional = false
-python-versions = "*"
+python-versions = ">=3.6"
[package.dependencies]
-pytz = "*"
+"backports.zoneinfo" = {version = "*", markers = "python_version < \"3.9\""}
+pytz-deprecation-shim = "*"
+tzdata = {version = "*", markers = "platform_system == \"Windows\""}
+
+[package.extras]
+devenv = ["black", "pyroma", "pytest-cov", "zest.releaser"]
+test = ["pytest-mock (>=3.3)", "pytest (>=4.3)"]
[[package]]
name = "urllib3"
-version = "1.26.6"
+version = "1.26.9"
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.*, <4"
[package.extras]
-brotli = ["brotlipy (>=0.6.0)"]
+brotli = ["brotlicffi (>=0.8.0)", "brotli (>=1.0.9)", "brotlipy (>=0.6.0)"]
secure = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "certifi", "ipaddress"]
socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"]
@@ -1320,15 +1405,15 @@ vcrpy = "*"
[[package]]
name = "wrapt"
-version = "1.12.1"
+version = "1.14.0"
description = "Module for decorators, wrappers and monkey patching."
category = "dev"
optional = false
-python-versions = "*"
+python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7"
[[package]]
name = "yarl"
-version = "1.6.3"
+version = "1.7.2"
description = "Yet another URL library"
category = "dev"
optional = false
@@ -1341,20 +1426,20 @@ typing-extensions = {version = ">=3.7.4", markers = "python_version < \"3.8\""}
[[package]]
name = "zipp"
-version = "3.5.0"
+version = "3.8.0"
description = "Backport of pathlib-compatible object wrapper for zip files"
category = "main"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.7"
[package.extras]
-docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
-testing = ["pytest (>=4.6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "jaraco.itertools", "func-timeout", "pytest-black (>=0.3.7)", "pytest-mypy"]
+docs = ["sphinx", "jaraco.packaging (>=9)", "rst.linker (>=1.9)"]
+testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "jaraco.itertools", "func-timeout", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)"]
[metadata]
lock-version = "1.1"
-python-versions = "^3.6"
-content-hash = "018805bbda70ac60c04207b701f1acf5bf41ced93eaf6548c2e32ea3a0fe1da2"
+python-versions = "^3.7"
+content-hash = "fd98fe9c81b79e92c54d79fdfee92293dfe9eeef45946a72c726963c8da7264f"
[metadata.files]
adal = [
@@ -1366,24 +1451,24 @@ applicationinsights = [
{file = "applicationinsights-0.11.10.tar.gz", hash = "sha256:0b761f3ef0680acf4731906dfc1807faa6f2a57168ae74592db0084a6099f7b3"},
]
apscheduler = [
- {file = "APScheduler-3.7.0-py2.py3-none-any.whl", hash = "sha256:c06cc796d5bb9eb3c4f77727f6223476eb67749e7eea074d1587550702a7fbe3"},
- {file = "APScheduler-3.7.0.tar.gz", hash = "sha256:1cab7f2521e107d07127b042155b632b7a1cd5e02c34be5a28ff62f77c900c6a"},
+ {file = "APScheduler-3.9.1-py2.py3-none-any.whl", hash = "sha256:ddc25a0ddd899de44d7f451f4375fb971887e65af51e41e5dcf681f59b8b2c9a"},
+ {file = "APScheduler-3.9.1.tar.gz", hash = "sha256:65e6574b6395498d371d045f2a8a7e4f7d50c6ad21ef7313d15b1c7cf20df1e3"},
]
argcomplete = [
- {file = "argcomplete-1.12.3-py2.py3-none-any.whl", hash = "sha256:291f0beca7fd49ce285d2f10e4c1c77e9460cf823eef2de54df0c0fec88b0d81"},
- {file = "argcomplete-1.12.3.tar.gz", hash = "sha256:2c7dbffd8c045ea534921e63b0be6fe65e88599990d8dc408ac8c542b72a5445"},
+ {file = "argcomplete-2.0.0-py2.py3-none-any.whl", hash = "sha256:cffa11ea77999bb0dd27bb25ff6dc142a6796142f68d45b1a26b11f58724561e"},
+ {file = "argcomplete-2.0.0.tar.gz", hash = "sha256:6372ad78c89d662035101418ae253668445b391755cfe94ea52f1b9d22425b20"},
]
attrs = [
- {file = "attrs-21.2.0-py2.py3-none-any.whl", hash = "sha256:149e90d6d8ac20db7a955ad60cf0e6881a3f20d37096140088356da6c716b0b1"},
- {file = "attrs-21.2.0.tar.gz", hash = "sha256:ef6aaac3ca6cd92904cdd0d83f629a15f18053ec84e6432106f7a4d04ae4f5fb"},
+ {file = "attrs-21.4.0-py2.py3-none-any.whl", hash = "sha256:2d27e3784d7a565d36ab851fe94887c5eccd6a463168875832a1be79c82828b4"},
+ {file = "attrs-21.4.0.tar.gz", hash = "sha256:626ba8234211db98e869df76230a137c4c40a12d72445c45d5f5b716f076e2fd"},
]
azure-common = [
- {file = "azure-common-1.1.27.zip", hash = "sha256:9f3f5d991023acbd93050cf53c4e863c6973ded7e236c69e99c8ff5c7bad41ef"},
- {file = "azure_common-1.1.27-py2.py3-none-any.whl", hash = "sha256:426673962740dbe9aab052a4b52df39c07767decd3f25fdc87c9d4c566a04934"},
+ {file = "azure-common-1.1.28.zip", hash = "sha256:4ac0cd3214e36b6a1b6a442686722a5d8cc449603aa833f3f0f40bda836704a3"},
+ {file = "azure_common-1.1.28-py2.py3-none-any.whl", hash = "sha256:5c12d3dcf4ec20599ca6b0d3e09e86e146353d443e7fcc050c9a19c1f9df20ad"},
]
azure-core = [
- {file = "azure-core-1.17.0.zip", hash = "sha256:25407390dde142d3e41ecf78bb18cedda9b7f7a0af558d082dec711c4a334f46"},
- {file = "azure_core-1.17.0-py2.py3-none-any.whl", hash = "sha256:906e031a8241fe0794ec4137aca77a1aeab2ebde5cd6049c377d05cb6b87b691"},
+ {file = "azure-core-1.23.1.zip", hash = "sha256:28a01dfbaf0a6812c4e2a82d1642ea30956a9739f25bc77c9b23b91f4ea68f0f"},
+ {file = "azure_core-1.23.1-py3-none-any.whl", hash = "sha256:c3e8a9a3ec9d89f59b5d5b2f19d19a30d76a5b5c0cee3788ecad3cb72b9bd028"},
]
azure-cosmos = [
{file = "azure-cosmos-3.2.0.tar.gz", hash = "sha256:4f77cc558fecffac04377ba758ac4e23f076dc1c54e2cf2515f85bc15cbde5c6"},
@@ -1398,32 +1483,36 @@ azure-cosmosdb-table = [
{file = "azure_cosmosdb_table-1.0.6-py2.py3-none-any.whl", hash = "sha256:ee525233d6c8c016526593bf28f8a374275cfe204a00c41134b83a1736f7b5f7"},
]
azure-functions = [
- {file = "azure-functions-1.7.2.tar.gz", hash = "sha256:893f4e696d111162b72e86258b85ca6e444c21b5e3d72048d3689079f107b325"},
- {file = "azure_functions-1.7.2-py3-none-any.whl", hash = "sha256:51b2949faa11bc2875fdbc0cc073ac9803dd20d0807f46f94e0114924b31d7c1"},
+ {file = "azure-functions-1.10.1.tar.gz", hash = "sha256:2b9f86d29bcca57a3637e4e76c4892ac639c74ac2741912af6107d92a54aa849"},
+ {file = "azure_functions-1.10.1-py3-none-any.whl", hash = "sha256:52359509482568dff7befaedb21d8baa793410e9f1c117f897199e2746c10e8b"},
]
azure-graphrbac = [
{file = "azure-graphrbac-0.61.1.zip", hash = "sha256:53e98ae2ca7c19b349e9e9bb1b6a824aeae8dcfcbe17190d20fe69c0f185b2e2"},
{file = "azure_graphrbac-0.61.1-py2.py3-none-any.whl", hash = "sha256:7b4e0f05676acc912f2b33c71c328d9fb2e4dc8e70ebadc9d3de8ab08bf0b175"},
]
azure-identity = [
- {file = "azure-identity-1.6.0.zip", hash = "sha256:2e70b00874e4f288e37804bc06bfaf216de8565c759594bf79cccfbf9ca2c78a"},
- {file = "azure_identity-1.6.0-py2.py3-none-any.whl", hash = "sha256:87f63bf1f3f10b67a3e6689f06d0cf6cacdcd8e375c6da12ea71c111cfe58457"},
+ {file = "azure-identity-1.9.0.zip", hash = "sha256:0854d19da4c5644641814dc4f951c42e01400b5792f09dfb6bffa726d8b9160d"},
+ {file = "azure_identity-1.9.0-py3-none-any.whl", hash = "sha256:2e75bbf0a72309b8f95f6769214b90bf271f3662d28d962bcddf4d2406157b51"},
]
azure-keyvault = [
- {file = "azure-keyvault-4.1.0.zip", hash = "sha256:69002a546921a8290eb54d9a3805cfc515c321bc1d4c0bfcfb463620245eca40"},
- {file = "azure_keyvault-4.1.0-py2.py3-none-any.whl", hash = "sha256:5fa0438f7f6e2e79543f2724957acf77c3c187e558f4d030a4f9b7493b9f946d"},
+ {file = "azure-keyvault-4.2.0.zip", hash = "sha256:731add108a3e29ab4fd501a3c477256c286c34d0996b383fb6a3945462933761"},
+ {file = "azure_keyvault-4.2.0-py2.py3-none-any.whl", hash = "sha256:16b29039244cbe8b940c98a0d795626d76d2a579cb9b8c559983ad208082c0de"},
]
azure-keyvault-certificates = [
- {file = "azure-keyvault-certificates-4.3.0.zip", hash = "sha256:4e0a9bae9fd4c222617fbce6b31f97e2e0622774479de3c387239cbfbb828d87"},
- {file = "azure_keyvault_certificates-4.3.0-py2.py3-none-any.whl", hash = "sha256:c332e2d35d25d52e8f8601c0a213a693b2bd664e1429e952c4da6e40e30bbe6f"},
+ {file = "azure-keyvault-certificates-4.4.0.zip", hash = "sha256:0c0154f3801b2384dd7fa4ed60366f4b0ae9111c5ffcca878d05368a004b87cf"},
+ {file = "azure_keyvault_certificates-4.4.0-py3-none-any.whl", hash = "sha256:ef122c36cdc3e0d4612dc5c5b1beebb7a09144a71d5c9597b0ea677f62afde1a"},
]
azure-keyvault-keys = [
- {file = "azure-keyvault-keys-4.4.0.zip", hash = "sha256:7792ad0d5e63ad9eafa68bdce5de91b3ffcc7ca7a6afdc576785e6a2793caed0"},
- {file = "azure_keyvault_keys-4.4.0-py2.py3-none-any.whl", hash = "sha256:e12c5554f7f0d5547e52cc2e725e94825fb40db1dbde7c39ec8a7f1fd150c46d"},
+ {file = "azure-keyvault-keys-4.5.0.zip", hash = "sha256:c75021880457657724cb703e0c95e80abbe4aaca2796481daddafa7acfd5637b"},
+ {file = "azure_keyvault_keys-4.5.0-py3-none-any.whl", hash = "sha256:0687aa41e6268a529f0ae56d6cfc5cc5562c54fbb7001d2554b54ceaa5506016"},
]
azure-keyvault-secrets = [
- {file = "azure-keyvault-secrets-4.3.0.zip", hash = "sha256:26279ba3a6c727deba1fb61f549496867baddffbf062bd579d6fd2bc04e95276"},
- {file = "azure_keyvault_secrets-4.3.0-py2.py3-none-any.whl", hash = "sha256:fa4d780565520534939a4b1b4e87908f0c88b4423f6005c7a381ac01d6b32233"},
+ {file = "azure-keyvault-secrets-4.4.0.zip", hash = "sha256:c0b732db9de855d9c39766067cf43e2f66cdbb28b859f03c787e33924cca82d7"},
+ {file = "azure_keyvault_secrets-4.4.0-py3-none-any.whl", hash = "sha256:7143c6e83398a7aba048e44413f7f26b6ce43505afb3e3c89ba62b25f06dd729"},
+]
+azure-mgmt-advisor = [
+ {file = "azure-mgmt-advisor-9.0.0.zip", hash = "sha256:fc408b37315fe84781b519124f8cb1b8ac10b2f4241e439d0d3e25fd6ca18d7b"},
+ {file = "azure_mgmt_advisor-9.0.0-py2.py3-none-any.whl", hash = "sha256:d4281663fb0ecb7e1cd2a4bf3dd84a7d349f55377537cf77ef001c8c387a98f5"},
]
azure-mgmt-apimanagement = [
{file = "azure-mgmt-apimanagement-1.0.0.zip", hash = "sha256:3ad7e2c3d20dd0141f9e2c0ae923121f7cbe7333bb314850e6f8b606636e3589"},
@@ -1502,8 +1591,8 @@ azure-mgmt-eventhub = [
{file = "azure_mgmt_eventhub-8.0.0-py2.py3-none-any.whl", hash = "sha256:ce46f5e583e0222a394a50cea804c819b8199d45a56a3010d0f8cd4613fc45c3"},
]
azure-mgmt-frontdoor = [
- {file = "azure-mgmt-frontdoor-1.0.0.zip", hash = "sha256:170bdddb18b33abe749540987837087c6de303dd68586afadf197e6de8deb57a"},
- {file = "azure_mgmt_frontdoor-1.0.0-py2.py3-none-any.whl", hash = "sha256:28f6a9fc00036fc09da6e312bfb4c2ab221b47648e46c69cedc012bf807c8ed6"},
+ {file = "azure-mgmt-frontdoor-1.0.1.zip", hash = "sha256:9c95d0fc1a723b09b26cd52a138701c6ae71c59139ea5aa01d24ca65320722e5"},
+ {file = "azure_mgmt_frontdoor-1.0.1-py3-none-any.whl", hash = "sha256:16c7e5d50fa276a77d0cf9eb773ded80072c69763b328b88528bd744a4a42150"},
]
azure-mgmt-hdinsight = [
{file = "azure-mgmt-hdinsight-7.0.0.zip", hash = "sha256:d0070817ee2be611d45af91eabc5665dd53f024eaa7a55e490ace4f71a55c733"},
@@ -1561,6 +1650,10 @@ azure-mgmt-search = [
{file = "azure-mgmt-search-8.0.0.zip", hash = "sha256:a96d50c88507233a293e757202deead980c67808f432b8e897c4df1ca088da7e"},
{file = "azure_mgmt_search-8.0.0-py2.py3-none-any.whl", hash = "sha256:cfb9687d5c947a3287564980ac933bc2a566f212be73fb323e3278636b8e9751"},
]
+azure-mgmt-security = [
+ {file = "azure-mgmt-security-1.0.0.zip", hash = "sha256:ae1cff598dfe80e93406e524c55c3f2cbffced9f9b7a5577e3375008a4c3bcad"},
+ {file = "azure_mgmt_security-1.0.0-py2.py3-none-any.whl", hash = "sha256:1f7d98e6c3c6623619bb57ff71105e6e8f2f2a82dc820028246a5bea5a915d38"},
+]
azure-mgmt-servicefabric = [
{file = "azure-mgmt-servicefabric-1.0.0.zip", hash = "sha256:de35e117912832c1a9e93109a8d24cab94f55703a9087b2eb1c5b0655b3b1913"},
{file = "azure_mgmt_servicefabric-1.0.0-py2.py3-none-any.whl", hash = "sha256:774e2e7c1c7ea237fa17ba74d709f374da6edec40517c63de10c1694fefb0628"},
@@ -1591,8 +1684,8 @@ azure-nspkg = [
{file = "azure_nspkg-3.0.2-py3-none-any.whl", hash = "sha256:31a060caca00ed1ebd369fc7fe01a56768c927e404ebc92268f4d9d636435e28"},
]
azure-storage-blob = [
- {file = "azure-storage-blob-12.8.1.zip", hash = "sha256:eb37b50ddfb6e558b29f6c8c03b0666514e55d6170bf4624e7261a3af93c6401"},
- {file = "azure_storage_blob-12.8.1-py2.py3-none-any.whl", hash = "sha256:e74c2c49fd04b80225f5b9734f1dbd417d89f280abfedccced3ac21509e1659d"},
+ {file = "azure-storage-blob-12.11.0.zip", hash = "sha256:49535b3190bb69d0d9ff7a383246b14da4d2b1bdff60cae5f9173920c67ca7ee"},
+ {file = "azure_storage_blob-12.11.0-py3-none-any.whl", hash = "sha256:f3dfa605aefb453e7489328b76811a937a411761d7a1613a58c3975c556ec778"},
]
azure-storage-common = [
{file = "azure-storage-common-2.1.0.tar.gz", hash = "sha256:ccedef5c67227bc4d6670ffd37cec18fb529a1b7c3a5e53e4096eb0cf23dc73f"},
@@ -1603,130 +1696,169 @@ azure-storage-file = [
{file = "azure_storage_file-2.1.0-py2.py3-none-any.whl", hash = "sha256:07e01b6b1ccbac97946a3abab773fdc4904965577c3afa0151e786c463bd7260"},
]
azure-storage-file-share = [
- {file = "azure-storage-file-share-12.5.0.zip", hash = "sha256:ed82e9bf8d25d62e50996604fce701cec6a39ec0ceba6efbf8790f7f8b7746a8"},
- {file = "azure_storage_file_share-12.5.0-py2.py3-none-any.whl", hash = "sha256:c92729dc61defceae1b4919f0f72a7134d2539f46d020934b067d79cebbe49f6"},
+ {file = "azure-storage-file-share-12.7.0.zip", hash = "sha256:91836e82258d957120af228bc2bcf2b5c6bf5bedb8f3546aa9409b7495aba832"},
+ {file = "azure_storage_file_share-12.7.0-py3-none-any.whl", hash = "sha256:7dc8111a1a12e26356443639732f1424787883ab42913656cebed46a729cc654"},
]
azure-storage-queue = [
- {file = "azure-storage-queue-12.1.6.zip", hash = "sha256:79e4ef589db6b5272f052309d5525960b20fffbfe61958a0007dc4e7a40b68e2"},
- {file = "azure_storage_queue-12.1.6-py2.py3-none-any.whl", hash = "sha256:54435c14278118275e4fc17989a1005b02d5ccb662b112ac8699eab4e5a8fc89"},
+ {file = "azure-storage-queue-12.2.0.zip", hash = "sha256:6c8b5d42b2fdbd896ef4117ac398659c8603aa3d3c05ed7164c8cfa54eab9ed3"},
+ {file = "azure_storage_queue-12.2.0-py3-none-any.whl", hash = "sha256:509864e6392cc3afd545e8211f0a06148b603456e71a70557ef9a489c6434899"},
+]
+"backports.zoneinfo" = [
+ {file = "backports.zoneinfo-0.2.1-cp36-cp36m-macosx_10_14_x86_64.whl", hash = "sha256:da6013fd84a690242c310d77ddb8441a559e9cb3d3d59ebac9aca1a57b2e18bc"},
+ {file = "backports.zoneinfo-0.2.1-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:89a48c0d158a3cc3f654da4c2de1ceba85263fafb861b98b59040a5086259722"},
+ {file = "backports.zoneinfo-0.2.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:1c5742112073a563c81f786e77514969acb58649bcdf6cdf0b4ed31a348d4546"},
+ {file = "backports.zoneinfo-0.2.1-cp36-cp36m-win32.whl", hash = "sha256:e8236383a20872c0cdf5a62b554b27538db7fa1bbec52429d8d106effbaeca08"},
+ {file = "backports.zoneinfo-0.2.1-cp36-cp36m-win_amd64.whl", hash = "sha256:8439c030a11780786a2002261569bdf362264f605dfa4d65090b64b05c9f79a7"},
+ {file = "backports.zoneinfo-0.2.1-cp37-cp37m-macosx_10_14_x86_64.whl", hash = "sha256:f04e857b59d9d1ccc39ce2da1021d196e47234873820cbeaad210724b1ee28ac"},
+ {file = "backports.zoneinfo-0.2.1-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:17746bd546106fa389c51dbea67c8b7c8f0d14b5526a579ca6ccf5ed72c526cf"},
+ {file = "backports.zoneinfo-0.2.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:5c144945a7752ca544b4b78c8c41544cdfaf9786f25fe5ffb10e838e19a27570"},
+ {file = "backports.zoneinfo-0.2.1-cp37-cp37m-win32.whl", hash = "sha256:e55b384612d93be96506932a786bbcde5a2db7a9e6a4bb4bffe8b733f5b9036b"},
+ {file = "backports.zoneinfo-0.2.1-cp37-cp37m-win_amd64.whl", hash = "sha256:a76b38c52400b762e48131494ba26be363491ac4f9a04c1b7e92483d169f6582"},
+ {file = "backports.zoneinfo-0.2.1-cp38-cp38-macosx_10_14_x86_64.whl", hash = "sha256:8961c0f32cd0336fb8e8ead11a1f8cd99ec07145ec2931122faaac1c8f7fd987"},
+ {file = "backports.zoneinfo-0.2.1-cp38-cp38-manylinux1_i686.whl", hash = "sha256:e81b76cace8eda1fca50e345242ba977f9be6ae3945af8d46326d776b4cf78d1"},
+ {file = "backports.zoneinfo-0.2.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:7b0a64cda4145548fed9efc10322770f929b944ce5cee6c0dfe0c87bf4c0c8c9"},
+ {file = "backports.zoneinfo-0.2.1-cp38-cp38-win32.whl", hash = "sha256:1b13e654a55cd45672cb54ed12148cd33628f672548f373963b0bff67b217328"},
+ {file = "backports.zoneinfo-0.2.1-cp38-cp38-win_amd64.whl", hash = "sha256:4a0f800587060bf8880f954dbef70de6c11bbe59c673c3d818921f042f9954a6"},
+ {file = "backports.zoneinfo-0.2.1.tar.gz", hash = "sha256:fadbfe37f74051d024037f223b8e001611eac868b5c5b06144ef4d8b799862f2"},
]
boto3 = [
- {file = "boto3-1.18.21-py3-none-any.whl", hash = "sha256:59b6e8e79b2114e21388288a06a004f2a9378b1e0fc58466a35da8fb74fe2dd8"},
- {file = "boto3-1.18.21.tar.gz", hash = "sha256:00748c760dc30be61c6db4b092718f6a9f8d27c767da0e232695a65adb75cde8"},
+ {file = "boto3-1.21.42-py3-none-any.whl", hash = "sha256:895fb88c69be78f82cfee58a79c97a3ad8d4a2a1209041a411d7d6b9fc5393e4"},
+ {file = "boto3-1.21.42.tar.gz", hash = "sha256:bcb541175a7d190dd919a0af0e807ee6e9d26f135551e741b10d94343f2d7588"},
]
botocore = [
- {file = "botocore-1.21.21-py3-none-any.whl", hash = "sha256:fa5ac13829d24fcdd385e82c3b6d78e22d93f427cca8dac38158cae84a8cc2f5"},
- {file = "botocore-1.21.21.tar.gz", hash = "sha256:12cfe74b0a5c44afb34bdd86c1f8ad74bc2ad9ec168eaed9040ef70cb3db944f"},
+ {file = "botocore-1.24.42-py3-none-any.whl", hash = "sha256:14aee41c8bf59d2dd2d89e8751fa37d3c95dcb92707d1966aa02697e914c1417"},
+ {file = "botocore-1.24.42.tar.gz", hash = "sha256:a2baa9484bbaee96ef312c049b8e360badcab58329e487b57567644a571b5f4a"},
]
c7n = []
certifi = [
- {file = "certifi-2021.5.30-py2.py3-none-any.whl", hash = "sha256:50b1e4f8446b06f41be7dd6338db18e0990601dce795c2b1686458aa7e8fa7d8"},
- {file = "certifi-2021.5.30.tar.gz", hash = "sha256:2bbf76fd432960138b3ef6dda3dde0544f27cbf8546c458e60baf371917ba9ee"},
+ {file = "certifi-2021.10.8-py2.py3-none-any.whl", hash = "sha256:d62a0163eb4c2344ac042ab2bdf75399a71a2d8c7d47eac2e2ee91b9d6339569"},
+ {file = "certifi-2021.10.8.tar.gz", hash = "sha256:78884e7c1d4b00ce3cea67b44566851c4343c120abd683433ce934a68ea58872"},
]
cffi = [
- {file = "cffi-1.14.6-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:22b9c3c320171c108e903d61a3723b51e37aaa8c81255b5e7ce102775bd01e2c"},
- {file = "cffi-1.14.6-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:f0c5d1acbfca6ebdd6b1e3eded8d261affb6ddcf2186205518f1428b8569bb99"},
- {file = "cffi-1.14.6-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:99f27fefe34c37ba9875f224a8f36e31d744d8083e00f520f133cab79ad5e819"},
- {file = "cffi-1.14.6-cp27-cp27m-win32.whl", hash = "sha256:55af55e32ae468e9946f741a5d51f9896da6b9bf0bbdd326843fec05c730eb20"},
- {file = "cffi-1.14.6-cp27-cp27m-win_amd64.whl", hash = "sha256:7bcac9a2b4fdbed2c16fa5681356d7121ecabf041f18d97ed5b8e0dd38a80224"},
- {file = "cffi-1.14.6-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:ed38b924ce794e505647f7c331b22a693bee1538fdf46b0222c4717b42f744e7"},
- {file = "cffi-1.14.6-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:e22dcb48709fc51a7b58a927391b23ab37eb3737a98ac4338e2448bef8559b33"},
- {file = "cffi-1.14.6-cp35-cp35m-macosx_10_9_x86_64.whl", hash = "sha256:aedb15f0a5a5949ecb129a82b72b19df97bbbca024081ed2ef88bd5c0a610534"},
- {file = "cffi-1.14.6-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:48916e459c54c4a70e52745639f1db524542140433599e13911b2f329834276a"},
- {file = "cffi-1.14.6-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:f627688813d0a4140153ff532537fbe4afea5a3dffce1f9deb7f91f848a832b5"},
- {file = "cffi-1.14.6-cp35-cp35m-win32.whl", hash = "sha256:f0010c6f9d1a4011e429109fda55a225921e3206e7f62a0c22a35344bfd13cca"},
- {file = "cffi-1.14.6-cp35-cp35m-win_amd64.whl", hash = "sha256:57e555a9feb4a8460415f1aac331a2dc833b1115284f7ded7278b54afc5bd218"},
- {file = "cffi-1.14.6-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:e8c6a99be100371dbb046880e7a282152aa5d6127ae01783e37662ef73850d8f"},
- {file = "cffi-1.14.6-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:19ca0dbdeda3b2615421d54bef8985f72af6e0c47082a8d26122adac81a95872"},
- {file = "cffi-1.14.6-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:d950695ae4381ecd856bcaf2b1e866720e4ab9a1498cba61c602e56630ca7195"},
- {file = "cffi-1.14.6-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e9dc245e3ac69c92ee4c167fbdd7428ec1956d4e754223124991ef29eb57a09d"},
- {file = "cffi-1.14.6-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a8661b2ce9694ca01c529bfa204dbb144b275a31685a075ce123f12331be790b"},
- {file = "cffi-1.14.6-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b315d709717a99f4b27b59b021e6207c64620790ca3e0bde636a6c7f14618abb"},
- {file = "cffi-1.14.6-cp36-cp36m-win32.whl", hash = "sha256:80b06212075346b5546b0417b9f2bf467fea3bfe7352f781ffc05a8ab24ba14a"},
- {file = "cffi-1.14.6-cp36-cp36m-win_amd64.whl", hash = "sha256:a9da7010cec5a12193d1af9872a00888f396aba3dc79186604a09ea3ee7c029e"},
- {file = "cffi-1.14.6-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:4373612d59c404baeb7cbd788a18b2b2a8331abcc84c3ba40051fcd18b17a4d5"},
- {file = "cffi-1.14.6-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:f10afb1004f102c7868ebfe91c28f4a712227fe4cb24974350ace1f90e1febbf"},
- {file = "cffi-1.14.6-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:fd4305f86f53dfd8cd3522269ed7fc34856a8ee3709a5e28b2836b2db9d4cd69"},
- {file = "cffi-1.14.6-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6d6169cb3c6c2ad50db5b868db6491a790300ade1ed5d1da29289d73bbe40b56"},
- {file = "cffi-1.14.6-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5d4b68e216fc65e9fe4f524c177b54964af043dde734807586cf5435af84045c"},
- {file = "cffi-1.14.6-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:33791e8a2dc2953f28b8d8d300dde42dd929ac28f974c4b4c6272cb2955cb762"},
- {file = "cffi-1.14.6-cp37-cp37m-win32.whl", hash = "sha256:0c0591bee64e438883b0c92a7bed78f6290d40bf02e54c5bf0978eaf36061771"},
- {file = "cffi-1.14.6-cp37-cp37m-win_amd64.whl", hash = "sha256:8eb687582ed7cd8c4bdbff3df6c0da443eb89c3c72e6e5dcdd9c81729712791a"},
- {file = "cffi-1.14.6-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ba6f2b3f452e150945d58f4badd92310449876c4c954836cfb1803bdd7b422f0"},
- {file = "cffi-1.14.6-cp38-cp38-manylinux1_i686.whl", hash = "sha256:64fda793737bc4037521d4899be780534b9aea552eb673b9833b01f945904c2e"},
- {file = "cffi-1.14.6-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:9f3e33c28cd39d1b655ed1ba7247133b6f7fc16fa16887b120c0c670e35ce346"},
- {file = "cffi-1.14.6-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:26bb2549b72708c833f5abe62b756176022a7b9a7f689b571e74c8478ead51dc"},
- {file = "cffi-1.14.6-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:eb687a11f0a7a1839719edd80f41e459cc5366857ecbed383ff376c4e3cc6afd"},
- {file = "cffi-1.14.6-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d2ad4d668a5c0645d281dcd17aff2be3212bc109b33814bbb15c4939f44181cc"},
- {file = "cffi-1.14.6-cp38-cp38-win32.whl", hash = "sha256:487d63e1454627c8e47dd230025780e91869cfba4c753a74fda196a1f6ad6548"},
- {file = "cffi-1.14.6-cp38-cp38-win_amd64.whl", hash = "sha256:c33d18eb6e6bc36f09d793c0dc58b0211fccc6ae5149b808da4a62660678b156"},
- {file = "cffi-1.14.6-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:06c54a68935738d206570b20da5ef2b6b6d92b38ef3ec45c5422c0ebaf338d4d"},
- {file = "cffi-1.14.6-cp39-cp39-manylinux1_i686.whl", hash = "sha256:f174135f5609428cc6e1b9090f9268f5c8935fddb1b25ccb8255a2d50de6789e"},
- {file = "cffi-1.14.6-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:f3ebe6e73c319340830a9b2825d32eb6d8475c1dac020b4f0aa774ee3b898d1c"},
- {file = "cffi-1.14.6-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3c8d896becff2fa653dc4438b54a5a25a971d1f4110b32bd3068db3722c80202"},
- {file = "cffi-1.14.6-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4922cd707b25e623b902c86188aca466d3620892db76c0bdd7b99a3d5e61d35f"},
- {file = "cffi-1.14.6-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c9e005e9bd57bc987764c32a1bee4364c44fdc11a3cc20a40b93b444984f2b87"},
- {file = "cffi-1.14.6-cp39-cp39-win32.whl", hash = "sha256:eb9e2a346c5238a30a746893f23a9535e700f8192a68c07c0258e7ece6ff3728"},
- {file = "cffi-1.14.6-cp39-cp39-win_amd64.whl", hash = "sha256:818014c754cd3dba7229c0f5884396264d51ffb87ec86e927ef0be140bfdb0d2"},
- {file = "cffi-1.14.6.tar.gz", hash = "sha256:c9a875ce9d7fe32887784274dd533c57909b7b1dcadcc128a2ac21331a9765dd"},
+ {file = "cffi-1.15.0-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:c2502a1a03b6312837279c8c1bd3ebedf6c12c4228ddbad40912d671ccc8a962"},
+ {file = "cffi-1.15.0-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:23cfe892bd5dd8941608f93348c0737e369e51c100d03718f108bf1add7bd6d0"},
+ {file = "cffi-1.15.0-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:41d45de54cd277a7878919867c0f08b0cf817605e4eb94093e7516505d3c8d14"},
+ {file = "cffi-1.15.0-cp27-cp27m-win32.whl", hash = "sha256:4a306fa632e8f0928956a41fa8e1d6243c71e7eb59ffbd165fc0b41e316b2474"},
+ {file = "cffi-1.15.0-cp27-cp27m-win_amd64.whl", hash = "sha256:e7022a66d9b55e93e1a845d8c9eba2a1bebd4966cd8bfc25d9cd07d515b33fa6"},
+ {file = "cffi-1.15.0-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:14cd121ea63ecdae71efa69c15c5543a4b5fbcd0bbe2aad864baca0063cecf27"},
+ {file = "cffi-1.15.0-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:d4d692a89c5cf08a8557fdeb329b82e7bf609aadfaed6c0d79f5a449a3c7c023"},
+ {file = "cffi-1.15.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0104fb5ae2391d46a4cb082abdd5c69ea4eab79d8d44eaaf79f1b1fd806ee4c2"},
+ {file = "cffi-1.15.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:91ec59c33514b7c7559a6acda53bbfe1b283949c34fe7440bcf917f96ac0723e"},
+ {file = "cffi-1.15.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:f5c7150ad32ba43a07c4479f40241756145a1f03b43480e058cfd862bf5041c7"},
+ {file = "cffi-1.15.0-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:00c878c90cb53ccfaae6b8bc18ad05d2036553e6d9d1d9dbcf323bbe83854ca3"},
+ {file = "cffi-1.15.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:abb9a20a72ac4e0fdb50dae135ba5e77880518e742077ced47eb1499e29a443c"},
+ {file = "cffi-1.15.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a5263e363c27b653a90078143adb3d076c1a748ec9ecc78ea2fb916f9b861962"},
+ {file = "cffi-1.15.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f54a64f8b0c8ff0b64d18aa76675262e1700f3995182267998c31ae974fbc382"},
+ {file = "cffi-1.15.0-cp310-cp310-win32.whl", hash = "sha256:c21c9e3896c23007803a875460fb786118f0cdd4434359577ea25eb556e34c55"},
+ {file = "cffi-1.15.0-cp310-cp310-win_amd64.whl", hash = "sha256:5e069f72d497312b24fcc02073d70cb989045d1c91cbd53979366077959933e0"},
+ {file = "cffi-1.15.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:64d4ec9f448dfe041705426000cc13e34e6e5bb13736e9fd62e34a0b0c41566e"},
+ {file = "cffi-1.15.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2756c88cbb94231c7a147402476be2c4df2f6078099a6f4a480d239a8817ae39"},
+ {file = "cffi-1.15.0-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3b96a311ac60a3f6be21d2572e46ce67f09abcf4d09344c49274eb9e0bf345fc"},
+ {file = "cffi-1.15.0-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:75e4024375654472cc27e91cbe9eaa08567f7fbdf822638be2814ce059f58032"},
+ {file = "cffi-1.15.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:59888172256cac5629e60e72e86598027aca6bf01fa2465bdb676d37636573e8"},
+ {file = "cffi-1.15.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:27c219baf94952ae9d50ec19651a687b826792055353d07648a5695413e0c605"},
+ {file = "cffi-1.15.0-cp36-cp36m-win32.whl", hash = "sha256:4958391dbd6249d7ad855b9ca88fae690783a6be9e86df65865058ed81fc860e"},
+ {file = "cffi-1.15.0-cp36-cp36m-win_amd64.whl", hash = "sha256:f6f824dc3bce0edab5f427efcfb1d63ee75b6fcb7282900ccaf925be84efb0fc"},
+ {file = "cffi-1.15.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:06c48159c1abed75c2e721b1715c379fa3200c7784271b3c46df01383b593636"},
+ {file = "cffi-1.15.0-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:c2051981a968d7de9dd2d7b87bcb9c939c74a34626a6e2f8181455dd49ed69e4"},
+ {file = "cffi-1.15.0-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:fd8a250edc26254fe5b33be00402e6d287f562b6a5b2152dec302fa15bb3e997"},
+ {file = "cffi-1.15.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:91d77d2a782be4274da750752bb1650a97bfd8f291022b379bb8e01c66b4e96b"},
+ {file = "cffi-1.15.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:45db3a33139e9c8f7c09234b5784a5e33d31fd6907800b316decad50af323ff2"},
+ {file = "cffi-1.15.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:263cc3d821c4ab2213cbe8cd8b355a7f72a8324577dc865ef98487c1aeee2bc7"},
+ {file = "cffi-1.15.0-cp37-cp37m-win32.whl", hash = "sha256:17771976e82e9f94976180f76468546834d22a7cc404b17c22df2a2c81db0c66"},
+ {file = "cffi-1.15.0-cp37-cp37m-win_amd64.whl", hash = "sha256:3415c89f9204ee60cd09b235810be700e993e343a408693e80ce7f6a40108029"},
+ {file = "cffi-1.15.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:4238e6dab5d6a8ba812de994bbb0a79bddbdf80994e4ce802b6f6f3142fcc880"},
+ {file = "cffi-1.15.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0808014eb713677ec1292301ea4c81ad277b6cdf2fdd90fd540af98c0b101d20"},
+ {file = "cffi-1.15.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:57e9ac9ccc3101fac9d6014fba037473e4358ef4e89f8e181f8951a2c0162024"},
+ {file = "cffi-1.15.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b6c2ea03845c9f501ed1313e78de148cd3f6cad741a75d43a29b43da27f2e1e"},
+ {file = "cffi-1.15.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:10dffb601ccfb65262a27233ac273d552ddc4d8ae1bf93b21c94b8511bffe728"},
+ {file = "cffi-1.15.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:786902fb9ba7433aae840e0ed609f45c7bcd4e225ebb9c753aa39725bb3e6ad6"},
+ {file = "cffi-1.15.0-cp38-cp38-win32.whl", hash = "sha256:da5db4e883f1ce37f55c667e5c0de439df76ac4cb55964655906306918e7363c"},
+ {file = "cffi-1.15.0-cp38-cp38-win_amd64.whl", hash = "sha256:181dee03b1170ff1969489acf1c26533710231c58f95534e3edac87fff06c443"},
+ {file = "cffi-1.15.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:45e8636704eacc432a206ac7345a5d3d2c62d95a507ec70d62f23cd91770482a"},
+ {file = "cffi-1.15.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:31fb708d9d7c3f49a60f04cf5b119aeefe5644daba1cd2a0fe389b674fd1de37"},
+ {file = "cffi-1.15.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:6dc2737a3674b3e344847c8686cf29e500584ccad76204efea14f451d4cc669a"},
+ {file = "cffi-1.15.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:74fdfdbfdc48d3f47148976f49fab3251e550a8720bebc99bf1483f5bfb5db3e"},
+ {file = "cffi-1.15.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ffaa5c925128e29efbde7301d8ecaf35c8c60ffbcd6a1ffd3a552177c8e5e796"},
+ {file = "cffi-1.15.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3f7d084648d77af029acb79a0ff49a0ad7e9d09057a9bf46596dac9514dc07df"},
+ {file = "cffi-1.15.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ef1f279350da2c586a69d32fc8733092fd32cc8ac95139a00377841f59a3f8d8"},
+ {file = "cffi-1.15.0-cp39-cp39-win32.whl", hash = "sha256:2a23af14f408d53d5e6cd4e3d9a24ff9e05906ad574822a10563efcef137979a"},
+ {file = "cffi-1.15.0-cp39-cp39-win_amd64.whl", hash = "sha256:3773c4d81e6e818df2efbc7dd77325ca0dcb688116050fb2b3011218eda36139"},
+ {file = "cffi-1.15.0.tar.gz", hash = "sha256:920f0d66a896c2d99f0adbb391f990a84091179542c205fa53ce5787aff87954"},
]
charset-normalizer = [
- {file = "charset-normalizer-2.0.4.tar.gz", hash = "sha256:f23667ebe1084be45f6ae0538e4a5a865206544097e4e8bbcacf42cd02a348f3"},
- {file = "charset_normalizer-2.0.4-py3-none-any.whl", hash = "sha256:0c8911edd15d19223366a194a513099a302055a962bca2cec0f54b8b63175d8b"},
+ {file = "charset-normalizer-2.0.12.tar.gz", hash = "sha256:2857e29ff0d34db842cd7ca3230549d1a697f96ee6d3fb071cfa6c7393832597"},
+ {file = "charset_normalizer-2.0.12-py3-none-any.whl", hash = "sha256:6881edbebdb17b39b4eaaa821b438bf6eddffb4468cf344f09f89def34a8b1df"},
]
click = [
- {file = "click-7.1.2-py2.py3-none-any.whl", hash = "sha256:dacca89f4bfadd5de3d7489b7c8a566eee0d3676333fbb50030263894c38c0dc"},
- {file = "click-7.1.2.tar.gz", hash = "sha256:d2b5255c7c6349bc1bd1e59e08cd12acbbd63ce649f2588755783aa94dfb6b1a"},
+ {file = "click-8.1.2-py3-none-any.whl", hash = "sha256:24e1a4a9ec5bf6299411369b208c1df2188d9eb8d916302fe6bf03faed227f1e"},
+ {file = "click-8.1.2.tar.gz", hash = "sha256:479707fe14d9ec9a0757618b7a100a0ae4c4e236fac5b7f80ca68028141a1a72"},
+]
+colorama = [
+ {file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"},
+ {file = "colorama-0.4.4.tar.gz", hash = "sha256:5941b2b48a20143d2267e95b1c2a7603ce057ee39fd88e7329b0c292aa16869b"},
]
cryptography = [
- {file = "cryptography-3.4.7-cp36-abi3-macosx_10_10_x86_64.whl", hash = "sha256:3d8427734c781ea5f1b41d6589c293089704d4759e34597dce91014ac125aad1"},
- {file = "cryptography-3.4.7-cp36-abi3-macosx_11_0_arm64.whl", hash = "sha256:8e56e16617872b0957d1c9742a3f94b43533447fd78321514abbe7db216aa250"},
- {file = "cryptography-3.4.7-cp36-abi3-manylinux2010_x86_64.whl", hash = "sha256:37340614f8a5d2fb9aeea67fd159bfe4f5f4ed535b1090ce8ec428b2f15a11f2"},
- {file = "cryptography-3.4.7-cp36-abi3-manylinux2014_aarch64.whl", hash = "sha256:240f5c21aef0b73f40bb9f78d2caff73186700bf1bc6b94285699aff98cc16c6"},
- {file = "cryptography-3.4.7-cp36-abi3-manylinux2014_x86_64.whl", hash = "sha256:1e056c28420c072c5e3cb36e2b23ee55e260cb04eee08f702e0edfec3fb51959"},
- {file = "cryptography-3.4.7-cp36-abi3-win32.whl", hash = "sha256:0f1212a66329c80d68aeeb39b8a16d54ef57071bf22ff4e521657b27372e327d"},
- {file = "cryptography-3.4.7-cp36-abi3-win_amd64.whl", hash = "sha256:de4e5f7f68220d92b7637fc99847475b59154b7a1b3868fb7385337af54ac9ca"},
- {file = "cryptography-3.4.7-pp36-pypy36_pp73-manylinux2010_x86_64.whl", hash = "sha256:26965837447f9c82f1855e0bc8bc4fb910240b6e0d16a664bb722df3b5b06873"},
- {file = "cryptography-3.4.7-pp36-pypy36_pp73-manylinux2014_x86_64.whl", hash = "sha256:eb8cc2afe8b05acbd84a43905832ec78e7b3873fb124ca190f574dca7389a87d"},
- {file = "cryptography-3.4.7-pp37-pypy37_pp73-manylinux2010_x86_64.whl", hash = "sha256:7ec5d3b029f5fa2b179325908b9cd93db28ab7b85bb6c1db56b10e0b54235177"},
- {file = "cryptography-3.4.7-pp37-pypy37_pp73-manylinux2014_x86_64.whl", hash = "sha256:ee77aa129f481be46f8d92a1a7db57269a2f23052d5f2433b4621bb457081cc9"},
- {file = "cryptography-3.4.7.tar.gz", hash = "sha256:3d10de8116d25649631977cb37da6cbdd2d6fa0e0281d014a5b7d337255ca713"},
+ {file = "cryptography-36.0.2-cp36-abi3-macosx_10_10_universal2.whl", hash = "sha256:4e2dddd38a5ba733be6a025a1475a9f45e4e41139d1321f412c6b360b19070b6"},
+ {file = "cryptography-36.0.2-cp36-abi3-macosx_10_10_x86_64.whl", hash = "sha256:4881d09298cd0b669bb15b9cfe6166f16fc1277b4ed0d04a22f3d6430cb30f1d"},
+ {file = "cryptography-36.0.2-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ea634401ca02367c1567f012317502ef3437522e2fc44a3ea1844de028fa4b84"},
+ {file = "cryptography-36.0.2-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:7be666cc4599b415f320839e36367b273db8501127b38316f3b9f22f17a0b815"},
+ {file = "cryptography-36.0.2-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8241cac0aae90b82d6b5c443b853723bcc66963970c67e56e71a2609dc4b5eaf"},
+ {file = "cryptography-36.0.2-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7b2d54e787a884ffc6e187262823b6feb06c338084bbe80d45166a1cb1c6c5bf"},
+ {file = "cryptography-36.0.2-cp36-abi3-manylinux_2_24_x86_64.whl", hash = "sha256:c2c5250ff0d36fd58550252f54915776940e4e866f38f3a7866d92b32a654b86"},
+ {file = "cryptography-36.0.2-cp36-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:ec6597aa85ce03f3e507566b8bcdf9da2227ec86c4266bd5e6ab4d9e0cc8dab2"},
+ {file = "cryptography-36.0.2-cp36-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:ca9f686517ec2c4a4ce930207f75c00bf03d94e5063cbc00a1dc42531511b7eb"},
+ {file = "cryptography-36.0.2-cp36-abi3-win32.whl", hash = "sha256:f64b232348ee82f13aac22856515ce0195837f6968aeaa94a3d0353ea2ec06a6"},
+ {file = "cryptography-36.0.2-cp36-abi3-win_amd64.whl", hash = "sha256:53e0285b49fd0ab6e604f4c5d9c5ddd98de77018542e88366923f152dbeb3c29"},
+ {file = "cryptography-36.0.2-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:32db5cc49c73f39aac27574522cecd0a4bb7384e71198bc65a0d23f901e89bb7"},
+ {file = "cryptography-36.0.2-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b3d199647468d410994dbeb8cec5816fb74feb9368aedf300af709ef507e3e"},
+ {file = "cryptography-36.0.2-pp37-pypy37_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:da73d095f8590ad437cd5e9faf6628a218aa7c387e1fdf67b888b47ba56a17f0"},
+ {file = "cryptography-36.0.2-pp38-pypy38_pp73-macosx_10_10_x86_64.whl", hash = "sha256:0a3bf09bb0b7a2c93ce7b98cb107e9170a90c51a0162a20af1c61c765b90e60b"},
+ {file = "cryptography-36.0.2-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:8897b7b7ec077c819187a123174b645eb680c13df68354ed99f9b40a50898f77"},
+ {file = "cryptography-36.0.2-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:82740818f2f240a5da8dfb8943b360e4f24022b093207160c77cadade47d7c85"},
+ {file = "cryptography-36.0.2-pp38-pypy38_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:1f64a62b3b75e4005df19d3b5235abd43fa6358d5516cfc43d87aeba8d08dd51"},
+ {file = "cryptography-36.0.2-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:e167b6b710c7f7bc54e67ef593f8731e1f45aa35f8a8a7b72d6e42ec76afd4b3"},
+ {file = "cryptography-36.0.2.tar.gz", hash = "sha256:70f8f4f7bb2ac9f340655cbac89d68c527af5bb4387522a8413e841e3e6628c9"},
]
distlib = [
- {file = "distlib-0.3.2-py2.py3-none-any.whl", hash = "sha256:23e223426b28491b1ced97dc3bbe183027419dfc7982b4fa2f05d5f3ff10711c"},
- {file = "distlib-0.3.2.zip", hash = "sha256:106fef6dc37dd8c0e2c0a60d3fca3e77460a48907f335fa28420463a6f799736"},
+ {file = "distlib-0.3.4-py2.py3-none-any.whl", hash = "sha256:6564fe0a8f51e734df6333d08b8b94d4ea8ee6b99b5ed50613f731fd4089f34b"},
+ {file = "distlib-0.3.4.zip", hash = "sha256:e4b58818180336dc9c529bfb9a0b58728ffc09ad92027a3f30b7cd91e3458579"},
+]
+docutils = [
+ {file = "docutils-0.17.1-py2.py3-none-any.whl", hash = "sha256:cf316c8370a737a022b72b56874f6602acf974a37a9fba42ec2876387549fc61"},
+ {file = "docutils-0.17.1.tar.gz", hash = "sha256:686577d2e4c32380bb50cbb22f575ed742d58168cee37e99117a854bcd88f125"},
]
idna = [
- {file = "idna-3.2-py3-none-any.whl", hash = "sha256:14475042e284991034cb48e06f6851428fb14c4dc953acd9be9a5e95c7b6dd7a"},
- {file = "idna-3.2.tar.gz", hash = "sha256:467fbad99067910785144ce333826c71fb0e63a425657295239737f7ecd125f3"},
+ {file = "idna-3.3-py3-none-any.whl", hash = "sha256:84d9dd047ffa80596e0f246e2eab0b391788b0503584e8945f2368256d2735ff"},
+ {file = "idna-3.3.tar.gz", hash = "sha256:9d643ff0a55b762d5cdb124b8eaa99c66322e2157b69160bc32796e824360e6d"},
]
importlib-metadata = [
- {file = "importlib_metadata-4.6.4-py3-none-any.whl", hash = "sha256:ed5157fef23a4bc4594615a0dd8eba94b2bb36bf2a343fa3d8bb2fa0a62a99d5"},
- {file = "importlib_metadata-4.6.4.tar.gz", hash = "sha256:7b30a78db2922d78a6f47fb30683156a14f3c6aa5cc23f77cc8967e9ab2d002f"},
+ {file = "importlib_metadata-4.11.3-py3-none-any.whl", hash = "sha256:1208431ca90a8cca1a6b8af391bb53c1a2db74e5d1cef6ddced95d4b2062edc6"},
+ {file = "importlib_metadata-4.11.3.tar.gz", hash = "sha256:ea4c597ebf37142f827b8f39299579e31685c31d3a438b59f469406afd0f2539"},
]
importlib-resources = [
- {file = "importlib_resources-5.2.2-py3-none-any.whl", hash = "sha256:2480d8e07d1890056cb53c96e3de44fead9c62f2ba949b0f2e4c4345f4afa977"},
- {file = "importlib_resources-5.2.2.tar.gz", hash = "sha256:a65882a4d0fe5fbf702273456ba2ce74fe44892c25e42e057aca526b702a6d4b"},
+ {file = "importlib_resources-5.7.1-py3-none-any.whl", hash = "sha256:e447dc01619b1e951286f3929be820029d48c75eb25d265c28b92a16548212b8"},
+ {file = "importlib_resources-5.7.1.tar.gz", hash = "sha256:b6062987dfc51f0fcb809187cffbd60f35df7acb4589091f154214af6d0d49d3"},
]
isodate = [
- {file = "isodate-0.6.0-py2.py3-none-any.whl", hash = "sha256:aa4d33c06640f5352aca96e4b81afd8ab3b47337cc12089822d6f322ac772c81"},
- {file = "isodate-0.6.0.tar.gz", hash = "sha256:2e364a3d5759479cdb2d37cce6b9376ea504db2ff90252a2e5b7cc89cc9ff2d8"},
+ {file = "isodate-0.6.1-py2.py3-none-any.whl", hash = "sha256:0751eece944162659049d35f4f549ed815792b38793f07cf73381c1c87cbed96"},
+ {file = "isodate-0.6.1.tar.gz", hash = "sha256:48c5881de7e8b0a0d648cb024c8062dc84e7b840ed81e864c7614fd3c127bde9"},
]
jmespath = [
{file = "jmespath-0.10.0-py2.py3-none-any.whl", hash = "sha256:cdf6525904cc597730141d61b36f2e4b8ecc257c420fa2f4549bac2c2d0cb72f"},
{file = "jmespath-0.10.0.tar.gz", hash = "sha256:b85d0567b8666149a93172712e68920734333c0ce7e89b78b3e987f71e5ed4f9"},
]
jsonschema = [
- {file = "jsonschema-3.2.0-py2.py3-none-any.whl", hash = "sha256:4e5b3cf8216f577bee9ce139cbe72eca3ea4f292ec60928ff24758ce626cd163"},
- {file = "jsonschema-3.2.0.tar.gz", hash = "sha256:c8a85b28d377cc7737e46e2d9f2b4f44ee3c0e1deac6bf46ddefc7187d30797a"},
+ {file = "jsonschema-4.4.0-py3-none-any.whl", hash = "sha256:77281a1f71684953ee8b3d488371b162419767973789272434bbc3f29d9c8823"},
+ {file = "jsonschema-4.4.0.tar.gz", hash = "sha256:636694eb41b3535ed608fe04129f26542b59ed99808b4f688aa32dcf55317a83"},
]
msal = [
- {file = "msal-1.13.0-py2.py3-none-any.whl", hash = "sha256:08f61506d78042f2b5d25915acea609c0c176ee7addbe835edac8f6135548446"},
- {file = "msal-1.13.0.tar.gz", hash = "sha256:1ab72dbb623fb8663e8fdefc052b1f9d4ae0951ea872f5f488dad58f3618c89d"},
+ {file = "msal-1.17.0-py2.py3-none-any.whl", hash = "sha256:5a52d78e70d2c451e267c1e8c2342e4c06f495c75c859aeafd9260d3974f09fe"},
+ {file = "msal-1.17.0.tar.gz", hash = "sha256:04e3cb7bb75c51f56d290381f23056207df1f3eb594ed03d38551f3b16d2a36e"},
]
msal-extensions = [
- {file = "msal-extensions-0.3.0.tar.gz", hash = "sha256:5523dfa15da88297e90d2e73486c8ef875a17f61ea7b7e2953a300432c2e7861"},
- {file = "msal_extensions-0.3.0-py2.py3-none-any.whl", hash = "sha256:a530c2d620061822f2ced8e29da301bc928b146970df635c852907423e8ddddc"},
+ {file = "msal-extensions-0.3.1.tar.gz", hash = "sha256:d9029af70f2cbdc5ad7ecfed61cb432ebe900484843ccf72825445dbfe62d311"},
+ {file = "msal_extensions-0.3.1-py2.py3-none-any.whl", hash = "sha256:89df9c0237e1adf16938fa58575db59c2bb9de04a83ffb0452c8dfc79031f717"},
]
msrest = [
{file = "msrest-0.6.21-py2.py3-none-any.whl", hash = "sha256:c840511c845330e96886011a236440fafc2c9aff7b2df9c0a92041ee2dee3782"},
@@ -1737,146 +1869,185 @@ msrestazure = [
{file = "msrestazure-0.6.4.tar.gz", hash = "sha256:a06f0dabc9a6f5efe3b6add4bd8fb623aeadacf816b7a35b0f89107e0544d189"},
]
multidict = [
- {file = "multidict-5.1.0-cp36-cp36m-macosx_10_14_x86_64.whl", hash = "sha256:b7993704f1a4b204e71debe6095150d43b2ee6150fa4f44d6d966ec356a8d61f"},
- {file = "multidict-5.1.0-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:9dd6e9b1a913d096ac95d0399bd737e00f2af1e1594a787e00f7975778c8b2bf"},
- {file = "multidict-5.1.0-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:f21756997ad8ef815d8ef3d34edd98804ab5ea337feedcd62fb52d22bf531281"},
- {file = "multidict-5.1.0-cp36-cp36m-manylinux2014_i686.whl", hash = "sha256:1ab820665e67373de5802acae069a6a05567ae234ddb129f31d290fc3d1aa56d"},
- {file = "multidict-5.1.0-cp36-cp36m-manylinux2014_ppc64le.whl", hash = "sha256:9436dc58c123f07b230383083855593550c4d301d2532045a17ccf6eca505f6d"},
- {file = "multidict-5.1.0-cp36-cp36m-manylinux2014_s390x.whl", hash = "sha256:830f57206cc96ed0ccf68304141fec9481a096c4d2e2831f311bde1c404401da"},
- {file = "multidict-5.1.0-cp36-cp36m-manylinux2014_x86_64.whl", hash = "sha256:2e68965192c4ea61fff1b81c14ff712fc7dc15d2bd120602e4a3494ea6584224"},
- {file = "multidict-5.1.0-cp36-cp36m-win32.whl", hash = "sha256:2f1a132f1c88724674271d636e6b7351477c27722f2ed789f719f9e3545a3d26"},
- {file = "multidict-5.1.0-cp36-cp36m-win_amd64.whl", hash = "sha256:3a4f32116f8f72ecf2a29dabfb27b23ab7cdc0ba807e8459e59a93a9be9506f6"},
- {file = "multidict-5.1.0-cp37-cp37m-macosx_10_14_x86_64.whl", hash = "sha256:46c73e09ad374a6d876c599f2328161bcd95e280f84d2060cf57991dec5cfe76"},
- {file = "multidict-5.1.0-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:018132dbd8688c7a69ad89c4a3f39ea2f9f33302ebe567a879da8f4ca73f0d0a"},
- {file = "multidict-5.1.0-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:4b186eb7d6ae7c06eb4392411189469e6a820da81447f46c0072a41c748ab73f"},
- {file = "multidict-5.1.0-cp37-cp37m-manylinux2014_i686.whl", hash = "sha256:3a041b76d13706b7fff23b9fc83117c7b8fe8d5fe9e6be45eee72b9baa75f348"},
- {file = "multidict-5.1.0-cp37-cp37m-manylinux2014_ppc64le.whl", hash = "sha256:051012ccee979b2b06be928a6150d237aec75dd6bf2d1eeeb190baf2b05abc93"},
- {file = "multidict-5.1.0-cp37-cp37m-manylinux2014_s390x.whl", hash = "sha256:6a4d5ce640e37b0efcc8441caeea8f43a06addace2335bd11151bc02d2ee31f9"},
- {file = "multidict-5.1.0-cp37-cp37m-manylinux2014_x86_64.whl", hash = "sha256:5cf3443199b83ed9e955f511b5b241fd3ae004e3cb81c58ec10f4fe47c7dce37"},
- {file = "multidict-5.1.0-cp37-cp37m-win32.whl", hash = "sha256:f200755768dc19c6f4e2b672421e0ebb3dd54c38d5a4f262b872d8cfcc9e93b5"},
- {file = "multidict-5.1.0-cp37-cp37m-win_amd64.whl", hash = "sha256:05c20b68e512166fddba59a918773ba002fdd77800cad9f55b59790030bab632"},
- {file = "multidict-5.1.0-cp38-cp38-macosx_10_14_x86_64.whl", hash = "sha256:54fd1e83a184e19c598d5e70ba508196fd0bbdd676ce159feb412a4a6664f952"},
- {file = "multidict-5.1.0-cp38-cp38-manylinux1_i686.whl", hash = "sha256:0e3c84e6c67eba89c2dbcee08504ba8644ab4284863452450520dad8f1e89b79"},
- {file = "multidict-5.1.0-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:dc862056f76443a0db4509116c5cd480fe1b6a2d45512a653f9a855cc0517456"},
- {file = "multidict-5.1.0-cp38-cp38-manylinux2014_i686.whl", hash = "sha256:0e929169f9c090dae0646a011c8b058e5e5fb391466016b39d21745b48817fd7"},
- {file = "multidict-5.1.0-cp38-cp38-manylinux2014_ppc64le.whl", hash = "sha256:d81eddcb12d608cc08081fa88d046c78afb1bf8107e6feab5d43503fea74a635"},
- {file = "multidict-5.1.0-cp38-cp38-manylinux2014_s390x.whl", hash = "sha256:585fd452dd7782130d112f7ddf3473ffdd521414674c33876187e101b588738a"},
- {file = "multidict-5.1.0-cp38-cp38-manylinux2014_x86_64.whl", hash = "sha256:37e5438e1c78931df5d3c0c78ae049092877e5e9c02dd1ff5abb9cf27a5914ea"},
- {file = "multidict-5.1.0-cp38-cp38-win32.whl", hash = "sha256:07b42215124aedecc6083f1ce6b7e5ec5b50047afa701f3442054373a6deb656"},
- {file = "multidict-5.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:929006d3c2d923788ba153ad0de8ed2e5ed39fdbe8e7be21e2f22ed06c6783d3"},
- {file = "multidict-5.1.0-cp39-cp39-macosx_10_14_x86_64.whl", hash = "sha256:b797515be8743b771aa868f83563f789bbd4b236659ba52243b735d80b29ed93"},
- {file = "multidict-5.1.0-cp39-cp39-manylinux1_i686.whl", hash = "sha256:d5c65bdf4484872c4af3150aeebe101ba560dcfb34488d9a8ff8dbcd21079647"},
- {file = "multidict-5.1.0-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:b47a43177a5e65b771b80db71e7be76c0ba23cc8aa73eeeb089ed5219cdbe27d"},
- {file = "multidict-5.1.0-cp39-cp39-manylinux2014_i686.whl", hash = "sha256:806068d4f86cb06af37cd65821554f98240a19ce646d3cd24e1c33587f313eb8"},
- {file = "multidict-5.1.0-cp39-cp39-manylinux2014_ppc64le.whl", hash = "sha256:46dd362c2f045095c920162e9307de5ffd0a1bfbba0a6e990b344366f55a30c1"},
- {file = "multidict-5.1.0-cp39-cp39-manylinux2014_s390x.whl", hash = "sha256:ace010325c787c378afd7f7c1ac66b26313b3344628652eacd149bdd23c68841"},
- {file = "multidict-5.1.0-cp39-cp39-manylinux2014_x86_64.whl", hash = "sha256:ecc771ab628ea281517e24fd2c52e8f31c41e66652d07599ad8818abaad38cda"},
- {file = "multidict-5.1.0-cp39-cp39-win32.whl", hash = "sha256:fc13a9524bc18b6fb6e0dbec3533ba0496bbed167c56d0aabefd965584557d80"},
- {file = "multidict-5.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:7df80d07818b385f3129180369079bd6934cf70469f99daaebfac89dca288359"},
- {file = "multidict-5.1.0.tar.gz", hash = "sha256:25b4e5f22d3a37ddf3effc0710ba692cfc792c2b9edfb9c05aefe823256e84d5"},
+ {file = "multidict-6.0.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:0b9e95a740109c6047602f4db4da9949e6c5945cefbad34a1299775ddc9a62e2"},
+ {file = "multidict-6.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ac0e27844758d7177989ce406acc6a83c16ed4524ebc363c1f748cba184d89d3"},
+ {file = "multidict-6.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:041b81a5f6b38244b34dc18c7b6aba91f9cdaf854d9a39e5ff0b58e2b5773b9c"},
+ {file = "multidict-6.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5fdda29a3c7e76a064f2477c9aab1ba96fd94e02e386f1e665bca1807fc5386f"},
+ {file = "multidict-6.0.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3368bf2398b0e0fcbf46d85795adc4c259299fec50c1416d0f77c0a843a3eed9"},
+ {file = "multidict-6.0.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f4f052ee022928d34fe1f4d2bc743f32609fb79ed9c49a1710a5ad6b2198db20"},
+ {file = "multidict-6.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:225383a6603c086e6cef0f2f05564acb4f4d5f019a4e3e983f572b8530f70c88"},
+ {file = "multidict-6.0.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:50bd442726e288e884f7be9071016c15a8742eb689a593a0cac49ea093eef0a7"},
+ {file = "multidict-6.0.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:47e6a7e923e9cada7c139531feac59448f1f47727a79076c0b1ee80274cd8eee"},
+ {file = "multidict-6.0.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:0556a1d4ea2d949efe5fd76a09b4a82e3a4a30700553a6725535098d8d9fb672"},
+ {file = "multidict-6.0.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:626fe10ac87851f4cffecee161fc6f8f9853f0f6f1035b59337a51d29ff3b4f9"},
+ {file = "multidict-6.0.2-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:8064b7c6f0af936a741ea1efd18690bacfbae4078c0c385d7c3f611d11f0cf87"},
+ {file = "multidict-6.0.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:2d36e929d7f6a16d4eb11b250719c39560dd70545356365b494249e2186bc389"},
+ {file = "multidict-6.0.2-cp310-cp310-win32.whl", hash = "sha256:fcb91630817aa8b9bc4a74023e4198480587269c272c58b3279875ed7235c293"},
+ {file = "multidict-6.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:8cbf0132f3de7cc6c6ce00147cc78e6439ea736cee6bca4f068bcf892b0fd658"},
+ {file = "multidict-6.0.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:05f6949d6169878a03e607a21e3b862eaf8e356590e8bdae4227eedadacf6e51"},
+ {file = "multidict-6.0.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e2c2e459f7050aeb7c1b1276763364884595d47000c1cddb51764c0d8976e608"},
+ {file = "multidict-6.0.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d0509e469d48940147e1235d994cd849a8f8195e0bca65f8f5439c56e17872a3"},
+ {file = "multidict-6.0.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:514fe2b8d750d6cdb4712346a2c5084a80220821a3e91f3f71eec11cf8d28fd4"},
+ {file = "multidict-6.0.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:19adcfc2a7197cdc3987044e3f415168fc5dc1f720c932eb1ef4f71a2067e08b"},
+ {file = "multidict-6.0.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b9d153e7f1f9ba0b23ad1568b3b9e17301e23b042c23870f9ee0522dc5cc79e8"},
+ {file = "multidict-6.0.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:aef9cc3d9c7d63d924adac329c33835e0243b5052a6dfcbf7732a921c6e918ba"},
+ {file = "multidict-6.0.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:4571f1beddff25f3e925eea34268422622963cd8dc395bb8778eb28418248e43"},
+ {file = "multidict-6.0.2-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:d48b8ee1d4068561ce8033d2c344cf5232cb29ee1a0206a7b828c79cbc5982b8"},
+ {file = "multidict-6.0.2-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:45183c96ddf61bf96d2684d9fbaf6f3564d86b34cb125761f9a0ef9e36c1d55b"},
+ {file = "multidict-6.0.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:75bdf08716edde767b09e76829db8c1e5ca9d8bb0a8d4bd94ae1eafe3dac5e15"},
+ {file = "multidict-6.0.2-cp37-cp37m-win32.whl", hash = "sha256:a45e1135cb07086833ce969555df39149680e5471c04dfd6a915abd2fc3f6dbc"},
+ {file = "multidict-6.0.2-cp37-cp37m-win_amd64.whl", hash = "sha256:6f3cdef8a247d1eafa649085812f8a310e728bdf3900ff6c434eafb2d443b23a"},
+ {file = "multidict-6.0.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:0327292e745a880459ef71be14e709aaea2f783f3537588fb4ed09b6c01bca60"},
+ {file = "multidict-6.0.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:e875b6086e325bab7e680e4316d667fc0e5e174bb5611eb16b3ea121c8951b86"},
+ {file = "multidict-6.0.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:feea820722e69451743a3d56ad74948b68bf456984d63c1a92e8347b7b88452d"},
+ {file = "multidict-6.0.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9cc57c68cb9139c7cd6fc39f211b02198e69fb90ce4bc4a094cf5fe0d20fd8b0"},
+ {file = "multidict-6.0.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:497988d6b6ec6ed6f87030ec03280b696ca47dbf0648045e4e1d28b80346560d"},
+ {file = "multidict-6.0.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:89171b2c769e03a953d5969b2f272efa931426355b6c0cb508022976a17fd376"},
+ {file = "multidict-6.0.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:684133b1e1fe91eda8fa7447f137c9490a064c6b7f392aa857bba83a28cfb693"},
+ {file = "multidict-6.0.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fd9fc9c4849a07f3635ccffa895d57abce554b467d611a5009ba4f39b78a8849"},
+ {file = "multidict-6.0.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:e07c8e79d6e6fd37b42f3250dba122053fddb319e84b55dd3a8d6446e1a7ee49"},
+ {file = "multidict-6.0.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:4070613ea2227da2bfb2c35a6041e4371b0af6b0be57f424fe2318b42a748516"},
+ {file = "multidict-6.0.2-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:47fbeedbf94bed6547d3aa632075d804867a352d86688c04e606971595460227"},
+ {file = "multidict-6.0.2-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:5774d9218d77befa7b70d836004a768fb9aa4fdb53c97498f4d8d3f67bb9cfa9"},
+ {file = "multidict-6.0.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:2957489cba47c2539a8eb7ab32ff49101439ccf78eab724c828c1a54ff3ff98d"},
+ {file = "multidict-6.0.2-cp38-cp38-win32.whl", hash = "sha256:e5b20e9599ba74391ca0cfbd7b328fcc20976823ba19bc573983a25b32e92b57"},
+ {file = "multidict-6.0.2-cp38-cp38-win_amd64.whl", hash = "sha256:8004dca28e15b86d1b1372515f32eb6f814bdf6f00952699bdeb541691091f96"},
+ {file = "multidict-6.0.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:2e4a0785b84fb59e43c18a015ffc575ba93f7d1dbd272b4cdad9f5134b8a006c"},
+ {file = "multidict-6.0.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6701bf8a5d03a43375909ac91b6980aea74b0f5402fbe9428fc3f6edf5d9677e"},
+ {file = "multidict-6.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a007b1638e148c3cfb6bf0bdc4f82776cef0ac487191d093cdc316905e504071"},
+ {file = "multidict-6.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:07a017cfa00c9890011628eab2503bee5872f27144936a52eaab449be5eaf032"},
+ {file = "multidict-6.0.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c207fff63adcdf5a485969131dc70e4b194327666b7e8a87a97fbc4fd80a53b2"},
+ {file = "multidict-6.0.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:373ba9d1d061c76462d74e7de1c0c8e267e9791ee8cfefcf6b0b2495762c370c"},
+ {file = "multidict-6.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bfba7c6d5d7c9099ba21f84662b037a0ffd4a5e6b26ac07d19e423e6fdf965a9"},
+ {file = "multidict-6.0.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:19d9bad105dfb34eb539c97b132057a4e709919ec4dd883ece5838bcbf262b80"},
+ {file = "multidict-6.0.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:de989b195c3d636ba000ee4281cd03bb1234635b124bf4cd89eeee9ca8fcb09d"},
+ {file = "multidict-6.0.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:7c40b7bbece294ae3a87c1bc2abff0ff9beef41d14188cda94ada7bcea99b0fb"},
+ {file = "multidict-6.0.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:d16cce709ebfadc91278a1c005e3c17dd5f71f5098bfae1035149785ea6e9c68"},
+ {file = "multidict-6.0.2-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:a2c34a93e1d2aa35fbf1485e5010337c72c6791407d03aa5f4eed920343dd360"},
+ {file = "multidict-6.0.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:feba80698173761cddd814fa22e88b0661e98cb810f9f986c54aa34d281e4937"},
+ {file = "multidict-6.0.2-cp39-cp39-win32.whl", hash = "sha256:23b616fdc3c74c9fe01d76ce0d1ce872d2d396d8fa8e4899398ad64fb5aa214a"},
+ {file = "multidict-6.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:4bae31803d708f6f15fd98be6a6ac0b6958fcf68fda3c77a048a4f9073704aae"},
+ {file = "multidict-6.0.2.tar.gz", hash = "sha256:5ff3bd75f38e4c43f1f470f2df7a4d430b821c4ce22be384e1459cb57d6bb013"},
]
netaddr = [
{file = "netaddr-0.7.20-py2.py3-none-any.whl", hash = "sha256:7a9c8f58d048b820df1882439bb04fb2de13c03ec8af3112a1099822b0a2a4b8"},
{file = "netaddr-0.7.20.tar.gz", hash = "sha256:d09252e5aec3913815d77eb8e8ea8fa6eb33521253e52f977f6abaa964776f3e"},
]
oauthlib = [
- {file = "oauthlib-3.1.1-py2.py3-none-any.whl", hash = "sha256:42bf6354c2ed8c6acb54d971fce6f88193d97297e18602a3a886603f9d7730cc"},
- {file = "oauthlib-3.1.1.tar.gz", hash = "sha256:8f0215fcc533dd8dd1bee6f4c412d4f0cd7297307d43ac61666389e3bc3198a3"},
+ {file = "oauthlib-3.2.0-py3-none-any.whl", hash = "sha256:6db33440354787f9b7f3a6dbd4febf5d0f93758354060e802f6c06cb493022fe"},
+ {file = "oauthlib-3.2.0.tar.gz", hash = "sha256:23a8208d75b902797ea29fd31fa80a15ed9dc2c6c16fe73f5d346f83f6fa27a2"},
]
parameterized = [
{file = "parameterized-0.7.5-py2.py3-none-any.whl", hash = "sha256:b36f709fcfd9e8c144c1374b16a40fc0b5984efe93e41d53e6d228ae2a1540c5"},
{file = "parameterized-0.7.5.tar.gz", hash = "sha256:b5e6af67b9e49485e30125b1c8f031ffa81a265ca08bfa73f31551bf03cf68c4"},
]
portalocker = [
- {file = "portalocker-1.7.1-py2.py3-none-any.whl", hash = "sha256:34cb36c618d88bcd9079beb36dcdc1848a3e3d92ac4eac59055bdeafc39f9d4a"},
- {file = "portalocker-1.7.1.tar.gz", hash = "sha256:6d6f5de5a3e68c4dd65a98ec1babb26d28ccc5e770e07b672d65d5a35e4b2d8a"},
+ {file = "portalocker-2.4.0-py2.py3-none-any.whl", hash = "sha256:b092f48e1e30a234ab3dd1cfd44f2f235e8a41f4e310e463fc8d6798d1c3c235"},
+ {file = "portalocker-2.4.0.tar.gz", hash = "sha256:a648ad761b8ea27370cb5915350122cd807b820d2193ed5c9cc28f163df637f4"},
]
pycparser = [
- {file = "pycparser-2.20-py2.py3-none-any.whl", hash = "sha256:7582ad22678f0fcd81102833f60ef8d0e57288b6b5fb00323d101be910e35705"},
- {file = "pycparser-2.20.tar.gz", hash = "sha256:2d475327684562c3a96cc71adf7dc8c4f0565175cf86b6d7a404ff4c771f15f0"},
+ {file = "pycparser-2.21-py2.py3-none-any.whl", hash = "sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9"},
+ {file = "pycparser-2.21.tar.gz", hash = "sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206"},
]
pyjwt = [
- {file = "PyJWT-1.7.1-py2.py3-none-any.whl", hash = "sha256:5c6eca3c2940464d106b99ba83b00c6add741c9becaec087fb7ccdefea71350e"},
- {file = "PyJWT-1.7.1.tar.gz", hash = "sha256:8d59a976fb773f3e6a39c85636357c4f0e242707394cadadd9814f5cbaa20e96"},
+ {file = "PyJWT-2.4.0-py3-none-any.whl", hash = "sha256:72d1d253f32dbd4f5c88eaf1fdc62f3a19f676ccbadb9dbc5d07e951b2b26daf"},
+ {file = "PyJWT-2.4.0.tar.gz", hash = "sha256:d42908208c699b3b973cbeb01a969ba6a96c821eefb1c5bfe4c390c01d67abba"},
]
pyrsistent = [
- {file = "pyrsistent-0.18.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:f4c8cabb46ff8e5d61f56a037974228e978f26bfefce4f61a4b1ac0ba7a2ab72"},
- {file = "pyrsistent-0.18.0-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:da6e5e818d18459fa46fac0a4a4e543507fe1110e808101277c5a2b5bab0cd2d"},
- {file = "pyrsistent-0.18.0-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:5e4395bbf841693eaebaa5bb5c8f5cdbb1d139e07c975c682ec4e4f8126e03d2"},
- {file = "pyrsistent-0.18.0-cp36-cp36m-win32.whl", hash = "sha256:527be2bfa8dc80f6f8ddd65242ba476a6c4fb4e3aedbf281dfbac1b1ed4165b1"},
- {file = "pyrsistent-0.18.0-cp36-cp36m-win_amd64.whl", hash = "sha256:2aaf19dc8ce517a8653746d98e962ef480ff34b6bc563fc067be6401ffb457c7"},
- {file = "pyrsistent-0.18.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:58a70d93fb79dc585b21f9d72487b929a6fe58da0754fa4cb9f279bb92369396"},
- {file = "pyrsistent-0.18.0-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:4916c10896721e472ee12c95cdc2891ce5890898d2f9907b1b4ae0f53588b710"},
- {file = "pyrsistent-0.18.0-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:73ff61b1411e3fb0ba144b8f08d6749749775fe89688093e1efef9839d2dcc35"},
- {file = "pyrsistent-0.18.0-cp37-cp37m-win32.whl", hash = "sha256:b29b869cf58412ca5738d23691e96d8aff535e17390128a1a52717c9a109da4f"},
- {file = "pyrsistent-0.18.0-cp37-cp37m-win_amd64.whl", hash = "sha256:097b96f129dd36a8c9e33594e7ebb151b1515eb52cceb08474c10a5479e799f2"},
- {file = "pyrsistent-0.18.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:772e94c2c6864f2cd2ffbe58bb3bdefbe2a32afa0acb1a77e472aac831f83427"},
- {file = "pyrsistent-0.18.0-cp38-cp38-manylinux1_i686.whl", hash = "sha256:c1a9ff320fa699337e05edcaae79ef8c2880b52720bc031b219e5b5008ebbdef"},
- {file = "pyrsistent-0.18.0-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:cd3caef37a415fd0dae6148a1b6957a8c5f275a62cca02e18474608cb263640c"},
- {file = "pyrsistent-0.18.0-cp38-cp38-win32.whl", hash = "sha256:e79d94ca58fcafef6395f6352383fa1a76922268fa02caa2272fff501c2fdc78"},
- {file = "pyrsistent-0.18.0-cp38-cp38-win_amd64.whl", hash = "sha256:a0c772d791c38bbc77be659af29bb14c38ced151433592e326361610250c605b"},
- {file = "pyrsistent-0.18.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d5ec194c9c573aafaceebf05fc400656722793dac57f254cd4741f3c27ae57b4"},
- {file = "pyrsistent-0.18.0-cp39-cp39-manylinux1_i686.whl", hash = "sha256:6b5eed00e597b5b5773b4ca30bd48a5774ef1e96f2a45d105db5b4ebb4bca680"},
- {file = "pyrsistent-0.18.0-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:48578680353f41dca1ca3dc48629fb77dfc745128b56fc01096b2530c13fd426"},
- {file = "pyrsistent-0.18.0-cp39-cp39-win32.whl", hash = "sha256:f3ef98d7b76da5eb19c37fda834d50262ff9167c65658d1d8f974d2e4d90676b"},
- {file = "pyrsistent-0.18.0-cp39-cp39-win_amd64.whl", hash = "sha256:404e1f1d254d314d55adb8d87f4f465c8693d6f902f67eb6ef5b4526dc58e6ea"},
- {file = "pyrsistent-0.18.0.tar.gz", hash = "sha256:773c781216f8c2900b42a7b638d5b517bb134ae1acbebe4d1e8f1f41ea60eb4b"},
+ {file = "pyrsistent-0.18.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:df46c854f490f81210870e509818b729db4488e1f30f2a1ce1698b2295a878d1"},
+ {file = "pyrsistent-0.18.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d45866ececf4a5fff8742c25722da6d4c9e180daa7b405dc0a2a2790d668c26"},
+ {file = "pyrsistent-0.18.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4ed6784ceac462a7d6fcb7e9b663e93b9a6fb373b7f43594f9ff68875788e01e"},
+ {file = "pyrsistent-0.18.1-cp310-cp310-win32.whl", hash = "sha256:e4f3149fd5eb9b285d6bfb54d2e5173f6a116fe19172686797c056672689daf6"},
+ {file = "pyrsistent-0.18.1-cp310-cp310-win_amd64.whl", hash = "sha256:636ce2dc235046ccd3d8c56a7ad54e99d5c1cd0ef07d9ae847306c91d11b5fec"},
+ {file = "pyrsistent-0.18.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:e92a52c166426efbe0d1ec1332ee9119b6d32fc1f0bbfd55d5c1088070e7fc1b"},
+ {file = "pyrsistent-0.18.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d7a096646eab884bf8bed965bad63ea327e0d0c38989fc83c5ea7b8a87037bfc"},
+ {file = "pyrsistent-0.18.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cdfd2c361b8a8e5d9499b9082b501c452ade8bbf42aef97ea04854f4a3f43b22"},
+ {file = "pyrsistent-0.18.1-cp37-cp37m-win32.whl", hash = "sha256:7ec335fc998faa4febe75cc5268a9eac0478b3f681602c1f27befaf2a1abe1d8"},
+ {file = "pyrsistent-0.18.1-cp37-cp37m-win_amd64.whl", hash = "sha256:6455fc599df93d1f60e1c5c4fe471499f08d190d57eca040c0ea182301321286"},
+ {file = "pyrsistent-0.18.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:fd8da6d0124efa2f67d86fa70c851022f87c98e205f0594e1fae044e7119a5a6"},
+ {file = "pyrsistent-0.18.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7bfe2388663fd18bd8ce7db2c91c7400bf3e1a9e8bd7d63bf7e77d39051b85ec"},
+ {file = "pyrsistent-0.18.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0e3e1fcc45199df76053026a51cc59ab2ea3fc7c094c6627e93b7b44cdae2c8c"},
+ {file = "pyrsistent-0.18.1-cp38-cp38-win32.whl", hash = "sha256:b568f35ad53a7b07ed9b1b2bae09eb15cdd671a5ba5d2c66caee40dbf91c68ca"},
+ {file = "pyrsistent-0.18.1-cp38-cp38-win_amd64.whl", hash = "sha256:d1b96547410f76078eaf66d282ddca2e4baae8964364abb4f4dcdde855cd123a"},
+ {file = "pyrsistent-0.18.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:f87cc2863ef33c709e237d4b5f4502a62a00fab450c9e020892e8e2ede5847f5"},
+ {file = "pyrsistent-0.18.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6bc66318fb7ee012071b2792024564973ecc80e9522842eb4e17743604b5e045"},
+ {file = "pyrsistent-0.18.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:914474c9f1d93080338ace89cb2acee74f4f666fb0424896fcfb8d86058bf17c"},
+ {file = "pyrsistent-0.18.1-cp39-cp39-win32.whl", hash = "sha256:1b34eedd6812bf4d33814fca1b66005805d3640ce53140ab8bbb1e2651b0d9bc"},
+ {file = "pyrsistent-0.18.1-cp39-cp39-win_amd64.whl", hash = "sha256:e24a828f57e0c337c8d8bb9f6b12f09dfdf0273da25fda9e314f0b684b415a07"},
+ {file = "pyrsistent-0.18.1.tar.gz", hash = "sha256:d4d61f8b993a7255ba714df3aca52700f8125289f84f704cf80916517c46eb96"},
]
python-dateutil = [
{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"},
]
pytz = [
- {file = "pytz-2021.1-py2.py3-none-any.whl", hash = "sha256:eb10ce3e7736052ed3623d49975ce333bcd712c7bb19a58b9e2089d4057d0798"},
- {file = "pytz-2021.1.tar.gz", hash = "sha256:83a4a90894bf38e243cf052c8b58f381bfe9a7a483f6a9cab140bc7f702ac4da"},
+ {file = "pytz-2022.1-py2.py3-none-any.whl", hash = "sha256:e68985985296d9a66a881eb3193b0906246245294a881e7c8afe623866ac6a5c"},
+ {file = "pytz-2022.1.tar.gz", hash = "sha256:1e760e2fe6a8163bc0b3d9a19c4f84342afa0a2affebfaa84b01b978a02ecaa7"},
+]
+pytz-deprecation-shim = [
+ {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"},
]
pywin32 = [
- {file = "pywin32-301-cp35-cp35m-win32.whl", hash = "sha256:93367c96e3a76dfe5003d8291ae16454ca7d84bb24d721e0b74a07610b7be4a7"},
- {file = "pywin32-301-cp35-cp35m-win_amd64.whl", hash = "sha256:9635df6998a70282bd36e7ac2a5cef9ead1627b0a63b17c731312c7a0daebb72"},
- {file = "pywin32-301-cp36-cp36m-win32.whl", hash = "sha256:c866f04a182a8cb9b7855de065113bbd2e40524f570db73ef1ee99ff0a5cc2f0"},
- {file = "pywin32-301-cp36-cp36m-win_amd64.whl", hash = "sha256:dafa18e95bf2a92f298fe9c582b0e205aca45c55f989937c52c454ce65b93c78"},
- {file = "pywin32-301-cp37-cp37m-win32.whl", hash = "sha256:98f62a3f60aa64894a290fb7494bfa0bfa0a199e9e052e1ac293b2ad3cd2818b"},
- {file = "pywin32-301-cp37-cp37m-win_amd64.whl", hash = "sha256:fb3b4933e0382ba49305cc6cd3fb18525df7fd96aa434de19ce0878133bf8e4a"},
- {file = "pywin32-301-cp38-cp38-win32.whl", hash = "sha256:88981dd3cfb07432625b180f49bf4e179fb8cbb5704cd512e38dd63636af7a17"},
- {file = "pywin32-301-cp38-cp38-win_amd64.whl", hash = "sha256:8c9d33968aa7fcddf44e47750e18f3d034c3e443a707688a008a2e52bbef7e96"},
- {file = "pywin32-301-cp39-cp39-win32.whl", hash = "sha256:595d397df65f1b2e0beaca63a883ae6d8b6df1cdea85c16ae85f6d2e648133fe"},
- {file = "pywin32-301-cp39-cp39-win_amd64.whl", hash = "sha256:87604a4087434cd814ad8973bd47d6524bd1fa9e971ce428e76b62a5e0860fdf"},
+ {file = "pywin32-303-cp310-cp310-win32.whl", hash = "sha256:6fed4af057039f309263fd3285d7b8042d41507343cd5fa781d98fcc5b90e8bb"},
+ {file = "pywin32-303-cp310-cp310-win_amd64.whl", hash = "sha256:51cb52c5ec6709f96c3f26e7795b0bf169ee0d8395b2c1d7eb2c029a5008ed51"},
+ {file = "pywin32-303-cp311-cp311-win32.whl", hash = "sha256:d9b5d87ca944eb3aa4cd45516203ead4b37ab06b8b777c54aedc35975dec0dee"},
+ {file = "pywin32-303-cp311-cp311-win_amd64.whl", hash = "sha256:fcf44032f5b14fcda86028cdf49b6ebdaea091230eb0a757282aa656e4732439"},
+ {file = "pywin32-303-cp36-cp36m-win32.whl", hash = "sha256:aad484d52ec58008ca36bd4ad14a71d7dd0a99db1a4ca71072213f63bf49c7d9"},
+ {file = "pywin32-303-cp36-cp36m-win_amd64.whl", hash = "sha256:2a09632916b6bb231ba49983fe989f2f625cea237219530e81a69239cd0c4559"},
+ {file = "pywin32-303-cp37-cp37m-win32.whl", hash = "sha256:b1675d82bcf6dbc96363fca747bac8bff6f6e4a447a4287ac652aa4b9adc796e"},
+ {file = "pywin32-303-cp37-cp37m-win_amd64.whl", hash = "sha256:c268040769b48a13367221fced6d4232ed52f044ffafeda247bd9d2c6bdc29ca"},
+ {file = "pywin32-303-cp38-cp38-win32.whl", hash = "sha256:5f9ec054f5a46a0f4dfd72af2ce1372f3d5a6e4052af20b858aa7df2df7d355b"},
+ {file = "pywin32-303-cp38-cp38-win_amd64.whl", hash = "sha256:793bf74fce164bcffd9d57bb13c2c15d56e43c9542a7b9687b4fccf8f8a41aba"},
+ {file = "pywin32-303-cp39-cp39-win32.whl", hash = "sha256:7d3271c98434617a11921c5ccf74615794d97b079e22ed7773790822735cc352"},
+ {file = "pywin32-303-cp39-cp39-win_amd64.whl", hash = "sha256:79cbb862c11b9af19bcb682891c1b91942ec2ff7de8151e2aea2e175899cda34"},
]
pyyaml = [
- {file = "PyYAML-5.4.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:3b2b1824fe7112845700f815ff6a489360226a5609b96ec2190a45e62a9fc922"},
- {file = "PyYAML-5.4.1-cp27-cp27m-win32.whl", hash = "sha256:129def1b7c1bf22faffd67b8f3724645203b79d8f4cc81f674654d9902cb4393"},
- {file = "PyYAML-5.4.1-cp27-cp27m-win_amd64.whl", hash = "sha256:4465124ef1b18d9ace298060f4eccc64b0850899ac4ac53294547536533800c8"},
- {file = "PyYAML-5.4.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:bb4191dfc9306777bc594117aee052446b3fa88737cd13b7188d0e7aa8162185"},
- {file = "PyYAML-5.4.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:6c78645d400265a062508ae399b60b8c167bf003db364ecb26dcab2bda048253"},
- {file = "PyYAML-5.4.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:4e0583d24c881e14342eaf4ec5fbc97f934b999a6828693a99157fde912540cc"},
- {file = "PyYAML-5.4.1-cp36-cp36m-win32.whl", hash = "sha256:3bd0e463264cf257d1ffd2e40223b197271046d09dadf73a0fe82b9c1fc385a5"},
- {file = "PyYAML-5.4.1-cp36-cp36m-win_amd64.whl", hash = "sha256:e4fac90784481d221a8e4b1162afa7c47ed953be40d31ab4629ae917510051df"},
- {file = "PyYAML-5.4.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:5accb17103e43963b80e6f837831f38d314a0495500067cb25afab2e8d7a4018"},
- {file = "PyYAML-5.4.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:e1d4970ea66be07ae37a3c2e48b5ec63f7ba6804bdddfdbd3cfd954d25a82e63"},
- {file = "PyYAML-5.4.1-cp37-cp37m-win32.whl", hash = "sha256:dd5de0646207f053eb0d6c74ae45ba98c3395a571a2891858e87df7c9b9bd51b"},
- {file = "PyYAML-5.4.1-cp37-cp37m-win_amd64.whl", hash = "sha256:08682f6b72c722394747bddaf0aa62277e02557c0fd1c42cb853016a38f8dedf"},
- {file = "PyYAML-5.4.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d2d9808ea7b4af864f35ea216be506ecec180628aced0704e34aca0b040ffe46"},
- {file = "PyYAML-5.4.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:8c1be557ee92a20f184922c7b6424e8ab6691788e6d86137c5d93c1a6ec1b8fb"},
- {file = "PyYAML-5.4.1-cp38-cp38-win32.whl", hash = "sha256:fa5ae20527d8e831e8230cbffd9f8fe952815b2b7dae6ffec25318803a7528fc"},
- {file = "PyYAML-5.4.1-cp38-cp38-win_amd64.whl", hash = "sha256:0f5f5786c0e09baddcd8b4b45f20a7b5d61a7e7e99846e3c799b05c7c53fa696"},
- {file = "PyYAML-5.4.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:294db365efa064d00b8d1ef65d8ea2c3426ac366c0c4368d930bf1c5fb497f77"},
- {file = "PyYAML-5.4.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:74c1485f7707cf707a7aef42ef6322b8f97921bd89be2ab6317fd782c2d53183"},
- {file = "PyYAML-5.4.1-cp39-cp39-win32.whl", hash = "sha256:49d4cdd9065b9b6e206d0595fee27a96b5dd22618e7520c33204a4a3239d5b10"},
- {file = "PyYAML-5.4.1-cp39-cp39-win_amd64.whl", hash = "sha256:c20cfa2d49991c8b4147af39859b167664f2ad4561704ee74c1de03318e898db"},
- {file = "PyYAML-5.4.1.tar.gz", hash = "sha256:607774cbba28732bfa802b54baa7484215f530991055bb562efbed5b2f20a45e"},
+ {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"},
+ {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a80a78046a72361de73f8f395f1f1e49f956c6be882eed58505a15f3e430962b"},
+ {file = "PyYAML-6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f84fbc98b019fef2ee9a1cb3ce93e3187a6df0b2538a651bfb890254ba9f90b5"},
+ {file = "PyYAML-6.0-cp310-cp310-win32.whl", hash = "sha256:2cd5df3de48857ed0544b34e2d40e9fac445930039f3cfe4bcc592a1f836d513"},
+ {file = "PyYAML-6.0-cp310-cp310-win_amd64.whl", hash = "sha256:daf496c58a8c52083df09b80c860005194014c3698698d1a57cbcfa182142a3a"},
+ {file = "PyYAML-6.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:897b80890765f037df3403d22bab41627ca8811ae55e9a722fd0392850ec4d86"},
+ {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50602afada6d6cbfad699b0c7bb50d5ccffa7e46a3d738092afddc1f9758427f"},
+ {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:48c346915c114f5fdb3ead70312bd042a953a8ce5c7106d5bfb1a5254e47da92"},
+ {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:98c4d36e99714e55cfbaaee6dd5badbc9a1ec339ebfc3b1f52e293aee6bb71a4"},
+ {file = "PyYAML-6.0-cp36-cp36m-win32.whl", hash = "sha256:0283c35a6a9fbf047493e3a0ce8d79ef5030852c51e9d911a27badfde0605293"},
+ {file = "PyYAML-6.0-cp36-cp36m-win_amd64.whl", hash = "sha256:07751360502caac1c067a8132d150cf3d61339af5691fe9e87803040dbc5db57"},
+ {file = "PyYAML-6.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:819b3830a1543db06c4d4b865e70ded25be52a2e0631ccd2f6a47a2822f2fd7c"},
+ {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:473f9edb243cb1935ab5a084eb238d842fb8f404ed2193a915d1784b5a6b5fc0"},
+ {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0ce82d761c532fe4ec3f87fc45688bdd3a4c1dc5e0b4a19814b9009a29baefd4"},
+ {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:231710d57adfd809ef5d34183b8ed1eeae3f76459c18fb4a0b373ad56bedcdd9"},
+ {file = "PyYAML-6.0-cp37-cp37m-win32.whl", hash = "sha256:c5687b8d43cf58545ade1fe3e055f70eac7a5a1a0bf42824308d868289a95737"},
+ {file = "PyYAML-6.0-cp37-cp37m-win_amd64.whl", hash = "sha256:d15a181d1ecd0d4270dc32edb46f7cb7733c7c508857278d3d378d14d606db2d"},
+ {file = "PyYAML-6.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0b4624f379dab24d3725ffde76559cff63d9ec94e1736b556dacdfebe5ab6d4b"},
+ {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:213c60cd50106436cc818accf5baa1aba61c0189ff610f64f4a3e8c6726218ba"},
+ {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9fa600030013c4de8165339db93d182b9431076eb98eb40ee068700c9c813e34"},
+ {file = "PyYAML-6.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:277a0ef2981ca40581a47093e9e2d13b3f1fbbeffae064c1d21bfceba2030287"},
+ {file = "PyYAML-6.0-cp38-cp38-win32.whl", hash = "sha256:d4eccecf9adf6fbcc6861a38015c2a64f38b9d94838ac1810a9023a0609e1b78"},
+ {file = "PyYAML-6.0-cp38-cp38-win_amd64.whl", hash = "sha256:1e4747bc279b4f613a09eb64bba2ba602d8a6664c6ce6396a4d0cd413a50ce07"},
+ {file = "PyYAML-6.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:055d937d65826939cb044fc8c9b08889e8c743fdc6a32b33e2390f66013e449b"},
+ {file = "PyYAML-6.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e61ceaab6f49fb8bdfaa0f92c4b57bcfbea54c09277b1b4f7ac376bfb7a7c174"},
+ {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d67d839ede4ed1b28a4e8909735fc992a923cdb84e618544973d7dfc71540803"},
+ {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cba8c411ef271aa037d7357a2bc8f9ee8b58b9965831d9e51baf703280dc73d3"},
+ {file = "PyYAML-6.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:40527857252b61eacd1d9af500c3337ba8deb8fc298940291486c465c8b46ec0"},
+ {file = "PyYAML-6.0-cp39-cp39-win32.whl", hash = "sha256:b5b9eccad747aabaaffbc6064800670f0c297e52c12754eb1d976c57e4f74dcb"},
+ {file = "PyYAML-6.0-cp39-cp39-win_amd64.whl", hash = "sha256:b3d267842bf12586ba6c734f89d1f5b871df0273157918b0ccefa29deb05c21c"},
+ {file = "PyYAML-6.0.tar.gz", hash = "sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2"},
]
requests = [
- {file = "requests-2.26.0-py2.py3-none-any.whl", hash = "sha256:6c1246513ecd5ecd4528a0906f910e8f0f9c6b8ec72030dc9fd154dc1a6efd24"},
- {file = "requests-2.26.0.tar.gz", hash = "sha256:b8aa58f8cf793ffd8782d3d8cb19e66ef36f7aba4353eec859e74678b01b07a7"},
+ {file = "requests-2.27.1-py2.py3-none-any.whl", hash = "sha256:f22fa1e554c9ddfd16e6e41ac79759e17be9e492b3587efa038054674760e72d"},
+ {file = "requests-2.27.1.tar.gz", hash = "sha256:68d7c56fd5a8999887728ef304a6d12edc7be74f1cfa47714fc8b414525c9a61"},
]
requests-oauthlib = [
- {file = "requests-oauthlib-1.3.0.tar.gz", hash = "sha256:b4261601a71fd721a8bd6d7aa1cc1d6a8a93b4a9f5e96626f8e4d91e8beeaa6a"},
- {file = "requests_oauthlib-1.3.0-py2.py3-none-any.whl", hash = "sha256:7f71572defaecd16372f9006f33c2ec8c077c3cfa6f5911a9a90202beb513f3d"},
- {file = "requests_oauthlib-1.3.0-py3.7.egg", hash = "sha256:fa6c47b933f01060936d87ae9327fead68768b69c6c9ea2109c48be30f2d4dbc"},
+ {file = "requests-oauthlib-1.3.1.tar.gz", hash = "sha256:75beac4a47881eeb94d5ea5d6ad31ef88856affe2332b9aafb52c6452ccf0d7a"},
+ {file = "requests_oauthlib-1.3.1-py2.py3-none-any.whl", hash = "sha256:2577c501a2fb8d05a304c09d090d6e47c306fef15809d102b327cf8364bddab5"},
]
s3transfer = [
- {file = "s3transfer-0.5.0-py3-none-any.whl", hash = "sha256:9c1dc369814391a6bda20ebbf4b70a0f34630592c9aa520856bf384916af2803"},
- {file = "s3transfer-0.5.0.tar.gz", hash = "sha256:50ed823e1dc5868ad40c8dc92072f757aa0e653a192845c94a3b676f4a62da4c"},
+ {file = "s3transfer-0.5.2-py3-none-any.whl", hash = "sha256:7a6f4c4d1fdb9a2b640244008e142cbc2cd3ae34b386584ef044dd0f27101971"},
+ {file = "s3transfer-0.5.2.tar.gz", hash = "sha256:95c58c194ce657a5f4fb0b9e60a84968c808888aed628cd98ab8771fe1db98ed"},
]
six = [
{file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"},
@@ -1887,17 +2058,20 @@ tabulate = [
{file = "tabulate-0.8.9.tar.gz", hash = "sha256:eb1d13f25760052e8931f2ef80aaf6045a6cceb47514db8beab24cded16f13a7"},
]
typing-extensions = [
- {file = "typing_extensions-3.10.0.0-py2-none-any.whl", hash = "sha256:0ac0f89795dd19de6b97debb0c6af1c70987fd80a2d62d1958f7e56fcc31b497"},
- {file = "typing_extensions-3.10.0.0-py3-none-any.whl", hash = "sha256:779383f6086d90c99ae41cf0ff39aac8a7937a9283ce0a414e5dd782f4c94a84"},
- {file = "typing_extensions-3.10.0.0.tar.gz", hash = "sha256:50b6f157849174217d0656f99dc82fe932884fb250826c18350e159ec6cdf342"},
+ {file = "typing_extensions-4.2.0-py3-none-any.whl", hash = "sha256:6657594ee297170d19f67d55c05852a874e7eb634f4f753dbd667855e07c1708"},
+ {file = "typing_extensions-4.2.0.tar.gz", hash = "sha256:f1c24655a0da0d1b67f07e17a5e6b2a105894e6824b92096378bb3668ef02376"},
+]
+tzdata = [
+ {file = "tzdata-2022.1-py2.py3-none-any.whl", hash = "sha256:238e70234214138ed7b4e8a0fab0e5e13872edab3be586ab8198c407620e2ab9"},
+ {file = "tzdata-2022.1.tar.gz", hash = "sha256:8b536a8ec63dc0751342b3984193a3118f8fca2afe25752bb9b7fffd398552d3"},
]
tzlocal = [
- {file = "tzlocal-2.1-py2.py3-none-any.whl", hash = "sha256:e2cb6c6b5b604af38597403e9852872d7f534962ae2954c7f35efcb1ccacf4a4"},
- {file = "tzlocal-2.1.tar.gz", hash = "sha256:643c97c5294aedc737780a49d9df30889321cbe1204eac2c2ec6134035a92e44"},
+ {file = "tzlocal-4.2-py3-none-any.whl", hash = "sha256:89885494684c929d9191c57aa27502afc87a579be5cdd3225c77c463ea043745"},
+ {file = "tzlocal-4.2.tar.gz", hash = "sha256:ee5842fa3a795f023514ac2d801c4a81d1743bbe642e3940143326b3a00addd7"},
]
urllib3 = [
- {file = "urllib3-1.26.6-py2.py3-none-any.whl", hash = "sha256:39fb8672126159acb139a7718dd10806104dec1e2f0f6c88aab05d17df10c8d4"},
- {file = "urllib3-1.26.6.tar.gz", hash = "sha256:f57b4c16c62fa2760b7e3d97c35b255512fb6b59a259730f36ba32ce9f8e342f"},
+ {file = "urllib3-1.26.9-py2.py3-none-any.whl", hash = "sha256:44ece4d53fb1706f667c9bd1c648f5469a2ec925fcf3a776667042d645472c14"},
+ {file = "urllib3-1.26.9.tar.gz", hash = "sha256:aabaf16477806a5e1dd19aa41f8c2b7950dd3c746362d7e3223dbe6de6ac448e"},
]
vcrpy = [
{file = "vcrpy-4.1.1-py2.py3-none-any.whl", hash = "sha256:12c3fcdae7b88ecf11fc0d3e6d77586549d4575a2ceee18e82eee75c1f626162"},
@@ -1908,48 +2082,146 @@ vcrpy-unittest = [
{file = "vcrpy_unittest-0.1.7-py2.py3-none-any.whl", hash = "sha256:b5e2d78bf4c13bc04dca04061dda934abba5f2c9d5201f148747800ff80a762b"},
]
wrapt = [
- {file = "wrapt-1.12.1.tar.gz", hash = "sha256:b62ffa81fb85f4332a4f609cab4ac40709470da05643a082ec1eb88e6d9b97d7"},
+ {file = "wrapt-1.14.0-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:5a9a1889cc01ed2ed5f34574c90745fab1dd06ec2eee663e8ebeefe363e8efd7"},
+ {file = "wrapt-1.14.0-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:9a3ff5fb015f6feb78340143584d9f8a0b91b6293d6b5cf4295b3e95d179b88c"},
+ {file = "wrapt-1.14.0-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:4b847029e2d5e11fd536c9ac3136ddc3f54bc9488a75ef7d040a3900406a91eb"},
+ {file = "wrapt-1.14.0-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:9a5a544861b21e0e7575b6023adebe7a8c6321127bb1d238eb40d99803a0e8bd"},
+ {file = "wrapt-1.14.0-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:88236b90dda77f0394f878324cfbae05ae6fde8a84d548cfe73a75278d760291"},
+ {file = "wrapt-1.14.0-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:f0408e2dbad9e82b4c960274214af533f856a199c9274bd4aff55d4634dedc33"},
+ {file = "wrapt-1.14.0-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:9d8c68c4145041b4eeae96239802cfdfd9ef927754a5be3f50505f09f309d8c6"},
+ {file = "wrapt-1.14.0-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:22626dca56fd7f55a0733e604f1027277eb0f4f3d95ff28f15d27ac25a45f71b"},
+ {file = "wrapt-1.14.0-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:65bf3eb34721bf18b5a021a1ad7aa05947a1767d1aa272b725728014475ea7d5"},
+ {file = "wrapt-1.14.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:09d16ae7a13cff43660155383a2372b4aa09109c7127aa3f24c3cf99b891c330"},
+ {file = "wrapt-1.14.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:debaf04f813ada978d7d16c7dfa16f3c9c2ec9adf4656efdc4defdf841fc2f0c"},
+ {file = "wrapt-1.14.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:748df39ed634851350efa87690c2237a678ed794fe9ede3f0d79f071ee042561"},
+ {file = "wrapt-1.14.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1807054aa7b61ad8d8103b3b30c9764de2e9d0c0978e9d3fc337e4e74bf25faa"},
+ {file = "wrapt-1.14.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:763a73ab377390e2af26042f685a26787c402390f682443727b847e9496e4a2a"},
+ {file = "wrapt-1.14.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:8529b07b49b2d89d6917cfa157d3ea1dfb4d319d51e23030664a827fe5fd2131"},
+ {file = "wrapt-1.14.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:68aeefac31c1f73949662ba8affaf9950b9938b712fb9d428fa2a07e40ee57f8"},
+ {file = "wrapt-1.14.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:59d7d92cee84a547d91267f0fea381c363121d70fe90b12cd88241bd9b0e1763"},
+ {file = "wrapt-1.14.0-cp310-cp310-win32.whl", hash = "sha256:3a88254881e8a8c4784ecc9cb2249ff757fd94b911d5df9a5984961b96113fff"},
+ {file = "wrapt-1.14.0-cp310-cp310-win_amd64.whl", hash = "sha256:9a242871b3d8eecc56d350e5e03ea1854de47b17f040446da0e47dc3e0b9ad4d"},
+ {file = "wrapt-1.14.0-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:a65bffd24409454b889af33b6c49d0d9bcd1a219b972fba975ac935f17bdf627"},
+ {file = "wrapt-1.14.0-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:9d9fcd06c952efa4b6b95f3d788a819b7f33d11bea377be6b8980c95e7d10775"},
+ {file = "wrapt-1.14.0-cp35-cp35m-manylinux2010_i686.whl", hash = "sha256:db6a0ddc1282ceb9032e41853e659c9b638789be38e5b8ad7498caac00231c23"},
+ {file = "wrapt-1.14.0-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:14e7e2c5f5fca67e9a6d5f753d21f138398cad2b1159913ec9e9a67745f09ba3"},
+ {file = "wrapt-1.14.0-cp35-cp35m-win32.whl", hash = "sha256:6d9810d4f697d58fd66039ab959e6d37e63ab377008ef1d63904df25956c7db0"},
+ {file = "wrapt-1.14.0-cp35-cp35m-win_amd64.whl", hash = "sha256:d808a5a5411982a09fef6b49aac62986274ab050e9d3e9817ad65b2791ed1425"},
+ {file = "wrapt-1.14.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:b77159d9862374da213f741af0c361720200ab7ad21b9f12556e0eb95912cd48"},
+ {file = "wrapt-1.14.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:36a76a7527df8583112b24adc01748cd51a2d14e905b337a6fefa8b96fc708fb"},
+ {file = "wrapt-1.14.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a0057b5435a65b933cbf5d859cd4956624df37b8bf0917c71756e4b3d9958b9e"},
+ {file = "wrapt-1.14.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a0a4ca02752ced5f37498827e49c414d694ad7cf451ee850e3ff160f2bee9d3"},
+ {file = "wrapt-1.14.0-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:8c6be72eac3c14baa473620e04f74186c5d8f45d80f8f2b4eda6e1d18af808e8"},
+ {file = "wrapt-1.14.0-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:21b1106bff6ece8cb203ef45b4f5778d7226c941c83aaaa1e1f0f4f32cc148cd"},
+ {file = "wrapt-1.14.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:493da1f8b1bb8a623c16552fb4a1e164c0200447eb83d3f68b44315ead3f9036"},
+ {file = "wrapt-1.14.0-cp36-cp36m-win32.whl", hash = "sha256:89ba3d548ee1e6291a20f3c7380c92f71e358ce8b9e48161401e087e0bc740f8"},
+ {file = "wrapt-1.14.0-cp36-cp36m-win_amd64.whl", hash = "sha256:729d5e96566f44fccac6c4447ec2332636b4fe273f03da128fff8d5559782b06"},
+ {file = "wrapt-1.14.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:891c353e95bb11abb548ca95c8b98050f3620a7378332eb90d6acdef35b401d4"},
+ {file = "wrapt-1.14.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:23f96134a3aa24cc50614920cc087e22f87439053d886e474638c68c8d15dc80"},
+ {file = "wrapt-1.14.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6807bcee549a8cb2f38f73f469703a1d8d5d990815c3004f21ddb68a567385ce"},
+ {file = "wrapt-1.14.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6915682f9a9bc4cf2908e83caf5895a685da1fbd20b6d485dafb8e218a338279"},
+ {file = "wrapt-1.14.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:f2f3bc7cd9c9fcd39143f11342eb5963317bd54ecc98e3650ca22704b69d9653"},
+ {file = "wrapt-1.14.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:3a71dbd792cc7a3d772ef8cd08d3048593f13d6f40a11f3427c000cf0a5b36a0"},
+ {file = "wrapt-1.14.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:5a0898a640559dec00f3614ffb11d97a2666ee9a2a6bad1259c9facd01a1d4d9"},
+ {file = "wrapt-1.14.0-cp37-cp37m-win32.whl", hash = "sha256:167e4793dc987f77fd476862d32fa404d42b71f6a85d3b38cbce711dba5e6b68"},
+ {file = "wrapt-1.14.0-cp37-cp37m-win_amd64.whl", hash = "sha256:d066ffc5ed0be00cd0352c95800a519cf9e4b5dd34a028d301bdc7177c72daf3"},
+ {file = "wrapt-1.14.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d9bdfa74d369256e4218000a629978590fd7cb6cf6893251dad13d051090436d"},
+ {file = "wrapt-1.14.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:2498762814dd7dd2a1d0248eda2afbc3dd9c11537bc8200a4b21789b6df6cd38"},
+ {file = "wrapt-1.14.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5f24ca7953f2643d59a9c87d6e272d8adddd4a53bb62b9208f36db408d7aafc7"},
+ {file = "wrapt-1.14.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5b835b86bd5a1bdbe257d610eecab07bf685b1af2a7563093e0e69180c1d4af1"},
+ {file = "wrapt-1.14.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b21650fa6907e523869e0396c5bd591cc326e5c1dd594dcdccac089561cacfb8"},
+ {file = "wrapt-1.14.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:354d9fc6b1e44750e2a67b4b108841f5f5ea08853453ecbf44c81fdc2e0d50bd"},
+ {file = "wrapt-1.14.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:1f83e9c21cd5275991076b2ba1cd35418af3504667affb4745b48937e214bafe"},
+ {file = "wrapt-1.14.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:61e1a064906ccba038aa3c4a5a82f6199749efbbb3cef0804ae5c37f550eded0"},
+ {file = "wrapt-1.14.0-cp38-cp38-win32.whl", hash = "sha256:28c659878f684365d53cf59dc9a1929ea2eecd7ac65da762be8b1ba193f7e84f"},
+ {file = "wrapt-1.14.0-cp38-cp38-win_amd64.whl", hash = "sha256:b0ed6ad6c9640671689c2dbe6244680fe8b897c08fd1fab2228429b66c518e5e"},
+ {file = "wrapt-1.14.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b3f7e671fb19734c872566e57ce7fc235fa953d7c181bb4ef138e17d607dc8a1"},
+ {file = "wrapt-1.14.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:87fa943e8bbe40c8c1ba4086971a6fefbf75e9991217c55ed1bcb2f1985bd3d4"},
+ {file = "wrapt-1.14.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4775a574e9d84e0212f5b18886cace049a42e13e12009bb0491562a48bb2b758"},
+ {file = "wrapt-1.14.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9d57677238a0c5411c76097b8b93bdebb02eb845814c90f0b01727527a179e4d"},
+ {file = "wrapt-1.14.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:00108411e0f34c52ce16f81f1d308a571df7784932cc7491d1e94be2ee93374b"},
+ {file = "wrapt-1.14.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d332eecf307fca852d02b63f35a7872de32d5ba8b4ec32da82f45df986b39ff6"},
+ {file = "wrapt-1.14.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:01f799def9b96a8ec1ef6b9c1bbaf2bbc859b87545efbecc4a78faea13d0e3a0"},
+ {file = "wrapt-1.14.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:47045ed35481e857918ae78b54891fac0c1d197f22c95778e66302668309336c"},
+ {file = "wrapt-1.14.0-cp39-cp39-win32.whl", hash = "sha256:2eca15d6b947cfff51ed76b2d60fd172c6ecd418ddab1c5126032d27f74bc350"},
+ {file = "wrapt-1.14.0-cp39-cp39-win_amd64.whl", hash = "sha256:bb36fbb48b22985d13a6b496ea5fb9bb2a076fea943831643836c9f6febbcfdc"},
+ {file = "wrapt-1.14.0.tar.gz", hash = "sha256:8323a43bd9c91f62bb7d4be74cc9ff10090e7ef820e27bfe8815c57e68261311"},
]
yarl = [
- {file = "yarl-1.6.3-cp36-cp36m-macosx_10_14_x86_64.whl", hash = "sha256:0355a701b3998dcd832d0dc47cc5dedf3874f966ac7f870e0f3a6788d802d434"},
- {file = "yarl-1.6.3-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:bafb450deef6861815ed579c7a6113a879a6ef58aed4c3a4be54400ae8871478"},
- {file = "yarl-1.6.3-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:547f7665ad50fa8563150ed079f8e805e63dd85def6674c97efd78eed6c224a6"},
- {file = "yarl-1.6.3-cp36-cp36m-manylinux2014_i686.whl", hash = "sha256:63f90b20ca654b3ecc7a8d62c03ffa46999595f0167d6450fa8383bab252987e"},
- {file = "yarl-1.6.3-cp36-cp36m-manylinux2014_ppc64le.whl", hash = "sha256:97b5bdc450d63c3ba30a127d018b866ea94e65655efaf889ebeabc20f7d12406"},
- {file = "yarl-1.6.3-cp36-cp36m-manylinux2014_s390x.whl", hash = "sha256:d8d07d102f17b68966e2de0e07bfd6e139c7c02ef06d3a0f8d2f0f055e13bb76"},
- {file = "yarl-1.6.3-cp36-cp36m-manylinux2014_x86_64.whl", hash = "sha256:15263c3b0b47968c1d90daa89f21fcc889bb4b1aac5555580d74565de6836366"},
- {file = "yarl-1.6.3-cp36-cp36m-win32.whl", hash = "sha256:b5dfc9a40c198334f4f3f55880ecf910adebdcb2a0b9a9c23c9345faa9185721"},
- {file = "yarl-1.6.3-cp36-cp36m-win_amd64.whl", hash = "sha256:b2e9a456c121e26d13c29251f8267541bd75e6a1ccf9e859179701c36a078643"},
- {file = "yarl-1.6.3-cp37-cp37m-macosx_10_14_x86_64.whl", hash = "sha256:ce3beb46a72d9f2190f9e1027886bfc513702d748047b548b05dab7dfb584d2e"},
- {file = "yarl-1.6.3-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:2ce4c621d21326a4a5500c25031e102af589edb50c09b321049e388b3934eec3"},
- {file = "yarl-1.6.3-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:d26608cf178efb8faa5ff0f2d2e77c208f471c5a3709e577a7b3fd0445703ac8"},
- {file = "yarl-1.6.3-cp37-cp37m-manylinux2014_i686.whl", hash = "sha256:4c5bcfc3ed226bf6419f7a33982fb4b8ec2e45785a0561eb99274ebbf09fdd6a"},
- {file = "yarl-1.6.3-cp37-cp37m-manylinux2014_ppc64le.whl", hash = "sha256:4736eaee5626db8d9cda9eb5282028cc834e2aeb194e0d8b50217d707e98bb5c"},
- {file = "yarl-1.6.3-cp37-cp37m-manylinux2014_s390x.whl", hash = "sha256:68dc568889b1c13f1e4745c96b931cc94fdd0defe92a72c2b8ce01091b22e35f"},
- {file = "yarl-1.6.3-cp37-cp37m-manylinux2014_x86_64.whl", hash = "sha256:7356644cbed76119d0b6bd32ffba704d30d747e0c217109d7979a7bc36c4d970"},
- {file = "yarl-1.6.3-cp37-cp37m-win32.whl", hash = "sha256:00d7ad91b6583602eb9c1d085a2cf281ada267e9a197e8b7cae487dadbfa293e"},
- {file = "yarl-1.6.3-cp37-cp37m-win_amd64.whl", hash = "sha256:69ee97c71fee1f63d04c945f56d5d726483c4762845400a6795a3b75d56b6c50"},
- {file = "yarl-1.6.3-cp38-cp38-macosx_10_14_x86_64.whl", hash = "sha256:e46fba844f4895b36f4c398c5af062a9808d1f26b2999c58909517384d5deda2"},
- {file = "yarl-1.6.3-cp38-cp38-manylinux1_i686.whl", hash = "sha256:31ede6e8c4329fb81c86706ba8f6bf661a924b53ba191b27aa5fcee5714d18ec"},
- {file = "yarl-1.6.3-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:fcbb48a93e8699eae920f8d92f7160c03567b421bc17362a9ffbbd706a816f71"},
- {file = "yarl-1.6.3-cp38-cp38-manylinux2014_i686.whl", hash = "sha256:72a660bdd24497e3e84f5519e57a9ee9220b6f3ac4d45056961bf22838ce20cc"},
- {file = "yarl-1.6.3-cp38-cp38-manylinux2014_ppc64le.whl", hash = "sha256:324ba3d3c6fee56e2e0b0d09bf5c73824b9f08234339d2b788af65e60040c959"},
- {file = "yarl-1.6.3-cp38-cp38-manylinux2014_s390x.whl", hash = "sha256:e6b5460dc5ad42ad2b36cca524491dfcaffbfd9c8df50508bddc354e787b8dc2"},
- {file = "yarl-1.6.3-cp38-cp38-manylinux2014_x86_64.whl", hash = "sha256:6d6283d8e0631b617edf0fd726353cb76630b83a089a40933043894e7f6721e2"},
- {file = "yarl-1.6.3-cp38-cp38-win32.whl", hash = "sha256:9ede61b0854e267fd565e7527e2f2eb3ef8858b301319be0604177690e1a3896"},
- {file = "yarl-1.6.3-cp38-cp38-win_amd64.whl", hash = "sha256:f0b059678fd549c66b89bed03efcabb009075bd131c248ecdf087bdb6faba24a"},
- {file = "yarl-1.6.3-cp39-cp39-macosx_10_14_x86_64.whl", hash = "sha256:329412812ecfc94a57cd37c9d547579510a9e83c516bc069470db5f75684629e"},
- {file = "yarl-1.6.3-cp39-cp39-manylinux1_i686.whl", hash = "sha256:c49ff66d479d38ab863c50f7bb27dee97c6627c5fe60697de15529da9c3de724"},
- {file = "yarl-1.6.3-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:f040bcc6725c821a4c0665f3aa96a4d0805a7aaf2caf266d256b8ed71b9f041c"},
- {file = "yarl-1.6.3-cp39-cp39-manylinux2014_i686.whl", hash = "sha256:d5c32c82990e4ac4d8150fd7652b972216b204de4e83a122546dce571c1bdf25"},
- {file = "yarl-1.6.3-cp39-cp39-manylinux2014_ppc64le.whl", hash = "sha256:d597767fcd2c3dc49d6eea360c458b65643d1e4dbed91361cf5e36e53c1f8c96"},
- {file = "yarl-1.6.3-cp39-cp39-manylinux2014_s390x.whl", hash = "sha256:8aa3decd5e0e852dc68335abf5478a518b41bf2ab2f330fe44916399efedfae0"},
- {file = "yarl-1.6.3-cp39-cp39-manylinux2014_x86_64.whl", hash = "sha256:73494d5b71099ae8cb8754f1df131c11d433b387efab7b51849e7e1e851f07a4"},
- {file = "yarl-1.6.3-cp39-cp39-win32.whl", hash = "sha256:5b883e458058f8d6099e4420f0cc2567989032b5f34b271c0827de9f1079a424"},
- {file = "yarl-1.6.3-cp39-cp39-win_amd64.whl", hash = "sha256:4953fb0b4fdb7e08b2f3b3be80a00d28c5c8a2056bb066169de00e6501b986b6"},
- {file = "yarl-1.6.3.tar.gz", hash = "sha256:8a9066529240171b68893d60dca86a763eae2139dd42f42106b03cf4b426bf10"},
+ {file = "yarl-1.7.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:f2a8508f7350512434e41065684076f640ecce176d262a7d54f0da41d99c5a95"},
+ {file = "yarl-1.7.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:da6df107b9ccfe52d3a48165e48d72db0eca3e3029b5b8cb4fe6ee3cb870ba8b"},
+ {file = "yarl-1.7.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a1d0894f238763717bdcfea74558c94e3bc34aeacd3351d769460c1a586a8b05"},
+ {file = "yarl-1.7.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dfe4b95b7e00c6635a72e2d00b478e8a28bfb122dc76349a06e20792eb53a523"},
+ {file = "yarl-1.7.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c145ab54702334c42237a6c6c4cc08703b6aa9b94e2f227ceb3d477d20c36c63"},
+ {file = "yarl-1.7.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1ca56f002eaf7998b5fcf73b2421790da9d2586331805f38acd9997743114e98"},
+ {file = "yarl-1.7.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:1d3d5ad8ea96bd6d643d80c7b8d5977b4e2fb1bab6c9da7322616fd26203d125"},
+ {file = "yarl-1.7.2-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:167ab7f64e409e9bdd99333fe8c67b5574a1f0495dcfd905bc7454e766729b9e"},
+ {file = "yarl-1.7.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:95a1873b6c0dd1c437fb3bb4a4aaa699a48c218ac7ca1e74b0bee0ab16c7d60d"},
+ {file = "yarl-1.7.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:6152224d0a1eb254f97df3997d79dadd8bb2c1a02ef283dbb34b97d4f8492d23"},
+ {file = "yarl-1.7.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:5bb7d54b8f61ba6eee541fba4b83d22b8a046b4ef4d8eb7f15a7e35db2e1e245"},
+ {file = "yarl-1.7.2-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:9c1f083e7e71b2dd01f7cd7434a5f88c15213194df38bc29b388ccdf1492b739"},
+ {file = "yarl-1.7.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:f44477ae29025d8ea87ec308539f95963ffdc31a82f42ca9deecf2d505242e72"},
+ {file = "yarl-1.7.2-cp310-cp310-win32.whl", hash = "sha256:cff3ba513db55cc6a35076f32c4cdc27032bd075c9faef31fec749e64b45d26c"},
+ {file = "yarl-1.7.2-cp310-cp310-win_amd64.whl", hash = "sha256:c9c6d927e098c2d360695f2e9d38870b2e92e0919be07dbe339aefa32a090265"},
+ {file = "yarl-1.7.2-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:9b4c77d92d56a4c5027572752aa35082e40c561eec776048330d2907aead891d"},
+ {file = "yarl-1.7.2-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c01a89a44bb672c38f42b49cdb0ad667b116d731b3f4c896f72302ff77d71656"},
+ {file = "yarl-1.7.2-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c19324a1c5399b602f3b6e7db9478e5b1adf5cf58901996fc973fe4fccd73eed"},
+ {file = "yarl-1.7.2-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3abddf0b8e41445426d29f955b24aeecc83fa1072be1be4e0d194134a7d9baee"},
+ {file = "yarl-1.7.2-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:6a1a9fe17621af43e9b9fcea8bd088ba682c8192d744b386ee3c47b56eaabb2c"},
+ {file = "yarl-1.7.2-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:8b0915ee85150963a9504c10de4e4729ae700af11df0dc5550e6587ed7891e92"},
+ {file = "yarl-1.7.2-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:29e0656d5497733dcddc21797da5a2ab990c0cb9719f1f969e58a4abac66234d"},
+ {file = "yarl-1.7.2-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:bf19725fec28452474d9887a128e98dd67eee7b7d52e932e6949c532d820dc3b"},
+ {file = "yarl-1.7.2-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:d6f3d62e16c10e88d2168ba2d065aa374e3c538998ed04996cd373ff2036d64c"},
+ {file = "yarl-1.7.2-cp36-cp36m-musllinux_1_1_s390x.whl", hash = "sha256:ac10bbac36cd89eac19f4e51c032ba6b412b3892b685076f4acd2de18ca990aa"},
+ {file = "yarl-1.7.2-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:aa32aaa97d8b2ed4e54dc65d241a0da1c627454950f7d7b1f95b13985afd6c5d"},
+ {file = "yarl-1.7.2-cp36-cp36m-win32.whl", hash = "sha256:87f6e082bce21464857ba58b569370e7b547d239ca22248be68ea5d6b51464a1"},
+ {file = "yarl-1.7.2-cp36-cp36m-win_amd64.whl", hash = "sha256:ac35ccde589ab6a1870a484ed136d49a26bcd06b6a1c6397b1967ca13ceb3913"},
+ {file = "yarl-1.7.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:a467a431a0817a292121c13cbe637348b546e6ef47ca14a790aa2fa8cc93df63"},
+ {file = "yarl-1.7.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6ab0c3274d0a846840bf6c27d2c60ba771a12e4d7586bf550eefc2df0b56b3b4"},
+ {file = "yarl-1.7.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d260d4dc495c05d6600264a197d9d6f7fc9347f21d2594926202fd08cf89a8ba"},
+ {file = "yarl-1.7.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fc4dd8b01a8112809e6b636b00f487846956402834a7fd59d46d4f4267181c41"},
+ {file = "yarl-1.7.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:c1164a2eac148d85bbdd23e07dfcc930f2e633220f3eb3c3e2a25f6148c2819e"},
+ {file = "yarl-1.7.2-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:67e94028817defe5e705079b10a8438b8cb56e7115fa01640e9c0bb3edf67332"},
+ {file = "yarl-1.7.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:89ccbf58e6a0ab89d487c92a490cb5660d06c3a47ca08872859672f9c511fc52"},
+ {file = "yarl-1.7.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:8cce6f9fa3df25f55521fbb5c7e4a736683148bcc0c75b21863789e5185f9185"},
+ {file = "yarl-1.7.2-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:211fcd65c58bf250fb994b53bc45a442ddc9f441f6fec53e65de8cba48ded986"},
+ {file = "yarl-1.7.2-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:c10ea1e80a697cf7d80d1ed414b5cb8f1eec07d618f54637067ae3c0334133c4"},
+ {file = "yarl-1.7.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:52690eb521d690ab041c3919666bea13ab9fbff80d615ec16fa81a297131276b"},
+ {file = "yarl-1.7.2-cp37-cp37m-win32.whl", hash = "sha256:695ba021a9e04418507fa930d5f0704edbce47076bdcfeeaba1c83683e5649d1"},
+ {file = "yarl-1.7.2-cp37-cp37m-win_amd64.whl", hash = "sha256:c17965ff3706beedafd458c452bf15bac693ecd146a60a06a214614dc097a271"},
+ {file = "yarl-1.7.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:fce78593346c014d0d986b7ebc80d782b7f5e19843ca798ed62f8e3ba8728576"},
+ {file = "yarl-1.7.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:c2a1ac41a6aa980db03d098a5531f13985edcb451bcd9d00670b03129922cd0d"},
+ {file = "yarl-1.7.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:39d5493c5ecd75c8093fa7700a2fb5c94fe28c839c8e40144b7ab7ccba6938c8"},
+ {file = "yarl-1.7.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1eb6480ef366d75b54c68164094a6a560c247370a68c02dddb11f20c4c6d3c9d"},
+ {file = "yarl-1.7.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5ba63585a89c9885f18331a55d25fe81dc2d82b71311ff8bd378fc8004202ff6"},
+ {file = "yarl-1.7.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e39378894ee6ae9f555ae2de332d513a5763276a9265f8e7cbaeb1b1ee74623a"},
+ {file = "yarl-1.7.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:c0910c6b6c31359d2f6184828888c983d54d09d581a4a23547a35f1d0b9484b1"},
+ {file = "yarl-1.7.2-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:6feca8b6bfb9eef6ee057628e71e1734caf520a907b6ec0d62839e8293e945c0"},
+ {file = "yarl-1.7.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:8300401dc88cad23f5b4e4c1226f44a5aa696436a4026e456fe0e5d2f7f486e6"},
+ {file = "yarl-1.7.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:788713c2896f426a4e166b11f4ec538b5736294ebf7d5f654ae445fd44270832"},
+ {file = "yarl-1.7.2-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:fd547ec596d90c8676e369dd8a581a21227fe9b4ad37d0dc7feb4ccf544c2d59"},
+ {file = "yarl-1.7.2-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:737e401cd0c493f7e3dd4db72aca11cfe069531c9761b8ea474926936b3c57c8"},
+ {file = "yarl-1.7.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:baf81561f2972fb895e7844882898bda1eef4b07b5b385bcd308d2098f1a767b"},
+ {file = "yarl-1.7.2-cp38-cp38-win32.whl", hash = "sha256:ede3b46cdb719c794427dcce9d8beb4abe8b9aa1e97526cc20de9bd6583ad1ef"},
+ {file = "yarl-1.7.2-cp38-cp38-win_amd64.whl", hash = "sha256:cc8b7a7254c0fc3187d43d6cb54b5032d2365efd1df0cd1749c0c4df5f0ad45f"},
+ {file = "yarl-1.7.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:580c1f15500e137a8c37053e4cbf6058944d4c114701fa59944607505c2fe3a0"},
+ {file = "yarl-1.7.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3ec1d9a0d7780416e657f1e405ba35ec1ba453a4f1511eb8b9fbab81cb8b3ce1"},
+ {file = "yarl-1.7.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3bf8cfe8856708ede6a73907bf0501f2dc4e104085e070a41f5d88e7faf237f3"},
+ {file = "yarl-1.7.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1be4bbb3d27a4e9aa5f3df2ab61e3701ce8fcbd3e9846dbce7c033a7e8136746"},
+ {file = "yarl-1.7.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:534b047277a9a19d858cde163aba93f3e1677d5acd92f7d10ace419d478540de"},
+ {file = "yarl-1.7.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c6ddcd80d79c96eb19c354d9dca95291589c5954099836b7c8d29278a7ec0bda"},
+ {file = "yarl-1.7.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:9bfcd43c65fbb339dc7086b5315750efa42a34eefad0256ba114cd8ad3896f4b"},
+ {file = "yarl-1.7.2-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f64394bd7ceef1237cc604b5a89bf748c95982a84bcd3c4bbeb40f685c810794"},
+ {file = "yarl-1.7.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:044daf3012e43d4b3538562da94a88fb12a6490652dbc29fb19adfa02cf72eac"},
+ {file = "yarl-1.7.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:368bcf400247318382cc150aaa632582d0780b28ee6053cd80268c7e72796dec"},
+ {file = "yarl-1.7.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:bab827163113177aee910adb1f48ff7af31ee0289f434f7e22d10baf624a6dfe"},
+ {file = "yarl-1.7.2-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:0cba38120db72123db7c58322fa69e3c0efa933040ffb586c3a87c063ec7cae8"},
+ {file = "yarl-1.7.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:59218fef177296451b23214c91ea3aba7858b4ae3306dde120224cfe0f7a6ee8"},
+ {file = "yarl-1.7.2-cp39-cp39-win32.whl", hash = "sha256:1edc172dcca3f11b38a9d5c7505c83c1913c0addc99cd28e993efeaafdfaa18d"},
+ {file = "yarl-1.7.2-cp39-cp39-win_amd64.whl", hash = "sha256:797c2c412b04403d2da075fb93c123df35239cd7b4cc4e0cd9e5839b73f52c58"},
+ {file = "yarl-1.7.2.tar.gz", hash = "sha256:45399b46d60c253327a460e99856752009fcee5f5d3c80b2f7c0cae1c38d56dd"},
]
zipp = [
- {file = "zipp-3.5.0-py3-none-any.whl", hash = "sha256:957cfda87797e389580cb8b9e3870841ca991e2125350677b2ca83a0e99390a3"},
- {file = "zipp-3.5.0.tar.gz", hash = "sha256:f5812b1e007e48cff63449a5e9f4e7ebea716b4111f9c4f9a645f91d579bf0c4"},
+ {file = "zipp-3.8.0-py3-none-any.whl", hash = "sha256:c4f6e5bbf48e74f7a38e7cc5b0480ff42b0ae5178957d564d18932525d5cf099"},
+ {file = "zipp-3.8.0.tar.gz", hash = "sha256:56bf8aadb83c24db6c4b577e13de374ccfb67da2078beba1d037c17980bf43ad"},
]
diff --git a/tools/c7n_azure/pyproject.toml b/tools/c7n_azure/pyproject.toml
index 3ddb5925813..063260184bb 100644
--- a/tools/c7n_azure/pyproject.toml
+++ b/tools/c7n_azure/pyproject.toml
@@ -1,6 +1,6 @@
[tool.poetry]
name = "c7n_azure"
-version = "0.7.13"
+version = "0.7.15"
description = "Cloud Custodian - Azure Support"
readme = "readme.md"
homepage="https://cloudcustodian.io"
@@ -15,9 +15,10 @@ classifiers=[
]
[tool.poetry.dependencies]
-python = "^3.6"
+python = "^3.7"
azure-mgmt-authorization = "^1.0.0"
+azure-mgmt-advisor = "^9.0.0"
azure-mgmt-apimanagement = "^1.0.0"
azure-mgmt-applicationinsights = "^1.0.0"
azure-mgmt-batch = "^15.0.0"
@@ -56,7 +57,7 @@ applicationinsights = "^0.11.9"
apscheduler = "^3.6.3"
distlib = "^0.3.0"
requests = "^2.22.0"
-PyJWT = "^1.7.1"
+PyJWT = ">=1.7.1,<3.0.0"
adal = "^1.2.6"
@@ -66,7 +67,7 @@ netaddr = "^0.7.19"
azure-storage-file = "^2.1.0"
azure-mgmt-policyinsights = "^1.0.0"
azure-mgmt-monitor = "^2.0.0"
-click = "^7.0"
+click = "^8.0"
azure-cosmos = "^3.1.2"
azure-mgmt-redis = "^12.0.0"
azure-keyvault-secrets = "^4.2.0"
@@ -75,12 +76,13 @@ azure-keyvault-certificates = "^4.2.1"
azure-identity = "^1.5.0"
azure-keyvault = "^4.1.0"
azure-storage-file-share = "^12.4.1"
-cryptography = "^3.4.6"
+cryptography = ">=3.4.6"
azure-mgmt-msi = "^1.0.0"
jmespath = "^0.10.0"
azure-mgmt-servicefabric = "^1.0.0"
azure-mgmt-trafficmanager = "^0.51.0"
azure-mgmt-frontdoor = "^1.0.0"
+azure-mgmt-security = "^1.0.0"
[tool.poetry.dev-dependencies]
# setup custodian as a dev dependency
diff --git a/tools/c7n_azure/requirements.txt b/tools/c7n_azure/requirements.txt
index 2f440a7722f..5acf8cea8f2 100644
--- a/tools/c7n_azure/requirements.txt
+++ b/tools/c7n_azure/requirements.txt
@@ -1,18 +1,19 @@
adal==1.2.7
applicationinsights==0.11.10
-apscheduler==3.7.0; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.5.0" and python_version < "4")
-azure-common==1.1.27
-azure-core==1.17.0
+apscheduler==3.9.1; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.5.0" and python_version < "4")
+azure-common==1.1.28; python_version >= "3.6"
+azure-core==1.23.1; python_version >= "3.6"
azure-cosmos==3.2.0
azure-cosmosdb-nspkg==2.0.2
azure-cosmosdb-table==1.0.6
-azure-functions==1.7.2; python_version >= "3" and python_version < "4"
+azure-functions==1.10.1; python_version >= "3" and python_version < "4"
azure-graphrbac==0.61.1
-azure-identity==1.6.0
-azure-keyvault-certificates==4.3.0
-azure-keyvault-keys==4.4.0
-azure-keyvault-secrets==4.3.0
-azure-keyvault==4.1.0
+azure-identity==1.9.0; python_version >= "3.6"
+azure-keyvault-certificates==4.4.0; python_version >= "3.6"
+azure-keyvault-keys==4.5.0; python_version >= "3.6"
+azure-keyvault-secrets==4.4.0; python_version >= "3.6"
+azure-keyvault==4.2.0
+azure-mgmt-advisor==9.0.0
azure-mgmt-apimanagement==1.0.0
azure-mgmt-applicationinsights==1.0.0
azure-mgmt-authorization==1.0.0
@@ -23,7 +24,7 @@ azure-mgmt-compute==19.0.0
azure-mgmt-containerinstance==7.0.0
azure-mgmt-containerregistry==8.0.0b1
azure-mgmt-containerservice==15.1.0
-azure-mgmt-core==1.3.0
+azure-mgmt-core==1.3.0; python_version >= "3.6"
azure-mgmt-cosmosdb==6.4.0
azure-mgmt-costmanagement==1.0.0
azure-mgmt-databricks==1.0.0b1
@@ -32,7 +33,7 @@ azure-mgmt-datalake-store==1.0.0
azure-mgmt-dns==8.0.0b1
azure-mgmt-eventgrid==8.0.0
azure-mgmt-eventhub==8.0.0
-azure-mgmt-frontdoor==1.0.0
+azure-mgmt-frontdoor==1.0.1; python_version >= "3.6"
azure-mgmt-hdinsight==7.0.0
azure-mgmt-iothub==1.0.0
azure-mgmt-keyvault==8.0.0
@@ -47,6 +48,7 @@ azure-mgmt-redis==12.0.0
azure-mgmt-resource==16.1.0
azure-mgmt-resourcegraph==7.0.0
azure-mgmt-search==8.0.0
+azure-mgmt-security==1.0.0
azure-mgmt-servicefabric==1.0.0
azure-mgmt-sql==1.0.0
azure-mgmt-storage==17.1.0
@@ -54,35 +56,41 @@ azure-mgmt-subscription==1.0.0
azure-mgmt-trafficmanager==0.51.0
azure-mgmt-web==2.0.0
azure-nspkg==3.0.2
-azure-storage-blob==12.8.1
+azure-storage-blob==12.11.0; python_version >= "3.6"
azure-storage-common==2.1.0
-azure-storage-file-share==12.5.0
+azure-storage-file-share==12.7.0; python_version >= "3.6"
azure-storage-file==2.1.0
-azure-storage-queue==12.1.6
-certifi==2021.5.30; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0"
-cffi==1.14.6; python_version >= "3.6"
-charset-normalizer==2.0.4; python_full_version >= "3.6.0" and python_version >= "3"
-click==7.1.2; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.5.0")
-cryptography==3.4.7; python_version >= "3.6"
-distlib==0.3.2
-idna==3.2; python_version >= "3.5" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.5"
-importlib-resources==5.2.2; python_version >= "3.6" and python_version < "3.7"
-isodate==0.6.0
+azure-storage-queue==12.2.0; python_version >= "3.6"
+backports.zoneinfo==0.2.1; python_version >= "3.6" and python_full_version < "3.0.0" and python_version < "3.9" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version < "4" and python_version >= "3.6") or python_full_version >= "3.5.0" and python_version < "3.9" and python_version >= "3.6" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version < "4" and python_version >= "3.6")
+certifi==2021.10.8; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
+cffi==1.15.0; python_version >= "3.6"
+charset-normalizer==2.0.12; python_full_version >= "3.6.0" and python_version >= "3.6"
+click==8.1.2; python_version >= "3.7"
+colorama==0.4.4; python_version >= "3.7" and python_full_version < "3.0.0" and platform_system == "Windows" or platform_system == "Windows" and python_version >= "3.7" and python_full_version >= "3.5.0"
+cryptography==36.0.2; python_version >= "3.6"
+distlib==0.3.4
+idna==3.3; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
+importlib-metadata==4.11.3; python_version < "3.8" and python_version >= "3.7"
+isodate==0.6.1; python_version >= "3.6"
jmespath==0.10.0; (python_version >= "2.6" and python_full_version < "3.0.0") or (python_full_version >= "3.3.0")
-msal-extensions==0.3.0
-msal==1.13.0
-msrest==0.6.21
+msal-extensions==0.3.1; python_version >= "3.6"
+msal==1.17.0; python_version >= "3.6"
+msrest==0.6.21; python_version >= "3.6"
msrestazure==0.6.4
netaddr==0.7.20
-oauthlib==3.1.1; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
-portalocker==1.7.1
-pycparser==2.20; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
+oauthlib==3.2.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
+portalocker==2.4.0
+pycparser==2.21; python_version >= "3.6" and python_full_version < "3.0.0" or python_version >= "3.6" and python_full_version >= "3.4.0"
pyjwt==1.7.1
python-dateutil==2.8.2; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.3.0"
-pytz==2021.1; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version < "4"
-requests-oauthlib==1.3.0; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0"
-requests==2.26.0; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.6.0")
-six==1.16.0; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version < "4"
-tzlocal==2.1; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version < "4"
-urllib3==1.26.6; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version < "4"
-zipp==3.5.0; python_version >= "3.6" and python_version < "3.7"
+pytz-deprecation-shim==0.1.0.post0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version < "4" and python_version >= "3.6"
+pytz==2022.1; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version < "4"
+pywin32==303; python_version >= "3.6" and platform_system == "Windows"
+requests-oauthlib==1.3.1; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
+requests==2.27.1; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.6.0")
+six==1.16.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version < "4" and python_version >= "3.6"
+typing-extensions==4.2.0; python_version < "3.8" and python_version >= "3.7"
+tzdata==2022.1; python_version >= "3.6" and python_full_version < "3.0.0" and platform_system == "Windows" or python_full_version >= "3.6.0" and python_version < "4" and python_version >= "3.6" and platform_system == "Windows"
+tzlocal==4.2; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version < "4" and python_version >= "3.6"
+urllib3==1.26.9; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version < "4" and python_version >= "3.6"
+zipp==3.8.0; python_version < "3.8" and python_version >= "3.7"
diff --git a/tools/c7n_azure/setup.py b/tools/c7n_azure/setup.py
index 596ca43d138..747ac6a4ff0 100644
--- a/tools/c7n_azure/setup.py
+++ b/tools/c7n_azure/setup.py
@@ -18,8 +18,8 @@
'adal>=1.2.6,<2.0.0',
'applicationinsights>=0.11.9,<0.12.0',
'apscheduler>=3.6.3,<4.0.0',
- 'argcomplete (>=1.12.3,<2.0.0)',
- 'attrs (>=21.2.0,<22.0.0)',
+ 'argcomplete (>=2.0.0,<3.0.0)',
+ 'attrs (>=21.4.0,<22.0.0)',
'azure-cosmos>=3.1.2,<4.0.0',
'azure-cosmosdb-table>=1.0.6,<2.0.0',
'azure-graphrbac>=0.61.1,<0.62.0',
@@ -28,6 +28,7 @@
'azure-keyvault-keys>=4.3.1,<5.0.0',
'azure-keyvault-secrets>=4.2.0,<5.0.0',
'azure-keyvault>=4.1.0,<5.0.0',
+ 'azure-mgmt-advisor>=9.0.0,<10.0.0',
'azure-mgmt-apimanagement>=1.0.0,<2.0.0',
'azure-mgmt-applicationinsights>=1.0.0,<2.0.0',
'azure-mgmt-authorization>=1.0.0,<2.0.0',
@@ -61,6 +62,7 @@
'azure-mgmt-resource>=16.0.0,<17.0.0',
'azure-mgmt-resourcegraph>=7.0.0,<8.0.0',
'azure-mgmt-search>=8.0.0,<9.0.0',
+ 'azure-mgmt-security>=1.0.0,<2.0.0',
'azure-mgmt-servicefabric>=1.0.0,<2.0.0',
'azure-mgmt-sql>=1.0.0,<2.0.0',
'azure-mgmt-storage>=17.0.0,<18.0.0',
@@ -71,34 +73,36 @@
'azure-storage-file-share>=12.4.1,<13.0.0',
'azure-storage-file>=2.1.0,<3.0.0',
'azure-storage-queue>=12.1.5,<13.0.0',
- 'boto3 (>=1.18.21,<2.0.0)',
- 'botocore (>=1.21.21,<2.0.0)',
- 'c7n (>=0.9.14,<0.10.0)',
- 'click>=7.0,<8.0',
- 'cryptography>=3.4.6,<4.0.0',
+ 'boto3 (>=1.21.42,<2.0.0)',
+ 'botocore (>=1.24.42,<2.0.0)',
+ 'c7n (>=0.9.16,<0.10.0)',
+ 'click>=8.0,<9.0',
+ 'cryptography>=3.4.6',
'distlib>=0.3.0,<0.4.0',
- 'importlib-metadata (>=4.6.4,<5.0.0)',
+ 'docutils (>=0.17.1,<0.18.0)',
+ 'importlib-metadata (>=4.11.3,<5.0.0)',
+ 'importlib-resources (>=5.7.1,<6.0.0)',
'jmespath (>=0.10.0,<0.11.0)',
'jmespath>=0.10.0,<0.11.0',
- 'jsonschema (>=3.2.0,<4.0.0)',
+ 'jsonschema (>=4.4.0,<5.0.0)',
'netaddr>=0.7.19,<0.8.0',
- 'pyrsistent (>=0.18.0,<0.19.0)',
+ 'pyrsistent (>=0.18.1,<0.19.0)',
'python-dateutil (>=2.8.2,<3.0.0)',
- 'pyyaml (>=5.4.1,<6.0.0)',
+ 'pyyaml (>=6.0,<7.0)',
'requests>=2.22.0,<3.0.0',
- 's3transfer (>=0.5.0,<0.6.0)',
+ 's3transfer (>=0.5.2,<0.6.0)',
'six (>=1.16.0,<2.0.0)',
'tabulate (>=0.8.9,<0.9.0)',
- 'typing-extensions (>=3.10.0.0,<4.0.0.0)',
- 'urllib3 (>=1.26.6,<2.0.0)',
- 'zipp (>=3.5.0,<4.0.0)']
+ 'typing-extensions (>=4.2.0,<5.0.0)',
+ 'urllib3 (>=1.26.9,<2.0.0)',
+ 'zipp (>=3.8.0,<4.0.0)']
extras_require = \
{':python_version >= "3" and python_version < "4"': ['azure-functions>=1.0.8,<2.0.0']}
setup_kwargs = {
'name': 'c7n-azure',
- 'version': '0.7.13',
+ 'version': '0.7.15',
'description': 'Cloud Custodian - Azure Support',
'license': 'Apache-2.0',
'classifiers': [
@@ -117,7 +121,7 @@
'package_data': package_data,
'install_requires': install_requires,
'extras_require': extras_require,
- 'python_requires': '>=3.6,<4.0',
+ 'python_requires': '>=3.7,<4.0',
}
diff --git a/tools/c7n_azure/tests_azure/azure-functions/templates/policies.yaml b/tools/c7n_azure/tests_azure/azure-functions/templates/policies.yaml
index 117bfdf5782..bc2af28f517 100644
--- a/tools/c7n_azure/tests_azure/azure-functions/templates/policies.yaml
+++ b/tools/c7n_azure/tests_azure/azure-functions/templates/policies.yaml
@@ -5,6 +5,9 @@ policies:
type: azure-event-grid
events: ['ResourceGroupWrite']
provision-options:
+ identity:
+ type: UserAssigned
+ id: ${identity_name}
servicePlan:
resourceGroupName: ${rg_name}-consumption
filters:
@@ -21,6 +24,9 @@ policies:
type: azure-event-grid
events: ['ResourceGroupWrite']
provision-options:
+ identity:
+ type: UserAssigned
+ id: ${identity_name}
servicePlan:
resourceGroupName: ${rg_name}-dedicated
skuName: S2
@@ -39,6 +45,9 @@ policies:
type: azure-periodic
schedule: '0 */5 * * * *'
provision-options:
+ identity:
+ type: UserAssigned
+ id: ${identity_name}
servicePlan:
resourceGroupName: ${rg_name}-consumption
filters:
@@ -55,6 +64,9 @@ policies:
type: azure-periodic
schedule: '0 */5 * * * *'
provision-options:
+ identity:
+ type: UserAssigned
+ id: ${identity_name}
servicePlan:
resourceGroupName: ${rg_name}-dedicated
skuName: S2
diff --git a/tools/c7n_azure/tests_azure/azure-functions/test_functions.sh b/tools/c7n_azure/tests_azure/azure-functions/test_functions.sh
old mode 100644
new mode 100755
index d7bf64b41db..1f401e7a4e9
--- a/tools/c7n_azure/tests_azure/azure-functions/test_functions.sh
+++ b/tools/c7n_azure/tests_azure/azure-functions/test_functions.sh
@@ -3,6 +3,8 @@
set -e
rg_name=cloud-custodian-test-functions-$RANDOM
+rg_identity_name="${rg_name}-identity"
+identity_name="c7n-identity"
function cleanup {
set +e
@@ -11,6 +13,7 @@ function cleanup {
$(az group delete -n ${rg_name} -y)
$(az group delete -n ${rg_name}-dedicated -y)
$(az group delete -n ${rg_name}-consumption -y)
+ $(az group delete -n ${rg_identity_name}-consumption -y)
}
trap cleanup EXIT
@@ -18,6 +21,12 @@ echo "Logging to Azure"
az login --service-principal -u $AZURE_CLIENT_ID -p $AZURE_CLIENT_SECRET -t $AZURE_TENANT_ID -o none
az account set -s $AZURE_SUBSCRIPTION_ID -o none
+echo "Creating user managed identity"
+az group create -l westus -n ${rg_identity_name} -o none
+identity_principal=$(az identity create -g ${rg_identity_name} --name ${identity_name} --query clientId -o tsv)
+sleep 60
+az role assignment create --assignee-object-id ${identity_principal} --assignee-principal-type "ServicePrincipal" --role "Owner" --scope "/subscriptions/${AZURE_SUBSCRIPTION_ID}" -o None
+
eval "echo \"$(cat templates/policies.yaml)\"" > policies.yaml
echo "Running Cloud Custodian"
diff --git a/tools/c7n_azure/tests_azure/cassettes/AdvisorRecommendationTest.test_find_by_name.json b/tools/c7n_azure/tests_azure/cassettes/AdvisorRecommendationTest.test_find_by_name.json
new file mode 100644
index 00000000000..eb5bf67484b
--- /dev/null
+++ b/tools/c7n_azure/tests_azure/cassettes/AdvisorRecommendationTest.test_find_by_name.json
@@ -0,0 +1,65 @@
+{
+ "version": 1,
+ "interactions": [
+ {
+ "request": {
+ "method": "GET",
+ "uri": "https://management.azure.com/subscriptions/ea42f556-5106-4743-99b0-c129bfa71a47/providers/Microsoft.Advisor/recommendations?api-version=2020-01-01",
+ "body": null,
+ "headers": {}
+ },
+ "response": {
+ "status": {
+ "code": 200,
+ "message": "OK"
+ },
+ "headers": {
+ "date": [
+ "Thu, 12 Aug 2021 19:40:14 GMT"
+ ],
+ "cache-control": [
+ "no-cache"
+ ],
+ "content-type": [
+ "application/json; charset=utf-8"
+ ],
+ "content-length": [
+ "876"
+ ]
+ },
+ "body": {
+ "data": {
+ "value": [
+ {
+ "id": "/subscriptions/ea42f556-5106-4743-99b0-c129bfa71a47/providers/Microsoft.Advisor/recommendations/6d569faf2-9fad-832d-70eb-df82c03e032d",
+ "name": "6d569faf2-9fad-832d-70eb-df82c03e032d",
+ "type": "Microsoft.Advisor/recommendations",
+ "properties": {
+ "category": "Security",
+ "impact": "High",
+ "impactedField": "Microsoft.Subscriptions/subscriptions",
+ "impactedValue": "ea42f556-5106-4743-99b0-c129bfa71a47",
+ "lastUpdated": "2021-08-11T18:19:49.674765Z",
+ "recommendationTypeId": "4569faf2-6853-e252-a11e-dffc675689c2",
+ "shortDescription": {
+ "problem": "Deprecated accounts with owner permissions should be removed from your subscription",
+ "solution": "Deprecated accounts with owner permissions should be removed from your subscription"
+ },
+ "extendedProperties": {
+ "assessmentKey": "4569faf2-6853-e252-a11e-dffc675689c2",
+ "score": "0"
+ },
+ "resourceMetadata": {
+ "resourceId": "/subscriptions/ea42f556-5106-4743-99b0-c129bfa71a47",
+ "source": "/subscriptions/ea42f556-5106-4743-99b0-c129bfa71a47/providers/Microsoft.Security/assessments/4569faf2-6853-e252-a11e-dffc675689c2"
+ }
+ },
+ "resourceGroup": "Microsoft.Advisor"
+ }
+ ]
+ }
+ }
+ }
+ }
+ ]
+}
diff --git a/tools/c7n_azure/tests_azure/cassettes/DefenderTest.test_azure_defender_autoprovisioning.json b/tools/c7n_azure/tests_azure/cassettes/DefenderTest.test_azure_defender_autoprovisioning.json
new file mode 100644
index 00000000000..ac6789866c4
--- /dev/null
+++ b/tools/c7n_azure/tests_azure/cassettes/DefenderTest.test_azure_defender_autoprovisioning.json
@@ -0,0 +1,53 @@
+{
+ "version": 1,
+ "interactions": [
+ {
+ "request": {
+ "method": "GET",
+ "uri": "https://management.azure.com/subscriptions/ea42f556-5106-4743-99b0-c129bfa71a47/providers/Microsoft.Security/autoProvisioningSettings?api-version=2017-08-01-preview",
+ "body": null,
+ "headers": {}
+ },
+ "response": {
+ "status": {
+ "code": 200,
+ "message": "OK"
+ },
+ "headers": {
+ "date": [
+ "Wed, 23 Feb 2022 05:32:38 GMT"
+ ],
+ "api-supported-versions": [
+ "1.0"
+ ],
+ "content-type": [
+ "application/json; charset=utf-8"
+ ],
+ "x-ms-ratelimit-remaining-subscription-resource-requests": [
+ "749"
+ ],
+ "cache-control": [
+ "no-cache"
+ ],
+ "content-length": [
+ "240"
+ ]
+ },
+ "body": {
+ "data": {
+ "value": [
+ {
+ "id": "/subscriptions/ea42f556-5106-4743-99b0-c129bfa71a47/providers/Microsoft.Security/autoProvisioningSettings/default",
+ "name": "default",
+ "type": "Microsoft.Security/autoProvisioningSettings",
+ "properties": {
+ "autoProvision": "On"
+ }
+ }
+ ]
+ }
+ }
+ }
+ }
+ ]
+}
\ No newline at end of file
diff --git a/tools/c7n_azure/tests_azure/cassettes/DefenderTest.test_azure_defender_pricing.json b/tools/c7n_azure/tests_azure/cassettes/DefenderTest.test_azure_defender_pricing.json
new file mode 100644
index 00000000000..45ca0807ff0
--- /dev/null
+++ b/tools/c7n_azure/tests_azure/cassettes/DefenderTest.test_azure_defender_pricing.json
@@ -0,0 +1,161 @@
+{
+ "version": 1,
+ "interactions": [
+ {
+ "request": {
+ "method": "GET",
+ "uri": "https://management.azure.com/subscriptions/ea42f556-5106-4743-99b0-c129bfa71a47/providers/Microsoft.Security/pricings?api-version=2018-06-01",
+ "body": null,
+ "headers": {}
+ },
+ "response": {
+ "status": {
+ "code": 200,
+ "message": "OK"
+ },
+ "headers": {
+ "date": [
+ "Wed, 23 Feb 2022 05:27:37 GMT"
+ ],
+ "x-ms-ratelimit-remaining-subscription-resource-requests": [
+ "749"
+ ],
+ "cache-control": [
+ "no-cache"
+ ],
+ "content-type": [
+ "application/json; charset=utf-8"
+ ],
+ "api-supported-versions": [
+ "1.0"
+ ],
+ "content-length": [
+ "3049"
+ ]
+ },
+ "body": {
+ "data": {
+ "value": [
+ {
+ "id": "/subscriptions/ea42f556-5106-4743-99b0-c129bfa71a47/providers/Microsoft.Security/pricings/VirtualMachines",
+ "name": "VirtualMachines",
+ "type": "Microsoft.Security/pricings",
+ "properties": {
+ "pricingTier": "Standard",
+ "freeTrialRemainingTime": "PT0S"
+ }
+ },
+ {
+ "id": "/subscriptions/ea42f556-5106-4743-99b0-c129bfa71a47/providers/Microsoft.Security/pricings/SqlServers",
+ "name": "SqlServers",
+ "type": "Microsoft.Security/pricings",
+ "properties": {
+ "pricingTier": "Standard",
+ "freeTrialRemainingTime": "PT0S"
+ }
+ },
+ {
+ "id": "/subscriptions/ea42f556-5106-4743-99b0-c129bfa71a47/providers/Microsoft.Security/pricings/AppServices",
+ "name": "AppServices",
+ "type": "Microsoft.Security/pricings",
+ "properties": {
+ "pricingTier": "Standard",
+ "freeTrialRemainingTime": "PT0S"
+ }
+ },
+ {
+ "id": "/subscriptions/ea42f556-5106-4743-99b0-c129bfa71a47/providers/Microsoft.Security/pricings/StorageAccounts",
+ "name": "StorageAccounts",
+ "type": "Microsoft.Security/pricings",
+ "properties": {
+ "pricingTier": "Standard",
+ "freeTrialRemainingTime": "PT0S"
+ }
+ },
+ {
+ "id": "/subscriptions/ea42f556-5106-4743-99b0-c129bfa71a47/providers/Microsoft.Security/pricings/SqlServerVirtualMachines",
+ "name": "SqlServerVirtualMachines",
+ "type": "Microsoft.Security/pricings",
+ "properties": {
+ "pricingTier": "Standard",
+ "freeTrialRemainingTime": "PT0S"
+ }
+ },
+ {
+ "id": "/subscriptions/ea42f556-5106-4743-99b0-c129bfa71a47/providers/Microsoft.Security/pricings/KubernetesService",
+ "name": "KubernetesService",
+ "type": "Microsoft.Security/pricings",
+ "properties": {
+ "pricingTier": "Standard",
+ "freeTrialRemainingTime": "PT0S",
+ "deprecated": true,
+ "replacedBy": [
+ "Containers"
+ ]
+ }
+ },
+ {
+ "id": "/subscriptions/ea42f556-5106-4743-99b0-c129bfa71a47/providers/Microsoft.Security/pricings/ContainerRegistry",
+ "name": "ContainerRegistry",
+ "type": "Microsoft.Security/pricings",
+ "properties": {
+ "pricingTier": "Standard",
+ "freeTrialRemainingTime": "PT0S",
+ "deprecated": true,
+ "replacedBy": [
+ "Containers"
+ ]
+ }
+ },
+ {
+ "id": "/subscriptions/ea42f556-5106-4743-99b0-c129bfa71a47/providers/Microsoft.Security/pricings/KeyVaults",
+ "name": "KeyVaults",
+ "type": "Microsoft.Security/pricings",
+ "properties": {
+ "pricingTier": "Standard",
+ "freeTrialRemainingTime": "PT0S"
+ }
+ },
+ {
+ "id": "/subscriptions/ea42f556-5106-4743-99b0-c129bfa71a47/providers/Microsoft.Security/pricings/Dns",
+ "name": "Dns",
+ "type": "Microsoft.Security/pricings",
+ "properties": {
+ "pricingTier": "Standard",
+ "freeTrialRemainingTime": "PT0S"
+ }
+ },
+ {
+ "id": "/subscriptions/ea42f556-5106-4743-99b0-c129bfa71a47/providers/Microsoft.Security/pricings/Arm",
+ "name": "Arm",
+ "type": "Microsoft.Security/pricings",
+ "properties": {
+ "pricingTier": "Standard",
+ "freeTrialRemainingTime": "PT0S"
+ }
+ },
+ {
+ "id": "/subscriptions/ea42f556-5106-4743-99b0-c129bfa71a47/providers/Microsoft.Security/pricings/OpenSourceRelationalDatabases",
+ "name": "OpenSourceRelationalDatabases",
+ "type": "Microsoft.Security/pricings",
+ "properties": {
+ "pricingTier": "Free",
+ "freeTrialRemainingTime": "PT0S"
+ }
+ },
+ {
+ "id": "/subscriptions/ea42f556-5106-4743-99b0-c129bfa71a47/providers/Microsoft.Security/pricings/Containers",
+ "name": "Containers",
+ "type": "Microsoft.Security/pricings",
+ "properties": {
+ "pricingTier": "Free",
+ "freeTrialRemainingTime": "PT0S"
+ }
+ }
+ ]
+ }
+ }
+ }
+ }
+ ]
+}
\ No newline at end of file
diff --git a/tools/c7n_azure/tests_azure/cassettes/DefenderTest.test_azure_defender_setting.json b/tools/c7n_azure/tests_azure/cassettes/DefenderTest.test_azure_defender_setting.json
new file mode 100644
index 00000000000..1b69420bf16
--- /dev/null
+++ b/tools/c7n_azure/tests_azure/cassettes/DefenderTest.test_azure_defender_setting.json
@@ -0,0 +1,63 @@
+{
+ "version": 1,
+ "interactions": [
+ {
+ "request": {
+ "method": "GET",
+ "uri": "https://management.azure.com/subscriptions/ea42f556-5106-4743-99b0-c129bfa71a47/providers/Microsoft.Security/settings?api-version=2019-01-01",
+ "body": null,
+ "headers": {}
+ },
+ "response": {
+ "status": {
+ "code": 200,
+ "message": "OK"
+ },
+ "headers": {
+ "date": [
+ "Wed, 23 Feb 2022 05:32:41 GMT"
+ ],
+ "api-supported-versions": [
+ "1.0"
+ ],
+ "content-type": [
+ "application/json; charset=utf-8"
+ ],
+ "x-ms-ratelimit-remaining-subscription-resource-requests": [
+ "749"
+ ],
+ "cache-control": [
+ "no-cache"
+ ],
+ "content-length": [
+ "439"
+ ]
+ },
+ "body": {
+ "data": {
+ "value": [
+ {
+ "id": "/subscriptions/ea42f556-5106-4743-99b0-c129bfa71a47/providers/Microsoft.Security/settings/MCAS",
+ "name": "MCAS",
+ "type": "Microsoft.Security/settings",
+ "kind": "DataExportSettings",
+ "properties": {
+ "enabled": true
+ }
+ },
+ {
+ "id": "/subscriptions/ea42f556-5106-4743-99b0-c129bfa71a47/providers/Microsoft.Security/settings/WDATP",
+ "name": "WDATP",
+ "type": "Microsoft.Security/settings",
+ "kind": "DataExportSettings",
+ "properties": {
+ "enabled": true
+ }
+ }
+ ]
+ }
+ }
+ }
+ }
+ ]
+}
\ No newline at end of file
diff --git a/tools/c7n_azure/tests_azure/templates/aci.json b/tools/c7n_azure/tests_azure/templates/aci.json
index fe2f6f1c0bb..65b230b7b71 100644
--- a/tools/c7n_azure/tests_azure/templates/aci.json
+++ b/tools/c7n_azure/tests_azure/templates/aci.json
@@ -19,7 +19,7 @@
"metadata": {
"description": "Container image to deploy. Should be of the form accountName/imagename:tag for images stored in Docker Hub or a fully qualified URI for a private registry like the Azure Container Registry."
},
- "defaultValue": "microsoft/aci-helloworld"
+ "defaultValue": "mcr.microsoft.com/azuredocs/aci-helloworld"
},
"cpuCores": {
"type": "string",
diff --git a/tools/c7n_azure/tests_azure/templates/mysql.json b/tools/c7n_azure/tests_azure/templates/mysql.json
index 9c2bf70bfd4..3cb0b34d78d 100644
--- a/tools/c7n_azure/tests_azure/templates/mysql.json
+++ b/tools/c7n_azure/tests_azure/templates/mysql.json
@@ -24,7 +24,7 @@
},
"properties": {
"createMode": "Default",
- "version": "5.6",
+ "version": "5.7",
"administratorLogin": "adminuser",
"administratorLoginPassword": "[concat('Pass1!@', variables('suffix'))]",
"storageProfile": {
diff --git a/tools/c7n_azure/tests_azure/test_session.py b/tools/c7n_azure/tests_azure/test_session.py
index 784aa463cf8..e10e67f5826 100644
--- a/tools/c7n_azure/tests_azure/test_session.py
+++ b/tools/c7n_azure/tests_azure/test_session.py
@@ -3,8 +3,6 @@
import json
import os
import re
-import sys
-from importlib import reload
import pytest
from adal import AdalError
@@ -33,13 +31,6 @@ class SessionTest(BaseTest):
'data',
'test_auth_file_no_sub.json')
- def setUp(self):
- super(SessionTest, self).setUp()
-
- def tearDown(self):
- super(SessionTest, self).tearDown()
- reload(sys.modules['c7n_azure.session'])
-
def mock_init(self, client_id, secret, tenant, resource):
pass
@@ -258,7 +249,7 @@ def xtest_get_function_target_subscription(self):
constants.ENV_CLIENT_SECRET: 'secret',
constants.ENV_FUNCTION_MANAGEMENT_GROUP_NAME: 'test'
}, clear=True):
- with patch('c7n_azure.utils.ManagedGroupHelper.get_subscriptions_list',
+ with patch('c7n_azure.session.ManagedGroupHelper.get_subscriptions_list',
return_value=[]):
s = Session()
self.assertEqual(s.get_function_target_subscription_name(), 'test')
@@ -300,9 +291,8 @@ def test_get_client_us_gov(self):
self.assertEqual(AZURE_US_GOV_CLOUD.endpoints.management + ".default",
client._client._config.credential_scopes[0])
- @patch('c7n_azure.utils.get_keyvault_secret', return_value='{}')
+ @patch('c7n_azure.session.get_keyvault_secret', return_value='{}')
def test_compare_auth_params(self, _1):
- reload(sys.modules['c7n_azure.session'])
with patch.dict(os.environ,
{
constants.ENV_TENANT_ID: 'tenant',
@@ -323,10 +313,9 @@ def test_compare_auth_params(self, _1):
self.assertFalse(file_params.pop('enable_cli_auth', None))
self.assertEqual(env_params, file_params)
- @patch('c7n_azure.utils.get_keyvault_secret',
+ @patch('c7n_azure.session.get_keyvault_secret',
return_value='{"client_id": "client", "client_secret": "secret"}')
def test_kv_patch(self, _1):
- reload(sys.modules['c7n_azure.session'])
with patch.dict(os.environ,
{
constants.ENV_TENANT_ID: 'tenant',
@@ -342,11 +331,9 @@ def test_kv_patch(self, _1):
self.assertEqual(auth_params.get('client_id'), 'client')
self.assertEqual(auth_params.get('client_secret'), 'secret')
- @patch('c7n_azure.utils.get_keyvault_secret')
+ @patch('c7n_azure.session.get_keyvault_secret')
@patch('c7n_azure.session.log.error')
def test_initialize_session_kv_authentication_error(self, mock_log, mock_get_kv_secret):
- reload(sys.modules['c7n_azure.session'])
-
with self.assertRaises(SystemExit):
mock_get_kv_secret.side_effect = HTTPError()
@@ -379,7 +366,7 @@ def test_get_auth_endpoint_storage(self):
result = s.get_auth_endpoint(constants.STORAGE_AUTH_ENDPOINT)
self.assertEqual('https://storage.azure.com/', result)
- @patch('c7n_azure.utils.C7nRetryPolicy.__init__', return_value=None)
+ @patch('c7n_azure.session.C7nRetryPolicy.__init__', return_value=None)
def test_retry_policy_override(self, c7n_retry):
s = Session()
s.client('azure.mgmt.compute.ComputeManagementClient')
diff --git a/tools/c7n_azure/tests_azure/tests_resources/test_advisor.py b/tools/c7n_azure/tests_azure/tests_resources/test_advisor.py
new file mode 100644
index 00000000000..8f1bb599aec
--- /dev/null
+++ b/tools/c7n_azure/tests_azure/tests_resources/test_advisor.py
@@ -0,0 +1,22 @@
+# Copyright The Cloud Custodian Authors.
+# SPDX-License-Identifier: Apache-2.0
+from ..azure_common import BaseTest
+import pytest
+
+
+@pytest.mark.skiplive
+class AdvisorRecommendationTest(BaseTest):
+ def test_azure_advisor_recommendation_schema_validate(self):
+ p = self.load_policy({
+ 'name': 'test-azure-advisor-recommendations',
+ 'resource': 'azure.advisor-recommendation'
+ }, validate=True)
+ self.assertTrue(p)
+
+ def test_find_by_name(self):
+ p = self.load_policy({
+ 'name': 'test-azure-advisor-recommendation',
+ 'resource': 'azure.advisor-recommendation'
+ })
+ resources = p.run()
+ self.assertTrue(len(resources) > 0)
diff --git a/tools/c7n_azure/tests_azure/tests_resources/test_defender.py b/tools/c7n_azure/tests_azure/tests_resources/test_defender.py
new file mode 100644
index 00000000000..08c795e5002
--- /dev/null
+++ b/tools/c7n_azure/tests_azure/tests_resources/test_defender.py
@@ -0,0 +1,47 @@
+# Copyright The Cloud Custodian Authors.
+# SPDX-License-Identifier: Apache-2.0
+from ..azure_common import BaseTest
+
+
+class DefenderTest(BaseTest):
+ def test_azure_defender_pricing(self):
+ p = self.load_policy(
+ {
+ "name": "test-azure-defender-pricing",
+ "resource": "azure.defender-pricing",
+ "filters": [
+ {"name": "KeyVaults"},
+ ],
+ }
+ )
+ resources = p.run()
+ self.assertEqual(len(resources), 1)
+
+ def test_azure_defender_setting(self):
+ p = self.load_policy(
+ {
+ "name": "test-azure-defender-setting",
+ "resource": "azure.defender-setting",
+ "filters": [
+ {"name": "MCAS"},
+ {"kind": "DataExportSettings"},
+ {"properties.enabled": True},
+ ],
+ }
+ )
+ resources = p.run()
+ self.assertEqual(len(resources), 1)
+
+ def test_azure_defender_autoprovisioning(self):
+ p = self.load_policy(
+ {
+ "name": "test-azure-defender-autoprovisioning",
+ "resource": "azure.defender-autoprovisioning",
+ "filters": [
+ {"name": "default"},
+ {"properties.autoProvision": "On"},
+ ],
+ }
+ )
+ resources = p.run()
+ self.assertEqual(len(resources), 1)
diff --git a/tools/c7n_gcp/c7n_gcp/filters/__init__.py b/tools/c7n_gcp/c7n_gcp/filters/__init__.py
index 42c92a7e540..09fe0527b5b 100644
--- a/tools/c7n_gcp/c7n_gcp/filters/__init__.py
+++ b/tools/c7n_gcp/c7n_gcp/filters/__init__.py
@@ -3,3 +3,4 @@
#
from .metrics import GCPMetricsFilter
from .sccfindings import SecurityComandCenterFindingsFilter
+from .iampolicy import IamPolicyFilter
\ No newline at end of file
diff --git a/tools/c7n_gcp/c7n_gcp/filters/iampolicy.py b/tools/c7n_gcp/c7n_gcp/filters/iampolicy.py
new file mode 100644
index 00000000000..55ed08a8d9c
--- /dev/null
+++ b/tools/c7n_gcp/c7n_gcp/filters/iampolicy.py
@@ -0,0 +1,169 @@
+import copy
+from c7n.filters.core import Filter, ValueFilter
+
+from c7n.utils import local_session, type_schema
+
+
+class IamPolicyFilter(Filter):
+ """
+ Filters resources based on their IAM policy
+ """
+
+ value_filter_schema = copy.deepcopy(ValueFilter.schema)
+ del value_filter_schema['required']
+
+ user_role_schema = {
+ 'type': 'object',
+ 'additionalProperties': False,
+ 'required': ['user', 'role'],
+ 'properties': {
+ 'user': {'type': 'string'},
+ 'role': {'type': 'string'},
+ 'has': {'type': 'boolean'}
+ }
+ }
+
+ schema = type_schema(
+ 'iam-policy',
+ **{'doc': value_filter_schema,
+ 'user-role': user_role_schema})
+
+ def get_client(self, session, model):
+ return session.client(
+ model.service, model.version, model.component)
+
+ def process(self, resources, event=None):
+ if 'doc' in self.data:
+ try:
+ valueFilter = IamPolicyValueFilter(self.data['doc'], self.manager)
+ resources = valueFilter.process(resources)
+ except TypeError:
+ valueFilter = IamPolicyValueFilter(self.data['doc'], self.manager, "bucket")
+ resources = valueFilter.process(resources)
+ if 'user-role' in self.data:
+ user_role = self.data['user-role']
+ key = user_role['user']
+ val = user_role['role']
+ op = 'in' if user_role.get('has', True) else 'not-in'
+ value_type = 'swap'
+ userRolePairFilter = IamPolicyUserRolePairFilter({'key': key, 'value': val,
+ 'op': op, 'value_type': value_type}, self.manager)
+ resources = userRolePairFilter.process(resources)
+
+ return resources
+
+
+class IamPolicyValueFilter(ValueFilter):
+ """Generic value filter on resources' IAM policy bindings using jmespath
+
+ :example:
+
+ Filter all kms-cryptokeys accessible to all users
+ or all authenticated users
+
+ .. code-block :: yaml
+
+ policies:
+ - name: gcp-iam-policy-value
+ resource: gcp.kms-cryptokey
+ filters:
+ - type: iam-policy
+ doc:
+ key: "bindings[*].members[]"
+ op: intersect
+ value: ["allUsers", "allAuthenticatedUsers"]
+ """
+
+ schema = type_schema('iam-policy', rinherit=ValueFilter.schema,)
+# permissions = 'GCP_SERVICE.GCP_RESOURCE.getIamPolicy',)
+
+ def __init__(self, data, manager=None, identifier="resource"):
+ super(IamPolicyValueFilter, self).__init__(data, manager)
+ self.identifier = identifier
+
+ def get_client(self, session, model):
+ return session.client(
+ model.service, model.version, model.component)
+
+ def process(self, resources, event=None):
+ model = self.manager.get_model()
+ session = local_session(self.manager.session_factory)
+ client = self.get_client(session, model)
+
+ for r in resources:
+ iam_policy = client.execute_command('getIamPolicy', self._verb_arguments(r))
+ r["c7n:iamPolicy"] = iam_policy
+
+ return super(IamPolicyValueFilter, self).process(resources)
+
+ def __call__(self, r):
+ return self.match(r['c7n:iamPolicy'])
+
+ def _verb_arguments(self, resource):
+ """
+ Returns a dictionary passed when making the `getIamPolicy` and 'setIamPolicy' API calls.
+
+ :param resource: the same as in `get_resource_params`
+ """
+ return {self.identifier: resource[self.manager.resource_type.id]}
+
+
+class IamPolicyUserRolePairFilter(ValueFilter):
+ """Filters resources based on specified user-role pairs.
+
+ :example:
+
+ Filter all projects where the user test123@gmail.com does not have the owner role
+
+ .. code-block :: yaml
+
+ policies:
+ - name: gcp-iam-user-roles
+ resource: gcp.project
+ filters:
+ - type: iam-policy
+ user-role:
+ user: "user:test123@gmail.com"
+ has: false
+ role: "roles/owner"
+ """
+
+ schema = type_schema('iam-user-roles', rinherit=ValueFilter.schema)
+# permissions = ('resourcemanager.projects.getIamPolicy',)
+
+ def get_client(self, session, model):
+ return session.client(
+ model.service, model.version, model.component)
+
+ def process(self, resources, event=None):
+ model = self.manager.get_model()
+ session = local_session(self.manager.session_factory)
+ client = self.get_client(session, model)
+
+ for r in resources:
+ iam_policy = client.execute_command('getIamPolicy', {"resource": r["projectId"]})
+ r["c7n:iamPolicyUserRolePair"] = {}
+ userToRolesMap = {}
+
+ for b in iam_policy["bindings"]:
+ role, members = b["role"], b["members"]
+ for user in members:
+ if user in userToRolesMap:
+ userToRolesMap[user].append(role)
+ else:
+ userToRolesMap[user] = [role]
+ for user, roles in userToRolesMap.items():
+ r["c7n:iamPolicyUserRolePair"][user] = roles
+
+ return super(IamPolicyUserRolePairFilter, self).process(resources)
+
+ def __call__(self, r):
+ return self.match(r["c7n:iamPolicyUserRolePair"])
+
+ def _verb_arguments(self, resource, identifier="resource"):
+ """
+ Returns a dictionary passed when making the `getIamPolicy` and 'setIamPolicy' API calls.
+
+ :param resource: the same as in `get_resource_params`
+ """
+ return {identifier: resource[self.manager.resource_type.id]}
diff --git a/tools/c7n_gcp/c7n_gcp/filters/metrics.py b/tools/c7n_gcp/c7n_gcp/filters/metrics.py
index 10b8b19e87c..0d4e270bb54 100644
--- a/tools/c7n_gcp/c7n_gcp/filters/metrics.py
+++ b/tools/c7n_gcp/c7n_gcp/filters/metrics.py
@@ -4,7 +4,6 @@
Monitoring Metrics suppport for resources
"""
from datetime import datetime, timedelta
-import pytz
import jmespath
@@ -112,7 +111,7 @@ def process(self, resources, event=None):
self.reducer = self.data.get('reducer', 'REDUCE_NONE')
self.group_by_fields = self.data.get('group-by-fields', [])
self.missing_value = self.data.get('missing-value')
- self.end = datetime.now(pytz.timezone('UTC'))
+ self.end = datetime.utcnow()
self.start = self.end - duration
self.period = str((self.end - self.start).total_seconds()) + 's'
self.resource_metric_dict = {}
diff --git a/tools/c7n_gcp/c7n_gcp/output.py b/tools/c7n_gcp/c7n_gcp/output.py
index a5f5887be49..7091ba7f991 100644
--- a/tools/c7n_gcp/c7n_gcp/output.py
+++ b/tools/c7n_gcp/c7n_gcp/output.py
@@ -18,7 +18,7 @@
try:
from google.cloud.logging import Client as LogClient
from google.cloud.logging.handlers import CloudLoggingHandler
- from google.cloud.logging.resource import Resource
+ from google.cloud.logging import Resource
except ImportError:
LogClient = None
diff --git a/tools/c7n_gcp/c7n_gcp/resources/bigquery.py b/tools/c7n_gcp/c7n_gcp/resources/bigquery.py
index 10055a8fd99..7136b5b9f9c 100644
--- a/tools/c7n_gcp/c7n_gcp/resources/bigquery.py
+++ b/tools/c7n_gcp/c7n_gcp/resources/bigquery.py
@@ -2,8 +2,10 @@
# SPDX-License-Identifier: Apache-2.0
import jmespath
+from c7n.utils import type_schema
from c7n_gcp.query import QueryResourceManager, TypeInfo, ChildTypeInfo, ChildResourceManager
from c7n_gcp.provider import resources
+from c7n_gcp.actions import MethodAction
@resources.register('bq-dataset')
@@ -25,7 +27,7 @@ class resource_type(TypeInfo):
"creationTime", "lastModifiedTime"]
asset_type = "bigquery.googleapis.com/Dataset"
scc_type = "google.cloud.bigquery.Dataset"
- metric_key = "resouece.labels.dataset_id"
+ metric_key = "resource.labels.dataset_id"
permissions = ('bigquery.datasets.get',)
@staticmethod
@@ -113,3 +115,17 @@ def get(client, event):
'datasetId': event['dataset_id'],
'tableId': event['resourceName'].rsplit('/', 1)[-1]
})
+
+
+@BigQueryTable.action_registry.register('delete')
+class DeleteBQTable(MethodAction):
+ schema = type_schema('delete')
+ method_spec = {'op': 'delete'}
+ permissions = ('bigquery.tables.get', 'bigquery.tables.delete')
+
+ def get_resource_params(self, model, r):
+ return {
+ 'projectId': r['tableReference']['projectId'],
+ 'datasetId': r['tableReference']['datasetId'],
+ 'tableId': r['tableReference']['tableId']
+ }
diff --git a/tools/c7n_gcp/c7n_gcp/resources/compute.py b/tools/c7n_gcp/c7n_gcp/resources/compute.py
index 98da0f2eac3..419d660db66 100644
--- a/tools/c7n_gcp/c7n_gcp/resources/compute.py
+++ b/tools/c7n_gcp/c7n_gcp/resources/compute.py
@@ -295,7 +295,7 @@ def get(client, resource_info):
return client.execute_command(
'get', {'project': resource_info['project_id'],
'zone': resource_info['zone'],
- 'resourceId': resource_info['disk_id']})
+ 'disk': resource_info['disk_id']})
@staticmethod
def get_label_params(resource, all_labels):
@@ -394,7 +394,7 @@ class resource_type(TypeInfo):
def get(client, resource_info):
return client.execute_command(
'get', {'project': resource_info['project_id'],
- 'snapshot_id': resource_info['snapshot_id']})
+ 'snapshot': resource_info['snapshot_id']})
@Snapshot.action_registry.register('delete')
diff --git a/tools/c7n_gcp/c7n_gcp/resources/kms.py b/tools/c7n_gcp/c7n_gcp/resources/kms.py
index 56d504de5ac..4cd523664c1 100644
--- a/tools/c7n_gcp/c7n_gcp/resources/kms.py
+++ b/tools/c7n_gcp/c7n_gcp/resources/kms.py
@@ -7,6 +7,8 @@
from c7n_gcp.provider import resources
from c7n_gcp.query import QueryResourceManager, TypeInfo, ChildResourceManager, ChildTypeInfo, \
GcpLocation
+from c7n_gcp.actions import SetIamPolicy
+from c7n_gcp.filters import IamPolicyFilter
@resources.register('kms-keyring')
@@ -100,6 +102,19 @@ def get(client, resource_info):
return client.execute_command('get', {'name': name})
+@KmsCryptoKey.filter_registry.register('iam-policy')
+class KmsCryptokeyIamPolicyFilter(IamPolicyFilter):
+ """
+ Overrides the base implementation to process KMS Cryptokey resources correctly.
+ """
+ permissions = ('cloudkms.cryptoKeys.get', 'cloudkms.cryptoKeys.list',
+ 'cloudkms.cryptoKeys.update', 'resourcemanager.projects.get')
+
+ def _verb_arguments(self, resource):
+ verb_arguments = SetIamPolicy._verb_arguments(self, resource)
+ return verb_arguments
+
+
@resources.register('kms-cryptokey-version')
class KmsCryptoKeyVersion(ChildResourceManager):
"""GCP Resource
diff --git a/tools/c7n_gcp/c7n_gcp/resources/network.py b/tools/c7n_gcp/c7n_gcp/resources/network.py
index 64c41baee36..742823b430c 100644
--- a/tools/c7n_gcp/c7n_gcp/resources/network.py
+++ b/tools/c7n_gcp/c7n_gcp/resources/network.py
@@ -55,7 +55,7 @@ class resource_type(TypeInfo):
def get(client, resource_info):
path_param_re = re.compile(
- '.*?/projects/(.*?)/regions/(.*?)/subnetworks/(.*)')
+ '.*?projects/(.*?)/regions/(.*?)/subnetworks/(.*)')
project, region, subnet = path_param_re.match(
resource_info["resourceName"]).groups()
return client.execute_query(
@@ -99,9 +99,14 @@ class SetFlowLog(SubnetAction):
def get_resource_params(self, m, r):
params = super(SetFlowLog, self).get_resource_params(m, r)
- params['body'] = dict(r)
- params['body']['enableFlowLogs'] = self.data.get('state', True)
- return params
+ return {
+ 'project': params['project'],
+ 'region': params['region'],
+ 'subnetwork': params['subnetwork'],
+ 'body': {
+ 'fingerprint': r['fingerprint'],
+ 'enableFlowLogs': self.data.get('state', True)}
+ }
@Subnet.action_registry.register('set-private-api')
diff --git a/tools/c7n_gcp/c7n_gcp/resources/resourcemanager.py b/tools/c7n_gcp/c7n_gcp/resources/resourcemanager.py
index 1755d275997..c5db92dc83a 100644
--- a/tools/c7n_gcp/c7n_gcp/resources/resourcemanager.py
+++ b/tools/c7n_gcp/c7n_gcp/resources/resourcemanager.py
@@ -2,6 +2,7 @@
# SPDX-License-Identifier: Apache-2.0
import itertools
+from c7n_gcp.filters.iampolicy import IamPolicyFilter
from c7n_gcp.actions import SetIamPolicy, MethodAction
from c7n_gcp.provider import resources
@@ -120,6 +121,19 @@ def get_resource_query(self):
return {'filter': child['filter']}
+@Project.filter_registry.register('iam-policy')
+class ProjectIamPolicyFilter(IamPolicyFilter):
+ """
+ Overrides the base implementation to process Project resources correctly.
+ """
+ permissions = ('resourcemanager.projects.getIamPolicy',)
+
+ def _verb_arguments(self, resource):
+ verb_arguments = SetIamPolicy._verb_arguments(self, resource)
+ verb_arguments['body'] = {}
+ return verb_arguments
+
+
@Project.action_registry.register('delete')
class ProjectDelete(MethodAction):
"""Delete a GCP Project
diff --git a/tools/c7n_gcp/c7n_gcp/resources/source.py b/tools/c7n_gcp/c7n_gcp/resources/source.py
index 1a136f2933d..929c06fe87d 100644
--- a/tools/c7n_gcp/c7n_gcp/resources/source.py
+++ b/tools/c7n_gcp/c7n_gcp/resources/source.py
@@ -17,7 +17,7 @@ class resource_type(TypeInfo):
enum_spec = ('list', 'repos[]', None)
scope = 'project'
scope_key = 'name'
- scope_template = "projects/{}-"
+ scope_template = "projects/{}"
name = id = 'name'
perm_service = 'source'
default_report_fields = ["name", "size", "url"]
diff --git a/tools/c7n_gcp/c7n_gcp/resources/storage.py b/tools/c7n_gcp/c7n_gcp/resources/storage.py
index 801bc8e8bab..b7b96da5416 100644
--- a/tools/c7n_gcp/c7n_gcp/resources/storage.py
+++ b/tools/c7n_gcp/c7n_gcp/resources/storage.py
@@ -4,6 +4,7 @@
from c7n_gcp.actions import MethodAction
from c7n_gcp.provider import resources
from c7n_gcp.query import QueryResourceManager, TypeInfo
+from c7n_gcp.filters import IamPolicyFilter
@resources.register('bucket')
@@ -28,6 +29,18 @@ def get(client, resource_info):
'get', {'bucket': resource_info['bucket_name']})
+@Bucket.filter_registry.register('iam-policy')
+class BucketIamPolicyFilter(IamPolicyFilter):
+ """
+ Overrides the base implementation to process bucket resources correctly.
+ """
+ permissions = ('storage.buckets.getIamPolicy',)
+
+ def _verb_arguments(self, resource):
+ verb_arguments = {{"bucket": resource["name"]}}
+ return verb_arguments
+
+
@Bucket.action_registry.register('set-uniform-access')
class BucketLevelAccess(MethodAction):
'''Uniform access disables object ACLs on a bucket.
diff --git a/tools/c7n_gcp/poetry.lock b/tools/c7n_gcp/poetry.lock
index f0ef9bdc1f7..28dde566b10 100644
--- a/tools/c7n_gcp/poetry.lock
+++ b/tools/c7n_gcp/poetry.lock
@@ -1,13 +1,13 @@
[[package]]
name = "argcomplete"
-version = "1.12.3"
+version = "2.0.0"
description = "Bash tab completion for argparse"
category = "dev"
optional = false
-python-versions = "*"
+python-versions = ">=3.6"
[package.dependencies]
-importlib-metadata = {version = ">=0.23,<5", markers = "python_version == \"3.6\" or python_version == \"3.7\""}
+importlib-metadata = {version = ">=0.23,<5", markers = "python_version == \"3.7\""}
[package.extras]
test = ["coverage", "flake8", "pexpect", "wheel"]
@@ -22,29 +22,29 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
[[package]]
name = "attrs"
-version = "21.2.0"
+version = "21.4.0"
description = "Classes Without Boilerplate"
category = "dev"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
[package.extras]
-dev = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "furo", "sphinx", "sphinx-notfound-page", "pre-commit"]
+dev = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "furo", "sphinx", "sphinx-notfound-page", "pre-commit", "cloudpickle"]
docs = ["furo", "sphinx", "zope.interface", "sphinx-notfound-page"]
-tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface"]
-tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins"]
+tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "cloudpickle"]
+tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "cloudpickle"]
[[package]]
name = "boto3"
-version = "1.18.21"
+version = "1.21.42"
description = "The AWS SDK for Python"
category = "dev"
optional = false
python-versions = ">= 3.6"
[package.dependencies]
-botocore = ">=1.21.21,<1.22.0"
-jmespath = ">=0.7.1,<1.0.0"
+botocore = ">=1.24.42,<1.25.0"
+jmespath = ">=0.7.1,<2.0.0"
s3transfer = ">=0.5.0,<0.6.0"
[package.extras]
@@ -52,36 +52,37 @@ crt = ["botocore[crt] (>=1.21.0,<2.0a0)"]
[[package]]
name = "botocore"
-version = "1.21.21"
+version = "1.24.42"
description = "Low-level, data-driven core of boto 3."
category = "dev"
optional = false
python-versions = ">= 3.6"
[package.dependencies]
-jmespath = ">=0.7.1,<1.0.0"
+jmespath = ">=0.7.1,<2.0.0"
python-dateutil = ">=2.1,<3.0.0"
urllib3 = ">=1.25.4,<1.27"
[package.extras]
-crt = ["awscrt (==0.11.24)"]
+crt = ["awscrt (==0.13.8)"]
[[package]]
name = "c7n"
-version = "0.9.14"
+version = "0.9.16"
description = "Cloud Custodian - Policy Rules Engine"
category = "dev"
optional = false
-python-versions = "^3.6"
+python-versions = "^3.7"
develop = true
[package.dependencies]
-argcomplete = "^1.11.1"
+argcomplete = ">=1.12.3"
boto3 = "^1.12.31"
-importlib-metadata = ">1.7.0;python_version<3.8"
-jsonschema = "^3.2.0"
-python-dateutil = "^2.8.1"
-pyyaml = "^5.3"
+docutils = ">=0.14,<0.18"
+importlib-metadata = ">=4.11.1"
+jsonschema = ">=3.0.0"
+python-dateutil = "^2.8.2"
+pyyaml = ">=5.4.0"
tabulate = "^0.8.6"
[package.source]
@@ -90,34 +91,23 @@ url = "../.."
[[package]]
name = "cachetools"
-version = "4.2.2"
+version = "5.0.0"
description = "Extensible memoizing collections and decorators"
category = "main"
optional = false
-python-versions = "~=3.5"
+python-versions = "~=3.7"
[[package]]
name = "certifi"
-version = "2021.5.30"
+version = "2021.10.8"
description = "Python package for providing Mozilla's CA Bundle."
category = "main"
optional = false
python-versions = "*"
-[[package]]
-name = "cffi"
-version = "1.14.6"
-description = "Foreign Function Interface for Python calling C code."
-category = "main"
-optional = false
-python-versions = "*"
-
-[package.dependencies]
-pycparser = "*"
-
[[package]]
name = "charset-normalizer"
-version = "2.0.4"
+version = "2.0.12"
description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet."
category = "main"
optional = false
@@ -134,55 +124,71 @@ category = "dev"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
+[[package]]
+name = "docutils"
+version = "0.17.1"
+description = "Docutils -- Python Documentation Utilities"
+category = "dev"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
+
+[[package]]
+name = "execnet"
+version = "1.9.0"
+description = "execnet: rapid multi-Python deployment"
+category = "dev"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
+
+[package.extras]
+testing = ["pre-commit"]
+
[[package]]
name = "google-api-core"
-version = "1.31.1"
+version = "2.8.0"
description = "Google API client core library"
category = "main"
optional = false
-python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*"
+python-versions = ">=3.6"
[package.dependencies]
-google-auth = ">=1.25.0,<2.0dev"
-googleapis-common-protos = ">=1.6.0,<2.0dev"
-grpcio = {version = ">=1.29.0,<2.0dev", optional = true, markers = "extra == \"grpc\""}
-packaging = ">=14.3"
+google-auth = ">=1.25.0,<3.0dev"
+googleapis-common-protos = ">=1.52.0,<2.0dev"
+grpcio = {version = ">=1.33.2,<2.0dev", optional = true, markers = "extra == \"grpc\""}
+grpcio-status = {version = ">=1.33.2,<2.0dev", optional = true, markers = "extra == \"grpc\""}
protobuf = ">=3.12.0"
-pytz = "*"
requests = ">=2.18.0,<3.0.0dev"
-six = ">=1.13.0"
[package.extras]
-grpc = ["grpcio (>=1.29.0,<2.0dev)"]
+grpc = ["grpcio (>=1.33.2,<2.0dev)", "grpcio-status (>=1.33.2,<2.0dev)"]
grpcgcp = ["grpcio-gcp (>=0.2.2)"]
grpcio-gcp = ["grpcio-gcp (>=0.2.2)"]
[[package]]
name = "google-api-python-client"
-version = "1.12.8"
+version = "2.44.0"
description = "Google API Client Library for Python"
category = "main"
optional = false
-python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*"
+python-versions = ">=3.6"
[package.dependencies]
-google-api-core = ">=1.21.0,<2dev"
-google-auth = ">=1.16.0"
-google-auth-httplib2 = ">=0.0.3"
+google-api-core = ">=1.31.5,<2.0.0 || >2.3.0,<3.0.0dev"
+google-auth = ">=1.16.0,<3.0.0dev"
+google-auth-httplib2 = ">=0.1.0"
httplib2 = ">=0.15.0,<1dev"
-six = ">=1.13.0,<2dev"
-uritemplate = ">=3.0.0,<4dev"
+uritemplate = ">=3.0.1,<5"
[[package]]
name = "google-auth"
-version = "1.34.0"
+version = "2.6.5"
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,<5.0"
+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"
@@ -205,51 +211,80 @@ google-auth = "*"
httplib2 = ">=0.15.0"
six = "*"
+[[package]]
+name = "google-cloud-appengine-logging"
+version = "1.1.1"
+description = ""
+category = "main"
+optional = false
+python-versions = ">=3.6"
+
+[package.dependencies]
+google-api-core = {version = ">=1.31.5,<2.0.0 || >2.3.0,<3.0.0dev", extras = ["grpc"]}
+packaging = ">=14.3"
+proto-plus = ">=1.15.0"
+
+[[package]]
+name = "google-cloud-audit-log"
+version = "0.2.0"
+description = "Google Cloud Audit Protos"
+category = "main"
+optional = false
+python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*"
+
+[package.dependencies]
+googleapis-common-protos = ">=1.52.0"
+protobuf = ">=3.6.0"
+
[[package]]
name = "google-cloud-core"
-version = "1.7.2"
+version = "2.3.0"
description = "Google Cloud API client core library"
category = "main"
optional = false
-python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*"
+python-versions = ">=3.6"
[package.dependencies]
-google-api-core = ">=1.21.0,<2.0.0dev"
-google-auth = ">=1.24.0,<2.0dev"
-six = ">=1.12.0"
+google-api-core = ">=1.31.5,<2.0.0 || >2.3.0,<3.0.0dev"
+google-auth = ">=1.25.0,<3.0dev"
[package.extras]
grpc = ["grpcio (>=1.8.2,<2.0dev)"]
[[package]]
name = "google-cloud-logging"
-version = "1.15.1"
+version = "2.7.1"
description = "Stackdriver Logging API client library"
category = "main"
optional = false
-python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*"
+python-versions = ">=3.6"
[package.dependencies]
-google-api-core = {version = ">=1.15.0,<2.0.0dev", extras = ["grpc"]}
-google-cloud-core = ">=1.1.0,<2.0dev"
+google-api-core = {version = ">=1.31.5,<2.0.0 || >2.3.0,<3.0.0dev", extras = ["grpc"]}
+google-cloud-appengine-logging = ">=0.1.0,<2.0.0dev"
+google-cloud-audit-log = ">=0.1.0,<1.0.0dev"
+google-cloud-core = ">=1.4.1,<3.0.0dev"
+grpc-google-iam-v1 = ">=0.12.3,<0.13dev"
+proto-plus = ">=1.15.0"
[[package]]
name = "google-cloud-monitoring"
-version = "0.34.0"
+version = "2.9.1"
description = "Stackdriver Monitoring API client library"
category = "main"
optional = false
-python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*"
+python-versions = ">=3.6"
[package.dependencies]
-google-api-core = {version = ">=1.14.0,<2.0.0dev", extras = ["grpc"]}
+google-api-core = {version = ">=1.31.5,<2.0.0 || >2.3.0,<3.0.0dev", extras = ["grpc"]}
+proto-plus = ">=1.15.0"
[package.extras]
pandas = ["pandas (>=0.17.1)"]
[[package]]
name = "google-cloud-storage"
-version = "1.42.0"
+version = "1.44.0"
description = "Google Cloud Storage API client library"
category = "main"
optional = false
@@ -260,33 +295,31 @@ google-api-core = {version = ">=1.29.0,<3.0dev", markers = "python_version >= \"
google-auth = {version = ">=1.25.0,<3.0dev", markers = "python_version >= \"3.6\""}
google-cloud-core = {version = ">=1.6.0,<3.0dev", markers = "python_version >= \"3.6\""}
google-resumable-media = {version = ">=1.3.0,<3.0dev", markers = "python_version >= \"3.6\""}
+protobuf = {version = "*", markers = "python_version >= \"3.6\""}
requests = ">=2.18.0,<3.0.0dev"
+six = "*"
[[package]]
name = "google-crc32c"
-version = "1.1.2"
+version = "1.3.0"
description = "A python wrapper of the C library 'Google CRC32C'"
category = "main"
optional = false
python-versions = ">=3.6"
-[package.dependencies]
-cffi = ">=1.0.0"
-
[package.extras]
testing = ["pytest"]
[[package]]
name = "google-resumable-media"
-version = "1.3.3"
+version = "2.3.2"
description = "Utilities for Google Media Downloads and Resumable Uploads"
category = "main"
optional = false
-python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*"
+python-versions = ">= 3.6"
[package.dependencies]
-google-crc32c = {version = ">=1.0,<2.0dev", markers = "python_version >= \"3.5\""}
-six = ">=1.4.0"
+google-crc32c = ">=1.0,<2.0dev"
[package.extras]
aiohttp = ["aiohttp (>=3.6.2,<4.0.0dev)"]
@@ -294,46 +327,72 @@ requests = ["requests (>=2.18.0,<3.0.0dev)"]
[[package]]
name = "googleapis-common-protos"
-version = "1.53.0"
+version = "1.56.0"
description = "Common protobufs used in Google APIs"
category = "main"
optional = false
python-versions = ">=3.6"
[package.dependencies]
+grpcio = {version = ">=1.0.0", optional = true, markers = "extra == \"grpc\""}
protobuf = ">=3.12.0"
[package.extras]
grpc = ["grpcio (>=1.0.0)"]
+[[package]]
+name = "grpc-google-iam-v1"
+version = "0.12.4"
+description = "IAM API client library"
+category = "main"
+optional = false
+python-versions = ">=3.6"
+
+[package.dependencies]
+googleapis-common-protos = {version = ">=1.56.0,<2.0.0dev", extras = ["grpc"]}
+grpcio = ">=1.0.0,<2.0.0dev"
+
[[package]]
name = "grpcio"
-version = "1.39.0"
+version = "1.45.0"
description = "HTTP/2-based RPC framework"
category = "main"
optional = false
-python-versions = "*"
+python-versions = ">=3.6"
[package.dependencies]
six = ">=1.5.2"
[package.extras]
-protobuf = ["grpcio-tools (>=1.39.0)"]
+protobuf = ["grpcio-tools (>=1.45.0)"]
+
+[[package]]
+name = "grpcio-status"
+version = "1.45.0"
+description = "Status proto mapping for gRPC"
+category = "main"
+optional = false
+python-versions = ">=3.6"
+
+[package.dependencies]
+googleapis-common-protos = ">=1.5.5"
+grpcio = ">=1.45.0"
+protobuf = ">=3.12.0"
[[package]]
name = "httplib2"
-version = "0.19.1"
+version = "0.20.4"
description = "A comprehensive HTTP client library."
category = "main"
optional = false
-python-versions = "*"
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
[package.dependencies]
-pyparsing = ">=2.4.2,<3"
+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 = "idna"
-version = "3.2"
+version = "3.3"
description = "Internationalized Domain Names in Applications (IDNA)"
category = "main"
optional = false
@@ -341,20 +400,35 @@ python-versions = ">=3.5"
[[package]]
name = "importlib-metadata"
-version = "4.6.4"
+version = "4.11.3"
description = "Read metadata from Python packages"
category = "dev"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.7"
[package.dependencies]
typing-extensions = {version = ">=3.6.4", markers = "python_version < \"3.8\""}
zipp = ">=0.5"
[package.extras]
-docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
+docs = ["sphinx", "jaraco.packaging (>=9)", "rst.linker (>=1.9)"]
perf = ["ipython"]
-testing = ["pytest (>=4.6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pep517", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy", "importlib-resources (>=1.3)"]
+testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)", "importlib-resources (>=1.3)"]
+
+[[package]]
+name = "importlib-resources"
+version = "5.7.1"
+description = "Read resources from Python packages"
+category = "dev"
+optional = false
+python-versions = ">=3.7"
+
+[package.dependencies]
+zipp = {version = ">=3.1.0", markers = "python_version < \"3.10\""}
+
+[package.extras]
+docs = ["sphinx", "jaraco.packaging (>=9)", "rst.linker (>=1.9)"]
+testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)"]
[[package]]
name = "iniconfig"
@@ -366,73 +440,102 @@ python-versions = "*"
[[package]]
name = "jmespath"
-version = "0.10.0"
+version = "1.0.0"
description = "JSON Matching Expressions"
category = "dev"
optional = false
-python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*"
+python-versions = ">=3.7"
[[package]]
name = "jsonschema"
-version = "3.2.0"
+version = "4.4.0"
description = "An implementation of JSON Schema validation for Python"
category = "dev"
optional = false
-python-versions = "*"
+python-versions = ">=3.7"
[package.dependencies]
attrs = ">=17.4.0"
importlib-metadata = {version = "*", markers = "python_version < \"3.8\""}
-pyrsistent = ">=0.14.0"
-six = ">=1.11.0"
+importlib-resources = {version = ">=1.4.0", markers = "python_version < \"3.9\""}
+pyrsistent = ">=0.14.0,<0.17.0 || >0.17.0,<0.17.1 || >0.17.1,<0.17.2 || >0.17.2"
+typing-extensions = {version = "*", markers = "python_version < \"3.8\""}
[package.extras]
-format = ["idna", "jsonpointer (>1.13)", "rfc3987", "strict-rfc3339", "webcolors"]
-format_nongpl = ["idna", "jsonpointer (>1.13)", "webcolors", "rfc3986-validator (>0.1.0)", "rfc3339-validator"]
+format = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3987", "uri-template", "webcolors (>=1.11)"]
+format_nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3986-validator (>0.1.0)", "uri-template", "webcolors (>=1.11)"]
[[package]]
name = "packaging"
-version = "21.0"
+version = "21.3"
description = "Core utilities for Python packages"
category = "main"
optional = false
python-versions = ">=3.6"
[package.dependencies]
-pyparsing = ">=2.0.2"
+pyparsing = ">=2.0.2,<3.0.5 || >3.0.5"
[[package]]
name = "pluggy"
-version = "0.13.1"
+version = "1.0.0"
description = "plugin and hook calling mechanisms for python"
category = "dev"
optional = false
-python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
+python-versions = ">=3.6"
[package.dependencies]
importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""}
[package.extras]
dev = ["pre-commit", "tox"]
+testing = ["pytest", "pytest-benchmark"]
[[package]]
-name = "protobuf"
-version = "3.17.3"
-description = "Protocol Buffers"
+name = "portalocker"
+version = "2.4.0"
+description = "Wraps the portalocker recipe for easy usage"
+category = "dev"
+optional = false
+python-versions = ">=3.5"
+
+[package.dependencies]
+pywin32 = {version = ">=226", markers = "platform_system == \"Windows\""}
+
+[package.extras]
+docs = ["sphinx (>=1.7.1)"]
+redis = ["redis"]
+tests = ["pytest (>=5.4.1)", "pytest-cov (>=2.8.1)", "sphinx (>=3.0.3)", "pytest-mypy (>=0.8.0)", "redis"]
+
+[[package]]
+name = "proto-plus"
+version = "1.20.3"
+description = "Beautiful, Pythonic protocol buffers."
category = "main"
optional = false
-python-versions = "*"
+python-versions = ">=3.6"
[package.dependencies]
-six = ">=1.9"
+protobuf = ">=3.19.0"
+
+[package.extras]
+testing = ["google-api-core[grpc] (>=1.22.2)"]
+
+[[package]]
+name = "protobuf"
+version = "3.20.0"
+description = "Protocol Buffers"
+category = "main"
+optional = false
+python-versions = ">=3.7"
[[package]]
name = "py"
-version = "1.10.0"
+version = "1.11.0"
description = "library with cross-python path, ini-parsing, io, code, log facilities"
category = "dev"
optional = false
-python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
[[package]]
name = "pyasn1"
@@ -453,33 +556,28 @@ python-versions = "*"
[package.dependencies]
pyasn1 = ">=0.4.6,<0.5.0"
-[[package]]
-name = "pycparser"
-version = "2.20"
-description = "C parser in Python"
-category = "main"
-optional = false
-python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
-
[[package]]
name = "pyparsing"
-version = "2.4.7"
-description = "Python parsing module"
+version = "3.0.8"
+description = "pyparsing module - Classes and methods to define and execute parsing grammars"
category = "main"
optional = false
-python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*"
+python-versions = ">=3.6.8"
+
+[package.extras]
+diagrams = ["railroad-diagrams", "jinja2"]
[[package]]
name = "pyrsistent"
-version = "0.18.0"
+version = "0.18.1"
description = "Persistent/Functional/Immutable data structures"
category = "dev"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.7"
[[package]]
name = "pytest"
-version = "6.2.4"
+version = "6.2.5"
description = "pytest: simple powerful testing with Python"
category = "dev"
optional = false
@@ -492,13 +590,57 @@ colorama = {version = "*", markers = "sys_platform == \"win32\""}
importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""}
iniconfig = "*"
packaging = "*"
-pluggy = ">=0.12,<1.0.0a1"
+pluggy = ">=0.12,<2.0"
py = ">=1.8.2"
toml = "*"
[package.extras]
testing = ["argcomplete", "hypothesis (>=3.56)", "mock", "nose", "requests", "xmlschema"]
+[[package]]
+name = "pytest-forked"
+version = "1.4.0"
+description = "run tests in isolated forked subprocesses"
+category = "dev"
+optional = false
+python-versions = ">=3.6"
+
+[package.dependencies]
+py = "*"
+pytest = ">=3.10"
+
+[[package]]
+name = "pytest-terraform"
+version = "0.6.1"
+description = "A pytest plugin for using terraform fixtures"
+category = "dev"
+optional = false
+python-versions = ">=3.6,<4.0"
+
+[package.dependencies]
+jmespath = ">=0.10.0"
+portalocker = ">=1.7.0"
+pytest = ">=6.0"
+pytest-xdist = ">=1.31.0"
+
+[[package]]
+name = "pytest-xdist"
+version = "2.5.0"
+description = "pytest xdist plugin for distributed testing and loop-on-failing modes"
+category = "dev"
+optional = false
+python-versions = ">=3.6"
+
+[package.dependencies]
+execnet = ">=1.1"
+pytest = ">=6.2.0"
+pytest-forked = "*"
+
+[package.extras]
+psutil = ["psutil (>=3.0)"]
+setproctitle = ["setproctitle"]
+testing = ["filelock"]
+
[[package]]
name = "python-dateutil"
version = "2.8.2"
@@ -511,20 +653,20 @@ python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7"
six = ">=1.5"
[[package]]
-name = "pytz"
-version = "2021.1"
-description = "World timezone definitions, modern and historical"
-category = "main"
+name = "pywin32"
+version = "303"
+description = "Python for Window Extensions"
+category = "dev"
optional = false
python-versions = "*"
[[package]]
name = "pyyaml"
-version = "5.4.1"
+version = "6.0"
description = "YAML parser and emitter for Python"
category = "dev"
optional = false
-python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*"
+python-versions = ">=3.6"
[[package]]
name = "ratelimiter"
@@ -539,7 +681,7 @@ test = ["pytest (>=3.0)", "pytest-asyncio"]
[[package]]
name = "requests"
-version = "2.26.0"
+version = "2.27.1"
description = "Python HTTP for Humans."
category = "main"
optional = false
@@ -568,18 +710,18 @@ six = ">=1.7.0"
[[package]]
name = "rsa"
-version = "4.7.2"
+version = "4.8"
description = "Pure-Python RSA implementation"
category = "main"
optional = false
-python-versions = ">=3.5, <4"
+python-versions = ">=3.6,<4"
[package.dependencies]
pyasn1 = ">=0.1.3"
[[package]]
name = "s3transfer"
-version = "0.5.0"
+version = "0.5.2"
description = "An Amazon S3 Transfer Manager"
category = "dev"
optional = false
@@ -620,319 +762,326 @@ python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*"
[[package]]
name = "typing-extensions"
-version = "3.10.0.0"
-description = "Backported and Experimental Type Hints for Python 3.5+"
+version = "4.2.0"
+description = "Backported and Experimental Type Hints for Python 3.7+"
category = "dev"
optional = false
-python-versions = "*"
+python-versions = ">=3.7"
[[package]]
name = "uritemplate"
-version = "3.0.1"
-description = "URI templates"
+version = "4.1.1"
+description = "Implementation of RFC 6570 URI Templates"
category = "main"
optional = false
-python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
+python-versions = ">=3.6"
[[package]]
name = "urllib3"
-version = "1.26.6"
+version = "1.26.9"
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.*, <4"
[package.extras]
-brotli = ["brotlipy (>=0.6.0)"]
+brotli = ["brotlicffi (>=0.8.0)", "brotli (>=1.0.9)", "brotlipy (>=0.6.0)"]
secure = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "certifi", "ipaddress"]
socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"]
[[package]]
name = "zipp"
-version = "3.5.0"
+version = "3.8.0"
description = "Backport of pathlib-compatible object wrapper for zip files"
category = "dev"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.7"
[package.extras]
-docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
-testing = ["pytest (>=4.6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "jaraco.itertools", "func-timeout", "pytest-black (>=0.3.7)", "pytest-mypy"]
+docs = ["sphinx", "jaraco.packaging (>=9)", "rst.linker (>=1.9)"]
+testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "jaraco.itertools", "func-timeout", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)"]
[metadata]
lock-version = "1.1"
-python-versions = "^3.6"
-content-hash = "3421ed2056ca2b67f95f020b9e8389e787ee80e7e4c95ba3c03bff5c2163594d"
+python-versions = "^3.7"
+content-hash = "e2fb1d908143d796511e2fb5d1327668771703a22f11c0bbbfd96988aa72c417"
[metadata.files]
argcomplete = [
- {file = "argcomplete-1.12.3-py2.py3-none-any.whl", hash = "sha256:291f0beca7fd49ce285d2f10e4c1c77e9460cf823eef2de54df0c0fec88b0d81"},
- {file = "argcomplete-1.12.3.tar.gz", hash = "sha256:2c7dbffd8c045ea534921e63b0be6fe65e88599990d8dc408ac8c542b72a5445"},
+ {file = "argcomplete-2.0.0-py2.py3-none-any.whl", hash = "sha256:cffa11ea77999bb0dd27bb25ff6dc142a6796142f68d45b1a26b11f58724561e"},
+ {file = "argcomplete-2.0.0.tar.gz", hash = "sha256:6372ad78c89d662035101418ae253668445b391755cfe94ea52f1b9d22425b20"},
]
atomicwrites = [
{file = "atomicwrites-1.4.0-py2.py3-none-any.whl", hash = "sha256:6d1784dea7c0c8d4a5172b6c620f40b6e4cbfdf96d783691f2e1302a7b88e197"},
{file = "atomicwrites-1.4.0.tar.gz", hash = "sha256:ae70396ad1a434f9c7046fd2dd196fc04b12f9e91ffb859164193be8b6168a7a"},
]
attrs = [
- {file = "attrs-21.2.0-py2.py3-none-any.whl", hash = "sha256:149e90d6d8ac20db7a955ad60cf0e6881a3f20d37096140088356da6c716b0b1"},
- {file = "attrs-21.2.0.tar.gz", hash = "sha256:ef6aaac3ca6cd92904cdd0d83f629a15f18053ec84e6432106f7a4d04ae4f5fb"},
+ {file = "attrs-21.4.0-py2.py3-none-any.whl", hash = "sha256:2d27e3784d7a565d36ab851fe94887c5eccd6a463168875832a1be79c82828b4"},
+ {file = "attrs-21.4.0.tar.gz", hash = "sha256:626ba8234211db98e869df76230a137c4c40a12d72445c45d5f5b716f076e2fd"},
]
boto3 = [
- {file = "boto3-1.18.21-py3-none-any.whl", hash = "sha256:59b6e8e79b2114e21388288a06a004f2a9378b1e0fc58466a35da8fb74fe2dd8"},
- {file = "boto3-1.18.21.tar.gz", hash = "sha256:00748c760dc30be61c6db4b092718f6a9f8d27c767da0e232695a65adb75cde8"},
+ {file = "boto3-1.21.42-py3-none-any.whl", hash = "sha256:895fb88c69be78f82cfee58a79c97a3ad8d4a2a1209041a411d7d6b9fc5393e4"},
+ {file = "boto3-1.21.42.tar.gz", hash = "sha256:bcb541175a7d190dd919a0af0e807ee6e9d26f135551e741b10d94343f2d7588"},
]
botocore = [
- {file = "botocore-1.21.21-py3-none-any.whl", hash = "sha256:fa5ac13829d24fcdd385e82c3b6d78e22d93f427cca8dac38158cae84a8cc2f5"},
- {file = "botocore-1.21.21.tar.gz", hash = "sha256:12cfe74b0a5c44afb34bdd86c1f8ad74bc2ad9ec168eaed9040ef70cb3db944f"},
+ {file = "botocore-1.24.42-py3-none-any.whl", hash = "sha256:14aee41c8bf59d2dd2d89e8751fa37d3c95dcb92707d1966aa02697e914c1417"},
+ {file = "botocore-1.24.42.tar.gz", hash = "sha256:a2baa9484bbaee96ef312c049b8e360badcab58329e487b57567644a571b5f4a"},
]
c7n = []
cachetools = [
- {file = "cachetools-4.2.2-py3-none-any.whl", hash = "sha256:2cc0b89715337ab6dbba85b5b50effe2b0c74e035d83ee8ed637cf52f12ae001"},
- {file = "cachetools-4.2.2.tar.gz", hash = "sha256:61b5ed1e22a0924aed1d23b478f37e8d52549ff8a961de2909c69bf950020cff"},
+ {file = "cachetools-5.0.0-py3-none-any.whl", hash = "sha256:8fecd4203a38af17928be7b90689d8083603073622229ca7077b72d8e5a976e4"},
+ {file = "cachetools-5.0.0.tar.gz", hash = "sha256:486471dfa8799eb7ec503a8059e263db000cdda20075ce5e48903087f79d5fd6"},
]
certifi = [
- {file = "certifi-2021.5.30-py2.py3-none-any.whl", hash = "sha256:50b1e4f8446b06f41be7dd6338db18e0990601dce795c2b1686458aa7e8fa7d8"},
- {file = "certifi-2021.5.30.tar.gz", hash = "sha256:2bbf76fd432960138b3ef6dda3dde0544f27cbf8546c458e60baf371917ba9ee"},
-]
-cffi = [
- {file = "cffi-1.14.6-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:22b9c3c320171c108e903d61a3723b51e37aaa8c81255b5e7ce102775bd01e2c"},
- {file = "cffi-1.14.6-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:f0c5d1acbfca6ebdd6b1e3eded8d261affb6ddcf2186205518f1428b8569bb99"},
- {file = "cffi-1.14.6-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:99f27fefe34c37ba9875f224a8f36e31d744d8083e00f520f133cab79ad5e819"},
- {file = "cffi-1.14.6-cp27-cp27m-win32.whl", hash = "sha256:55af55e32ae468e9946f741a5d51f9896da6b9bf0bbdd326843fec05c730eb20"},
- {file = "cffi-1.14.6-cp27-cp27m-win_amd64.whl", hash = "sha256:7bcac9a2b4fdbed2c16fa5681356d7121ecabf041f18d97ed5b8e0dd38a80224"},
- {file = "cffi-1.14.6-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:ed38b924ce794e505647f7c331b22a693bee1538fdf46b0222c4717b42f744e7"},
- {file = "cffi-1.14.6-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:e22dcb48709fc51a7b58a927391b23ab37eb3737a98ac4338e2448bef8559b33"},
- {file = "cffi-1.14.6-cp35-cp35m-macosx_10_9_x86_64.whl", hash = "sha256:aedb15f0a5a5949ecb129a82b72b19df97bbbca024081ed2ef88bd5c0a610534"},
- {file = "cffi-1.14.6-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:48916e459c54c4a70e52745639f1db524542140433599e13911b2f329834276a"},
- {file = "cffi-1.14.6-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:f627688813d0a4140153ff532537fbe4afea5a3dffce1f9deb7f91f848a832b5"},
- {file = "cffi-1.14.6-cp35-cp35m-win32.whl", hash = "sha256:f0010c6f9d1a4011e429109fda55a225921e3206e7f62a0c22a35344bfd13cca"},
- {file = "cffi-1.14.6-cp35-cp35m-win_amd64.whl", hash = "sha256:57e555a9feb4a8460415f1aac331a2dc833b1115284f7ded7278b54afc5bd218"},
- {file = "cffi-1.14.6-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:e8c6a99be100371dbb046880e7a282152aa5d6127ae01783e37662ef73850d8f"},
- {file = "cffi-1.14.6-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:19ca0dbdeda3b2615421d54bef8985f72af6e0c47082a8d26122adac81a95872"},
- {file = "cffi-1.14.6-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:d950695ae4381ecd856bcaf2b1e866720e4ab9a1498cba61c602e56630ca7195"},
- {file = "cffi-1.14.6-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e9dc245e3ac69c92ee4c167fbdd7428ec1956d4e754223124991ef29eb57a09d"},
- {file = "cffi-1.14.6-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a8661b2ce9694ca01c529bfa204dbb144b275a31685a075ce123f12331be790b"},
- {file = "cffi-1.14.6-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b315d709717a99f4b27b59b021e6207c64620790ca3e0bde636a6c7f14618abb"},
- {file = "cffi-1.14.6-cp36-cp36m-win32.whl", hash = "sha256:80b06212075346b5546b0417b9f2bf467fea3bfe7352f781ffc05a8ab24ba14a"},
- {file = "cffi-1.14.6-cp36-cp36m-win_amd64.whl", hash = "sha256:a9da7010cec5a12193d1af9872a00888f396aba3dc79186604a09ea3ee7c029e"},
- {file = "cffi-1.14.6-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:4373612d59c404baeb7cbd788a18b2b2a8331abcc84c3ba40051fcd18b17a4d5"},
- {file = "cffi-1.14.6-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:f10afb1004f102c7868ebfe91c28f4a712227fe4cb24974350ace1f90e1febbf"},
- {file = "cffi-1.14.6-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:fd4305f86f53dfd8cd3522269ed7fc34856a8ee3709a5e28b2836b2db9d4cd69"},
- {file = "cffi-1.14.6-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6d6169cb3c6c2ad50db5b868db6491a790300ade1ed5d1da29289d73bbe40b56"},
- {file = "cffi-1.14.6-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5d4b68e216fc65e9fe4f524c177b54964af043dde734807586cf5435af84045c"},
- {file = "cffi-1.14.6-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:33791e8a2dc2953f28b8d8d300dde42dd929ac28f974c4b4c6272cb2955cb762"},
- {file = "cffi-1.14.6-cp37-cp37m-win32.whl", hash = "sha256:0c0591bee64e438883b0c92a7bed78f6290d40bf02e54c5bf0978eaf36061771"},
- {file = "cffi-1.14.6-cp37-cp37m-win_amd64.whl", hash = "sha256:8eb687582ed7cd8c4bdbff3df6c0da443eb89c3c72e6e5dcdd9c81729712791a"},
- {file = "cffi-1.14.6-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ba6f2b3f452e150945d58f4badd92310449876c4c954836cfb1803bdd7b422f0"},
- {file = "cffi-1.14.6-cp38-cp38-manylinux1_i686.whl", hash = "sha256:64fda793737bc4037521d4899be780534b9aea552eb673b9833b01f945904c2e"},
- {file = "cffi-1.14.6-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:9f3e33c28cd39d1b655ed1ba7247133b6f7fc16fa16887b120c0c670e35ce346"},
- {file = "cffi-1.14.6-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:26bb2549b72708c833f5abe62b756176022a7b9a7f689b571e74c8478ead51dc"},
- {file = "cffi-1.14.6-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:eb687a11f0a7a1839719edd80f41e459cc5366857ecbed383ff376c4e3cc6afd"},
- {file = "cffi-1.14.6-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d2ad4d668a5c0645d281dcd17aff2be3212bc109b33814bbb15c4939f44181cc"},
- {file = "cffi-1.14.6-cp38-cp38-win32.whl", hash = "sha256:487d63e1454627c8e47dd230025780e91869cfba4c753a74fda196a1f6ad6548"},
- {file = "cffi-1.14.6-cp38-cp38-win_amd64.whl", hash = "sha256:c33d18eb6e6bc36f09d793c0dc58b0211fccc6ae5149b808da4a62660678b156"},
- {file = "cffi-1.14.6-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:06c54a68935738d206570b20da5ef2b6b6d92b38ef3ec45c5422c0ebaf338d4d"},
- {file = "cffi-1.14.6-cp39-cp39-manylinux1_i686.whl", hash = "sha256:f174135f5609428cc6e1b9090f9268f5c8935fddb1b25ccb8255a2d50de6789e"},
- {file = "cffi-1.14.6-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:f3ebe6e73c319340830a9b2825d32eb6d8475c1dac020b4f0aa774ee3b898d1c"},
- {file = "cffi-1.14.6-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3c8d896becff2fa653dc4438b54a5a25a971d1f4110b32bd3068db3722c80202"},
- {file = "cffi-1.14.6-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4922cd707b25e623b902c86188aca466d3620892db76c0bdd7b99a3d5e61d35f"},
- {file = "cffi-1.14.6-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c9e005e9bd57bc987764c32a1bee4364c44fdc11a3cc20a40b93b444984f2b87"},
- {file = "cffi-1.14.6-cp39-cp39-win32.whl", hash = "sha256:eb9e2a346c5238a30a746893f23a9535e700f8192a68c07c0258e7ece6ff3728"},
- {file = "cffi-1.14.6-cp39-cp39-win_amd64.whl", hash = "sha256:818014c754cd3dba7229c0f5884396264d51ffb87ec86e927ef0be140bfdb0d2"},
- {file = "cffi-1.14.6.tar.gz", hash = "sha256:c9a875ce9d7fe32887784274dd533c57909b7b1dcadcc128a2ac21331a9765dd"},
+ {file = "certifi-2021.10.8-py2.py3-none-any.whl", hash = "sha256:d62a0163eb4c2344ac042ab2bdf75399a71a2d8c7d47eac2e2ee91b9d6339569"},
+ {file = "certifi-2021.10.8.tar.gz", hash = "sha256:78884e7c1d4b00ce3cea67b44566851c4343c120abd683433ce934a68ea58872"},
]
charset-normalizer = [
- {file = "charset-normalizer-2.0.4.tar.gz", hash = "sha256:f23667ebe1084be45f6ae0538e4a5a865206544097e4e8bbcacf42cd02a348f3"},
- {file = "charset_normalizer-2.0.4-py3-none-any.whl", hash = "sha256:0c8911edd15d19223366a194a513099a302055a962bca2cec0f54b8b63175d8b"},
+ {file = "charset-normalizer-2.0.12.tar.gz", hash = "sha256:2857e29ff0d34db842cd7ca3230549d1a697f96ee6d3fb071cfa6c7393832597"},
+ {file = "charset_normalizer-2.0.12-py3-none-any.whl", hash = "sha256:6881edbebdb17b39b4eaaa821b438bf6eddffb4468cf344f09f89def34a8b1df"},
]
colorama = [
{file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"},
{file = "colorama-0.4.4.tar.gz", hash = "sha256:5941b2b48a20143d2267e95b1c2a7603ce057ee39fd88e7329b0c292aa16869b"},
]
+docutils = [
+ {file = "docutils-0.17.1-py2.py3-none-any.whl", hash = "sha256:cf316c8370a737a022b72b56874f6602acf974a37a9fba42ec2876387549fc61"},
+ {file = "docutils-0.17.1.tar.gz", hash = "sha256:686577d2e4c32380bb50cbb22f575ed742d58168cee37e99117a854bcd88f125"},
+]
+execnet = [
+ {file = "execnet-1.9.0-py2.py3-none-any.whl", hash = "sha256:a295f7cc774947aac58dde7fdc85f4aa00c42adf5d8f5468fc630c1acf30a142"},
+ {file = "execnet-1.9.0.tar.gz", hash = "sha256:8f694f3ba9cc92cab508b152dcfe322153975c29bda272e2fd7f3f00f36e47c5"},
+]
google-api-core = [
- {file = "google-api-core-1.31.1.tar.gz", hash = "sha256:108cf94336aed7e614eafc53933ef02adf63b9f0fd87e8f8212acaa09eaca456"},
- {file = "google_api_core-1.31.1-py2.py3-none-any.whl", hash = "sha256:1d63e2b28057d79d64795c9a70abcecb5b7e96da732d011abf09606a39b48701"},
+ {file = "google-api-core-2.8.0.tar.gz", hash = "sha256:065bb8e11c605fd232707ae50963dc1c8af5b3c95b4568887515985e6c1156b3"},
+ {file = "google_api_core-2.8.0-py3-none-any.whl", hash = "sha256:1b9f59236ce1bae9a687c1d4f22957e79a2669e53d032893f6bf0fca54f6931d"},
]
google-api-python-client = [
- {file = "google-api-python-client-1.12.8.tar.gz", hash = "sha256:f3b9684442eec2cfe9f9bb48e796ef919456b82142c7528c5fd527e5224f08bb"},
- {file = "google_api_python_client-1.12.8-py2.py3-none-any.whl", hash = "sha256:3c4c4ca46b5c21196bec7ee93453443e477d82cbfa79234d1ce0645f81170eaf"},
+ {file = "google-api-python-client-2.44.0.tar.gz", hash = "sha256:fc9c31737b82a592d29636c6f77af9cf9666e45ed966d0a5ebe20711aa0df83c"},
+ {file = "google_api_python_client-2.44.0-py2.py3-none-any.whl", hash = "sha256:0588acf65ea0569ece979c4eecdd5366c98ba314c1212a86a2808de0b7bcd02b"},
]
google-auth = [
- {file = "google-auth-1.34.0.tar.gz", hash = "sha256:f1094088bae046fb06f3d1a3d7df14717e8d959e9105b79c57725bd4e17597a2"},
- {file = "google_auth-1.34.0-py2.py3-none-any.whl", hash = "sha256:bd6aa5916970a823e76ffb3d5c3ad3f0bedafca0a7fa53bc15149ab21cb71e05"},
+ {file = "google-auth-2.6.5.tar.gz", hash = "sha256:04e224f241c0566477bb35a8a93be8c635210de743bde454d49393cfb605266d"},
+ {file = "google_auth-2.6.5-py2.py3-none-any.whl", hash = "sha256:9a88ee548f6fd49467e2e443dfbfe10344e5a270629a137a3a0b3437ec6b02a6"},
]
google-auth-httplib2 = [
{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"},
]
+google-cloud-appengine-logging = [
+ {file = "google-cloud-appengine-logging-1.1.1.tar.gz", hash = "sha256:361450ed7d7bfd8efd0ef253e21680aeb6f6df3cf057e5e8253f5851f8cbbca7"},
+ {file = "google_cloud_appengine_logging-1.1.1-py2.py3-none-any.whl", hash = "sha256:cc94f3ce12131091fc478cfc5a6e7e93261b43440c71294b3a0aa894ef1e90f5"},
+]
+google-cloud-audit-log = [
+ {file = "google-cloud-audit-log-0.2.0.tar.gz", hash = "sha256:d0852f525ad65705f9fbff6288be4493e1449a7906fb5e01bd71c8d1e424d1fc"},
+ {file = "google_cloud_audit_log-0.2.0-py2.py3-none-any.whl", hash = "sha256:ecc7f5f2168ad4014331d6397fcea3750b2d41900f0ef6d1081cd78b3a6420e9"},
+]
google-cloud-core = [
- {file = "google-cloud-core-1.7.2.tar.gz", hash = "sha256:b1030aadcbb2aeb4ee51475426351af83c1072456b918fb8fdb80666c4bb63b5"},
- {file = "google_cloud_core-1.7.2-py2.py3-none-any.whl", hash = "sha256:5b77935f3d9573e27007749a3b522f08d764c5b5930ff1527b2ab2743e9f0c15"},
+ {file = "google-cloud-core-2.3.0.tar.gz", hash = "sha256:fdaa629e6174b4177c2d56eb8ab1ddd87661064d0a3e9bb06b62e4d7e2344669"},
+ {file = "google_cloud_core-2.3.0-py2.py3-none-any.whl", hash = "sha256:35900f614045a33d5208e1d50f0d7945df98ce088388ce7237e7a2db12d5656e"},
]
google-cloud-logging = [
- {file = "google-cloud-logging-1.15.1.tar.gz", hash = "sha256:cb0d4af9d684eb8a416f14c39d9fa6314be3adf41db2dd8ee8e30db9e8853d90"},
- {file = "google_cloud_logging-1.15.1-py2.py3-none-any.whl", hash = "sha256:20c7557fd170891eab1a5e428338ad646203ddc519bc2fc57fd59bef14cd3602"},
+ {file = "google-cloud-logging-2.7.1.tar.gz", hash = "sha256:16a259abe76b2c8d580384b80b2d136f2b924efabd6bf9ec917cc1e408f05ae7"},
+ {file = "google_cloud_logging-2.7.1-py2.py3-none-any.whl", hash = "sha256:f230aea93fd7180c31eb68a583a13de748d85b8cf3993eb49f09fb17de60ecd4"},
]
google-cloud-monitoring = [
- {file = "google-cloud-monitoring-0.34.0.tar.gz", hash = "sha256:75370af645dd815c234561e7b356fa5d99b0ee6448c0e5d013455c72af961d0b"},
- {file = "google_cloud_monitoring-0.34.0-py2.py3-none-any.whl", hash = "sha256:0f9dea65e4b82c426dc9700cb6011ab4eac43394b38c4fd0b7045735ddb4a760"},
+ {file = "google-cloud-monitoring-2.9.1.tar.gz", hash = "sha256:16807a4860eb5431c6eb459e5a61b07d56d2c2deb176af5d6b64304a29292255"},
+ {file = "google_cloud_monitoring-2.9.1-py2.py3-none-any.whl", hash = "sha256:600c731aae5eed56299855807e8b3b6b6c877216eb724ccf35f2f3e1741c7022"},
]
google-cloud-storage = [
- {file = "google-cloud-storage-1.42.0.tar.gz", hash = "sha256:c1dd3d09198edcf24ec6803dd4545e867d82b998f06a68ead3b6857b1840bdae"},
- {file = "google_cloud_storage-1.42.0-py2.py3-none-any.whl", hash = "sha256:92a9c8b1a6a278c5c12877fe1a966ecd0cae327cf98c6ae50deedf1a32d6cf2b"},
+ {file = "google-cloud-storage-1.44.0.tar.gz", hash = "sha256:29edbfeedd157d853049302bf5d104055c6f0cb7ef283537da3ce3f730073001"},
+ {file = "google_cloud_storage-1.44.0-py2.py3-none-any.whl", hash = "sha256:cd4a223e9c18d771721a85c98a9c01b97d257edddff833ba63b7b1f0b9b4d6e9"},
]
google-crc32c = [
- {file = "google-crc32c-1.1.2.tar.gz", hash = "sha256:dff5bd1236737f66950999d25de7a78144548ebac7788d30ada8c1b6ead60b27"},
- {file = "google_crc32c-1.1.2-cp36-cp36m-macosx_10_14_x86_64.whl", hash = "sha256:8ed8f6dc4f55850cba2eb22b78902ad37f397ee02692d3b8e00842e9af757321"},
- {file = "google_crc32c-1.1.2-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:110157fb19ab5db15603debfaf5fcfbac9627576787d9caf8618ff96821a7a1f"},
- {file = "google_crc32c-1.1.2-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:80abca603187093ea089cd1215c3779040dda55d3cdabc0cd5ea0e10df7bff99"},
- {file = "google_crc32c-1.1.2-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:6789db0b12aab12a0f04de22ed8412dfa5f6abd5a342ea19f15355064e1cc387"},
- {file = "google_crc32c-1.1.2-cp36-cp36m-manylinux2014_x86_64.whl", hash = "sha256:ea170341a4a9078a067b431044cd56c73553425833a7c2bb81734777a230ad4b"},
- {file = "google_crc32c-1.1.2-cp36-cp36m-win32.whl", hash = "sha256:a64e0e8ed6076a8d867fc4622ad821c55eba8dff1b48b18f56b7c2392e22ab9d"},
- {file = "google_crc32c-1.1.2-cp36-cp36m-win_amd64.whl", hash = "sha256:9372211acbcc207f63ffaffea1d05f3244a21311e4710721ffff3e8b7a0d24d0"},
- {file = "google_crc32c-1.1.2-cp37-cp37m-macosx_10_14_x86_64.whl", hash = "sha256:0ae3cf54e0d4d83c8af1afe96fc0970fbf32f1b29275f3bfd44ce25c4b622a2b"},
- {file = "google_crc32c-1.1.2-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:34a97937f164147aefa53c3277364fd3bfa7fd244cbebbd5a976fa8325fb496b"},
- {file = "google_crc32c-1.1.2-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:91ad96ee2958311d0bb75ffe5c25c87fb521ef547c09e04a8bb6143e75fb1367"},
- {file = "google_crc32c-1.1.2-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:b5ea1055fe470334ced844270e7c808b04fe31e3e6394675daa77f6789ca9eff"},
- {file = "google_crc32c-1.1.2-cp37-cp37m-manylinux2014_x86_64.whl", hash = "sha256:e6458c41236d37cb982120b070ebcc115687c852bee24cdd18792da2640cf44d"},
- {file = "google_crc32c-1.1.2-cp37-cp37m-win32.whl", hash = "sha256:e5af77656e8d367701f40f80a91c985ca43319f322f0a36ba9f93909d0bc4cb2"},
- {file = "google_crc32c-1.1.2-cp37-cp37m-win_amd64.whl", hash = "sha256:ae7b9e7e2ca1b06c3a68b6ef223947a52c30ffae329b1a2be3402756073f2732"},
- {file = "google_crc32c-1.1.2-cp38-cp38-macosx_10_14_x86_64.whl", hash = "sha256:7c5138ed2e815189ba524756e027ac5833365e86115b1c2e6d9e833974a58d82"},
- {file = "google_crc32c-1.1.2-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:a6c8a712ffae56c805ca732b735af02860b246bed2c1acb38ea954a8b2dc4581"},
- {file = "google_crc32c-1.1.2-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:49838ede42592154f9fcd21d07c7a43a67b00a36e252f82ae72542fde09dc51f"},
- {file = "google_crc32c-1.1.2-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:ef2ed6d0ac4de4ac602903e203eccd25ec8e37f1446fe1a3d2953a658035e0a5"},
- {file = "google_crc32c-1.1.2-cp38-cp38-manylinux2014_x86_64.whl", hash = "sha256:51f4aa06125bf0641f65fb83268853545dbeb36b98ccfec69ef57dcb6b73b176"},
- {file = "google_crc32c-1.1.2-cp38-cp38-win32.whl", hash = "sha256:1dc6904c0d958f43102c85d70792cca210d3d051ddbeecd0eff10abcd981fdfa"},
- {file = "google_crc32c-1.1.2-cp38-cp38-win_amd64.whl", hash = "sha256:298a9a922d35b123a73be80233d0f19c6ea01f008743561a8937f9dd83fb586b"},
- {file = "google_crc32c-1.1.2-cp39-cp39-macosx_10_14_x86_64.whl", hash = "sha256:ab2b31395fbeeae6d15c98bd7f8b9fb76a18f18f87adc11b1f6dbe8f90d8382f"},
- {file = "google_crc32c-1.1.2-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:d4a0d4fb938c2c3c0076445c9bd1215a3bd3df557b88d8b05ec2889ca0c92f8d"},
- {file = "google_crc32c-1.1.2-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:d0630670d27785d7e610e72752dc8087436d00d2c7115e149c0a754babb56d3e"},
- {file = "google_crc32c-1.1.2-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:364eb36e8d9d34542c17b0c410035b0557edd4300a92ed736b237afaa0fd6dae"},
- {file = "google_crc32c-1.1.2-cp39-cp39-manylinux2014_x86_64.whl", hash = "sha256:0dd9b61d0c63043b013349c9ec8a83ec2b05c96410c5bc257da5d0de743fc171"},
- {file = "google_crc32c-1.1.2-cp39-cp39-win32.whl", hash = "sha256:92ed6062792b989e84621e07a5f3d37da9cc3153b77d23a582921f14863af31d"},
- {file = "google_crc32c-1.1.2-cp39-cp39-win_amd64.whl", hash = "sha256:78cf5b1bd30f3a6033b41aa4ce8c796870bc4645a15d3ef47a4b05d31b0a6dc1"},
+ {file = "google-crc32c-1.3.0.tar.gz", hash = "sha256:276de6273eb074a35bc598f8efbc00c7869c5cf2e29c90748fccc8c898c244df"},
+ {file = "google_crc32c-1.3.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:cb6994fff247987c66a8a4e550ef374671c2b82e3c0d2115e689d21e511a652d"},
+ {file = "google_crc32c-1.3.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c9da0a39b53d2fab3e5467329ed50e951eb91386e9d0d5b12daf593973c3b168"},
+ {file = "google_crc32c-1.3.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:eb0b14523758e37802f27b7f8cd973f5f3d33be7613952c0df904b68c4842f0e"},
+ {file = "google_crc32c-1.3.0-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:95c68a4b9b7828ba0428f8f7e3109c5d476ca44996ed9a5f8aac6269296e2d59"},
+ {file = "google_crc32c-1.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9c3cf890c3c0ecfe1510a452a165431b5831e24160c5fcf2071f0f85ca5a47cd"},
+ {file = "google_crc32c-1.3.0-cp310-cp310-win32.whl", hash = "sha256:3bbce1be3687bbfebe29abdb7631b83e6b25da3f4e1856a1611eb21854b689ea"},
+ {file = "google_crc32c-1.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:c124b8c8779bf2d35d9b721e52d4adb41c9bfbde45e6a3f25f0820caa9aba73f"},
+ {file = "google_crc32c-1.3.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:42ae4781333e331a1743445931b08ebdad73e188fd554259e772556fc4937c48"},
+ {file = "google_crc32c-1.3.0-cp36-cp36m-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:ff71073ebf0e42258a42a0b34f2c09ec384977e7f6808999102eedd5b49920e3"},
+ {file = "google_crc32c-1.3.0-cp36-cp36m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:fe31de3002e7b08eb20823b3735b97c86c5926dd0581c7710a680b418a8709d4"},
+ {file = "google_crc32c-1.3.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dd7760a88a8d3d705ff562aa93f8445ead54f58fd482e4f9e2bafb7e177375d4"},
+ {file = "google_crc32c-1.3.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:a0b9e622c3b2b8d0ce32f77eba617ab0d6768b82836391e4f8f9e2074582bf02"},
+ {file = "google_crc32c-1.3.0-cp36-cp36m-win32.whl", hash = "sha256:779cbf1ce375b96111db98fca913c1f5ec11b1d870e529b1dc7354b2681a8c3a"},
+ {file = "google_crc32c-1.3.0-cp36-cp36m-win_amd64.whl", hash = "sha256:04e7c220798a72fd0f08242bc8d7a05986b2a08a0573396187fd32c1dcdd58b3"},
+ {file = "google_crc32c-1.3.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:e7a539b9be7b9c00f11ef16b55486141bc2cdb0c54762f84e3c6fc091917436d"},
+ {file = "google_crc32c-1.3.0-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:ca60076c388728d3b6ac3846842474f4250c91efbfe5afa872d3ffd69dd4b318"},
+ {file = "google_crc32c-1.3.0-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:05340b60bf05b574159e9bd940152a47d38af3fb43803ffe71f11d704b7696a6"},
+ {file = "google_crc32c-1.3.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:318f73f5484b5671f0c7f5f63741ab020a599504ed81d209b5c7129ee4667407"},
+ {file = "google_crc32c-1.3.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:9f58099ad7affc0754ae42e6d87443299f15d739b0ce03c76f515153a5cda06c"},
+ {file = "google_crc32c-1.3.0-cp37-cp37m-win32.whl", hash = "sha256:f52a4ad2568314ee713715b1e2d79ab55fab11e8b304fd1462ff5cccf4264b3e"},
+ {file = "google_crc32c-1.3.0-cp37-cp37m-win_amd64.whl", hash = "sha256:bab4aebd525218bab4ee615786c4581952eadc16b1ff031813a2fd51f0cc7b08"},
+ {file = "google_crc32c-1.3.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:dda4d8a3bb0b50f540f6ff4b6033f3a74e8bf0bd5320b70fab2c03e512a62812"},
+ {file = "google_crc32c-1.3.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:fec221a051150eeddfdfcff162e6db92c65ecf46cb0f7bb1bf812a1520ec026b"},
+ {file = "google_crc32c-1.3.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:226f2f9b8e128a6ca6a9af9b9e8384f7b53a801907425c9a292553a3a7218ce0"},
+ {file = "google_crc32c-1.3.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:a7f9cbea4245ee36190f85fe1814e2d7b1e5f2186381b082f5d59f99b7f11328"},
+ {file = "google_crc32c-1.3.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6a4db36f9721fdf391646685ecffa404eb986cbe007a3289499020daf72e88a2"},
+ {file = "google_crc32c-1.3.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:12674a4c3b56b706153a358eaa1018c4137a5a04635b92b4652440d3d7386206"},
+ {file = "google_crc32c-1.3.0-cp38-cp38-win32.whl", hash = "sha256:650e2917660e696041ab3dcd7abac160b4121cd9a484c08406f24c5964099829"},
+ {file = "google_crc32c-1.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:58be56ae0529c664cc04a9c76e68bb92b091e0194d6e3c50bea7e0f266f73713"},
+ {file = "google_crc32c-1.3.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:96a8918a78d5d64e07c8ea4ed2bc44354e3f93f46a4866a40e8db934e4c0d74b"},
+ {file = "google_crc32c-1.3.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:13af315c3a0eec8bb8b8d80b8b128cb3fcd17d7e4edafc39647846345a3f003a"},
+ {file = "google_crc32c-1.3.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:6311853aa2bba4064d0c28ca54e7b50c4d48e3de04f6770f6c60ebda1e975267"},
+ {file = "google_crc32c-1.3.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ed447680ff21c14aaceb6a9f99a5f639f583ccfe4ce1a5e1d48eb41c3d6b3217"},
+ {file = "google_crc32c-1.3.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d1c1d6236feab51200272d79b3d3e0f12cf2cbb12b208c835b175a21efdb0a73"},
+ {file = "google_crc32c-1.3.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:e0f1ff55dde0ebcfbef027edc21f71c205845585fffe30d4ec4979416613e9b3"},
+ {file = "google_crc32c-1.3.0-cp39-cp39-win32.whl", hash = "sha256:fbd60c6aaa07c31d7754edbc2334aef50601b7f1ada67a96eb1eb57c7c72378f"},
+ {file = "google_crc32c-1.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:127f9cc3ac41b6a859bd9dc4321097b1a4f6aa7fdf71b4f9227b9e3ebffb4422"},
+ {file = "google_crc32c-1.3.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:fc28e0db232c62ca0c3600884933178f0825c99be4474cdd645e378a10588125"},
+ {file = "google_crc32c-1.3.0-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:1926fd8de0acb9d15ee757175ce7242e235482a783cd4ec711cc999fc103c24e"},
+ {file = "google_crc32c-1.3.0-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:5da2c81575cc3ccf05d9830f9e8d3c70954819ca9a63828210498c0774fda1a3"},
+ {file = "google_crc32c-1.3.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:891f712ce54e0d631370e1f4997b3f182f3368179198efc30d477c75d1f44942"},
+ {file = "google_crc32c-1.3.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:7f6fe42536d9dcd3e2ffb9d3053f5d05221ae3bbcefbe472bdf2c71c793e3183"},
]
google-resumable-media = [
- {file = "google-resumable-media-1.3.3.tar.gz", hash = "sha256:ce38555d250bd70b0c2598bf61e99003cb8c569b0176ec0e3f38b86f9ffff581"},
- {file = "google_resumable_media-1.3.3-py2.py3-none-any.whl", hash = "sha256:092f39153cd67a4e409924edf08129f43cc72e630a1eb22abec93e80155df4ba"},
+ {file = "google-resumable-media-2.3.2.tar.gz", hash = "sha256:06924e8b1e79f158f0202e7dd151ad75b0ea9d59b997c850f56bdd4a5a361513"},
+ {file = "google_resumable_media-2.3.2-py2.py3-none-any.whl", hash = "sha256:3c13f84813861ac8f5b6371254bdd437076bf1f3bac527a9f3fd123a70166f52"},
]
googleapis-common-protos = [
- {file = "googleapis-common-protos-1.53.0.tar.gz", hash = "sha256:a88ee8903aa0a81f6c3cec2d5cf62d3c8aa67c06439b0496b49048fb1854ebf4"},
- {file = "googleapis_common_protos-1.53.0-py2.py3-none-any.whl", hash = "sha256:f6d561ab8fb16b30020b940e2dd01cd80082f4762fa9f3ee670f4419b4b8dbd0"},
+ {file = "googleapis-common-protos-1.56.0.tar.gz", hash = "sha256:4007500795bcfc269d279f0f7d253ae18d6dc1ff5d5a73613ffe452038b1ec5f"},
+ {file = "googleapis_common_protos-1.56.0-py2.py3-none-any.whl", hash = "sha256:60220c89b8bd5272159bed4929ecdc1243ae1f73437883a499a44a1cbc084086"},
+]
+grpc-google-iam-v1 = [
+ {file = "grpc-google-iam-v1-0.12.4.tar.gz", hash = "sha256:3f0ac2c940b9a855d7ce7e31fde28bddb0d9ac362d32d07c67148306931a0e30"},
+ {file = "grpc_google_iam_v1-0.12.4-py2.py3-none-any.whl", hash = "sha256:312801ae848aeb8408c099ea372b96d253077e7851aae1a9e745df984f81f20c"},
]
grpcio = [
- {file = "grpcio-1.39.0-cp27-cp27m-macosx_10_10_x86_64.whl", hash = "sha256:4163e022f365406be2da78db890035463371effea172300ce5af8a768142baf3"},
- {file = "grpcio-1.39.0-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:02e8a8b41db8e13df53078355b439363e4ac46d0ac9a8a461a39e42829e2bcf8"},
- {file = "grpcio-1.39.0-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:050901a5baa6c4ca445e1781ef4c32d864f965ccec70c46cd5ad92d15e282c6a"},
- {file = "grpcio-1.39.0-cp27-cp27m-win32.whl", hash = "sha256:1ab44dde4e1b225d3fc873535ca6e642444433131dd2891a601b75fb46c87c11"},
- {file = "grpcio-1.39.0-cp27-cp27m-win_amd64.whl", hash = "sha256:25731b2c20a4ed51bea7e3952d5e83d408a5df32d03c7553457b2e6eb8bcb16c"},
- {file = "grpcio-1.39.0-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:a2733994b05ee5382da1d0378f6312b72c5cb202930c7fa20c794a24e96a1a34"},
- {file = "grpcio-1.39.0-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:4039645b8b5d19064766f3a6fa535f1db52a61c4d4de97a6a8945331a354d527"},
- {file = "grpcio-1.39.0-cp35-cp35m-macosx_10_10_intel.whl", hash = "sha256:7b95b3329446408e2fe6db9b310d263303fa1a94649d08ec1e1cc12506743d26"},
- {file = "grpcio-1.39.0-cp35-cp35m-manylinux2010_i686.whl", hash = "sha256:2a4308875b9b986000513c6b04c2e7424f436a127f15547036c42d3cf8289374"},
- {file = "grpcio-1.39.0-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:4b3fcc1878a1a5b71e1ecdfe82c74f7cd9eadaa43e25be0d67676dcec0c9d39f"},
- {file = "grpcio-1.39.0-cp35-cp35m-manylinux2014_i686.whl", hash = "sha256:6d51be522b573cec14798d4742efaa69d234bedabce122fec2d5489abb3724d4"},
- {file = "grpcio-1.39.0-cp35-cp35m-manylinux2014_x86_64.whl", hash = "sha256:43c57987e526d1b893b85099424387b22de6e3eee4ea7188443de8d657d11cc0"},
- {file = "grpcio-1.39.0-cp35-cp35m-win32.whl", hash = "sha256:cd2e39a199bcbefb3f4b9fa6677c72b0e67332915550fed3bd7c28b454bf917d"},
- {file = "grpcio-1.39.0-cp35-cp35m-win_amd64.whl", hash = "sha256:5628e7cc69079159f9465388ff21fde1e1a780139f76dd99d319119d45156f45"},
- {file = "grpcio-1.39.0-cp36-cp36m-linux_armv7l.whl", hash = "sha256:3c14e2087f809973d5ee8ca64f772a089ead0167286f3f21fdda8b6029b50abb"},
- {file = "grpcio-1.39.0-cp36-cp36m-macosx_10_10_x86_64.whl", hash = "sha256:d5a105f5a595b89a0e394e5b147430b115333d07c55efb0c0eddc96055f0d951"},
- {file = "grpcio-1.39.0-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:366b6b35b3719c5570588e21d866460c5666ae74e3509c2a5a73ca79997abdaf"},
- {file = "grpcio-1.39.0-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:544e1c1a133b43893e03e828c8325be5b82e20d3b0ef0ee3942d32553052a1b5"},
- {file = "grpcio-1.39.0-cp36-cp36m-manylinux2014_i686.whl", hash = "sha256:a659f7c634cacfcf14657687a9fa3265b0a1844b1c19d140f3b66aebfba1a66b"},
- {file = "grpcio-1.39.0-cp36-cp36m-manylinux2014_x86_64.whl", hash = "sha256:b0ff14dd872030e6b2fce8a6811642bd30d93833f794d3782c7e9eb2f01234cc"},
- {file = "grpcio-1.39.0-cp36-cp36m-manylinux_2_24_aarch64.whl", hash = "sha256:2a958ad794292e12d8738a06754ebaf71662e635a89098916c18715b27ca2b5b"},
- {file = "grpcio-1.39.0-cp36-cp36m-win32.whl", hash = "sha256:ed845ba6253c4032d5a01b7fb9db8fe80299e9a437e695a698751b0b191174be"},
- {file = "grpcio-1.39.0-cp36-cp36m-win_amd64.whl", hash = "sha256:b236eb4b50d83754184b248b8b1041bb1546287fff7618c4b7001b9f257bb903"},
- {file = "grpcio-1.39.0-cp37-cp37m-linux_armv7l.whl", hash = "sha256:27e2c6213fc04e71a862bacccb51f3c8e722255933f01736ace183e92d860ee6"},
- {file = "grpcio-1.39.0-cp37-cp37m-macosx_10_10_x86_64.whl", hash = "sha256:5127f4ba1f52fda28037ae465cf4b0e5fabe89d5ac1d64d15b073b46b7db5e16"},
- {file = "grpcio-1.39.0-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:a6211150765cc2343e69879dfb856718b0f7477a4618b5f9a8f6c3ee84c047c0"},
- {file = "grpcio-1.39.0-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:691f5b3a75f072dfb7b093f46303f493b885b7a42f25a831868ffaa22ee85f9d"},
- {file = "grpcio-1.39.0-cp37-cp37m-manylinux2014_i686.whl", hash = "sha256:c8fe430add656b92419f6cd0680b64fbe6347c831d89a7788324f5037dfb3359"},
- {file = "grpcio-1.39.0-cp37-cp37m-manylinux2014_x86_64.whl", hash = "sha256:3cccf470fcaab65a1b0a826ff34bd7c0861eb82ed957a83c6647a983459e4ecd"},
- {file = "grpcio-1.39.0-cp37-cp37m-manylinux_2_24_aarch64.whl", hash = "sha256:2bc7eebb405aac2d7eecfaa881fd73b489f99c01470d7193b4431a6ce199b9c3"},
- {file = "grpcio-1.39.0-cp37-cp37m-win32.whl", hash = "sha256:52100d800390d58492ed1093de6faccd957de6fc29b1a0e5948c84f275d9228f"},
- {file = "grpcio-1.39.0-cp37-cp37m-win_amd64.whl", hash = "sha256:20f57c5d09a36e0d0c8fe16ee1905f4307edb1d04f6034b56320f7fbc1a1071a"},
- {file = "grpcio-1.39.0-cp38-cp38-linux_armv7l.whl", hash = "sha256:6ba6ad60009da2258cf15a72c51b7e0c2f58c8da517e97550881e488839e56c6"},
- {file = "grpcio-1.39.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:a1fb9936b86b5efdea417fe159934bcad82a6f8c6ab7d1beec4bf3a78324d975"},
- {file = "grpcio-1.39.0-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:46cfb0f2b757673bfd36ab4b0e3d61988cc1a0d47e0597e91462dcbef7528f35"},
- {file = "grpcio-1.39.0-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:f2621c82fbbff1496993aa5fbf60e235583c7f970506e818671ad52000b6f310"},
- {file = "grpcio-1.39.0-cp38-cp38-manylinux2014_i686.whl", hash = "sha256:e98aca5cfe05ca29950b3d99006b9ddb54fde6451cd12cb2db1443ae3b9fa076"},
- {file = "grpcio-1.39.0-cp38-cp38-manylinux2014_x86_64.whl", hash = "sha256:8ed1e52ad507a54d20e6aaedf4b3edcab18cc12031eafe6de898f97513d8997b"},
- {file = "grpcio-1.39.0-cp38-cp38-manylinux_2_24_aarch64.whl", hash = "sha256:3c57fa7fec932767bc553bfb956759f45026890255bd232b2f797c3bc4dfeba2"},
- {file = "grpcio-1.39.0-cp38-cp38-win32.whl", hash = "sha256:88dbef504b491b96e3238a6d5360b04508c34c62286080060c85fddd3caf7137"},
- {file = "grpcio-1.39.0-cp38-cp38-win_amd64.whl", hash = "sha256:cffdccc94e63710dd6ead01849443390632c8e0fec52dc26e4fddf9f28ac9280"},
- {file = "grpcio-1.39.0-cp39-cp39-linux_armv7l.whl", hash = "sha256:43e0f5c49f985c94332794aa6c4f15f3a1ced336f0c6a6c8946c67b5ab111ae9"},
- {file = "grpcio-1.39.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:dc3a24022a90c1754e54315009da6f949b48862c1d06daa54f9a28f89a5efacb"},
- {file = "grpcio-1.39.0-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:476fa94ba8efb09213baabd757f6f93e839794d8ae0eaa371347d6899e8f57a0"},
- {file = "grpcio-1.39.0-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:46d510a7af777d2f38ef4c1d25491add37cad24143012f3eebe72dc5c6d0fc4c"},
- {file = "grpcio-1.39.0-cp39-cp39-manylinux2014_i686.whl", hash = "sha256:5091b4a5ee8454a8f0c8ac45946ca25d6142c3be4b1fba141f1d62a6e0b5c696"},
- {file = "grpcio-1.39.0-cp39-cp39-manylinux2014_x86_64.whl", hash = "sha256:de83a045005703e7b9e67b61c38bb72cd49f68d9d2780d2c675353a3a3f2816f"},
- {file = "grpcio-1.39.0-cp39-cp39-manylinux_2_24_aarch64.whl", hash = "sha256:4258b778ce09ffa3b7c9a26971c216a34369e786771afbf4f98afe223f27d248"},
- {file = "grpcio-1.39.0-cp39-cp39-win32.whl", hash = "sha256:c44958a24559f875d902d5c1acb0ae43faa5a84f6120d1d0d800acb52f96516e"},
- {file = "grpcio-1.39.0-cp39-cp39-win_amd64.whl", hash = "sha256:2068a2b896ac67103c4a5453d5435fafcbb1a2f41eaf25148d08780096935cee"},
- {file = "grpcio-1.39.0.tar.gz", hash = "sha256:57974361a459d6fe04c9ae0af1845974606612249f467bbd2062d963cb90f407"},
+ {file = "grpcio-1.45.0-cp310-cp310-linux_armv7l.whl", hash = "sha256:0d74a159df9401747e57960f0772f4371486e3281919004efa9df8a82985abee"},
+ {file = "grpcio-1.45.0-cp310-cp310-macosx_10_10_universal2.whl", hash = "sha256:4e6d15bfdfa28e5f6d524dd3b29c7dc129cfc578505b067aa97574490c5b70fe"},
+ {file = "grpcio-1.45.0-cp310-cp310-manylinux_2_17_aarch64.whl", hash = "sha256:44615be86e5540a18f5e4ca5a0f428d4b1efb800d255cfd9f902a11daca8fd74"},
+ {file = "grpcio-1.45.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8b452f715e2cae9e75cb309f59a37f82e5b25f51f0bfc3cd1462de86265cef05"},
+ {file = "grpcio-1.45.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:db1c45daa35c64f17498af1ba6eb1d0a8d88a8a0b6b322f960ab461e7ef0419e"},
+ {file = "grpcio-1.45.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:678a673fe811dad3ed5bd2e2352b79851236e4d718aeaeffc10f372a55954d8d"},
+ {file = "grpcio-1.45.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a5c8a08aff0af770c977dcede62fbed53ae7b99adbc184d5299d148bb04652f1"},
+ {file = "grpcio-1.45.0-cp310-cp310-win32.whl", hash = "sha256:1d764c8a190719301ec6f3b6ddeb48a234604e337d0fbb3184a4ddcda2aca9da"},
+ {file = "grpcio-1.45.0-cp310-cp310-win_amd64.whl", hash = "sha256:797f5b750be6ff2905b9d0529a00c1f873d8035a5d01a9801910ace5f0d52a18"},
+ {file = "grpcio-1.45.0-cp36-cp36m-linux_armv7l.whl", hash = "sha256:b46772b7eb58c6cb0b468b56d59618694d2c2f2cee2e5b4e83ae9729a46b8af0"},
+ {file = "grpcio-1.45.0-cp36-cp36m-macosx_10_10_x86_64.whl", hash = "sha256:2f135e5c8e9acd14f3090fd86dccb9d7c26aea7bfbd4528e8a86ff621d39e610"},
+ {file = "grpcio-1.45.0-cp36-cp36m-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:16603b9544a4af135ce4d594a7396602fbe62d1ccaa484b05cb1814c17a3e559"},
+ {file = "grpcio-1.45.0-cp36-cp36m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ccba925045c00acc9ce2cc645b6fa9d19767dbb16c9c49921013da412b1d3415"},
+ {file = "grpcio-1.45.0-cp36-cp36m-manylinux_2_17_aarch64.whl", hash = "sha256:7262b9d96db79e29049c7eb2b75b03f2b9485fd838209b5ff8e3cca73b2a706c"},
+ {file = "grpcio-1.45.0-cp36-cp36m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a1c1098f35c33b985c312cacea39e2aa66f7ac1462579eed1d3aed2e51fff00d"},
+ {file = "grpcio-1.45.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0b18c86a9cfbedd0c4e083690fecc82027b3f938100ed0af8db77d52a171eb1e"},
+ {file = "grpcio-1.45.0-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:638364d3603df9e4a1dbc2151b5fe1b491ceecda4e1672be86724e1dfa79c44d"},
+ {file = "grpcio-1.45.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:8de79eac582431cb6d05ff5652e68089c40aa0e604ec1630fa52ac926bc44f1b"},
+ {file = "grpcio-1.45.0-cp36-cp36m-win32.whl", hash = "sha256:6cf5f1827c182ef9b503d7d01e503c1067f4499d45af792d95ccd1d8b0bea30d"},
+ {file = "grpcio-1.45.0-cp36-cp36m-win_amd64.whl", hash = "sha256:4f1a22744f93b38d393b7a83cb607029ac5e2de680cab39957ffdd116590a178"},
+ {file = "grpcio-1.45.0-cp37-cp37m-linux_armv7l.whl", hash = "sha256:321f84dbc788481f7a3cd12636a133ba5f4d17e57f1c906de5a22fd709c971b5"},
+ {file = "grpcio-1.45.0-cp37-cp37m-macosx_10_10_x86_64.whl", hash = "sha256:a33ed7d3e52ddc839e2f020592a4371d805c2ae820fb63b12525058e1810fe46"},
+ {file = "grpcio-1.45.0-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:f9f28d8c5343602e1510d4839e38568bcd0ca6353bd98ad9941787584a371a1d"},
+ {file = "grpcio-1.45.0-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:3a40dbb8aac60cf6a86583e2ba74fc2c286f1abc7a3404b25dcd12a49b9f7d8b"},
+ {file = "grpcio-1.45.0-cp37-cp37m-manylinux_2_17_aarch64.whl", hash = "sha256:b00ce58323dde47d2ea240d10ee745471b9966429c97d9e6567c8d56e02b0372"},
+ {file = "grpcio-1.45.0-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bd4944f35f1e5ab54804c3e37d24921ecc01908ef871cdce6bd52995ea4f985c"},
+ {file = "grpcio-1.45.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cc135b77f384a84bac67a37947886986be136356446338d64160a30c85f20c6d"},
+ {file = "grpcio-1.45.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:35ae55460514ed404ceaa95533b9a79989691b562faf012fc8fb143d8fd16e47"},
+ {file = "grpcio-1.45.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:779db3d00c8da1d3efa942387cb0fea9ac6d50124d656024f82f9faefdd016e3"},
+ {file = "grpcio-1.45.0-cp37-cp37m-win32.whl", hash = "sha256:aea67bd3cbf93db552c725bc0b4db0acdc6a284d036d1cc32d638305e0f01fd9"},
+ {file = "grpcio-1.45.0-cp37-cp37m-win_amd64.whl", hash = "sha256:7fe3ac700cc5ecba9dc9072c0e6cfd2f964ea9f273ce1111eaa27d13aa20ec32"},
+ {file = "grpcio-1.45.0-cp38-cp38-linux_armv7l.whl", hash = "sha256:259c126821fefcda298c020a0d83c4a4edac3cf10b1af12a62d250f8192ea1d1"},
+ {file = "grpcio-1.45.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:5d05cd1b2b0975bb000ba97ca465565158dc211616c9bbbef5d1b77871974687"},
+ {file = "grpcio-1.45.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:6f2e044a715507fd13c70c928cd90daf8d0295c936a81fd9065a24e58ba7cc7d"},
+ {file = "grpcio-1.45.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:4d37c526b86c46d229f6117df5dca2510de597ab73c5956bc379ca41f8a1db84"},
+ {file = "grpcio-1.45.0-cp38-cp38-manylinux_2_17_aarch64.whl", hash = "sha256:6df338b8d2c328ba91a25e28786d10059dea3bc9115fa1ddad30ba5d459e714a"},
+ {file = "grpcio-1.45.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:042921a824e90bf2974dbef7d89937096181298294799fb53e5576d9958884c7"},
+ {file = "grpcio-1.45.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fb23ed6ed84ae312df03e96c7a7cd3aa5f7e3a1ad7066fdb6cd47f1bd334196c"},
+ {file = "grpcio-1.45.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:79582ec821ef10162348170a6e912d93ea257c749320a162dfc3a132ef25ac1b"},
+ {file = "grpcio-1.45.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:d14d372ea5a51d5ab991aa6d499a26e5a1e3b3f3af93f41826ea610f8a276c9e"},
+ {file = "grpcio-1.45.0-cp38-cp38-win32.whl", hash = "sha256:b54444cf4212935a7b98cd26a30ad3a036389e4fd2ff3e461b176af876c7e20b"},
+ {file = "grpcio-1.45.0-cp38-cp38-win_amd64.whl", hash = "sha256:da395720d6e9599c754f862f3f75bc0e8ff29fa55259e082e442a9cc916ffbc3"},
+ {file = "grpcio-1.45.0-cp39-cp39-linux_armv7l.whl", hash = "sha256:add03308fa2d434628aeaa445e0c75cdb9535f39128eb949b1483ae83fafade6"},
+ {file = "grpcio-1.45.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:250d8f18332f3dbd4db00efa91d33d336e58362e9c80e6946d45ecf5e82d95ec"},
+ {file = "grpcio-1.45.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:dfca4dfd307b449d0a1e92bc7fbb5224ccf16db384aab412ba6766fc56bdffb6"},
+ {file = "grpcio-1.45.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:b7f2dc8831045eb0c892bb947e1cba2b1ed639e79a54abff7c4ad90bdd329f78"},
+ {file = "grpcio-1.45.0-cp39-cp39-manylinux_2_17_aarch64.whl", hash = "sha256:2355493a9e71f15d9004b2ab87892cb532e9e98db6882fced2912115eb5631af"},
+ {file = "grpcio-1.45.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2798e42d62a0296982276d0bab96fc7d6772cd148357154348355304d6216763"},
+ {file = "grpcio-1.45.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0fe6acb1439127e0bee773f8a9a3ece290cb4cac4fe8d46b10bc8dda250a990c"},
+ {file = "grpcio-1.45.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:6774272a59b9ee16fb0d4f53e23716953a22bbb3efe12fdf9a4ee3eec2c4f81f"},
+ {file = "grpcio-1.45.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:52f61fcb17d92b87ba47d54b3c9deae09d4f0216a3ea277b7df4b6c1794e6556"},
+ {file = "grpcio-1.45.0-cp39-cp39-win32.whl", hash = "sha256:3992c690228126e5652c7a1f61863c1ebfd71369cf2adb0fce86fee1d82d2d27"},
+ {file = "grpcio-1.45.0-cp39-cp39-win_amd64.whl", hash = "sha256:220867a53e53b2e201e98c55061e3053e31c0ce613625087242be684d3e8612a"},
+ {file = "grpcio-1.45.0.tar.gz", hash = "sha256:ff2c8b965b0fc25cf281961aa46619c10900543effe3f806ef818231c40aaff3"},
+]
+grpcio-status = [
+ {file = "grpcio-status-1.45.0.tar.gz", hash = "sha256:4baad8e8ec3c44788e038c24e3d7dc70259e06ba09f40a5b8178538563ba3e5a"},
+ {file = "grpcio_status-1.45.0-py3-none-any.whl", hash = "sha256:e21fa1d960f36c790fe6aa648e482442ecfb5c536fc50670b7c43320381377a9"},
]
httplib2 = [
- {file = "httplib2-0.19.1-py3-none-any.whl", hash = "sha256:2ad195faf9faf079723f6714926e9a9061f694d07724b846658ce08d40f522b4"},
- {file = "httplib2-0.19.1.tar.gz", hash = "sha256:0b12617eeca7433d4c396a100eaecfa4b08ee99aa881e6df6e257a7aad5d533d"},
+ {file = "httplib2-0.20.4-py3-none-any.whl", hash = "sha256:8b6a905cb1c79eefd03f8669fd993c36dc341f7c558f056cb5a33b5c2f458543"},
+ {file = "httplib2-0.20.4.tar.gz", hash = "sha256:58a98e45b4b1a48273073f905d2961666ecf0fbac4250ea5b47aef259eb5c585"},
]
idna = [
- {file = "idna-3.2-py3-none-any.whl", hash = "sha256:14475042e284991034cb48e06f6851428fb14c4dc953acd9be9a5e95c7b6dd7a"},
- {file = "idna-3.2.tar.gz", hash = "sha256:467fbad99067910785144ce333826c71fb0e63a425657295239737f7ecd125f3"},
+ {file = "idna-3.3-py3-none-any.whl", hash = "sha256:84d9dd047ffa80596e0f246e2eab0b391788b0503584e8945f2368256d2735ff"},
+ {file = "idna-3.3.tar.gz", hash = "sha256:9d643ff0a55b762d5cdb124b8eaa99c66322e2157b69160bc32796e824360e6d"},
]
importlib-metadata = [
- {file = "importlib_metadata-4.6.4-py3-none-any.whl", hash = "sha256:ed5157fef23a4bc4594615a0dd8eba94b2bb36bf2a343fa3d8bb2fa0a62a99d5"},
- {file = "importlib_metadata-4.6.4.tar.gz", hash = "sha256:7b30a78db2922d78a6f47fb30683156a14f3c6aa5cc23f77cc8967e9ab2d002f"},
+ {file = "importlib_metadata-4.11.3-py3-none-any.whl", hash = "sha256:1208431ca90a8cca1a6b8af391bb53c1a2db74e5d1cef6ddced95d4b2062edc6"},
+ {file = "importlib_metadata-4.11.3.tar.gz", hash = "sha256:ea4c597ebf37142f827b8f39299579e31685c31d3a438b59f469406afd0f2539"},
+]
+importlib-resources = [
+ {file = "importlib_resources-5.7.1-py3-none-any.whl", hash = "sha256:e447dc01619b1e951286f3929be820029d48c75eb25d265c28b92a16548212b8"},
+ {file = "importlib_resources-5.7.1.tar.gz", hash = "sha256:b6062987dfc51f0fcb809187cffbd60f35df7acb4589091f154214af6d0d49d3"},
]
iniconfig = [
{file = "iniconfig-1.1.1-py2.py3-none-any.whl", hash = "sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3"},
{file = "iniconfig-1.1.1.tar.gz", hash = "sha256:bc3af051d7d14b2ee5ef9969666def0cd1a000e121eaea580d4a313df4b37f32"},
]
jmespath = [
- {file = "jmespath-0.10.0-py2.py3-none-any.whl", hash = "sha256:cdf6525904cc597730141d61b36f2e4b8ecc257c420fa2f4549bac2c2d0cb72f"},
- {file = "jmespath-0.10.0.tar.gz", hash = "sha256:b85d0567b8666149a93172712e68920734333c0ce7e89b78b3e987f71e5ed4f9"},
+ {file = "jmespath-1.0.0-py3-none-any.whl", hash = "sha256:e8dcd576ed616f14ec02eed0005c85973b5890083313860136657e24784e4c04"},
+ {file = "jmespath-1.0.0.tar.gz", hash = "sha256:a490e280edd1f57d6de88636992d05b71e97d69a26a19f058ecf7d304474bf5e"},
]
jsonschema = [
- {file = "jsonschema-3.2.0-py2.py3-none-any.whl", hash = "sha256:4e5b3cf8216f577bee9ce139cbe72eca3ea4f292ec60928ff24758ce626cd163"},
- {file = "jsonschema-3.2.0.tar.gz", hash = "sha256:c8a85b28d377cc7737e46e2d9f2b4f44ee3c0e1deac6bf46ddefc7187d30797a"},
+ {file = "jsonschema-4.4.0-py3-none-any.whl", hash = "sha256:77281a1f71684953ee8b3d488371b162419767973789272434bbc3f29d9c8823"},
+ {file = "jsonschema-4.4.0.tar.gz", hash = "sha256:636694eb41b3535ed608fe04129f26542b59ed99808b4f688aa32dcf55317a83"},
]
packaging = [
- {file = "packaging-21.0-py3-none-any.whl", hash = "sha256:c86254f9220d55e31cc94d69bade760f0847da8000def4dfe1c6b872fd14ff14"},
- {file = "packaging-21.0.tar.gz", hash = "sha256:7dc96269f53a4ccec5c0670940a4281106dd0bb343f47b7471f779df49c2fbe7"},
+ {file = "packaging-21.3-py3-none-any.whl", hash = "sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522"},
+ {file = "packaging-21.3.tar.gz", hash = "sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb"},
]
pluggy = [
- {file = "pluggy-0.13.1-py2.py3-none-any.whl", hash = "sha256:966c145cd83c96502c3c3868f50408687b38434af77734af1e9ca461a4081d2d"},
- {file = "pluggy-0.13.1.tar.gz", hash = "sha256:15b2acde666561e1298d71b523007ed7364de07029219b604cf808bfa1c765b0"},
+ {file = "pluggy-1.0.0-py2.py3-none-any.whl", hash = "sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3"},
+ {file = "pluggy-1.0.0.tar.gz", hash = "sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159"},
+]
+portalocker = [
+ {file = "portalocker-2.4.0-py2.py3-none-any.whl", hash = "sha256:b092f48e1e30a234ab3dd1cfd44f2f235e8a41f4e310e463fc8d6798d1c3c235"},
+ {file = "portalocker-2.4.0.tar.gz", hash = "sha256:a648ad761b8ea27370cb5915350122cd807b820d2193ed5c9cc28f163df637f4"},
+]
+proto-plus = [
+ {file = "proto-plus-1.20.3.tar.gz", hash = "sha256:f28b225bc9e6c14e206fb7f8e996a46fb2ccd902648e512d496abb6a716a4ae5"},
+ {file = "proto_plus-1.20.3-py3-none-any.whl", hash = "sha256:b06be21c3848fbc20387d1d6891a9b97dfa1cdd0f10d3d42ef70b5700ec0f423"},
]
protobuf = [
- {file = "protobuf-3.17.3-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:ab6bb0e270c6c58e7ff4345b3a803cc59dbee19ddf77a4719c5b635f1d547aa8"},
- {file = "protobuf-3.17.3-cp27-cp27mu-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:13ee7be3c2d9a5d2b42a1030976f760f28755fcf5863c55b1460fd205e6cd637"},
- {file = "protobuf-3.17.3-cp35-cp35m-macosx_10_9_intel.whl", hash = "sha256:1556a1049ccec58c7855a78d27e5c6e70e95103b32de9142bae0576e9200a1b0"},
- {file = "protobuf-3.17.3-cp35-cp35m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:f0e59430ee953184a703a324b8ec52f571c6c4259d496a19d1cabcdc19dabc62"},
- {file = "protobuf-3.17.3-cp35-cp35m-win32.whl", hash = "sha256:a981222367fb4210a10a929ad5983ae93bd5a050a0824fc35d6371c07b78caf6"},
- {file = "protobuf-3.17.3-cp35-cp35m-win_amd64.whl", hash = "sha256:6d847c59963c03fd7a0cd7c488cadfa10cda4fff34d8bc8cba92935a91b7a037"},
- {file = "protobuf-3.17.3-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:145ce0af55c4259ca74993ddab3479c78af064002ec8227beb3d944405123c71"},
- {file = "protobuf-3.17.3-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:6ce4d8bf0321e7b2d4395e253f8002a1a5ffbcfd7bcc0a6ba46712c07d47d0b4"},
- {file = "protobuf-3.17.3-cp36-cp36m-win32.whl", hash = "sha256:7a4c97961e9e5b03a56f9a6c82742ed55375c4a25f2692b625d4087d02ed31b9"},
- {file = "protobuf-3.17.3-cp36-cp36m-win_amd64.whl", hash = "sha256:a22b3a0dbac6544dacbafd4c5f6a29e389a50e3b193e2c70dae6bbf7930f651d"},
- {file = "protobuf-3.17.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:ffea251f5cd3c0b9b43c7a7a912777e0bc86263436a87c2555242a348817221b"},
- {file = "protobuf-3.17.3-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:9b7a5c1022e0fa0dbde7fd03682d07d14624ad870ae52054849d8960f04bc764"},
- {file = "protobuf-3.17.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:8727ee027157516e2c311f218ebf2260a18088ffb2d29473e82add217d196b1c"},
- {file = "protobuf-3.17.3-cp37-cp37m-win32.whl", hash = "sha256:14c1c9377a7ffbeaccd4722ab0aa900091f52b516ad89c4b0c3bb0a4af903ba5"},
- {file = "protobuf-3.17.3-cp37-cp37m-win_amd64.whl", hash = "sha256:c56c050a947186ba51de4f94ab441d7f04fcd44c56df6e922369cc2e1a92d683"},
- {file = "protobuf-3.17.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2ae692bb6d1992afb6b74348e7bb648a75bb0d3565a3f5eea5bec8f62bd06d87"},
- {file = "protobuf-3.17.3-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:99938f2a2d7ca6563c0ade0c5ca8982264c484fdecf418bd68e880a7ab5730b1"},
- {file = "protobuf-3.17.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:6902a1e4b7a319ec611a7345ff81b6b004b36b0d2196ce7a748b3493da3d226d"},
- {file = "protobuf-3.17.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:4ffbd23640bb7403574f7aff8368e2aeb2ec9a5c6306580be48ac59a6bac8bde"},
- {file = "protobuf-3.17.3-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:26010f693b675ff5a1d0e1bdb17689b8b716a18709113288fead438703d45539"},
- {file = "protobuf-3.17.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:e76d9686e088fece2450dbc7ee905f9be904e427341d289acbe9ad00b78ebd47"},
- {file = "protobuf-3.17.3-py2.py3-none-any.whl", hash = "sha256:2bfb815216a9cd9faec52b16fd2bfa68437a44b67c56bee59bc3926522ecb04e"},
- {file = "protobuf-3.17.3.tar.gz", hash = "sha256:72804ea5eaa9c22a090d2803813e280fb273b62d5ae497aaf3553d141c4fdd7b"},
+ {file = "protobuf-3.20.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:9d0f3aca8ca51c8b5e204ab92bd8afdb2a8e3df46bd0ce0bd39065d79aabcaa4"},
+ {file = "protobuf-3.20.0-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:001c2160c03b6349c04de39cf1a58e342750da3632f6978a1634a3dcca1ec10e"},
+ {file = "protobuf-3.20.0-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:5b5860b790498f233cdc8d635a17fc08de62e59d4dcd8cdb6c6c0d38a31edf2b"},
+ {file = "protobuf-3.20.0-cp310-cp310-win32.whl", hash = "sha256:0b250c60256c8824219352dc2a228a6b49987e5bf94d3ffcf4c46585efcbd499"},
+ {file = "protobuf-3.20.0-cp310-cp310-win_amd64.whl", hash = "sha256:a1eebb6eb0653e594cb86cd8e536b9b083373fca9aba761ade6cd412d46fb2ab"},
+ {file = "protobuf-3.20.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:bc14037281db66aa60856cd4ce4541a942040686d290e3f3224dd3978f88f554"},
+ {file = "protobuf-3.20.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:47257d932de14a7b6c4ae1b7dbf592388153ee35ec7cae216b87ae6490ed39a3"},
+ {file = "protobuf-3.20.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:fbcbb068ebe67c4ff6483d2e2aa87079c325f8470b24b098d6bf7d4d21d57a69"},
+ {file = "protobuf-3.20.0-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:542f25a4adf3691a306dcc00bf9a73176554938ec9b98f20f929a044f80acf1b"},
+ {file = "protobuf-3.20.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:fd7133b885e356fa4920ead8289bb45dc6f185a164e99e10279f33732ed5ce15"},
+ {file = "protobuf-3.20.0-cp37-cp37m-win32.whl", hash = "sha256:8d84453422312f8275455d1cb52d850d6a4d7d714b784e41b573c6f5bfc2a029"},
+ {file = "protobuf-3.20.0-cp37-cp37m-win_amd64.whl", hash = "sha256:52bae32a147c375522ce09bd6af4d2949aca32a0415bc62df1456b3ad17c6001"},
+ {file = "protobuf-3.20.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:25d2fcd6eef340082718ec9ad2c58d734429f2b1f7335d989523852f2bba220b"},
+ {file = "protobuf-3.20.0-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:88c8be0558bdfc35e68c42ae5bf785eb9390d25915d4863bbc7583d23da77074"},
+ {file = "protobuf-3.20.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:38fd9eb74b852e4ee14b16e9670cd401d147ee3f3ec0d4f7652e0c921d6227f8"},
+ {file = "protobuf-3.20.0-cp38-cp38-win32.whl", hash = "sha256:7dcd84dc31ebb35ade755e06d1561d1bd3b85e85dbdbf6278011fc97b22810db"},
+ {file = "protobuf-3.20.0-cp38-cp38-win_amd64.whl", hash = "sha256:1eb13f5a5a59ca4973bcfa2fc8fff644bd39f2109c3f7a60bd5860cb6a49b679"},
+ {file = "protobuf-3.20.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:1d24c81c2310f0063b8fc1c20c8ed01f3331be9374b4b5c2de846f69e11e21fb"},
+ {file = "protobuf-3.20.0-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:8be43a91ab66fe995e85ccdbdd1046d9f0443d59e060c0840319290de25b7d33"},
+ {file = "protobuf-3.20.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:7a53d4035427b9dbfbb397f46642754d294f131e93c661d056366f2a31438263"},
+ {file = "protobuf-3.20.0-cp39-cp39-win32.whl", hash = "sha256:32bf4a90c207a0b4e70ca6dd09d43de3cb9898f7d5b69c2e9e3b966a7f342820"},
+ {file = "protobuf-3.20.0-cp39-cp39-win_amd64.whl", hash = "sha256:6efe066a7135233f97ce51a1aa007d4fb0be28ef093b4f88dac4ad1b3a2b7b6f"},
+ {file = "protobuf-3.20.0-py2.py3-none-any.whl", hash = "sha256:4eda68bd9e2a4879385e6b1ea528c976f59cd9728382005cc54c28bcce8db983"},
+ {file = "protobuf-3.20.0.tar.gz", hash = "sha256:71b2c3d1cd26ed1ec7c8196834143258b2ad7f444efff26fdc366c6f5e752702"},
]
py = [
- {file = "py-1.10.0-py2.py3-none-any.whl", hash = "sha256:3b80836aa6d1feeaa108e046da6423ab8f6ceda6468545ae8d02d9d58d18818a"},
- {file = "py-1.10.0.tar.gz", hash = "sha256:21b81bda15b66ef5e1a777a21c4dcd9c20ad3efd0b3f817e7a809035269e1bd3"},
+ {file = "py-1.11.0-py2.py3-none-any.whl", hash = "sha256:607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378"},
+ {file = "py-1.11.0.tar.gz", hash = "sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719"},
]
pyasn1 = [
{file = "pyasn1-0.4.8-py2.4.egg", hash = "sha256:fec3e9d8e36808a28efb59b489e4528c10ad0f480e57dcc32b4de5c9d8c9fdf3"},
@@ -964,90 +1113,120 @@ pyasn1-modules = [
{file = "pyasn1_modules-0.2.8-py3.6.egg", hash = "sha256:cbac4bc38d117f2a49aeedec4407d23e8866ea4ac27ff2cf7fb3e5b570df19e0"},
{file = "pyasn1_modules-0.2.8-py3.7.egg", hash = "sha256:c29a5e5cc7a3f05926aff34e097e84f8589cd790ce0ed41b67aed6857b26aafd"},
]
-pycparser = [
- {file = "pycparser-2.20-py2.py3-none-any.whl", hash = "sha256:7582ad22678f0fcd81102833f60ef8d0e57288b6b5fb00323d101be910e35705"},
- {file = "pycparser-2.20.tar.gz", hash = "sha256:2d475327684562c3a96cc71adf7dc8c4f0565175cf86b6d7a404ff4c771f15f0"},
-]
pyparsing = [
- {file = "pyparsing-2.4.7-py2.py3-none-any.whl", hash = "sha256:ef9d7589ef3c200abe66653d3f1ab1033c3c419ae9b9bdb1240a85b024efc88b"},
- {file = "pyparsing-2.4.7.tar.gz", hash = "sha256:c203ec8783bf771a155b207279b9bccb8dea02d8f0c9e5f8ead507bc3246ecc1"},
+ {file = "pyparsing-3.0.8-py3-none-any.whl", hash = "sha256:ef7b523f6356f763771559412c0d7134753f037822dad1b16945b7b846f7ad06"},
+ {file = "pyparsing-3.0.8.tar.gz", hash = "sha256:7bf433498c016c4314268d95df76c81b842a4cb2b276fa3312cfb1e1d85f6954"},
]
pyrsistent = [
- {file = "pyrsistent-0.18.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:f4c8cabb46ff8e5d61f56a037974228e978f26bfefce4f61a4b1ac0ba7a2ab72"},
- {file = "pyrsistent-0.18.0-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:da6e5e818d18459fa46fac0a4a4e543507fe1110e808101277c5a2b5bab0cd2d"},
- {file = "pyrsistent-0.18.0-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:5e4395bbf841693eaebaa5bb5c8f5cdbb1d139e07c975c682ec4e4f8126e03d2"},
- {file = "pyrsistent-0.18.0-cp36-cp36m-win32.whl", hash = "sha256:527be2bfa8dc80f6f8ddd65242ba476a6c4fb4e3aedbf281dfbac1b1ed4165b1"},
- {file = "pyrsistent-0.18.0-cp36-cp36m-win_amd64.whl", hash = "sha256:2aaf19dc8ce517a8653746d98e962ef480ff34b6bc563fc067be6401ffb457c7"},
- {file = "pyrsistent-0.18.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:58a70d93fb79dc585b21f9d72487b929a6fe58da0754fa4cb9f279bb92369396"},
- {file = "pyrsistent-0.18.0-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:4916c10896721e472ee12c95cdc2891ce5890898d2f9907b1b4ae0f53588b710"},
- {file = "pyrsistent-0.18.0-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:73ff61b1411e3fb0ba144b8f08d6749749775fe89688093e1efef9839d2dcc35"},
- {file = "pyrsistent-0.18.0-cp37-cp37m-win32.whl", hash = "sha256:b29b869cf58412ca5738d23691e96d8aff535e17390128a1a52717c9a109da4f"},
- {file = "pyrsistent-0.18.0-cp37-cp37m-win_amd64.whl", hash = "sha256:097b96f129dd36a8c9e33594e7ebb151b1515eb52cceb08474c10a5479e799f2"},
- {file = "pyrsistent-0.18.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:772e94c2c6864f2cd2ffbe58bb3bdefbe2a32afa0acb1a77e472aac831f83427"},
- {file = "pyrsistent-0.18.0-cp38-cp38-manylinux1_i686.whl", hash = "sha256:c1a9ff320fa699337e05edcaae79ef8c2880b52720bc031b219e5b5008ebbdef"},
- {file = "pyrsistent-0.18.0-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:cd3caef37a415fd0dae6148a1b6957a8c5f275a62cca02e18474608cb263640c"},
- {file = "pyrsistent-0.18.0-cp38-cp38-win32.whl", hash = "sha256:e79d94ca58fcafef6395f6352383fa1a76922268fa02caa2272fff501c2fdc78"},
- {file = "pyrsistent-0.18.0-cp38-cp38-win_amd64.whl", hash = "sha256:a0c772d791c38bbc77be659af29bb14c38ced151433592e326361610250c605b"},
- {file = "pyrsistent-0.18.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d5ec194c9c573aafaceebf05fc400656722793dac57f254cd4741f3c27ae57b4"},
- {file = "pyrsistent-0.18.0-cp39-cp39-manylinux1_i686.whl", hash = "sha256:6b5eed00e597b5b5773b4ca30bd48a5774ef1e96f2a45d105db5b4ebb4bca680"},
- {file = "pyrsistent-0.18.0-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:48578680353f41dca1ca3dc48629fb77dfc745128b56fc01096b2530c13fd426"},
- {file = "pyrsistent-0.18.0-cp39-cp39-win32.whl", hash = "sha256:f3ef98d7b76da5eb19c37fda834d50262ff9167c65658d1d8f974d2e4d90676b"},
- {file = "pyrsistent-0.18.0-cp39-cp39-win_amd64.whl", hash = "sha256:404e1f1d254d314d55adb8d87f4f465c8693d6f902f67eb6ef5b4526dc58e6ea"},
- {file = "pyrsistent-0.18.0.tar.gz", hash = "sha256:773c781216f8c2900b42a7b638d5b517bb134ae1acbebe4d1e8f1f41ea60eb4b"},
+ {file = "pyrsistent-0.18.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:df46c854f490f81210870e509818b729db4488e1f30f2a1ce1698b2295a878d1"},
+ {file = "pyrsistent-0.18.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d45866ececf4a5fff8742c25722da6d4c9e180daa7b405dc0a2a2790d668c26"},
+ {file = "pyrsistent-0.18.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4ed6784ceac462a7d6fcb7e9b663e93b9a6fb373b7f43594f9ff68875788e01e"},
+ {file = "pyrsistent-0.18.1-cp310-cp310-win32.whl", hash = "sha256:e4f3149fd5eb9b285d6bfb54d2e5173f6a116fe19172686797c056672689daf6"},
+ {file = "pyrsistent-0.18.1-cp310-cp310-win_amd64.whl", hash = "sha256:636ce2dc235046ccd3d8c56a7ad54e99d5c1cd0ef07d9ae847306c91d11b5fec"},
+ {file = "pyrsistent-0.18.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:e92a52c166426efbe0d1ec1332ee9119b6d32fc1f0bbfd55d5c1088070e7fc1b"},
+ {file = "pyrsistent-0.18.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d7a096646eab884bf8bed965bad63ea327e0d0c38989fc83c5ea7b8a87037bfc"},
+ {file = "pyrsistent-0.18.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cdfd2c361b8a8e5d9499b9082b501c452ade8bbf42aef97ea04854f4a3f43b22"},
+ {file = "pyrsistent-0.18.1-cp37-cp37m-win32.whl", hash = "sha256:7ec335fc998faa4febe75cc5268a9eac0478b3f681602c1f27befaf2a1abe1d8"},
+ {file = "pyrsistent-0.18.1-cp37-cp37m-win_amd64.whl", hash = "sha256:6455fc599df93d1f60e1c5c4fe471499f08d190d57eca040c0ea182301321286"},
+ {file = "pyrsistent-0.18.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:fd8da6d0124efa2f67d86fa70c851022f87c98e205f0594e1fae044e7119a5a6"},
+ {file = "pyrsistent-0.18.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7bfe2388663fd18bd8ce7db2c91c7400bf3e1a9e8bd7d63bf7e77d39051b85ec"},
+ {file = "pyrsistent-0.18.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0e3e1fcc45199df76053026a51cc59ab2ea3fc7c094c6627e93b7b44cdae2c8c"},
+ {file = "pyrsistent-0.18.1-cp38-cp38-win32.whl", hash = "sha256:b568f35ad53a7b07ed9b1b2bae09eb15cdd671a5ba5d2c66caee40dbf91c68ca"},
+ {file = "pyrsistent-0.18.1-cp38-cp38-win_amd64.whl", hash = "sha256:d1b96547410f76078eaf66d282ddca2e4baae8964364abb4f4dcdde855cd123a"},
+ {file = "pyrsistent-0.18.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:f87cc2863ef33c709e237d4b5f4502a62a00fab450c9e020892e8e2ede5847f5"},
+ {file = "pyrsistent-0.18.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6bc66318fb7ee012071b2792024564973ecc80e9522842eb4e17743604b5e045"},
+ {file = "pyrsistent-0.18.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:914474c9f1d93080338ace89cb2acee74f4f666fb0424896fcfb8d86058bf17c"},
+ {file = "pyrsistent-0.18.1-cp39-cp39-win32.whl", hash = "sha256:1b34eedd6812bf4d33814fca1b66005805d3640ce53140ab8bbb1e2651b0d9bc"},
+ {file = "pyrsistent-0.18.1-cp39-cp39-win_amd64.whl", hash = "sha256:e24a828f57e0c337c8d8bb9f6b12f09dfdf0273da25fda9e314f0b684b415a07"},
+ {file = "pyrsistent-0.18.1.tar.gz", hash = "sha256:d4d61f8b993a7255ba714df3aca52700f8125289f84f704cf80916517c46eb96"},
]
pytest = [
- {file = "pytest-6.2.4-py3-none-any.whl", hash = "sha256:91ef2131a9bd6be8f76f1f08eac5c5317221d6ad1e143ae03894b862e8976890"},
- {file = "pytest-6.2.4.tar.gz", hash = "sha256:50bcad0a0b9c5a72c8e4e7c9855a3ad496ca6a881a3641b4260605450772c54b"},
+ {file = "pytest-6.2.5-py3-none-any.whl", hash = "sha256:7310f8d27bc79ced999e760ca304d69f6ba6c6649c0b60fb0e04a4a77cacc134"},
+ {file = "pytest-6.2.5.tar.gz", hash = "sha256:131b36680866a76e6781d13f101efb86cf674ebb9762eb70d3082b6f29889e89"},
+]
+pytest-forked = [
+ {file = "pytest-forked-1.4.0.tar.gz", hash = "sha256:8b67587c8f98cbbadfdd804539ed5455b6ed03802203485dd2f53c1422d7440e"},
+ {file = "pytest_forked-1.4.0-py3-none-any.whl", hash = "sha256:bbbb6717efc886b9d64537b41fb1497cfaf3c9601276be8da2cccfea5a3c8ad8"},
+]
+pytest-terraform = [
+ {file = "pytest-terraform-0.6.1.tar.gz", hash = "sha256:a5af30e37a5d0394cda8eb5b4d1ef29346ef3e70de1c4df0337a64d879533c7d"},
+ {file = "pytest_terraform-0.6.1-py3-none-any.whl", hash = "sha256:e9e47a68abd0d58e0adec59d77791689beaab0c428393085a62a10aefc83c79f"},
+]
+pytest-xdist = [
+ {file = "pytest-xdist-2.5.0.tar.gz", hash = "sha256:4580deca3ff04ddb2ac53eba39d76cb5dd5edeac050cb6fbc768b0dd712b4edf"},
+ {file = "pytest_xdist-2.5.0-py3-none-any.whl", hash = "sha256:6fe5c74fec98906deb8f2d2b616b5c782022744978e7bd4695d39c8f42d0ce65"},
]
python-dateutil = [
{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"},
]
-pytz = [
- {file = "pytz-2021.1-py2.py3-none-any.whl", hash = "sha256:eb10ce3e7736052ed3623d49975ce333bcd712c7bb19a58b9e2089d4057d0798"},
- {file = "pytz-2021.1.tar.gz", hash = "sha256:83a4a90894bf38e243cf052c8b58f381bfe9a7a483f6a9cab140bc7f702ac4da"},
+pywin32 = [
+ {file = "pywin32-303-cp310-cp310-win32.whl", hash = "sha256:6fed4af057039f309263fd3285d7b8042d41507343cd5fa781d98fcc5b90e8bb"},
+ {file = "pywin32-303-cp310-cp310-win_amd64.whl", hash = "sha256:51cb52c5ec6709f96c3f26e7795b0bf169ee0d8395b2c1d7eb2c029a5008ed51"},
+ {file = "pywin32-303-cp311-cp311-win32.whl", hash = "sha256:d9b5d87ca944eb3aa4cd45516203ead4b37ab06b8b777c54aedc35975dec0dee"},
+ {file = "pywin32-303-cp311-cp311-win_amd64.whl", hash = "sha256:fcf44032f5b14fcda86028cdf49b6ebdaea091230eb0a757282aa656e4732439"},
+ {file = "pywin32-303-cp36-cp36m-win32.whl", hash = "sha256:aad484d52ec58008ca36bd4ad14a71d7dd0a99db1a4ca71072213f63bf49c7d9"},
+ {file = "pywin32-303-cp36-cp36m-win_amd64.whl", hash = "sha256:2a09632916b6bb231ba49983fe989f2f625cea237219530e81a69239cd0c4559"},
+ {file = "pywin32-303-cp37-cp37m-win32.whl", hash = "sha256:b1675d82bcf6dbc96363fca747bac8bff6f6e4a447a4287ac652aa4b9adc796e"},
+ {file = "pywin32-303-cp37-cp37m-win_amd64.whl", hash = "sha256:c268040769b48a13367221fced6d4232ed52f044ffafeda247bd9d2c6bdc29ca"},
+ {file = "pywin32-303-cp38-cp38-win32.whl", hash = "sha256:5f9ec054f5a46a0f4dfd72af2ce1372f3d5a6e4052af20b858aa7df2df7d355b"},
+ {file = "pywin32-303-cp38-cp38-win_amd64.whl", hash = "sha256:793bf74fce164bcffd9d57bb13c2c15d56e43c9542a7b9687b4fccf8f8a41aba"},
+ {file = "pywin32-303-cp39-cp39-win32.whl", hash = "sha256:7d3271c98434617a11921c5ccf74615794d97b079e22ed7773790822735cc352"},
+ {file = "pywin32-303-cp39-cp39-win_amd64.whl", hash = "sha256:79cbb862c11b9af19bcb682891c1b91942ec2ff7de8151e2aea2e175899cda34"},
]
pyyaml = [
- {file = "PyYAML-5.4.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:3b2b1824fe7112845700f815ff6a489360226a5609b96ec2190a45e62a9fc922"},
- {file = "PyYAML-5.4.1-cp27-cp27m-win32.whl", hash = "sha256:129def1b7c1bf22faffd67b8f3724645203b79d8f4cc81f674654d9902cb4393"},
- {file = "PyYAML-5.4.1-cp27-cp27m-win_amd64.whl", hash = "sha256:4465124ef1b18d9ace298060f4eccc64b0850899ac4ac53294547536533800c8"},
- {file = "PyYAML-5.4.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:bb4191dfc9306777bc594117aee052446b3fa88737cd13b7188d0e7aa8162185"},
- {file = "PyYAML-5.4.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:6c78645d400265a062508ae399b60b8c167bf003db364ecb26dcab2bda048253"},
- {file = "PyYAML-5.4.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:4e0583d24c881e14342eaf4ec5fbc97f934b999a6828693a99157fde912540cc"},
- {file = "PyYAML-5.4.1-cp36-cp36m-win32.whl", hash = "sha256:3bd0e463264cf257d1ffd2e40223b197271046d09dadf73a0fe82b9c1fc385a5"},
- {file = "PyYAML-5.4.1-cp36-cp36m-win_amd64.whl", hash = "sha256:e4fac90784481d221a8e4b1162afa7c47ed953be40d31ab4629ae917510051df"},
- {file = "PyYAML-5.4.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:5accb17103e43963b80e6f837831f38d314a0495500067cb25afab2e8d7a4018"},
- {file = "PyYAML-5.4.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:e1d4970ea66be07ae37a3c2e48b5ec63f7ba6804bdddfdbd3cfd954d25a82e63"},
- {file = "PyYAML-5.4.1-cp37-cp37m-win32.whl", hash = "sha256:dd5de0646207f053eb0d6c74ae45ba98c3395a571a2891858e87df7c9b9bd51b"},
- {file = "PyYAML-5.4.1-cp37-cp37m-win_amd64.whl", hash = "sha256:08682f6b72c722394747bddaf0aa62277e02557c0fd1c42cb853016a38f8dedf"},
- {file = "PyYAML-5.4.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d2d9808ea7b4af864f35ea216be506ecec180628aced0704e34aca0b040ffe46"},
- {file = "PyYAML-5.4.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:8c1be557ee92a20f184922c7b6424e8ab6691788e6d86137c5d93c1a6ec1b8fb"},
- {file = "PyYAML-5.4.1-cp38-cp38-win32.whl", hash = "sha256:fa5ae20527d8e831e8230cbffd9f8fe952815b2b7dae6ffec25318803a7528fc"},
- {file = "PyYAML-5.4.1-cp38-cp38-win_amd64.whl", hash = "sha256:0f5f5786c0e09baddcd8b4b45f20a7b5d61a7e7e99846e3c799b05c7c53fa696"},
- {file = "PyYAML-5.4.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:294db365efa064d00b8d1ef65d8ea2c3426ac366c0c4368d930bf1c5fb497f77"},
- {file = "PyYAML-5.4.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:74c1485f7707cf707a7aef42ef6322b8f97921bd89be2ab6317fd782c2d53183"},
- {file = "PyYAML-5.4.1-cp39-cp39-win32.whl", hash = "sha256:49d4cdd9065b9b6e206d0595fee27a96b5dd22618e7520c33204a4a3239d5b10"},
- {file = "PyYAML-5.4.1-cp39-cp39-win_amd64.whl", hash = "sha256:c20cfa2d49991c8b4147af39859b167664f2ad4561704ee74c1de03318e898db"},
- {file = "PyYAML-5.4.1.tar.gz", hash = "sha256:607774cbba28732bfa802b54baa7484215f530991055bb562efbed5b2f20a45e"},
+ {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"},
+ {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a80a78046a72361de73f8f395f1f1e49f956c6be882eed58505a15f3e430962b"},
+ {file = "PyYAML-6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f84fbc98b019fef2ee9a1cb3ce93e3187a6df0b2538a651bfb890254ba9f90b5"},
+ {file = "PyYAML-6.0-cp310-cp310-win32.whl", hash = "sha256:2cd5df3de48857ed0544b34e2d40e9fac445930039f3cfe4bcc592a1f836d513"},
+ {file = "PyYAML-6.0-cp310-cp310-win_amd64.whl", hash = "sha256:daf496c58a8c52083df09b80c860005194014c3698698d1a57cbcfa182142a3a"},
+ {file = "PyYAML-6.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:897b80890765f037df3403d22bab41627ca8811ae55e9a722fd0392850ec4d86"},
+ {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50602afada6d6cbfad699b0c7bb50d5ccffa7e46a3d738092afddc1f9758427f"},
+ {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:48c346915c114f5fdb3ead70312bd042a953a8ce5c7106d5bfb1a5254e47da92"},
+ {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:98c4d36e99714e55cfbaaee6dd5badbc9a1ec339ebfc3b1f52e293aee6bb71a4"},
+ {file = "PyYAML-6.0-cp36-cp36m-win32.whl", hash = "sha256:0283c35a6a9fbf047493e3a0ce8d79ef5030852c51e9d911a27badfde0605293"},
+ {file = "PyYAML-6.0-cp36-cp36m-win_amd64.whl", hash = "sha256:07751360502caac1c067a8132d150cf3d61339af5691fe9e87803040dbc5db57"},
+ {file = "PyYAML-6.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:819b3830a1543db06c4d4b865e70ded25be52a2e0631ccd2f6a47a2822f2fd7c"},
+ {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:473f9edb243cb1935ab5a084eb238d842fb8f404ed2193a915d1784b5a6b5fc0"},
+ {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0ce82d761c532fe4ec3f87fc45688bdd3a4c1dc5e0b4a19814b9009a29baefd4"},
+ {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:231710d57adfd809ef5d34183b8ed1eeae3f76459c18fb4a0b373ad56bedcdd9"},
+ {file = "PyYAML-6.0-cp37-cp37m-win32.whl", hash = "sha256:c5687b8d43cf58545ade1fe3e055f70eac7a5a1a0bf42824308d868289a95737"},
+ {file = "PyYAML-6.0-cp37-cp37m-win_amd64.whl", hash = "sha256:d15a181d1ecd0d4270dc32edb46f7cb7733c7c508857278d3d378d14d606db2d"},
+ {file = "PyYAML-6.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0b4624f379dab24d3725ffde76559cff63d9ec94e1736b556dacdfebe5ab6d4b"},
+ {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:213c60cd50106436cc818accf5baa1aba61c0189ff610f64f4a3e8c6726218ba"},
+ {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9fa600030013c4de8165339db93d182b9431076eb98eb40ee068700c9c813e34"},
+ {file = "PyYAML-6.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:277a0ef2981ca40581a47093e9e2d13b3f1fbbeffae064c1d21bfceba2030287"},
+ {file = "PyYAML-6.0-cp38-cp38-win32.whl", hash = "sha256:d4eccecf9adf6fbcc6861a38015c2a64f38b9d94838ac1810a9023a0609e1b78"},
+ {file = "PyYAML-6.0-cp38-cp38-win_amd64.whl", hash = "sha256:1e4747bc279b4f613a09eb64bba2ba602d8a6664c6ce6396a4d0cd413a50ce07"},
+ {file = "PyYAML-6.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:055d937d65826939cb044fc8c9b08889e8c743fdc6a32b33e2390f66013e449b"},
+ {file = "PyYAML-6.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e61ceaab6f49fb8bdfaa0f92c4b57bcfbea54c09277b1b4f7ac376bfb7a7c174"},
+ {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d67d839ede4ed1b28a4e8909735fc992a923cdb84e618544973d7dfc71540803"},
+ {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cba8c411ef271aa037d7357a2bc8f9ee8b58b9965831d9e51baf703280dc73d3"},
+ {file = "PyYAML-6.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:40527857252b61eacd1d9af500c3337ba8deb8fc298940291486c465c8b46ec0"},
+ {file = "PyYAML-6.0-cp39-cp39-win32.whl", hash = "sha256:b5b9eccad747aabaaffbc6064800670f0c297e52c12754eb1d976c57e4f74dcb"},
+ {file = "PyYAML-6.0-cp39-cp39-win_amd64.whl", hash = "sha256:b3d267842bf12586ba6c734f89d1f5b871df0273157918b0ccefa29deb05c21c"},
+ {file = "PyYAML-6.0.tar.gz", hash = "sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2"},
]
ratelimiter = [
{file = "ratelimiter-1.2.0.post0-py3-none-any.whl", hash = "sha256:a52be07bc0bb0b3674b4b304550f10c769bbb00fead3072e035904474259809f"},
{file = "ratelimiter-1.2.0.post0.tar.gz", hash = "sha256:5c395dcabdbbde2e5178ef3f89b568a3066454a6ddc223b76473dac22f89b4f7"},
]
requests = [
- {file = "requests-2.26.0-py2.py3-none-any.whl", hash = "sha256:6c1246513ecd5ecd4528a0906f910e8f0f9c6b8ec72030dc9fd154dc1a6efd24"},
- {file = "requests-2.26.0.tar.gz", hash = "sha256:b8aa58f8cf793ffd8782d3d8cb19e66ef36f7aba4353eec859e74678b01b07a7"},
+ {file = "requests-2.27.1-py2.py3-none-any.whl", hash = "sha256:f22fa1e554c9ddfd16e6e41ac79759e17be9e492b3587efa038054674760e72d"},
+ {file = "requests-2.27.1.tar.gz", hash = "sha256:68d7c56fd5a8999887728ef304a6d12edc7be74f1cfa47714fc8b414525c9a61"},
]
retrying = [
{file = "retrying-1.3.3.tar.gz", hash = "sha256:08c039560a6da2fe4f2c426d0766e284d3b736e355f8dd24b37367b0bb41973b"},
]
rsa = [
- {file = "rsa-4.7.2-py3-none-any.whl", hash = "sha256:78f9a9bf4e7be0c5ded4583326e7461e3a3c5aae24073648b4bdfa797d78c9d2"},
- {file = "rsa-4.7.2.tar.gz", hash = "sha256:9d689e6ca1b3038bc82bf8d23e944b6b6037bc02301a574935b2dd946e0353b9"},
+ {file = "rsa-4.8-py3-none-any.whl", hash = "sha256:95c5d300c4e879ee69708c428ba566c59478fd653cc3a22243eeb8ed846950bb"},
+ {file = "rsa-4.8.tar.gz", hash = "sha256:5c6bd9dc7a543b7fe4304a631f8a8a3b674e2bbfc49c2ae96200cdbe55df6b17"},
]
s3transfer = [
- {file = "s3transfer-0.5.0-py3-none-any.whl", hash = "sha256:9c1dc369814391a6bda20ebbf4b70a0f34630592c9aa520856bf384916af2803"},
- {file = "s3transfer-0.5.0.tar.gz", hash = "sha256:50ed823e1dc5868ad40c8dc92072f757aa0e653a192845c94a3b676f4a62da4c"},
+ {file = "s3transfer-0.5.2-py3-none-any.whl", hash = "sha256:7a6f4c4d1fdb9a2b640244008e142cbc2cd3ae34b386584ef044dd0f27101971"},
+ {file = "s3transfer-0.5.2.tar.gz", hash = "sha256:95c58c194ce657a5f4fb0b9e60a84968c808888aed628cd98ab8771fe1db98ed"},
]
six = [
{file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"},
@@ -1062,19 +1241,18 @@ toml = [
{file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"},
]
typing-extensions = [
- {file = "typing_extensions-3.10.0.0-py2-none-any.whl", hash = "sha256:0ac0f89795dd19de6b97debb0c6af1c70987fd80a2d62d1958f7e56fcc31b497"},
- {file = "typing_extensions-3.10.0.0-py3-none-any.whl", hash = "sha256:779383f6086d90c99ae41cf0ff39aac8a7937a9283ce0a414e5dd782f4c94a84"},
- {file = "typing_extensions-3.10.0.0.tar.gz", hash = "sha256:50b6f157849174217d0656f99dc82fe932884fb250826c18350e159ec6cdf342"},
+ {file = "typing_extensions-4.2.0-py3-none-any.whl", hash = "sha256:6657594ee297170d19f67d55c05852a874e7eb634f4f753dbd667855e07c1708"},
+ {file = "typing_extensions-4.2.0.tar.gz", hash = "sha256:f1c24655a0da0d1b67f07e17a5e6b2a105894e6824b92096378bb3668ef02376"},
]
uritemplate = [
- {file = "uritemplate-3.0.1-py2.py3-none-any.whl", hash = "sha256:07620c3f3f8eed1f12600845892b0e036a2420acf513c53f7de0abd911a5894f"},
- {file = "uritemplate-3.0.1.tar.gz", hash = "sha256:5af8ad10cec94f215e3f48112de2022e1d5a37ed427fbd88652fa908f2ab7cae"},
+ {file = "uritemplate-4.1.1-py2.py3-none-any.whl", hash = "sha256:830c08b8d99bdd312ea4ead05994a38e8936266f84b9a7878232db50b044e02e"},
+ {file = "uritemplate-4.1.1.tar.gz", hash = "sha256:4346edfc5c3b79f694bccd6d6099a322bbeb628dbf2cd86eea55a456ce5124f0"},
]
urllib3 = [
- {file = "urllib3-1.26.6-py2.py3-none-any.whl", hash = "sha256:39fb8672126159acb139a7718dd10806104dec1e2f0f6c88aab05d17df10c8d4"},
- {file = "urllib3-1.26.6.tar.gz", hash = "sha256:f57b4c16c62fa2760b7e3d97c35b255512fb6b59a259730f36ba32ce9f8e342f"},
+ {file = "urllib3-1.26.9-py2.py3-none-any.whl", hash = "sha256:44ece4d53fb1706f667c9bd1c648f5469a2ec925fcf3a776667042d645472c14"},
+ {file = "urllib3-1.26.9.tar.gz", hash = "sha256:aabaf16477806a5e1dd19aa41f8c2b7950dd3c746362d7e3223dbe6de6ac448e"},
]
zipp = [
- {file = "zipp-3.5.0-py3-none-any.whl", hash = "sha256:957cfda87797e389580cb8b9e3870841ca991e2125350677b2ca83a0e99390a3"},
- {file = "zipp-3.5.0.tar.gz", hash = "sha256:f5812b1e007e48cff63449a5e9f4e7ebea716b4111f9c4f9a645f91d579bf0c4"},
+ {file = "zipp-3.8.0-py3-none-any.whl", hash = "sha256:c4f6e5bbf48e74f7a38e7cc5b0480ff42b0ae5178957d564d18932525d5cf099"},
+ {file = "zipp-3.8.0.tar.gz", hash = "sha256:56bf8aadb83c24db6c4b577e13de374ccfb67da2078beba1d037c17980bf43ad"},
]
diff --git a/tools/c7n_gcp/pyproject.toml b/tools/c7n_gcp/pyproject.toml
index 005f50fdbe6..45f09bf3d15 100644
--- a/tools/c7n_gcp/pyproject.toml
+++ b/tools/c7n_gcp/pyproject.toml
@@ -1,6 +1,6 @@
[tool.poetry]
name = "c7n_gcp"
-version = "0.4.13"
+version = "0.4.15"
description = "Cloud Custodian - Google Cloud Provider"
readme = "readme.md"
homepage = "https://cloudcustodian.io"
@@ -15,17 +15,18 @@ classifiers = [
]
[tool.poetry.dependencies]
-python = "^3.6"
+python = "^3.7"
retrying = "^1.3.3"
-google-api-python-client = "^1.7"
-google-cloud-logging = "^1.14"
-google-auth = "^1.11.0"
+google-api-python-client = "^2.0"
+google-cloud-logging = "^2.6"
+google-auth = "^2.1.0"
ratelimiter = "^1.2.0"
-google-cloud-monitoring = "^0.34.0"
-google-cloud-storage = "^1.28.1"
+google-cloud-monitoring = "^2.5.0"
+google-cloud-storage = "^1.42.2"
[tool.poetry.dev-dependencies]
pytest = "^6.0.0"
+pytest-terraform = "^0.6.0"
c7n = {path = "../..", develop = true}
[build-system]
diff --git a/tools/c7n_gcp/requirements.txt b/tools/c7n_gcp/requirements.txt
index 2fa6b0c501f..65f2ab053f5 100644
--- a/tools/c7n_gcp/requirements.txt
+++ b/tools/c7n_gcp/requirements.txt
@@ -1,32 +1,35 @@
-cachetools==4.2.2; python_version >= "3.5" and python_version < "4.0" and (python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0")
-certifi==2021.5.30; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0"
-cffi==1.14.6; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
-charset-normalizer==2.0.4; python_full_version >= "3.6.0" and python_version >= "3"
-google-api-core==1.31.1; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
-google-api-python-client==1.12.8; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.4.0")
-google-auth-httplib2==0.1.0; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0"
-google-auth==1.34.0; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.6.0")
-google-cloud-core==1.7.2; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
-google-cloud-logging==1.15.1; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.4.0")
-google-cloud-monitoring==0.34.0; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.4.0")
-google-cloud-storage==1.42.0; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.6.0")
-google-crc32c==1.1.2; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
-google-resumable-media==1.3.3; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
-googleapis-common-protos==1.53.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
-grpcio==1.39.0; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0"
-httplib2==0.19.1; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0"
-idna==3.2; python_version >= "3.5" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.5"
-packaging==21.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
-protobuf==3.17.3; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
-pyasn1-modules==0.2.8; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0"
-pyasn1==0.4.8; python_version >= "3.5" and python_full_version < "3.0.0" and python_version < "4" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6") or python_version >= "3.5" and python_version < "4" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6") and python_full_version >= "3.6.0"
-pycparser==2.20; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
-pyparsing==2.4.7; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
-pytz==2021.1; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0"
+cachetools==5.0.0; python_version >= "3.7" and python_version < "4.0" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6")
+certifi==2021.10.8; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
+charset-normalizer==2.0.12; python_full_version >= "3.6.0" and python_version >= "3.6"
+google-api-core==2.7.2; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
+google-api-python-client==2.44.0; python_version >= "3.6"
+google-auth-httplib2==0.1.0; python_version >= "3.6"
+google-auth==2.6.5; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.6.0")
+google-cloud-appengine-logging==1.1.1; python_version >= "3.6"
+google-cloud-audit-log==0.2.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
+google-cloud-core==2.3.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
+google-cloud-logging==2.7.1; python_version >= "3.6"
+google-cloud-monitoring==2.9.1; python_version >= "3.6"
+google-cloud-storage==1.44.0; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.6.0")
+google-crc32c==1.3.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
+google-resumable-media==2.3.2; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
+googleapis-common-protos==1.56.0; python_version >= "3.6" and python_full_version < "3.0.0" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6") or python_full_version >= "3.6.0" and python_version >= "3.6" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6")
+grpc-google-iam-v1==0.12.4; python_version >= "3.6"
+grpcio-status==1.45.0; python_version >= "3.6" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6")
+grpcio==1.45.0; python_version >= "3.6" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6")
+httplib2==0.20.4; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
+idna==3.3; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
+packaging==21.3; python_version >= "3.6"
+proto-plus==1.20.3; python_version >= "3.6"
+protobuf==3.20.0; python_version >= "3.7" and python_full_version < "3.0.0" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6") or python_full_version >= "3.6.0" and python_version >= "3.7" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6")
+pyasn1-modules==0.2.8; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
+pyasn1==0.4.8; python_version >= "3.6" and python_full_version < "3.0.0" and python_version < "4" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6") or python_full_version >= "3.6.0" and python_version >= "3.6" and python_version < "4" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6")
+pyparsing==3.0.8; python_full_version >= "3.6.8" and python_version >= "3.6"
+pytz==2021.3
ratelimiter==1.2.0.post0
-requests==2.26.0; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0"
+requests==2.27.1; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
retrying==1.3.3
-rsa==4.7.2; python_version >= "3.5" and python_version < "4" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6")
-six==1.16.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
-uritemplate==3.0.1; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0"
-urllib3==1.26.6; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version < "4"
+rsa==4.8; python_version >= "3.6" and python_version < "4" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6")
+six==1.16.0; python_version >= "3.6" and python_full_version < "3.0.0" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6") or python_full_version >= "3.6.0" and python_version >= "3.6" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6")
+uritemplate==4.1.1; python_version >= "3.6"
+urllib3==1.26.9; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version < "4" and python_version >= "3.6"
diff --git a/tools/c7n_gcp/setup.py b/tools/c7n_gcp/setup.py
index 696b21a5215..a7f01cb2205 100644
--- a/tools/c7n_gcp/setup.py
+++ b/tools/c7n_gcp/setup.py
@@ -10,34 +10,37 @@
{'': ['*']}
install_requires = \
-['argcomplete (>=1.12.3,<2.0.0)',
- 'attrs (>=21.2.0,<22.0.0)',
- 'boto3 (>=1.18.21,<2.0.0)',
- 'botocore (>=1.21.21,<2.0.0)',
- 'c7n (>=0.9.14,<0.10.0)',
- 'google-api-python-client>=1.7,<2.0',
- 'google-auth>=1.11.0,<2.0.0',
- 'google-cloud-logging>=1.14,<2.0',
- 'google-cloud-monitoring>=0.34.0,<0.35.0',
- 'google-cloud-storage>=1.28.1,<2.0.0',
- 'importlib-metadata (>=4.6.4,<5.0.0)',
- 'jmespath (>=0.10.0,<0.11.0)',
- 'jsonschema (>=3.2.0,<4.0.0)',
- 'pyrsistent (>=0.18.0,<0.19.0)',
+['argcomplete (>=2.0.0,<3.0.0)',
+ 'attrs (>=21.4.0,<22.0.0)',
+ 'boto3 (>=1.21.42,<2.0.0)',
+ 'botocore (>=1.24.42,<2.0.0)',
+ 'c7n (>=0.9.16,<0.10.0)',
+ 'docutils (>=0.17.1,<0.18.0)',
+ 'google-api-python-client>=2.0,<3.0',
+ 'google-auth>=2.1.0,<3.0.0',
+ 'google-cloud-logging>=2.6,<3.0',
+ 'google-cloud-monitoring>=2.5.0,<3.0.0',
+ 'google-cloud-storage>=1.42.2,<2.0.0',
+ 'importlib-metadata (>=4.11.3,<5.0.0)',
+ 'importlib-resources (>=5.7.1,<6.0.0)',
+ 'jmespath (>=1.0.0,<2.0.0)',
+ 'jsonschema (>=4.4.0,<5.0.0)',
+ 'pyrsistent (>=0.18.1,<0.19.0)',
'python-dateutil (>=2.8.2,<3.0.0)',
- 'pyyaml (>=5.4.1,<6.0.0)',
+ 'pytz>=2021.1,<2022.0',
+ 'pyyaml (>=6.0,<7.0)',
'ratelimiter>=1.2.0,<2.0.0',
'retrying>=1.3.3,<2.0.0',
- 's3transfer (>=0.5.0,<0.6.0)',
+ 's3transfer (>=0.5.2,<0.6.0)',
'six (>=1.16.0,<2.0.0)',
'tabulate (>=0.8.9,<0.9.0)',
- 'typing-extensions (>=3.10.0.0,<4.0.0.0)',
- 'urllib3 (>=1.26.6,<2.0.0)',
- 'zipp (>=3.5.0,<4.0.0)']
+ 'typing-extensions (>=4.2.0,<5.0.0)',
+ 'urllib3 (>=1.26.9,<2.0.0)',
+ 'zipp (>=3.8.0,<4.0.0)']
setup_kwargs = {
'name': 'c7n-gcp',
- 'version': '0.4.13',
+ 'version': '0.4.15',
'description': 'Cloud Custodian - Google Cloud Provider',
'license': 'Apache-2.0',
'classifiers': [
@@ -55,7 +58,7 @@
'packages': packages,
'package_data': package_data,
'install_requires': install_requires,
- 'python_requires': '>=3.6,<4.0',
+ 'python_requires': '>=3.7,<4.0',
}
diff --git a/tools/c7n_gcp/tests/data/flights/bq-table-delete/delete-bigquery-v2-projects-cloud-custodian-datasets-custodian_test-tables-test-table-1_1.json b/tools/c7n_gcp/tests/data/flights/bq-table-delete/delete-bigquery-v2-projects-cloud-custodian-datasets-custodian_test-tables-test-table-1_1.json
new file mode 100644
index 00000000000..007defbc58a
--- /dev/null
+++ b/tools/c7n_gcp/tests/data/flights/bq-table-delete/delete-bigquery-v2-projects-cloud-custodian-datasets-custodian_test-tables-test-table-1_1.json
@@ -0,0 +1,15 @@
+{
+ "headers": {
+ "content-type": "application/json; charset=UTF-8",
+ "vary": "Origin, X-Origin, Referer",
+ "date": "Fri, 04 Feb 2022 21:15:47 GMT",
+ "server": "ESF",
+ "content-length": "0",
+ "x-xss-protection": "0",
+ "x-frame-options": "SAMEORIGIN",
+ "x-content-type-options": "nosniff",
+ "alt-svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"",
+ "status": "204"
+ },
+ "body": {}
+}
\ No newline at end of file
diff --git a/tools/c7n_gcp/tests/data/flights/bq-table-delete/get-bigquery-v2-projects-cloud-custodian-datasets-custodian_test-tables_1.json b/tools/c7n_gcp/tests/data/flights/bq-table-delete/get-bigquery-v2-projects-cloud-custodian-datasets-custodian_test-tables_1.json
new file mode 100644
index 00000000000..e0be0a7ff8d
--- /dev/null
+++ b/tools/c7n_gcp/tests/data/flights/bq-table-delete/get-bigquery-v2-projects-cloud-custodian-datasets-custodian_test-tables_1.json
@@ -0,0 +1,51 @@
+{
+ "headers": {
+ "etag": "QB6qgWpNNd78/IlpmW048A==",
+ "content-type": "application/json; charset=UTF-8",
+ "vary": "Origin, X-Origin, Referer",
+ "date": "Fri, 04 Feb 2022 21:15:47 GMT",
+ "server": "ESF",
+ "cache-control": "private",
+ "x-xss-protection": "0",
+ "x-frame-options": "SAMEORIGIN",
+ "x-content-type-options": "nosniff",
+ "alt-svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"",
+ "transfer-encoding": "chunked",
+ "status": "200",
+ "content-length": "867",
+ "-content-encoding": "gzip",
+ "content-location": "https://bigquery.googleapis.com/bigquery/v2/projects/cloud-custodian/datasets/custodian_test/tables?alt=json"
+ },
+ "body": {
+ "kind": "bigquery#tableList",
+ "etag": "QB6qgWpNNd78/IlpmW048A==",
+ "tables": [
+ {
+ "kind": "bigquery#table",
+ "id": "cloud-custodian:custodian_test.test-table-1",
+ "tableReference": {
+ "projectId": "cloud-custodian",
+ "datasetId": "custodian_test",
+ "tableId": "test-table-1"
+ },
+ "type": "TABLE",
+ "labels": {
+ "delete_me": "yes"
+ },
+ "creationTime": "1643816821135"
+ },
+ {
+ "kind": "bigquery#table",
+ "id": "cloud-custodian:custodian_test.test-table-2",
+ "tableReference": {
+ "projectId": "cloud-custodian",
+ "datasetId": "custodian_test",
+ "tableId": "test-table-2"
+ },
+ "type": "TABLE",
+ "creationTime": "1643824568770"
+ }
+ ],
+ "totalItems": 2
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_gcp/tests/data/flights/bq-table-delete/get-bigquery-v2-projects-cloud-custodian-datasets-custodian_test_1.json b/tools/c7n_gcp/tests/data/flights/bq-table-delete/get-bigquery-v2-projects-cloud-custodian-datasets-custodian_test_1.json
new file mode 100644
index 00000000000..90217b06d02
--- /dev/null
+++ b/tools/c7n_gcp/tests/data/flights/bq-table-delete/get-bigquery-v2-projects-cloud-custodian-datasets-custodian_test_1.json
@@ -0,0 +1,34 @@
+{
+ "headers": {
+ "etag": "sFwI7MAQGyv8POwjqQ3Biw==",
+ "content-type": "application/json; charset=UTF-8",
+ "vary": "Origin, X-Origin, Referer",
+ "date": "Fri, 04 Feb 2022 21:15:47 GMT",
+ "server": "ESF",
+ "cache-control": "private",
+ "x-xss-protection": "0",
+ "x-frame-options": "SAMEORIGIN",
+ "x-content-type-options": "nosniff",
+ "alt-svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"",
+ "transfer-encoding": "chunked",
+ "status": "200",
+ "content-length": "792",
+ "-content-encoding": "gzip",
+ "content-location": "https://bigquery.googleapis.com/bigquery/v2/projects/cloud-custodian/datasets/custodian_test?alt=json"
+ },
+ "body": {
+ "kind": "bigquery#dataset",
+ "etag": "sFwI7MAQGyv8POwjqQ3Biw==",
+ "id": "cloud-custodian:custodian_test",
+ "selfLink": "https://bigquery.googleapis.com/bigquery/v2/projects/cloud-custodian/datasets/custodian_test",
+ "datasetReference": {
+ "datasetId": "custodian_test",
+ "projectId": "cloud-custodian"
+ },
+ "access": [],
+ "creationTime": "1643816775829",
+ "lastModifiedTime": "1643816775829",
+ "location": "us-central1",
+ "type": "DEFAULT"
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_gcp/tests/data/flights/bq-table-delete/get-bigquery-v2-projects-cloud-custodian-datasets_1.json b/tools/c7n_gcp/tests/data/flights/bq-table-delete/get-bigquery-v2-projects-cloud-custodian-datasets_1.json
new file mode 100644
index 00000000000..bd4ad930e6c
--- /dev/null
+++ b/tools/c7n_gcp/tests/data/flights/bq-table-delete/get-bigquery-v2-projects-cloud-custodian-datasets_1.json
@@ -0,0 +1,34 @@
+{
+ "headers": {
+ "etag": "az+V5BYvFao7/P7Zrra1/w==",
+ "content-type": "application/json; charset=UTF-8",
+ "vary": "Origin, X-Origin, Referer",
+ "date": "Fri, 04 Feb 2022 21:15:46 GMT",
+ "server": "ESF",
+ "cache-control": "private",
+ "x-xss-protection": "0",
+ "x-frame-options": "SAMEORIGIN",
+ "x-content-type-options": "nosniff",
+ "alt-svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"",
+ "transfer-encoding": "chunked",
+ "status": "200",
+ "content-length": "347",
+ "-content-encoding": "gzip",
+ "content-location": "https://bigquery.googleapis.com/bigquery/v2/projects/cloud-custodian/datasets?alt=json"
+ },
+ "body": {
+ "kind": "bigquery#datasetList",
+ "etag": "az+V5BYvFao7/P7Zrra1/w==",
+ "datasets": [
+ {
+ "kind": "bigquery#dataset",
+ "id": "cloud-custodian:custodian_test",
+ "datasetReference": {
+ "datasetId": "custodian_test",
+ "projectId": "cloud-custodian"
+ },
+ "location": "us-central1"
+ }
+ ]
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_gcp/tests/data/flights/bucket-iam-policy/get-storage-v1-b-cloud-custodian-test-1-iam_1.json b/tools/c7n_gcp/tests/data/flights/bucket-iam-policy/get-storage-v1-b-cloud-custodian-test-1-iam_1.json
new file mode 100644
index 00000000000..e64a728a217
--- /dev/null
+++ b/tools/c7n_gcp/tests/data/flights/bucket-iam-policy/get-storage-v1-b-cloud-custodian-test-1-iam_1.json
@@ -0,0 +1,55 @@
+{
+ "headers": {
+ "etag": "CAI=",
+ "content-type": "application/json; charset=UTF-8",
+ "date": "Thu, 17 Jun 2021 21:11:59 GMT",
+ "vary": "Origin, X-Origin",
+ "cache-control": "private, max-age=0, must-revalidate, no-transform",
+ "expires": "Thu, 17 Jun 2021 21:11:59 GMT",
+ "content-length": "849",
+ "server": "UploadServer",
+ "alt-svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000,h3-T051=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"",
+ "status": "200",
+ "content-location": "https://storage.googleapis.com/storage/v1/b/cloud-custodian-test-1/iam?alt=json"
+ },
+ "body": {
+ "kind": "storage#policy",
+ "resourceId": "projects/custodian/buckets/cloud-custodian-test-1",
+ "version": 1,
+ "etag": "CAI=",
+ "bindings": [
+ {
+ "role": "roles/cloudbuild.builds.builder",
+ "members": [
+ "allUsers"
+ ]
+ },
+ {
+ "role": "roles/storage.legacyBucketOwner",
+ "members": [
+ "projectEditor:custodian",
+ "projectOwner:custodian"
+ ]
+ },
+ {
+ "role": "roles/storage.legacyBucketReader",
+ "members": [
+ "projectViewer:custodian"
+ ]
+ },
+ {
+ "role": "roles/storage.legacyObjectOwner",
+ "members": [
+ "projectEditor:custodian",
+ "projectOwner:custodian"
+ ]
+ },
+ {
+ "role": "roles/storage.legacyObjectReader",
+ "members": [
+ "projectViewer:custodian"
+ ]
+ }
+ ]
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_gcp/tests/data/flights/bucket-iam-policy/get-storage-v1-b-cloud-custodian-test-2-iam_1.json b/tools/c7n_gcp/tests/data/flights/bucket-iam-policy/get-storage-v1-b-cloud-custodian-test-2-iam_1.json
new file mode 100644
index 00000000000..487b893ad35
--- /dev/null
+++ b/tools/c7n_gcp/tests/data/flights/bucket-iam-policy/get-storage-v1-b-cloud-custodian-test-2-iam_1.json
@@ -0,0 +1,55 @@
+{
+ "headers": {
+ "etag": "CAI=",
+ "content-type": "application/json; charset=UTF-8",
+ "date": "Thu, 17 Jun 2021 21:11:59 GMT",
+ "vary": "Origin, X-Origin",
+ "cache-control": "private, max-age=0, must-revalidate, no-transform",
+ "expires": "Thu, 17 Jun 2021 21:11:59 GMT",
+ "content-length": "849",
+ "server": "UploadServer",
+ "alt-svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000,h3-T051=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"",
+ "status": "200",
+ "content-location": "https://storage.googleapis.com/storage/v1/b/cloud-custodian-test-2/iam?alt=json"
+ },
+ "body": {
+ "kind": "storage#policy",
+ "resourceId": "projects/custodian/buckets/cloud-custodian-test-2",
+ "version": 1,
+ "etag": "CAI=",
+ "bindings": [
+ {
+ "role": "roles/cloudbuild.builds.builder",
+ "members": [
+ "allAuthenticatedUsers"
+ ]
+ },
+ {
+ "role": "roles/storage.legacyBucketOwner",
+ "members": [
+ "projectEditor:custodian",
+ "projectOwner:custodian"
+ ]
+ },
+ {
+ "role": "roles/storage.legacyBucketReader",
+ "members": [
+ "projectViewer:custodian"
+ ]
+ },
+ {
+ "role": "roles/storage.legacyObjectOwner",
+ "members": [
+ "projectEditor:custodian",
+ "projectOwner:custodian"
+ ]
+ },
+ {
+ "role": "roles/storage.legacyObjectReader",
+ "members": [
+ "projectViewer:custodian"
+ ]
+ }
+ ]
+ }
+ }
\ No newline at end of file
diff --git a/tools/c7n_gcp/tests/data/flights/bucket-iam-policy/get-storage-v1-b-cloud-custodian-test-3-iam_1.json b/tools/c7n_gcp/tests/data/flights/bucket-iam-policy/get-storage-v1-b-cloud-custodian-test-3-iam_1.json
new file mode 100644
index 00000000000..938f3a8286c
--- /dev/null
+++ b/tools/c7n_gcp/tests/data/flights/bucket-iam-policy/get-storage-v1-b-cloud-custodian-test-3-iam_1.json
@@ -0,0 +1,49 @@
+{
+ "headers": {
+ "etag": "CAI=",
+ "content-type": "application/json; charset=UTF-8",
+ "date": "Thu, 17 Jun 2021 21:11:59 GMT",
+ "vary": "Origin, X-Origin",
+ "cache-control": "private, max-age=0, must-revalidate, no-transform",
+ "expires": "Thu, 17 Jun 2021 21:11:59 GMT",
+ "content-length": "849",
+ "server": "UploadServer",
+ "alt-svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000,h3-T051=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"",
+ "status": "200",
+ "content-location": "https://storage.googleapis.com/storage/v1/b/cloud-custodian-test-1/iam?alt=json"
+ },
+ "body": {
+ "kind": "storage#policy",
+ "resourceId": "projects/custodian/buckets/cloud-custodian-test-1",
+ "version": 1,
+ "etag": "CAI=",
+ "bindings": [
+ {
+ "role": "roles/storage.legacyBucketOwner",
+ "members": [
+ "projectEditor:custodian",
+ "projectOwner:custodian"
+ ]
+ },
+ {
+ "role": "roles/storage.legacyBucketReader",
+ "members": [
+ "projectViewer:custodian"
+ ]
+ },
+ {
+ "role": "roles/storage.legacyObjectOwner",
+ "members": [
+ "projectEditor:custodian",
+ "projectOwner:custodian"
+ ]
+ },
+ {
+ "role": "roles/storage.legacyObjectReader",
+ "members": [
+ "projectViewer:custodian"
+ ]
+ }
+ ]
+ }
+ }
\ No newline at end of file
diff --git a/tools/c7n_gcp/tests/data/flights/bucket-iam-policy/get-storage-v1-b_1.json b/tools/c7n_gcp/tests/data/flights/bucket-iam-policy/get-storage-v1-b_1.json
new file mode 100644
index 00000000000..e06d6835d38
--- /dev/null
+++ b/tools/c7n_gcp/tests/data/flights/bucket-iam-policy/get-storage-v1-b_1.json
@@ -0,0 +1,101 @@
+{
+ "headers": {
+ "x-guploader-uploadid": "ABg5-Uw9PimUJwYAIHYNEBvtU_aXQie3d14SDjr62EHvcEsq9YGRF_vjK_GGpcaNpY0jA29UqUwDCxewRhhWLF6xdiY",
+ "content-type": "application/json; charset=UTF-8",
+ "date": "Thu, 17 Jun 2021 21:11:58 GMT",
+ "vary": "Origin, X-Origin",
+ "cache-control": "private, max-age=0, must-revalidate, no-transform",
+ "expires": "Thu, 17 Jun 2021 21:11:58 GMT",
+ "content-length": "10922",
+ "server": "UploadServer",
+ "alt-svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000,h3-T051=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"",
+ "status": "200",
+ "content-location": "https://storage.googleapis.com/storage/v1/b?project=custodian&projection=full&alt=json"
+ },
+ "body": {
+ "kind": "storage#buckets",
+ "items": [
+ {
+ "kind": "storage#bucket",
+ "selfLink": "https://www.googleapis.com/storage/v1/b/cloud-custodian-test-1",
+ "id": "cloud-custodian-test-1",
+ "name": "cloud-custodian-test-1",
+ "projectNumber": "624100000705",
+ "metageneration": "2",
+ "location": "US-EAST1",
+ "storageClass": "STANDARD",
+ "etag": "CAI=",
+ "defaultEventBasedHold": false,
+ "timeCreated": "2021-06-08T23:22:05.793Z",
+ "updated": "2021-06-08T23:22:40.234Z",
+ "iamConfiguration": {
+ "bucketPolicyOnly": {
+ "enabled": true,
+ "lockedTime": "2021-09-06T23:22:05.793Z"
+ },
+ "uniformBucketLevelAccess": {
+ "enabled": true,
+ "lockedTime": "2021-09-06T23:22:05.793Z"
+ },
+ "publicAccessPrevention": "unspecified"
+ },
+ "locationType": "region",
+ "satisfiesPZS": false
+ },
+ {
+ "kind": "storage#bucket",
+ "selfLink": "https://www.googleapis.com/storage/v1/b/cloud-custodian-test-2",
+ "id": "cloud-custodian-test-2",
+ "name": "cloud-custodian-test-2",
+ "projectNumber": "888888784725",
+ "metageneration": "2",
+ "location": "US-EAST1",
+ "storageClass": "STANDARD",
+ "etag": "CAI=",
+ "defaultEventBasedHold": false,
+ "timeCreated": "2021-06-08T23:22:05.793Z",
+ "updated": "2021-06-08T23:22:40.234Z",
+ "iamConfiguration": {
+ "bucketPolicyOnly": {
+ "enabled": true,
+ "lockedTime": "2020-08-06T23:22:05.793Z"
+ },
+ "uniformBucketLevelAccess": {
+ "enabled": false,
+ "lockedTime": "2020-08-06T23:22:05.793Z"
+ },
+ "publicAccessPrevention": "unspecified"
+ },
+ "locationType": "region",
+ "satisfiesPZS": false
+ },
+ {
+ "kind": "storage#bucket",
+ "selfLink": "https://www.googleapis.com/storage/v1/b/cloud-custodian-test-2",
+ "id": "cloud-custodian-test-3",
+ "name": "cloud-custodian-test-3",
+ "projectNumber": "383838584725",
+ "metageneration": "2",
+ "location": "US-EAST1",
+ "storageClass": "STANDARD",
+ "etag": "CAI=",
+ "defaultEventBasedHold": false,
+ "timeCreated": "2019-06-04T23:22:05.793Z",
+ "updated": "2019-06-04T23:22:40.234Z",
+ "iamConfiguration": {
+ "bucketPolicyOnly": {
+ "enabled": true,
+ "lockedTime": "2020-08-06T23:22:05.793Z"
+ },
+ "uniformBucketLevelAccess": {
+ "enabled": false,
+ "lockedTime": "2020-08-06T23:22:05.793Z"
+ },
+ "publicAccessPrevention": "unspecified"
+ },
+ "locationType": "region",
+ "satisfiesPZS": false
+ }
+ ]
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_gcp/tests/data/flights/kms-cryptokey-iam-policy/get-v1-projects-cloud-custodian-locations-global-keyRings-cloud-custodian-test-cryptoKeys-test1-getIamPolicy_1.json b/tools/c7n_gcp/tests/data/flights/kms-cryptokey-iam-policy/get-v1-projects-cloud-custodian-locations-global-keyRings-cloud-custodian-test-cryptoKeys-test1-getIamPolicy_1.json
new file mode 100644
index 00000000000..dccb0bdfd4b
--- /dev/null
+++ b/tools/c7n_gcp/tests/data/flights/kms-cryptokey-iam-policy/get-v1-projects-cloud-custodian-locations-global-keyRings-cloud-custodian-test-cryptoKeys-test1-getIamPolicy_1.json
@@ -0,0 +1,36 @@
+{
+ "headers": {
+ "content-type": "application/json; charset=UTF-8",
+ "vary": "Origin, X-Origin, Referer",
+ "date": "Thu, 17 Jun 2021 22:51:34 GMT",
+ "server": "ESF",
+ "cache-control": "private",
+ "x-xss-protection": "0",
+ "x-frame-options": "SAMEORIGIN",
+ "x-content-type-options": "nosniff",
+ "alt-svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000,h3-T051=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"",
+ "transfer-encoding": "chunked",
+ "status": "200",
+ "content-length": "179",
+ "-content-encoding": "gzip",
+ "content-location": "https://cloudkms.googleapis.com/v1/projects/custodian/locations/global/keyRings/cloud-custodian-test/cryptoKeys/test1:getIamPolicy?alt=json"
+ },
+ "body": {
+ "version": 1,
+ "etag": "BwXE/gnR8t4=",
+ "bindings": [
+ {
+ "role": "roles/cloudkms.signer",
+ "members": [
+ "user:test123@gmail.com"
+ ]
+ },
+ {
+ "role": "roles/cloudkms.admin",
+ "members": [
+ "allUsers"
+ ]
+ }
+ ]
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_gcp/tests/data/flights/kms-cryptokey-iam-policy/get-v1-projects-cloud-custodian-locations-global-keyRings-cloud-custodian-test-cryptoKeys-test2-getIamPolicy_1.json b/tools/c7n_gcp/tests/data/flights/kms-cryptokey-iam-policy/get-v1-projects-cloud-custodian-locations-global-keyRings-cloud-custodian-test-cryptoKeys-test2-getIamPolicy_1.json
new file mode 100644
index 00000000000..a9b50f53c06
--- /dev/null
+++ b/tools/c7n_gcp/tests/data/flights/kms-cryptokey-iam-policy/get-v1-projects-cloud-custodian-locations-global-keyRings-cloud-custodian-test-cryptoKeys-test2-getIamPolicy_1.json
@@ -0,0 +1,37 @@
+{
+ "headers": {
+ "content-type": "application/json; charset=UTF-8",
+ "vary": "Origin, X-Origin, Referer",
+ "date": "Thu, 17 Jun 2021 22:51:34 GMT",
+ "server": "ESF",
+ "cache-control": "private",
+ "x-xss-protection": "0",
+ "x-frame-options": "SAMEORIGIN",
+ "x-content-type-options": "nosniff",
+ "alt-svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000,h3-T051=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"",
+ "transfer-encoding": "chunked",
+ "status": "200",
+ "content-length": "179",
+ "-content-encoding": "gzip",
+ "content-location": "https://cloudkms.googleapis.com/v1/projects/custodian/locations/global/keyRings/cloud-custodian-test/cryptoKeys/test2:getIamPolicy?alt=json"
+ },
+ "body": {
+ "version": 1,
+ "etag": "BwXE/gnR8t4=",
+ "bindings": [
+ {
+ "role": "roles/cryptoKeyDecrypter",
+ "members": [
+ "user:test123@gmail.com",
+ "user:testabc@gmail.com"
+ ]
+ },
+ {
+ "role": "roles/cloudkms.admin",
+ "members": [
+ "user:test123@gmail.com"
+ ]
+ }
+ ]
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_gcp/tests/data/flights/kms-cryptokey-iam-policy/get-v1-projects-cloud-custodian-locations-global-keyRings-cloud-custodian-test-cryptoKeys-test3-getIamPolicy_1.json b/tools/c7n_gcp/tests/data/flights/kms-cryptokey-iam-policy/get-v1-projects-cloud-custodian-locations-global-keyRings-cloud-custodian-test-cryptoKeys-test3-getIamPolicy_1.json
new file mode 100644
index 00000000000..b941e570c54
--- /dev/null
+++ b/tools/c7n_gcp/tests/data/flights/kms-cryptokey-iam-policy/get-v1-projects-cloud-custodian-locations-global-keyRings-cloud-custodian-test-cryptoKeys-test3-getIamPolicy_1.json
@@ -0,0 +1,37 @@
+{
+ "headers": {
+ "content-type": "application/json; charset=UTF-8",
+ "vary": "Origin, X-Origin, Referer",
+ "date": "Thu, 17 Jun 2021 22:51:34 GMT",
+ "server": "ESF",
+ "cache-control": "private",
+ "x-xss-protection": "0",
+ "x-frame-options": "SAMEORIGIN",
+ "x-content-type-options": "nosniff",
+ "alt-svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000,h3-T051=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"",
+ "transfer-encoding": "chunked",
+ "status": "200",
+ "content-length": "179",
+ "-content-encoding": "gzip",
+ "content-location": "https://cloudkms.googleapis.com/v1/projects/custodian/locations/global/keyRings/cloud-custodian-test/cryptoKeys/test2:getIamPolicy?alt=json"
+ },
+ "body": {
+ "version": 1,
+ "etag": "BwXE/gnR8t4=",
+ "bindings": [
+ {
+ "role": "roles/cryptoKeyDecrypter",
+ "members": [
+ "user:test123@gmail.com",
+ "user:testabc@gmail.com"
+ ]
+ },
+ {
+ "role": "roles/cloudkms.admin",
+ "members": [
+ "allAuthenticatedUsers"
+ ]
+ }
+ ]
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_gcp/tests/data/flights/kms-cryptokey-iam-policy/get-v1-projects-cloud-custodian-locations-global-keyRings-cloud-custodian-test-cryptoKeys_1.json b/tools/c7n_gcp/tests/data/flights/kms-cryptokey-iam-policy/get-v1-projects-cloud-custodian-locations-global-keyRings-cloud-custodian-test-cryptoKeys_1.json
new file mode 100644
index 00000000000..39db1cdc449
--- /dev/null
+++ b/tools/c7n_gcp/tests/data/flights/kms-cryptokey-iam-policy/get-v1-projects-cloud-custodian-locations-global-keyRings-cloud-custodian-test-cryptoKeys_1.json
@@ -0,0 +1,80 @@
+{
+ "headers": {
+ "content-type": "application/json; charset=UTF-8",
+ "vary": "Origin, X-Origin, Referer",
+ "date": "Thu, 17 Jun 2021 22:51:34 GMT",
+ "server": "ESF",
+ "cache-control": "private",
+ "x-xss-protection": "0",
+ "x-frame-options": "SAMEORIGIN",
+ "x-content-type-options": "nosniff",
+ "alt-svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000,h3-T051=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"",
+ "transfer-encoding": "chunked",
+ "status": "200",
+ "content-length": "846",
+ "-content-encoding": "gzip",
+ "content-location": "https://cloudkms.googleapis.com/v1/projects/custodian/locations/global/keyRings/cloud-custodian-test/cryptoKeys?alt=json"
+ },
+ "body": {
+ "cryptoKeys": [
+ {
+ "name": "projects/custodian/locations/global/keyRings/cloud-custodian-test/cryptoKeys/test1",
+ "primary": {
+ "name": "projects/custodian/locations/global/keyRings/cloud-custodian-test/cryptoKeys/test1/cryptoKeyVersions/2",
+ "state": "ENABLED",
+ "createTime": "2021-06-12T07:00:00.100909578Z",
+ "protectionLevel": "SOFTWARE",
+ "algorithm": "GOOGLE_SYMMETRIC_ENCRYPTION",
+ "generateTime": "2021-06-12T07:00:00.100909578Z"
+ },
+ "purpose": "ENCRYPT_DECRYPT",
+ "createTime": "2021-06-02T20:47:49.227281396Z",
+ "nextRotationTime": "2021-09-18T07:00:00.100909Z",
+ "rotationPeriod": "8467200s",
+ "versionTemplate": {
+ "protectionLevel": "SOFTWARE",
+ "algorithm": "GOOGLE_SYMMETRIC_ENCRYPTION"
+ }
+ },
+ {
+ "name": "projects/custodian/locations/global/keyRings/cloud-custodian-test/cryptoKeys/test2",
+ "primary": {
+ "name": "projects/custodian/locations/global/keyRings/cloud-custodian-test/cryptoKeys/test2/cryptoKeyVersions/2",
+ "state": "ENABLED",
+ "createTime": "2021-06-12T07:00:00.100909578Z",
+ "protectionLevel": "SOFTWARE",
+ "algorithm": "GOOGLE_SYMMETRIC_ENCRYPTION",
+ "generateTime": "2021-06-12T07:00:00.100909578Z"
+ },
+ "purpose": "ENCRYPT_DECRYPT",
+ "createTime": "2021-06-02T20:47:49.227281396Z",
+ "nextRotationTime": "2021-09-18T07:00:00.100909Z",
+ "rotationPeriod": "8467200s",
+ "versionTemplate": {
+ "protectionLevel": "SOFTWARE",
+ "algorithm": "GOOGLE_SYMMETRIC_ENCRYPTION"
+ }
+ },
+ {
+ "name": "projects/custodian/locations/global/keyRings/cloud-custodian-test/cryptoKeys/test3",
+ "primary": {
+ "name": "projects/custodian/locations/global/keyRings/cloud-custodian-test/cryptoKeys/test3/cryptoKeyVersions/2",
+ "state": "ENABLED",
+ "createTime": "2021-06-12T07:00:00.100909578Z",
+ "protectionLevel": "SOFTWARE",
+ "algorithm": "GOOGLE_SYMMETRIC_ENCRYPTION",
+ "generateTime": "2021-06-12T07:00:00.100909578Z"
+ },
+ "purpose": "ENCRYPT_DECRYPT",
+ "createTime": "2021-06-02T20:47:49.227281396Z",
+ "nextRotationTime": "2021-09-18T07:00:00.100909Z",
+ "rotationPeriod": "8467200s",
+ "versionTemplate": {
+ "protectionLevel": "SOFTWARE",
+ "algorithm": "GOOGLE_SYMMETRIC_ENCRYPTION"
+ }
+ }
+ ],
+ "totalSize": 1
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_gcp/tests/data/flights/kms-cryptokey-iam-policy/get-v1-projects-cloud-custodian-locations-global-keyRings_1.json b/tools/c7n_gcp/tests/data/flights/kms-cryptokey-iam-policy/get-v1-projects-cloud-custodian-locations-global-keyRings_1.json
new file mode 100644
index 00000000000..28bd8fd438f
--- /dev/null
+++ b/tools/c7n_gcp/tests/data/flights/kms-cryptokey-iam-policy/get-v1-projects-cloud-custodian-locations-global-keyRings_1.json
@@ -0,0 +1,27 @@
+{
+ "headers": {
+ "content-type": "application/json; charset=UTF-8",
+ "vary": "Origin, X-Origin, Referer",
+ "date": "Thu, 17 Jun 2021 22:51:19 GMT",
+ "server": "ESF",
+ "cache-control": "private",
+ "x-xss-protection": "0",
+ "x-frame-options": "SAMEORIGIN",
+ "x-content-type-options": "nosniff",
+ "alt-svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000,h3-T051=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"",
+ "transfer-encoding": "chunked",
+ "status": "200",
+ "content-length": "190",
+ "-content-encoding": "gzip",
+ "content-location": "https://cloudkms.googleapis.com/v1/projects/custodian/locations/global/keyRings?alt=json"
+ },
+ "body": {
+ "keyRings": [
+ {
+ "name": "projects/custodian/locations/global/keyRings/cloud-custodian-test",
+ "createTime": "2021-06-02T20:46:36.698684169Z"
+ }
+ ],
+ "totalSize": 1
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_gcp/tests/data/flights/project-iam-policy/get-v1-projects_1.json b/tools/c7n_gcp/tests/data/flights/project-iam-policy/get-v1-projects_1.json
new file mode 100644
index 00000000000..0bb3db77083
--- /dev/null
+++ b/tools/c7n_gcp/tests/data/flights/project-iam-policy/get-v1-projects_1.json
@@ -0,0 +1,56 @@
+{
+ "headers": {
+ "content-type": "application/json; charset=UTF-8",
+ "vary": "Origin, X-Origin, Referer",
+ "date": "Wed, 16 Jun 2021 23:18:01 GMT",
+ "server": "ESF",
+ "cache-control": "private",
+ "x-xss-protection": "0",
+ "x-frame-options": "SAMEORIGIN",
+ "x-content-type-options": "nosniff",
+ "server-timing": "gfet4t7; dur=163",
+ "alt-svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000,h3-T051=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"",
+ "transfer-encoding": "chunked",
+ "status": "200",
+ "content-length": "303",
+ "-content-encoding": "gzip",
+ "content-location": "https://cloudresourcemanager.googleapis.com/v1/projects?alt=json"
+ },
+ "body": {
+ "projects": [
+ {
+ "projectNumber": "624133384705",
+ "projectId": "custodian-test",
+ "lifecycleState": "ACTIVE",
+ "name": "custodian-test",
+ "createTime": "2019-07-18T09:51:51.823Z",
+ "parent": {
+ "type": "organization",
+ "id": "633447823333"
+ }
+ },
+ {
+ "projectNumber": "694110004704",
+ "projectId": "custodian-test-2",
+ "lifecycleState": "ACTIVE",
+ "name": "custodian-test-2",
+ "createTime": "2020-07-18T09:51:51.823Z",
+ "parent": {
+ "type": "organization",
+ "id": "639999823333"
+ }
+ },
+ {
+ "projectNumber": "698888804704",
+ "projectId": "custodian-test-3",
+ "lifecycleState": "ACTIVE",
+ "name": "custodian-test-3",
+ "createTime": "2021-05-14T09:51:51.823Z",
+ "parent": {
+ "type": "organization",
+ "id": "600002823333"
+ }
+ }
+ ]
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_gcp/tests/data/flights/project-iam-policy/post-v1-projects-custodian-test-2-getIamPolicy_1.json b/tools/c7n_gcp/tests/data/flights/project-iam-policy/post-v1-projects-custodian-test-2-getIamPolicy_1.json
new file mode 100644
index 00000000000..5707d4bf163
--- /dev/null
+++ b/tools/c7n_gcp/tests/data/flights/project-iam-policy/post-v1-projects-custodian-test-2-getIamPolicy_1.json
@@ -0,0 +1,58 @@
+{
+ "headers": {
+ "content-type": "application/json; charset=UTF-8",
+ "vary": "Origin, X-Origin, Referer",
+ "date": "Wed, 16 Jun 2021 23:18:01 GMT",
+ "server": "ESF",
+ "cache-control": "private",
+ "x-xss-protection": "0",
+ "x-frame-options": "SAMEORIGIN",
+ "x-content-type-options": "nosniff",
+ "server-timing": "gfet4t7; dur=184",
+ "alt-svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000,h3-T051=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"",
+ "transfer-encoding": "chunked",
+ "status": "200",
+ "content-length": "7911",
+ "-content-encoding": "gzip"
+ },
+ "body": {
+ "version": 1,
+ "etag": "BwXE56QgxWk=",
+ "bindings": [
+ {
+ "role": "roles/admin",
+ "members": [
+ "serviceAccount:abc@testproject.iam.gserviceaccount.com",
+ "user:abc@gmail.com",
+ "abcdefg"
+ ]
+ },
+ {
+ "role": "roles/editor",
+ "members": [
+ "serviceAccount:def@testproject.iam.gserviceaccount.com",
+ "user:zzz@gmail.com"
+ ]
+ },
+ {
+ "role": "roles/viewer",
+ "members": [
+ "user:abc@gmail.com"
+ ]
+ }
+ ],
+ "auditConfigs": [
+ {
+ "service": "allServices",
+ "auditLogConfigs": [
+ {
+ "logType": "DATA_WRITE"
+ },
+ {
+ "logType": "DATA_READ"
+ }
+ ]
+ }
+ ]
+ }
+ }
\ No newline at end of file
diff --git a/tools/c7n_gcp/tests/data/flights/project-iam-policy/post-v1-projects-custodian-test-3-getIamPolicy_1.json b/tools/c7n_gcp/tests/data/flights/project-iam-policy/post-v1-projects-custodian-test-3-getIamPolicy_1.json
new file mode 100644
index 00000000000..916c1bc2ac7
--- /dev/null
+++ b/tools/c7n_gcp/tests/data/flights/project-iam-policy/post-v1-projects-custodian-test-3-getIamPolicy_1.json
@@ -0,0 +1,57 @@
+{
+ "headers": {
+ "content-type": "application/json; charset=UTF-8",
+ "vary": "Origin, X-Origin, Referer",
+ "date": "Wed, 16 Jun 2021 23:18:01 GMT",
+ "server": "ESF",
+ "cache-control": "private",
+ "x-xss-protection": "0",
+ "x-frame-options": "SAMEORIGIN",
+ "x-content-type-options": "nosniff",
+ "server-timing": "gfet4t7; dur=184",
+ "alt-svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000,h3-T051=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"",
+ "transfer-encoding": "chunked",
+ "status": "200",
+ "content-length": "7911",
+ "-content-encoding": "gzip"
+ },
+ "body": {
+ "version": 1,
+ "etag": "BwXE56QgxWk=",
+ "bindings": [
+ {
+ "role": "roles/admin",
+ "members": [
+ "group:dummyGroup1",
+ "user:abc@gmail.com"
+ ]
+ },
+ {
+ "role": "roles/editor",
+ "members": [
+ "allUsers",
+ "user:zzz@gmail.com"
+ ]
+ },
+ {
+ "role": "roles/viewer",
+ "members": [
+ "user:abc@gmail.com"
+ ]
+ }
+ ],
+ "auditConfigs": [
+ {
+ "service": "allServices",
+ "auditLogConfigs": [
+ {
+ "logType": "DATA_WRITE"
+ },
+ {
+ "logType": "DATA_READ"
+ }
+ ]
+ }
+ ]
+ }
+ }
\ No newline at end of file
diff --git a/tools/c7n_gcp/tests/data/flights/project-iam-policy/post-v1-projects-custodian-test-getIamPolicy_1.json b/tools/c7n_gcp/tests/data/flights/project-iam-policy/post-v1-projects-custodian-test-getIamPolicy_1.json
new file mode 100644
index 00000000000..70f43a3aa20
--- /dev/null
+++ b/tools/c7n_gcp/tests/data/flights/project-iam-policy/post-v1-projects-custodian-test-getIamPolicy_1.json
@@ -0,0 +1,56 @@
+{
+ "headers": {
+ "content-type": "application/json; charset=UTF-8",
+ "vary": "Origin, X-Origin, Referer",
+ "date": "Wed, 16 Jun 2021 23:18:01 GMT",
+ "server": "ESF",
+ "cache-control": "private",
+ "x-xss-protection": "0",
+ "x-frame-options": "SAMEORIGIN",
+ "x-content-type-options": "nosniff",
+ "server-timing": "gfet4t7; dur=184",
+ "alt-svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000,h3-T051=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"",
+ "transfer-encoding": "chunked",
+ "status": "200",
+ "content-length": "7911",
+ "-content-encoding": "gzip"
+ },
+ "body": {
+ "version": 1,
+ "etag": "BwXE56QgxWk=",
+ "bindings": [
+ {
+ "role": "roles/owner",
+ "members": [
+ "serviceAccount:abc@testproject.iam.gserviceaccount.com",
+ "user:abc@gmail.com"
+ ]
+ },
+ {
+ "role": "roles/editor",
+ "members": [
+ "serviceAccount:def@testproject.iam.gserviceaccount.com"
+ ]
+ },
+ {
+ "role": "roles/viewer",
+ "members": [
+ "user:abc@gmail.com"
+ ]
+ }
+ ],
+ "auditConfigs": [
+ {
+ "service": "allServices",
+ "auditLogConfigs": [
+ {
+ "logType": "DATA_WRITE"
+ },
+ {
+ "logType": "DATA_READ"
+ }
+ ]
+ }
+ ]
+ }
+}
\ No newline at end of file
diff --git a/tools/c7n_gcp/tests/data/flights/sourcerepo-query/get-v1-projects-cloud-custodian-repos_1.json b/tools/c7n_gcp/tests/data/flights/sourcerepo-query/get-v1-projects-cloud-custodian-repos_1.json
new file mode 100644
index 00000000000..7f55d123cbc
--- /dev/null
+++ b/tools/c7n_gcp/tests/data/flights/sourcerepo-query/get-v1-projects-cloud-custodian-repos_1.json
@@ -0,0 +1,26 @@
+{
+ "headers": {
+ "content-type": "application/json; charset=UTF-8",
+ "vary": "Origin, X-Origin, Referer",
+ "date": "Wed, 18 May 2022 01:40:12 GMT",
+ "server": "ESF",
+ "cache-control": "private",
+ "x-xss-protection": "0",
+ "x-frame-options": "SAMEORIGIN",
+ "x-content-type-options": "nosniff",
+ "alt-svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"",
+ "transfer-encoding": "chunked",
+ "status": "200",
+ "content-length": "167",
+ "-content-encoding": "gzip",
+ "content-location": "https://sourcerepo.googleapis.com/v1/projects/cloud-custodian/repos?alt=json"
+ },
+ "body": {
+ "repos": [
+ {
+ "name": "projects/cloud-custodian/repos/test-repo",
+ "url": "https://source.developers.google.com/p/cloud-custodian/r/test-repo"
+ }
+ ]
+ }
+}
diff --git a/tools/c7n_gcp/tests/test_bigquery.py b/tools/c7n_gcp/tests/test_bigquery.py
index e39cafd9575..964e077981a 100644
--- a/tools/c7n_gcp/tests/test_bigquery.py
+++ b/tools/c7n_gcp/tests/test_bigquery.py
@@ -2,6 +2,7 @@
# SPDX-License-Identifier: Apache-2.0
from gcp_common import BaseTest, event_data
+import time
class BigQueryDataSetTest(BaseTest):
@@ -86,3 +87,27 @@ def test_table_get(self):
event = event_data('bq-table-create.json')
job = exec_mode.run(event, None)
self.assertIn('tableReference', job[0].keys())
+
+ def test_table_delete(self):
+ project_id = 'premise-governance-rd'
+ factory = self.replay_flight_data('bq-table-delete', project_id=project_id)
+ p = self.load_policy(
+ {
+ 'name': 'bq-table-delete',
+ 'resource': 'gcp.bq-table',
+ 'filters': [{
+ 'type': 'value',
+ 'key': 'tag:delete_me',
+ 'value': 'yes',
+ 'op': 'equal'
+ }],
+ 'actions': [
+ 'delete'
+ ]
+ },
+ session_factory=factory
+ )
+ resources = p.run()
+ if self.recording:
+ time.sleep(1)
+ self.assertEqual(len(resources), 1)
diff --git a/tools/c7n_gcp/tests/test_gcp_storage.py b/tools/c7n_gcp/tests/test_gcp_storage.py
index b75014989f8..e5ea92fc65f 100644
--- a/tools/c7n_gcp/tests/test_gcp_storage.py
+++ b/tools/c7n_gcp/tests/test_gcp_storage.py
@@ -61,3 +61,27 @@ def test_enable_uniform_bucket_level_access(self):
self.assertEqual(bucket['storageClass'], "REGIONAL")
self.assertEqual(bucket['location'], "US-EAST1")
self.assertJmes('iamConfiguration.uniformBucketLevelAccess.enabled', bucket, True)
+
+ def test_bucket_iam_policy_filter(self):
+ factory = self.replay_flight_data('bucket-iam-policy')
+ p = self.load_policy(
+ {'name': 'bucket',
+ 'resource': 'gcp.bucket',
+ 'filters': [{
+ 'type': 'iam-policy',
+ 'doc': {'key': 'bindings[*].members[]',
+ 'op': 'intersect',
+ 'value': ['allUsers', 'allAuthenticatedUsers']}
+ }]},
+ session_factory=factory)
+ resources = p.run()
+ self.assertEqual(len(resources), 2)
+
+ for resource in resources:
+ self.assertTrue('c7n:iamPolicy' in resource)
+ bindings = resource['c7n:iamPolicy']['bindings']
+ members = set()
+ for binding in bindings:
+ for member in binding['members']:
+ members.add(member)
+ self.assertTrue('allUsers' in members or 'allAuthenticatedUsers' in members)
diff --git a/tools/c7n_gcp/tests/test_kms.py b/tools/c7n_gcp/tests/test_kms.py
index e244956fa87..757e6537d4c 100644
--- a/tools/c7n_gcp/tests/test_kms.py
+++ b/tools/c7n_gcp/tests/test_kms.py
@@ -144,6 +144,31 @@ def test_kms_cryptokey_get(self):
self.assertEqual(resources[0]['name'], resource_name)
self.assertEqual(resources[0][parent_annotation_key]['name'], parent_resource_name)
+ def test_kms_cryptokey_iam_policy_filter(self):
+ factory = self.replay_flight_data('kms-cryptokey-iam-policy')
+ p = self.load_policy(
+ {'name': 'resource',
+ 'resource': 'gcp.kms-cryptokey',
+ 'query': [{'location': 'global'}],
+ 'filters': [{
+ 'type': 'iam-policy',
+ 'doc': {'key': 'bindings[*].members[]',
+ 'op': 'intersect',
+ 'value': ['allUsers', 'allAuthenticatedUsers']}
+ }]},
+ session_factory=factory)
+ resources = p.run()
+ self.assertEqual(len(resources), 2)
+
+ for resource in resources:
+ self.assertTrue('c7n:iamPolicy' in resource)
+ bindings = resource['c7n:iamPolicy']['bindings']
+ members = set()
+ for binding in bindings:
+ for member in binding['members']:
+ members.add(member)
+ self.assertTrue('allUsers' in members or 'allAuthenticatedUsers' in members)
+
class KmsCryptoKeyVersionTest(BaseTest):
def test_kms_cryptokey_version_query(self):
diff --git a/tools/c7n_gcp/tests/test_notify_gcp.py b/tools/c7n_gcp/tests/test_notify_gcp.py
index 1c3c6c0e479..7380d221560 100644
--- a/tools/c7n_gcp/tests/test_notify_gcp.py
+++ b/tools/c7n_gcp/tests/test_notify_gcp.py
@@ -1,11 +1,11 @@
# Copyright The Cloud Custodian Authors.
# SPDX-License-Identifier: Apache-2.0
+from unittest import mock
+
from gcp_common import BaseTest
from c7n_gcp.client import Session
-import mock
-
class NotifyTest(BaseTest):
diff --git a/tools/c7n_gcp/tests/test_query.py b/tools/c7n_gcp/tests/test_query.py
index dc9fb1de2a0..fe326e7335f 100644
--- a/tools/c7n_gcp/tests/test_query.py
+++ b/tools/c7n_gcp/tests/test_query.py
@@ -9,7 +9,7 @@
def test_gcp_resource_metadata_asset_type():
- load_resources('gcp.*')
+ load_resources(('gcp.*',))
# asset inventory doesn't support these
whitelist = set((
'app-engine-domain',
diff --git a/tools/c7n_gcp/tests/test_resourcemanager.py b/tools/c7n_gcp/tests/test_resourcemanager.py
index 8d0059bd3ff..f26131bf3c4 100644
--- a/tools/c7n_gcp/tests/test_resourcemanager.py
+++ b/tools/c7n_gcp/tests/test_resourcemanager.py
@@ -4,12 +4,13 @@
import os
import sys
import time
+from unittest import mock
import pytest
from c7n_gcp.resources.resourcemanager import HierarchyAction
from gcp_common import BaseTest
-from mock import mock
+
from c7n.exceptions import ResourceLimitExceeded
@@ -306,3 +307,50 @@ def test_project_set_iam_policy(self):
actual_bindings = client.execute_query('getIamPolicy', get_iam_policy_params)
expected_bindings[0]['members'].append('user:mediapills@gmail.com')
self.assertEqual(actual_bindings['bindings'], expected_bindings)
+
+ def test_project_iam_policy_value_filter(self):
+ factory = self.replay_flight_data('project-iam-policy')
+ p = self.load_policy({
+ 'name': 'resource',
+ 'resource': 'gcp.project',
+ 'filters': [{
+ 'type': 'iam-policy',
+ 'doc':
+ {'key': 'bindings[*].members[]',
+ 'op': 'contains',
+ 'value': 'user:abc@gmail.com'}
+ }]},
+ session_factory=factory)
+ resources = p.run()
+ self.assertEqual(len(resources), 3)
+
+ for resource in resources:
+ self.assertTrue('c7n:iamPolicy' in resource)
+ bindings = resource['c7n:iamPolicy']['bindings']
+ members = set()
+ for binding in bindings:
+ for member in binding['members']:
+ members.add(member)
+ self.assertTrue('user:abc@gmail.com' in members)
+
+ def test_project_iam_policy_user_pair_filter(self):
+ factory = self.replay_flight_data('project-iam-policy')
+ p = self.load_policy({
+ 'name': 'resource',
+ 'resource': 'gcp.project',
+ 'filters': [{
+ 'type': 'iam-policy',
+ 'user-role':
+ {'user': "abcdefg",
+ 'has': True,
+ 'role': 'roles/admin'}
+ }]},
+ session_factory=factory)
+ resources = p.run()
+ self.assertEqual(len(resources), 1)
+
+ for resource in resources:
+ self.assertTrue('c7n:iamPolicyUserRolePair' in resource)
+ user_role_pair = resource['c7n:iamPolicyUserRolePair']
+ self.assertTrue("abcdefg" in user_role_pair)
+ self.assertTrue('roles/admin' in user_role_pair["abcdefg"])
diff --git a/tools/c7n_gcp/tests/test_sourcerepo.py b/tools/c7n_gcp/tests/test_sourcerepo.py
new file mode 100644
index 00000000000..d8d4c830d1a
--- /dev/null
+++ b/tools/c7n_gcp/tests/test_sourcerepo.py
@@ -0,0 +1,21 @@
+# Copyright The Cloud Custodian Authors.
+# SPDX-License-Identifier: Apache-2.0
+
+from gcp_common import BaseTest
+
+
+class SourceRepoTest(BaseTest):
+
+ def test_sourcerepo_query(self):
+ project_id = 'cloud-custodian'
+ repo_name = 'projects/cloud-custodian/repos/test-repo'
+ session_factory = self.replay_flight_data(
+ 'sourcerepo-query', project_id=project_id)
+
+ policy = self.load_policy(
+ {'name': 'gcp-sourcerepo-query',
+ 'resource': 'gcp.sourcerepo'},
+ session_factory=session_factory)
+
+ resources = policy.run()
+ self.assertEqual(resources[0]['name'], repo_name)
diff --git a/tools/c7n_kube/poetry.lock b/tools/c7n_kube/poetry.lock
index 1c69709a615..f5d283cb0b8 100644
--- a/tools/c7n_kube/poetry.lock
+++ b/tools/c7n_kube/poetry.lock
@@ -1,13 +1,13 @@
[[package]]
name = "argcomplete"
-version = "1.12.3"
+version = "2.0.0"
description = "Bash tab completion for argparse"
category = "dev"
optional = false
-python-versions = "*"
+python-versions = ">=3.6"
[package.dependencies]
-importlib-metadata = {version = ">=0.23,<5", markers = "python_version == \"3.6\" or python_version == \"3.7\""}
+importlib-metadata = {version = ">=0.23,<5", markers = "python_version == \"3.7\""}
[package.extras]
test = ["coverage", "flake8", "pexpect", "wheel"]
@@ -22,29 +22,29 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
[[package]]
name = "attrs"
-version = "21.2.0"
+version = "21.4.0"
description = "Classes Without Boilerplate"
category = "dev"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
[package.extras]
-dev = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "furo", "sphinx", "sphinx-notfound-page", "pre-commit"]
+dev = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "furo", "sphinx", "sphinx-notfound-page", "pre-commit", "cloudpickle"]
docs = ["furo", "sphinx", "zope.interface", "sphinx-notfound-page"]
-tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface"]
-tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins"]
+tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "cloudpickle"]
+tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "cloudpickle"]
[[package]]
name = "boto3"
-version = "1.18.21"
+version = "1.21.42"
description = "The AWS SDK for Python"
category = "dev"
optional = false
python-versions = ">= 3.6"
[package.dependencies]
-botocore = ">=1.21.21,<1.22.0"
-jmespath = ">=0.7.1,<1.0.0"
+botocore = ">=1.24.42,<1.25.0"
+jmespath = ">=0.7.1,<2.0.0"
s3transfer = ">=0.5.0,<0.6.0"
[package.extras]
@@ -52,36 +52,37 @@ crt = ["botocore[crt] (>=1.21.0,<2.0a0)"]
[[package]]
name = "botocore"
-version = "1.21.21"
+version = "1.24.42"
description = "Low-level, data-driven core of boto 3."
category = "dev"
optional = false
python-versions = ">= 3.6"
[package.dependencies]
-jmespath = ">=0.7.1,<1.0.0"
+jmespath = ">=0.7.1,<2.0.0"
python-dateutil = ">=2.1,<3.0.0"
urllib3 = ">=1.25.4,<1.27"
[package.extras]
-crt = ["awscrt (==0.11.24)"]
+crt = ["awscrt (==0.13.8)"]
[[package]]
name = "c7n"
-version = "0.9.14"
+version = "0.9.16"
description = "Cloud Custodian - Policy Rules Engine"
category = "dev"
optional = false
-python-versions = "^3.6"
+python-versions = "^3.7"
develop = true
[package.dependencies]
-argcomplete = "^1.11.1"
+argcomplete = ">=1.12.3"
boto3 = "^1.12.31"
-importlib-metadata = ">1.7.0;python_version<3.8"
-jsonschema = "^3.2.0"
-python-dateutil = "^2.8.1"
-pyyaml = "^5.3"
+docutils = ">=0.14,<0.18"
+importlib-metadata = ">=4.11.1"
+jsonschema = ">=3.0.0"
+python-dateutil = "^2.8.2"
+pyyaml = ">=5.4.0"
tabulate = "^0.8.6"
[package.source]
@@ -90,15 +91,15 @@ url = "../.."
[[package]]
name = "cachetools"
-version = "4.2.2"
+version = "5.0.0"
description = "Extensible memoizing collections and decorators"
category = "main"
optional = false
-python-versions = "~=3.5"
+python-versions = "~=3.7"
[[package]]
name = "certifi"
-version = "2021.5.30"
+version = "2021.10.8"
description = "Python package for providing Mozilla's CA Bundle."
category = "main"
optional = false
@@ -106,7 +107,7 @@ python-versions = "*"
[[package]]
name = "charset-normalizer"
-version = "2.0.4"
+version = "2.0.12"
description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet."
category = "main"
optional = false
@@ -123,16 +124,24 @@ category = "dev"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
+[[package]]
+name = "docutils"
+version = "0.17.1"
+description = "Docutils -- Python Documentation Utilities"
+category = "dev"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
+
[[package]]
name = "google-auth"
-version = "1.34.0"
+version = "2.6.5"
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,<5.0"
+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"
@@ -144,7 +153,7 @@ reauth = ["pyu2f (>=0.1.5)"]
[[package]]
name = "idna"
-version = "3.2"
+version = "3.3"
description = "Internationalized Domain Names in Applications (IDNA)"
category = "main"
optional = false
@@ -152,20 +161,35 @@ python-versions = ">=3.5"
[[package]]
name = "importlib-metadata"
-version = "4.6.4"
+version = "4.11.3"
description = "Read metadata from Python packages"
category = "dev"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.7"
[package.dependencies]
typing-extensions = {version = ">=3.6.4", markers = "python_version < \"3.8\""}
zipp = ">=0.5"
[package.extras]
-docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
+docs = ["sphinx", "jaraco.packaging (>=9)", "rst.linker (>=1.9)"]
perf = ["ipython"]
-testing = ["pytest (>=4.6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pep517", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy", "importlib-resources (>=1.3)"]
+testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)", "importlib-resources (>=1.3)"]
+
+[[package]]
+name = "importlib-resources"
+version = "5.7.1"
+description = "Read resources from Python packages"
+category = "dev"
+optional = false
+python-versions = ">=3.7"
+
+[package.dependencies]
+zipp = {version = ">=3.1.0", markers = "python_version < \"3.10\""}
+
+[package.extras]
+docs = ["sphinx", "jaraco.packaging (>=9)", "rst.linker (>=1.9)"]
+testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)"]
[[package]]
name = "iniconfig"
@@ -177,29 +201,30 @@ python-versions = "*"
[[package]]
name = "jmespath"
-version = "0.10.0"
+version = "1.0.0"
description = "JSON Matching Expressions"
category = "dev"
optional = false
-python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*"
+python-versions = ">=3.7"
[[package]]
name = "jsonschema"
-version = "3.2.0"
+version = "4.4.0"
description = "An implementation of JSON Schema validation for Python"
category = "dev"
optional = false
-python-versions = "*"
+python-versions = ">=3.7"
[package.dependencies]
attrs = ">=17.4.0"
importlib-metadata = {version = "*", markers = "python_version < \"3.8\""}
-pyrsistent = ">=0.14.0"
-six = ">=1.11.0"
+importlib-resources = {version = ">=1.4.0", markers = "python_version < \"3.9\""}
+pyrsistent = ">=0.14.0,<0.17.0 || >0.17.0,<0.17.1 || >0.17.1,<0.17.2 || >0.17.2"
+typing-extensions = {version = "*", markers = "python_version < \"3.8\""}
[package.extras]
-format = ["idna", "jsonpointer (>1.13)", "rfc3987", "strict-rfc3339", "webcolors"]
-format_nongpl = ["idna", "jsonpointer (>1.13)", "webcolors", "rfc3986-validator (>0.1.0)", "rfc3339-validator"]
+format = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3987", "uri-template", "webcolors (>=1.11)"]
+format_nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3986-validator (>0.1.0)", "uri-template", "webcolors (>=1.11)"]
[[package]]
name = "kubernetes"
@@ -225,57 +250,58 @@ adal = ["adal (>=1.0.2)"]
[[package]]
name = "multidict"
-version = "5.1.0"
+version = "6.0.2"
description = "multidict implementation"
category = "dev"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.7"
[[package]]
name = "oauthlib"
-version = "3.1.1"
+version = "3.2.0"
description = "A generic, spec-compliant, thorough implementation of the OAuth request-signing logic"
category = "main"
optional = false
python-versions = ">=3.6"
[package.extras]
-rsa = ["cryptography (>=3.0.0,<4)"]
+rsa = ["cryptography (>=3.0.0)"]
signals = ["blinker (>=1.4.0)"]
-signedtoken = ["cryptography (>=3.0.0,<4)", "pyjwt (>=2.0.0,<3)"]
+signedtoken = ["cryptography (>=3.0.0)", "pyjwt (>=2.0.0,<3)"]
[[package]]
name = "packaging"
-version = "21.0"
+version = "21.3"
description = "Core utilities for Python packages"
category = "dev"
optional = false
python-versions = ">=3.6"
[package.dependencies]
-pyparsing = ">=2.0.2"
+pyparsing = ">=2.0.2,<3.0.5 || >3.0.5"
[[package]]
name = "pluggy"
-version = "0.13.1"
+version = "1.0.0"
description = "plugin and hook calling mechanisms for python"
category = "dev"
optional = false
-python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
+python-versions = ">=3.6"
[package.dependencies]
importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""}
[package.extras]
dev = ["pre-commit", "tox"]
+testing = ["pytest", "pytest-benchmark"]
[[package]]
name = "py"
-version = "1.10.0"
+version = "1.11.0"
description = "library with cross-python path, ini-parsing, io, code, log facilities"
category = "dev"
optional = false
-python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
[[package]]
name = "pyasn1"
@@ -298,23 +324,26 @@ pyasn1 = ">=0.4.6,<0.5.0"
[[package]]
name = "pyparsing"
-version = "2.4.7"
-description = "Python parsing module"
+version = "3.0.8"
+description = "pyparsing module - Classes and methods to define and execute parsing grammars"
category = "dev"
optional = false
-python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*"
+python-versions = ">=3.6.8"
+
+[package.extras]
+diagrams = ["railroad-diagrams", "jinja2"]
[[package]]
name = "pyrsistent"
-version = "0.18.0"
+version = "0.18.1"
description = "Persistent/Functional/Immutable data structures"
category = "dev"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.7"
[[package]]
name = "pytest"
-version = "6.2.4"
+version = "6.2.5"
description = "pytest: simple powerful testing with Python"
category = "dev"
optional = false
@@ -327,7 +356,7 @@ colorama = {version = "*", markers = "sys_platform == \"win32\""}
importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""}
iniconfig = "*"
packaging = "*"
-pluggy = ">=0.12,<1.0.0a1"
+pluggy = ">=0.12,<2.0"
py = ">=1.8.2"
toml = "*"
@@ -347,15 +376,15 @@ six = ">=1.5"
[[package]]
name = "pyyaml"
-version = "5.4.1"
+version = "6.0"
description = "YAML parser and emitter for Python"
category = "main"
optional = false
-python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*"
+python-versions = ">=3.6"
[[package]]
name = "requests"
-version = "2.26.0"
+version = "2.27.1"
description = "Python HTTP for Humans."
category = "main"
optional = false
@@ -373,7 +402,7 @@ use_chardet_on_py3 = ["chardet (>=3.0.2,<5)"]
[[package]]
name = "requests-oauthlib"
-version = "1.3.0"
+version = "1.3.1"
description = "OAuthlib authentication support for Requests."
category = "main"
optional = false
@@ -388,18 +417,18 @@ rsa = ["oauthlib[signedtoken] (>=3.0.0)"]
[[package]]
name = "rsa"
-version = "4.7.2"
+version = "4.8"
description = "Pure-Python RSA implementation"
category = "main"
optional = false
-python-versions = ">=3.5, <4"
+python-versions = ">=3.6,<4"
[package.dependencies]
pyasn1 = ">=0.1.3"
[[package]]
name = "s3transfer"
-version = "0.5.0"
+version = "0.5.2"
description = "An Amazon S3 Transfer Manager"
category = "dev"
optional = false
@@ -440,22 +469,22 @@ python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*"
[[package]]
name = "typing-extensions"
-version = "3.10.0.0"
-description = "Backported and Experimental Type Hints for Python 3.5+"
+version = "4.2.0"
+description = "Backported and Experimental Type Hints for Python 3.7+"
category = "dev"
optional = false
-python-versions = "*"
+python-versions = ">=3.7"
[[package]]
name = "urllib3"
-version = "1.26.6"
+version = "1.26.9"
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.*, <4"
[package.extras]
-brotli = ["brotlipy (>=0.6.0)"]
+brotli = ["brotlicffi (>=0.8.0)", "brotli (>=1.0.9)", "brotlipy (>=0.6.0)"]
secure = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "certifi", "ipaddress"]
socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"]
@@ -475,27 +504,28 @@ yarl = {version = "*", markers = "python_version >= \"3.6\""}
[[package]]
name = "websocket-client"
-version = "1.2.1"
+version = "1.3.2"
description = "WebSocket client for Python with low level API options"
category = "main"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.7"
[package.extras]
+docs = ["Sphinx (>=3.4)", "sphinx-rtd-theme (>=0.5)"]
optional = ["python-socks", "wsaccel"]
test = ["websockets"]
[[package]]
name = "wrapt"
-version = "1.12.1"
+version = "1.14.0"
description = "Module for decorators, wrappers and monkey patching."
category = "dev"
optional = false
-python-versions = "*"
+python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7"
[[package]]
name = "yarl"
-version = "1.6.3"
+version = "1.7.2"
description = "Yet another URL library"
category = "dev"
optional = false
@@ -508,141 +538,171 @@ typing-extensions = {version = ">=3.7.4", markers = "python_version < \"3.8\""}
[[package]]
name = "zipp"
-version = "3.5.0"
+version = "3.8.0"
description = "Backport of pathlib-compatible object wrapper for zip files"
category = "dev"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.7"
[package.extras]
-docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
-testing = ["pytest (>=4.6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "jaraco.itertools", "func-timeout", "pytest-black (>=0.3.7)", "pytest-mypy"]
+docs = ["sphinx", "jaraco.packaging (>=9)", "rst.linker (>=1.9)"]
+testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "jaraco.itertools", "func-timeout", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)"]
[metadata]
lock-version = "1.1"
-python-versions = "^3.6"
-content-hash = "5a2cc5bd6e6b95ff5c56d11c63e877bbe98ae6694448326d210f2956e7b8c3f3"
+python-versions = "^3.7"
+content-hash = "0f95af39fc6dad966d357c26137d8b8868058931e3849e7013e8967fa3ac33b7"
[metadata.files]
argcomplete = [
- {file = "argcomplete-1.12.3-py2.py3-none-any.whl", hash = "sha256:291f0beca7fd49ce285d2f10e4c1c77e9460cf823eef2de54df0c0fec88b0d81"},
- {file = "argcomplete-1.12.3.tar.gz", hash = "sha256:2c7dbffd8c045ea534921e63b0be6fe65e88599990d8dc408ac8c542b72a5445"},
+ {file = "argcomplete-2.0.0-py2.py3-none-any.whl", hash = "sha256:cffa11ea77999bb0dd27bb25ff6dc142a6796142f68d45b1a26b11f58724561e"},
+ {file = "argcomplete-2.0.0.tar.gz", hash = "sha256:6372ad78c89d662035101418ae253668445b391755cfe94ea52f1b9d22425b20"},
]
atomicwrites = [
{file = "atomicwrites-1.4.0-py2.py3-none-any.whl", hash = "sha256:6d1784dea7c0c8d4a5172b6c620f40b6e4cbfdf96d783691f2e1302a7b88e197"},
{file = "atomicwrites-1.4.0.tar.gz", hash = "sha256:ae70396ad1a434f9c7046fd2dd196fc04b12f9e91ffb859164193be8b6168a7a"},
]
attrs = [
- {file = "attrs-21.2.0-py2.py3-none-any.whl", hash = "sha256:149e90d6d8ac20db7a955ad60cf0e6881a3f20d37096140088356da6c716b0b1"},
- {file = "attrs-21.2.0.tar.gz", hash = "sha256:ef6aaac3ca6cd92904cdd0d83f629a15f18053ec84e6432106f7a4d04ae4f5fb"},
+ {file = "attrs-21.4.0-py2.py3-none-any.whl", hash = "sha256:2d27e3784d7a565d36ab851fe94887c5eccd6a463168875832a1be79c82828b4"},
+ {file = "attrs-21.4.0.tar.gz", hash = "sha256:626ba8234211db98e869df76230a137c4c40a12d72445c45d5f5b716f076e2fd"},
]
boto3 = [
- {file = "boto3-1.18.21-py3-none-any.whl", hash = "sha256:59b6e8e79b2114e21388288a06a004f2a9378b1e0fc58466a35da8fb74fe2dd8"},
- {file = "boto3-1.18.21.tar.gz", hash = "sha256:00748c760dc30be61c6db4b092718f6a9f8d27c767da0e232695a65adb75cde8"},
+ {file = "boto3-1.21.42-py3-none-any.whl", hash = "sha256:895fb88c69be78f82cfee58a79c97a3ad8d4a2a1209041a411d7d6b9fc5393e4"},
+ {file = "boto3-1.21.42.tar.gz", hash = "sha256:bcb541175a7d190dd919a0af0e807ee6e9d26f135551e741b10d94343f2d7588"},
]
botocore = [
- {file = "botocore-1.21.21-py3-none-any.whl", hash = "sha256:fa5ac13829d24fcdd385e82c3b6d78e22d93f427cca8dac38158cae84a8cc2f5"},
- {file = "botocore-1.21.21.tar.gz", hash = "sha256:12cfe74b0a5c44afb34bdd86c1f8ad74bc2ad9ec168eaed9040ef70cb3db944f"},
+ {file = "botocore-1.24.42-py3-none-any.whl", hash = "sha256:14aee41c8bf59d2dd2d89e8751fa37d3c95dcb92707d1966aa02697e914c1417"},
+ {file = "botocore-1.24.42.tar.gz", hash = "sha256:a2baa9484bbaee96ef312c049b8e360badcab58329e487b57567644a571b5f4a"},
]
c7n = []
cachetools = [
- {file = "cachetools-4.2.2-py3-none-any.whl", hash = "sha256:2cc0b89715337ab6dbba85b5b50effe2b0c74e035d83ee8ed637cf52f12ae001"},
- {file = "cachetools-4.2.2.tar.gz", hash = "sha256:61b5ed1e22a0924aed1d23b478f37e8d52549ff8a961de2909c69bf950020cff"},
+ {file = "cachetools-5.0.0-py3-none-any.whl", hash = "sha256:8fecd4203a38af17928be7b90689d8083603073622229ca7077b72d8e5a976e4"},
+ {file = "cachetools-5.0.0.tar.gz", hash = "sha256:486471dfa8799eb7ec503a8059e263db000cdda20075ce5e48903087f79d5fd6"},
]
certifi = [
- {file = "certifi-2021.5.30-py2.py3-none-any.whl", hash = "sha256:50b1e4f8446b06f41be7dd6338db18e0990601dce795c2b1686458aa7e8fa7d8"},
- {file = "certifi-2021.5.30.tar.gz", hash = "sha256:2bbf76fd432960138b3ef6dda3dde0544f27cbf8546c458e60baf371917ba9ee"},
+ {file = "certifi-2021.10.8-py2.py3-none-any.whl", hash = "sha256:d62a0163eb4c2344ac042ab2bdf75399a71a2d8c7d47eac2e2ee91b9d6339569"},
+ {file = "certifi-2021.10.8.tar.gz", hash = "sha256:78884e7c1d4b00ce3cea67b44566851c4343c120abd683433ce934a68ea58872"},
]
charset-normalizer = [
- {file = "charset-normalizer-2.0.4.tar.gz", hash = "sha256:f23667ebe1084be45f6ae0538e4a5a865206544097e4e8bbcacf42cd02a348f3"},
- {file = "charset_normalizer-2.0.4-py3-none-any.whl", hash = "sha256:0c8911edd15d19223366a194a513099a302055a962bca2cec0f54b8b63175d8b"},
+ {file = "charset-normalizer-2.0.12.tar.gz", hash = "sha256:2857e29ff0d34db842cd7ca3230549d1a697f96ee6d3fb071cfa6c7393832597"},
+ {file = "charset_normalizer-2.0.12-py3-none-any.whl", hash = "sha256:6881edbebdb17b39b4eaaa821b438bf6eddffb4468cf344f09f89def34a8b1df"},
]
colorama = [
{file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"},
{file = "colorama-0.4.4.tar.gz", hash = "sha256:5941b2b48a20143d2267e95b1c2a7603ce057ee39fd88e7329b0c292aa16869b"},
]
+docutils = [
+ {file = "docutils-0.17.1-py2.py3-none-any.whl", hash = "sha256:cf316c8370a737a022b72b56874f6602acf974a37a9fba42ec2876387549fc61"},
+ {file = "docutils-0.17.1.tar.gz", hash = "sha256:686577d2e4c32380bb50cbb22f575ed742d58168cee37e99117a854bcd88f125"},
+]
google-auth = [
- {file = "google-auth-1.34.0.tar.gz", hash = "sha256:f1094088bae046fb06f3d1a3d7df14717e8d959e9105b79c57725bd4e17597a2"},
- {file = "google_auth-1.34.0-py2.py3-none-any.whl", hash = "sha256:bd6aa5916970a823e76ffb3d5c3ad3f0bedafca0a7fa53bc15149ab21cb71e05"},
+ {file = "google-auth-2.6.5.tar.gz", hash = "sha256:04e224f241c0566477bb35a8a93be8c635210de743bde454d49393cfb605266d"},
+ {file = "google_auth-2.6.5-py2.py3-none-any.whl", hash = "sha256:9a88ee548f6fd49467e2e443dfbfe10344e5a270629a137a3a0b3437ec6b02a6"},
]
idna = [
- {file = "idna-3.2-py3-none-any.whl", hash = "sha256:14475042e284991034cb48e06f6851428fb14c4dc953acd9be9a5e95c7b6dd7a"},
- {file = "idna-3.2.tar.gz", hash = "sha256:467fbad99067910785144ce333826c71fb0e63a425657295239737f7ecd125f3"},
+ {file = "idna-3.3-py3-none-any.whl", hash = "sha256:84d9dd047ffa80596e0f246e2eab0b391788b0503584e8945f2368256d2735ff"},
+ {file = "idna-3.3.tar.gz", hash = "sha256:9d643ff0a55b762d5cdb124b8eaa99c66322e2157b69160bc32796e824360e6d"},
]
importlib-metadata = [
- {file = "importlib_metadata-4.6.4-py3-none-any.whl", hash = "sha256:ed5157fef23a4bc4594615a0dd8eba94b2bb36bf2a343fa3d8bb2fa0a62a99d5"},
- {file = "importlib_metadata-4.6.4.tar.gz", hash = "sha256:7b30a78db2922d78a6f47fb30683156a14f3c6aa5cc23f77cc8967e9ab2d002f"},
+ {file = "importlib_metadata-4.11.3-py3-none-any.whl", hash = "sha256:1208431ca90a8cca1a6b8af391bb53c1a2db74e5d1cef6ddced95d4b2062edc6"},
+ {file = "importlib_metadata-4.11.3.tar.gz", hash = "sha256:ea4c597ebf37142f827b8f39299579e31685c31d3a438b59f469406afd0f2539"},
+]
+importlib-resources = [
+ {file = "importlib_resources-5.7.1-py3-none-any.whl", hash = "sha256:e447dc01619b1e951286f3929be820029d48c75eb25d265c28b92a16548212b8"},
+ {file = "importlib_resources-5.7.1.tar.gz", hash = "sha256:b6062987dfc51f0fcb809187cffbd60f35df7acb4589091f154214af6d0d49d3"},
]
iniconfig = [
{file = "iniconfig-1.1.1-py2.py3-none-any.whl", hash = "sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3"},
{file = "iniconfig-1.1.1.tar.gz", hash = "sha256:bc3af051d7d14b2ee5ef9969666def0cd1a000e121eaea580d4a313df4b37f32"},
]
jmespath = [
- {file = "jmespath-0.10.0-py2.py3-none-any.whl", hash = "sha256:cdf6525904cc597730141d61b36f2e4b8ecc257c420fa2f4549bac2c2d0cb72f"},
- {file = "jmespath-0.10.0.tar.gz", hash = "sha256:b85d0567b8666149a93172712e68920734333c0ce7e89b78b3e987f71e5ed4f9"},
+ {file = "jmespath-1.0.0-py3-none-any.whl", hash = "sha256:e8dcd576ed616f14ec02eed0005c85973b5890083313860136657e24784e4c04"},
+ {file = "jmespath-1.0.0.tar.gz", hash = "sha256:a490e280edd1f57d6de88636992d05b71e97d69a26a19f058ecf7d304474bf5e"},
]
jsonschema = [
- {file = "jsonschema-3.2.0-py2.py3-none-any.whl", hash = "sha256:4e5b3cf8216f577bee9ce139cbe72eca3ea4f292ec60928ff24758ce626cd163"},
- {file = "jsonschema-3.2.0.tar.gz", hash = "sha256:c8a85b28d377cc7737e46e2d9f2b4f44ee3c0e1deac6bf46ddefc7187d30797a"},
+ {file = "jsonschema-4.4.0-py3-none-any.whl", hash = "sha256:77281a1f71684953ee8b3d488371b162419767973789272434bbc3f29d9c8823"},
+ {file = "jsonschema-4.4.0.tar.gz", hash = "sha256:636694eb41b3535ed608fe04129f26542b59ed99808b4f688aa32dcf55317a83"},
]
kubernetes = [
{file = "kubernetes-10.0.1-py2.py3-none-any.whl", hash = "sha256:a6dee02a1b39ea4bb9c4c2cc415ea0ada33d8ea0a920f7d4fb6d166989dcac01"},
{file = "kubernetes-10.0.1.tar.gz", hash = "sha256:3770a496663396ad1def665eeadb947b3f45217a08b64b10c01a57e981ac8592"},
]
multidict = [
- {file = "multidict-5.1.0-cp36-cp36m-macosx_10_14_x86_64.whl", hash = "sha256:b7993704f1a4b204e71debe6095150d43b2ee6150fa4f44d6d966ec356a8d61f"},
- {file = "multidict-5.1.0-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:9dd6e9b1a913d096ac95d0399bd737e00f2af1e1594a787e00f7975778c8b2bf"},
- {file = "multidict-5.1.0-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:f21756997ad8ef815d8ef3d34edd98804ab5ea337feedcd62fb52d22bf531281"},
- {file = "multidict-5.1.0-cp36-cp36m-manylinux2014_i686.whl", hash = "sha256:1ab820665e67373de5802acae069a6a05567ae234ddb129f31d290fc3d1aa56d"},
- {file = "multidict-5.1.0-cp36-cp36m-manylinux2014_ppc64le.whl", hash = "sha256:9436dc58c123f07b230383083855593550c4d301d2532045a17ccf6eca505f6d"},
- {file = "multidict-5.1.0-cp36-cp36m-manylinux2014_s390x.whl", hash = "sha256:830f57206cc96ed0ccf68304141fec9481a096c4d2e2831f311bde1c404401da"},
- {file = "multidict-5.1.0-cp36-cp36m-manylinux2014_x86_64.whl", hash = "sha256:2e68965192c4ea61fff1b81c14ff712fc7dc15d2bd120602e4a3494ea6584224"},
- {file = "multidict-5.1.0-cp36-cp36m-win32.whl", hash = "sha256:2f1a132f1c88724674271d636e6b7351477c27722f2ed789f719f9e3545a3d26"},
- {file = "multidict-5.1.0-cp36-cp36m-win_amd64.whl", hash = "sha256:3a4f32116f8f72ecf2a29dabfb27b23ab7cdc0ba807e8459e59a93a9be9506f6"},
- {file = "multidict-5.1.0-cp37-cp37m-macosx_10_14_x86_64.whl", hash = "sha256:46c73e09ad374a6d876c599f2328161bcd95e280f84d2060cf57991dec5cfe76"},
- {file = "multidict-5.1.0-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:018132dbd8688c7a69ad89c4a3f39ea2f9f33302ebe567a879da8f4ca73f0d0a"},
- {file = "multidict-5.1.0-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:4b186eb7d6ae7c06eb4392411189469e6a820da81447f46c0072a41c748ab73f"},
- {file = "multidict-5.1.0-cp37-cp37m-manylinux2014_i686.whl", hash = "sha256:3a041b76d13706b7fff23b9fc83117c7b8fe8d5fe9e6be45eee72b9baa75f348"},
- {file = "multidict-5.1.0-cp37-cp37m-manylinux2014_ppc64le.whl", hash = "sha256:051012ccee979b2b06be928a6150d237aec75dd6bf2d1eeeb190baf2b05abc93"},
- {file = "multidict-5.1.0-cp37-cp37m-manylinux2014_s390x.whl", hash = "sha256:6a4d5ce640e37b0efcc8441caeea8f43a06addace2335bd11151bc02d2ee31f9"},
- {file = "multidict-5.1.0-cp37-cp37m-manylinux2014_x86_64.whl", hash = "sha256:5cf3443199b83ed9e955f511b5b241fd3ae004e3cb81c58ec10f4fe47c7dce37"},
- {file = "multidict-5.1.0-cp37-cp37m-win32.whl", hash = "sha256:f200755768dc19c6f4e2b672421e0ebb3dd54c38d5a4f262b872d8cfcc9e93b5"},
- {file = "multidict-5.1.0-cp37-cp37m-win_amd64.whl", hash = "sha256:05c20b68e512166fddba59a918773ba002fdd77800cad9f55b59790030bab632"},
- {file = "multidict-5.1.0-cp38-cp38-macosx_10_14_x86_64.whl", hash = "sha256:54fd1e83a184e19c598d5e70ba508196fd0bbdd676ce159feb412a4a6664f952"},
- {file = "multidict-5.1.0-cp38-cp38-manylinux1_i686.whl", hash = "sha256:0e3c84e6c67eba89c2dbcee08504ba8644ab4284863452450520dad8f1e89b79"},
- {file = "multidict-5.1.0-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:dc862056f76443a0db4509116c5cd480fe1b6a2d45512a653f9a855cc0517456"},
- {file = "multidict-5.1.0-cp38-cp38-manylinux2014_i686.whl", hash = "sha256:0e929169f9c090dae0646a011c8b058e5e5fb391466016b39d21745b48817fd7"},
- {file = "multidict-5.1.0-cp38-cp38-manylinux2014_ppc64le.whl", hash = "sha256:d81eddcb12d608cc08081fa88d046c78afb1bf8107e6feab5d43503fea74a635"},
- {file = "multidict-5.1.0-cp38-cp38-manylinux2014_s390x.whl", hash = "sha256:585fd452dd7782130d112f7ddf3473ffdd521414674c33876187e101b588738a"},
- {file = "multidict-5.1.0-cp38-cp38-manylinux2014_x86_64.whl", hash = "sha256:37e5438e1c78931df5d3c0c78ae049092877e5e9c02dd1ff5abb9cf27a5914ea"},
- {file = "multidict-5.1.0-cp38-cp38-win32.whl", hash = "sha256:07b42215124aedecc6083f1ce6b7e5ec5b50047afa701f3442054373a6deb656"},
- {file = "multidict-5.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:929006d3c2d923788ba153ad0de8ed2e5ed39fdbe8e7be21e2f22ed06c6783d3"},
- {file = "multidict-5.1.0-cp39-cp39-macosx_10_14_x86_64.whl", hash = "sha256:b797515be8743b771aa868f83563f789bbd4b236659ba52243b735d80b29ed93"},
- {file = "multidict-5.1.0-cp39-cp39-manylinux1_i686.whl", hash = "sha256:d5c65bdf4484872c4af3150aeebe101ba560dcfb34488d9a8ff8dbcd21079647"},
- {file = "multidict-5.1.0-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:b47a43177a5e65b771b80db71e7be76c0ba23cc8aa73eeeb089ed5219cdbe27d"},
- {file = "multidict-5.1.0-cp39-cp39-manylinux2014_i686.whl", hash = "sha256:806068d4f86cb06af37cd65821554f98240a19ce646d3cd24e1c33587f313eb8"},
- {file = "multidict-5.1.0-cp39-cp39-manylinux2014_ppc64le.whl", hash = "sha256:46dd362c2f045095c920162e9307de5ffd0a1bfbba0a6e990b344366f55a30c1"},
- {file = "multidict-5.1.0-cp39-cp39-manylinux2014_s390x.whl", hash = "sha256:ace010325c787c378afd7f7c1ac66b26313b3344628652eacd149bdd23c68841"},
- {file = "multidict-5.1.0-cp39-cp39-manylinux2014_x86_64.whl", hash = "sha256:ecc771ab628ea281517e24fd2c52e8f31c41e66652d07599ad8818abaad38cda"},
- {file = "multidict-5.1.0-cp39-cp39-win32.whl", hash = "sha256:fc13a9524bc18b6fb6e0dbec3533ba0496bbed167c56d0aabefd965584557d80"},
- {file = "multidict-5.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:7df80d07818b385f3129180369079bd6934cf70469f99daaebfac89dca288359"},
- {file = "multidict-5.1.0.tar.gz", hash = "sha256:25b4e5f22d3a37ddf3effc0710ba692cfc792c2b9edfb9c05aefe823256e84d5"},
+ {file = "multidict-6.0.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:0b9e95a740109c6047602f4db4da9949e6c5945cefbad34a1299775ddc9a62e2"},
+ {file = "multidict-6.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ac0e27844758d7177989ce406acc6a83c16ed4524ebc363c1f748cba184d89d3"},
+ {file = "multidict-6.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:041b81a5f6b38244b34dc18c7b6aba91f9cdaf854d9a39e5ff0b58e2b5773b9c"},
+ {file = "multidict-6.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5fdda29a3c7e76a064f2477c9aab1ba96fd94e02e386f1e665bca1807fc5386f"},
+ {file = "multidict-6.0.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3368bf2398b0e0fcbf46d85795adc4c259299fec50c1416d0f77c0a843a3eed9"},
+ {file = "multidict-6.0.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f4f052ee022928d34fe1f4d2bc743f32609fb79ed9c49a1710a5ad6b2198db20"},
+ {file = "multidict-6.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:225383a6603c086e6cef0f2f05564acb4f4d5f019a4e3e983f572b8530f70c88"},
+ {file = "multidict-6.0.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:50bd442726e288e884f7be9071016c15a8742eb689a593a0cac49ea093eef0a7"},
+ {file = "multidict-6.0.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:47e6a7e923e9cada7c139531feac59448f1f47727a79076c0b1ee80274cd8eee"},
+ {file = "multidict-6.0.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:0556a1d4ea2d949efe5fd76a09b4a82e3a4a30700553a6725535098d8d9fb672"},
+ {file = "multidict-6.0.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:626fe10ac87851f4cffecee161fc6f8f9853f0f6f1035b59337a51d29ff3b4f9"},
+ {file = "multidict-6.0.2-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:8064b7c6f0af936a741ea1efd18690bacfbae4078c0c385d7c3f611d11f0cf87"},
+ {file = "multidict-6.0.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:2d36e929d7f6a16d4eb11b250719c39560dd70545356365b494249e2186bc389"},
+ {file = "multidict-6.0.2-cp310-cp310-win32.whl", hash = "sha256:fcb91630817aa8b9bc4a74023e4198480587269c272c58b3279875ed7235c293"},
+ {file = "multidict-6.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:8cbf0132f3de7cc6c6ce00147cc78e6439ea736cee6bca4f068bcf892b0fd658"},
+ {file = "multidict-6.0.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:05f6949d6169878a03e607a21e3b862eaf8e356590e8bdae4227eedadacf6e51"},
+ {file = "multidict-6.0.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e2c2e459f7050aeb7c1b1276763364884595d47000c1cddb51764c0d8976e608"},
+ {file = "multidict-6.0.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d0509e469d48940147e1235d994cd849a8f8195e0bca65f8f5439c56e17872a3"},
+ {file = "multidict-6.0.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:514fe2b8d750d6cdb4712346a2c5084a80220821a3e91f3f71eec11cf8d28fd4"},
+ {file = "multidict-6.0.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:19adcfc2a7197cdc3987044e3f415168fc5dc1f720c932eb1ef4f71a2067e08b"},
+ {file = "multidict-6.0.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b9d153e7f1f9ba0b23ad1568b3b9e17301e23b042c23870f9ee0522dc5cc79e8"},
+ {file = "multidict-6.0.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:aef9cc3d9c7d63d924adac329c33835e0243b5052a6dfcbf7732a921c6e918ba"},
+ {file = "multidict-6.0.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:4571f1beddff25f3e925eea34268422622963cd8dc395bb8778eb28418248e43"},
+ {file = "multidict-6.0.2-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:d48b8ee1d4068561ce8033d2c344cf5232cb29ee1a0206a7b828c79cbc5982b8"},
+ {file = "multidict-6.0.2-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:45183c96ddf61bf96d2684d9fbaf6f3564d86b34cb125761f9a0ef9e36c1d55b"},
+ {file = "multidict-6.0.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:75bdf08716edde767b09e76829db8c1e5ca9d8bb0a8d4bd94ae1eafe3dac5e15"},
+ {file = "multidict-6.0.2-cp37-cp37m-win32.whl", hash = "sha256:a45e1135cb07086833ce969555df39149680e5471c04dfd6a915abd2fc3f6dbc"},
+ {file = "multidict-6.0.2-cp37-cp37m-win_amd64.whl", hash = "sha256:6f3cdef8a247d1eafa649085812f8a310e728bdf3900ff6c434eafb2d443b23a"},
+ {file = "multidict-6.0.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:0327292e745a880459ef71be14e709aaea2f783f3537588fb4ed09b6c01bca60"},
+ {file = "multidict-6.0.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:e875b6086e325bab7e680e4316d667fc0e5e174bb5611eb16b3ea121c8951b86"},
+ {file = "multidict-6.0.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:feea820722e69451743a3d56ad74948b68bf456984d63c1a92e8347b7b88452d"},
+ {file = "multidict-6.0.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9cc57c68cb9139c7cd6fc39f211b02198e69fb90ce4bc4a094cf5fe0d20fd8b0"},
+ {file = "multidict-6.0.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:497988d6b6ec6ed6f87030ec03280b696ca47dbf0648045e4e1d28b80346560d"},
+ {file = "multidict-6.0.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:89171b2c769e03a953d5969b2f272efa931426355b6c0cb508022976a17fd376"},
+ {file = "multidict-6.0.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:684133b1e1fe91eda8fa7447f137c9490a064c6b7f392aa857bba83a28cfb693"},
+ {file = "multidict-6.0.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fd9fc9c4849a07f3635ccffa895d57abce554b467d611a5009ba4f39b78a8849"},
+ {file = "multidict-6.0.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:e07c8e79d6e6fd37b42f3250dba122053fddb319e84b55dd3a8d6446e1a7ee49"},
+ {file = "multidict-6.0.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:4070613ea2227da2bfb2c35a6041e4371b0af6b0be57f424fe2318b42a748516"},
+ {file = "multidict-6.0.2-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:47fbeedbf94bed6547d3aa632075d804867a352d86688c04e606971595460227"},
+ {file = "multidict-6.0.2-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:5774d9218d77befa7b70d836004a768fb9aa4fdb53c97498f4d8d3f67bb9cfa9"},
+ {file = "multidict-6.0.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:2957489cba47c2539a8eb7ab32ff49101439ccf78eab724c828c1a54ff3ff98d"},
+ {file = "multidict-6.0.2-cp38-cp38-win32.whl", hash = "sha256:e5b20e9599ba74391ca0cfbd7b328fcc20976823ba19bc573983a25b32e92b57"},
+ {file = "multidict-6.0.2-cp38-cp38-win_amd64.whl", hash = "sha256:8004dca28e15b86d1b1372515f32eb6f814bdf6f00952699bdeb541691091f96"},
+ {file = "multidict-6.0.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:2e4a0785b84fb59e43c18a015ffc575ba93f7d1dbd272b4cdad9f5134b8a006c"},
+ {file = "multidict-6.0.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6701bf8a5d03a43375909ac91b6980aea74b0f5402fbe9428fc3f6edf5d9677e"},
+ {file = "multidict-6.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a007b1638e148c3cfb6bf0bdc4f82776cef0ac487191d093cdc316905e504071"},
+ {file = "multidict-6.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:07a017cfa00c9890011628eab2503bee5872f27144936a52eaab449be5eaf032"},
+ {file = "multidict-6.0.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c207fff63adcdf5a485969131dc70e4b194327666b7e8a87a97fbc4fd80a53b2"},
+ {file = "multidict-6.0.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:373ba9d1d061c76462d74e7de1c0c8e267e9791ee8cfefcf6b0b2495762c370c"},
+ {file = "multidict-6.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bfba7c6d5d7c9099ba21f84662b037a0ffd4a5e6b26ac07d19e423e6fdf965a9"},
+ {file = "multidict-6.0.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:19d9bad105dfb34eb539c97b132057a4e709919ec4dd883ece5838bcbf262b80"},
+ {file = "multidict-6.0.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:de989b195c3d636ba000ee4281cd03bb1234635b124bf4cd89eeee9ca8fcb09d"},
+ {file = "multidict-6.0.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:7c40b7bbece294ae3a87c1bc2abff0ff9beef41d14188cda94ada7bcea99b0fb"},
+ {file = "multidict-6.0.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:d16cce709ebfadc91278a1c005e3c17dd5f71f5098bfae1035149785ea6e9c68"},
+ {file = "multidict-6.0.2-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:a2c34a93e1d2aa35fbf1485e5010337c72c6791407d03aa5f4eed920343dd360"},
+ {file = "multidict-6.0.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:feba80698173761cddd814fa22e88b0661e98cb810f9f986c54aa34d281e4937"},
+ {file = "multidict-6.0.2-cp39-cp39-win32.whl", hash = "sha256:23b616fdc3c74c9fe01d76ce0d1ce872d2d396d8fa8e4899398ad64fb5aa214a"},
+ {file = "multidict-6.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:4bae31803d708f6f15fd98be6a6ac0b6958fcf68fda3c77a048a4f9073704aae"},
+ {file = "multidict-6.0.2.tar.gz", hash = "sha256:5ff3bd75f38e4c43f1f470f2df7a4d430b821c4ce22be384e1459cb57d6bb013"},
]
oauthlib = [
- {file = "oauthlib-3.1.1-py2.py3-none-any.whl", hash = "sha256:42bf6354c2ed8c6acb54d971fce6f88193d97297e18602a3a886603f9d7730cc"},
- {file = "oauthlib-3.1.1.tar.gz", hash = "sha256:8f0215fcc533dd8dd1bee6f4c412d4f0cd7297307d43ac61666389e3bc3198a3"},
+ {file = "oauthlib-3.2.0-py3-none-any.whl", hash = "sha256:6db33440354787f9b7f3a6dbd4febf5d0f93758354060e802f6c06cb493022fe"},
+ {file = "oauthlib-3.2.0.tar.gz", hash = "sha256:23a8208d75b902797ea29fd31fa80a15ed9dc2c6c16fe73f5d346f83f6fa27a2"},
]
packaging = [
- {file = "packaging-21.0-py3-none-any.whl", hash = "sha256:c86254f9220d55e31cc94d69bade760f0847da8000def4dfe1c6b872fd14ff14"},
- {file = "packaging-21.0.tar.gz", hash = "sha256:7dc96269f53a4ccec5c0670940a4281106dd0bb343f47b7471f779df49c2fbe7"},
+ {file = "packaging-21.3-py3-none-any.whl", hash = "sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522"},
+ {file = "packaging-21.3.tar.gz", hash = "sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb"},
]
pluggy = [
- {file = "pluggy-0.13.1-py2.py3-none-any.whl", hash = "sha256:966c145cd83c96502c3c3868f50408687b38434af77734af1e9ca461a4081d2d"},
- {file = "pluggy-0.13.1.tar.gz", hash = "sha256:15b2acde666561e1298d71b523007ed7364de07029219b604cf808bfa1c765b0"},
+ {file = "pluggy-1.0.0-py2.py3-none-any.whl", hash = "sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3"},
+ {file = "pluggy-1.0.0.tar.gz", hash = "sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159"},
]
py = [
- {file = "py-1.10.0-py2.py3-none-any.whl", hash = "sha256:3b80836aa6d1feeaa108e046da6423ab8f6ceda6468545ae8d02d9d58d18818a"},
- {file = "py-1.10.0.tar.gz", hash = "sha256:21b81bda15b66ef5e1a777a21c4dcd9c20ad3efd0b3f817e7a809035269e1bd3"},
+ {file = "py-1.11.0-py2.py3-none-any.whl", hash = "sha256:607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378"},
+ {file = "py-1.11.0.tar.gz", hash = "sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719"},
]
pyasn1 = [
{file = "pyasn1-0.4.8-py2.4.egg", hash = "sha256:fec3e9d8e36808a28efb59b489e4528c10ad0f480e57dcc32b4de5c9d8c9fdf3"},
@@ -675,79 +735,90 @@ pyasn1-modules = [
{file = "pyasn1_modules-0.2.8-py3.7.egg", hash = "sha256:c29a5e5cc7a3f05926aff34e097e84f8589cd790ce0ed41b67aed6857b26aafd"},
]
pyparsing = [
- {file = "pyparsing-2.4.7-py2.py3-none-any.whl", hash = "sha256:ef9d7589ef3c200abe66653d3f1ab1033c3c419ae9b9bdb1240a85b024efc88b"},
- {file = "pyparsing-2.4.7.tar.gz", hash = "sha256:c203ec8783bf771a155b207279b9bccb8dea02d8f0c9e5f8ead507bc3246ecc1"},
+ {file = "pyparsing-3.0.8-py3-none-any.whl", hash = "sha256:ef7b523f6356f763771559412c0d7134753f037822dad1b16945b7b846f7ad06"},
+ {file = "pyparsing-3.0.8.tar.gz", hash = "sha256:7bf433498c016c4314268d95df76c81b842a4cb2b276fa3312cfb1e1d85f6954"},
]
pyrsistent = [
- {file = "pyrsistent-0.18.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:f4c8cabb46ff8e5d61f56a037974228e978f26bfefce4f61a4b1ac0ba7a2ab72"},
- {file = "pyrsistent-0.18.0-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:da6e5e818d18459fa46fac0a4a4e543507fe1110e808101277c5a2b5bab0cd2d"},
- {file = "pyrsistent-0.18.0-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:5e4395bbf841693eaebaa5bb5c8f5cdbb1d139e07c975c682ec4e4f8126e03d2"},
- {file = "pyrsistent-0.18.0-cp36-cp36m-win32.whl", hash = "sha256:527be2bfa8dc80f6f8ddd65242ba476a6c4fb4e3aedbf281dfbac1b1ed4165b1"},
- {file = "pyrsistent-0.18.0-cp36-cp36m-win_amd64.whl", hash = "sha256:2aaf19dc8ce517a8653746d98e962ef480ff34b6bc563fc067be6401ffb457c7"},
- {file = "pyrsistent-0.18.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:58a70d93fb79dc585b21f9d72487b929a6fe58da0754fa4cb9f279bb92369396"},
- {file = "pyrsistent-0.18.0-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:4916c10896721e472ee12c95cdc2891ce5890898d2f9907b1b4ae0f53588b710"},
- {file = "pyrsistent-0.18.0-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:73ff61b1411e3fb0ba144b8f08d6749749775fe89688093e1efef9839d2dcc35"},
- {file = "pyrsistent-0.18.0-cp37-cp37m-win32.whl", hash = "sha256:b29b869cf58412ca5738d23691e96d8aff535e17390128a1a52717c9a109da4f"},
- {file = "pyrsistent-0.18.0-cp37-cp37m-win_amd64.whl", hash = "sha256:097b96f129dd36a8c9e33594e7ebb151b1515eb52cceb08474c10a5479e799f2"},
- {file = "pyrsistent-0.18.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:772e94c2c6864f2cd2ffbe58bb3bdefbe2a32afa0acb1a77e472aac831f83427"},
- {file = "pyrsistent-0.18.0-cp38-cp38-manylinux1_i686.whl", hash = "sha256:c1a9ff320fa699337e05edcaae79ef8c2880b52720bc031b219e5b5008ebbdef"},
- {file = "pyrsistent-0.18.0-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:cd3caef37a415fd0dae6148a1b6957a8c5f275a62cca02e18474608cb263640c"},
- {file = "pyrsistent-0.18.0-cp38-cp38-win32.whl", hash = "sha256:e79d94ca58fcafef6395f6352383fa1a76922268fa02caa2272fff501c2fdc78"},
- {file = "pyrsistent-0.18.0-cp38-cp38-win_amd64.whl", hash = "sha256:a0c772d791c38bbc77be659af29bb14c38ced151433592e326361610250c605b"},
- {file = "pyrsistent-0.18.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d5ec194c9c573aafaceebf05fc400656722793dac57f254cd4741f3c27ae57b4"},
- {file = "pyrsistent-0.18.0-cp39-cp39-manylinux1_i686.whl", hash = "sha256:6b5eed00e597b5b5773b4ca30bd48a5774ef1e96f2a45d105db5b4ebb4bca680"},
- {file = "pyrsistent-0.18.0-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:48578680353f41dca1ca3dc48629fb77dfc745128b56fc01096b2530c13fd426"},
- {file = "pyrsistent-0.18.0-cp39-cp39-win32.whl", hash = "sha256:f3ef98d7b76da5eb19c37fda834d50262ff9167c65658d1d8f974d2e4d90676b"},
- {file = "pyrsistent-0.18.0-cp39-cp39-win_amd64.whl", hash = "sha256:404e1f1d254d314d55adb8d87f4f465c8693d6f902f67eb6ef5b4526dc58e6ea"},
- {file = "pyrsistent-0.18.0.tar.gz", hash = "sha256:773c781216f8c2900b42a7b638d5b517bb134ae1acbebe4d1e8f1f41ea60eb4b"},
+ {file = "pyrsistent-0.18.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:df46c854f490f81210870e509818b729db4488e1f30f2a1ce1698b2295a878d1"},
+ {file = "pyrsistent-0.18.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d45866ececf4a5fff8742c25722da6d4c9e180daa7b405dc0a2a2790d668c26"},
+ {file = "pyrsistent-0.18.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4ed6784ceac462a7d6fcb7e9b663e93b9a6fb373b7f43594f9ff68875788e01e"},
+ {file = "pyrsistent-0.18.1-cp310-cp310-win32.whl", hash = "sha256:e4f3149fd5eb9b285d6bfb54d2e5173f6a116fe19172686797c056672689daf6"},
+ {file = "pyrsistent-0.18.1-cp310-cp310-win_amd64.whl", hash = "sha256:636ce2dc235046ccd3d8c56a7ad54e99d5c1cd0ef07d9ae847306c91d11b5fec"},
+ {file = "pyrsistent-0.18.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:e92a52c166426efbe0d1ec1332ee9119b6d32fc1f0bbfd55d5c1088070e7fc1b"},
+ {file = "pyrsistent-0.18.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d7a096646eab884bf8bed965bad63ea327e0d0c38989fc83c5ea7b8a87037bfc"},
+ {file = "pyrsistent-0.18.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cdfd2c361b8a8e5d9499b9082b501c452ade8bbf42aef97ea04854f4a3f43b22"},
+ {file = "pyrsistent-0.18.1-cp37-cp37m-win32.whl", hash = "sha256:7ec335fc998faa4febe75cc5268a9eac0478b3f681602c1f27befaf2a1abe1d8"},
+ {file = "pyrsistent-0.18.1-cp37-cp37m-win_amd64.whl", hash = "sha256:6455fc599df93d1f60e1c5c4fe471499f08d190d57eca040c0ea182301321286"},
+ {file = "pyrsistent-0.18.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:fd8da6d0124efa2f67d86fa70c851022f87c98e205f0594e1fae044e7119a5a6"},
+ {file = "pyrsistent-0.18.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7bfe2388663fd18bd8ce7db2c91c7400bf3e1a9e8bd7d63bf7e77d39051b85ec"},
+ {file = "pyrsistent-0.18.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0e3e1fcc45199df76053026a51cc59ab2ea3fc7c094c6627e93b7b44cdae2c8c"},
+ {file = "pyrsistent-0.18.1-cp38-cp38-win32.whl", hash = "sha256:b568f35ad53a7b07ed9b1b2bae09eb15cdd671a5ba5d2c66caee40dbf91c68ca"},
+ {file = "pyrsistent-0.18.1-cp38-cp38-win_amd64.whl", hash = "sha256:d1b96547410f76078eaf66d282ddca2e4baae8964364abb4f4dcdde855cd123a"},
+ {file = "pyrsistent-0.18.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:f87cc2863ef33c709e237d4b5f4502a62a00fab450c9e020892e8e2ede5847f5"},
+ {file = "pyrsistent-0.18.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6bc66318fb7ee012071b2792024564973ecc80e9522842eb4e17743604b5e045"},
+ {file = "pyrsistent-0.18.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:914474c9f1d93080338ace89cb2acee74f4f666fb0424896fcfb8d86058bf17c"},
+ {file = "pyrsistent-0.18.1-cp39-cp39-win32.whl", hash = "sha256:1b34eedd6812bf4d33814fca1b66005805d3640ce53140ab8bbb1e2651b0d9bc"},
+ {file = "pyrsistent-0.18.1-cp39-cp39-win_amd64.whl", hash = "sha256:e24a828f57e0c337c8d8bb9f6b12f09dfdf0273da25fda9e314f0b684b415a07"},
+ {file = "pyrsistent-0.18.1.tar.gz", hash = "sha256:d4d61f8b993a7255ba714df3aca52700f8125289f84f704cf80916517c46eb96"},
]
pytest = [
- {file = "pytest-6.2.4-py3-none-any.whl", hash = "sha256:91ef2131a9bd6be8f76f1f08eac5c5317221d6ad1e143ae03894b862e8976890"},
- {file = "pytest-6.2.4.tar.gz", hash = "sha256:50bcad0a0b9c5a72c8e4e7c9855a3ad496ca6a881a3641b4260605450772c54b"},
+ {file = "pytest-6.2.5-py3-none-any.whl", hash = "sha256:7310f8d27bc79ced999e760ca304d69f6ba6c6649c0b60fb0e04a4a77cacc134"},
+ {file = "pytest-6.2.5.tar.gz", hash = "sha256:131b36680866a76e6781d13f101efb86cf674ebb9762eb70d3082b6f29889e89"},
]
python-dateutil = [
{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"},
]
pyyaml = [
- {file = "PyYAML-5.4.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:3b2b1824fe7112845700f815ff6a489360226a5609b96ec2190a45e62a9fc922"},
- {file = "PyYAML-5.4.1-cp27-cp27m-win32.whl", hash = "sha256:129def1b7c1bf22faffd67b8f3724645203b79d8f4cc81f674654d9902cb4393"},
- {file = "PyYAML-5.4.1-cp27-cp27m-win_amd64.whl", hash = "sha256:4465124ef1b18d9ace298060f4eccc64b0850899ac4ac53294547536533800c8"},
- {file = "PyYAML-5.4.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:bb4191dfc9306777bc594117aee052446b3fa88737cd13b7188d0e7aa8162185"},
- {file = "PyYAML-5.4.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:6c78645d400265a062508ae399b60b8c167bf003db364ecb26dcab2bda048253"},
- {file = "PyYAML-5.4.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:4e0583d24c881e14342eaf4ec5fbc97f934b999a6828693a99157fde912540cc"},
- {file = "PyYAML-5.4.1-cp36-cp36m-win32.whl", hash = "sha256:3bd0e463264cf257d1ffd2e40223b197271046d09dadf73a0fe82b9c1fc385a5"},
- {file = "PyYAML-5.4.1-cp36-cp36m-win_amd64.whl", hash = "sha256:e4fac90784481d221a8e4b1162afa7c47ed953be40d31ab4629ae917510051df"},
- {file = "PyYAML-5.4.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:5accb17103e43963b80e6f837831f38d314a0495500067cb25afab2e8d7a4018"},
- {file = "PyYAML-5.4.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:e1d4970ea66be07ae37a3c2e48b5ec63f7ba6804bdddfdbd3cfd954d25a82e63"},
- {file = "PyYAML-5.4.1-cp37-cp37m-win32.whl", hash = "sha256:dd5de0646207f053eb0d6c74ae45ba98c3395a571a2891858e87df7c9b9bd51b"},
- {file = "PyYAML-5.4.1-cp37-cp37m-win_amd64.whl", hash = "sha256:08682f6b72c722394747bddaf0aa62277e02557c0fd1c42cb853016a38f8dedf"},
- {file = "PyYAML-5.4.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d2d9808ea7b4af864f35ea216be506ecec180628aced0704e34aca0b040ffe46"},
- {file = "PyYAML-5.4.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:8c1be557ee92a20f184922c7b6424e8ab6691788e6d86137c5d93c1a6ec1b8fb"},
- {file = "PyYAML-5.4.1-cp38-cp38-win32.whl", hash = "sha256:fa5ae20527d8e831e8230cbffd9f8fe952815b2b7dae6ffec25318803a7528fc"},
- {file = "PyYAML-5.4.1-cp38-cp38-win_amd64.whl", hash = "sha256:0f5f5786c0e09baddcd8b4b45f20a7b5d61a7e7e99846e3c799b05c7c53fa696"},
- {file = "PyYAML-5.4.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:294db365efa064d00b8d1ef65d8ea2c3426ac366c0c4368d930bf1c5fb497f77"},
- {file = "PyYAML-5.4.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:74c1485f7707cf707a7aef42ef6322b8f97921bd89be2ab6317fd782c2d53183"},
- {file = "PyYAML-5.4.1-cp39-cp39-win32.whl", hash = "sha256:49d4cdd9065b9b6e206d0595fee27a96b5dd22618e7520c33204a4a3239d5b10"},
- {file = "PyYAML-5.4.1-cp39-cp39-win_amd64.whl", hash = "sha256:c20cfa2d49991c8b4147af39859b167664f2ad4561704ee74c1de03318e898db"},
- {file = "PyYAML-5.4.1.tar.gz", hash = "sha256:607774cbba28732bfa802b54baa7484215f530991055bb562efbed5b2f20a45e"},
+ {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"},
+ {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a80a78046a72361de73f8f395f1f1e49f956c6be882eed58505a15f3e430962b"},
+ {file = "PyYAML-6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f84fbc98b019fef2ee9a1cb3ce93e3187a6df0b2538a651bfb890254ba9f90b5"},
+ {file = "PyYAML-6.0-cp310-cp310-win32.whl", hash = "sha256:2cd5df3de48857ed0544b34e2d40e9fac445930039f3cfe4bcc592a1f836d513"},
+ {file = "PyYAML-6.0-cp310-cp310-win_amd64.whl", hash = "sha256:daf496c58a8c52083df09b80c860005194014c3698698d1a57cbcfa182142a3a"},
+ {file = "PyYAML-6.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:897b80890765f037df3403d22bab41627ca8811ae55e9a722fd0392850ec4d86"},
+ {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50602afada6d6cbfad699b0c7bb50d5ccffa7e46a3d738092afddc1f9758427f"},
+ {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:48c346915c114f5fdb3ead70312bd042a953a8ce5c7106d5bfb1a5254e47da92"},
+ {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:98c4d36e99714e55cfbaaee6dd5badbc9a1ec339ebfc3b1f52e293aee6bb71a4"},
+ {file = "PyYAML-6.0-cp36-cp36m-win32.whl", hash = "sha256:0283c35a6a9fbf047493e3a0ce8d79ef5030852c51e9d911a27badfde0605293"},
+ {file = "PyYAML-6.0-cp36-cp36m-win_amd64.whl", hash = "sha256:07751360502caac1c067a8132d150cf3d61339af5691fe9e87803040dbc5db57"},
+ {file = "PyYAML-6.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:819b3830a1543db06c4d4b865e70ded25be52a2e0631ccd2f6a47a2822f2fd7c"},
+ {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:473f9edb243cb1935ab5a084eb238d842fb8f404ed2193a915d1784b5a6b5fc0"},
+ {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0ce82d761c532fe4ec3f87fc45688bdd3a4c1dc5e0b4a19814b9009a29baefd4"},
+ {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:231710d57adfd809ef5d34183b8ed1eeae3f76459c18fb4a0b373ad56bedcdd9"},
+ {file = "PyYAML-6.0-cp37-cp37m-win32.whl", hash = "sha256:c5687b8d43cf58545ade1fe3e055f70eac7a5a1a0bf42824308d868289a95737"},
+ {file = "PyYAML-6.0-cp37-cp37m-win_amd64.whl", hash = "sha256:d15a181d1ecd0d4270dc32edb46f7cb7733c7c508857278d3d378d14d606db2d"},
+ {file = "PyYAML-6.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0b4624f379dab24d3725ffde76559cff63d9ec94e1736b556dacdfebe5ab6d4b"},
+ {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:213c60cd50106436cc818accf5baa1aba61c0189ff610f64f4a3e8c6726218ba"},
+ {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9fa600030013c4de8165339db93d182b9431076eb98eb40ee068700c9c813e34"},
+ {file = "PyYAML-6.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:277a0ef2981ca40581a47093e9e2d13b3f1fbbeffae064c1d21bfceba2030287"},
+ {file = "PyYAML-6.0-cp38-cp38-win32.whl", hash = "sha256:d4eccecf9adf6fbcc6861a38015c2a64f38b9d94838ac1810a9023a0609e1b78"},
+ {file = "PyYAML-6.0-cp38-cp38-win_amd64.whl", hash = "sha256:1e4747bc279b4f613a09eb64bba2ba602d8a6664c6ce6396a4d0cd413a50ce07"},
+ {file = "PyYAML-6.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:055d937d65826939cb044fc8c9b08889e8c743fdc6a32b33e2390f66013e449b"},
+ {file = "PyYAML-6.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e61ceaab6f49fb8bdfaa0f92c4b57bcfbea54c09277b1b4f7ac376bfb7a7c174"},
+ {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d67d839ede4ed1b28a4e8909735fc992a923cdb84e618544973d7dfc71540803"},
+ {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cba8c411ef271aa037d7357a2bc8f9ee8b58b9965831d9e51baf703280dc73d3"},
+ {file = "PyYAML-6.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:40527857252b61eacd1d9af500c3337ba8deb8fc298940291486c465c8b46ec0"},
+ {file = "PyYAML-6.0-cp39-cp39-win32.whl", hash = "sha256:b5b9eccad747aabaaffbc6064800670f0c297e52c12754eb1d976c57e4f74dcb"},
+ {file = "PyYAML-6.0-cp39-cp39-win_amd64.whl", hash = "sha256:b3d267842bf12586ba6c734f89d1f5b871df0273157918b0ccefa29deb05c21c"},
+ {file = "PyYAML-6.0.tar.gz", hash = "sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2"},
]
requests = [
- {file = "requests-2.26.0-py2.py3-none-any.whl", hash = "sha256:6c1246513ecd5ecd4528a0906f910e8f0f9c6b8ec72030dc9fd154dc1a6efd24"},
- {file = "requests-2.26.0.tar.gz", hash = "sha256:b8aa58f8cf793ffd8782d3d8cb19e66ef36f7aba4353eec859e74678b01b07a7"},
+ {file = "requests-2.27.1-py2.py3-none-any.whl", hash = "sha256:f22fa1e554c9ddfd16e6e41ac79759e17be9e492b3587efa038054674760e72d"},
+ {file = "requests-2.27.1.tar.gz", hash = "sha256:68d7c56fd5a8999887728ef304a6d12edc7be74f1cfa47714fc8b414525c9a61"},
]
requests-oauthlib = [
- {file = "requests-oauthlib-1.3.0.tar.gz", hash = "sha256:b4261601a71fd721a8bd6d7aa1cc1d6a8a93b4a9f5e96626f8e4d91e8beeaa6a"},
- {file = "requests_oauthlib-1.3.0-py2.py3-none-any.whl", hash = "sha256:7f71572defaecd16372f9006f33c2ec8c077c3cfa6f5911a9a90202beb513f3d"},
- {file = "requests_oauthlib-1.3.0-py3.7.egg", hash = "sha256:fa6c47b933f01060936d87ae9327fead68768b69c6c9ea2109c48be30f2d4dbc"},
+ {file = "requests-oauthlib-1.3.1.tar.gz", hash = "sha256:75beac4a47881eeb94d5ea5d6ad31ef88856affe2332b9aafb52c6452ccf0d7a"},
+ {file = "requests_oauthlib-1.3.1-py2.py3-none-any.whl", hash = "sha256:2577c501a2fb8d05a304c09d090d6e47c306fef15809d102b327cf8364bddab5"},
]
rsa = [
- {file = "rsa-4.7.2-py3-none-any.whl", hash = "sha256:78f9a9bf4e7be0c5ded4583326e7461e3a3c5aae24073648b4bdfa797d78c9d2"},
- {file = "rsa-4.7.2.tar.gz", hash = "sha256:9d689e6ca1b3038bc82bf8d23e944b6b6037bc02301a574935b2dd946e0353b9"},
+ {file = "rsa-4.8-py3-none-any.whl", hash = "sha256:95c5d300c4e879ee69708c428ba566c59478fd653cc3a22243eeb8ed846950bb"},
+ {file = "rsa-4.8.tar.gz", hash = "sha256:5c6bd9dc7a543b7fe4304a631f8a8a3b674e2bbfc49c2ae96200cdbe55df6b17"},
]
s3transfer = [
- {file = "s3transfer-0.5.0-py3-none-any.whl", hash = "sha256:9c1dc369814391a6bda20ebbf4b70a0f34630592c9aa520856bf384916af2803"},
- {file = "s3transfer-0.5.0.tar.gz", hash = "sha256:50ed823e1dc5868ad40c8dc92072f757aa0e653a192845c94a3b676f4a62da4c"},
+ {file = "s3transfer-0.5.2-py3-none-any.whl", hash = "sha256:7a6f4c4d1fdb9a2b640244008e142cbc2cd3ae34b386584ef044dd0f27101971"},
+ {file = "s3transfer-0.5.2.tar.gz", hash = "sha256:95c58c194ce657a5f4fb0b9e60a84968c808888aed628cd98ab8771fe1db98ed"},
]
six = [
{file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"},
@@ -762,65 +833,162 @@ toml = [
{file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"},
]
typing-extensions = [
- {file = "typing_extensions-3.10.0.0-py2-none-any.whl", hash = "sha256:0ac0f89795dd19de6b97debb0c6af1c70987fd80a2d62d1958f7e56fcc31b497"},
- {file = "typing_extensions-3.10.0.0-py3-none-any.whl", hash = "sha256:779383f6086d90c99ae41cf0ff39aac8a7937a9283ce0a414e5dd782f4c94a84"},
- {file = "typing_extensions-3.10.0.0.tar.gz", hash = "sha256:50b6f157849174217d0656f99dc82fe932884fb250826c18350e159ec6cdf342"},
+ {file = "typing_extensions-4.2.0-py3-none-any.whl", hash = "sha256:6657594ee297170d19f67d55c05852a874e7eb634f4f753dbd667855e07c1708"},
+ {file = "typing_extensions-4.2.0.tar.gz", hash = "sha256:f1c24655a0da0d1b67f07e17a5e6b2a105894e6824b92096378bb3668ef02376"},
]
urllib3 = [
- {file = "urllib3-1.26.6-py2.py3-none-any.whl", hash = "sha256:39fb8672126159acb139a7718dd10806104dec1e2f0f6c88aab05d17df10c8d4"},
- {file = "urllib3-1.26.6.tar.gz", hash = "sha256:f57b4c16c62fa2760b7e3d97c35b255512fb6b59a259730f36ba32ce9f8e342f"},
+ {file = "urllib3-1.26.9-py2.py3-none-any.whl", hash = "sha256:44ece4d53fb1706f667c9bd1c648f5469a2ec925fcf3a776667042d645472c14"},
+ {file = "urllib3-1.26.9.tar.gz", hash = "sha256:aabaf16477806a5e1dd19aa41f8c2b7950dd3c746362d7e3223dbe6de6ac448e"},
]
vcrpy = [
{file = "vcrpy-4.1.1-py2.py3-none-any.whl", hash = "sha256:12c3fcdae7b88ecf11fc0d3e6d77586549d4575a2ceee18e82eee75c1f626162"},
{file = "vcrpy-4.1.1.tar.gz", hash = "sha256:57095bf22fc0a2d99ee9674cdafebed0f3ba763018582450706f7d3a74fff599"},
]
websocket-client = [
- {file = "websocket-client-1.2.1.tar.gz", hash = "sha256:8dfb715d8a992f5712fff8c843adae94e22b22a99b2c5e6b0ec4a1a981cc4e0d"},
- {file = "websocket_client-1.2.1-py2.py3-none-any.whl", hash = "sha256:0133d2f784858e59959ce82ddac316634229da55b498aac311f1620567a710ec"},
+ {file = "websocket-client-1.3.2.tar.gz", hash = "sha256:50b21db0058f7a953d67cc0445be4b948d7fc196ecbeb8083d68d94628e4abf6"},
+ {file = "websocket_client-1.3.2-py3-none-any.whl", hash = "sha256:722b171be00f2b90e1d4fb2f2b53146a536ca38db1da8ff49c972a4e1365d0ef"},
]
wrapt = [
- {file = "wrapt-1.12.1.tar.gz", hash = "sha256:b62ffa81fb85f4332a4f609cab4ac40709470da05643a082ec1eb88e6d9b97d7"},
+ {file = "wrapt-1.14.0-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:5a9a1889cc01ed2ed5f34574c90745fab1dd06ec2eee663e8ebeefe363e8efd7"},
+ {file = "wrapt-1.14.0-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:9a3ff5fb015f6feb78340143584d9f8a0b91b6293d6b5cf4295b3e95d179b88c"},
+ {file = "wrapt-1.14.0-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:4b847029e2d5e11fd536c9ac3136ddc3f54bc9488a75ef7d040a3900406a91eb"},
+ {file = "wrapt-1.14.0-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:9a5a544861b21e0e7575b6023adebe7a8c6321127bb1d238eb40d99803a0e8bd"},
+ {file = "wrapt-1.14.0-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:88236b90dda77f0394f878324cfbae05ae6fde8a84d548cfe73a75278d760291"},
+ {file = "wrapt-1.14.0-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:f0408e2dbad9e82b4c960274214af533f856a199c9274bd4aff55d4634dedc33"},
+ {file = "wrapt-1.14.0-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:9d8c68c4145041b4eeae96239802cfdfd9ef927754a5be3f50505f09f309d8c6"},
+ {file = "wrapt-1.14.0-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:22626dca56fd7f55a0733e604f1027277eb0f4f3d95ff28f15d27ac25a45f71b"},
+ {file = "wrapt-1.14.0-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:65bf3eb34721bf18b5a021a1ad7aa05947a1767d1aa272b725728014475ea7d5"},
+ {file = "wrapt-1.14.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:09d16ae7a13cff43660155383a2372b4aa09109c7127aa3f24c3cf99b891c330"},
+ {file = "wrapt-1.14.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:debaf04f813ada978d7d16c7dfa16f3c9c2ec9adf4656efdc4defdf841fc2f0c"},
+ {file = "wrapt-1.14.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:748df39ed634851350efa87690c2237a678ed794fe9ede3f0d79f071ee042561"},
+ {file = "wrapt-1.14.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1807054aa7b61ad8d8103b3b30c9764de2e9d0c0978e9d3fc337e4e74bf25faa"},
+ {file = "wrapt-1.14.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:763a73ab377390e2af26042f685a26787c402390f682443727b847e9496e4a2a"},
+ {file = "wrapt-1.14.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:8529b07b49b2d89d6917cfa157d3ea1dfb4d319d51e23030664a827fe5fd2131"},
+ {file = "wrapt-1.14.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:68aeefac31c1f73949662ba8affaf9950b9938b712fb9d428fa2a07e40ee57f8"},
+ {file = "wrapt-1.14.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:59d7d92cee84a547d91267f0fea381c363121d70fe90b12cd88241bd9b0e1763"},
+ {file = "wrapt-1.14.0-cp310-cp310-win32.whl", hash = "sha256:3a88254881e8a8c4784ecc9cb2249ff757fd94b911d5df9a5984961b96113fff"},
+ {file = "wrapt-1.14.0-cp310-cp310-win_amd64.whl", hash = "sha256:9a242871b3d8eecc56d350e5e03ea1854de47b17f040446da0e47dc3e0b9ad4d"},
+ {file = "wrapt-1.14.0-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:a65bffd24409454b889af33b6c49d0d9bcd1a219b972fba975ac935f17bdf627"},
+ {file = "wrapt-1.14.0-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:9d9fcd06c952efa4b6b95f3d788a819b7f33d11bea377be6b8980c95e7d10775"},
+ {file = "wrapt-1.14.0-cp35-cp35m-manylinux2010_i686.whl", hash = "sha256:db6a0ddc1282ceb9032e41853e659c9b638789be38e5b8ad7498caac00231c23"},
+ {file = "wrapt-1.14.0-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:14e7e2c5f5fca67e9a6d5f753d21f138398cad2b1159913ec9e9a67745f09ba3"},
+ {file = "wrapt-1.14.0-cp35-cp35m-win32.whl", hash = "sha256:6d9810d4f697d58fd66039ab959e6d37e63ab377008ef1d63904df25956c7db0"},
+ {file = "wrapt-1.14.0-cp35-cp35m-win_amd64.whl", hash = "sha256:d808a5a5411982a09fef6b49aac62986274ab050e9d3e9817ad65b2791ed1425"},
+ {file = "wrapt-1.14.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:b77159d9862374da213f741af0c361720200ab7ad21b9f12556e0eb95912cd48"},
+ {file = "wrapt-1.14.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:36a76a7527df8583112b24adc01748cd51a2d14e905b337a6fefa8b96fc708fb"},
+ {file = "wrapt-1.14.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a0057b5435a65b933cbf5d859cd4956624df37b8bf0917c71756e4b3d9958b9e"},
+ {file = "wrapt-1.14.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a0a4ca02752ced5f37498827e49c414d694ad7cf451ee850e3ff160f2bee9d3"},
+ {file = "wrapt-1.14.0-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:8c6be72eac3c14baa473620e04f74186c5d8f45d80f8f2b4eda6e1d18af808e8"},
+ {file = "wrapt-1.14.0-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:21b1106bff6ece8cb203ef45b4f5778d7226c941c83aaaa1e1f0f4f32cc148cd"},
+ {file = "wrapt-1.14.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:493da1f8b1bb8a623c16552fb4a1e164c0200447eb83d3f68b44315ead3f9036"},
+ {file = "wrapt-1.14.0-cp36-cp36m-win32.whl", hash = "sha256:89ba3d548ee1e6291a20f3c7380c92f71e358ce8b9e48161401e087e0bc740f8"},
+ {file = "wrapt-1.14.0-cp36-cp36m-win_amd64.whl", hash = "sha256:729d5e96566f44fccac6c4447ec2332636b4fe273f03da128fff8d5559782b06"},
+ {file = "wrapt-1.14.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:891c353e95bb11abb548ca95c8b98050f3620a7378332eb90d6acdef35b401d4"},
+ {file = "wrapt-1.14.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:23f96134a3aa24cc50614920cc087e22f87439053d886e474638c68c8d15dc80"},
+ {file = "wrapt-1.14.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6807bcee549a8cb2f38f73f469703a1d8d5d990815c3004f21ddb68a567385ce"},
+ {file = "wrapt-1.14.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6915682f9a9bc4cf2908e83caf5895a685da1fbd20b6d485dafb8e218a338279"},
+ {file = "wrapt-1.14.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:f2f3bc7cd9c9fcd39143f11342eb5963317bd54ecc98e3650ca22704b69d9653"},
+ {file = "wrapt-1.14.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:3a71dbd792cc7a3d772ef8cd08d3048593f13d6f40a11f3427c000cf0a5b36a0"},
+ {file = "wrapt-1.14.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:5a0898a640559dec00f3614ffb11d97a2666ee9a2a6bad1259c9facd01a1d4d9"},
+ {file = "wrapt-1.14.0-cp37-cp37m-win32.whl", hash = "sha256:167e4793dc987f77fd476862d32fa404d42b71f6a85d3b38cbce711dba5e6b68"},
+ {file = "wrapt-1.14.0-cp37-cp37m-win_amd64.whl", hash = "sha256:d066ffc5ed0be00cd0352c95800a519cf9e4b5dd34a028d301bdc7177c72daf3"},
+ {file = "wrapt-1.14.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d9bdfa74d369256e4218000a629978590fd7cb6cf6893251dad13d051090436d"},
+ {file = "wrapt-1.14.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:2498762814dd7dd2a1d0248eda2afbc3dd9c11537bc8200a4b21789b6df6cd38"},
+ {file = "wrapt-1.14.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5f24ca7953f2643d59a9c87d6e272d8adddd4a53bb62b9208f36db408d7aafc7"},
+ {file = "wrapt-1.14.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5b835b86bd5a1bdbe257d610eecab07bf685b1af2a7563093e0e69180c1d4af1"},
+ {file = "wrapt-1.14.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b21650fa6907e523869e0396c5bd591cc326e5c1dd594dcdccac089561cacfb8"},
+ {file = "wrapt-1.14.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:354d9fc6b1e44750e2a67b4b108841f5f5ea08853453ecbf44c81fdc2e0d50bd"},
+ {file = "wrapt-1.14.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:1f83e9c21cd5275991076b2ba1cd35418af3504667affb4745b48937e214bafe"},
+ {file = "wrapt-1.14.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:61e1a064906ccba038aa3c4a5a82f6199749efbbb3cef0804ae5c37f550eded0"},
+ {file = "wrapt-1.14.0-cp38-cp38-win32.whl", hash = "sha256:28c659878f684365d53cf59dc9a1929ea2eecd7ac65da762be8b1ba193f7e84f"},
+ {file = "wrapt-1.14.0-cp38-cp38-win_amd64.whl", hash = "sha256:b0ed6ad6c9640671689c2dbe6244680fe8b897c08fd1fab2228429b66c518e5e"},
+ {file = "wrapt-1.14.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b3f7e671fb19734c872566e57ce7fc235fa953d7c181bb4ef138e17d607dc8a1"},
+ {file = "wrapt-1.14.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:87fa943e8bbe40c8c1ba4086971a6fefbf75e9991217c55ed1bcb2f1985bd3d4"},
+ {file = "wrapt-1.14.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4775a574e9d84e0212f5b18886cace049a42e13e12009bb0491562a48bb2b758"},
+ {file = "wrapt-1.14.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9d57677238a0c5411c76097b8b93bdebb02eb845814c90f0b01727527a179e4d"},
+ {file = "wrapt-1.14.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:00108411e0f34c52ce16f81f1d308a571df7784932cc7491d1e94be2ee93374b"},
+ {file = "wrapt-1.14.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d332eecf307fca852d02b63f35a7872de32d5ba8b4ec32da82f45df986b39ff6"},
+ {file = "wrapt-1.14.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:01f799def9b96a8ec1ef6b9c1bbaf2bbc859b87545efbecc4a78faea13d0e3a0"},
+ {file = "wrapt-1.14.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:47045ed35481e857918ae78b54891fac0c1d197f22c95778e66302668309336c"},
+ {file = "wrapt-1.14.0-cp39-cp39-win32.whl", hash = "sha256:2eca15d6b947cfff51ed76b2d60fd172c6ecd418ddab1c5126032d27f74bc350"},
+ {file = "wrapt-1.14.0-cp39-cp39-win_amd64.whl", hash = "sha256:bb36fbb48b22985d13a6b496ea5fb9bb2a076fea943831643836c9f6febbcfdc"},
+ {file = "wrapt-1.14.0.tar.gz", hash = "sha256:8323a43bd9c91f62bb7d4be74cc9ff10090e7ef820e27bfe8815c57e68261311"},
]
yarl = [
- {file = "yarl-1.6.3-cp36-cp36m-macosx_10_14_x86_64.whl", hash = "sha256:0355a701b3998dcd832d0dc47cc5dedf3874f966ac7f870e0f3a6788d802d434"},
- {file = "yarl-1.6.3-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:bafb450deef6861815ed579c7a6113a879a6ef58aed4c3a4be54400ae8871478"},
- {file = "yarl-1.6.3-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:547f7665ad50fa8563150ed079f8e805e63dd85def6674c97efd78eed6c224a6"},
- {file = "yarl-1.6.3-cp36-cp36m-manylinux2014_i686.whl", hash = "sha256:63f90b20ca654b3ecc7a8d62c03ffa46999595f0167d6450fa8383bab252987e"},
- {file = "yarl-1.6.3-cp36-cp36m-manylinux2014_ppc64le.whl", hash = "sha256:97b5bdc450d63c3ba30a127d018b866ea94e65655efaf889ebeabc20f7d12406"},
- {file = "yarl-1.6.3-cp36-cp36m-manylinux2014_s390x.whl", hash = "sha256:d8d07d102f17b68966e2de0e07bfd6e139c7c02ef06d3a0f8d2f0f055e13bb76"},
- {file = "yarl-1.6.3-cp36-cp36m-manylinux2014_x86_64.whl", hash = "sha256:15263c3b0b47968c1d90daa89f21fcc889bb4b1aac5555580d74565de6836366"},
- {file = "yarl-1.6.3-cp36-cp36m-win32.whl", hash = "sha256:b5dfc9a40c198334f4f3f55880ecf910adebdcb2a0b9a9c23c9345faa9185721"},
- {file = "yarl-1.6.3-cp36-cp36m-win_amd64.whl", hash = "sha256:b2e9a456c121e26d13c29251f8267541bd75e6a1ccf9e859179701c36a078643"},
- {file = "yarl-1.6.3-cp37-cp37m-macosx_10_14_x86_64.whl", hash = "sha256:ce3beb46a72d9f2190f9e1027886bfc513702d748047b548b05dab7dfb584d2e"},
- {file = "yarl-1.6.3-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:2ce4c621d21326a4a5500c25031e102af589edb50c09b321049e388b3934eec3"},
- {file = "yarl-1.6.3-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:d26608cf178efb8faa5ff0f2d2e77c208f471c5a3709e577a7b3fd0445703ac8"},
- {file = "yarl-1.6.3-cp37-cp37m-manylinux2014_i686.whl", hash = "sha256:4c5bcfc3ed226bf6419f7a33982fb4b8ec2e45785a0561eb99274ebbf09fdd6a"},
- {file = "yarl-1.6.3-cp37-cp37m-manylinux2014_ppc64le.whl", hash = "sha256:4736eaee5626db8d9cda9eb5282028cc834e2aeb194e0d8b50217d707e98bb5c"},
- {file = "yarl-1.6.3-cp37-cp37m-manylinux2014_s390x.whl", hash = "sha256:68dc568889b1c13f1e4745c96b931cc94fdd0defe92a72c2b8ce01091b22e35f"},
- {file = "yarl-1.6.3-cp37-cp37m-manylinux2014_x86_64.whl", hash = "sha256:7356644cbed76119d0b6bd32ffba704d30d747e0c217109d7979a7bc36c4d970"},
- {file = "yarl-1.6.3-cp37-cp37m-win32.whl", hash = "sha256:00d7ad91b6583602eb9c1d085a2cf281ada267e9a197e8b7cae487dadbfa293e"},
- {file = "yarl-1.6.3-cp37-cp37m-win_amd64.whl", hash = "sha256:69ee97c71fee1f63d04c945f56d5d726483c4762845400a6795a3b75d56b6c50"},
- {file = "yarl-1.6.3-cp38-cp38-macosx_10_14_x86_64.whl", hash = "sha256:e46fba844f4895b36f4c398c5af062a9808d1f26b2999c58909517384d5deda2"},
- {file = "yarl-1.6.3-cp38-cp38-manylinux1_i686.whl", hash = "sha256:31ede6e8c4329fb81c86706ba8f6bf661a924b53ba191b27aa5fcee5714d18ec"},
- {file = "yarl-1.6.3-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:fcbb48a93e8699eae920f8d92f7160c03567b421bc17362a9ffbbd706a816f71"},
- {file = "yarl-1.6.3-cp38-cp38-manylinux2014_i686.whl", hash = "sha256:72a660bdd24497e3e84f5519e57a9ee9220b6f3ac4d45056961bf22838ce20cc"},
- {file = "yarl-1.6.3-cp38-cp38-manylinux2014_ppc64le.whl", hash = "sha256:324ba3d3c6fee56e2e0b0d09bf5c73824b9f08234339d2b788af65e60040c959"},
- {file = "yarl-1.6.3-cp38-cp38-manylinux2014_s390x.whl", hash = "sha256:e6b5460dc5ad42ad2b36cca524491dfcaffbfd9c8df50508bddc354e787b8dc2"},
- {file = "yarl-1.6.3-cp38-cp38-manylinux2014_x86_64.whl", hash = "sha256:6d6283d8e0631b617edf0fd726353cb76630b83a089a40933043894e7f6721e2"},
- {file = "yarl-1.6.3-cp38-cp38-win32.whl", hash = "sha256:9ede61b0854e267fd565e7527e2f2eb3ef8858b301319be0604177690e1a3896"},
- {file = "yarl-1.6.3-cp38-cp38-win_amd64.whl", hash = "sha256:f0b059678fd549c66b89bed03efcabb009075bd131c248ecdf087bdb6faba24a"},
- {file = "yarl-1.6.3-cp39-cp39-macosx_10_14_x86_64.whl", hash = "sha256:329412812ecfc94a57cd37c9d547579510a9e83c516bc069470db5f75684629e"},
- {file = "yarl-1.6.3-cp39-cp39-manylinux1_i686.whl", hash = "sha256:c49ff66d479d38ab863c50f7bb27dee97c6627c5fe60697de15529da9c3de724"},
- {file = "yarl-1.6.3-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:f040bcc6725c821a4c0665f3aa96a4d0805a7aaf2caf266d256b8ed71b9f041c"},
- {file = "yarl-1.6.3-cp39-cp39-manylinux2014_i686.whl", hash = "sha256:d5c32c82990e4ac4d8150fd7652b972216b204de4e83a122546dce571c1bdf25"},
- {file = "yarl-1.6.3-cp39-cp39-manylinux2014_ppc64le.whl", hash = "sha256:d597767fcd2c3dc49d6eea360c458b65643d1e4dbed91361cf5e36e53c1f8c96"},
- {file = "yarl-1.6.3-cp39-cp39-manylinux2014_s390x.whl", hash = "sha256:8aa3decd5e0e852dc68335abf5478a518b41bf2ab2f330fe44916399efedfae0"},
- {file = "yarl-1.6.3-cp39-cp39-manylinux2014_x86_64.whl", hash = "sha256:73494d5b71099ae8cb8754f1df131c11d433b387efab7b51849e7e1e851f07a4"},
- {file = "yarl-1.6.3-cp39-cp39-win32.whl", hash = "sha256:5b883e458058f8d6099e4420f0cc2567989032b5f34b271c0827de9f1079a424"},
- {file = "yarl-1.6.3-cp39-cp39-win_amd64.whl", hash = "sha256:4953fb0b4fdb7e08b2f3b3be80a00d28c5c8a2056bb066169de00e6501b986b6"},
- {file = "yarl-1.6.3.tar.gz", hash = "sha256:8a9066529240171b68893d60dca86a763eae2139dd42f42106b03cf4b426bf10"},
+ {file = "yarl-1.7.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:f2a8508f7350512434e41065684076f640ecce176d262a7d54f0da41d99c5a95"},
+ {file = "yarl-1.7.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:da6df107b9ccfe52d3a48165e48d72db0eca3e3029b5b8cb4fe6ee3cb870ba8b"},
+ {file = "yarl-1.7.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a1d0894f238763717bdcfea74558c94e3bc34aeacd3351d769460c1a586a8b05"},
+ {file = "yarl-1.7.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dfe4b95b7e00c6635a72e2d00b478e8a28bfb122dc76349a06e20792eb53a523"},
+ {file = "yarl-1.7.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c145ab54702334c42237a6c6c4cc08703b6aa9b94e2f227ceb3d477d20c36c63"},
+ {file = "yarl-1.7.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1ca56f002eaf7998b5fcf73b2421790da9d2586331805f38acd9997743114e98"},
+ {file = "yarl-1.7.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:1d3d5ad8ea96bd6d643d80c7b8d5977b4e2fb1bab6c9da7322616fd26203d125"},
+ {file = "yarl-1.7.2-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:167ab7f64e409e9bdd99333fe8c67b5574a1f0495dcfd905bc7454e766729b9e"},
+ {file = "yarl-1.7.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:95a1873b6c0dd1c437fb3bb4a4aaa699a48c218ac7ca1e74b0bee0ab16c7d60d"},
+ {file = "yarl-1.7.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:6152224d0a1eb254f97df3997d79dadd8bb2c1a02ef283dbb34b97d4f8492d23"},
+ {file = "yarl-1.7.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:5bb7d54b8f61ba6eee541fba4b83d22b8a046b4ef4d8eb7f15a7e35db2e1e245"},
+ {file = "yarl-1.7.2-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:9c1f083e7e71b2dd01f7cd7434a5f88c15213194df38bc29b388ccdf1492b739"},
+ {file = "yarl-1.7.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:f44477ae29025d8ea87ec308539f95963ffdc31a82f42ca9deecf2d505242e72"},
+ {file = "yarl-1.7.2-cp310-cp310-win32.whl", hash = "sha256:cff3ba513db55cc6a35076f32c4cdc27032bd075c9faef31fec749e64b45d26c"},
+ {file = "yarl-1.7.2-cp310-cp310-win_amd64.whl", hash = "sha256:c9c6d927e098c2d360695f2e9d38870b2e92e0919be07dbe339aefa32a090265"},
+ {file = "yarl-1.7.2-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:9b4c77d92d56a4c5027572752aa35082e40c561eec776048330d2907aead891d"},
+ {file = "yarl-1.7.2-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c01a89a44bb672c38f42b49cdb0ad667b116d731b3f4c896f72302ff77d71656"},
+ {file = "yarl-1.7.2-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c19324a1c5399b602f3b6e7db9478e5b1adf5cf58901996fc973fe4fccd73eed"},
+ {file = "yarl-1.7.2-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3abddf0b8e41445426d29f955b24aeecc83fa1072be1be4e0d194134a7d9baee"},
+ {file = "yarl-1.7.2-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:6a1a9fe17621af43e9b9fcea8bd088ba682c8192d744b386ee3c47b56eaabb2c"},
+ {file = "yarl-1.7.2-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:8b0915ee85150963a9504c10de4e4729ae700af11df0dc5550e6587ed7891e92"},
+ {file = "yarl-1.7.2-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:29e0656d5497733dcddc21797da5a2ab990c0cb9719f1f969e58a4abac66234d"},
+ {file = "yarl-1.7.2-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:bf19725fec28452474d9887a128e98dd67eee7b7d52e932e6949c532d820dc3b"},
+ {file = "yarl-1.7.2-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:d6f3d62e16c10e88d2168ba2d065aa374e3c538998ed04996cd373ff2036d64c"},
+ {file = "yarl-1.7.2-cp36-cp36m-musllinux_1_1_s390x.whl", hash = "sha256:ac10bbac36cd89eac19f4e51c032ba6b412b3892b685076f4acd2de18ca990aa"},
+ {file = "yarl-1.7.2-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:aa32aaa97d8b2ed4e54dc65d241a0da1c627454950f7d7b1f95b13985afd6c5d"},
+ {file = "yarl-1.7.2-cp36-cp36m-win32.whl", hash = "sha256:87f6e082bce21464857ba58b569370e7b547d239ca22248be68ea5d6b51464a1"},
+ {file = "yarl-1.7.2-cp36-cp36m-win_amd64.whl", hash = "sha256:ac35ccde589ab6a1870a484ed136d49a26bcd06b6a1c6397b1967ca13ceb3913"},
+ {file = "yarl-1.7.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:a467a431a0817a292121c13cbe637348b546e6ef47ca14a790aa2fa8cc93df63"},
+ {file = "yarl-1.7.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6ab0c3274d0a846840bf6c27d2c60ba771a12e4d7586bf550eefc2df0b56b3b4"},
+ {file = "yarl-1.7.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d260d4dc495c05d6600264a197d9d6f7fc9347f21d2594926202fd08cf89a8ba"},
+ {file = "yarl-1.7.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fc4dd8b01a8112809e6b636b00f487846956402834a7fd59d46d4f4267181c41"},
+ {file = "yarl-1.7.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:c1164a2eac148d85bbdd23e07dfcc930f2e633220f3eb3c3e2a25f6148c2819e"},
+ {file = "yarl-1.7.2-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:67e94028817defe5e705079b10a8438b8cb56e7115fa01640e9c0bb3edf67332"},
+ {file = "yarl-1.7.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:89ccbf58e6a0ab89d487c92a490cb5660d06c3a47ca08872859672f9c511fc52"},
+ {file = "yarl-1.7.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:8cce6f9fa3df25f55521fbb5c7e4a736683148bcc0c75b21863789e5185f9185"},
+ {file = "yarl-1.7.2-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:211fcd65c58bf250fb994b53bc45a442ddc9f441f6fec53e65de8cba48ded986"},
+ {file = "yarl-1.7.2-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:c10ea1e80a697cf7d80d1ed414b5cb8f1eec07d618f54637067ae3c0334133c4"},
+ {file = "yarl-1.7.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:52690eb521d690ab041c3919666bea13ab9fbff80d615ec16fa81a297131276b"},
+ {file = "yarl-1.7.2-cp37-cp37m-win32.whl", hash = "sha256:695ba021a9e04418507fa930d5f0704edbce47076bdcfeeaba1c83683e5649d1"},
+ {file = "yarl-1.7.2-cp37-cp37m-win_amd64.whl", hash = "sha256:c17965ff3706beedafd458c452bf15bac693ecd146a60a06a214614dc097a271"},
+ {file = "yarl-1.7.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:fce78593346c014d0d986b7ebc80d782b7f5e19843ca798ed62f8e3ba8728576"},
+ {file = "yarl-1.7.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:c2a1ac41a6aa980db03d098a5531f13985edcb451bcd9d00670b03129922cd0d"},
+ {file = "yarl-1.7.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:39d5493c5ecd75c8093fa7700a2fb5c94fe28c839c8e40144b7ab7ccba6938c8"},
+ {file = "yarl-1.7.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1eb6480ef366d75b54c68164094a6a560c247370a68c02dddb11f20c4c6d3c9d"},
+ {file = "yarl-1.7.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5ba63585a89c9885f18331a55d25fe81dc2d82b71311ff8bd378fc8004202ff6"},
+ {file = "yarl-1.7.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e39378894ee6ae9f555ae2de332d513a5763276a9265f8e7cbaeb1b1ee74623a"},
+ {file = "yarl-1.7.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:c0910c6b6c31359d2f6184828888c983d54d09d581a4a23547a35f1d0b9484b1"},
+ {file = "yarl-1.7.2-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:6feca8b6bfb9eef6ee057628e71e1734caf520a907b6ec0d62839e8293e945c0"},
+ {file = "yarl-1.7.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:8300401dc88cad23f5b4e4c1226f44a5aa696436a4026e456fe0e5d2f7f486e6"},
+ {file = "yarl-1.7.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:788713c2896f426a4e166b11f4ec538b5736294ebf7d5f654ae445fd44270832"},
+ {file = "yarl-1.7.2-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:fd547ec596d90c8676e369dd8a581a21227fe9b4ad37d0dc7feb4ccf544c2d59"},
+ {file = "yarl-1.7.2-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:737e401cd0c493f7e3dd4db72aca11cfe069531c9761b8ea474926936b3c57c8"},
+ {file = "yarl-1.7.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:baf81561f2972fb895e7844882898bda1eef4b07b5b385bcd308d2098f1a767b"},
+ {file = "yarl-1.7.2-cp38-cp38-win32.whl", hash = "sha256:ede3b46cdb719c794427dcce9d8beb4abe8b9aa1e97526cc20de9bd6583ad1ef"},
+ {file = "yarl-1.7.2-cp38-cp38-win_amd64.whl", hash = "sha256:cc8b7a7254c0fc3187d43d6cb54b5032d2365efd1df0cd1749c0c4df5f0ad45f"},
+ {file = "yarl-1.7.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:580c1f15500e137a8c37053e4cbf6058944d4c114701fa59944607505c2fe3a0"},
+ {file = "yarl-1.7.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3ec1d9a0d7780416e657f1e405ba35ec1ba453a4f1511eb8b9fbab81cb8b3ce1"},
+ {file = "yarl-1.7.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3bf8cfe8856708ede6a73907bf0501f2dc4e104085e070a41f5d88e7faf237f3"},
+ {file = "yarl-1.7.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1be4bbb3d27a4e9aa5f3df2ab61e3701ce8fcbd3e9846dbce7c033a7e8136746"},
+ {file = "yarl-1.7.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:534b047277a9a19d858cde163aba93f3e1677d5acd92f7d10ace419d478540de"},
+ {file = "yarl-1.7.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c6ddcd80d79c96eb19c354d9dca95291589c5954099836b7c8d29278a7ec0bda"},
+ {file = "yarl-1.7.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:9bfcd43c65fbb339dc7086b5315750efa42a34eefad0256ba114cd8ad3896f4b"},
+ {file = "yarl-1.7.2-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f64394bd7ceef1237cc604b5a89bf748c95982a84bcd3c4bbeb40f685c810794"},
+ {file = "yarl-1.7.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:044daf3012e43d4b3538562da94a88fb12a6490652dbc29fb19adfa02cf72eac"},
+ {file = "yarl-1.7.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:368bcf400247318382cc150aaa632582d0780b28ee6053cd80268c7e72796dec"},
+ {file = "yarl-1.7.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:bab827163113177aee910adb1f48ff7af31ee0289f434f7e22d10baf624a6dfe"},
+ {file = "yarl-1.7.2-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:0cba38120db72123db7c58322fa69e3c0efa933040ffb586c3a87c063ec7cae8"},
+ {file = "yarl-1.7.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:59218fef177296451b23214c91ea3aba7858b4ae3306dde120224cfe0f7a6ee8"},
+ {file = "yarl-1.7.2-cp39-cp39-win32.whl", hash = "sha256:1edc172dcca3f11b38a9d5c7505c83c1913c0addc99cd28e993efeaafdfaa18d"},
+ {file = "yarl-1.7.2-cp39-cp39-win_amd64.whl", hash = "sha256:797c2c412b04403d2da075fb93c123df35239cd7b4cc4e0cd9e5839b73f52c58"},
+ {file = "yarl-1.7.2.tar.gz", hash = "sha256:45399b46d60c253327a460e99856752009fcee5f5d3c80b2f7c0cae1c38d56dd"},
]
zipp = [
- {file = "zipp-3.5.0-py3-none-any.whl", hash = "sha256:957cfda87797e389580cb8b9e3870841ca991e2125350677b2ca83a0e99390a3"},
- {file = "zipp-3.5.0.tar.gz", hash = "sha256:f5812b1e007e48cff63449a5e9f4e7ebea716b4111f9c4f9a645f91d579bf0c4"},
+ {file = "zipp-3.8.0-py3-none-any.whl", hash = "sha256:c4f6e5bbf48e74f7a38e7cc5b0480ff42b0ae5178957d564d18932525d5cf099"},
+ {file = "zipp-3.8.0.tar.gz", hash = "sha256:56bf8aadb83c24db6c4b577e13de374ccfb67da2078beba1d037c17980bf43ad"},
]
diff --git a/tools/c7n_kube/pyproject.toml b/tools/c7n_kube/pyproject.toml
index c516e8d3ac3..0f4843b5e70 100644
--- a/tools/c7n_kube/pyproject.toml
+++ b/tools/c7n_kube/pyproject.toml
@@ -1,6 +1,6 @@
[tool.poetry]
name = "c7n_kube"
-version = "0.2.13"
+version = "0.2.15"
description = "Cloud Custodian - Kubernetes Provider"
readme = "readme.md"
homepage = "https://cloudcustodian.io"
@@ -15,7 +15,7 @@ classifiers = [
]
[tool.poetry.dependencies]
-python = "^3.6"
+python = "^3.7"
kubernetes = "^10.0.1"
[tool.poetry.dev-dependencies]
diff --git a/tools/c7n_kube/requirements.txt b/tools/c7n_kube/requirements.txt
index 4ba93a2b534..b60b5505bd0 100644
--- a/tools/c7n_kube/requirements.txt
+++ b/tools/c7n_kube/requirements.txt
@@ -1,17 +1,17 @@
-cachetools==4.2.2; python_version >= "3.5" and python_version < "4.0" and (python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0")
-certifi==2021.5.30; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0"
-charset-normalizer==2.0.4; python_full_version >= "3.6.0" and python_version >= "3"
-google-auth==1.34.0; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0"
-idna==3.2; python_version >= "3.5" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.5"
+cachetools==5.0.0; python_version >= "3.7" and python_version < "4.0" and (python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0")
+certifi==2021.10.8; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0"
+charset-normalizer==2.0.12; python_full_version >= "3.6.0" and python_version >= "3"
+google-auth==2.6.5; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0"
+idna==3.3; python_version >= "3.5" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.5"
kubernetes==10.0.1
-oauthlib==3.1.1; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
+oauthlib==3.2.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
pyasn1-modules==0.2.8; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0"
-pyasn1==0.4.8; python_version >= "3.5" and python_full_version < "3.0.0" and python_version < "4" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6") or python_version >= "3.5" and python_version < "4" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6") and python_full_version >= "3.6.0"
+pyasn1==0.4.8; python_version >= "3.6" and python_full_version < "3.0.0" and python_version < "4" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6") or python_version >= "3.6" and python_version < "4" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6") and python_full_version >= "3.6.0"
python-dateutil==2.8.2; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.3.0"
-pyyaml==5.4.1; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0"
-requests-oauthlib==1.3.0; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0"
-requests==2.26.0; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0"
-rsa==4.7.2; python_version >= "3.5" and python_version < "4" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6")
+pyyaml==6.0; python_version >= "3.6"
+requests-oauthlib==1.3.1; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0"
+requests==2.27.1; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0"
+rsa==4.8; python_version >= "3.6" and python_version < "4" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6")
six==1.16.0; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0"
-urllib3==1.26.6; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version < "4"
-websocket-client==1.2.1; python_version >= "3.6"
+urllib3==1.26.9; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version < "4"
+websocket-client==1.3.2; python_version >= "3.7"
diff --git a/tools/c7n_kube/setup.py b/tools/c7n_kube/setup.py
index 1aef9a85868..b79de427e9e 100644
--- a/tools/c7n_kube/setup.py
+++ b/tools/c7n_kube/setup.py
@@ -14,28 +14,30 @@
{'': ['*']}
install_requires = \
-['argcomplete (>=1.12.3,<2.0.0)',
- 'attrs (>=21.2.0,<22.0.0)',
- 'boto3 (>=1.18.21,<2.0.0)',
- 'botocore (>=1.21.21,<2.0.0)',
- 'c7n (>=0.9.14,<0.10.0)',
- 'importlib-metadata (>=4.6.4,<5.0.0)',
- 'jmespath (>=0.10.0,<0.11.0)',
- 'jsonschema (>=3.2.0,<4.0.0)',
+['argcomplete (>=2.0.0,<3.0.0)',
+ 'attrs (>=21.4.0,<22.0.0)',
+ 'boto3 (>=1.21.42,<2.0.0)',
+ 'botocore (>=1.24.42,<2.0.0)',
+ 'c7n (>=0.9.16,<0.10.0)',
+ 'docutils (>=0.17.1,<0.18.0)',
+ 'importlib-metadata (>=4.11.3,<5.0.0)',
+ 'importlib-resources (>=5.7.1,<6.0.0)',
+ 'jmespath (>=1.0.0,<2.0.0)',
+ 'jsonschema (>=4.4.0,<5.0.0)',
'kubernetes>=10.0.1,<11.0.0',
- 'pyrsistent (>=0.18.0,<0.19.0)',
+ 'pyrsistent (>=0.18.1,<0.19.0)',
'python-dateutil (>=2.8.2,<3.0.0)',
- 'pyyaml (>=5.4.1,<6.0.0)',
- 's3transfer (>=0.5.0,<0.6.0)',
+ 'pyyaml (>=6.0,<7.0)',
+ 's3transfer (>=0.5.2,<0.6.0)',
'six (>=1.16.0,<2.0.0)',
'tabulate (>=0.8.9,<0.9.0)',
- 'typing-extensions (>=3.10.0.0,<4.0.0.0)',
- 'urllib3 (>=1.26.6,<2.0.0)',
- 'zipp (>=3.5.0,<4.0.0)']
+ 'typing-extensions (>=4.2.0,<5.0.0)',
+ 'urllib3 (>=1.26.9,<2.0.0)',
+ 'zipp (>=3.8.0,<4.0.0)']
setup_kwargs = {
'name': 'c7n-kube',
- 'version': '0.2.13',
+ 'version': '0.2.15',
'description': 'Cloud Custodian - Kubernetes Provider',
'license': 'Apache-2.0',
'classifiers': [
@@ -53,7 +55,7 @@
'packages': packages,
'package_data': package_data,
'install_requires': install_requires,
- 'python_requires': '>=3.6,<4.0',
+ 'python_requires': '>=3.7,<4.0',
}
diff --git a/tools/c7n_logexporter/README.md b/tools/c7n_logexporter/README.md
index accc9fe23d0..568bd244348 100644
--- a/tools/c7n_logexporter/README.md
+++ b/tools/c7n_logexporter/README.md
@@ -44,7 +44,31 @@ c7n-log-exporter export --help
To ease usage when running across multiple accounts, a config file can be specified, as
an example.
+### Using S3 Bucket as destination
+
+```
+destination:
+ bucket: custodian-log-archive
+ prefix: logs2
+
+accounts:
+ - name: custodian-demo
+ role: "arn:aws:iam::111111111111:role/CloudCustodianRole"
+ groups:
+ - "/aws/lambda/*"
+ - "vpc-flow-logs"
```
+
+### Using CloudWatch Destination as destination cross account
+The Cloudwatch Destination needs setup in account and access policy set on CloudWatch Destination to to allow
+source account access to the Cloudwatch Destination
+
+```
+subscription:
+ destination-arn: "arn:aws:logs:us-east-1:111111111111:destination:CustodianCWLogsDestination"
+ destination-role: "arn:aws:iam::111111111111:role/CWLtoKinesisRole"
+ name: "CustodianCWLogsDestination"
+
destination:
bucket: custodian-log-archive
prefix: logs2
diff --git a/tools/c7n_logexporter/c7n_logexporter/exporter.py b/tools/c7n_logexporter/c7n_logexporter/exporter.py
index 634fe975b51..0ac968f8d84 100644
--- a/tools/c7n_logexporter/c7n_logexporter/exporter.py
+++ b/tools/c7n_logexporter/c7n_logexporter/exporter.py
@@ -140,8 +140,9 @@ def _process_subscribe_group(client, group_name, subscription, distribution):
f['destinationArn'] == subscription['destination-arn'] and
f['distribution'] == distribution):
return
- client.delete_subscription_filter(
- logGroupName=group_name, filterName=sub_name)
+ else:
+ client.delete_subscription_filter(
+ logGroupName=group_name, filterName=sub_name)
client.put_subscription_filter(
logGroupName=group_name,
destinationArn=subscription['destination-arn'],
@@ -209,7 +210,7 @@ def subscribe_account(t_account, subscription, region):
g = g.replace('*', '')
paginator = client.get_paginator('describe_log_groups')
allLogGroups = paginator.paginate(logGroupNamePrefix=g).build_full_result()
- for l in allLogGroups:
+ for l in allLogGroups['logGroups']:
_process_subscribe_group(
client, l['logGroupName'], subscription, distribution)
else:
@@ -764,19 +765,20 @@ def export(group, bucket, prefix, start, end, role, poll_period=120,
client = session.client('logs')
- paginator = client.get_paginator('describe_log_groups')
- for p in paginator.paginate():
- found = False
- for _group in p['logGroups']:
- if _group['logGroupName'] == group:
- group = _group
- found = True
+ if isinstance(group, str):
+ paginator = client.get_paginator('describe_log_groups')
+ for p in paginator.paginate():
+ found = False
+ for _group in p['logGroups']:
+ if _group['logGroupName'] == group:
+ group = _group
+ found = True
+ break
+ if found:
break
- if found:
- break
- if not found:
- raise ValueError("Log group %s not found." % group)
+ if not found:
+ raise ValueError("Log group %s not found." % group)
if prefix:
prefix = "%s/%s" % (prefix.rstrip('/'), group['logGroupName'].strip('/'))
diff --git a/tools/c7n_logexporter/poetry.lock b/tools/c7n_logexporter/poetry.lock
index 6d3d2f3a7cb..1604a5e8172 100644
--- a/tools/c7n_logexporter/poetry.lock
+++ b/tools/c7n_logexporter/poetry.lock
@@ -1,42 +1,42 @@
[[package]]
name = "argcomplete"
-version = "1.12.3"
+version = "2.0.0"
description = "Bash tab completion for argparse"
category = "dev"
optional = false
-python-versions = "*"
+python-versions = ">=3.6"
[package.dependencies]
-importlib-metadata = {version = ">=0.23,<5", markers = "python_version == \"3.6\" or python_version == \"3.7\""}
+importlib-metadata = {version = ">=0.23,<5", markers = "python_version == \"3.7\""}
[package.extras]
test = ["coverage", "flake8", "pexpect", "wheel"]
[[package]]
name = "attrs"
-version = "21.2.0"
+version = "21.4.0"
description = "Classes Without Boilerplate"
category = "dev"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
[package.extras]
-dev = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "furo", "sphinx", "sphinx-notfound-page", "pre-commit"]
+dev = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "furo", "sphinx", "sphinx-notfound-page", "pre-commit", "cloudpickle"]
docs = ["furo", "sphinx", "zope.interface", "sphinx-notfound-page"]
-tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface"]
-tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins"]
+tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "cloudpickle"]
+tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "cloudpickle"]
[[package]]
name = "boto3"
-version = "1.18.21"
+version = "1.21.42"
description = "The AWS SDK for Python"
category = "dev"
optional = false
python-versions = ">= 3.6"
[package.dependencies]
-botocore = ">=1.21.21,<1.22.0"
-jmespath = ">=0.7.1,<1.0.0"
+botocore = ">=1.24.42,<1.25.0"
+jmespath = ">=0.7.1,<2.0.0"
s3transfer = ">=0.5.0,<0.6.0"
[package.extras]
@@ -44,36 +44,37 @@ crt = ["botocore[crt] (>=1.21.0,<2.0a0)"]
[[package]]
name = "botocore"
-version = "1.21.21"
+version = "1.24.42"
description = "Low-level, data-driven core of boto 3."
category = "dev"
optional = false
python-versions = ">= 3.6"
[package.dependencies]
-jmespath = ">=0.7.1,<1.0.0"
+jmespath = ">=0.7.1,<2.0.0"
python-dateutil = ">=2.1,<3.0.0"
urllib3 = ">=1.25.4,<1.27"
[package.extras]
-crt = ["awscrt (==0.11.24)"]
+crt = ["awscrt (==0.13.8)"]
[[package]]
name = "c7n"
-version = "0.9.14"
+version = "0.9.16"
description = "Cloud Custodian - Policy Rules Engine"
category = "dev"
optional = false
-python-versions = "^3.6"
+python-versions = "^3.7"
develop = true
[package.dependencies]
-argcomplete = "^1.11.1"
+argcomplete = ">=1.12.3"
boto3 = "^1.12.31"
-importlib-metadata = ">1.7.0;python_version<3.8"
-jsonschema = "^3.2.0"
-python-dateutil = "^2.8.1"
-pyyaml = "^5.3"
+docutils = ">=0.14,<0.18"
+importlib-metadata = ">=4.11.1"
+jsonschema = ">=3.0.0"
+python-dateutil = "^2.8.2"
+pyyaml = ">=5.4.0"
tabulate = "^0.8.6"
[package.source]
@@ -82,62 +83,98 @@ url = "../.."
[[package]]
name = "click"
-version = "7.1.2"
+version = "8.1.2"
description = "Composable command line interface toolkit"
category = "main"
optional = false
+python-versions = ">=3.7"
+
+[package.dependencies]
+colorama = {version = "*", markers = "platform_system == \"Windows\""}
+importlib-metadata = {version = "*", markers = "python_version < \"3.8\""}
+
+[[package]]
+name = "colorama"
+version = "0.4.4"
+description = "Cross-platform colored terminal text."
+category = "main"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
+
+[[package]]
+name = "docutils"
+version = "0.17.1"
+description = "Docutils -- Python Documentation Utilities"
+category = "dev"
+optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
[[package]]
name = "importlib-metadata"
-version = "4.6.4"
+version = "4.11.3"
description = "Read metadata from Python packages"
-category = "dev"
+category = "main"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.7"
[package.dependencies]
typing-extensions = {version = ">=3.6.4", markers = "python_version < \"3.8\""}
zipp = ">=0.5"
[package.extras]
-docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
+docs = ["sphinx", "jaraco.packaging (>=9)", "rst.linker (>=1.9)"]
perf = ["ipython"]
-testing = ["pytest (>=4.6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pep517", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy", "importlib-resources (>=1.3)"]
+testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)", "importlib-resources (>=1.3)"]
+
+[[package]]
+name = "importlib-resources"
+version = "5.7.1"
+description = "Read resources from Python packages"
+category = "dev"
+optional = false
+python-versions = ">=3.7"
+
+[package.dependencies]
+zipp = {version = ">=3.1.0", markers = "python_version < \"3.10\""}
+
+[package.extras]
+docs = ["sphinx", "jaraco.packaging (>=9)", "rst.linker (>=1.9)"]
+testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)"]
[[package]]
name = "jmespath"
-version = "0.10.0"
+version = "1.0.0"
description = "JSON Matching Expressions"
category = "dev"
optional = false
-python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*"
+python-versions = ">=3.7"
[[package]]
name = "jsonschema"
-version = "3.2.0"
+version = "4.4.0"
description = "An implementation of JSON Schema validation for Python"
category = "dev"
optional = false
-python-versions = "*"
+python-versions = ">=3.7"
[package.dependencies]
attrs = ">=17.4.0"
importlib-metadata = {version = "*", markers = "python_version < \"3.8\""}
-pyrsistent = ">=0.14.0"
-six = ">=1.11.0"
+importlib-resources = {version = ">=1.4.0", markers = "python_version < \"3.9\""}
+pyrsistent = ">=0.14.0,<0.17.0 || >0.17.0,<0.17.1 || >0.17.1,<0.17.2 || >0.17.2"
+typing-extensions = {version = "*", markers = "python_version < \"3.8\""}
[package.extras]
-format = ["idna", "jsonpointer (>1.13)", "rfc3987", "strict-rfc3339", "webcolors"]
-format_nongpl = ["idna", "jsonpointer (>1.13)", "webcolors", "rfc3986-validator (>0.1.0)", "rfc3339-validator"]
+format = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3987", "uri-template", "webcolors (>=1.11)"]
+format_nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3986-validator (>0.1.0)", "uri-template", "webcolors (>=1.11)"]
[[package]]
name = "pyrsistent"
-version = "0.18.0"
+version = "0.18.1"
description = "Persistent/Functional/Immutable data structures"
category = "dev"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.7"
[[package]]
name = "python-dateutil"
@@ -152,15 +189,15 @@ six = ">=1.5"
[[package]]
name = "pyyaml"
-version = "5.4.1"
+version = "6.0"
description = "YAML parser and emitter for Python"
category = "dev"
optional = false
-python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*"
+python-versions = ">=3.6"
[[package]]
name = "s3transfer"
-version = "0.5.0"
+version = "0.5.2"
description = "An Amazon S3 Transfer Manager"
category = "dev"
optional = false
@@ -193,129 +230,153 @@ widechars = ["wcwidth"]
[[package]]
name = "typing-extensions"
-version = "3.10.0.0"
-description = "Backported and Experimental Type Hints for Python 3.5+"
-category = "dev"
+version = "4.2.0"
+description = "Backported and Experimental Type Hints for Python 3.7+"
+category = "main"
optional = false
-python-versions = "*"
+python-versions = ">=3.7"
[[package]]
name = "urllib3"
-version = "1.26.6"
+version = "1.26.9"
description = "HTTP library with thread-safe connection pooling, file post, and more."
category = "dev"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, <4"
[package.extras]
-brotli = ["brotlipy (>=0.6.0)"]
+brotli = ["brotlicffi (>=0.8.0)", "brotli (>=1.0.9)", "brotlipy (>=0.6.0)"]
secure = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "certifi", "ipaddress"]
socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"]
[[package]]
name = "zipp"
-version = "3.5.0"
+version = "3.8.0"
description = "Backport of pathlib-compatible object wrapper for zip files"
-category = "dev"
+category = "main"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.7"
[package.extras]
-docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
-testing = ["pytest (>=4.6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "jaraco.itertools", "func-timeout", "pytest-black (>=0.3.7)", "pytest-mypy"]
+docs = ["sphinx", "jaraco.packaging (>=9)", "rst.linker (>=1.9)"]
+testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "jaraco.itertools", "func-timeout", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)"]
[metadata]
lock-version = "1.1"
-python-versions = "^3.6"
-content-hash = "5b44828a798b7f0748ca1954487c3ee43dde75bb63538af5df382bf0ba7da008"
+python-versions = "^3.7"
+content-hash = "b6e01b153c50bddd47e43d815d261dacd6b60150668e261439f45b62c7663fbd"
[metadata.files]
argcomplete = [
- {file = "argcomplete-1.12.3-py2.py3-none-any.whl", hash = "sha256:291f0beca7fd49ce285d2f10e4c1c77e9460cf823eef2de54df0c0fec88b0d81"},
- {file = "argcomplete-1.12.3.tar.gz", hash = "sha256:2c7dbffd8c045ea534921e63b0be6fe65e88599990d8dc408ac8c542b72a5445"},
+ {file = "argcomplete-2.0.0-py2.py3-none-any.whl", hash = "sha256:cffa11ea77999bb0dd27bb25ff6dc142a6796142f68d45b1a26b11f58724561e"},
+ {file = "argcomplete-2.0.0.tar.gz", hash = "sha256:6372ad78c89d662035101418ae253668445b391755cfe94ea52f1b9d22425b20"},
]
attrs = [
- {file = "attrs-21.2.0-py2.py3-none-any.whl", hash = "sha256:149e90d6d8ac20db7a955ad60cf0e6881a3f20d37096140088356da6c716b0b1"},
- {file = "attrs-21.2.0.tar.gz", hash = "sha256:ef6aaac3ca6cd92904cdd0d83f629a15f18053ec84e6432106f7a4d04ae4f5fb"},
+ {file = "attrs-21.4.0-py2.py3-none-any.whl", hash = "sha256:2d27e3784d7a565d36ab851fe94887c5eccd6a463168875832a1be79c82828b4"},
+ {file = "attrs-21.4.0.tar.gz", hash = "sha256:626ba8234211db98e869df76230a137c4c40a12d72445c45d5f5b716f076e2fd"},
]
boto3 = [
- {file = "boto3-1.18.21-py3-none-any.whl", hash = "sha256:59b6e8e79b2114e21388288a06a004f2a9378b1e0fc58466a35da8fb74fe2dd8"},
- {file = "boto3-1.18.21.tar.gz", hash = "sha256:00748c760dc30be61c6db4b092718f6a9f8d27c767da0e232695a65adb75cde8"},
+ {file = "boto3-1.21.42-py3-none-any.whl", hash = "sha256:895fb88c69be78f82cfee58a79c97a3ad8d4a2a1209041a411d7d6b9fc5393e4"},
+ {file = "boto3-1.21.42.tar.gz", hash = "sha256:bcb541175a7d190dd919a0af0e807ee6e9d26f135551e741b10d94343f2d7588"},
]
botocore = [
- {file = "botocore-1.21.21-py3-none-any.whl", hash = "sha256:fa5ac13829d24fcdd385e82c3b6d78e22d93f427cca8dac38158cae84a8cc2f5"},
- {file = "botocore-1.21.21.tar.gz", hash = "sha256:12cfe74b0a5c44afb34bdd86c1f8ad74bc2ad9ec168eaed9040ef70cb3db944f"},
+ {file = "botocore-1.24.42-py3-none-any.whl", hash = "sha256:14aee41c8bf59d2dd2d89e8751fa37d3c95dcb92707d1966aa02697e914c1417"},
+ {file = "botocore-1.24.42.tar.gz", hash = "sha256:a2baa9484bbaee96ef312c049b8e360badcab58329e487b57567644a571b5f4a"},
]
c7n = []
click = [
- {file = "click-7.1.2-py2.py3-none-any.whl", hash = "sha256:dacca89f4bfadd5de3d7489b7c8a566eee0d3676333fbb50030263894c38c0dc"},
- {file = "click-7.1.2.tar.gz", hash = "sha256:d2b5255c7c6349bc1bd1e59e08cd12acbbd63ce649f2588755783aa94dfb6b1a"},
+ {file = "click-8.1.2-py3-none-any.whl", hash = "sha256:24e1a4a9ec5bf6299411369b208c1df2188d9eb8d916302fe6bf03faed227f1e"},
+ {file = "click-8.1.2.tar.gz", hash = "sha256:479707fe14d9ec9a0757618b7a100a0ae4c4e236fac5b7f80ca68028141a1a72"},
+]
+colorama = [
+ {file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"},
+ {file = "colorama-0.4.4.tar.gz", hash = "sha256:5941b2b48a20143d2267e95b1c2a7603ce057ee39fd88e7329b0c292aa16869b"},
+]
+docutils = [
+ {file = "docutils-0.17.1-py2.py3-none-any.whl", hash = "sha256:cf316c8370a737a022b72b56874f6602acf974a37a9fba42ec2876387549fc61"},
+ {file = "docutils-0.17.1.tar.gz", hash = "sha256:686577d2e4c32380bb50cbb22f575ed742d58168cee37e99117a854bcd88f125"},
]
importlib-metadata = [
- {file = "importlib_metadata-4.6.4-py3-none-any.whl", hash = "sha256:ed5157fef23a4bc4594615a0dd8eba94b2bb36bf2a343fa3d8bb2fa0a62a99d5"},
- {file = "importlib_metadata-4.6.4.tar.gz", hash = "sha256:7b30a78db2922d78a6f47fb30683156a14f3c6aa5cc23f77cc8967e9ab2d002f"},
+ {file = "importlib_metadata-4.11.3-py3-none-any.whl", hash = "sha256:1208431ca90a8cca1a6b8af391bb53c1a2db74e5d1cef6ddced95d4b2062edc6"},
+ {file = "importlib_metadata-4.11.3.tar.gz", hash = "sha256:ea4c597ebf37142f827b8f39299579e31685c31d3a438b59f469406afd0f2539"},
+]
+importlib-resources = [
+ {file = "importlib_resources-5.7.1-py3-none-any.whl", hash = "sha256:e447dc01619b1e951286f3929be820029d48c75eb25d265c28b92a16548212b8"},
+ {file = "importlib_resources-5.7.1.tar.gz", hash = "sha256:b6062987dfc51f0fcb809187cffbd60f35df7acb4589091f154214af6d0d49d3"},
]
jmespath = [
- {file = "jmespath-0.10.0-py2.py3-none-any.whl", hash = "sha256:cdf6525904cc597730141d61b36f2e4b8ecc257c420fa2f4549bac2c2d0cb72f"},
- {file = "jmespath-0.10.0.tar.gz", hash = "sha256:b85d0567b8666149a93172712e68920734333c0ce7e89b78b3e987f71e5ed4f9"},
+ {file = "jmespath-1.0.0-py3-none-any.whl", hash = "sha256:e8dcd576ed616f14ec02eed0005c85973b5890083313860136657e24784e4c04"},
+ {file = "jmespath-1.0.0.tar.gz", hash = "sha256:a490e280edd1f57d6de88636992d05b71e97d69a26a19f058ecf7d304474bf5e"},
]
jsonschema = [
- {file = "jsonschema-3.2.0-py2.py3-none-any.whl", hash = "sha256:4e5b3cf8216f577bee9ce139cbe72eca3ea4f292ec60928ff24758ce626cd163"},
- {file = "jsonschema-3.2.0.tar.gz", hash = "sha256:c8a85b28d377cc7737e46e2d9f2b4f44ee3c0e1deac6bf46ddefc7187d30797a"},
+ {file = "jsonschema-4.4.0-py3-none-any.whl", hash = "sha256:77281a1f71684953ee8b3d488371b162419767973789272434bbc3f29d9c8823"},
+ {file = "jsonschema-4.4.0.tar.gz", hash = "sha256:636694eb41b3535ed608fe04129f26542b59ed99808b4f688aa32dcf55317a83"},
]
pyrsistent = [
- {file = "pyrsistent-0.18.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:f4c8cabb46ff8e5d61f56a037974228e978f26bfefce4f61a4b1ac0ba7a2ab72"},
- {file = "pyrsistent-0.18.0-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:da6e5e818d18459fa46fac0a4a4e543507fe1110e808101277c5a2b5bab0cd2d"},
- {file = "pyrsistent-0.18.0-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:5e4395bbf841693eaebaa5bb5c8f5cdbb1d139e07c975c682ec4e4f8126e03d2"},
- {file = "pyrsistent-0.18.0-cp36-cp36m-win32.whl", hash = "sha256:527be2bfa8dc80f6f8ddd65242ba476a6c4fb4e3aedbf281dfbac1b1ed4165b1"},
- {file = "pyrsistent-0.18.0-cp36-cp36m-win_amd64.whl", hash = "sha256:2aaf19dc8ce517a8653746d98e962ef480ff34b6bc563fc067be6401ffb457c7"},
- {file = "pyrsistent-0.18.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:58a70d93fb79dc585b21f9d72487b929a6fe58da0754fa4cb9f279bb92369396"},
- {file = "pyrsistent-0.18.0-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:4916c10896721e472ee12c95cdc2891ce5890898d2f9907b1b4ae0f53588b710"},
- {file = "pyrsistent-0.18.0-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:73ff61b1411e3fb0ba144b8f08d6749749775fe89688093e1efef9839d2dcc35"},
- {file = "pyrsistent-0.18.0-cp37-cp37m-win32.whl", hash = "sha256:b29b869cf58412ca5738d23691e96d8aff535e17390128a1a52717c9a109da4f"},
- {file = "pyrsistent-0.18.0-cp37-cp37m-win_amd64.whl", hash = "sha256:097b96f129dd36a8c9e33594e7ebb151b1515eb52cceb08474c10a5479e799f2"},
- {file = "pyrsistent-0.18.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:772e94c2c6864f2cd2ffbe58bb3bdefbe2a32afa0acb1a77e472aac831f83427"},
- {file = "pyrsistent-0.18.0-cp38-cp38-manylinux1_i686.whl", hash = "sha256:c1a9ff320fa699337e05edcaae79ef8c2880b52720bc031b219e5b5008ebbdef"},
- {file = "pyrsistent-0.18.0-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:cd3caef37a415fd0dae6148a1b6957a8c5f275a62cca02e18474608cb263640c"},
- {file = "pyrsistent-0.18.0-cp38-cp38-win32.whl", hash = "sha256:e79d94ca58fcafef6395f6352383fa1a76922268fa02caa2272fff501c2fdc78"},
- {file = "pyrsistent-0.18.0-cp38-cp38-win_amd64.whl", hash = "sha256:a0c772d791c38bbc77be659af29bb14c38ced151433592e326361610250c605b"},
- {file = "pyrsistent-0.18.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d5ec194c9c573aafaceebf05fc400656722793dac57f254cd4741f3c27ae57b4"},
- {file = "pyrsistent-0.18.0-cp39-cp39-manylinux1_i686.whl", hash = "sha256:6b5eed00e597b5b5773b4ca30bd48a5774ef1e96f2a45d105db5b4ebb4bca680"},
- {file = "pyrsistent-0.18.0-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:48578680353f41dca1ca3dc48629fb77dfc745128b56fc01096b2530c13fd426"},
- {file = "pyrsistent-0.18.0-cp39-cp39-win32.whl", hash = "sha256:f3ef98d7b76da5eb19c37fda834d50262ff9167c65658d1d8f974d2e4d90676b"},
- {file = "pyrsistent-0.18.0-cp39-cp39-win_amd64.whl", hash = "sha256:404e1f1d254d314d55adb8d87f4f465c8693d6f902f67eb6ef5b4526dc58e6ea"},
- {file = "pyrsistent-0.18.0.tar.gz", hash = "sha256:773c781216f8c2900b42a7b638d5b517bb134ae1acbebe4d1e8f1f41ea60eb4b"},
+ {file = "pyrsistent-0.18.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:df46c854f490f81210870e509818b729db4488e1f30f2a1ce1698b2295a878d1"},
+ {file = "pyrsistent-0.18.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d45866ececf4a5fff8742c25722da6d4c9e180daa7b405dc0a2a2790d668c26"},
+ {file = "pyrsistent-0.18.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4ed6784ceac462a7d6fcb7e9b663e93b9a6fb373b7f43594f9ff68875788e01e"},
+ {file = "pyrsistent-0.18.1-cp310-cp310-win32.whl", hash = "sha256:e4f3149fd5eb9b285d6bfb54d2e5173f6a116fe19172686797c056672689daf6"},
+ {file = "pyrsistent-0.18.1-cp310-cp310-win_amd64.whl", hash = "sha256:636ce2dc235046ccd3d8c56a7ad54e99d5c1cd0ef07d9ae847306c91d11b5fec"},
+ {file = "pyrsistent-0.18.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:e92a52c166426efbe0d1ec1332ee9119b6d32fc1f0bbfd55d5c1088070e7fc1b"},
+ {file = "pyrsistent-0.18.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d7a096646eab884bf8bed965bad63ea327e0d0c38989fc83c5ea7b8a87037bfc"},
+ {file = "pyrsistent-0.18.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cdfd2c361b8a8e5d9499b9082b501c452ade8bbf42aef97ea04854f4a3f43b22"},
+ {file = "pyrsistent-0.18.1-cp37-cp37m-win32.whl", hash = "sha256:7ec335fc998faa4febe75cc5268a9eac0478b3f681602c1f27befaf2a1abe1d8"},
+ {file = "pyrsistent-0.18.1-cp37-cp37m-win_amd64.whl", hash = "sha256:6455fc599df93d1f60e1c5c4fe471499f08d190d57eca040c0ea182301321286"},
+ {file = "pyrsistent-0.18.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:fd8da6d0124efa2f67d86fa70c851022f87c98e205f0594e1fae044e7119a5a6"},
+ {file = "pyrsistent-0.18.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7bfe2388663fd18bd8ce7db2c91c7400bf3e1a9e8bd7d63bf7e77d39051b85ec"},
+ {file = "pyrsistent-0.18.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0e3e1fcc45199df76053026a51cc59ab2ea3fc7c094c6627e93b7b44cdae2c8c"},
+ {file = "pyrsistent-0.18.1-cp38-cp38-win32.whl", hash = "sha256:b568f35ad53a7b07ed9b1b2bae09eb15cdd671a5ba5d2c66caee40dbf91c68ca"},
+ {file = "pyrsistent-0.18.1-cp38-cp38-win_amd64.whl", hash = "sha256:d1b96547410f76078eaf66d282ddca2e4baae8964364abb4f4dcdde855cd123a"},
+ {file = "pyrsistent-0.18.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:f87cc2863ef33c709e237d4b5f4502a62a00fab450c9e020892e8e2ede5847f5"},
+ {file = "pyrsistent-0.18.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6bc66318fb7ee012071b2792024564973ecc80e9522842eb4e17743604b5e045"},
+ {file = "pyrsistent-0.18.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:914474c9f1d93080338ace89cb2acee74f4f666fb0424896fcfb8d86058bf17c"},
+ {file = "pyrsistent-0.18.1-cp39-cp39-win32.whl", hash = "sha256:1b34eedd6812bf4d33814fca1b66005805d3640ce53140ab8bbb1e2651b0d9bc"},
+ {file = "pyrsistent-0.18.1-cp39-cp39-win_amd64.whl", hash = "sha256:e24a828f57e0c337c8d8bb9f6b12f09dfdf0273da25fda9e314f0b684b415a07"},
+ {file = "pyrsistent-0.18.1.tar.gz", hash = "sha256:d4d61f8b993a7255ba714df3aca52700f8125289f84f704cf80916517c46eb96"},
]
python-dateutil = [
{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"},
]
pyyaml = [
- {file = "PyYAML-5.4.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:3b2b1824fe7112845700f815ff6a489360226a5609b96ec2190a45e62a9fc922"},
- {file = "PyYAML-5.4.1-cp27-cp27m-win32.whl", hash = "sha256:129def1b7c1bf22faffd67b8f3724645203b79d8f4cc81f674654d9902cb4393"},
- {file = "PyYAML-5.4.1-cp27-cp27m-win_amd64.whl", hash = "sha256:4465124ef1b18d9ace298060f4eccc64b0850899ac4ac53294547536533800c8"},
- {file = "PyYAML-5.4.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:bb4191dfc9306777bc594117aee052446b3fa88737cd13b7188d0e7aa8162185"},
- {file = "PyYAML-5.4.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:6c78645d400265a062508ae399b60b8c167bf003db364ecb26dcab2bda048253"},
- {file = "PyYAML-5.4.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:4e0583d24c881e14342eaf4ec5fbc97f934b999a6828693a99157fde912540cc"},
- {file = "PyYAML-5.4.1-cp36-cp36m-win32.whl", hash = "sha256:3bd0e463264cf257d1ffd2e40223b197271046d09dadf73a0fe82b9c1fc385a5"},
- {file = "PyYAML-5.4.1-cp36-cp36m-win_amd64.whl", hash = "sha256:e4fac90784481d221a8e4b1162afa7c47ed953be40d31ab4629ae917510051df"},
- {file = "PyYAML-5.4.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:5accb17103e43963b80e6f837831f38d314a0495500067cb25afab2e8d7a4018"},
- {file = "PyYAML-5.4.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:e1d4970ea66be07ae37a3c2e48b5ec63f7ba6804bdddfdbd3cfd954d25a82e63"},
- {file = "PyYAML-5.4.1-cp37-cp37m-win32.whl", hash = "sha256:dd5de0646207f053eb0d6c74ae45ba98c3395a571a2891858e87df7c9b9bd51b"},
- {file = "PyYAML-5.4.1-cp37-cp37m-win_amd64.whl", hash = "sha256:08682f6b72c722394747bddaf0aa62277e02557c0fd1c42cb853016a38f8dedf"},
- {file = "PyYAML-5.4.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d2d9808ea7b4af864f35ea216be506ecec180628aced0704e34aca0b040ffe46"},
- {file = "PyYAML-5.4.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:8c1be557ee92a20f184922c7b6424e8ab6691788e6d86137c5d93c1a6ec1b8fb"},
- {file = "PyYAML-5.4.1-cp38-cp38-win32.whl", hash = "sha256:fa5ae20527d8e831e8230cbffd9f8fe952815b2b7dae6ffec25318803a7528fc"},
- {file = "PyYAML-5.4.1-cp38-cp38-win_amd64.whl", hash = "sha256:0f5f5786c0e09baddcd8b4b45f20a7b5d61a7e7e99846e3c799b05c7c53fa696"},
- {file = "PyYAML-5.4.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:294db365efa064d00b8d1ef65d8ea2c3426ac366c0c4368d930bf1c5fb497f77"},
- {file = "PyYAML-5.4.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:74c1485f7707cf707a7aef42ef6322b8f97921bd89be2ab6317fd782c2d53183"},
- {file = "PyYAML-5.4.1-cp39-cp39-win32.whl", hash = "sha256:49d4cdd9065b9b6e206d0595fee27a96b5dd22618e7520c33204a4a3239d5b10"},
- {file = "PyYAML-5.4.1-cp39-cp39-win_amd64.whl", hash = "sha256:c20cfa2d49991c8b4147af39859b167664f2ad4561704ee74c1de03318e898db"},
- {file = "PyYAML-5.4.1.tar.gz", hash = "sha256:607774cbba28732bfa802b54baa7484215f530991055bb562efbed5b2f20a45e"},
+ {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"},
+ {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a80a78046a72361de73f8f395f1f1e49f956c6be882eed58505a15f3e430962b"},
+ {file = "PyYAML-6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f84fbc98b019fef2ee9a1cb3ce93e3187a6df0b2538a651bfb890254ba9f90b5"},
+ {file = "PyYAML-6.0-cp310-cp310-win32.whl", hash = "sha256:2cd5df3de48857ed0544b34e2d40e9fac445930039f3cfe4bcc592a1f836d513"},
+ {file = "PyYAML-6.0-cp310-cp310-win_amd64.whl", hash = "sha256:daf496c58a8c52083df09b80c860005194014c3698698d1a57cbcfa182142a3a"},
+ {file = "PyYAML-6.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:897b80890765f037df3403d22bab41627ca8811ae55e9a722fd0392850ec4d86"},
+ {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50602afada6d6cbfad699b0c7bb50d5ccffa7e46a3d738092afddc1f9758427f"},
+ {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:48c346915c114f5fdb3ead70312bd042a953a8ce5c7106d5bfb1a5254e47da92"},
+ {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:98c4d36e99714e55cfbaaee6dd5badbc9a1ec339ebfc3b1f52e293aee6bb71a4"},
+ {file = "PyYAML-6.0-cp36-cp36m-win32.whl", hash = "sha256:0283c35a6a9fbf047493e3a0ce8d79ef5030852c51e9d911a27badfde0605293"},
+ {file = "PyYAML-6.0-cp36-cp36m-win_amd64.whl", hash = "sha256:07751360502caac1c067a8132d150cf3d61339af5691fe9e87803040dbc5db57"},
+ {file = "PyYAML-6.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:819b3830a1543db06c4d4b865e70ded25be52a2e0631ccd2f6a47a2822f2fd7c"},
+ {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:473f9edb243cb1935ab5a084eb238d842fb8f404ed2193a915d1784b5a6b5fc0"},
+ {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0ce82d761c532fe4ec3f87fc45688bdd3a4c1dc5e0b4a19814b9009a29baefd4"},
+ {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:231710d57adfd809ef5d34183b8ed1eeae3f76459c18fb4a0b373ad56bedcdd9"},
+ {file = "PyYAML-6.0-cp37-cp37m-win32.whl", hash = "sha256:c5687b8d43cf58545ade1fe3e055f70eac7a5a1a0bf42824308d868289a95737"},
+ {file = "PyYAML-6.0-cp37-cp37m-win_amd64.whl", hash = "sha256:d15a181d1ecd0d4270dc32edb46f7cb7733c7c508857278d3d378d14d606db2d"},
+ {file = "PyYAML-6.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0b4624f379dab24d3725ffde76559cff63d9ec94e1736b556dacdfebe5ab6d4b"},
+ {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:213c60cd50106436cc818accf5baa1aba61c0189ff610f64f4a3e8c6726218ba"},
+ {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9fa600030013c4de8165339db93d182b9431076eb98eb40ee068700c9c813e34"},
+ {file = "PyYAML-6.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:277a0ef2981ca40581a47093e9e2d13b3f1fbbeffae064c1d21bfceba2030287"},
+ {file = "PyYAML-6.0-cp38-cp38-win32.whl", hash = "sha256:d4eccecf9adf6fbcc6861a38015c2a64f38b9d94838ac1810a9023a0609e1b78"},
+ {file = "PyYAML-6.0-cp38-cp38-win_amd64.whl", hash = "sha256:1e4747bc279b4f613a09eb64bba2ba602d8a6664c6ce6396a4d0cd413a50ce07"},
+ {file = "PyYAML-6.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:055d937d65826939cb044fc8c9b08889e8c743fdc6a32b33e2390f66013e449b"},
+ {file = "PyYAML-6.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e61ceaab6f49fb8bdfaa0f92c4b57bcfbea54c09277b1b4f7ac376bfb7a7c174"},
+ {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d67d839ede4ed1b28a4e8909735fc992a923cdb84e618544973d7dfc71540803"},
+ {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cba8c411ef271aa037d7357a2bc8f9ee8b58b9965831d9e51baf703280dc73d3"},
+ {file = "PyYAML-6.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:40527857252b61eacd1d9af500c3337ba8deb8fc298940291486c465c8b46ec0"},
+ {file = "PyYAML-6.0-cp39-cp39-win32.whl", hash = "sha256:b5b9eccad747aabaaffbc6064800670f0c297e52c12754eb1d976c57e4f74dcb"},
+ {file = "PyYAML-6.0-cp39-cp39-win_amd64.whl", hash = "sha256:b3d267842bf12586ba6c734f89d1f5b871df0273157918b0ccefa29deb05c21c"},
+ {file = "PyYAML-6.0.tar.gz", hash = "sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2"},
]
s3transfer = [
- {file = "s3transfer-0.5.0-py3-none-any.whl", hash = "sha256:9c1dc369814391a6bda20ebbf4b70a0f34630592c9aa520856bf384916af2803"},
- {file = "s3transfer-0.5.0.tar.gz", hash = "sha256:50ed823e1dc5868ad40c8dc92072f757aa0e653a192845c94a3b676f4a62da4c"},
+ {file = "s3transfer-0.5.2-py3-none-any.whl", hash = "sha256:7a6f4c4d1fdb9a2b640244008e142cbc2cd3ae34b386584ef044dd0f27101971"},
+ {file = "s3transfer-0.5.2.tar.gz", hash = "sha256:95c58c194ce657a5f4fb0b9e60a84968c808888aed628cd98ab8771fe1db98ed"},
]
six = [
{file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"},
@@ -326,15 +387,14 @@ tabulate = [
{file = "tabulate-0.8.9.tar.gz", hash = "sha256:eb1d13f25760052e8931f2ef80aaf6045a6cceb47514db8beab24cded16f13a7"},
]
typing-extensions = [
- {file = "typing_extensions-3.10.0.0-py2-none-any.whl", hash = "sha256:0ac0f89795dd19de6b97debb0c6af1c70987fd80a2d62d1958f7e56fcc31b497"},
- {file = "typing_extensions-3.10.0.0-py3-none-any.whl", hash = "sha256:779383f6086d90c99ae41cf0ff39aac8a7937a9283ce0a414e5dd782f4c94a84"},
- {file = "typing_extensions-3.10.0.0.tar.gz", hash = "sha256:50b6f157849174217d0656f99dc82fe932884fb250826c18350e159ec6cdf342"},
+ {file = "typing_extensions-4.2.0-py3-none-any.whl", hash = "sha256:6657594ee297170d19f67d55c05852a874e7eb634f4f753dbd667855e07c1708"},
+ {file = "typing_extensions-4.2.0.tar.gz", hash = "sha256:f1c24655a0da0d1b67f07e17a5e6b2a105894e6824b92096378bb3668ef02376"},
]
urllib3 = [
- {file = "urllib3-1.26.6-py2.py3-none-any.whl", hash = "sha256:39fb8672126159acb139a7718dd10806104dec1e2f0f6c88aab05d17df10c8d4"},
- {file = "urllib3-1.26.6.tar.gz", hash = "sha256:f57b4c16c62fa2760b7e3d97c35b255512fb6b59a259730f36ba32ce9f8e342f"},
+ {file = "urllib3-1.26.9-py2.py3-none-any.whl", hash = "sha256:44ece4d53fb1706f667c9bd1c648f5469a2ec925fcf3a776667042d645472c14"},
+ {file = "urllib3-1.26.9.tar.gz", hash = "sha256:aabaf16477806a5e1dd19aa41f8c2b7950dd3c746362d7e3223dbe6de6ac448e"},
]
zipp = [
- {file = "zipp-3.5.0-py3-none-any.whl", hash = "sha256:957cfda87797e389580cb8b9e3870841ca991e2125350677b2ca83a0e99390a3"},
- {file = "zipp-3.5.0.tar.gz", hash = "sha256:f5812b1e007e48cff63449a5e9f4e7ebea716b4111f9c4f9a645f91d579bf0c4"},
+ {file = "zipp-3.8.0-py3-none-any.whl", hash = "sha256:c4f6e5bbf48e74f7a38e7cc5b0480ff42b0ae5178957d564d18932525d5cf099"},
+ {file = "zipp-3.8.0.tar.gz", hash = "sha256:56bf8aadb83c24db6c4b577e13de374ccfb67da2078beba1d037c17980bf43ad"},
]
diff --git a/tools/c7n_logexporter/pyproject.toml b/tools/c7n_logexporter/pyproject.toml
index e87fc285e14..f9595ae104b 100644
--- a/tools/c7n_logexporter/pyproject.toml
+++ b/tools/c7n_logexporter/pyproject.toml
@@ -1,6 +1,6 @@
[tool.poetry]
name = "c7n_logexporter"
-version = "0.4.13"
+version = "0.4.15"
description = "Cloud Custodian - Cloud Watch Log S3 exporter"
readme = "README.md"
homepage = "https://cloudcustodian.io"
@@ -18,8 +18,8 @@ classifiers = [
c7n-log-exporter = 'c7n_logexporter.exporter:cli'
[tool.poetry.dependencies]
-python = "^3.6"
-click = "^7.0"
+python = "^3.7"
+click = "^8.0"
[tool.poetry.dev-dependencies]
c7n = {path = "../..", develop = true}
diff --git a/tools/c7n_logexporter/requirements.txt b/tools/c7n_logexporter/requirements.txt
index da177b7c7b2..7ef5dc7fec9 100644
--- a/tools/c7n_logexporter/requirements.txt
+++ b/tools/c7n_logexporter/requirements.txt
@@ -1 +1,5 @@
-click==7.1.2; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.5.0")
+click==8.1.2; python_version >= "3.7"
+colorama==0.4.4; python_version >= "3.7" and python_full_version < "3.0.0" and platform_system == "Windows" or platform_system == "Windows" and python_version >= "3.7" and python_full_version >= "3.5.0"
+importlib-metadata==4.11.3; python_version < "3.8" and python_version >= "3.7"
+typing-extensions==4.2.0; python_version < "3.8" and python_version >= "3.7"
+zipp==3.8.0; python_version < "3.8" and python_version >= "3.7"
diff --git a/tools/c7n_logexporter/setup.py b/tools/c7n_logexporter/setup.py
index 7af96157db4..f069b8621ef 100644
--- a/tools/c7n_logexporter/setup.py
+++ b/tools/c7n_logexporter/setup.py
@@ -10,31 +10,33 @@
{'': ['*']}
install_requires = \
-['argcomplete (>=1.12.3,<2.0.0)',
- 'attrs (>=21.2.0,<22.0.0)',
- 'boto3 (>=1.18.21,<2.0.0)',
- 'botocore (>=1.21.21,<2.0.0)',
- 'c7n (>=0.9.14,<0.10.0)',
- 'click>=7.0,<8.0',
- 'importlib-metadata (>=4.6.4,<5.0.0)',
- 'jmespath (>=0.10.0,<0.11.0)',
- 'jsonschema (>=3.2.0,<4.0.0)',
- 'pyrsistent (>=0.18.0,<0.19.0)',
+['argcomplete (>=2.0.0,<3.0.0)',
+ 'attrs (>=21.4.0,<22.0.0)',
+ 'boto3 (>=1.21.42,<2.0.0)',
+ 'botocore (>=1.24.42,<2.0.0)',
+ 'c7n (>=0.9.16,<0.10.0)',
+ 'click>=8.0,<9.0',
+ 'docutils (>=0.17.1,<0.18.0)',
+ 'importlib-metadata (>=4.11.3,<5.0.0)',
+ 'importlib-resources (>=5.7.1,<6.0.0)',
+ 'jmespath (>=1.0.0,<2.0.0)',
+ 'jsonschema (>=4.4.0,<5.0.0)',
+ 'pyrsistent (>=0.18.1,<0.19.0)',
'python-dateutil (>=2.8.2,<3.0.0)',
- 'pyyaml (>=5.4.1,<6.0.0)',
- 's3transfer (>=0.5.0,<0.6.0)',
+ 'pyyaml (>=6.0,<7.0)',
+ 's3transfer (>=0.5.2,<0.6.0)',
'six (>=1.16.0,<2.0.0)',
'tabulate (>=0.8.9,<0.9.0)',
- 'typing-extensions (>=3.10.0.0,<4.0.0.0)',
- 'urllib3 (>=1.26.6,<2.0.0)',
- 'zipp (>=3.5.0,<4.0.0)']
+ 'typing-extensions (>=4.2.0,<5.0.0)',
+ 'urllib3 (>=1.26.9,<2.0.0)',
+ 'zipp (>=3.8.0,<4.0.0)']
entry_points = \
{'console_scripts': ['c7n-log-exporter = c7n_logexporter.exporter:cli']}
setup_kwargs = {
'name': 'c7n-logexporter',
- 'version': '0.4.13',
+ 'version': '0.4.15',
'description': 'Cloud Custodian - Cloud Watch Log S3 exporter',
'license': 'Apache-2.0',
'classifiers': [
@@ -42,7 +44,7 @@
'Topic :: System :: Systems Administration',
'Topic :: System :: Distributed Computing'
],
- 'long_description': '# c7n-log-exporter: Cloud watch log exporter automation\n\nA small serverless app to archive cloud logs across accounts to an archive bucket. It utilizes\ncloud log export to s3 feature for historical exports.\n\nIt also supports kinesis streams / firehose to move to realtime exports in the same format\nas the periodic historical exports.\n\n\n## Features\n\n - Log group filtering by regex\n - Incremental support based on previously synced dates\n - Incremental support based on last log group write time\n - Cross account via sts role assume\n - Lambda and CLI support.\n - Day based log segmentation (output keys look\n like $prefix/$account_id/$group/$year/$month/$day/$export_task_uuid/$stream/$log)\n \n\n## Assumptions\n\n - The archive bucket has already has appropriate bucket policy permissions.\n For details see:\n https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/S3ExportTasks.html#S3Permissions\n - Default periodicity for log group archival into s3 is daily.\n - Exporter is run with account credentials that have access to the archive s3 bucket.\n - Catch up archiving is not run in lambda (do a cli run first)\n\n\n## Cli usage\n\n```\nmake install\n```\n\nYou can run on a single account / log group via the export subcommand\n```\nc7n-log-exporter export --help\n```\n\n## Config format\n\nTo ease usage when running across multiple accounts, a config file can be specified, as\nan example.\n\n```\ndestination:\n bucket: custodian-log-archive\n prefix: logs2\n\naccounts:\n - name: custodian-demo\n role: "arn:aws:iam::111111111111:role/CloudCustodianRole"\n groups:\n - "/aws/lambda/*"\n - "vpc-flow-logs"\n```\n\n## Multiple accounts via cli\n\nTo run on the cli across multiple accounts, edit the config.yml to specify multiple\naccounts and log groups.\n\n```\nc7n-log-exporter run --config config.yml\n```\n\n## Serverless Usage\n\nEdit config.yml to specify the accounts, archive bucket, and log groups you want to\nuse.\n\n```\nmake install\nmake deploy\n```\n\n',
+ 'long_description': '# c7n-log-exporter: Cloud watch log exporter automation\n\nA small serverless app to archive cloud logs across accounts to an archive bucket. It utilizes\ncloud log export to s3 feature for historical exports.\n\nIt also supports kinesis streams / firehose to move to realtime exports in the same format\nas the periodic historical exports.\n\n\n## Features\n\n - Log group filtering by regex\n - Incremental support based on previously synced dates\n - Incremental support based on last log group write time\n - Cross account via sts role assume\n - Lambda and CLI support.\n - Day based log segmentation (output keys look\n like $prefix/$account_id/$group/$year/$month/$day/$export_task_uuid/$stream/$log)\n \n\n## Assumptions\n\n - The archive bucket has already has appropriate bucket policy permissions.\n For details see:\n https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/S3ExportTasks.html#S3Permissions\n - Default periodicity for log group archival into s3 is daily.\n - Exporter is run with account credentials that have access to the archive s3 bucket.\n - Catch up archiving is not run in lambda (do a cli run first)\n\n\n## Cli usage\n\n```\nmake install\n```\n\nYou can run on a single account / log group via the export subcommand\n```\nc7n-log-exporter export --help\n```\n\n## Config format\n\nTo ease usage when running across multiple accounts, a config file can be specified, as\nan example.\n\n### Using S3 Bucket as destination\n\n```\ndestination:\n bucket: custodian-log-archive\n prefix: logs2\n\naccounts:\n - name: custodian-demo\n role: "arn:aws:iam::111111111111:role/CloudCustodianRole"\n groups:\n - "/aws/lambda/*"\n - "vpc-flow-logs"\n```\n\n### Using CloudWatch Destination as destination cross account\nThe Cloudwatch Destination needs setup in account and access policy set on CloudWatch Destination to to allow \nsource account access to the Cloudwatch Destination\n\n```\nsubscription:\n destination-arn: "arn:aws:logs:us-east-1:111111111111:destination:CustodianCWLogsDestination"\n destination-role: "arn:aws:iam::111111111111:role/CWLtoKinesisRole"\n name: "CustodianCWLogsDestination"\n\ndestination:\n bucket: custodian-log-archive\n prefix: logs2\n\naccounts:\n - name: custodian-demo\n role: "arn:aws:iam::111111111111:role/CloudCustodianRole"\n groups:\n - "/aws/lambda/*"\n - "vpc-flow-logs"\n```\n\n## Multiple accounts via cli\n\nTo run on the cli across multiple accounts, edit the config.yml to specify multiple\naccounts and log groups.\n\n```\nc7n-log-exporter run --config config.yml\n```\n\n## Serverless Usage\n\nEdit config.yml to specify the accounts, archive bucket, and log groups you want to\nuse.\n\n```\nmake install\nmake deploy\n```\n\n',
'long_description_content_type': 'text/markdown',
'author': 'Cloud Custodian Project',
'author_email': None,
@@ -53,7 +55,7 @@
'package_data': package_data,
'install_requires': install_requires,
'entry_points': entry_points,
- 'python_requires': '>=3.6,<4.0',
+ 'python_requires': '>=3.7,<4.0',
}
diff --git a/tools/c7n_mailer/README.md b/tools/c7n_mailer/README.md
index 93b376af527..d27c2dedebf 100644
--- a/tools/c7n_mailer/README.md
+++ b/tools/c7n_mailer/README.md
@@ -1,8 +1,8 @@
# c7n-mailer: Custodian Mailer
-[//]: # ( !!! IMPORTANT !!! )
-[//]: # (This file is moved during document generation.)
-[//]: # (Only edit the original document at ./tools/c7n_mailer/README.md)
+% [comment]: # ( !!! IMPORTANT !!! )
+% [comment]: # (This file is moved during document generation.)
+% [comment]: # (Only edit the original document at ./tools/c7n_mailer/README.md)
A mailer implementation for Custodian. Outbound mail delivery is still somewhat
organization-specific, so this at the moment serves primarily as an example
@@ -271,7 +271,7 @@ and here is a description of the options:
| | `endpoint_url` | string | SQS API URL (for use with VPC Endpoints) |
| | `contact_tags` | array of strings | tags that we should look at for address information |
-#### Standard Lambda Function Config
+### Standard Lambda Function Config
| Required? | Key | Type |
|:---------:|:---------------------|:-----------------|
@@ -284,7 +284,7 @@ and here is a description of the options:
| | `subnets` | array of strings |
| | `timeout` | integer |
-#### Standard Azure Functions Config
+### Standard Azure Functions Config
| Required? | Key | Type | Notes |
|:---------:|:----------------------|:-------|:---------------------------------------------------------------------------------------|
@@ -301,7 +301,7 @@ and here is a description of the options:
-#### Mailer Infrastructure Config
+### Mailer Infrastructure Config
| Required? | Key | Type | Notes |
|:---------:|:----------------------------|:--------|:---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
@@ -323,7 +323,7 @@ and here is a description of the options:
| | `redis_port` | integer | redis port, default: 6369 |
| | `ses_region` | string | AWS region that handles SES API calls |
-#### SMTP Config
+### SMTP Config
| Required? | Key | Type | Notes |
|:---------:|:----------------|:-----------------|:------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
@@ -344,20 +344,20 @@ If `smtp_server` is unset, `c7n_mailer` will use AWS SES or Azure SendGrid.
These fields are not necessary if c7n_mailer is run in a instance/lambda/etc with the DataDog agent.
-#### Slack Config
+### Slack Config
| Required? | Key | Type | Notes |
|:---------:|:--------------|:-------|:----------------|
| | `slack_token` | string | Slack API token |
-#### SendGrid Config
+### SendGrid Config
| Required? | Key | Type | Notes |
|:---------:|:-------------------|:---------------|:-------------------|
| | `sendgrid_api_key` | secured string | SendGrid API token |
-#### Splunk HEC Config
+### Splunk HEC Config
The following configuration items are *all* optional. The ones marked "Required for Splunk" are only required if you're sending notifications to ``splunkhec://`` destinations.
@@ -371,7 +371,7 @@ The following configuration items are *all* optional. The ones marked "Required
| | `splunk_hec_max_length` | integer | Maximum data length that Splunk HEC accepts; an error will be logged for any message sent over this length |
| | `splunk_hec_sourcetype` | string | Configure sourcetype of the payload sent to Splunk HEC. (default is '_json') |
-#### SDK Config
+### SDK Config
| Required? | Key | Type | Notes |
|:---------:|:--------------|:-------|:------|
@@ -380,30 +380,30 @@ The following configuration items are *all* optional. The ones marked "Required
| | `profile` | string | |
-#### Secured String
+### Secured String
In order to ensure sensitive data is not stored plaintext in a policy, `c7n-mailer` supports secured
strings. You can treat it as a regular `string` or use `secured string` features.
-##### AWS
+#### AWS
You can use KMS to encrypt your secrets and use encrypted secret in mailer policy.
Custodian tries to decrypt the string using KMS, if it fails c7n treats it as a plaintext secret.
```yaml
- plaintext_secret:
- secured_string:
+ plaintext_secret:
+ secured_string:
```
-##### Azure
+#### Azure
You can store your secrets in Azure Key Vault secrets and reference them from the policy.
```yaml
- plaintext_secret:
- secured_string:
- type: azure.keyvault
- secret: https://your-vault.vault.azure.net/secrets/your-secret
+ plaintext_secret:
+ secured_string:
+ type: azure.keyvault
+ secret: https://your-vault.vault.azure.net/secrets/your-secret
```
Note: `secrets.get` permission on the KeyVault for the Service Principal is required.
@@ -547,7 +547,7 @@ to:
This will find the email address associated with the resource's `OwnerEmail` tag, and send an email to the specified address.
If no tag is found, or the associated email address is invalid, no email will be sent.
-#### Deploying Azure Functions
+### Deploying Azure Functions
The `--update-lambda` CLI option will also deploy Azure Functions if you have an Azure
mailer configuration.
@@ -565,7 +565,7 @@ function_properties:
name: 'testmailer1'
```
-#### Configuring Function Identity
+### Configuring Function Identity
You can configure the service principal used for api calls made by the
mailer azure function by specifying an identity configuration under
@@ -677,7 +677,7 @@ the message file to be base64-encoded, gzipped JSON, just like c7n sends to SQS.
* With the ``-d`` | ``--dry-run`` argument, it will print the actual email body (including headers)
that would be sent, for each message that would be sent, to STDOUT.
-#### Testing Templates for Azure
+### Testing Templates for Azure
The ``c7n-mailer-replay`` entrypoint can be used to test templates for Azure with either of the arguments:
* ``-T`` | ``--template-print``
diff --git a/tools/c7n_mailer/c7n_mailer/azure_mailer/deploy.py b/tools/c7n_mailer/c7n_mailer/azure_mailer/deploy.py
index 4efd3830378..57a3e130913 100644
--- a/tools/c7n_mailer/c7n_mailer/azure_mailer/deploy.py
+++ b/tools/c7n_mailer/c7n_mailer/azure_mailer/deploy.py
@@ -27,7 +27,7 @@ def cache_path():
def get_mailer_requirements():
- deps = ['azure-mgmt-managementgroups', 'azure-mgmt-web',
+ deps = ['azure-identity', 'azure-mgmt-managementgroups', 'azure-mgmt-web',
'azure-graphrbac', 'azure-keyvault', 'azure-storage-queue',
'azure-storage-blob', 'netaddr', 'sendgrid', 'pyyaml'] + list(CORE_DEPS)
requirements = generate_requirements(
diff --git a/tools/c7n_mailer/c7n_mailer/azure_mailer/handle.py b/tools/c7n_mailer/c7n_mailer/azure_mailer/handle.py
index 4ccec10e50c..1e8eabe2134 100644
--- a/tools/c7n_mailer/c7n_mailer/azure_mailer/handle.py
+++ b/tools/c7n_mailer/c7n_mailer/azure_mailer/handle.py
@@ -11,7 +11,9 @@
def start_c7n_mailer(logger, config, auth_file):
try:
logger.info('c7n_mailer starting...')
- session = Session(authorization_file=auth_file, resource=STORAGE_AUTH_ENDPOINT)
+ session = Session(
+ authorization_file=auth_file,
+ resource_endpoint_type=STORAGE_AUTH_ENDPOINT)
mailer_azure_queue_processor = MailerAzureQueueProcessor(config, logger, session=session)
mailer_azure_queue_processor.run()
except Exception as e:
diff --git a/tools/c7n_mailer/c7n_mailer/slack_delivery.py b/tools/c7n_mailer/c7n_mailer/slack_delivery.py
index 20e95254a4e..910fcaf8abf 100644
--- a/tools/c7n_mailer/c7n_mailer/slack_delivery.py
+++ b/tools/c7n_mailer/c7n_mailer/slack_delivery.py
@@ -111,7 +111,7 @@ def slack_handler(self, sqs_message, slack_messages):
key)
)
- self.send_slack_msg(key, payload)
+ self.send_slack_msg(key, payload.encode('utf-8'))
def retrieve_user_im(self, email_addresses):
list = {}
@@ -167,7 +167,7 @@ def send_slack_msg(self, key, message_payload):
response = requests.post(
url=key,
data=message_payload,
- headers={'Content-Type': 'application/json'})
+ headers={'Content-Type': 'application/json;charset=utf-8'})
else:
response = requests.post(
url='https://slack.com/api/chat.postMessage',
diff --git a/tools/c7n_mailer/c7n_mailer/utils.py b/tools/c7n_mailer/c7n_mailer/utils.py
index 3be746c2d5a..55bf496245a 100644
--- a/tools/c7n_mailer/c7n_mailer/utils.py
+++ b/tools/c7n_mailer/c7n_mailer/utils.py
@@ -321,7 +321,7 @@ def resource_format(resource, resource_type):
resource['QueueArn'])
elif resource_type == "efs":
return "name: %s id: %s state: %s" % (
- resource['Name'],
+ resource.get('Name', ''),
resource['FileSystemId'],
resource['LifeCycleState']
)
@@ -354,6 +354,19 @@ def resource_format(resource, resource_type):
return "Name: %s RunTime: %s \n" % (
resource['FunctionName'],
resource['Runtime'])
+ elif resource_type == 'service-quota':
+ try:
+ return "ServiceName: %s QuotaName: %s Quota: %i Usage: %i\n" % (
+ resource['ServiceName'],
+ resource['QuotaName'],
+ resource['c7n:UsageMetric']['quota'],
+ resource['c7n:UsageMetric']['metric']
+ )
+ except KeyError:
+ return "ServiceName: %s QuotaName: %s\n" % (
+ resource['ServiceName'],
+ resource['QuotaName'],
+ )
else:
return "%s" % format_struct(resource)
diff --git a/tools/c7n_mailer/poetry.lock b/tools/c7n_mailer/poetry.lock
index 70dd4fe869c..fdcd8fd4b9e 100644
--- a/tools/c7n_mailer/poetry.lock
+++ b/tools/c7n_mailer/poetry.lock
@@ -8,29 +8,29 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
[[package]]
name = "attrs"
-version = "21.2.0"
+version = "21.4.0"
description = "Classes Without Boilerplate"
category = "main"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
[package.extras]
-dev = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "furo", "sphinx", "sphinx-notfound-page", "pre-commit"]
+dev = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "furo", "sphinx", "sphinx-notfound-page", "pre-commit", "cloudpickle"]
docs = ["furo", "sphinx", "zope.interface", "sphinx-notfound-page"]
-tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface"]
-tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins"]
+tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "cloudpickle"]
+tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "cloudpickle"]
[[package]]
name = "boto3"
-version = "1.18.21"
+version = "1.21.42"
description = "The AWS SDK for Python"
category = "main"
optional = false
python-versions = ">= 3.6"
[package.dependencies]
-botocore = ">=1.21.21,<1.22.0"
-jmespath = ">=0.7.1,<1.0.0"
+botocore = ">=1.24.42,<1.25.0"
+jmespath = ">=0.7.1,<2.0.0"
s3transfer = ">=0.5.0,<0.6.0"
[package.extras]
@@ -38,23 +38,23 @@ crt = ["botocore[crt] (>=1.21.0,<2.0a0)"]
[[package]]
name = "botocore"
-version = "1.21.21"
+version = "1.24.42"
description = "Low-level, data-driven core of boto 3."
category = "main"
optional = false
python-versions = ">= 3.6"
[package.dependencies]
-jmespath = ">=0.7.1,<1.0.0"
+jmespath = ">=0.7.1,<2.0.0"
python-dateutil = ">=2.1,<3.0.0"
urllib3 = ">=1.25.4,<1.27"
[package.extras]
-crt = ["awscrt (==0.11.24)"]
+crt = ["awscrt (==0.13.8)"]
[[package]]
name = "certifi"
-version = "2021.5.30"
+version = "2021.10.8"
description = "Python package for providing Mozilla's CA Bundle."
category = "main"
optional = false
@@ -62,7 +62,7 @@ python-versions = "*"
[[package]]
name = "charset-normalizer"
-version = "2.0.4"
+version = "2.0.12"
description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet."
category = "main"
optional = false
@@ -93,7 +93,7 @@ requests = ">=2.6.0"
[[package]]
name = "decorator"
-version = "5.0.9"
+version = "5.1.1"
description = "Decorators for Humans"
category = "main"
optional = false
@@ -101,24 +101,25 @@ python-versions = ">=3.5"
[[package]]
name = "fakeredis"
-version = "1.5.2"
+version = "1.7.1"
description = "Fake implementation of redis API for testing purposes."
category = "dev"
optional = false
python-versions = ">=3.5"
[package.dependencies]
-redis = "<3.6.0"
+packaging = "*"
+redis = "<4.2.0"
six = ">=1.12"
sortedcontainers = "*"
[package.extras]
-aioredis = ["aioredis (<2)"]
+aioredis = ["aioredis"]
lua = ["lupa"]
[[package]]
name = "idna"
-version = "3.2"
+version = "3.3"
description = "Internationalized Domain Names in Applications (IDNA)"
category = "main"
optional = false
@@ -126,20 +127,35 @@ python-versions = ">=3.5"
[[package]]
name = "importlib-metadata"
-version = "4.6.4"
+version = "4.11.3"
description = "Read metadata from Python packages"
category = "main"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.7"
[package.dependencies]
typing-extensions = {version = ">=3.6.4", markers = "python_version < \"3.8\""}
zipp = ">=0.5"
[package.extras]
-docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
+docs = ["sphinx", "jaraco.packaging (>=9)", "rst.linker (>=1.9)"]
perf = ["ipython"]
-testing = ["pytest (>=4.6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pep517", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy", "importlib-resources (>=1.3)"]
+testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)", "importlib-resources (>=1.3)"]
+
+[[package]]
+name = "importlib-resources"
+version = "5.7.1"
+description = "Read resources from Python packages"
+category = "main"
+optional = false
+python-versions = ">=3.7"
+
+[package.dependencies]
+zipp = {version = ">=3.1.0", markers = "python_version < \"3.10\""}
+
+[package.extras]
+docs = ["sphinx", "jaraco.packaging (>=9)", "rst.linker (>=1.9)"]
+testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)"]
[[package]]
name = "iniconfig"
@@ -151,11 +167,11 @@ python-versions = "*"
[[package]]
name = "jinja2"
-version = "3.0.1"
+version = "3.1.1"
description = "A very fast and expressive template engine."
category = "main"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.7"
[package.dependencies]
MarkupSafe = ">=2.0"
@@ -165,11 +181,11 @@ i18n = ["Babel (>=2.7)"]
[[package]]
name = "jmespath"
-version = "0.10.0"
+version = "1.0.0"
description = "JSON Matching Expressions"
category = "main"
optional = false
-python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*"
+python-versions = ">=3.7"
[[package]]
name = "jsonpatch"
@@ -184,7 +200,7 @@ jsonpointer = ">=1.9"
[[package]]
name = "jsonpointer"
-version = "2.1"
+version = "2.3"
description = "Identify specific nodes in a JSON document (RFC 6901)"
category = "main"
optional = false
@@ -192,21 +208,22 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
[[package]]
name = "jsonschema"
-version = "3.2.0"
+version = "4.4.0"
description = "An implementation of JSON Schema validation for Python"
category = "main"
optional = false
-python-versions = "*"
+python-versions = ">=3.7"
[package.dependencies]
attrs = ">=17.4.0"
importlib-metadata = {version = "*", markers = "python_version < \"3.8\""}
-pyrsistent = ">=0.14.0"
-six = ">=1.11.0"
+importlib-resources = {version = ">=1.4.0", markers = "python_version < \"3.9\""}
+pyrsistent = ">=0.14.0,<0.17.0 || >0.17.0,<0.17.1 || >0.17.1,<0.17.2 || >0.17.2"
+typing-extensions = {version = "*", markers = "python_version < \"3.8\""}
[package.extras]
-format = ["idna", "jsonpointer (>1.13)", "rfc3987", "strict-rfc3339", "webcolors"]
-format_nongpl = ["idna", "jsonpointer (>1.13)", "webcolors", "rfc3986-validator (>0.1.0)", "rfc3339-validator"]
+format = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3987", "uri-template", "webcolors (>=1.11)"]
+format_nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3986-validator (>0.1.0)", "uri-template", "webcolors (>=1.11)"]
[[package]]
name = "ldap3"
@@ -221,44 +238,45 @@ pyasn1 = ">=0.4.6"
[[package]]
name = "markupsafe"
-version = "2.0.1"
+version = "2.1.1"
description = "Safely add untrusted strings to HTML/XML markup."
category = "main"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.7"
[[package]]
name = "packaging"
-version = "21.0"
+version = "21.3"
description = "Core utilities for Python packages"
category = "dev"
optional = false
python-versions = ">=3.6"
[package.dependencies]
-pyparsing = ">=2.0.2"
+pyparsing = ">=2.0.2,<3.0.5 || >3.0.5"
[[package]]
name = "pluggy"
-version = "0.13.1"
+version = "1.0.0"
description = "plugin and hook calling mechanisms for python"
category = "dev"
optional = false
-python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
+python-versions = ">=3.6"
[package.dependencies]
importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""}
[package.extras]
dev = ["pre-commit", "tox"]
+testing = ["pytest", "pytest-benchmark"]
[[package]]
name = "py"
-version = "1.10.0"
+version = "1.11.0"
description = "library with cross-python path, ini-parsing, io, code, log facilities"
category = "dev"
optional = false
-python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
[[package]]
name = "pyasn1"
@@ -270,23 +288,26 @@ python-versions = "*"
[[package]]
name = "pyparsing"
-version = "2.4.7"
-description = "Python parsing module"
+version = "3.0.8"
+description = "pyparsing module - Classes and methods to define and execute parsing grammars"
category = "dev"
optional = false
-python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*"
+python-versions = ">=3.6.8"
+
+[package.extras]
+diagrams = ["railroad-diagrams", "jinja2"]
[[package]]
name = "pyrsistent"
-version = "0.18.0"
+version = "0.18.1"
description = "Persistent/Functional/Immutable data structures"
category = "main"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.7"
[[package]]
name = "pytest"
-version = "6.2.4"
+version = "6.2.5"
description = "pytest: simple powerful testing with Python"
category = "dev"
optional = false
@@ -299,7 +320,7 @@ colorama = {version = "*", markers = "sys_platform == \"win32\""}
importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""}
iniconfig = "*"
packaging = "*"
-pluggy = ">=0.12,<1.0.0a1"
+pluggy = ">=0.12,<2.0"
py = ">=1.8.2"
toml = "*"
@@ -319,7 +340,7 @@ six = ">=1.5"
[[package]]
name = "python-http-client"
-version = "3.3.2"
+version = "3.3.7"
description = "HTTP REST client, simplified for Python"
category = "main"
optional = false
@@ -327,11 +348,11 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
[[package]]
name = "pyyaml"
-version = "5.4.1"
+version = "6.0"
description = "YAML parser and emitter for Python"
category = "main"
optional = false
-python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*"
+python-versions = ">=3.6"
[[package]]
name = "redis"
@@ -346,7 +367,7 @@ hiredis = ["hiredis (>=0.1.3)"]
[[package]]
name = "requests"
-version = "2.26.0"
+version = "2.27.1"
description = "Python HTTP for Humans."
category = "main"
optional = false
@@ -364,7 +385,7 @@ use_chardet_on_py3 = ["chardet (>=3.0.2,<5)"]
[[package]]
name = "s3transfer"
-version = "0.5.0"
+version = "0.5.2"
description = "An Amazon S3 Transfer Manager"
category = "main"
optional = false
@@ -378,7 +399,7 @@ crt = ["botocore[crt] (>=1.20.29,<2.0a.0)"]
[[package]]
name = "sendgrid"
-version = "6.8.0"
+version = "6.9.7"
description = "Twilio SendGrid library for Python"
category = "main"
optional = false
@@ -386,7 +407,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
[package.dependencies]
python-http-client = ">=3.2.1"
-starkbank-ecdsa = ">=1.0.0"
+starkbank-ecdsa = ">=2.0.1"
[[package]]
name = "six"
@@ -406,7 +427,7 @@ python-versions = "*"
[[package]]
name = "starkbank-ecdsa"
-version = "1.1.1"
+version = "2.0.3"
description = "A lightweight and fast pure python ECDSA library"
category = "main"
optional = false
@@ -422,41 +443,41 @@ python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*"
[[package]]
name = "typing-extensions"
-version = "3.10.0.0"
-description = "Backported and Experimental Type Hints for Python 3.5+"
+version = "4.2.0"
+description = "Backported and Experimental Type Hints for Python 3.7+"
category = "main"
optional = false
-python-versions = "*"
+python-versions = ">=3.7"
[[package]]
name = "urllib3"
-version = "1.26.6"
+version = "1.26.9"
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.*, <4"
[package.extras]
-brotli = ["brotlipy (>=0.6.0)"]
+brotli = ["brotlicffi (>=0.8.0)", "brotli (>=1.0.9)", "brotlipy (>=0.6.0)"]
secure = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "certifi", "ipaddress"]
socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"]
[[package]]
name = "zipp"
-version = "3.5.0"
+version = "3.8.0"
description = "Backport of pathlib-compatible object wrapper for zip files"
category = "main"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.7"
[package.extras]
-docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
-testing = ["pytest (>=4.6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "jaraco.itertools", "func-timeout", "pytest-black (>=0.3.7)", "pytest-mypy"]
+docs = ["sphinx", "jaraco.packaging (>=9)", "rst.linker (>=1.9)"]
+testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "jaraco.itertools", "func-timeout", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)"]
[metadata]
lock-version = "1.1"
-python-versions = "^3.6"
-content-hash = "a8526296adf627c04632fe02c0dff89f57a709d227fbbb2e053a969eb8b15d46"
+python-versions = "^3.7"
+content-hash = "0af1804423b1f01cc98ba5a7e9efc33b991e33a4687c7dffe601943abf01f6cd"
[metadata.files]
atomicwrites = [
@@ -464,24 +485,24 @@ atomicwrites = [
{file = "atomicwrites-1.4.0.tar.gz", hash = "sha256:ae70396ad1a434f9c7046fd2dd196fc04b12f9e91ffb859164193be8b6168a7a"},
]
attrs = [
- {file = "attrs-21.2.0-py2.py3-none-any.whl", hash = "sha256:149e90d6d8ac20db7a955ad60cf0e6881a3f20d37096140088356da6c716b0b1"},
- {file = "attrs-21.2.0.tar.gz", hash = "sha256:ef6aaac3ca6cd92904cdd0d83f629a15f18053ec84e6432106f7a4d04ae4f5fb"},
+ {file = "attrs-21.4.0-py2.py3-none-any.whl", hash = "sha256:2d27e3784d7a565d36ab851fe94887c5eccd6a463168875832a1be79c82828b4"},
+ {file = "attrs-21.4.0.tar.gz", hash = "sha256:626ba8234211db98e869df76230a137c4c40a12d72445c45d5f5b716f076e2fd"},
]
boto3 = [
- {file = "boto3-1.18.21-py3-none-any.whl", hash = "sha256:59b6e8e79b2114e21388288a06a004f2a9378b1e0fc58466a35da8fb74fe2dd8"},
- {file = "boto3-1.18.21.tar.gz", hash = "sha256:00748c760dc30be61c6db4b092718f6a9f8d27c767da0e232695a65adb75cde8"},
+ {file = "boto3-1.21.42-py3-none-any.whl", hash = "sha256:895fb88c69be78f82cfee58a79c97a3ad8d4a2a1209041a411d7d6b9fc5393e4"},
+ {file = "boto3-1.21.42.tar.gz", hash = "sha256:bcb541175a7d190dd919a0af0e807ee6e9d26f135551e741b10d94343f2d7588"},
]
botocore = [
- {file = "botocore-1.21.21-py3-none-any.whl", hash = "sha256:fa5ac13829d24fcdd385e82c3b6d78e22d93f427cca8dac38158cae84a8cc2f5"},
- {file = "botocore-1.21.21.tar.gz", hash = "sha256:12cfe74b0a5c44afb34bdd86c1f8ad74bc2ad9ec168eaed9040ef70cb3db944f"},
+ {file = "botocore-1.24.42-py3-none-any.whl", hash = "sha256:14aee41c8bf59d2dd2d89e8751fa37d3c95dcb92707d1966aa02697e914c1417"},
+ {file = "botocore-1.24.42.tar.gz", hash = "sha256:a2baa9484bbaee96ef312c049b8e360badcab58329e487b57567644a571b5f4a"},
]
certifi = [
- {file = "certifi-2021.5.30-py2.py3-none-any.whl", hash = "sha256:50b1e4f8446b06f41be7dd6338db18e0990601dce795c2b1686458aa7e8fa7d8"},
- {file = "certifi-2021.5.30.tar.gz", hash = "sha256:2bbf76fd432960138b3ef6dda3dde0544f27cbf8546c458e60baf371917ba9ee"},
+ {file = "certifi-2021.10.8-py2.py3-none-any.whl", hash = "sha256:d62a0163eb4c2344ac042ab2bdf75399a71a2d8c7d47eac2e2ee91b9d6339569"},
+ {file = "certifi-2021.10.8.tar.gz", hash = "sha256:78884e7c1d4b00ce3cea67b44566851c4343c120abd683433ce934a68ea58872"},
]
charset-normalizer = [
- {file = "charset-normalizer-2.0.4.tar.gz", hash = "sha256:f23667ebe1084be45f6ae0538e4a5a865206544097e4e8bbcacf42cd02a348f3"},
- {file = "charset_normalizer-2.0.4-py3-none-any.whl", hash = "sha256:0c8911edd15d19223366a194a513099a302055a962bca2cec0f54b8b63175d8b"},
+ {file = "charset-normalizer-2.0.12.tar.gz", hash = "sha256:2857e29ff0d34db842cd7ca3230549d1a697f96ee6d3fb071cfa6c7393832597"},
+ {file = "charset_normalizer-2.0.12-py3-none-any.whl", hash = "sha256:6881edbebdb17b39b4eaaa821b438bf6eddffb4468cf344f09f89def34a8b1df"},
]
colorama = [
{file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"},
@@ -492,44 +513,48 @@ datadog = [
{file = "datadog-0.34.1.tar.gz", hash = "sha256:3bd8cc3d6915c6ac74c68093068b903de3fae22b8dd3d31480bfc2092a1f51d7"},
]
decorator = [
- {file = "decorator-5.0.9-py3-none-any.whl", hash = "sha256:6e5c199c16f7a9f0e3a61a4a54b3d27e7dad0dbdde92b944426cb20914376323"},
- {file = "decorator-5.0.9.tar.gz", hash = "sha256:72ecfba4320a893c53f9706bebb2d55c270c1e51a28789361aa93e4a21319ed5"},
+ {file = "decorator-5.1.1-py3-none-any.whl", hash = "sha256:b8c3f85900b9dc423225913c5aace94729fe1fa9763b38939a95226f02d37186"},
+ {file = "decorator-5.1.1.tar.gz", hash = "sha256:637996211036b6385ef91435e4fae22989472f9d571faba8927ba8253acbc330"},
]
fakeredis = [
- {file = "fakeredis-1.5.2-py3-none-any.whl", hash = "sha256:f1ffdb134538e6d7c909ddfb4fc5edeb4a73d0ea07245bc69b8135fbc4144b04"},
- {file = "fakeredis-1.5.2.tar.gz", hash = "sha256:18fc1808d2ce72169d3f11acdb524a00ef96bd29970c6d34cfeb2edb3fc0c020"},
+ {file = "fakeredis-1.7.1-py3-none-any.whl", hash = "sha256:be3668e50f6b57d5fc4abfd27f9f655bed07a2c5aecfc8b15d0aad59f997c1ba"},
+ {file = "fakeredis-1.7.1.tar.gz", hash = "sha256:7c2c4ba1b42e0a75337c54b777bf0671056b4569650e3ff927e4b9b385afc8ec"},
]
idna = [
- {file = "idna-3.2-py3-none-any.whl", hash = "sha256:14475042e284991034cb48e06f6851428fb14c4dc953acd9be9a5e95c7b6dd7a"},
- {file = "idna-3.2.tar.gz", hash = "sha256:467fbad99067910785144ce333826c71fb0e63a425657295239737f7ecd125f3"},
+ {file = "idna-3.3-py3-none-any.whl", hash = "sha256:84d9dd047ffa80596e0f246e2eab0b391788b0503584e8945f2368256d2735ff"},
+ {file = "idna-3.3.tar.gz", hash = "sha256:9d643ff0a55b762d5cdb124b8eaa99c66322e2157b69160bc32796e824360e6d"},
]
importlib-metadata = [
- {file = "importlib_metadata-4.6.4-py3-none-any.whl", hash = "sha256:ed5157fef23a4bc4594615a0dd8eba94b2bb36bf2a343fa3d8bb2fa0a62a99d5"},
- {file = "importlib_metadata-4.6.4.tar.gz", hash = "sha256:7b30a78db2922d78a6f47fb30683156a14f3c6aa5cc23f77cc8967e9ab2d002f"},
+ {file = "importlib_metadata-4.11.3-py3-none-any.whl", hash = "sha256:1208431ca90a8cca1a6b8af391bb53c1a2db74e5d1cef6ddced95d4b2062edc6"},
+ {file = "importlib_metadata-4.11.3.tar.gz", hash = "sha256:ea4c597ebf37142f827b8f39299579e31685c31d3a438b59f469406afd0f2539"},
+]
+importlib-resources = [
+ {file = "importlib_resources-5.7.1-py3-none-any.whl", hash = "sha256:e447dc01619b1e951286f3929be820029d48c75eb25d265c28b92a16548212b8"},
+ {file = "importlib_resources-5.7.1.tar.gz", hash = "sha256:b6062987dfc51f0fcb809187cffbd60f35df7acb4589091f154214af6d0d49d3"},
]
iniconfig = [
{file = "iniconfig-1.1.1-py2.py3-none-any.whl", hash = "sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3"},
{file = "iniconfig-1.1.1.tar.gz", hash = "sha256:bc3af051d7d14b2ee5ef9969666def0cd1a000e121eaea580d4a313df4b37f32"},
]
jinja2 = [
- {file = "Jinja2-3.0.1-py3-none-any.whl", hash = "sha256:1f06f2da51e7b56b8f238affdd6b4e2c61e39598a378cc49345bc1bd42a978a4"},
- {file = "Jinja2-3.0.1.tar.gz", hash = "sha256:703f484b47a6af502e743c9122595cc812b0271f661722403114f71a79d0f5a4"},
+ {file = "Jinja2-3.1.1-py3-none-any.whl", hash = "sha256:539835f51a74a69f41b848a9645dbdc35b4f20a3b601e2d9a7e22947b15ff119"},
+ {file = "Jinja2-3.1.1.tar.gz", hash = "sha256:640bed4bb501cbd17194b3cace1dc2126f5b619cf068a726b98192a0fde74ae9"},
]
jmespath = [
- {file = "jmespath-0.10.0-py2.py3-none-any.whl", hash = "sha256:cdf6525904cc597730141d61b36f2e4b8ecc257c420fa2f4549bac2c2d0cb72f"},
- {file = "jmespath-0.10.0.tar.gz", hash = "sha256:b85d0567b8666149a93172712e68920734333c0ce7e89b78b3e987f71e5ed4f9"},
+ {file = "jmespath-1.0.0-py3-none-any.whl", hash = "sha256:e8dcd576ed616f14ec02eed0005c85973b5890083313860136657e24784e4c04"},
+ {file = "jmespath-1.0.0.tar.gz", hash = "sha256:a490e280edd1f57d6de88636992d05b71e97d69a26a19f058ecf7d304474bf5e"},
]
jsonpatch = [
{file = "jsonpatch-1.32-py2.py3-none-any.whl", hash = "sha256:26ac385719ac9f54df8a2f0827bb8253aa3ea8ab7b3368457bcdb8c14595a397"},
{file = "jsonpatch-1.32.tar.gz", hash = "sha256:b6ddfe6c3db30d81a96aaeceb6baf916094ffa23d7dd5fa2c13e13f8b6e600c2"},
]
jsonpointer = [
- {file = "jsonpointer-2.1-py2.py3-none-any.whl", hash = "sha256:150f80c5badd02c757da6644852f612f88e8b4bc2f9852dcbf557c8738919686"},
- {file = "jsonpointer-2.1.tar.gz", hash = "sha256:5a34b698db1eb79ceac454159d3f7c12a451a91f6334a4f638454327b7a89962"},
+ {file = "jsonpointer-2.3-py2.py3-none-any.whl", hash = "sha256:51801e558539b4e9cd268638c078c6c5746c9ac96bc38152d443400e4f3793e9"},
+ {file = "jsonpointer-2.3.tar.gz", hash = "sha256:97cba51526c829282218feb99dab1b1e6bdf8efd1c43dc9d57be093c0d69c99a"},
]
jsonschema = [
- {file = "jsonschema-3.2.0-py2.py3-none-any.whl", hash = "sha256:4e5b3cf8216f577bee9ce139cbe72eca3ea4f292ec60928ff24758ce626cd163"},
- {file = "jsonschema-3.2.0.tar.gz", hash = "sha256:c8a85b28d377cc7737e46e2d9f2b4f44ee3c0e1deac6bf46ddefc7187d30797a"},
+ {file = "jsonschema-4.4.0-py3-none-any.whl", hash = "sha256:77281a1f71684953ee8b3d488371b162419767973789272434bbc3f29d9c8823"},
+ {file = "jsonschema-4.4.0.tar.gz", hash = "sha256:636694eb41b3535ed608fe04129f26542b59ed99808b4f688aa32dcf55317a83"},
]
ldap3 = [
{file = "ldap3-2.9.1-py2.6.egg", hash = "sha256:5ab7febc00689181375de40c396dcad4f2659cd260fc5e94c508b6d77c17e9d5"},
@@ -539,52 +564,58 @@ ldap3 = [
{file = "ldap3-2.9.1.tar.gz", hash = "sha256:f3e7fc4718e3f09dda568b57100095e0ce58633bcabbed8667ce3f8fbaa4229f"},
]
markupsafe = [
- {file = "MarkupSafe-2.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:f9081981fe268bd86831e5c75f7de206ef275defcb82bc70740ae6dc507aee51"},
- {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:0955295dd5eec6cb6cc2fe1698f4c6d84af2e92de33fbcac4111913cd100a6ff"},
- {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:0446679737af14f45767963a1a9ef7620189912317d095f2d9ffa183a4d25d2b"},
- {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:f826e31d18b516f653fe296d967d700fddad5901ae07c622bb3705955e1faa94"},
- {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:fa130dd50c57d53368c9d59395cb5526eda596d3ffe36666cd81a44d56e48872"},
- {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:905fec760bd2fa1388bb5b489ee8ee5f7291d692638ea5f67982d968366bef9f"},
- {file = "MarkupSafe-2.0.1-cp36-cp36m-win32.whl", hash = "sha256:6c4ca60fa24e85fe25b912b01e62cb969d69a23a5d5867682dd3e80b5b02581d"},
- {file = "MarkupSafe-2.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:b2f4bf27480f5e5e8ce285a8c8fd176c0b03e93dcc6646477d4630e83440c6a9"},
- {file = "MarkupSafe-2.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:0717a7390a68be14b8c793ba258e075c6f4ca819f15edfc2a3a027c823718567"},
- {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:6557b31b5e2c9ddf0de32a691f2312a32f77cd7681d8af66c2692efdbef84c18"},
- {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:49e3ceeabbfb9d66c3aef5af3a60cc43b85c33df25ce03d0031a608b0a8b2e3f"},
- {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:d7f9850398e85aba693bb640262d3611788b1f29a79f0c93c565694658f4071f"},
- {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:6a7fae0dd14cf60ad5ff42baa2e95727c3d81ded453457771d02b7d2b3f9c0c2"},
- {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:b7f2d075102dc8c794cbde1947378051c4e5180d52d276987b8d28a3bd58c17d"},
- {file = "MarkupSafe-2.0.1-cp37-cp37m-win32.whl", hash = "sha256:a30e67a65b53ea0a5e62fe23682cfe22712e01f453b95233b25502f7c61cb415"},
- {file = "MarkupSafe-2.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:611d1ad9a4288cf3e3c16014564df047fe08410e628f89805e475368bd304914"},
- {file = "MarkupSafe-2.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:be98f628055368795d818ebf93da628541e10b75b41c559fdf36d104c5787066"},
- {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux1_i686.whl", hash = "sha256:1d609f577dc6e1aa17d746f8bd3c31aa4d258f4070d61b2aa5c4166c1539de35"},
- {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:7d91275b0245b1da4d4cfa07e0faedd5b0812efc15b702576d103293e252af1b"},
- {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:01a9b8ea66f1658938f65b93a85ebe8bc016e6769611be228d797c9d998dd298"},
- {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:47ab1e7b91c098ab893b828deafa1203de86d0bc6ab587b160f78fe6c4011f75"},
- {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:97383d78eb34da7e1fa37dd273c20ad4320929af65d156e35a5e2d89566d9dfb"},
- {file = "MarkupSafe-2.0.1-cp38-cp38-win32.whl", hash = "sha256:023cb26ec21ece8dc3907c0e8320058b2e0cb3c55cf9564da612bc325bed5e64"},
- {file = "MarkupSafe-2.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:984d76483eb32f1bcb536dc27e4ad56bba4baa70be32fa87152832cdd9db0833"},
- {file = "MarkupSafe-2.0.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:2ef54abee730b502252bcdf31b10dacb0a416229b72c18b19e24a4509f273d26"},
- {file = "MarkupSafe-2.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3c112550557578c26af18a1ccc9e090bfe03832ae994343cfdacd287db6a6ae7"},
- {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux1_i686.whl", hash = "sha256:53edb4da6925ad13c07b6d26c2a852bd81e364f95301c66e930ab2aef5b5ddd8"},
- {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:f5653a225f31e113b152e56f154ccbe59eeb1c7487b39b9d9f9cdb58e6c79dc5"},
- {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:4efca8f86c54b22348a5467704e3fec767b2db12fc39c6d963168ab1d3fc9135"},
- {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:ab3ef638ace319fa26553db0624c4699e31a28bb2a835c5faca8f8acf6a5a902"},
- {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:f8ba0e8349a38d3001fae7eadded3f6606f0da5d748ee53cc1dab1d6527b9509"},
- {file = "MarkupSafe-2.0.1-cp39-cp39-win32.whl", hash = "sha256:10f82115e21dc0dfec9ab5c0223652f7197feb168c940f3ef61563fc2d6beb74"},
- {file = "MarkupSafe-2.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:693ce3f9e70a6cf7d2fb9e6c9d8b204b6b39897a2c4a1aa65728d5ac97dcc1d8"},
- {file = "MarkupSafe-2.0.1.tar.gz", hash = "sha256:594c67807fb16238b30c44bdf74f36c02cdf22d1c8cda91ef8a0ed8dabf5620a"},
+ {file = "MarkupSafe-2.1.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:86b1f75c4e7c2ac2ccdaec2b9022845dbb81880ca318bb7a0a01fbf7813e3812"},
+ {file = "MarkupSafe-2.1.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f121a1420d4e173a5d96e47e9a0c0dcff965afdf1626d28de1460815f7c4ee7a"},
+ {file = "MarkupSafe-2.1.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a49907dd8420c5685cfa064a1335b6754b74541bbb3706c259c02ed65b644b3e"},
+ {file = "MarkupSafe-2.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:10c1bfff05d95783da83491be968e8fe789263689c02724e0c691933c52994f5"},
+ {file = "MarkupSafe-2.1.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b7bd98b796e2b6553da7225aeb61f447f80a1ca64f41d83612e6139ca5213aa4"},
+ {file = "MarkupSafe-2.1.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:b09bf97215625a311f669476f44b8b318b075847b49316d3e28c08e41a7a573f"},
+ {file = "MarkupSafe-2.1.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:694deca8d702d5db21ec83983ce0bb4b26a578e71fbdbd4fdcd387daa90e4d5e"},
+ {file = "MarkupSafe-2.1.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:efc1913fd2ca4f334418481c7e595c00aad186563bbc1ec76067848c7ca0a933"},
+ {file = "MarkupSafe-2.1.1-cp310-cp310-win32.whl", hash = "sha256:4a33dea2b688b3190ee12bd7cfa29d39c9ed176bda40bfa11099a3ce5d3a7ac6"},
+ {file = "MarkupSafe-2.1.1-cp310-cp310-win_amd64.whl", hash = "sha256:dda30ba7e87fbbb7eab1ec9f58678558fd9a6b8b853530e176eabd064da81417"},
+ {file = "MarkupSafe-2.1.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:671cd1187ed5e62818414afe79ed29da836dde67166a9fac6d435873c44fdd02"},
+ {file = "MarkupSafe-2.1.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3799351e2336dc91ea70b034983ee71cf2f9533cdff7c14c90ea126bfd95d65a"},
+ {file = "MarkupSafe-2.1.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e72591e9ecd94d7feb70c1cbd7be7b3ebea3f548870aa91e2732960fa4d57a37"},
+ {file = "MarkupSafe-2.1.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6fbf47b5d3728c6aea2abb0589b5d30459e369baa772e0f37a0320185e87c980"},
+ {file = "MarkupSafe-2.1.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:d5ee4f386140395a2c818d149221149c54849dfcfcb9f1debfe07a8b8bd63f9a"},
+ {file = "MarkupSafe-2.1.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:bcb3ed405ed3222f9904899563d6fc492ff75cce56cba05e32eff40e6acbeaa3"},
+ {file = "MarkupSafe-2.1.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:e1c0b87e09fa55a220f058d1d49d3fb8df88fbfab58558f1198e08c1e1de842a"},
+ {file = "MarkupSafe-2.1.1-cp37-cp37m-win32.whl", hash = "sha256:8dc1c72a69aa7e082593c4a203dcf94ddb74bb5c8a731e4e1eb68d031e8498ff"},
+ {file = "MarkupSafe-2.1.1-cp37-cp37m-win_amd64.whl", hash = "sha256:97a68e6ada378df82bc9f16b800ab77cbf4b2fada0081794318520138c088e4a"},
+ {file = "MarkupSafe-2.1.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:e8c843bbcda3a2f1e3c2ab25913c80a3c5376cd00c6e8c4a86a89a28c8dc5452"},
+ {file = "MarkupSafe-2.1.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0212a68688482dc52b2d45013df70d169f542b7394fc744c02a57374a4207003"},
+ {file = "MarkupSafe-2.1.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e576a51ad59e4bfaac456023a78f6b5e6e7651dcd383bcc3e18d06f9b55d6d1"},
+ {file = "MarkupSafe-2.1.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4b9fe39a2ccc108a4accc2676e77da025ce383c108593d65cc909add5c3bd601"},
+ {file = "MarkupSafe-2.1.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:96e37a3dc86e80bf81758c152fe66dbf60ed5eca3d26305edf01892257049925"},
+ {file = "MarkupSafe-2.1.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6d0072fea50feec76a4c418096652f2c3238eaa014b2f94aeb1d56a66b41403f"},
+ {file = "MarkupSafe-2.1.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:089cf3dbf0cd6c100f02945abeb18484bd1ee57a079aefd52cffd17fba910b88"},
+ {file = "MarkupSafe-2.1.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:6a074d34ee7a5ce3effbc526b7083ec9731bb3cbf921bbe1d3005d4d2bdb3a63"},
+ {file = "MarkupSafe-2.1.1-cp38-cp38-win32.whl", hash = "sha256:421be9fbf0ffe9ffd7a378aafebbf6f4602d564d34be190fc19a193232fd12b1"},
+ {file = "MarkupSafe-2.1.1-cp38-cp38-win_amd64.whl", hash = "sha256:fc7b548b17d238737688817ab67deebb30e8073c95749d55538ed473130ec0c7"},
+ {file = "MarkupSafe-2.1.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:e04e26803c9c3851c931eac40c695602c6295b8d432cbe78609649ad9bd2da8a"},
+ {file = "MarkupSafe-2.1.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b87db4360013327109564f0e591bd2a3b318547bcef31b468a92ee504d07ae4f"},
+ {file = "MarkupSafe-2.1.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:99a2a507ed3ac881b975a2976d59f38c19386d128e7a9a18b7df6fff1fd4c1d6"},
+ {file = "MarkupSafe-2.1.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:56442863ed2b06d19c37f94d999035e15ee982988920e12a5b4ba29b62ad1f77"},
+ {file = "MarkupSafe-2.1.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3ce11ee3f23f79dbd06fb3d63e2f6af7b12db1d46932fe7bd8afa259a5996603"},
+ {file = "MarkupSafe-2.1.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:33b74d289bd2f5e527beadcaa3f401e0df0a89927c1559c8566c066fa4248ab7"},
+ {file = "MarkupSafe-2.1.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:43093fb83d8343aac0b1baa75516da6092f58f41200907ef92448ecab8825135"},
+ {file = "MarkupSafe-2.1.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8e3dcf21f367459434c18e71b2a9532d96547aef8a871872a5bd69a715c15f96"},
+ {file = "MarkupSafe-2.1.1-cp39-cp39-win32.whl", hash = "sha256:d4306c36ca495956b6d568d276ac11fdd9c30a36f1b6eb928070dc5360b22e1c"},
+ {file = "MarkupSafe-2.1.1-cp39-cp39-win_amd64.whl", hash = "sha256:46d00d6cfecdde84d40e572d63735ef81423ad31184100411e6e3388d405e247"},
+ {file = "MarkupSafe-2.1.1.tar.gz", hash = "sha256:7f91197cc9e48f989d12e4e6fbc46495c446636dfc81b9ccf50bb0ec74b91d4b"},
]
packaging = [
- {file = "packaging-21.0-py3-none-any.whl", hash = "sha256:c86254f9220d55e31cc94d69bade760f0847da8000def4dfe1c6b872fd14ff14"},
- {file = "packaging-21.0.tar.gz", hash = "sha256:7dc96269f53a4ccec5c0670940a4281106dd0bb343f47b7471f779df49c2fbe7"},
+ {file = "packaging-21.3-py3-none-any.whl", hash = "sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522"},
+ {file = "packaging-21.3.tar.gz", hash = "sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb"},
]
pluggy = [
- {file = "pluggy-0.13.1-py2.py3-none-any.whl", hash = "sha256:966c145cd83c96502c3c3868f50408687b38434af77734af1e9ca461a4081d2d"},
- {file = "pluggy-0.13.1.tar.gz", hash = "sha256:15b2acde666561e1298d71b523007ed7364de07029219b604cf808bfa1c765b0"},
+ {file = "pluggy-1.0.0-py2.py3-none-any.whl", hash = "sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3"},
+ {file = "pluggy-1.0.0.tar.gz", hash = "sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159"},
]
py = [
- {file = "py-1.10.0-py2.py3-none-any.whl", hash = "sha256:3b80836aa6d1feeaa108e046da6423ab8f6ceda6468545ae8d02d9d58d18818a"},
- {file = "py-1.10.0.tar.gz", hash = "sha256:21b81bda15b66ef5e1a777a21c4dcd9c20ad3efd0b3f817e7a809035269e1bd3"},
+ {file = "py-1.11.0-py2.py3-none-any.whl", hash = "sha256:607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378"},
+ {file = "py-1.11.0.tar.gz", hash = "sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719"},
]
pyasn1 = [
{file = "pyasn1-0.4.8-py2.4.egg", hash = "sha256:fec3e9d8e36808a28efb59b489e4528c10ad0f480e57dcc32b4de5c9d8c9fdf3"},
@@ -602,81 +633,94 @@ pyasn1 = [
{file = "pyasn1-0.4.8.tar.gz", hash = "sha256:aef77c9fb94a3ac588e87841208bdec464471d9871bd5050a287cc9a475cd0ba"},
]
pyparsing = [
- {file = "pyparsing-2.4.7-py2.py3-none-any.whl", hash = "sha256:ef9d7589ef3c200abe66653d3f1ab1033c3c419ae9b9bdb1240a85b024efc88b"},
- {file = "pyparsing-2.4.7.tar.gz", hash = "sha256:c203ec8783bf771a155b207279b9bccb8dea02d8f0c9e5f8ead507bc3246ecc1"},
+ {file = "pyparsing-3.0.8-py3-none-any.whl", hash = "sha256:ef7b523f6356f763771559412c0d7134753f037822dad1b16945b7b846f7ad06"},
+ {file = "pyparsing-3.0.8.tar.gz", hash = "sha256:7bf433498c016c4314268d95df76c81b842a4cb2b276fa3312cfb1e1d85f6954"},
]
pyrsistent = [
- {file = "pyrsistent-0.18.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:f4c8cabb46ff8e5d61f56a037974228e978f26bfefce4f61a4b1ac0ba7a2ab72"},
- {file = "pyrsistent-0.18.0-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:da6e5e818d18459fa46fac0a4a4e543507fe1110e808101277c5a2b5bab0cd2d"},
- {file = "pyrsistent-0.18.0-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:5e4395bbf841693eaebaa5bb5c8f5cdbb1d139e07c975c682ec4e4f8126e03d2"},
- {file = "pyrsistent-0.18.0-cp36-cp36m-win32.whl", hash = "sha256:527be2bfa8dc80f6f8ddd65242ba476a6c4fb4e3aedbf281dfbac1b1ed4165b1"},
- {file = "pyrsistent-0.18.0-cp36-cp36m-win_amd64.whl", hash = "sha256:2aaf19dc8ce517a8653746d98e962ef480ff34b6bc563fc067be6401ffb457c7"},
- {file = "pyrsistent-0.18.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:58a70d93fb79dc585b21f9d72487b929a6fe58da0754fa4cb9f279bb92369396"},
- {file = "pyrsistent-0.18.0-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:4916c10896721e472ee12c95cdc2891ce5890898d2f9907b1b4ae0f53588b710"},
- {file = "pyrsistent-0.18.0-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:73ff61b1411e3fb0ba144b8f08d6749749775fe89688093e1efef9839d2dcc35"},
- {file = "pyrsistent-0.18.0-cp37-cp37m-win32.whl", hash = "sha256:b29b869cf58412ca5738d23691e96d8aff535e17390128a1a52717c9a109da4f"},
- {file = "pyrsistent-0.18.0-cp37-cp37m-win_amd64.whl", hash = "sha256:097b96f129dd36a8c9e33594e7ebb151b1515eb52cceb08474c10a5479e799f2"},
- {file = "pyrsistent-0.18.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:772e94c2c6864f2cd2ffbe58bb3bdefbe2a32afa0acb1a77e472aac831f83427"},
- {file = "pyrsistent-0.18.0-cp38-cp38-manylinux1_i686.whl", hash = "sha256:c1a9ff320fa699337e05edcaae79ef8c2880b52720bc031b219e5b5008ebbdef"},
- {file = "pyrsistent-0.18.0-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:cd3caef37a415fd0dae6148a1b6957a8c5f275a62cca02e18474608cb263640c"},
- {file = "pyrsistent-0.18.0-cp38-cp38-win32.whl", hash = "sha256:e79d94ca58fcafef6395f6352383fa1a76922268fa02caa2272fff501c2fdc78"},
- {file = "pyrsistent-0.18.0-cp38-cp38-win_amd64.whl", hash = "sha256:a0c772d791c38bbc77be659af29bb14c38ced151433592e326361610250c605b"},
- {file = "pyrsistent-0.18.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d5ec194c9c573aafaceebf05fc400656722793dac57f254cd4741f3c27ae57b4"},
- {file = "pyrsistent-0.18.0-cp39-cp39-manylinux1_i686.whl", hash = "sha256:6b5eed00e597b5b5773b4ca30bd48a5774ef1e96f2a45d105db5b4ebb4bca680"},
- {file = "pyrsistent-0.18.0-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:48578680353f41dca1ca3dc48629fb77dfc745128b56fc01096b2530c13fd426"},
- {file = "pyrsistent-0.18.0-cp39-cp39-win32.whl", hash = "sha256:f3ef98d7b76da5eb19c37fda834d50262ff9167c65658d1d8f974d2e4d90676b"},
- {file = "pyrsistent-0.18.0-cp39-cp39-win_amd64.whl", hash = "sha256:404e1f1d254d314d55adb8d87f4f465c8693d6f902f67eb6ef5b4526dc58e6ea"},
- {file = "pyrsistent-0.18.0.tar.gz", hash = "sha256:773c781216f8c2900b42a7b638d5b517bb134ae1acbebe4d1e8f1f41ea60eb4b"},
+ {file = "pyrsistent-0.18.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:df46c854f490f81210870e509818b729db4488e1f30f2a1ce1698b2295a878d1"},
+ {file = "pyrsistent-0.18.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d45866ececf4a5fff8742c25722da6d4c9e180daa7b405dc0a2a2790d668c26"},
+ {file = "pyrsistent-0.18.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4ed6784ceac462a7d6fcb7e9b663e93b9a6fb373b7f43594f9ff68875788e01e"},
+ {file = "pyrsistent-0.18.1-cp310-cp310-win32.whl", hash = "sha256:e4f3149fd5eb9b285d6bfb54d2e5173f6a116fe19172686797c056672689daf6"},
+ {file = "pyrsistent-0.18.1-cp310-cp310-win_amd64.whl", hash = "sha256:636ce2dc235046ccd3d8c56a7ad54e99d5c1cd0ef07d9ae847306c91d11b5fec"},
+ {file = "pyrsistent-0.18.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:e92a52c166426efbe0d1ec1332ee9119b6d32fc1f0bbfd55d5c1088070e7fc1b"},
+ {file = "pyrsistent-0.18.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d7a096646eab884bf8bed965bad63ea327e0d0c38989fc83c5ea7b8a87037bfc"},
+ {file = "pyrsistent-0.18.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cdfd2c361b8a8e5d9499b9082b501c452ade8bbf42aef97ea04854f4a3f43b22"},
+ {file = "pyrsistent-0.18.1-cp37-cp37m-win32.whl", hash = "sha256:7ec335fc998faa4febe75cc5268a9eac0478b3f681602c1f27befaf2a1abe1d8"},
+ {file = "pyrsistent-0.18.1-cp37-cp37m-win_amd64.whl", hash = "sha256:6455fc599df93d1f60e1c5c4fe471499f08d190d57eca040c0ea182301321286"},
+ {file = "pyrsistent-0.18.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:fd8da6d0124efa2f67d86fa70c851022f87c98e205f0594e1fae044e7119a5a6"},
+ {file = "pyrsistent-0.18.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7bfe2388663fd18bd8ce7db2c91c7400bf3e1a9e8bd7d63bf7e77d39051b85ec"},
+ {file = "pyrsistent-0.18.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0e3e1fcc45199df76053026a51cc59ab2ea3fc7c094c6627e93b7b44cdae2c8c"},
+ {file = "pyrsistent-0.18.1-cp38-cp38-win32.whl", hash = "sha256:b568f35ad53a7b07ed9b1b2bae09eb15cdd671a5ba5d2c66caee40dbf91c68ca"},
+ {file = "pyrsistent-0.18.1-cp38-cp38-win_amd64.whl", hash = "sha256:d1b96547410f76078eaf66d282ddca2e4baae8964364abb4f4dcdde855cd123a"},
+ {file = "pyrsistent-0.18.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:f87cc2863ef33c709e237d4b5f4502a62a00fab450c9e020892e8e2ede5847f5"},
+ {file = "pyrsistent-0.18.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6bc66318fb7ee012071b2792024564973ecc80e9522842eb4e17743604b5e045"},
+ {file = "pyrsistent-0.18.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:914474c9f1d93080338ace89cb2acee74f4f666fb0424896fcfb8d86058bf17c"},
+ {file = "pyrsistent-0.18.1-cp39-cp39-win32.whl", hash = "sha256:1b34eedd6812bf4d33814fca1b66005805d3640ce53140ab8bbb1e2651b0d9bc"},
+ {file = "pyrsistent-0.18.1-cp39-cp39-win_amd64.whl", hash = "sha256:e24a828f57e0c337c8d8bb9f6b12f09dfdf0273da25fda9e314f0b684b415a07"},
+ {file = "pyrsistent-0.18.1.tar.gz", hash = "sha256:d4d61f8b993a7255ba714df3aca52700f8125289f84f704cf80916517c46eb96"},
]
pytest = [
- {file = "pytest-6.2.4-py3-none-any.whl", hash = "sha256:91ef2131a9bd6be8f76f1f08eac5c5317221d6ad1e143ae03894b862e8976890"},
- {file = "pytest-6.2.4.tar.gz", hash = "sha256:50bcad0a0b9c5a72c8e4e7c9855a3ad496ca6a881a3641b4260605450772c54b"},
+ {file = "pytest-6.2.5-py3-none-any.whl", hash = "sha256:7310f8d27bc79ced999e760ca304d69f6ba6c6649c0b60fb0e04a4a77cacc134"},
+ {file = "pytest-6.2.5.tar.gz", hash = "sha256:131b36680866a76e6781d13f101efb86cf674ebb9762eb70d3082b6f29889e89"},
]
python-dateutil = [
{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-http-client = [
- {file = "python_http_client-3.3.2.tar.gz", hash = "sha256:67e6a7bea19b03e14dc971480d3531b80becfc203d6c69478561bf7844d52661"},
+ {file = "python_http_client-3.3.7-py3-none-any.whl", hash = "sha256:ad371d2bbedc6ea15c26179c6222a78bc9308d272435ddf1d5c84f068f249a36"},
+ {file = "python_http_client-3.3.7.tar.gz", hash = "sha256:bf841ee45262747e00dec7ee9971dfb8c7d83083f5713596488d67739170cea0"},
]
pyyaml = [
- {file = "PyYAML-5.4.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:3b2b1824fe7112845700f815ff6a489360226a5609b96ec2190a45e62a9fc922"},
- {file = "PyYAML-5.4.1-cp27-cp27m-win32.whl", hash = "sha256:129def1b7c1bf22faffd67b8f3724645203b79d8f4cc81f674654d9902cb4393"},
- {file = "PyYAML-5.4.1-cp27-cp27m-win_amd64.whl", hash = "sha256:4465124ef1b18d9ace298060f4eccc64b0850899ac4ac53294547536533800c8"},
- {file = "PyYAML-5.4.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:bb4191dfc9306777bc594117aee052446b3fa88737cd13b7188d0e7aa8162185"},
- {file = "PyYAML-5.4.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:6c78645d400265a062508ae399b60b8c167bf003db364ecb26dcab2bda048253"},
- {file = "PyYAML-5.4.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:4e0583d24c881e14342eaf4ec5fbc97f934b999a6828693a99157fde912540cc"},
- {file = "PyYAML-5.4.1-cp36-cp36m-win32.whl", hash = "sha256:3bd0e463264cf257d1ffd2e40223b197271046d09dadf73a0fe82b9c1fc385a5"},
- {file = "PyYAML-5.4.1-cp36-cp36m-win_amd64.whl", hash = "sha256:e4fac90784481d221a8e4b1162afa7c47ed953be40d31ab4629ae917510051df"},
- {file = "PyYAML-5.4.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:5accb17103e43963b80e6f837831f38d314a0495500067cb25afab2e8d7a4018"},
- {file = "PyYAML-5.4.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:e1d4970ea66be07ae37a3c2e48b5ec63f7ba6804bdddfdbd3cfd954d25a82e63"},
- {file = "PyYAML-5.4.1-cp37-cp37m-win32.whl", hash = "sha256:dd5de0646207f053eb0d6c74ae45ba98c3395a571a2891858e87df7c9b9bd51b"},
- {file = "PyYAML-5.4.1-cp37-cp37m-win_amd64.whl", hash = "sha256:08682f6b72c722394747bddaf0aa62277e02557c0fd1c42cb853016a38f8dedf"},
- {file = "PyYAML-5.4.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d2d9808ea7b4af864f35ea216be506ecec180628aced0704e34aca0b040ffe46"},
- {file = "PyYAML-5.4.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:8c1be557ee92a20f184922c7b6424e8ab6691788e6d86137c5d93c1a6ec1b8fb"},
- {file = "PyYAML-5.4.1-cp38-cp38-win32.whl", hash = "sha256:fa5ae20527d8e831e8230cbffd9f8fe952815b2b7dae6ffec25318803a7528fc"},
- {file = "PyYAML-5.4.1-cp38-cp38-win_amd64.whl", hash = "sha256:0f5f5786c0e09baddcd8b4b45f20a7b5d61a7e7e99846e3c799b05c7c53fa696"},
- {file = "PyYAML-5.4.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:294db365efa064d00b8d1ef65d8ea2c3426ac366c0c4368d930bf1c5fb497f77"},
- {file = "PyYAML-5.4.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:74c1485f7707cf707a7aef42ef6322b8f97921bd89be2ab6317fd782c2d53183"},
- {file = "PyYAML-5.4.1-cp39-cp39-win32.whl", hash = "sha256:49d4cdd9065b9b6e206d0595fee27a96b5dd22618e7520c33204a4a3239d5b10"},
- {file = "PyYAML-5.4.1-cp39-cp39-win_amd64.whl", hash = "sha256:c20cfa2d49991c8b4147af39859b167664f2ad4561704ee74c1de03318e898db"},
- {file = "PyYAML-5.4.1.tar.gz", hash = "sha256:607774cbba28732bfa802b54baa7484215f530991055bb562efbed5b2f20a45e"},
+ {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"},
+ {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a80a78046a72361de73f8f395f1f1e49f956c6be882eed58505a15f3e430962b"},
+ {file = "PyYAML-6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f84fbc98b019fef2ee9a1cb3ce93e3187a6df0b2538a651bfb890254ba9f90b5"},
+ {file = "PyYAML-6.0-cp310-cp310-win32.whl", hash = "sha256:2cd5df3de48857ed0544b34e2d40e9fac445930039f3cfe4bcc592a1f836d513"},
+ {file = "PyYAML-6.0-cp310-cp310-win_amd64.whl", hash = "sha256:daf496c58a8c52083df09b80c860005194014c3698698d1a57cbcfa182142a3a"},
+ {file = "PyYAML-6.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:897b80890765f037df3403d22bab41627ca8811ae55e9a722fd0392850ec4d86"},
+ {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50602afada6d6cbfad699b0c7bb50d5ccffa7e46a3d738092afddc1f9758427f"},
+ {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:48c346915c114f5fdb3ead70312bd042a953a8ce5c7106d5bfb1a5254e47da92"},
+ {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:98c4d36e99714e55cfbaaee6dd5badbc9a1ec339ebfc3b1f52e293aee6bb71a4"},
+ {file = "PyYAML-6.0-cp36-cp36m-win32.whl", hash = "sha256:0283c35a6a9fbf047493e3a0ce8d79ef5030852c51e9d911a27badfde0605293"},
+ {file = "PyYAML-6.0-cp36-cp36m-win_amd64.whl", hash = "sha256:07751360502caac1c067a8132d150cf3d61339af5691fe9e87803040dbc5db57"},
+ {file = "PyYAML-6.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:819b3830a1543db06c4d4b865e70ded25be52a2e0631ccd2f6a47a2822f2fd7c"},
+ {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:473f9edb243cb1935ab5a084eb238d842fb8f404ed2193a915d1784b5a6b5fc0"},
+ {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0ce82d761c532fe4ec3f87fc45688bdd3a4c1dc5e0b4a19814b9009a29baefd4"},
+ {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:231710d57adfd809ef5d34183b8ed1eeae3f76459c18fb4a0b373ad56bedcdd9"},
+ {file = "PyYAML-6.0-cp37-cp37m-win32.whl", hash = "sha256:c5687b8d43cf58545ade1fe3e055f70eac7a5a1a0bf42824308d868289a95737"},
+ {file = "PyYAML-6.0-cp37-cp37m-win_amd64.whl", hash = "sha256:d15a181d1ecd0d4270dc32edb46f7cb7733c7c508857278d3d378d14d606db2d"},
+ {file = "PyYAML-6.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0b4624f379dab24d3725ffde76559cff63d9ec94e1736b556dacdfebe5ab6d4b"},
+ {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:213c60cd50106436cc818accf5baa1aba61c0189ff610f64f4a3e8c6726218ba"},
+ {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9fa600030013c4de8165339db93d182b9431076eb98eb40ee068700c9c813e34"},
+ {file = "PyYAML-6.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:277a0ef2981ca40581a47093e9e2d13b3f1fbbeffae064c1d21bfceba2030287"},
+ {file = "PyYAML-6.0-cp38-cp38-win32.whl", hash = "sha256:d4eccecf9adf6fbcc6861a38015c2a64f38b9d94838ac1810a9023a0609e1b78"},
+ {file = "PyYAML-6.0-cp38-cp38-win_amd64.whl", hash = "sha256:1e4747bc279b4f613a09eb64bba2ba602d8a6664c6ce6396a4d0cd413a50ce07"},
+ {file = "PyYAML-6.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:055d937d65826939cb044fc8c9b08889e8c743fdc6a32b33e2390f66013e449b"},
+ {file = "PyYAML-6.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e61ceaab6f49fb8bdfaa0f92c4b57bcfbea54c09277b1b4f7ac376bfb7a7c174"},
+ {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d67d839ede4ed1b28a4e8909735fc992a923cdb84e618544973d7dfc71540803"},
+ {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cba8c411ef271aa037d7357a2bc8f9ee8b58b9965831d9e51baf703280dc73d3"},
+ {file = "PyYAML-6.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:40527857252b61eacd1d9af500c3337ba8deb8fc298940291486c465c8b46ec0"},
+ {file = "PyYAML-6.0-cp39-cp39-win32.whl", hash = "sha256:b5b9eccad747aabaaffbc6064800670f0c297e52c12754eb1d976c57e4f74dcb"},
+ {file = "PyYAML-6.0-cp39-cp39-win_amd64.whl", hash = "sha256:b3d267842bf12586ba6c734f89d1f5b871df0273157918b0ccefa29deb05c21c"},
+ {file = "PyYAML-6.0.tar.gz", hash = "sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2"},
]
redis = [
{file = "redis-3.5.3-py2.py3-none-any.whl", hash = "sha256:432b788c4530cfe16d8d943a09d40ca6c16149727e4afe8c2c9d5580c59d9f24"},
{file = "redis-3.5.3.tar.gz", hash = "sha256:0e7e0cfca8660dea8b7d5cd8c4f6c5e29e11f31158c0b0ae91a397f00e5a05a2"},
]
requests = [
- {file = "requests-2.26.0-py2.py3-none-any.whl", hash = "sha256:6c1246513ecd5ecd4528a0906f910e8f0f9c6b8ec72030dc9fd154dc1a6efd24"},
- {file = "requests-2.26.0.tar.gz", hash = "sha256:b8aa58f8cf793ffd8782d3d8cb19e66ef36f7aba4353eec859e74678b01b07a7"},
+ {file = "requests-2.27.1-py2.py3-none-any.whl", hash = "sha256:f22fa1e554c9ddfd16e6e41ac79759e17be9e492b3587efa038054674760e72d"},
+ {file = "requests-2.27.1.tar.gz", hash = "sha256:68d7c56fd5a8999887728ef304a6d12edc7be74f1cfa47714fc8b414525c9a61"},
]
s3transfer = [
- {file = "s3transfer-0.5.0-py3-none-any.whl", hash = "sha256:9c1dc369814391a6bda20ebbf4b70a0f34630592c9aa520856bf384916af2803"},
- {file = "s3transfer-0.5.0.tar.gz", hash = "sha256:50ed823e1dc5868ad40c8dc92072f757aa0e653a192845c94a3b676f4a62da4c"},
+ {file = "s3transfer-0.5.2-py3-none-any.whl", hash = "sha256:7a6f4c4d1fdb9a2b640244008e142cbc2cd3ae34b386584ef044dd0f27101971"},
+ {file = "s3transfer-0.5.2.tar.gz", hash = "sha256:95c58c194ce657a5f4fb0b9e60a84968c808888aed628cd98ab8771fe1db98ed"},
]
sendgrid = [
- {file = "sendgrid-6.8.0-py3-none-any.whl", hash = "sha256:a991ec89e619fce9f89fa28d0e13d1673f336ff1e6333a4df591242f3134fe63"},
- {file = "sendgrid-6.8.0.tar.gz", hash = "sha256:0c500d53b2e7a4734bd978ebafcb43bc8be1b0cace5690a2324d6fab1806926a"},
+ {file = "sendgrid-6.9.7-py3-none-any.whl", hash = "sha256:ba8d3d39e1f392b9434365d53983b2fc6a458ae0496d2d9e103c15e1743ab66b"},
+ {file = "sendgrid-6.9.7.tar.gz", hash = "sha256:fa30411c627690fecd0ef6b1d4e1783f2d0272aa14b5fffb133ebd1e31114f16"},
]
six = [
{file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"},
@@ -687,22 +731,21 @@ sortedcontainers = [
{file = "sortedcontainers-2.4.0.tar.gz", hash = "sha256:25caa5a06cc30b6b83d11423433f65d1f9d76c4c6a0c90e3379eaa43b9bfdb88"},
]
starkbank-ecdsa = [
- {file = "starkbank-ecdsa-1.1.1.tar.gz", hash = "sha256:f7b434b4a1e0ba082fb1804b908b79523973fd17b1fde377078857f7cee299d1"},
+ {file = "starkbank-ecdsa-2.0.3.tar.gz", hash = "sha256:73b62b1b3de54bbaa05dedb1a2d951c033432bb074de899e19d4a96a36b21df6"},
]
toml = [
{file = "toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"},
{file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"},
]
typing-extensions = [
- {file = "typing_extensions-3.10.0.0-py2-none-any.whl", hash = "sha256:0ac0f89795dd19de6b97debb0c6af1c70987fd80a2d62d1958f7e56fcc31b497"},
- {file = "typing_extensions-3.10.0.0-py3-none-any.whl", hash = "sha256:779383f6086d90c99ae41cf0ff39aac8a7937a9283ce0a414e5dd782f4c94a84"},
- {file = "typing_extensions-3.10.0.0.tar.gz", hash = "sha256:50b6f157849174217d0656f99dc82fe932884fb250826c18350e159ec6cdf342"},
+ {file = "typing_extensions-4.2.0-py3-none-any.whl", hash = "sha256:6657594ee297170d19f67d55c05852a874e7eb634f4f753dbd667855e07c1708"},
+ {file = "typing_extensions-4.2.0.tar.gz", hash = "sha256:f1c24655a0da0d1b67f07e17a5e6b2a105894e6824b92096378bb3668ef02376"},
]
urllib3 = [
- {file = "urllib3-1.26.6-py2.py3-none-any.whl", hash = "sha256:39fb8672126159acb139a7718dd10806104dec1e2f0f6c88aab05d17df10c8d4"},
- {file = "urllib3-1.26.6.tar.gz", hash = "sha256:f57b4c16c62fa2760b7e3d97c35b255512fb6b59a259730f36ba32ce9f8e342f"},
+ {file = "urllib3-1.26.9-py2.py3-none-any.whl", hash = "sha256:44ece4d53fb1706f667c9bd1c648f5469a2ec925fcf3a776667042d645472c14"},
+ {file = "urllib3-1.26.9.tar.gz", hash = "sha256:aabaf16477806a5e1dd19aa41f8c2b7950dd3c746362d7e3223dbe6de6ac448e"},
]
zipp = [
- {file = "zipp-3.5.0-py3-none-any.whl", hash = "sha256:957cfda87797e389580cb8b9e3870841ca991e2125350677b2ca83a0e99390a3"},
- {file = "zipp-3.5.0.tar.gz", hash = "sha256:f5812b1e007e48cff63449a5e9f4e7ebea716b4111f9c4f9a645f91d579bf0c4"},
+ {file = "zipp-3.8.0-py3-none-any.whl", hash = "sha256:c4f6e5bbf48e74f7a38e7cc5b0480ff42b0ae5178957d564d18932525d5cf099"},
+ {file = "zipp-3.8.0.tar.gz", hash = "sha256:56bf8aadb83c24db6c4b577e13de374ccfb67da2078beba1d037c17980bf43ad"},
]
diff --git a/tools/c7n_mailer/pyproject.toml b/tools/c7n_mailer/pyproject.toml
index c2e3421bcc9..351460a1eed 100644
--- a/tools/c7n_mailer/pyproject.toml
+++ b/tools/c7n_mailer/pyproject.toml
@@ -1,6 +1,6 @@
[tool.poetry]
name = "c7n_mailer"
-version = "0.6.13"
+version = "0.6.15"
description = "Cloud Custodian - Reference Mailer"
authors = ["Cloud Custodian Project"]
license = "Apache-2.0"
@@ -19,18 +19,19 @@ c7n-mailer = 'c7n_mailer.cli:main'
c7n-mailer-replay = 'c7n_mailer.replay:main'
[tool.poetry.dependencies]
-python = "^3.6"
+python = "^3.7"
Jinja2 = "^3.0"
-boto3 = "^1.11.12"
-jsonschema = "^3.2.0"
+boto3 = ">=1.11.12"
+jsonschema = ">=3.2.0"
python-dateutil = "^2.8.1"
-pyyaml="^5.3"
+pyyaml = ">=5.4.0"
sendgrid = "^6.1.1"
datadog = "^0.34.0"
ldap3 = "^2.6.1"
redis = "^3.4.1"
jsonpointer = "^2.0"
jsonpatch = "^1.25"
+importlib-metadata = ">=4.11.1"
[tool.poetry.dev-dependencies]
fakeredis = "^1.2.0"
diff --git a/tools/c7n_mailer/requirements.txt b/tools/c7n_mailer/requirements.txt
index f5ff32f2d7a..98e5fa1111a 100644
--- a/tools/c7n_mailer/requirements.txt
+++ b/tools/c7n_mailer/requirements.txt
@@ -1,30 +1,31 @@
-attrs==21.2.0; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0"
-boto3==1.18.21; python_version >= "3.6"
-botocore==1.21.21; python_version >= "3.6"
-certifi==2021.5.30; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0"
-charset-normalizer==2.0.4; python_full_version >= "3.6.0" and python_version >= "3"
+attrs==21.4.0; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.7"
+boto3==1.21.42; python_version >= "3.6"
+botocore==1.24.42; python_version >= "3.6"
+certifi==2021.10.8; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0"
+charset-normalizer==2.0.12; python_full_version >= "3.6.0" and python_version >= "3"
datadog==0.34.1
-decorator==5.0.9; python_version >= "3.5"
-idna==3.2; python_version >= "3.5" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.5"
-importlib-metadata==4.6.4; python_version >= "3.6" and python_version < "3.8"
-jinja2==3.0.1; python_version >= "3.6"
-jmespath==0.10.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.3.0" and python_version >= "3.6"
+decorator==5.1.1; python_version >= "3.5"
+idna==3.3; python_version >= "3.5" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.5"
+importlib-metadata==4.11.3; python_version >= "3.7"
+importlib-resources==5.7.1; python_version < "3.9" and python_version >= "3.7"
+jinja2==3.1.1; python_version >= "3.7"
+jmespath==1.0.0; python_version >= "3.7"
jsonpatch==1.32; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.5.0")
-jsonpointer==2.1; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.4.0")
-jsonschema==3.2.0
+jsonpointer==2.3; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.4.0")
+jsonschema==4.4.0; python_version >= "3.7"
ldap3==2.9.1
-markupsafe==2.0.1; python_version >= "3.6"
+markupsafe==2.1.1; python_version >= "3.7"
pyasn1==0.4.8
-pyrsistent==0.18.0; python_version >= "3.6"
+pyrsistent==0.18.1; python_version >= "3.7"
python-dateutil==2.8.2; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.3.0")
-python-http-client==3.3.2; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0"
-pyyaml==5.4.1; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.6.0")
+python-http-client==3.3.7; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0"
+pyyaml==6.0; python_version >= "3.6"
redis==3.5.3; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.5.0")
-requests==2.26.0; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0"
-s3transfer==0.5.0; python_version >= "3.6"
-sendgrid==6.8.0; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.5.0")
+requests==2.27.1; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0"
+s3transfer==0.5.2; python_version >= "3.6"
+sendgrid==6.9.7; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.5.0")
six==1.16.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.3.0" and python_version >= "3.6"
-starkbank-ecdsa==1.1.1; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0"
-typing-extensions==3.10.0.0; python_version >= "3.6" and python_version < "3.8"
-urllib3==1.26.6; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version < "4" and python_version >= "3.6"
-zipp==3.5.0; python_version >= "3.6" and python_version < "3.8"
+starkbank-ecdsa==2.0.3; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0"
+typing-extensions==4.2.0; python_version < "3.8" and python_version >= "3.7"
+urllib3==1.26.9; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version < "4" and python_version >= "3.6"
+zipp==3.8.0; python_version < "3.8" and python_version >= "3.7"
diff --git a/tools/c7n_mailer/setup.py b/tools/c7n_mailer/setup.py
index 6202e395b03..2318d1f311f 100644
--- a/tools/c7n_mailer/setup.py
+++ b/tools/c7n_mailer/setup.py
@@ -11,14 +11,15 @@
install_requires = \
['Jinja2>=3.0,<4.0',
- 'boto3>=1.11.12,<2.0.0',
+ 'boto3>=1.11.12',
'datadog>=0.34.0,<0.35.0',
+ 'importlib-metadata>=4.11.1',
'jsonpatch>=1.25,<2.0',
'jsonpointer>=2.0,<3.0',
- 'jsonschema>=3.2.0,<4.0.0',
+ 'jsonschema>=3.2.0',
'ldap3>=2.6.1,<3.0.0',
'python-dateutil>=2.8.1,<3.0.0',
- 'pyyaml>=5.3,<6.0',
+ 'pyyaml>=5.4.0',
'redis>=3.4.1,<4.0.0',
'sendgrid>=6.1.1,<7.0.0']
@@ -28,7 +29,7 @@
setup_kwargs = {
'name': 'c7n-mailer',
- 'version': '0.6.13',
+ 'version': '0.6.15',
'description': 'Cloud Custodian - Reference Mailer',
'license': 'Apache-2.0',
'classifiers': [
@@ -36,7 +37,7 @@
'Topic :: System :: Systems Administration',
'Topic :: System :: Distributed Computing'
],
- 'long_description': '# c7n-mailer: Custodian Mailer\n\n[//]: # ( !!! IMPORTANT !!! )\n[//]: # (This file is moved during document generation.)\n[//]: # (Only edit the original document at ./tools/c7n_mailer/README.md)\n\nA mailer implementation for Custodian. Outbound mail delivery is still somewhat\norganization-specific, so this at the moment serves primarily as an example\nimplementation.\n\n> The Cloud Custodian Mailer can now be easily run in a Docker container. Click [here](https://hub.docker.com/r/cloudcustodian/mailer) for details.\n\n\n## Message Relay\n\nCustodian Mailer subscribes to an SQS queue, looks up users, and sends email\nvia SES and/or send notification to DataDog. Custodian lambda and instance policies can send to it. SQS queues\nshould be cross-account enabled for sending between accounts.\n\n\n## Tutorial\n\nOur goal in starting out with the Custodian mailer is to install the mailer,\nand run a policy that triggers an email to your inbox.\n\n1. [Install](#developer-install-os-x-el-capitan) the mailer on your laptop (if you are not running as a [Docker container](https://hub.docker.com/r/cloudcustodian/mailer)\n - or use `pip install c7n-mailer`\n2. In your text editor, create a `mailer.yml` file to hold your mailer config.\n3. In the AWS console, create a new standard SQS queue (quick create is fine).\n Copy the queue URL to `queue_url` in `mailer.yml`.\n4. In AWS, locate or create a role that has read access to the queue. Grab the\n role ARN and set it as `role` in `mailer.yml`.\n\nThere are different notification endpoints options, you can combine both.\n\n### Email:\nMake sure your email address is verified in SES, and set it as\n`from_address` in `mailer.yml`. By default SES is in sandbox mode where you\nmust\n[verify](http://docs.aws.amazon.com/ses/latest/DeveloperGuide/verify-email-addresses.html)\nevery individual recipient of emails. If need be, make an AWS support ticket to\nbe taken out of SES sandbox mode.\n\nYour `mailer.yml` should now look something like this:\n\n```yaml\nqueue_url: https://sqs.us-east-1.amazonaws.com/1234567890/c7n-mailer-test\nrole: arn:aws:iam::123456790:role/c7n-mailer-test\nfrom_address: you@example.com\n```\n\nYou can also set `region` if you are in a region other than `us-east-1` as well as `lambda_tags` to give the mailer tags.\n\n```yaml\nregion: us-east-2\nlambda_tags:\n owner: ops\n```\n\nNow let\'s make a Custodian policy to populate your mailer queue. Create a\n`test-policy.yml` file with this content (update `to` and `queue` to match your\nenvironment)\n\n```yaml\n policies:\n - name: c7n-mailer-test\n resource: sqs\n filters:\n - "tag:MailerTest": absent\n actions:\n - type: notify\n template: default\n priority_header: \'2\'\n subject: testing the c7n mailer\n to:\n - you@example.com\n transport:\n type: sqs\n queue: https://sqs.us-east-1.amazonaws.com/1234567890/c7n-mailer-test\n```\n\n### DataDog:\nThe standard way to do a DataDog integration is use the\nc7n integration with AWS CloudWatch and use the\n[DataDog integration with AWS](https://docs.datadoghq.com/integrations/amazon_web_services/)\nto collect CloudWatch metrics. The mailer/messenger integration is only\nfor the case you don\'t want or you can\'t use AWS CloudWatch.\n\nNote this integration requires the additional dependency of datadog python bindings:\n```\npip install datadog\n```\n\nYour `mailer.yml` should now look something like this:\n\n```yaml\nqueue_url: https://sqs.us-east-1.amazonaws.com/1234567890/c7n-mailer-test\nrole: arn:aws:iam::123456790:role/c7n-mailer-test\ndatadog_api_key: XXXXXXXXXXXXXXXXXXXXXXXXXXXXX\ndatadog_application_key: YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY\n```\n\n(Also set `region` if you are in a region other than `us-east-1`.)\n\nNow let\'s make a Custodian policy to populate your mailer queue. Create a\n`test-policy.yml`:\n\n```yaml\npolicies:\n - name: c7n-mailer-test\n resource: ebs\n filters:\n - Attachments: []\n actions:\n - type: notify\n to:\n - datadog://?metric_name=datadog.metric.name&metric_value_tag=Size\n transport:\n type: sqs\n queue: https://sqs.us-east-1.amazonaws.com/1234567890/c7n-mailer-test\n```\n\nThere is a special `to` format that specifies datadog delivery, and includes the datadog configuration via url parameters.\n- metric_name: is the name of the metrics send to DataDog\n- metric_value_tag: by default the metric value send to DataDog is `1` but if you want to use one of the tags returned in the policy you can set it with the attribute `metric_value_tag`, for example in the `test-policy.yml` the value used is the size of the EBS volume. The value must be a number and it\'s transformed to a float value.\n\n### Slack:\n\nThe Custodian mailer supports Slack messaging as a separate notification mechanism for the SQS transport method. To enable Slack integration, you must specify a Slack token in the `slack_token` field under the `mailer.yml` file.\n\n```yaml\nqueue_url: https://sqs.us-east-1.amazonaws.com/1234567890/c7n-mailer-test\nrole: arn:aws:iam::123456790:role/c7n-mailer-test\nslack_token: xoxo-token123\n```\n\nTo enable Slack messaging, several unique fields are evaluated in the policy, as shown in the below example:\n\n```\npolicies:\n - name: c7n-mailer-test\n resource: ebs\n filters:\n - Attachments: []\n actions:\n - type: notify\n slack_template: slack\n slack_msg_color: danger\n to:\n - slack://owners\n - slack://foo@bar.com\n - slack://#custodian-test\n - slack://webhook/#c7n-webhook-test\n - slack://tag/resource_tag\n - https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX\n transport:\n type: sqs\n queue: https://sqs.us-east-1.amazonaws.com/1234567890/c7n-mailer-test\n```\n\nSlack messages support use of a unique template field specified by `slack_template`. This field is unique and usage will not break\nexisting functionality for messages also specifying an email template in the `template` field. This field is optional, however,\nand if not specified, the mailer will use the default value `slack_default`.\n\nThe unique template field `slack_msg_color` can be used to specify a color\nborder for the slack message. This accepts the Slack presets of `danger` (red),\n`warning` (yellow) and `good` (green). It can also accept a HTML hex code. See\nthe [Slack documentation](https://api.slack.com/reference/messaging/attachments#fields)\nfor details.\n\nNote: if you are using a hex color code it will need to be wrapped in quotes\nlike so: `slack_msg_color: \'#4287f51\'`. Otherwise the YAML interpreter will consider it a\n[comment](https://yaml.org/spec/1.2/spec.html#id2780069).\n\nSlack integration for the mailer supports several flavors of messaging, listed below. These are not mutually exclusive and any combination of the types can be used, but the preferred method is [incoming webhooks](https://api.slack.com/incoming-webhooks).\n\n| Requires `slack_token` | Key | Type | Notes |\n|:---------------------------:|:--------------------------------------------------------------------------------|:-------|:----------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| No | `https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX` | string | **(PREFERRED)** Send to an [incoming webhook](https://api.slack.com/incoming-webhooks) (the channel is defined in the webhook) |\n| Yes | `slack://owners` | string | Send to the recipient list generated within email delivery logic |\n| Yes | `slack://foo@bar.com` | string | Send to the recipient specified by email address foo@bar.com |\n| Yes | `slack://#custodian-test` | string | Send to the Slack channel indicated in string, i.e. #custodian-test |\n| No | `slack://webhook/#c7n-webhook-test` | string | **(DEPRECATED)** Send to a Slack webhook; appended with the target channel. **IMPORTANT**: *This requires a `slack_webhook` value defined in the `mailer.yml`.* |\n| Yes | `slack://tag/resource-tag` | string | Send to target found in resource tag. Example of value in tag: https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX |\n\nSlack delivery can also be set via a resource\'s tag name. For example, using "slack://tag/slack_channel" will look for a tag name of \'slack_channel\', and if matched on a resource will deliver the message to the value of that resource\'s tag:\n\n`slack_channel:https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX`\n\nDelivery via tag has been tested with webhooks but should support all delivery methods.\n\n### Splunk HTTP Event Collector (HEC)\n\nThe Custodian mailer supports delivery to the HTTP Event Collector (HEC) endpoint of a Splunk instance as a separate notification mechanism for the SQS transport method. To enable Splunk HEC integration, you must specify the URL to the HEC endpoint as well as a valid username and token:\n\n```yaml\nqueue_url: https://sqs.us-east-1.amazonaws.com/1234567890/c7n-mailer-test\nrole: arn:aws:iam::123456790:role/c7n-mailer-test\nsplunk_hec_url: https://http-inputs-foo.splunkcloud.com/services/collector/event\nsplunk_hec_token: 268b3cc2-f32e-4a19-a1e8-aee08d86ca7f\n```\n\nTo send events for a policy to the Splunk HEC endpoint, add a ``to`` address notify action specifying the name of the Splunk index to send events to in the form ``splunkhec://indexName``:\n\n```\npolicies:\n - name: c7n-mailer-test\n resource: ebs\n filters:\n - Attachments: []\n actions:\n - type: notify\n to:\n - splunkhec://myIndexName\n transport:\n type: sqs\n queue: https://sqs.us-east-1.amazonaws.com/1234567890/c7n-mailer-test\n```\n\nThe ``splunkhec://indexName`` address type can be combined in the same notify action with other destination types (e.g. email, Slack, DataDog, etc).\n\n### Now run:\n\n```\nc7n-mailer --config mailer.yml --update-lambda && custodian run -c test-policy.yml -s .\n```\n\nNote: You can set the profile via environment variable e.g. `export AWS_DEFAULT_PROFILE=foo`\n\nYou should see output similar to the following:\n\n```\n(env) $ c7n-mailer --config mailer.yml --update-lambda && custodian run -c test-policy.yml -s .\nDEBUG:custodian.lambda:Created custodian lambda archive size: 3.01mb\n2017-01-12 07:55:16,227: custodian.policy:INFO Running policy c7n-mailer-test resource: sqs region:default c7n:0.8.22.0\n2017-01-12 07:55:16,229: custodian.policy:INFO policy: c7n-mailer-test resource:sqs has count:1 time:0.00\n2017-01-12 07:55:18,017: custodian.actions:INFO sent message:dead-beef policy:c7n-mailer-test template:default count:1\n2017-01-12 07:55:18,017: custodian.policy:INFO policy: c7n-mailer-test action: notify resources: 1 execution_time: 1.79\n(env) $\n```\n\nCheck the AWS console for a new Lambda named `cloud-custodian-mailer`. The\nmailer runs every five minutes, so wait a bit and then look for an email in\nyour inbox. If it doesn\'t appear, look in the lambda\'s logs for debugging\ninformation. If it does, congratulations! You are off and running with the\nCustodian mailer.\n\n\n## Usage & Configuration\n\nOnce [installed](#developer-install-os-x-el-capitan) you should have a\n`c7n-mailer` executable on your path:\naws\n```\n(env) $ c7n-mailer\nusage: c7n-mailer [-h] -c CONFIG\nc7n-mailer: error: argument -c/--config is required\n(env) $\n```\n\nFundamentally what `c7n-mailer` does is deploy a Lambda (using\n[Mu](http://cloudcustodian.io/docs/policy/mu.html)) based on\nconfiguration you specify in a YAML file. Here is [the\nschema](./c7n_mailer/cli.py#L11-L41) to which the file must conform,\nand here is a description of the options:\n\n| Required? | Key | Type | Notes |\n|:---------:|:----------------|:-----------------|:------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| ✅ | `queue_url` | string | the queue to listen to for messages |\n| | `from_address` | string | default from address |\n| | `endpoint_url` | string | SQS API URL (for use with VPC Endpoints) |\n| | `contact_tags` | array of strings | tags that we should look at for address information |\n\n#### Standard Lambda Function Config\n\n| Required? | Key | Type |\n|:---------:|:---------------------|:-----------------|\n| | `dead_letter_config` | object |\n| | `memory` | integer |\n| | `region` | string |\n| ✅ | `role` | string |\n| | `runtime` | string |\n| | `security_groups` | array of strings |\n| | `subnets` | array of strings |\n| | `timeout` | integer |\n\n#### Standard Azure Functions Config\n\n| Required? | Key | Type | Notes |\n|:---------:|:----------------------|:-------|:---------------------------------------------------------------------------------------|\n| | `function_properties` | object | Contains `appInsights`, `storageAccount` and `servicePlan` objects |\n| | `appInsights` | object | Contains `name`, `location` and `resourceGroupName` properties |\n| | `storageAccount` | object | Contains `name`, `location` and `resourceGroupName` properties |\n| | `servicePlan` | object | Contains `name`, `location`, `resourceGroupName`, `skuTier` and `skuName` properties |\n| | `name` | string | |\n| | `location` | string | Default: `west us 2` |\n| | `resourceGroupName` | string | Default `cloud-custodian` |\n| | `skuTier` | string | Default: `Basic` |\n| | `skuName` | string | Default: `B1` |\n\n\n\n\n#### Mailer Infrastructure Config\n\n| Required? | Key | Type | Notes |\n|:---------:|:----------------------------|:--------|:---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| | `cache_engine` | string | cache engine; either sqlite or redis |\n| | `cross_accounts` | object | account to assume back into for sending to SNS topics |\n| | `debug` | boolean | debug on/off |\n| | `ldap_bind_dn` | string | eg: ou=people,dc=example,dc=com |\n| | `ldap_bind_user` | string | eg: FOO\\\\BAR |\n| | `ldap_bind_password` | string | ldap bind password |\n| | `ldap_bind_password_in_kms` | boolean | defaults to true, most people (except capone) want to set this to false. If set to true, make sure `ldap_bind_password` contains your KMS encrypted ldap bind password as a base64-encoded string. |\n| | `ldap_email_attribute` | string | |\n| | `ldap_email_key` | string | eg \'mail\' |\n| | `ldap_manager_attribute` | string | eg \'manager\' |\n| | `ldap_uid_attribute` | string | |\n| | `ldap_uid_regex` | string | |\n| | `ldap_uid_tags` | string | |\n| | `ldap_uri` | string | eg \'ldaps://example.com:636\' |\n| | `redis_host` | string | redis host if cache_engine == redis |\n| | `redis_port` | integer | redis port, default: 6369 |\n| | `ses_region` | string | AWS region that handles SES API calls |\n\n#### SMTP Config\n\n| Required? | Key | Type | Notes |\n|:---------:|:----------------|:-----------------|:------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| | `smtp_server` | string | to configure your lambda role to talk to smtpd in your private vpc, see [here](https://docs.aws.amazon.com/lambda/latest/dg/vpc.html) | |\n| | `smtp_port` | integer | smtp port (default is 25) |\n| | `smtp_ssl` | boolean | this defaults to True |\n| | `smtp_username` | string | |\n| | `smtp_password` | secured string | |\n\nIf `smtp_server` is unset, `c7n_mailer` will use AWS SES or Azure SendGrid.\n\n#### DataDog Config\n\n| Required? | Key | Type | Notes |\n|:---------:|:--------------------------|:-------|:-------------------------|\n| | `datadog_api_key` | string | DataDog API key. |\n| | `datadog_application_key` | string | Datadog application key. |\n\nThese fields are not necessary if c7n_mailer is run in a instance/lambda/etc with the DataDog agent.\n\n#### Slack Config\n\n| Required? | Key | Type | Notes |\n|:---------:|:--------------|:-------|:----------------|\n| | `slack_token` | string | Slack API token |\n\n#### SendGrid Config\n\n| Required? | Key | Type | Notes |\n|:---------:|:-------------------|:---------------|:-------------------|\n| | `sendgrid_api_key` | secured string | SendGrid API token |\n\n\n#### Splunk HEC Config\n\nThe following configuration items are *all* optional. The ones marked "Required for Splunk" are only required if you\'re sending notifications to ``splunkhec://`` destinations.\n\n| Required for Splunk? | Key | Type | Notes |\n|:--------------------:|:------------------------|:-----------------|:-----------------------------------------------------------------------------------------------------------------------------------|\n| ✅ | `splunk_hec_url` | string | URL to your Splunk HTTP Event Collector endpoint |\n| ✅ | `splunk_hec_token` | string | Splunk HEC authentication token for specified username |\n| | `splunk_remove_paths` | array of strings | List of [RFC6901](http://tools.ietf.org/html/rfc6901) JSON Pointers to remove from the event, if present, before sending to Splunk |\n| | `splunk_actions_list` | boolean | If true, add an `actions` list to the top-level message sent to Splunk, containing the names of all non-notify actions taken |\n| | `splunk_max_attempts` | integer | Maximum number of times to try POSTing data to Splunk HEC (default 4) |\n| | `splunk_hec_max_length` | integer | Maximum data length that Splunk HEC accepts; an error will be logged for any message sent over this length |\n| | `splunk_hec_sourcetype` | string | Configure sourcetype of the payload sent to Splunk HEC. (default is \'_json\') |\n\n#### SDK Config\n\n| Required? | Key | Type | Notes |\n|:---------:|:--------------|:-------|:------|\n| | `http_proxy` | string | |\n| | `https_proxy` | string | |\n| | `profile` | string | |\n\n\n#### Secured String\n\nIn order to ensure sensitive data is not stored plaintext in a policy, `c7n-mailer` supports secured\nstrings. You can treat it as a regular `string` or use `secured string` features.\n\n##### AWS\n\nYou can use KMS to encrypt your secrets and use encrypted secret in mailer policy.\nCustodian tries to decrypt the string using KMS, if it fails c7n treats it as a plaintext secret.\n\n```yaml\n plaintext_secret: \n secured_string: \n```\n\n##### Azure\n\nYou can store your secrets in Azure Key Vault secrets and reference them from the policy.\n\n```yaml\n plaintext_secret: \n secured_string:\n type: azure.keyvault\n secret: https://your-vault.vault.azure.net/secrets/your-secret\n```\n\nNote: `secrets.get` permission on the KeyVault for the Service Principal is required.\n\n## Configuring a policy to send email\n\nOutbound email can be added to any policy by including the `notify` action.\n\n```yaml\n\npolicies:\n - name: bad-apples\n resource: asg\n filters:\n - "tag:ASV": absent\n actions:\n - type: notify\n template: default\n template_format: \'html\'\n priority_header: \'1\'\n subject: fix your tags\n to:\n - resource-owner\n owner_absent_contact:\n - foo@example.com\n transport:\n type: sqs\n queue: https://sqs.us-east-1.amazonaws.com/80101010101/cloud-custodian-message-relay\n```\n\nSo breaking it down, you add an action of type `notify`. You can specify a\ntemplate that\'s used to format the email; customizing templates is described\n[below](#writing-an-email-template).\n\nThe `to` list specifies the intended recipient for the email. You can specify\neither an email address, an SNS topic, a Datadog Metric, or a special value. The special values\nare either\n\n- `resource-owner`, in which case the email will be sent to the listed\n `OwnerContact` tag on the resource that matched the policy, or\n- `event-owner` for push-based/realtime policies that will send to the user\n that was responsible for the underlying event.\n- `priority_header` to indicate the importance of an email with [headers](https://www.chilkatsoft.com/p/p_471.asp). Different emails clients will display stars, exclamation points or flags depending on the value. Should be an string from 1 to 5.\n\nBoth of these special values are best effort, i.e., if no `OwnerContact` tag is\nspecified then `resource-owner` email will not be delivered, and in the case of\n`event-owner` an instance role or system account will not result in an email.\n\nThe optional `owner_absent_contact` list specifies email addresses to notify only if\nthe `resource-owner` special option was unable to find any matching owner contact\ntags.\n\nIn addition, you may choose to use a custom tag instead of the default `OwnerContact`. In order to configure this, the mailer.yaml must be modified to include the contact_tags and the custom tag. The `resource-owner` will now email the custom tag instead of `OwnerContact`.\n\n```yaml\ncontact_tags:\n - "custom_tag"\n```\n\n\nFor reference purposes, the JSON Schema of the `notify` action:\n\n```json\n{\n "type": "object",\n "required": ["type", "transport", "to"],\n "properties": {\n "type": {"enum": ["notify"]},\n "to": {"type": "array", "items": {"type": "string"}},\n "owner_absent_contact": {"type": "array", "items": {"type": "string"}},\n "subject": {"type": "string"},\n "priority_header": {"type": "string"},\n "template": {"type": "string"},\n "transport": {\n "type": "object",\n "required": ["type", "queue"],\n "properties": {\n "queue": {"type": "string"},\n "region": {"type": "string"},\n "type": {"enum": ["sqs"]}\n }\n }\n }\n}\n```\n\n## Using on Azure\n\nRequires:\n\n- `c7n_azure` package. See [Installing Azure Plugin](https://cloudcustodian.io/docs/azure/gettingstarted.html#azure-install-cc)\n- SendGrid account. See [Using SendGrid with Azure](https://docs.microsoft.com/en-us/azure/sendgrid-dotnet-how-to-send-email)\n- [Azure Storage Queue](https://azure.microsoft.com/en-us/services/storage/queues/)\n\nThe mailer supports an Azure Storage Queue transport and SendGrid delivery on Azure.\nConfiguration for this scenario requires only minor changes from AWS deployments.\n\nYou will need to grant `Storage Queue Data Contributor` role on the Queue for the identity\nmailer is running under.\n\nThe notify action in your policy will reflect transport type `asq` with the URL\nto an Azure Storage Queue. For example:\n\n```yaml\npolicies:\n - name: azure-notify\n resource: azure.resourcegroup\n description: send a message to a mailer instance\n actions:\n - type: notify\n template: default\n priority_header: \'2\'\n subject: Hello from C7N Mailer\n to:\n - you@youremail.com\n transport:\n type: asq\n queue: https://storageaccount.queue.core.windows.net/queuename\n```\n\nIn your mailer configuration, you\'ll need to provide your SendGrid API key as well as\nprefix your queue URL with `asq://` to let mailer know what type of queue it is:\n\n```yaml\nqueue_url: asq://storageaccount.queue.core.windows.net/queuename\nfrom_address: you@youremail.com\nsendgrid_api_key: SENDGRID_API_KEY\n```\n\nThe mailer will transmit all messages found on the queue on each execution, and will retry\nsending 3 times in the event of a failure calling SendGrid. After the retries the queue\nmessage will be discarded.\n\nIn addition, SendGrid delivery on Azure supports using resource tags to send emails. For example, in the `to` field:\n\n```yaml\nto:\n - tag:OwnerEmail\n```\n\nThis will find the email address associated with the resource\'s `OwnerEmail` tag, and send an email to the specified address.\nIf no tag is found, or the associated email address is invalid, no email will be sent.\n\n#### Deploying Azure Functions\n\nThe `--update-lambda` CLI option will also deploy Azure Functions if you have an Azure\nmailer configuration.\n\n`c7n-mailer --config mailer.yml --update-lambda`\n\nwhere a simple `mailer.yml` using Consumption functions may look like:\n\n```yaml\nqueue_url: asq://storage.queue.core.windows.net/custodian\nfrom_address: foo@mail.com\nsendgrid_api_key: \nfunction_properties:\n servicePlan:\n name: \'testmailer1\'\n```\n\n#### Configuring Function Identity\n\nYou can configure the service principal used for api calls made by the\nmailer azure function by specifying an identity configuration under\nfunction properties. Mailer supports User Assigned Identities, System\nManaged Identities, defaulting to an embedding of the cli user\'s\nservice principals credentials.\n\nWhen specifying a user assigned identity, unlike in a custodian\nfunction policy where simply providing an name is sufficient, the\nuuid/id and client id of the identity must be provided. You can\nretrieve this information on the cli using the `az identity list`.\n\n```yaml\n\nfunction_properties:\n identity:\n type: UserAssigned\n id: "/subscriptions/333fd504-7f11-2270-88c8-7325a27f7222/resourcegroups/c7n/providers/Microsoft.ManagedIdentity/userAssignedIdentities/mailer"\n client_id: "b9cb06fa-dfb8-4342-add3-aab5acb2abbc"\n```\n\nA system managed identity can also be used, and the Azure platform will\ncreate an identity when the function is provisoned, however the function\'s identity\nthen needs to be retrieved and mapped to rbac permissions post provisioning, this\nuser management activity must be performed manually.\n\n```yaml\n\nfunction_properties:\n identity:\n type: SystemAssigned\n```\n\n## Writing an email template\n\nTemplates are authored in [jinja2](http://jinja.pocoo.org/docs/dev/templates/).\nDrop a file with the `.j2` extension into the a templates directory, and send a pull request to this\nrepo. You can then reference it in the `notify` action as the `template`\nvariable by file name minus extension. Templates ending with `.html.j2` are\nsent as HTML-formatted emails, all others are sent as plain text.\n\nYou can use `-t` or `--templates` cli argument to pass custom folder with your templates.\n\nThe following variables are available when rendering templates:\n\n| variable | value |\n|:------------------|:-------------------------------------------------------------|\n| `recipient` | email address |\n| `resources` | list of resources that matched the policy filters |\n| `event` | for CWE-push-based lambda policies, the event that triggered |\n| `action` | `notify` action that generated this SQS message |\n| `policy` | policy that triggered this notify action |\n| `account` | short name of the aws account |\n| `region` | region the policy was executing in |\n| `execution_start` | The time policy started executing |\n\nThe following extra global functions are available:\n\n| signature | behavior |\n|:-----------------------------------------------------------------------------|:--------------------------------------------------------------------------------------------------|\n| `format_struct(struct)` | pretty print a json structure |\n| `resource_tag(resource, key)` | retrieve a tag value from a resource or return an empty string, aliased as get_resource_tag_value |\n| `format_resource(resource, resource_type)` | renders a one line summary of a resource |\n| `date_time_format(utc_str, tz_str=\'US/Eastern\', format=\'%Y %b %d %H:%M %Z\')` | customize rendering of an utc datetime string |\n| `search(expression, value)` | jmespath search value using expression |\n| `yaml_safe(value)` | yaml dumper |\n\nThe following extra jinja filters are available:\n\n| filter | behavior |\n|:-----------------------------------------------------------------------------------------------|:----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| utc_string|date_time_format(tz_str=\'US/Pacific\', format=\'%Y %b %d %H:%M %Z\') | pretty [format](https://docs.python.org/2/library/datetime.html#strftime-strptime-behavior) the date / time |\n| 30|get_date_time_delta | Convert a time [delta](https://docs.python.org/2/library/datetime.html#datetime.timedelta) like \'30\' days in the future, to a datetime string. You can also use negative values for the past. |\n\n\n## Developer Install (OS X El Capitan)\n\nClone the repository:\n```\n$ git clone https://github.com/cloud-custodian/cloud-custodian\n```\nInstall dependencies (with virtualenv):\n```\n$ virtualenv c7n_mailer\n$ source c7n_mailer/bin/activate\n$ cd tools/c7n_mailer\n$ pip install -r requirements.txt\n```\nInstall the extensions:\n```\npython setup.py develop\n```\n\n## Testing Templates and Recipients\n\nA ``c7n-mailer-replay`` entrypoint is provided to assist in testing email notifications\nand templates. This script operates on an actual SQS message from cloud-custodian itself,\nwhich you can either retrieve from the SQS queue or replicate locally. By default it expects\nthe message file to be base64-encoded, gzipped JSON, just like c7n sends to SQS. With the\n``-p`` | ``--plain`` argument, it will expect the message file to contain plain JSON.\n\n``c7n-mailer-replay`` has three main modes of operation:\n\n* With no additional arguments, it will render the template specified by the policy the\n message is for, and actually send mail from the local machine as ``c7n-mailer`` would.\n This only works with SES, not SMTP.\n* With the ``-T`` | ``--template-print`` argument, it will log the email addresses that would\n receive mail, and print the rendered message body template to STDOUT.\n* With the ``-d`` | ``--dry-run`` argument, it will print the actual email body (including headers)\n that would be sent, for each message that would be sent, to STDOUT.\n\n#### Testing Templates for Azure\n\nThe ``c7n-mailer-replay`` entrypoint can be used to test templates for Azure with either of the arguments:\n* ``-T`` | ``--template-print``\n* ``-d`` | ``--dry-run``\n\nRunning ``c7n-mailer-replay`` without either of these arguments will throw an error as it will attempt\nto authorize with AWS.\n\nThe following is an example for retrieving a sample message to test against templates:\n\n* Run a policy with the notify action, providing the name of the template to test, to populate the queue.\n\n* Using the azure cli, save the message locally:\n```\n$ az storage message get --queue-name --account-name --query \'[].content\' > test_message.gz\n```\n* The example message can be provided to ``c7n-mailer-replay`` by running:\n\n```\n$ c7n-mailer-replay test_message.gz -T --config mailer.yml\n```\n',
+ 'long_description': '# c7n-mailer: Custodian Mailer\n\n% [comment]: # ( !!! IMPORTANT !!! )\n% [comment]: # (This file is moved during document generation.)\n% [comment]: # (Only edit the original document at ./tools/c7n_mailer/README.md)\n\nA mailer implementation for Custodian. Outbound mail delivery is still somewhat\norganization-specific, so this at the moment serves primarily as an example\nimplementation.\n\n> The Cloud Custodian Mailer can now be easily run in a Docker container. Click [here](https://hub.docker.com/r/cloudcustodian/mailer) for details.\n\n\n## Message Relay\n\nCustodian Mailer subscribes to an SQS queue, looks up users, and sends email\nvia SES and/or send notification to DataDog. Custodian lambda and instance policies can send to it. SQS queues\nshould be cross-account enabled for sending between accounts.\n\n\n## Tutorial\n\nOur goal in starting out with the Custodian mailer is to install the mailer,\nand run a policy that triggers an email to your inbox.\n\n1. [Install](#developer-install-os-x-el-capitan) the mailer on your laptop (if you are not running as a [Docker container](https://hub.docker.com/r/cloudcustodian/mailer)\n - or use `pip install c7n-mailer`\n2. In your text editor, create a `mailer.yml` file to hold your mailer config.\n3. In the AWS console, create a new standard SQS queue (quick create is fine).\n Copy the queue URL to `queue_url` in `mailer.yml`.\n4. In AWS, locate or create a role that has read access to the queue. Grab the\n role ARN and set it as `role` in `mailer.yml`.\n\nThere are different notification endpoints options, you can combine both.\n\n### Email:\nMake sure your email address is verified in SES, and set it as\n`from_address` in `mailer.yml`. By default SES is in sandbox mode where you\nmust\n[verify](http://docs.aws.amazon.com/ses/latest/DeveloperGuide/verify-email-addresses.html)\nevery individual recipient of emails. If need be, make an AWS support ticket to\nbe taken out of SES sandbox mode.\n\nYour `mailer.yml` should now look something like this:\n\n```yaml\nqueue_url: https://sqs.us-east-1.amazonaws.com/1234567890/c7n-mailer-test\nrole: arn:aws:iam::123456790:role/c7n-mailer-test\nfrom_address: you@example.com\n```\n\nYou can also set `region` if you are in a region other than `us-east-1` as well as `lambda_tags` to give the mailer tags.\n\n```yaml\nregion: us-east-2\nlambda_tags:\n owner: ops\n```\n\nNow let\'s make a Custodian policy to populate your mailer queue. Create a\n`test-policy.yml` file with this content (update `to` and `queue` to match your\nenvironment)\n\n```yaml\n policies:\n - name: c7n-mailer-test\n resource: sqs\n filters:\n - "tag:MailerTest": absent\n actions:\n - type: notify\n template: default\n priority_header: \'2\'\n subject: testing the c7n mailer\n to:\n - you@example.com\n transport:\n type: sqs\n queue: https://sqs.us-east-1.amazonaws.com/1234567890/c7n-mailer-test\n```\n\n### DataDog:\nThe standard way to do a DataDog integration is use the\nc7n integration with AWS CloudWatch and use the\n[DataDog integration with AWS](https://docs.datadoghq.com/integrations/amazon_web_services/)\nto collect CloudWatch metrics. The mailer/messenger integration is only\nfor the case you don\'t want or you can\'t use AWS CloudWatch.\n\nNote this integration requires the additional dependency of datadog python bindings:\n```\npip install datadog\n```\n\nYour `mailer.yml` should now look something like this:\n\n```yaml\nqueue_url: https://sqs.us-east-1.amazonaws.com/1234567890/c7n-mailer-test\nrole: arn:aws:iam::123456790:role/c7n-mailer-test\ndatadog_api_key: XXXXXXXXXXXXXXXXXXXXXXXXXXXXX\ndatadog_application_key: YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY\n```\n\n(Also set `region` if you are in a region other than `us-east-1`.)\n\nNow let\'s make a Custodian policy to populate your mailer queue. Create a\n`test-policy.yml`:\n\n```yaml\npolicies:\n - name: c7n-mailer-test\n resource: ebs\n filters:\n - Attachments: []\n actions:\n - type: notify\n to:\n - datadog://?metric_name=datadog.metric.name&metric_value_tag=Size\n transport:\n type: sqs\n queue: https://sqs.us-east-1.amazonaws.com/1234567890/c7n-mailer-test\n```\n\nThere is a special `to` format that specifies datadog delivery, and includes the datadog configuration via url parameters.\n- metric_name: is the name of the metrics send to DataDog\n- metric_value_tag: by default the metric value send to DataDog is `1` but if you want to use one of the tags returned in the policy you can set it with the attribute `metric_value_tag`, for example in the `test-policy.yml` the value used is the size of the EBS volume. The value must be a number and it\'s transformed to a float value.\n\n### Slack:\n\nThe Custodian mailer supports Slack messaging as a separate notification mechanism for the SQS transport method. To enable Slack integration, you must specify a Slack token in the `slack_token` field under the `mailer.yml` file.\n\n```yaml\nqueue_url: https://sqs.us-east-1.amazonaws.com/1234567890/c7n-mailer-test\nrole: arn:aws:iam::123456790:role/c7n-mailer-test\nslack_token: xoxo-token123\n```\n\nTo enable Slack messaging, several unique fields are evaluated in the policy, as shown in the below example:\n\n```\npolicies:\n - name: c7n-mailer-test\n resource: ebs\n filters:\n - Attachments: []\n actions:\n - type: notify\n slack_template: slack\n slack_msg_color: danger\n to:\n - slack://owners\n - slack://foo@bar.com\n - slack://#custodian-test\n - slack://webhook/#c7n-webhook-test\n - slack://tag/resource_tag\n - https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX\n transport:\n type: sqs\n queue: https://sqs.us-east-1.amazonaws.com/1234567890/c7n-mailer-test\n```\n\nSlack messages support use of a unique template field specified by `slack_template`. This field is unique and usage will not break\nexisting functionality for messages also specifying an email template in the `template` field. This field is optional, however,\nand if not specified, the mailer will use the default value `slack_default`.\n\nThe unique template field `slack_msg_color` can be used to specify a color\nborder for the slack message. This accepts the Slack presets of `danger` (red),\n`warning` (yellow) and `good` (green). It can also accept a HTML hex code. See\nthe [Slack documentation](https://api.slack.com/reference/messaging/attachments#fields)\nfor details.\n\nNote: if you are using a hex color code it will need to be wrapped in quotes\nlike so: `slack_msg_color: \'#4287f51\'`. Otherwise the YAML interpreter will consider it a\n[comment](https://yaml.org/spec/1.2/spec.html#id2780069).\n\nSlack integration for the mailer supports several flavors of messaging, listed below. These are not mutually exclusive and any combination of the types can be used, but the preferred method is [incoming webhooks](https://api.slack.com/incoming-webhooks).\n\n| Requires `slack_token` | Key | Type | Notes |\n|:---------------------------:|:--------------------------------------------------------------------------------|:-------|:----------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| No | `https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX` | string | **(PREFERRED)** Send to an [incoming webhook](https://api.slack.com/incoming-webhooks) (the channel is defined in the webhook) |\n| Yes | `slack://owners` | string | Send to the recipient list generated within email delivery logic |\n| Yes | `slack://foo@bar.com` | string | Send to the recipient specified by email address foo@bar.com |\n| Yes | `slack://#custodian-test` | string | Send to the Slack channel indicated in string, i.e. #custodian-test |\n| No | `slack://webhook/#c7n-webhook-test` | string | **(DEPRECATED)** Send to a Slack webhook; appended with the target channel. **IMPORTANT**: *This requires a `slack_webhook` value defined in the `mailer.yml`.* |\n| Yes | `slack://tag/resource-tag` | string | Send to target found in resource tag. Example of value in tag: https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX |\n\nSlack delivery can also be set via a resource\'s tag name. For example, using "slack://tag/slack_channel" will look for a tag name of \'slack_channel\', and if matched on a resource will deliver the message to the value of that resource\'s tag:\n\n`slack_channel:https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX`\n\nDelivery via tag has been tested with webhooks but should support all delivery methods.\n\n### Splunk HTTP Event Collector (HEC)\n\nThe Custodian mailer supports delivery to the HTTP Event Collector (HEC) endpoint of a Splunk instance as a separate notification mechanism for the SQS transport method. To enable Splunk HEC integration, you must specify the URL to the HEC endpoint as well as a valid username and token:\n\n```yaml\nqueue_url: https://sqs.us-east-1.amazonaws.com/1234567890/c7n-mailer-test\nrole: arn:aws:iam::123456790:role/c7n-mailer-test\nsplunk_hec_url: https://http-inputs-foo.splunkcloud.com/services/collector/event\nsplunk_hec_token: 268b3cc2-f32e-4a19-a1e8-aee08d86ca7f\n```\n\nTo send events for a policy to the Splunk HEC endpoint, add a ``to`` address notify action specifying the name of the Splunk index to send events to in the form ``splunkhec://indexName``:\n\n```\npolicies:\n - name: c7n-mailer-test\n resource: ebs\n filters:\n - Attachments: []\n actions:\n - type: notify\n to:\n - splunkhec://myIndexName\n transport:\n type: sqs\n queue: https://sqs.us-east-1.amazonaws.com/1234567890/c7n-mailer-test\n```\n\nThe ``splunkhec://indexName`` address type can be combined in the same notify action with other destination types (e.g. email, Slack, DataDog, etc).\n\n### Now run:\n\n```\nc7n-mailer --config mailer.yml --update-lambda && custodian run -c test-policy.yml -s .\n```\n\nNote: You can set the profile via environment variable e.g. `export AWS_DEFAULT_PROFILE=foo`\n\nYou should see output similar to the following:\n\n```\n(env) $ c7n-mailer --config mailer.yml --update-lambda && custodian run -c test-policy.yml -s .\nDEBUG:custodian.lambda:Created custodian lambda archive size: 3.01mb\n2017-01-12 07:55:16,227: custodian.policy:INFO Running policy c7n-mailer-test resource: sqs region:default c7n:0.8.22.0\n2017-01-12 07:55:16,229: custodian.policy:INFO policy: c7n-mailer-test resource:sqs has count:1 time:0.00\n2017-01-12 07:55:18,017: custodian.actions:INFO sent message:dead-beef policy:c7n-mailer-test template:default count:1\n2017-01-12 07:55:18,017: custodian.policy:INFO policy: c7n-mailer-test action: notify resources: 1 execution_time: 1.79\n(env) $\n```\n\nCheck the AWS console for a new Lambda named `cloud-custodian-mailer`. The\nmailer runs every five minutes, so wait a bit and then look for an email in\nyour inbox. If it doesn\'t appear, look in the lambda\'s logs for debugging\ninformation. If it does, congratulations! You are off and running with the\nCustodian mailer.\n\n\n## Usage & Configuration\n\nOnce [installed](#developer-install-os-x-el-capitan) you should have a\n`c7n-mailer` executable on your path:\naws\n```\n(env) $ c7n-mailer\nusage: c7n-mailer [-h] -c CONFIG\nc7n-mailer: error: argument -c/--config is required\n(env) $\n```\n\nFundamentally what `c7n-mailer` does is deploy a Lambda (using\n[Mu](http://cloudcustodian.io/docs/policy/mu.html)) based on\nconfiguration you specify in a YAML file. Here is [the\nschema](./c7n_mailer/cli.py#L11-L41) to which the file must conform,\nand here is a description of the options:\n\n| Required? | Key | Type | Notes |\n|:---------:|:----------------|:-----------------|:------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| ✅ | `queue_url` | string | the queue to listen to for messages |\n| | `from_address` | string | default from address |\n| | `endpoint_url` | string | SQS API URL (for use with VPC Endpoints) |\n| | `contact_tags` | array of strings | tags that we should look at for address information |\n\n### Standard Lambda Function Config\n\n| Required? | Key | Type |\n|:---------:|:---------------------|:-----------------|\n| | `dead_letter_config` | object |\n| | `memory` | integer |\n| | `region` | string |\n| ✅ | `role` | string |\n| | `runtime` | string |\n| | `security_groups` | array of strings |\n| | `subnets` | array of strings |\n| | `timeout` | integer |\n\n### Standard Azure Functions Config\n\n| Required? | Key | Type | Notes |\n|:---------:|:----------------------|:-------|:---------------------------------------------------------------------------------------|\n| | `function_properties` | object | Contains `appInsights`, `storageAccount` and `servicePlan` objects |\n| | `appInsights` | object | Contains `name`, `location` and `resourceGroupName` properties |\n| | `storageAccount` | object | Contains `name`, `location` and `resourceGroupName` properties |\n| | `servicePlan` | object | Contains `name`, `location`, `resourceGroupName`, `skuTier` and `skuName` properties |\n| | `name` | string | |\n| | `location` | string | Default: `west us 2` |\n| | `resourceGroupName` | string | Default `cloud-custodian` |\n| | `skuTier` | string | Default: `Basic` |\n| | `skuName` | string | Default: `B1` |\n\n\n\n\n### Mailer Infrastructure Config\n\n| Required? | Key | Type | Notes |\n|:---------:|:----------------------------|:--------|:---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| | `cache_engine` | string | cache engine; either sqlite or redis |\n| | `cross_accounts` | object | account to assume back into for sending to SNS topics |\n| | `debug` | boolean | debug on/off |\n| | `ldap_bind_dn` | string | eg: ou=people,dc=example,dc=com |\n| | `ldap_bind_user` | string | eg: FOO\\\\BAR |\n| | `ldap_bind_password` | string | ldap bind password |\n| | `ldap_bind_password_in_kms` | boolean | defaults to true, most people (except capone) want to set this to false. If set to true, make sure `ldap_bind_password` contains your KMS encrypted ldap bind password as a base64-encoded string. |\n| | `ldap_email_attribute` | string | |\n| | `ldap_email_key` | string | eg \'mail\' |\n| | `ldap_manager_attribute` | string | eg \'manager\' |\n| | `ldap_uid_attribute` | string | |\n| | `ldap_uid_regex` | string | |\n| | `ldap_uid_tags` | string | |\n| | `ldap_uri` | string | eg \'ldaps://example.com:636\' |\n| | `redis_host` | string | redis host if cache_engine == redis |\n| | `redis_port` | integer | redis port, default: 6369 |\n| | `ses_region` | string | AWS region that handles SES API calls |\n\n### SMTP Config\n\n| Required? | Key | Type | Notes |\n|:---------:|:----------------|:-----------------|:------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| | `smtp_server` | string | to configure your lambda role to talk to smtpd in your private vpc, see [here](https://docs.aws.amazon.com/lambda/latest/dg/vpc.html) | |\n| | `smtp_port` | integer | smtp port (default is 25) |\n| | `smtp_ssl` | boolean | this defaults to True |\n| | `smtp_username` | string | |\n| | `smtp_password` | secured string | |\n\nIf `smtp_server` is unset, `c7n_mailer` will use AWS SES or Azure SendGrid.\n\n#### DataDog Config\n\n| Required? | Key | Type | Notes |\n|:---------:|:--------------------------|:-------|:-------------------------|\n| | `datadog_api_key` | string | DataDog API key. |\n| | `datadog_application_key` | string | Datadog application key. |\n\nThese fields are not necessary if c7n_mailer is run in a instance/lambda/etc with the DataDog agent.\n\n### Slack Config\n\n| Required? | Key | Type | Notes |\n|:---------:|:--------------|:-------|:----------------|\n| | `slack_token` | string | Slack API token |\n\n### SendGrid Config\n\n| Required? | Key | Type | Notes |\n|:---------:|:-------------------|:---------------|:-------------------|\n| | `sendgrid_api_key` | secured string | SendGrid API token |\n\n\n### Splunk HEC Config\n\nThe following configuration items are *all* optional. The ones marked "Required for Splunk" are only required if you\'re sending notifications to ``splunkhec://`` destinations.\n\n| Required for Splunk? | Key | Type | Notes |\n|:--------------------:|:------------------------|:-----------------|:-----------------------------------------------------------------------------------------------------------------------------------|\n| ✅ | `splunk_hec_url` | string | URL to your Splunk HTTP Event Collector endpoint |\n| ✅ | `splunk_hec_token` | string | Splunk HEC authentication token for specified username |\n| | `splunk_remove_paths` | array of strings | List of [RFC6901](http://tools.ietf.org/html/rfc6901) JSON Pointers to remove from the event, if present, before sending to Splunk |\n| | `splunk_actions_list` | boolean | If true, add an `actions` list to the top-level message sent to Splunk, containing the names of all non-notify actions taken |\n| | `splunk_max_attempts` | integer | Maximum number of times to try POSTing data to Splunk HEC (default 4) |\n| | `splunk_hec_max_length` | integer | Maximum data length that Splunk HEC accepts; an error will be logged for any message sent over this length |\n| | `splunk_hec_sourcetype` | string | Configure sourcetype of the payload sent to Splunk HEC. (default is \'_json\') |\n\n### SDK Config\n\n| Required? | Key | Type | Notes |\n|:---------:|:--------------|:-------|:------|\n| | `http_proxy` | string | |\n| | `https_proxy` | string | |\n| | `profile` | string | |\n\n\n### Secured String\n\nIn order to ensure sensitive data is not stored plaintext in a policy, `c7n-mailer` supports secured\nstrings. You can treat it as a regular `string` or use `secured string` features.\n\n#### AWS\n\nYou can use KMS to encrypt your secrets and use encrypted secret in mailer policy.\nCustodian tries to decrypt the string using KMS, if it fails c7n treats it as a plaintext secret.\n\n```yaml\n plaintext_secret: \n secured_string: \n```\n\n#### Azure\n\nYou can store your secrets in Azure Key Vault secrets and reference them from the policy.\n\n```yaml\n plaintext_secret: \n secured_string:\n type: azure.keyvault\n secret: https://your-vault.vault.azure.net/secrets/your-secret\n```\n\nNote: `secrets.get` permission on the KeyVault for the Service Principal is required.\n\n## Configuring a policy to send email\n\nOutbound email can be added to any policy by including the `notify` action.\n\n```yaml\n\npolicies:\n - name: bad-apples\n resource: asg\n filters:\n - "tag:ASV": absent\n actions:\n - type: notify\n template: default\n template_format: \'html\'\n priority_header: \'1\'\n subject: fix your tags\n to:\n - resource-owner\n owner_absent_contact:\n - foo@example.com\n transport:\n type: sqs\n queue: https://sqs.us-east-1.amazonaws.com/80101010101/cloud-custodian-message-relay\n```\n\nSo breaking it down, you add an action of type `notify`. You can specify a\ntemplate that\'s used to format the email; customizing templates is described\n[below](#writing-an-email-template).\n\nThe `to` list specifies the intended recipient for the email. You can specify\neither an email address, an SNS topic, a Datadog Metric, or a special value. The special values\nare either\n\n- `resource-owner`, in which case the email will be sent to the listed\n `OwnerContact` tag on the resource that matched the policy, or\n- `event-owner` for push-based/realtime policies that will send to the user\n that was responsible for the underlying event.\n- `priority_header` to indicate the importance of an email with [headers](https://www.chilkatsoft.com/p/p_471.asp). Different emails clients will display stars, exclamation points or flags depending on the value. Should be an string from 1 to 5.\n\nBoth of these special values are best effort, i.e., if no `OwnerContact` tag is\nspecified then `resource-owner` email will not be delivered, and in the case of\n`event-owner` an instance role or system account will not result in an email.\n\nThe optional `owner_absent_contact` list specifies email addresses to notify only if\nthe `resource-owner` special option was unable to find any matching owner contact\ntags.\n\nIn addition, you may choose to use a custom tag instead of the default `OwnerContact`. In order to configure this, the mailer.yaml must be modified to include the contact_tags and the custom tag. The `resource-owner` will now email the custom tag instead of `OwnerContact`.\n\n```yaml\ncontact_tags:\n - "custom_tag"\n```\n\n\nFor reference purposes, the JSON Schema of the `notify` action:\n\n```json\n{\n "type": "object",\n "required": ["type", "transport", "to"],\n "properties": {\n "type": {"enum": ["notify"]},\n "to": {"type": "array", "items": {"type": "string"}},\n "owner_absent_contact": {"type": "array", "items": {"type": "string"}},\n "subject": {"type": "string"},\n "priority_header": {"type": "string"},\n "template": {"type": "string"},\n "transport": {\n "type": "object",\n "required": ["type", "queue"],\n "properties": {\n "queue": {"type": "string"},\n "region": {"type": "string"},\n "type": {"enum": ["sqs"]}\n }\n }\n }\n}\n```\n\n## Using on Azure\n\nRequires:\n\n- `c7n_azure` package. See [Installing Azure Plugin](https://cloudcustodian.io/docs/azure/gettingstarted.html#azure-install-cc)\n- SendGrid account. See [Using SendGrid with Azure](https://docs.microsoft.com/en-us/azure/sendgrid-dotnet-how-to-send-email)\n- [Azure Storage Queue](https://azure.microsoft.com/en-us/services/storage/queues/)\n\nThe mailer supports an Azure Storage Queue transport and SendGrid delivery on Azure.\nConfiguration for this scenario requires only minor changes from AWS deployments.\n\nYou will need to grant `Storage Queue Data Contributor` role on the Queue for the identity\nmailer is running under.\n\nThe notify action in your policy will reflect transport type `asq` with the URL\nto an Azure Storage Queue. For example:\n\n```yaml\npolicies:\n - name: azure-notify\n resource: azure.resourcegroup\n description: send a message to a mailer instance\n actions:\n - type: notify\n template: default\n priority_header: \'2\'\n subject: Hello from C7N Mailer\n to:\n - you@youremail.com\n transport:\n type: asq\n queue: https://storageaccount.queue.core.windows.net/queuename\n```\n\nIn your mailer configuration, you\'ll need to provide your SendGrid API key as well as\nprefix your queue URL with `asq://` to let mailer know what type of queue it is:\n\n```yaml\nqueue_url: asq://storageaccount.queue.core.windows.net/queuename\nfrom_address: you@youremail.com\nsendgrid_api_key: SENDGRID_API_KEY\n```\n\nThe mailer will transmit all messages found on the queue on each execution, and will retry\nsending 3 times in the event of a failure calling SendGrid. After the retries the queue\nmessage will be discarded.\n\nIn addition, SendGrid delivery on Azure supports using resource tags to send emails. For example, in the `to` field:\n\n```yaml\nto:\n - tag:OwnerEmail\n```\n\nThis will find the email address associated with the resource\'s `OwnerEmail` tag, and send an email to the specified address.\nIf no tag is found, or the associated email address is invalid, no email will be sent.\n\n### Deploying Azure Functions\n\nThe `--update-lambda` CLI option will also deploy Azure Functions if you have an Azure\nmailer configuration.\n\n`c7n-mailer --config mailer.yml --update-lambda`\n\nwhere a simple `mailer.yml` using Consumption functions may look like:\n\n```yaml\nqueue_url: asq://storage.queue.core.windows.net/custodian\nfrom_address: foo@mail.com\nsendgrid_api_key: \nfunction_properties:\n servicePlan:\n name: \'testmailer1\'\n```\n\n### Configuring Function Identity\n\nYou can configure the service principal used for api calls made by the\nmailer azure function by specifying an identity configuration under\nfunction properties. Mailer supports User Assigned Identities, System\nManaged Identities, defaulting to an embedding of the cli user\'s\nservice principals credentials.\n\nWhen specifying a user assigned identity, unlike in a custodian\nfunction policy where simply providing an name is sufficient, the\nuuid/id and client id of the identity must be provided. You can\nretrieve this information on the cli using the `az identity list`.\n\n```yaml\n\nfunction_properties:\n identity:\n type: UserAssigned\n id: "/subscriptions/333fd504-7f11-2270-88c8-7325a27f7222/resourcegroups/c7n/providers/Microsoft.ManagedIdentity/userAssignedIdentities/mailer"\n client_id: "b9cb06fa-dfb8-4342-add3-aab5acb2abbc"\n```\n\nA system managed identity can also be used, and the Azure platform will\ncreate an identity when the function is provisoned, however the function\'s identity\nthen needs to be retrieved and mapped to rbac permissions post provisioning, this\nuser management activity must be performed manually.\n\n```yaml\n\nfunction_properties:\n identity:\n type: SystemAssigned\n```\n\n## Writing an email template\n\nTemplates are authored in [jinja2](http://jinja.pocoo.org/docs/dev/templates/).\nDrop a file with the `.j2` extension into the a templates directory, and send a pull request to this\nrepo. You can then reference it in the `notify` action as the `template`\nvariable by file name minus extension. Templates ending with `.html.j2` are\nsent as HTML-formatted emails, all others are sent as plain text.\n\nYou can use `-t` or `--templates` cli argument to pass custom folder with your templates.\n\nThe following variables are available when rendering templates:\n\n| variable | value |\n|:------------------|:-------------------------------------------------------------|\n| `recipient` | email address |\n| `resources` | list of resources that matched the policy filters |\n| `event` | for CWE-push-based lambda policies, the event that triggered |\n| `action` | `notify` action that generated this SQS message |\n| `policy` | policy that triggered this notify action |\n| `account` | short name of the aws account |\n| `region` | region the policy was executing in |\n| `execution_start` | The time policy started executing |\n\nThe following extra global functions are available:\n\n| signature | behavior |\n|:-----------------------------------------------------------------------------|:--------------------------------------------------------------------------------------------------|\n| `format_struct(struct)` | pretty print a json structure |\n| `resource_tag(resource, key)` | retrieve a tag value from a resource or return an empty string, aliased as get_resource_tag_value |\n| `format_resource(resource, resource_type)` | renders a one line summary of a resource |\n| `date_time_format(utc_str, tz_str=\'US/Eastern\', format=\'%Y %b %d %H:%M %Z\')` | customize rendering of an utc datetime string |\n| `search(expression, value)` | jmespath search value using expression |\n| `yaml_safe(value)` | yaml dumper |\n\nThe following extra jinja filters are available:\n\n| filter | behavior |\n|:-----------------------------------------------------------------------------------------------|:----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| utc_string|date_time_format(tz_str=\'US/Pacific\', format=\'%Y %b %d %H:%M %Z\') | pretty [format](https://docs.python.org/2/library/datetime.html#strftime-strptime-behavior) the date / time |\n| 30|get_date_time_delta | Convert a time [delta](https://docs.python.org/2/library/datetime.html#datetime.timedelta) like \'30\' days in the future, to a datetime string. You can also use negative values for the past. |\n\n\n## Developer Install (OS X El Capitan)\n\nClone the repository:\n```\n$ git clone https://github.com/cloud-custodian/cloud-custodian\n```\nInstall dependencies (with virtualenv):\n```\n$ virtualenv c7n_mailer\n$ source c7n_mailer/bin/activate\n$ cd tools/c7n_mailer\n$ pip install -r requirements.txt\n```\nInstall the extensions:\n```\npython setup.py develop\n```\n\n## Testing Templates and Recipients\n\nA ``c7n-mailer-replay`` entrypoint is provided to assist in testing email notifications\nand templates. This script operates on an actual SQS message from cloud-custodian itself,\nwhich you can either retrieve from the SQS queue or replicate locally. By default it expects\nthe message file to be base64-encoded, gzipped JSON, just like c7n sends to SQS. With the\n``-p`` | ``--plain`` argument, it will expect the message file to contain plain JSON.\n\n``c7n-mailer-replay`` has three main modes of operation:\n\n* With no additional arguments, it will render the template specified by the policy the\n message is for, and actually send mail from the local machine as ``c7n-mailer`` would.\n This only works with SES, not SMTP.\n* With the ``-T`` | ``--template-print`` argument, it will log the email addresses that would\n receive mail, and print the rendered message body template to STDOUT.\n* With the ``-d`` | ``--dry-run`` argument, it will print the actual email body (including headers)\n that would be sent, for each message that would be sent, to STDOUT.\n\n### Testing Templates for Azure\n\nThe ``c7n-mailer-replay`` entrypoint can be used to test templates for Azure with either of the arguments:\n* ``-T`` | ``--template-print``\n* ``-d`` | ``--dry-run``\n\nRunning ``c7n-mailer-replay`` without either of these arguments will throw an error as it will attempt\nto authorize with AWS.\n\nThe following is an example for retrieving a sample message to test against templates:\n\n* Run a policy with the notify action, providing the name of the template to test, to populate the queue.\n\n* Using the azure cli, save the message locally:\n```\n$ az storage message get --queue-name --account-name --query \'[].content\' > test_message.gz\n```\n* The example message can be provided to ``c7n-mailer-replay`` by running:\n\n```\n$ c7n-mailer-replay test_message.gz -T --config mailer.yml\n```\n',
'long_description_content_type': 'text/markdown',
'author': 'Cloud Custodian Project',
'author_email': None,
@@ -47,7 +48,7 @@
'package_data': package_data,
'install_requires': install_requires,
'entry_points': entry_points,
- 'python_requires': '>=3.6,<4.0',
+ 'python_requires': '>=3.7,<4.0',
}
diff --git a/tools/c7n_mailer/tests/common.py b/tools/c7n_mailer/tests/common.py
index 762b8c367ff..1c2519d67d0 100644
--- a/tools/c7n_mailer/tests/common.py
+++ b/tools/c7n_mailer/tests/common.py
@@ -44,7 +44,7 @@
'role': 'arn:aws:iam::xxxx:role/cloudcustodian-mailer',
'ldap_uid_tags': ['CreatorName', 'Owner'],
'templates_folders': [os.path.abspath(os.path.dirname(__file__)),
- os.path.abspath('/')],
+ os.path.abspath('/'), ''],
}
MAILER_CONFIG_AZURE = {
diff --git a/tools/c7n_mailer/tests/test_utils.py b/tools/c7n_mailer/tests/test_utils.py
index c7ba6c8efa7..f9a7dfe87d5 100644
--- a/tools/c7n_mailer/tests/test_utils.py
+++ b/tools/c7n_mailer/tests/test_utils.py
@@ -112,9 +112,8 @@ def test_s3(self):
def test_alb(self):
self.assertEqual(
utils.resource_format(
- {'LoadBalancerArn':
- 'arn:aws:elasticloadbalancing:us-east-1:367930536793:'
- 'loadbalancer/app/dev/1234567890',
+ {'LoadBalancerArn': 'arn:aws:elasticloadbalancing:us-east-1:367930536793'
+ ':loadbalancer/app/dev/1234567890',
'AvailabilityZones': [], 'Scheme': 'internal'},
'app-elb'),
'arn: arn:aws:elasticloadbalancing:us-east-1:367930536793:'
@@ -142,9 +141,37 @@ def test_cloudtrail(self):
"trail-x",
)
+ def test_service_quota(self):
+ self.assertEqual(
+ utils.resource_format(
+ {
+ "ServiceName": "Amazon EC2 Auto Scaling",
+ "QuotaName": "Auto Scaling groups per region",
+ "c7n:UsageMetric": {"metric": 54, "quota": 200},
+ },
+ "service-quota",
+ ),
+ "ServiceName: Amazon EC2 Auto Scaling QuotaName: Auto Scaling groups per region "
+ "Quota: 200 Usage: 54\n"
+ )
+
+ def test_service_quota_none_usagemetric(self):
+ self.assertEqual(
+ utils.resource_format(
+ {
+ "ServiceName": "AWS Cloud Map",
+ "QuotaName": "Namespaces per Region",
+ "c7n:MatchedFilters": [
+ "UsageMetric"
+ ]
+ },
+ "service-quota",
+ ),
+ "ServiceName: AWS Cloud Map QuotaName: Namespaces per Region\n"
+ )
-class GetAwsUsernameFromEvent(unittest.TestCase):
+class GetAwsUsernameFromEvent(unittest.TestCase):
# note principalId is very org/domain specific for federated?, it would be
# good to get confirmation from capone on this event / test.
CLOUDTRAIL_EVENT = {
@@ -378,7 +405,8 @@ def test_get_rendered_jinja(self):
def test_get_message_subject(self):
subject = utils.get_message_subject(SQS_MESSAGE_1)
self.assertEqual(subject,
- SQS_MESSAGE_1['action']['subject'].replace('{{ account }}', SQS_MESSAGE_1['account']))
+ SQS_MESSAGE_1['action']['subject'].replace('{{ account }}',
+ SQS_MESSAGE_1['account']))
def test_kms_decrypt(self):
config = {'test': {'secret': 'mysecretpassword'}}
diff --git a/tools/c7n_openstack/poetry.lock b/tools/c7n_openstack/poetry.lock
index 79ec730f64f..33d25aa68b2 100644
--- a/tools/c7n_openstack/poetry.lock
+++ b/tools/c7n_openstack/poetry.lock
@@ -8,14 +8,14 @@ python-versions = "*"
[[package]]
name = "argcomplete"
-version = "1.12.3"
+version = "2.0.0"
description = "Bash tab completion for argparse"
category = "dev"
optional = false
-python-versions = "*"
+python-versions = ">=3.6"
[package.dependencies]
-importlib-metadata = {version = ">=0.23,<5", markers = "python_version == \"3.6\" or python_version == \"3.7\""}
+importlib-metadata = {version = ">=0.23,<5", markers = "python_version == \"3.7\""}
[package.extras]
test = ["coverage", "flake8", "pexpect", "wheel"]
@@ -30,29 +30,29 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
[[package]]
name = "attrs"
-version = "21.2.0"
+version = "21.4.0"
description = "Classes Without Boilerplate"
category = "dev"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
[package.extras]
-dev = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "furo", "sphinx", "sphinx-notfound-page", "pre-commit"]
+dev = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "furo", "sphinx", "sphinx-notfound-page", "pre-commit", "cloudpickle"]
docs = ["furo", "sphinx", "zope.interface", "sphinx-notfound-page"]
-tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface"]
-tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins"]
+tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "cloudpickle"]
+tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "cloudpickle"]
[[package]]
name = "boto3"
-version = "1.18.21"
+version = "1.21.42"
description = "The AWS SDK for Python"
category = "dev"
optional = false
python-versions = ">= 3.6"
[package.dependencies]
-botocore = ">=1.21.21,<1.22.0"
-jmespath = ">=0.7.1,<1.0.0"
+botocore = ">=1.24.42,<1.25.0"
+jmespath = ">=0.7.1,<2.0.0"
s3transfer = ">=0.5.0,<0.6.0"
[package.extras]
@@ -60,36 +60,37 @@ crt = ["botocore[crt] (>=1.21.0,<2.0a0)"]
[[package]]
name = "botocore"
-version = "1.21.21"
+version = "1.24.42"
description = "Low-level, data-driven core of boto 3."
category = "dev"
optional = false
python-versions = ">= 3.6"
[package.dependencies]
-jmespath = ">=0.7.1,<1.0.0"
+jmespath = ">=0.7.1,<2.0.0"
python-dateutil = ">=2.1,<3.0.0"
urllib3 = ">=1.25.4,<1.27"
[package.extras]
-crt = ["awscrt (==0.11.24)"]
+crt = ["awscrt (==0.13.8)"]
[[package]]
name = "c7n"
-version = "0.9.14"
+version = "0.9.16"
description = "Cloud Custodian - Policy Rules Engine"
category = "dev"
optional = false
-python-versions = "^3.6"
+python-versions = "^3.7"
develop = true
[package.dependencies]
-argcomplete = "^1.11.1"
+argcomplete = ">=1.12.3"
boto3 = "^1.12.31"
-importlib-metadata = ">1.7.0;python_version<3.8"
-jsonschema = "^3.2.0"
-python-dateutil = "^2.8.1"
-pyyaml = "^5.3"
+docutils = ">=0.14,<0.18"
+importlib-metadata = ">=4.11.1"
+jsonschema = ">=3.0.0"
+python-dateutil = "^2.8.2"
+pyyaml = ">=5.4.0"
tabulate = "^0.8.6"
[package.source]
@@ -98,7 +99,7 @@ url = "../.."
[[package]]
name = "certifi"
-version = "2021.5.30"
+version = "2021.10.8"
description = "Python package for providing Mozilla's CA Bundle."
category = "main"
optional = false
@@ -106,7 +107,7 @@ python-versions = "*"
[[package]]
name = "cffi"
-version = "1.14.6"
+version = "1.15.0"
description = "Foreign Function Interface for Python calling C code."
category = "main"
optional = false
@@ -117,7 +118,7 @@ pycparser = "*"
[[package]]
name = "charset-normalizer"
-version = "2.0.4"
+version = "2.0.12"
description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet."
category = "main"
optional = false
@@ -136,7 +137,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
[[package]]
name = "cryptography"
-version = "3.4.7"
+version = "36.0.2"
description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers."
category = "main"
optional = false
@@ -147,23 +148,31 @@ cffi = ">=1.12"
[package.extras]
docs = ["sphinx (>=1.6.5,!=1.8.0,!=3.1.0,!=3.1.1)", "sphinx-rtd-theme"]
-docstest = ["doc8", "pyenchant (>=1.6.11)", "twine (>=1.12.0)", "sphinxcontrib-spelling (>=4.0.1)"]
+docstest = ["pyenchant (>=1.6.11)", "twine (>=1.12.0)", "sphinxcontrib-spelling (>=4.0.1)"]
pep8test = ["black", "flake8", "flake8-import-order", "pep8-naming"]
-sdist = ["setuptools-rust (>=0.11.4)"]
+sdist = ["setuptools_rust (>=0.11.4)"]
ssh = ["bcrypt (>=3.1.5)"]
-test = ["pytest (>=6.0)", "pytest-cov", "pytest-subtests", "pytest-xdist", "pretend", "iso8601", "pytz", "hypothesis (>=1.11.4,!=3.79.2)"]
+test = ["pytest (>=6.2.0)", "pytest-cov", "pytest-subtests", "pytest-xdist", "pretend", "iso8601", "pytz", "hypothesis (>=1.11.4,!=3.79.2)"]
[[package]]
name = "decorator"
-version = "5.0.9"
+version = "5.1.1"
description = "Decorators for Humans"
category = "main"
optional = false
python-versions = ">=3.5"
+[[package]]
+name = "docutils"
+version = "0.17.1"
+description = "Docutils -- Python Documentation Utilities"
+category = "dev"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
+
[[package]]
name = "dogpile.cache"
-version = "1.1.3"
+version = "1.1.5"
description = "A caching front-end based on the Dogpile lock."
category = "main"
optional = false
@@ -175,7 +184,7 @@ stevedore = ">=3.0.0"
[[package]]
name = "idna"
-version = "3.2"
+version = "3.3"
description = "Internationalized Domain Names in Applications (IDNA)"
category = "main"
optional = false
@@ -183,20 +192,35 @@ python-versions = ">=3.5"
[[package]]
name = "importlib-metadata"
-version = "4.6.4"
+version = "4.11.3"
description = "Read metadata from Python packages"
category = "main"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.7"
[package.dependencies]
typing-extensions = {version = ">=3.6.4", markers = "python_version < \"3.8\""}
zipp = ">=0.5"
[package.extras]
-docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
+docs = ["sphinx", "jaraco.packaging (>=9)", "rst.linker (>=1.9)"]
perf = ["ipython"]
-testing = ["pytest (>=4.6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pep517", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy", "importlib-resources (>=1.3)"]
+testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)", "importlib-resources (>=1.3)"]
+
+[[package]]
+name = "importlib-resources"
+version = "5.7.1"
+description = "Read resources from Python packages"
+category = "dev"
+optional = false
+python-versions = ">=3.7"
+
+[package.dependencies]
+zipp = {version = ">=3.1.0", markers = "python_version < \"3.10\""}
+
+[package.extras]
+docs = ["sphinx", "jaraco.packaging (>=9)", "rst.linker (>=1.9)"]
+testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)"]
[[package]]
name = "iniconfig"
@@ -208,19 +232,19 @@ python-versions = "*"
[[package]]
name = "iso8601"
-version = "0.1.16"
+version = "1.0.2"
description = "Simple module to parse ISO 8601 dates"
category = "main"
optional = false
-python-versions = "*"
+python-versions = ">=3.6.2,<4.0"
[[package]]
name = "jmespath"
-version = "0.10.0"
+version = "1.0.0"
description = "JSON Matching Expressions"
category = "main"
optional = false
-python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*"
+python-versions = ">=3.7"
[[package]]
name = "jsonpatch"
@@ -235,7 +259,7 @@ jsonpointer = ">=1.9"
[[package]]
name = "jsonpointer"
-version = "2.1"
+version = "2.3"
description = "Identify specific nodes in a JSON document (RFC 6901)"
category = "main"
optional = false
@@ -243,29 +267,30 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
[[package]]
name = "jsonschema"
-version = "3.2.0"
+version = "4.4.0"
description = "An implementation of JSON Schema validation for Python"
category = "dev"
optional = false
-python-versions = "*"
+python-versions = ">=3.7"
[package.dependencies]
attrs = ">=17.4.0"
importlib-metadata = {version = "*", markers = "python_version < \"3.8\""}
-pyrsistent = ">=0.14.0"
-six = ">=1.11.0"
+importlib-resources = {version = ">=1.4.0", markers = "python_version < \"3.9\""}
+pyrsistent = ">=0.14.0,<0.17.0 || >0.17.0,<0.17.1 || >0.17.1,<0.17.2 || >0.17.2"
+typing-extensions = {version = "*", markers = "python_version < \"3.8\""}
[package.extras]
-format = ["idna", "jsonpointer (>1.13)", "rfc3987", "strict-rfc3339", "webcolors"]
-format_nongpl = ["idna", "jsonpointer (>1.13)", "webcolors", "rfc3986-validator (>0.1.0)", "rfc3339-validator"]
+format = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3987", "uri-template", "webcolors (>=1.11)"]
+format_nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3986-validator (>0.1.0)", "uri-template", "webcolors (>=1.11)"]
[[package]]
name = "keystoneauth1"
-version = "4.3.1"
+version = "4.5.0"
description = "Authentication Library for OpenStack Identity"
category = "main"
optional = false
-python-versions = ">=3.6"
+python-versions = "*"
[package.dependencies]
iso8601 = ">=0.1.11"
@@ -284,11 +309,11 @@ test = ["PyYAML (>=3.12)", "bandit (>=1.1.0,<1.6.0)", "betamax (>=0.7.0)", "cove
[[package]]
name = "multidict"
-version = "5.1.0"
+version = "6.0.2"
description = "multidict implementation"
category = "dev"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.7"
[[package]]
name = "munch"
@@ -351,18 +376,18 @@ pbr = ">=2.0.0,<2.1.0 || >2.1.0"
[[package]]
name = "packaging"
-version = "21.0"
+version = "21.3"
description = "Core utilities for Python packages"
category = "dev"
optional = false
python-versions = ">=3.6"
[package.dependencies]
-pyparsing = ">=2.0.2"
+pyparsing = ">=2.0.2,<3.0.5 || >3.0.5"
[[package]]
name = "pbr"
-version = "5.6.0"
+version = "5.8.1"
description = "Python Build Reasonableness"
category = "main"
optional = false
@@ -370,29 +395,30 @@ python-versions = ">=2.6"
[[package]]
name = "pluggy"
-version = "0.13.1"
+version = "1.0.0"
description = "plugin and hook calling mechanisms for python"
category = "dev"
optional = false
-python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
+python-versions = ">=3.6"
[package.dependencies]
importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""}
[package.extras]
dev = ["pre-commit", "tox"]
+testing = ["pytest", "pytest-benchmark"]
[[package]]
name = "py"
-version = "1.10.0"
+version = "1.11.0"
description = "library with cross-python path, ini-parsing, io, code, log facilities"
category = "dev"
optional = false
-python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
[[package]]
name = "pycparser"
-version = "2.20"
+version = "2.21"
description = "C parser in Python"
category = "main"
optional = false
@@ -400,23 +426,26 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
[[package]]
name = "pyparsing"
-version = "2.4.7"
-description = "Python parsing module"
+version = "3.0.8"
+description = "pyparsing module - Classes and methods to define and execute parsing grammars"
category = "dev"
optional = false
-python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*"
+python-versions = ">=3.6.8"
+
+[package.extras]
+diagrams = ["railroad-diagrams", "jinja2"]
[[package]]
name = "pyrsistent"
-version = "0.18.0"
+version = "0.18.1"
description = "Persistent/Functional/Immutable data structures"
category = "dev"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.7"
[[package]]
name = "pytest"
-version = "6.2.4"
+version = "6.2.5"
description = "pytest: simple powerful testing with Python"
category = "dev"
optional = false
@@ -429,7 +458,7 @@ colorama = {version = "*", markers = "sys_platform == \"win32\""}
importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""}
iniconfig = "*"
packaging = "*"
-pluggy = ">=0.12,<1.0.0a1"
+pluggy = ">=0.12,<2.0"
py = ">=1.8.2"
toml = "*"
@@ -449,15 +478,15 @@ six = ">=1.5"
[[package]]
name = "pyyaml"
-version = "5.4.1"
+version = "6.0"
description = "YAML parser and emitter for Python"
category = "main"
optional = false
-python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*"
+python-versions = ">=3.6"
[[package]]
name = "requests"
-version = "2.26.0"
+version = "2.27.1"
description = "Python HTTP for Humans."
category = "main"
optional = false
@@ -483,7 +512,7 @@ python-versions = "*"
[[package]]
name = "s3transfer"
-version = "0.5.0"
+version = "0.5.2"
description = "An Amazon S3 Transfer Manager"
category = "dev"
optional = false
@@ -505,7 +534,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*"
[[package]]
name = "stevedore"
-version = "3.3.0"
+version = "3.5.0"
description = "Manage dynamic plugins for Python applications"
category = "main"
optional = false
@@ -536,22 +565,22 @@ python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*"
[[package]]
name = "typing-extensions"
-version = "3.10.0.0"
-description = "Backported and Experimental Type Hints for Python 3.5+"
+version = "4.2.0"
+description = "Backported and Experimental Type Hints for Python 3.7+"
category = "main"
optional = false
-python-versions = "*"
+python-versions = ">=3.7"
[[package]]
name = "urllib3"
-version = "1.26.6"
+version = "1.26.9"
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.*, <4"
[package.extras]
-brotli = ["brotlipy (>=0.6.0)"]
+brotli = ["brotlicffi (>=0.8.0)", "brotli (>=1.0.9)", "brotlipy (>=0.6.0)"]
secure = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "certifi", "ipaddress"]
socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"]
@@ -571,15 +600,15 @@ yarl = {version = "*", markers = "python_version >= \"3.6\""}
[[package]]
name = "wrapt"
-version = "1.12.1"
+version = "1.14.0"
description = "Module for decorators, wrappers and monkey patching."
category = "dev"
optional = false
-python-versions = "*"
+python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7"
[[package]]
name = "yarl"
-version = "1.6.3"
+version = "1.7.2"
description = "Yet another URL library"
category = "dev"
optional = false
@@ -592,20 +621,20 @@ typing-extensions = {version = ">=3.7.4", markers = "python_version < \"3.8\""}
[[package]]
name = "zipp"
-version = "3.5.0"
+version = "3.8.0"
description = "Backport of pathlib-compatible object wrapper for zip files"
category = "main"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.7"
[package.extras]
-docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
-testing = ["pytest (>=4.6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "jaraco.itertools", "func-timeout", "pytest-black (>=0.3.7)", "pytest-mypy"]
+docs = ["sphinx", "jaraco.packaging (>=9)", "rst.linker (>=1.9)"]
+testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "jaraco.itertools", "func-timeout", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)"]
[metadata]
lock-version = "1.1"
-python-versions = "^3.6"
-content-hash = "4b766a1b428b75f8cc52fc8863cf71cab4cccd4350f025fe26e55bb72982a18d"
+python-versions = "^3.7"
+content-hash = "1c91cca3cba51a3288eadb6bd6f09e0bb36a26c2decfa647a75010b39062eb11"
[metadata.files]
appdirs = [
@@ -613,181 +642,224 @@ appdirs = [
{file = "appdirs-1.4.4.tar.gz", hash = "sha256:7d5d0167b2b1ba821647616af46a749d1c653740dd0d2415100fe26e27afdf41"},
]
argcomplete = [
- {file = "argcomplete-1.12.3-py2.py3-none-any.whl", hash = "sha256:291f0beca7fd49ce285d2f10e4c1c77e9460cf823eef2de54df0c0fec88b0d81"},
- {file = "argcomplete-1.12.3.tar.gz", hash = "sha256:2c7dbffd8c045ea534921e63b0be6fe65e88599990d8dc408ac8c542b72a5445"},
+ {file = "argcomplete-2.0.0-py2.py3-none-any.whl", hash = "sha256:cffa11ea77999bb0dd27bb25ff6dc142a6796142f68d45b1a26b11f58724561e"},
+ {file = "argcomplete-2.0.0.tar.gz", hash = "sha256:6372ad78c89d662035101418ae253668445b391755cfe94ea52f1b9d22425b20"},
]
atomicwrites = [
{file = "atomicwrites-1.4.0-py2.py3-none-any.whl", hash = "sha256:6d1784dea7c0c8d4a5172b6c620f40b6e4cbfdf96d783691f2e1302a7b88e197"},
{file = "atomicwrites-1.4.0.tar.gz", hash = "sha256:ae70396ad1a434f9c7046fd2dd196fc04b12f9e91ffb859164193be8b6168a7a"},
]
attrs = [
- {file = "attrs-21.2.0-py2.py3-none-any.whl", hash = "sha256:149e90d6d8ac20db7a955ad60cf0e6881a3f20d37096140088356da6c716b0b1"},
- {file = "attrs-21.2.0.tar.gz", hash = "sha256:ef6aaac3ca6cd92904cdd0d83f629a15f18053ec84e6432106f7a4d04ae4f5fb"},
+ {file = "attrs-21.4.0-py2.py3-none-any.whl", hash = "sha256:2d27e3784d7a565d36ab851fe94887c5eccd6a463168875832a1be79c82828b4"},
+ {file = "attrs-21.4.0.tar.gz", hash = "sha256:626ba8234211db98e869df76230a137c4c40a12d72445c45d5f5b716f076e2fd"},
]
boto3 = [
- {file = "boto3-1.18.21-py3-none-any.whl", hash = "sha256:59b6e8e79b2114e21388288a06a004f2a9378b1e0fc58466a35da8fb74fe2dd8"},
- {file = "boto3-1.18.21.tar.gz", hash = "sha256:00748c760dc30be61c6db4b092718f6a9f8d27c767da0e232695a65adb75cde8"},
+ {file = "boto3-1.21.42-py3-none-any.whl", hash = "sha256:895fb88c69be78f82cfee58a79c97a3ad8d4a2a1209041a411d7d6b9fc5393e4"},
+ {file = "boto3-1.21.42.tar.gz", hash = "sha256:bcb541175a7d190dd919a0af0e807ee6e9d26f135551e741b10d94343f2d7588"},
]
botocore = [
- {file = "botocore-1.21.21-py3-none-any.whl", hash = "sha256:fa5ac13829d24fcdd385e82c3b6d78e22d93f427cca8dac38158cae84a8cc2f5"},
- {file = "botocore-1.21.21.tar.gz", hash = "sha256:12cfe74b0a5c44afb34bdd86c1f8ad74bc2ad9ec168eaed9040ef70cb3db944f"},
+ {file = "botocore-1.24.42-py3-none-any.whl", hash = "sha256:14aee41c8bf59d2dd2d89e8751fa37d3c95dcb92707d1966aa02697e914c1417"},
+ {file = "botocore-1.24.42.tar.gz", hash = "sha256:a2baa9484bbaee96ef312c049b8e360badcab58329e487b57567644a571b5f4a"},
]
c7n = []
certifi = [
- {file = "certifi-2021.5.30-py2.py3-none-any.whl", hash = "sha256:50b1e4f8446b06f41be7dd6338db18e0990601dce795c2b1686458aa7e8fa7d8"},
- {file = "certifi-2021.5.30.tar.gz", hash = "sha256:2bbf76fd432960138b3ef6dda3dde0544f27cbf8546c458e60baf371917ba9ee"},
+ {file = "certifi-2021.10.8-py2.py3-none-any.whl", hash = "sha256:d62a0163eb4c2344ac042ab2bdf75399a71a2d8c7d47eac2e2ee91b9d6339569"},
+ {file = "certifi-2021.10.8.tar.gz", hash = "sha256:78884e7c1d4b00ce3cea67b44566851c4343c120abd683433ce934a68ea58872"},
]
cffi = [
- {file = "cffi-1.14.6-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:22b9c3c320171c108e903d61a3723b51e37aaa8c81255b5e7ce102775bd01e2c"},
- {file = "cffi-1.14.6-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:f0c5d1acbfca6ebdd6b1e3eded8d261affb6ddcf2186205518f1428b8569bb99"},
- {file = "cffi-1.14.6-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:99f27fefe34c37ba9875f224a8f36e31d744d8083e00f520f133cab79ad5e819"},
- {file = "cffi-1.14.6-cp27-cp27m-win32.whl", hash = "sha256:55af55e32ae468e9946f741a5d51f9896da6b9bf0bbdd326843fec05c730eb20"},
- {file = "cffi-1.14.6-cp27-cp27m-win_amd64.whl", hash = "sha256:7bcac9a2b4fdbed2c16fa5681356d7121ecabf041f18d97ed5b8e0dd38a80224"},
- {file = "cffi-1.14.6-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:ed38b924ce794e505647f7c331b22a693bee1538fdf46b0222c4717b42f744e7"},
- {file = "cffi-1.14.6-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:e22dcb48709fc51a7b58a927391b23ab37eb3737a98ac4338e2448bef8559b33"},
- {file = "cffi-1.14.6-cp35-cp35m-macosx_10_9_x86_64.whl", hash = "sha256:aedb15f0a5a5949ecb129a82b72b19df97bbbca024081ed2ef88bd5c0a610534"},
- {file = "cffi-1.14.6-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:48916e459c54c4a70e52745639f1db524542140433599e13911b2f329834276a"},
- {file = "cffi-1.14.6-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:f627688813d0a4140153ff532537fbe4afea5a3dffce1f9deb7f91f848a832b5"},
- {file = "cffi-1.14.6-cp35-cp35m-win32.whl", hash = "sha256:f0010c6f9d1a4011e429109fda55a225921e3206e7f62a0c22a35344bfd13cca"},
- {file = "cffi-1.14.6-cp35-cp35m-win_amd64.whl", hash = "sha256:57e555a9feb4a8460415f1aac331a2dc833b1115284f7ded7278b54afc5bd218"},
- {file = "cffi-1.14.6-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:e8c6a99be100371dbb046880e7a282152aa5d6127ae01783e37662ef73850d8f"},
- {file = "cffi-1.14.6-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:19ca0dbdeda3b2615421d54bef8985f72af6e0c47082a8d26122adac81a95872"},
- {file = "cffi-1.14.6-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:d950695ae4381ecd856bcaf2b1e866720e4ab9a1498cba61c602e56630ca7195"},
- {file = "cffi-1.14.6-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e9dc245e3ac69c92ee4c167fbdd7428ec1956d4e754223124991ef29eb57a09d"},
- {file = "cffi-1.14.6-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a8661b2ce9694ca01c529bfa204dbb144b275a31685a075ce123f12331be790b"},
- {file = "cffi-1.14.6-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b315d709717a99f4b27b59b021e6207c64620790ca3e0bde636a6c7f14618abb"},
- {file = "cffi-1.14.6-cp36-cp36m-win32.whl", hash = "sha256:80b06212075346b5546b0417b9f2bf467fea3bfe7352f781ffc05a8ab24ba14a"},
- {file = "cffi-1.14.6-cp36-cp36m-win_amd64.whl", hash = "sha256:a9da7010cec5a12193d1af9872a00888f396aba3dc79186604a09ea3ee7c029e"},
- {file = "cffi-1.14.6-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:4373612d59c404baeb7cbd788a18b2b2a8331abcc84c3ba40051fcd18b17a4d5"},
- {file = "cffi-1.14.6-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:f10afb1004f102c7868ebfe91c28f4a712227fe4cb24974350ace1f90e1febbf"},
- {file = "cffi-1.14.6-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:fd4305f86f53dfd8cd3522269ed7fc34856a8ee3709a5e28b2836b2db9d4cd69"},
- {file = "cffi-1.14.6-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6d6169cb3c6c2ad50db5b868db6491a790300ade1ed5d1da29289d73bbe40b56"},
- {file = "cffi-1.14.6-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5d4b68e216fc65e9fe4f524c177b54964af043dde734807586cf5435af84045c"},
- {file = "cffi-1.14.6-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:33791e8a2dc2953f28b8d8d300dde42dd929ac28f974c4b4c6272cb2955cb762"},
- {file = "cffi-1.14.6-cp37-cp37m-win32.whl", hash = "sha256:0c0591bee64e438883b0c92a7bed78f6290d40bf02e54c5bf0978eaf36061771"},
- {file = "cffi-1.14.6-cp37-cp37m-win_amd64.whl", hash = "sha256:8eb687582ed7cd8c4bdbff3df6c0da443eb89c3c72e6e5dcdd9c81729712791a"},
- {file = "cffi-1.14.6-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ba6f2b3f452e150945d58f4badd92310449876c4c954836cfb1803bdd7b422f0"},
- {file = "cffi-1.14.6-cp38-cp38-manylinux1_i686.whl", hash = "sha256:64fda793737bc4037521d4899be780534b9aea552eb673b9833b01f945904c2e"},
- {file = "cffi-1.14.6-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:9f3e33c28cd39d1b655ed1ba7247133b6f7fc16fa16887b120c0c670e35ce346"},
- {file = "cffi-1.14.6-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:26bb2549b72708c833f5abe62b756176022a7b9a7f689b571e74c8478ead51dc"},
- {file = "cffi-1.14.6-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:eb687a11f0a7a1839719edd80f41e459cc5366857ecbed383ff376c4e3cc6afd"},
- {file = "cffi-1.14.6-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d2ad4d668a5c0645d281dcd17aff2be3212bc109b33814bbb15c4939f44181cc"},
- {file = "cffi-1.14.6-cp38-cp38-win32.whl", hash = "sha256:487d63e1454627c8e47dd230025780e91869cfba4c753a74fda196a1f6ad6548"},
- {file = "cffi-1.14.6-cp38-cp38-win_amd64.whl", hash = "sha256:c33d18eb6e6bc36f09d793c0dc58b0211fccc6ae5149b808da4a62660678b156"},
- {file = "cffi-1.14.6-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:06c54a68935738d206570b20da5ef2b6b6d92b38ef3ec45c5422c0ebaf338d4d"},
- {file = "cffi-1.14.6-cp39-cp39-manylinux1_i686.whl", hash = "sha256:f174135f5609428cc6e1b9090f9268f5c8935fddb1b25ccb8255a2d50de6789e"},
- {file = "cffi-1.14.6-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:f3ebe6e73c319340830a9b2825d32eb6d8475c1dac020b4f0aa774ee3b898d1c"},
- {file = "cffi-1.14.6-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3c8d896becff2fa653dc4438b54a5a25a971d1f4110b32bd3068db3722c80202"},
- {file = "cffi-1.14.6-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4922cd707b25e623b902c86188aca466d3620892db76c0bdd7b99a3d5e61d35f"},
- {file = "cffi-1.14.6-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c9e005e9bd57bc987764c32a1bee4364c44fdc11a3cc20a40b93b444984f2b87"},
- {file = "cffi-1.14.6-cp39-cp39-win32.whl", hash = "sha256:eb9e2a346c5238a30a746893f23a9535e700f8192a68c07c0258e7ece6ff3728"},
- {file = "cffi-1.14.6-cp39-cp39-win_amd64.whl", hash = "sha256:818014c754cd3dba7229c0f5884396264d51ffb87ec86e927ef0be140bfdb0d2"},
- {file = "cffi-1.14.6.tar.gz", hash = "sha256:c9a875ce9d7fe32887784274dd533c57909b7b1dcadcc128a2ac21331a9765dd"},
+ {file = "cffi-1.15.0-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:c2502a1a03b6312837279c8c1bd3ebedf6c12c4228ddbad40912d671ccc8a962"},
+ {file = "cffi-1.15.0-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:23cfe892bd5dd8941608f93348c0737e369e51c100d03718f108bf1add7bd6d0"},
+ {file = "cffi-1.15.0-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:41d45de54cd277a7878919867c0f08b0cf817605e4eb94093e7516505d3c8d14"},
+ {file = "cffi-1.15.0-cp27-cp27m-win32.whl", hash = "sha256:4a306fa632e8f0928956a41fa8e1d6243c71e7eb59ffbd165fc0b41e316b2474"},
+ {file = "cffi-1.15.0-cp27-cp27m-win_amd64.whl", hash = "sha256:e7022a66d9b55e93e1a845d8c9eba2a1bebd4966cd8bfc25d9cd07d515b33fa6"},
+ {file = "cffi-1.15.0-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:14cd121ea63ecdae71efa69c15c5543a4b5fbcd0bbe2aad864baca0063cecf27"},
+ {file = "cffi-1.15.0-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:d4d692a89c5cf08a8557fdeb329b82e7bf609aadfaed6c0d79f5a449a3c7c023"},
+ {file = "cffi-1.15.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0104fb5ae2391d46a4cb082abdd5c69ea4eab79d8d44eaaf79f1b1fd806ee4c2"},
+ {file = "cffi-1.15.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:91ec59c33514b7c7559a6acda53bbfe1b283949c34fe7440bcf917f96ac0723e"},
+ {file = "cffi-1.15.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:f5c7150ad32ba43a07c4479f40241756145a1f03b43480e058cfd862bf5041c7"},
+ {file = "cffi-1.15.0-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:00c878c90cb53ccfaae6b8bc18ad05d2036553e6d9d1d9dbcf323bbe83854ca3"},
+ {file = "cffi-1.15.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:abb9a20a72ac4e0fdb50dae135ba5e77880518e742077ced47eb1499e29a443c"},
+ {file = "cffi-1.15.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a5263e363c27b653a90078143adb3d076c1a748ec9ecc78ea2fb916f9b861962"},
+ {file = "cffi-1.15.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f54a64f8b0c8ff0b64d18aa76675262e1700f3995182267998c31ae974fbc382"},
+ {file = "cffi-1.15.0-cp310-cp310-win32.whl", hash = "sha256:c21c9e3896c23007803a875460fb786118f0cdd4434359577ea25eb556e34c55"},
+ {file = "cffi-1.15.0-cp310-cp310-win_amd64.whl", hash = "sha256:5e069f72d497312b24fcc02073d70cb989045d1c91cbd53979366077959933e0"},
+ {file = "cffi-1.15.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:64d4ec9f448dfe041705426000cc13e34e6e5bb13736e9fd62e34a0b0c41566e"},
+ {file = "cffi-1.15.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2756c88cbb94231c7a147402476be2c4df2f6078099a6f4a480d239a8817ae39"},
+ {file = "cffi-1.15.0-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3b96a311ac60a3f6be21d2572e46ce67f09abcf4d09344c49274eb9e0bf345fc"},
+ {file = "cffi-1.15.0-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:75e4024375654472cc27e91cbe9eaa08567f7fbdf822638be2814ce059f58032"},
+ {file = "cffi-1.15.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:59888172256cac5629e60e72e86598027aca6bf01fa2465bdb676d37636573e8"},
+ {file = "cffi-1.15.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:27c219baf94952ae9d50ec19651a687b826792055353d07648a5695413e0c605"},
+ {file = "cffi-1.15.0-cp36-cp36m-win32.whl", hash = "sha256:4958391dbd6249d7ad855b9ca88fae690783a6be9e86df65865058ed81fc860e"},
+ {file = "cffi-1.15.0-cp36-cp36m-win_amd64.whl", hash = "sha256:f6f824dc3bce0edab5f427efcfb1d63ee75b6fcb7282900ccaf925be84efb0fc"},
+ {file = "cffi-1.15.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:06c48159c1abed75c2e721b1715c379fa3200c7784271b3c46df01383b593636"},
+ {file = "cffi-1.15.0-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:c2051981a968d7de9dd2d7b87bcb9c939c74a34626a6e2f8181455dd49ed69e4"},
+ {file = "cffi-1.15.0-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:fd8a250edc26254fe5b33be00402e6d287f562b6a5b2152dec302fa15bb3e997"},
+ {file = "cffi-1.15.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:91d77d2a782be4274da750752bb1650a97bfd8f291022b379bb8e01c66b4e96b"},
+ {file = "cffi-1.15.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:45db3a33139e9c8f7c09234b5784a5e33d31fd6907800b316decad50af323ff2"},
+ {file = "cffi-1.15.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:263cc3d821c4ab2213cbe8cd8b355a7f72a8324577dc865ef98487c1aeee2bc7"},
+ {file = "cffi-1.15.0-cp37-cp37m-win32.whl", hash = "sha256:17771976e82e9f94976180f76468546834d22a7cc404b17c22df2a2c81db0c66"},
+ {file = "cffi-1.15.0-cp37-cp37m-win_amd64.whl", hash = "sha256:3415c89f9204ee60cd09b235810be700e993e343a408693e80ce7f6a40108029"},
+ {file = "cffi-1.15.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:4238e6dab5d6a8ba812de994bbb0a79bddbdf80994e4ce802b6f6f3142fcc880"},
+ {file = "cffi-1.15.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0808014eb713677ec1292301ea4c81ad277b6cdf2fdd90fd540af98c0b101d20"},
+ {file = "cffi-1.15.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:57e9ac9ccc3101fac9d6014fba037473e4358ef4e89f8e181f8951a2c0162024"},
+ {file = "cffi-1.15.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b6c2ea03845c9f501ed1313e78de148cd3f6cad741a75d43a29b43da27f2e1e"},
+ {file = "cffi-1.15.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:10dffb601ccfb65262a27233ac273d552ddc4d8ae1bf93b21c94b8511bffe728"},
+ {file = "cffi-1.15.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:786902fb9ba7433aae840e0ed609f45c7bcd4e225ebb9c753aa39725bb3e6ad6"},
+ {file = "cffi-1.15.0-cp38-cp38-win32.whl", hash = "sha256:da5db4e883f1ce37f55c667e5c0de439df76ac4cb55964655906306918e7363c"},
+ {file = "cffi-1.15.0-cp38-cp38-win_amd64.whl", hash = "sha256:181dee03b1170ff1969489acf1c26533710231c58f95534e3edac87fff06c443"},
+ {file = "cffi-1.15.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:45e8636704eacc432a206ac7345a5d3d2c62d95a507ec70d62f23cd91770482a"},
+ {file = "cffi-1.15.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:31fb708d9d7c3f49a60f04cf5b119aeefe5644daba1cd2a0fe389b674fd1de37"},
+ {file = "cffi-1.15.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:6dc2737a3674b3e344847c8686cf29e500584ccad76204efea14f451d4cc669a"},
+ {file = "cffi-1.15.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:74fdfdbfdc48d3f47148976f49fab3251e550a8720bebc99bf1483f5bfb5db3e"},
+ {file = "cffi-1.15.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ffaa5c925128e29efbde7301d8ecaf35c8c60ffbcd6a1ffd3a552177c8e5e796"},
+ {file = "cffi-1.15.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3f7d084648d77af029acb79a0ff49a0ad7e9d09057a9bf46596dac9514dc07df"},
+ {file = "cffi-1.15.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ef1f279350da2c586a69d32fc8733092fd32cc8ac95139a00377841f59a3f8d8"},
+ {file = "cffi-1.15.0-cp39-cp39-win32.whl", hash = "sha256:2a23af14f408d53d5e6cd4e3d9a24ff9e05906ad574822a10563efcef137979a"},
+ {file = "cffi-1.15.0-cp39-cp39-win_amd64.whl", hash = "sha256:3773c4d81e6e818df2efbc7dd77325ca0dcb688116050fb2b3011218eda36139"},
+ {file = "cffi-1.15.0.tar.gz", hash = "sha256:920f0d66a896c2d99f0adbb391f990a84091179542c205fa53ce5787aff87954"},
]
charset-normalizer = [
- {file = "charset-normalizer-2.0.4.tar.gz", hash = "sha256:f23667ebe1084be45f6ae0538e4a5a865206544097e4e8bbcacf42cd02a348f3"},
- {file = "charset_normalizer-2.0.4-py3-none-any.whl", hash = "sha256:0c8911edd15d19223366a194a513099a302055a962bca2cec0f54b8b63175d8b"},
+ {file = "charset-normalizer-2.0.12.tar.gz", hash = "sha256:2857e29ff0d34db842cd7ca3230549d1a697f96ee6d3fb071cfa6c7393832597"},
+ {file = "charset_normalizer-2.0.12-py3-none-any.whl", hash = "sha256:6881edbebdb17b39b4eaaa821b438bf6eddffb4468cf344f09f89def34a8b1df"},
]
colorama = [
{file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"},
{file = "colorama-0.4.4.tar.gz", hash = "sha256:5941b2b48a20143d2267e95b1c2a7603ce057ee39fd88e7329b0c292aa16869b"},
]
cryptography = [
- {file = "cryptography-3.4.7-cp36-abi3-macosx_10_10_x86_64.whl", hash = "sha256:3d8427734c781ea5f1b41d6589c293089704d4759e34597dce91014ac125aad1"},
- {file = "cryptography-3.4.7-cp36-abi3-macosx_11_0_arm64.whl", hash = "sha256:8e56e16617872b0957d1c9742a3f94b43533447fd78321514abbe7db216aa250"},
- {file = "cryptography-3.4.7-cp36-abi3-manylinux2010_x86_64.whl", hash = "sha256:37340614f8a5d2fb9aeea67fd159bfe4f5f4ed535b1090ce8ec428b2f15a11f2"},
- {file = "cryptography-3.4.7-cp36-abi3-manylinux2014_aarch64.whl", hash = "sha256:240f5c21aef0b73f40bb9f78d2caff73186700bf1bc6b94285699aff98cc16c6"},
- {file = "cryptography-3.4.7-cp36-abi3-manylinux2014_x86_64.whl", hash = "sha256:1e056c28420c072c5e3cb36e2b23ee55e260cb04eee08f702e0edfec3fb51959"},
- {file = "cryptography-3.4.7-cp36-abi3-win32.whl", hash = "sha256:0f1212a66329c80d68aeeb39b8a16d54ef57071bf22ff4e521657b27372e327d"},
- {file = "cryptography-3.4.7-cp36-abi3-win_amd64.whl", hash = "sha256:de4e5f7f68220d92b7637fc99847475b59154b7a1b3868fb7385337af54ac9ca"},
- {file = "cryptography-3.4.7-pp36-pypy36_pp73-manylinux2010_x86_64.whl", hash = "sha256:26965837447f9c82f1855e0bc8bc4fb910240b6e0d16a664bb722df3b5b06873"},
- {file = "cryptography-3.4.7-pp36-pypy36_pp73-manylinux2014_x86_64.whl", hash = "sha256:eb8cc2afe8b05acbd84a43905832ec78e7b3873fb124ca190f574dca7389a87d"},
- {file = "cryptography-3.4.7-pp37-pypy37_pp73-manylinux2010_x86_64.whl", hash = "sha256:7ec5d3b029f5fa2b179325908b9cd93db28ab7b85bb6c1db56b10e0b54235177"},
- {file = "cryptography-3.4.7-pp37-pypy37_pp73-manylinux2014_x86_64.whl", hash = "sha256:ee77aa129f481be46f8d92a1a7db57269a2f23052d5f2433b4621bb457081cc9"},
- {file = "cryptography-3.4.7.tar.gz", hash = "sha256:3d10de8116d25649631977cb37da6cbdd2d6fa0e0281d014a5b7d337255ca713"},
+ {file = "cryptography-36.0.2-cp36-abi3-macosx_10_10_universal2.whl", hash = "sha256:4e2dddd38a5ba733be6a025a1475a9f45e4e41139d1321f412c6b360b19070b6"},
+ {file = "cryptography-36.0.2-cp36-abi3-macosx_10_10_x86_64.whl", hash = "sha256:4881d09298cd0b669bb15b9cfe6166f16fc1277b4ed0d04a22f3d6430cb30f1d"},
+ {file = "cryptography-36.0.2-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ea634401ca02367c1567f012317502ef3437522e2fc44a3ea1844de028fa4b84"},
+ {file = "cryptography-36.0.2-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:7be666cc4599b415f320839e36367b273db8501127b38316f3b9f22f17a0b815"},
+ {file = "cryptography-36.0.2-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8241cac0aae90b82d6b5c443b853723bcc66963970c67e56e71a2609dc4b5eaf"},
+ {file = "cryptography-36.0.2-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7b2d54e787a884ffc6e187262823b6feb06c338084bbe80d45166a1cb1c6c5bf"},
+ {file = "cryptography-36.0.2-cp36-abi3-manylinux_2_24_x86_64.whl", hash = "sha256:c2c5250ff0d36fd58550252f54915776940e4e866f38f3a7866d92b32a654b86"},
+ {file = "cryptography-36.0.2-cp36-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:ec6597aa85ce03f3e507566b8bcdf9da2227ec86c4266bd5e6ab4d9e0cc8dab2"},
+ {file = "cryptography-36.0.2-cp36-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:ca9f686517ec2c4a4ce930207f75c00bf03d94e5063cbc00a1dc42531511b7eb"},
+ {file = "cryptography-36.0.2-cp36-abi3-win32.whl", hash = "sha256:f64b232348ee82f13aac22856515ce0195837f6968aeaa94a3d0353ea2ec06a6"},
+ {file = "cryptography-36.0.2-cp36-abi3-win_amd64.whl", hash = "sha256:53e0285b49fd0ab6e604f4c5d9c5ddd98de77018542e88366923f152dbeb3c29"},
+ {file = "cryptography-36.0.2-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:32db5cc49c73f39aac27574522cecd0a4bb7384e71198bc65a0d23f901e89bb7"},
+ {file = "cryptography-36.0.2-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b3d199647468d410994dbeb8cec5816fb74feb9368aedf300af709ef507e3e"},
+ {file = "cryptography-36.0.2-pp37-pypy37_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:da73d095f8590ad437cd5e9faf6628a218aa7c387e1fdf67b888b47ba56a17f0"},
+ {file = "cryptography-36.0.2-pp38-pypy38_pp73-macosx_10_10_x86_64.whl", hash = "sha256:0a3bf09bb0b7a2c93ce7b98cb107e9170a90c51a0162a20af1c61c765b90e60b"},
+ {file = "cryptography-36.0.2-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:8897b7b7ec077c819187a123174b645eb680c13df68354ed99f9b40a50898f77"},
+ {file = "cryptography-36.0.2-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:82740818f2f240a5da8dfb8943b360e4f24022b093207160c77cadade47d7c85"},
+ {file = "cryptography-36.0.2-pp38-pypy38_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:1f64a62b3b75e4005df19d3b5235abd43fa6358d5516cfc43d87aeba8d08dd51"},
+ {file = "cryptography-36.0.2-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:e167b6b710c7f7bc54e67ef593f8731e1f45aa35f8a8a7b72d6e42ec76afd4b3"},
+ {file = "cryptography-36.0.2.tar.gz", hash = "sha256:70f8f4f7bb2ac9f340655cbac89d68c527af5bb4387522a8413e841e3e6628c9"},
]
decorator = [
- {file = "decorator-5.0.9-py3-none-any.whl", hash = "sha256:6e5c199c16f7a9f0e3a61a4a54b3d27e7dad0dbdde92b944426cb20914376323"},
- {file = "decorator-5.0.9.tar.gz", hash = "sha256:72ecfba4320a893c53f9706bebb2d55c270c1e51a28789361aa93e4a21319ed5"},
+ {file = "decorator-5.1.1-py3-none-any.whl", hash = "sha256:b8c3f85900b9dc423225913c5aace94729fe1fa9763b38939a95226f02d37186"},
+ {file = "decorator-5.1.1.tar.gz", hash = "sha256:637996211036b6385ef91435e4fae22989472f9d571faba8927ba8253acbc330"},
+]
+docutils = [
+ {file = "docutils-0.17.1-py2.py3-none-any.whl", hash = "sha256:cf316c8370a737a022b72b56874f6602acf974a37a9fba42ec2876387549fc61"},
+ {file = "docutils-0.17.1.tar.gz", hash = "sha256:686577d2e4c32380bb50cbb22f575ed742d58168cee37e99117a854bcd88f125"},
]
"dogpile.cache" = [
- {file = "dogpile.cache-1.1.3-py3-none-any.whl", hash = "sha256:40a4dde7566d7ea731a7418ff8af6e40807ce2a5761a50336fd778b995acde66"},
- {file = "dogpile.cache-1.1.3.tar.gz", hash = "sha256:6f0bcf97c73bfec1a7bf14e5a248488cee00c2d494bf63f3789ea6d95a57c1cf"},
+ {file = "dogpile.cache-1.1.5-py3-none-any.whl", hash = "sha256:5f9dcf99087240c7733fad5539b0806b52555917dccad1ef43499eaca8b459d9"},
+ {file = "dogpile.cache-1.1.5.tar.gz", hash = "sha256:0f01bdc329329a8289af9705ff40fadb1f82a28c336f3174e12142b70d31c756"},
]
idna = [
- {file = "idna-3.2-py3-none-any.whl", hash = "sha256:14475042e284991034cb48e06f6851428fb14c4dc953acd9be9a5e95c7b6dd7a"},
- {file = "idna-3.2.tar.gz", hash = "sha256:467fbad99067910785144ce333826c71fb0e63a425657295239737f7ecd125f3"},
+ {file = "idna-3.3-py3-none-any.whl", hash = "sha256:84d9dd047ffa80596e0f246e2eab0b391788b0503584e8945f2368256d2735ff"},
+ {file = "idna-3.3.tar.gz", hash = "sha256:9d643ff0a55b762d5cdb124b8eaa99c66322e2157b69160bc32796e824360e6d"},
]
importlib-metadata = [
- {file = "importlib_metadata-4.6.4-py3-none-any.whl", hash = "sha256:ed5157fef23a4bc4594615a0dd8eba94b2bb36bf2a343fa3d8bb2fa0a62a99d5"},
- {file = "importlib_metadata-4.6.4.tar.gz", hash = "sha256:7b30a78db2922d78a6f47fb30683156a14f3c6aa5cc23f77cc8967e9ab2d002f"},
+ {file = "importlib_metadata-4.11.3-py3-none-any.whl", hash = "sha256:1208431ca90a8cca1a6b8af391bb53c1a2db74e5d1cef6ddced95d4b2062edc6"},
+ {file = "importlib_metadata-4.11.3.tar.gz", hash = "sha256:ea4c597ebf37142f827b8f39299579e31685c31d3a438b59f469406afd0f2539"},
+]
+importlib-resources = [
+ {file = "importlib_resources-5.7.1-py3-none-any.whl", hash = "sha256:e447dc01619b1e951286f3929be820029d48c75eb25d265c28b92a16548212b8"},
+ {file = "importlib_resources-5.7.1.tar.gz", hash = "sha256:b6062987dfc51f0fcb809187cffbd60f35df7acb4589091f154214af6d0d49d3"},
]
iniconfig = [
{file = "iniconfig-1.1.1-py2.py3-none-any.whl", hash = "sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3"},
{file = "iniconfig-1.1.1.tar.gz", hash = "sha256:bc3af051d7d14b2ee5ef9969666def0cd1a000e121eaea580d4a313df4b37f32"},
]
iso8601 = [
- {file = "iso8601-0.1.16-py2.py3-none-any.whl", hash = "sha256:906714829fedbc89955d52806c903f2332e3948ed94e31e85037f9e0226b8376"},
- {file = "iso8601-0.1.16.tar.gz", hash = "sha256:36532f77cc800594e8f16641edae7f1baf7932f05d8e508545b95fc53c6dc85b"},
+ {file = "iso8601-1.0.2-py3-none-any.whl", hash = "sha256:d7bc01b1c2a43b259570bb307f057abc578786ea734ba2b87b836c5efc5bd443"},
+ {file = "iso8601-1.0.2.tar.gz", hash = "sha256:27f503220e6845d9db954fb212b95b0362d8b7e6c1b2326a87061c3de93594b1"},
]
jmespath = [
- {file = "jmespath-0.10.0-py2.py3-none-any.whl", hash = "sha256:cdf6525904cc597730141d61b36f2e4b8ecc257c420fa2f4549bac2c2d0cb72f"},
- {file = "jmespath-0.10.0.tar.gz", hash = "sha256:b85d0567b8666149a93172712e68920734333c0ce7e89b78b3e987f71e5ed4f9"},
+ {file = "jmespath-1.0.0-py3-none-any.whl", hash = "sha256:e8dcd576ed616f14ec02eed0005c85973b5890083313860136657e24784e4c04"},
+ {file = "jmespath-1.0.0.tar.gz", hash = "sha256:a490e280edd1f57d6de88636992d05b71e97d69a26a19f058ecf7d304474bf5e"},
]
jsonpatch = [
{file = "jsonpatch-1.32-py2.py3-none-any.whl", hash = "sha256:26ac385719ac9f54df8a2f0827bb8253aa3ea8ab7b3368457bcdb8c14595a397"},
{file = "jsonpatch-1.32.tar.gz", hash = "sha256:b6ddfe6c3db30d81a96aaeceb6baf916094ffa23d7dd5fa2c13e13f8b6e600c2"},
]
jsonpointer = [
- {file = "jsonpointer-2.1-py2.py3-none-any.whl", hash = "sha256:150f80c5badd02c757da6644852f612f88e8b4bc2f9852dcbf557c8738919686"},
- {file = "jsonpointer-2.1.tar.gz", hash = "sha256:5a34b698db1eb79ceac454159d3f7c12a451a91f6334a4f638454327b7a89962"},
+ {file = "jsonpointer-2.3-py2.py3-none-any.whl", hash = "sha256:51801e558539b4e9cd268638c078c6c5746c9ac96bc38152d443400e4f3793e9"},
+ {file = "jsonpointer-2.3.tar.gz", hash = "sha256:97cba51526c829282218feb99dab1b1e6bdf8efd1c43dc9d57be093c0d69c99a"},
]
jsonschema = [
- {file = "jsonschema-3.2.0-py2.py3-none-any.whl", hash = "sha256:4e5b3cf8216f577bee9ce139cbe72eca3ea4f292ec60928ff24758ce626cd163"},
- {file = "jsonschema-3.2.0.tar.gz", hash = "sha256:c8a85b28d377cc7737e46e2d9f2b4f44ee3c0e1deac6bf46ddefc7187d30797a"},
+ {file = "jsonschema-4.4.0-py3-none-any.whl", hash = "sha256:77281a1f71684953ee8b3d488371b162419767973789272434bbc3f29d9c8823"},
+ {file = "jsonschema-4.4.0.tar.gz", hash = "sha256:636694eb41b3535ed608fe04129f26542b59ed99808b4f688aa32dcf55317a83"},
]
keystoneauth1 = [
- {file = "keystoneauth1-4.3.1-py3-none-any.whl", hash = "sha256:c4a80b79bc3e0412eb127fa761e80912614f8563646ca34b62bcd9d533f93077"},
- {file = "keystoneauth1-4.3.1.tar.gz", hash = "sha256:93605430a6d1424f31659bc5685e9dc1be9a6254e88c99f00cffc0a60c648a64"},
+ {file = "keystoneauth1-4.5.0-py3-none-any.whl", hash = "sha256:47b526d2e813482bd1018916a1c768a5ac6d83c0865a4dc904cb8d6ffd530f1c"},
+ {file = "keystoneauth1-4.5.0.tar.gz", hash = "sha256:49b3488966a43eeb0200ea511b997e6403c25d563a984c6330e82a0ebfc4540c"},
]
multidict = [
- {file = "multidict-5.1.0-cp36-cp36m-macosx_10_14_x86_64.whl", hash = "sha256:b7993704f1a4b204e71debe6095150d43b2ee6150fa4f44d6d966ec356a8d61f"},
- {file = "multidict-5.1.0-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:9dd6e9b1a913d096ac95d0399bd737e00f2af1e1594a787e00f7975778c8b2bf"},
- {file = "multidict-5.1.0-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:f21756997ad8ef815d8ef3d34edd98804ab5ea337feedcd62fb52d22bf531281"},
- {file = "multidict-5.1.0-cp36-cp36m-manylinux2014_i686.whl", hash = "sha256:1ab820665e67373de5802acae069a6a05567ae234ddb129f31d290fc3d1aa56d"},
- {file = "multidict-5.1.0-cp36-cp36m-manylinux2014_ppc64le.whl", hash = "sha256:9436dc58c123f07b230383083855593550c4d301d2532045a17ccf6eca505f6d"},
- {file = "multidict-5.1.0-cp36-cp36m-manylinux2014_s390x.whl", hash = "sha256:830f57206cc96ed0ccf68304141fec9481a096c4d2e2831f311bde1c404401da"},
- {file = "multidict-5.1.0-cp36-cp36m-manylinux2014_x86_64.whl", hash = "sha256:2e68965192c4ea61fff1b81c14ff712fc7dc15d2bd120602e4a3494ea6584224"},
- {file = "multidict-5.1.0-cp36-cp36m-win32.whl", hash = "sha256:2f1a132f1c88724674271d636e6b7351477c27722f2ed789f719f9e3545a3d26"},
- {file = "multidict-5.1.0-cp36-cp36m-win_amd64.whl", hash = "sha256:3a4f32116f8f72ecf2a29dabfb27b23ab7cdc0ba807e8459e59a93a9be9506f6"},
- {file = "multidict-5.1.0-cp37-cp37m-macosx_10_14_x86_64.whl", hash = "sha256:46c73e09ad374a6d876c599f2328161bcd95e280f84d2060cf57991dec5cfe76"},
- {file = "multidict-5.1.0-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:018132dbd8688c7a69ad89c4a3f39ea2f9f33302ebe567a879da8f4ca73f0d0a"},
- {file = "multidict-5.1.0-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:4b186eb7d6ae7c06eb4392411189469e6a820da81447f46c0072a41c748ab73f"},
- {file = "multidict-5.1.0-cp37-cp37m-manylinux2014_i686.whl", hash = "sha256:3a041b76d13706b7fff23b9fc83117c7b8fe8d5fe9e6be45eee72b9baa75f348"},
- {file = "multidict-5.1.0-cp37-cp37m-manylinux2014_ppc64le.whl", hash = "sha256:051012ccee979b2b06be928a6150d237aec75dd6bf2d1eeeb190baf2b05abc93"},
- {file = "multidict-5.1.0-cp37-cp37m-manylinux2014_s390x.whl", hash = "sha256:6a4d5ce640e37b0efcc8441caeea8f43a06addace2335bd11151bc02d2ee31f9"},
- {file = "multidict-5.1.0-cp37-cp37m-manylinux2014_x86_64.whl", hash = "sha256:5cf3443199b83ed9e955f511b5b241fd3ae004e3cb81c58ec10f4fe47c7dce37"},
- {file = "multidict-5.1.0-cp37-cp37m-win32.whl", hash = "sha256:f200755768dc19c6f4e2b672421e0ebb3dd54c38d5a4f262b872d8cfcc9e93b5"},
- {file = "multidict-5.1.0-cp37-cp37m-win_amd64.whl", hash = "sha256:05c20b68e512166fddba59a918773ba002fdd77800cad9f55b59790030bab632"},
- {file = "multidict-5.1.0-cp38-cp38-macosx_10_14_x86_64.whl", hash = "sha256:54fd1e83a184e19c598d5e70ba508196fd0bbdd676ce159feb412a4a6664f952"},
- {file = "multidict-5.1.0-cp38-cp38-manylinux1_i686.whl", hash = "sha256:0e3c84e6c67eba89c2dbcee08504ba8644ab4284863452450520dad8f1e89b79"},
- {file = "multidict-5.1.0-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:dc862056f76443a0db4509116c5cd480fe1b6a2d45512a653f9a855cc0517456"},
- {file = "multidict-5.1.0-cp38-cp38-manylinux2014_i686.whl", hash = "sha256:0e929169f9c090dae0646a011c8b058e5e5fb391466016b39d21745b48817fd7"},
- {file = "multidict-5.1.0-cp38-cp38-manylinux2014_ppc64le.whl", hash = "sha256:d81eddcb12d608cc08081fa88d046c78afb1bf8107e6feab5d43503fea74a635"},
- {file = "multidict-5.1.0-cp38-cp38-manylinux2014_s390x.whl", hash = "sha256:585fd452dd7782130d112f7ddf3473ffdd521414674c33876187e101b588738a"},
- {file = "multidict-5.1.0-cp38-cp38-manylinux2014_x86_64.whl", hash = "sha256:37e5438e1c78931df5d3c0c78ae049092877e5e9c02dd1ff5abb9cf27a5914ea"},
- {file = "multidict-5.1.0-cp38-cp38-win32.whl", hash = "sha256:07b42215124aedecc6083f1ce6b7e5ec5b50047afa701f3442054373a6deb656"},
- {file = "multidict-5.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:929006d3c2d923788ba153ad0de8ed2e5ed39fdbe8e7be21e2f22ed06c6783d3"},
- {file = "multidict-5.1.0-cp39-cp39-macosx_10_14_x86_64.whl", hash = "sha256:b797515be8743b771aa868f83563f789bbd4b236659ba52243b735d80b29ed93"},
- {file = "multidict-5.1.0-cp39-cp39-manylinux1_i686.whl", hash = "sha256:d5c65bdf4484872c4af3150aeebe101ba560dcfb34488d9a8ff8dbcd21079647"},
- {file = "multidict-5.1.0-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:b47a43177a5e65b771b80db71e7be76c0ba23cc8aa73eeeb089ed5219cdbe27d"},
- {file = "multidict-5.1.0-cp39-cp39-manylinux2014_i686.whl", hash = "sha256:806068d4f86cb06af37cd65821554f98240a19ce646d3cd24e1c33587f313eb8"},
- {file = "multidict-5.1.0-cp39-cp39-manylinux2014_ppc64le.whl", hash = "sha256:46dd362c2f045095c920162e9307de5ffd0a1bfbba0a6e990b344366f55a30c1"},
- {file = "multidict-5.1.0-cp39-cp39-manylinux2014_s390x.whl", hash = "sha256:ace010325c787c378afd7f7c1ac66b26313b3344628652eacd149bdd23c68841"},
- {file = "multidict-5.1.0-cp39-cp39-manylinux2014_x86_64.whl", hash = "sha256:ecc771ab628ea281517e24fd2c52e8f31c41e66652d07599ad8818abaad38cda"},
- {file = "multidict-5.1.0-cp39-cp39-win32.whl", hash = "sha256:fc13a9524bc18b6fb6e0dbec3533ba0496bbed167c56d0aabefd965584557d80"},
- {file = "multidict-5.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:7df80d07818b385f3129180369079bd6934cf70469f99daaebfac89dca288359"},
- {file = "multidict-5.1.0.tar.gz", hash = "sha256:25b4e5f22d3a37ddf3effc0710ba692cfc792c2b9edfb9c05aefe823256e84d5"},
+ {file = "multidict-6.0.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:0b9e95a740109c6047602f4db4da9949e6c5945cefbad34a1299775ddc9a62e2"},
+ {file = "multidict-6.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ac0e27844758d7177989ce406acc6a83c16ed4524ebc363c1f748cba184d89d3"},
+ {file = "multidict-6.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:041b81a5f6b38244b34dc18c7b6aba91f9cdaf854d9a39e5ff0b58e2b5773b9c"},
+ {file = "multidict-6.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5fdda29a3c7e76a064f2477c9aab1ba96fd94e02e386f1e665bca1807fc5386f"},
+ {file = "multidict-6.0.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3368bf2398b0e0fcbf46d85795adc4c259299fec50c1416d0f77c0a843a3eed9"},
+ {file = "multidict-6.0.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f4f052ee022928d34fe1f4d2bc743f32609fb79ed9c49a1710a5ad6b2198db20"},
+ {file = "multidict-6.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:225383a6603c086e6cef0f2f05564acb4f4d5f019a4e3e983f572b8530f70c88"},
+ {file = "multidict-6.0.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:50bd442726e288e884f7be9071016c15a8742eb689a593a0cac49ea093eef0a7"},
+ {file = "multidict-6.0.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:47e6a7e923e9cada7c139531feac59448f1f47727a79076c0b1ee80274cd8eee"},
+ {file = "multidict-6.0.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:0556a1d4ea2d949efe5fd76a09b4a82e3a4a30700553a6725535098d8d9fb672"},
+ {file = "multidict-6.0.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:626fe10ac87851f4cffecee161fc6f8f9853f0f6f1035b59337a51d29ff3b4f9"},
+ {file = "multidict-6.0.2-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:8064b7c6f0af936a741ea1efd18690bacfbae4078c0c385d7c3f611d11f0cf87"},
+ {file = "multidict-6.0.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:2d36e929d7f6a16d4eb11b250719c39560dd70545356365b494249e2186bc389"},
+ {file = "multidict-6.0.2-cp310-cp310-win32.whl", hash = "sha256:fcb91630817aa8b9bc4a74023e4198480587269c272c58b3279875ed7235c293"},
+ {file = "multidict-6.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:8cbf0132f3de7cc6c6ce00147cc78e6439ea736cee6bca4f068bcf892b0fd658"},
+ {file = "multidict-6.0.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:05f6949d6169878a03e607a21e3b862eaf8e356590e8bdae4227eedadacf6e51"},
+ {file = "multidict-6.0.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e2c2e459f7050aeb7c1b1276763364884595d47000c1cddb51764c0d8976e608"},
+ {file = "multidict-6.0.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d0509e469d48940147e1235d994cd849a8f8195e0bca65f8f5439c56e17872a3"},
+ {file = "multidict-6.0.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:514fe2b8d750d6cdb4712346a2c5084a80220821a3e91f3f71eec11cf8d28fd4"},
+ {file = "multidict-6.0.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:19adcfc2a7197cdc3987044e3f415168fc5dc1f720c932eb1ef4f71a2067e08b"},
+ {file = "multidict-6.0.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b9d153e7f1f9ba0b23ad1568b3b9e17301e23b042c23870f9ee0522dc5cc79e8"},
+ {file = "multidict-6.0.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:aef9cc3d9c7d63d924adac329c33835e0243b5052a6dfcbf7732a921c6e918ba"},
+ {file = "multidict-6.0.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:4571f1beddff25f3e925eea34268422622963cd8dc395bb8778eb28418248e43"},
+ {file = "multidict-6.0.2-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:d48b8ee1d4068561ce8033d2c344cf5232cb29ee1a0206a7b828c79cbc5982b8"},
+ {file = "multidict-6.0.2-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:45183c96ddf61bf96d2684d9fbaf6f3564d86b34cb125761f9a0ef9e36c1d55b"},
+ {file = "multidict-6.0.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:75bdf08716edde767b09e76829db8c1e5ca9d8bb0a8d4bd94ae1eafe3dac5e15"},
+ {file = "multidict-6.0.2-cp37-cp37m-win32.whl", hash = "sha256:a45e1135cb07086833ce969555df39149680e5471c04dfd6a915abd2fc3f6dbc"},
+ {file = "multidict-6.0.2-cp37-cp37m-win_amd64.whl", hash = "sha256:6f3cdef8a247d1eafa649085812f8a310e728bdf3900ff6c434eafb2d443b23a"},
+ {file = "multidict-6.0.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:0327292e745a880459ef71be14e709aaea2f783f3537588fb4ed09b6c01bca60"},
+ {file = "multidict-6.0.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:e875b6086e325bab7e680e4316d667fc0e5e174bb5611eb16b3ea121c8951b86"},
+ {file = "multidict-6.0.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:feea820722e69451743a3d56ad74948b68bf456984d63c1a92e8347b7b88452d"},
+ {file = "multidict-6.0.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9cc57c68cb9139c7cd6fc39f211b02198e69fb90ce4bc4a094cf5fe0d20fd8b0"},
+ {file = "multidict-6.0.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:497988d6b6ec6ed6f87030ec03280b696ca47dbf0648045e4e1d28b80346560d"},
+ {file = "multidict-6.0.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:89171b2c769e03a953d5969b2f272efa931426355b6c0cb508022976a17fd376"},
+ {file = "multidict-6.0.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:684133b1e1fe91eda8fa7447f137c9490a064c6b7f392aa857bba83a28cfb693"},
+ {file = "multidict-6.0.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fd9fc9c4849a07f3635ccffa895d57abce554b467d611a5009ba4f39b78a8849"},
+ {file = "multidict-6.0.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:e07c8e79d6e6fd37b42f3250dba122053fddb319e84b55dd3a8d6446e1a7ee49"},
+ {file = "multidict-6.0.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:4070613ea2227da2bfb2c35a6041e4371b0af6b0be57f424fe2318b42a748516"},
+ {file = "multidict-6.0.2-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:47fbeedbf94bed6547d3aa632075d804867a352d86688c04e606971595460227"},
+ {file = "multidict-6.0.2-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:5774d9218d77befa7b70d836004a768fb9aa4fdb53c97498f4d8d3f67bb9cfa9"},
+ {file = "multidict-6.0.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:2957489cba47c2539a8eb7ab32ff49101439ccf78eab724c828c1a54ff3ff98d"},
+ {file = "multidict-6.0.2-cp38-cp38-win32.whl", hash = "sha256:e5b20e9599ba74391ca0cfbd7b328fcc20976823ba19bc573983a25b32e92b57"},
+ {file = "multidict-6.0.2-cp38-cp38-win_amd64.whl", hash = "sha256:8004dca28e15b86d1b1372515f32eb6f814bdf6f00952699bdeb541691091f96"},
+ {file = "multidict-6.0.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:2e4a0785b84fb59e43c18a015ffc575ba93f7d1dbd272b4cdad9f5134b8a006c"},
+ {file = "multidict-6.0.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6701bf8a5d03a43375909ac91b6980aea74b0f5402fbe9428fc3f6edf5d9677e"},
+ {file = "multidict-6.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a007b1638e148c3cfb6bf0bdc4f82776cef0ac487191d093cdc316905e504071"},
+ {file = "multidict-6.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:07a017cfa00c9890011628eab2503bee5872f27144936a52eaab449be5eaf032"},
+ {file = "multidict-6.0.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c207fff63adcdf5a485969131dc70e4b194327666b7e8a87a97fbc4fd80a53b2"},
+ {file = "multidict-6.0.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:373ba9d1d061c76462d74e7de1c0c8e267e9791ee8cfefcf6b0b2495762c370c"},
+ {file = "multidict-6.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bfba7c6d5d7c9099ba21f84662b037a0ffd4a5e6b26ac07d19e423e6fdf965a9"},
+ {file = "multidict-6.0.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:19d9bad105dfb34eb539c97b132057a4e709919ec4dd883ece5838bcbf262b80"},
+ {file = "multidict-6.0.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:de989b195c3d636ba000ee4281cd03bb1234635b124bf4cd89eeee9ca8fcb09d"},
+ {file = "multidict-6.0.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:7c40b7bbece294ae3a87c1bc2abff0ff9beef41d14188cda94ada7bcea99b0fb"},
+ {file = "multidict-6.0.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:d16cce709ebfadc91278a1c005e3c17dd5f71f5098bfae1035149785ea6e9c68"},
+ {file = "multidict-6.0.2-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:a2c34a93e1d2aa35fbf1485e5010337c72c6791407d03aa5f4eed920343dd360"},
+ {file = "multidict-6.0.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:feba80698173761cddd814fa22e88b0661e98cb810f9f986c54aa34d281e4937"},
+ {file = "multidict-6.0.2-cp39-cp39-win32.whl", hash = "sha256:23b616fdc3c74c9fe01d76ce0d1ce872d2d396d8fa8e4899398ad64fb5aa214a"},
+ {file = "multidict-6.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:4bae31803d708f6f15fd98be6a6ac0b6958fcf68fda3c77a048a4f9073704aae"},
+ {file = "multidict-6.0.2.tar.gz", hash = "sha256:5ff3bd75f38e4c43f1f470f2df7a4d430b821c4ce22be384e1459cb57d6bb013"},
]
munch = [
{file = "munch-2.5.0-py2.py3-none-any.whl", hash = "sha256:6f44af89a2ce4ed04ff8de41f70b226b984db10a91dcc7b9ac2efc1c77022fdd"},
@@ -834,102 +906,114 @@ os-service-types = [
{file = "os_service_types-1.7.0-py2.py3-none-any.whl", hash = "sha256:0505c72205690910077fb72b88f2a1f07533c8d39f2fe75b29583481764965d6"},
]
packaging = [
- {file = "packaging-21.0-py3-none-any.whl", hash = "sha256:c86254f9220d55e31cc94d69bade760f0847da8000def4dfe1c6b872fd14ff14"},
- {file = "packaging-21.0.tar.gz", hash = "sha256:7dc96269f53a4ccec5c0670940a4281106dd0bb343f47b7471f779df49c2fbe7"},
+ {file = "packaging-21.3-py3-none-any.whl", hash = "sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522"},
+ {file = "packaging-21.3.tar.gz", hash = "sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb"},
]
pbr = [
- {file = "pbr-5.6.0-py2.py3-none-any.whl", hash = "sha256:c68c661ac5cc81058ac94247278eeda6d2e6aecb3e227b0387c30d277e7ef8d4"},
- {file = "pbr-5.6.0.tar.gz", hash = "sha256:42df03e7797b796625b1029c0400279c7c34fd7df24a7d7818a1abb5b38710dd"},
+ {file = "pbr-5.8.1-py2.py3-none-any.whl", hash = "sha256:27108648368782d07bbf1cb468ad2e2eeef29086affd14087a6d04b7de8af4ec"},
+ {file = "pbr-5.8.1.tar.gz", hash = "sha256:66bc5a34912f408bb3925bf21231cb6f59206267b7f63f3503ef865c1a292e25"},
]
pluggy = [
- {file = "pluggy-0.13.1-py2.py3-none-any.whl", hash = "sha256:966c145cd83c96502c3c3868f50408687b38434af77734af1e9ca461a4081d2d"},
- {file = "pluggy-0.13.1.tar.gz", hash = "sha256:15b2acde666561e1298d71b523007ed7364de07029219b604cf808bfa1c765b0"},
+ {file = "pluggy-1.0.0-py2.py3-none-any.whl", hash = "sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3"},
+ {file = "pluggy-1.0.0.tar.gz", hash = "sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159"},
]
py = [
- {file = "py-1.10.0-py2.py3-none-any.whl", hash = "sha256:3b80836aa6d1feeaa108e046da6423ab8f6ceda6468545ae8d02d9d58d18818a"},
- {file = "py-1.10.0.tar.gz", hash = "sha256:21b81bda15b66ef5e1a777a21c4dcd9c20ad3efd0b3f817e7a809035269e1bd3"},
+ {file = "py-1.11.0-py2.py3-none-any.whl", hash = "sha256:607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378"},
+ {file = "py-1.11.0.tar.gz", hash = "sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719"},
]
pycparser = [
- {file = "pycparser-2.20-py2.py3-none-any.whl", hash = "sha256:7582ad22678f0fcd81102833f60ef8d0e57288b6b5fb00323d101be910e35705"},
- {file = "pycparser-2.20.tar.gz", hash = "sha256:2d475327684562c3a96cc71adf7dc8c4f0565175cf86b6d7a404ff4c771f15f0"},
+ {file = "pycparser-2.21-py2.py3-none-any.whl", hash = "sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9"},
+ {file = "pycparser-2.21.tar.gz", hash = "sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206"},
]
pyparsing = [
- {file = "pyparsing-2.4.7-py2.py3-none-any.whl", hash = "sha256:ef9d7589ef3c200abe66653d3f1ab1033c3c419ae9b9bdb1240a85b024efc88b"},
- {file = "pyparsing-2.4.7.tar.gz", hash = "sha256:c203ec8783bf771a155b207279b9bccb8dea02d8f0c9e5f8ead507bc3246ecc1"},
+ {file = "pyparsing-3.0.8-py3-none-any.whl", hash = "sha256:ef7b523f6356f763771559412c0d7134753f037822dad1b16945b7b846f7ad06"},
+ {file = "pyparsing-3.0.8.tar.gz", hash = "sha256:7bf433498c016c4314268d95df76c81b842a4cb2b276fa3312cfb1e1d85f6954"},
]
pyrsistent = [
- {file = "pyrsistent-0.18.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:f4c8cabb46ff8e5d61f56a037974228e978f26bfefce4f61a4b1ac0ba7a2ab72"},
- {file = "pyrsistent-0.18.0-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:da6e5e818d18459fa46fac0a4a4e543507fe1110e808101277c5a2b5bab0cd2d"},
- {file = "pyrsistent-0.18.0-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:5e4395bbf841693eaebaa5bb5c8f5cdbb1d139e07c975c682ec4e4f8126e03d2"},
- {file = "pyrsistent-0.18.0-cp36-cp36m-win32.whl", hash = "sha256:527be2bfa8dc80f6f8ddd65242ba476a6c4fb4e3aedbf281dfbac1b1ed4165b1"},
- {file = "pyrsistent-0.18.0-cp36-cp36m-win_amd64.whl", hash = "sha256:2aaf19dc8ce517a8653746d98e962ef480ff34b6bc563fc067be6401ffb457c7"},
- {file = "pyrsistent-0.18.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:58a70d93fb79dc585b21f9d72487b929a6fe58da0754fa4cb9f279bb92369396"},
- {file = "pyrsistent-0.18.0-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:4916c10896721e472ee12c95cdc2891ce5890898d2f9907b1b4ae0f53588b710"},
- {file = "pyrsistent-0.18.0-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:73ff61b1411e3fb0ba144b8f08d6749749775fe89688093e1efef9839d2dcc35"},
- {file = "pyrsistent-0.18.0-cp37-cp37m-win32.whl", hash = "sha256:b29b869cf58412ca5738d23691e96d8aff535e17390128a1a52717c9a109da4f"},
- {file = "pyrsistent-0.18.0-cp37-cp37m-win_amd64.whl", hash = "sha256:097b96f129dd36a8c9e33594e7ebb151b1515eb52cceb08474c10a5479e799f2"},
- {file = "pyrsistent-0.18.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:772e94c2c6864f2cd2ffbe58bb3bdefbe2a32afa0acb1a77e472aac831f83427"},
- {file = "pyrsistent-0.18.0-cp38-cp38-manylinux1_i686.whl", hash = "sha256:c1a9ff320fa699337e05edcaae79ef8c2880b52720bc031b219e5b5008ebbdef"},
- {file = "pyrsistent-0.18.0-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:cd3caef37a415fd0dae6148a1b6957a8c5f275a62cca02e18474608cb263640c"},
- {file = "pyrsistent-0.18.0-cp38-cp38-win32.whl", hash = "sha256:e79d94ca58fcafef6395f6352383fa1a76922268fa02caa2272fff501c2fdc78"},
- {file = "pyrsistent-0.18.0-cp38-cp38-win_amd64.whl", hash = "sha256:a0c772d791c38bbc77be659af29bb14c38ced151433592e326361610250c605b"},
- {file = "pyrsistent-0.18.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d5ec194c9c573aafaceebf05fc400656722793dac57f254cd4741f3c27ae57b4"},
- {file = "pyrsistent-0.18.0-cp39-cp39-manylinux1_i686.whl", hash = "sha256:6b5eed00e597b5b5773b4ca30bd48a5774ef1e96f2a45d105db5b4ebb4bca680"},
- {file = "pyrsistent-0.18.0-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:48578680353f41dca1ca3dc48629fb77dfc745128b56fc01096b2530c13fd426"},
- {file = "pyrsistent-0.18.0-cp39-cp39-win32.whl", hash = "sha256:f3ef98d7b76da5eb19c37fda834d50262ff9167c65658d1d8f974d2e4d90676b"},
- {file = "pyrsistent-0.18.0-cp39-cp39-win_amd64.whl", hash = "sha256:404e1f1d254d314d55adb8d87f4f465c8693d6f902f67eb6ef5b4526dc58e6ea"},
- {file = "pyrsistent-0.18.0.tar.gz", hash = "sha256:773c781216f8c2900b42a7b638d5b517bb134ae1acbebe4d1e8f1f41ea60eb4b"},
+ {file = "pyrsistent-0.18.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:df46c854f490f81210870e509818b729db4488e1f30f2a1ce1698b2295a878d1"},
+ {file = "pyrsistent-0.18.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d45866ececf4a5fff8742c25722da6d4c9e180daa7b405dc0a2a2790d668c26"},
+ {file = "pyrsistent-0.18.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4ed6784ceac462a7d6fcb7e9b663e93b9a6fb373b7f43594f9ff68875788e01e"},
+ {file = "pyrsistent-0.18.1-cp310-cp310-win32.whl", hash = "sha256:e4f3149fd5eb9b285d6bfb54d2e5173f6a116fe19172686797c056672689daf6"},
+ {file = "pyrsistent-0.18.1-cp310-cp310-win_amd64.whl", hash = "sha256:636ce2dc235046ccd3d8c56a7ad54e99d5c1cd0ef07d9ae847306c91d11b5fec"},
+ {file = "pyrsistent-0.18.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:e92a52c166426efbe0d1ec1332ee9119b6d32fc1f0bbfd55d5c1088070e7fc1b"},
+ {file = "pyrsistent-0.18.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d7a096646eab884bf8bed965bad63ea327e0d0c38989fc83c5ea7b8a87037bfc"},
+ {file = "pyrsistent-0.18.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cdfd2c361b8a8e5d9499b9082b501c452ade8bbf42aef97ea04854f4a3f43b22"},
+ {file = "pyrsistent-0.18.1-cp37-cp37m-win32.whl", hash = "sha256:7ec335fc998faa4febe75cc5268a9eac0478b3f681602c1f27befaf2a1abe1d8"},
+ {file = "pyrsistent-0.18.1-cp37-cp37m-win_amd64.whl", hash = "sha256:6455fc599df93d1f60e1c5c4fe471499f08d190d57eca040c0ea182301321286"},
+ {file = "pyrsistent-0.18.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:fd8da6d0124efa2f67d86fa70c851022f87c98e205f0594e1fae044e7119a5a6"},
+ {file = "pyrsistent-0.18.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7bfe2388663fd18bd8ce7db2c91c7400bf3e1a9e8bd7d63bf7e77d39051b85ec"},
+ {file = "pyrsistent-0.18.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0e3e1fcc45199df76053026a51cc59ab2ea3fc7c094c6627e93b7b44cdae2c8c"},
+ {file = "pyrsistent-0.18.1-cp38-cp38-win32.whl", hash = "sha256:b568f35ad53a7b07ed9b1b2bae09eb15cdd671a5ba5d2c66caee40dbf91c68ca"},
+ {file = "pyrsistent-0.18.1-cp38-cp38-win_amd64.whl", hash = "sha256:d1b96547410f76078eaf66d282ddca2e4baae8964364abb4f4dcdde855cd123a"},
+ {file = "pyrsistent-0.18.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:f87cc2863ef33c709e237d4b5f4502a62a00fab450c9e020892e8e2ede5847f5"},
+ {file = "pyrsistent-0.18.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6bc66318fb7ee012071b2792024564973ecc80e9522842eb4e17743604b5e045"},
+ {file = "pyrsistent-0.18.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:914474c9f1d93080338ace89cb2acee74f4f666fb0424896fcfb8d86058bf17c"},
+ {file = "pyrsistent-0.18.1-cp39-cp39-win32.whl", hash = "sha256:1b34eedd6812bf4d33814fca1b66005805d3640ce53140ab8bbb1e2651b0d9bc"},
+ {file = "pyrsistent-0.18.1-cp39-cp39-win_amd64.whl", hash = "sha256:e24a828f57e0c337c8d8bb9f6b12f09dfdf0273da25fda9e314f0b684b415a07"},
+ {file = "pyrsistent-0.18.1.tar.gz", hash = "sha256:d4d61f8b993a7255ba714df3aca52700f8125289f84f704cf80916517c46eb96"},
]
pytest = [
- {file = "pytest-6.2.4-py3-none-any.whl", hash = "sha256:91ef2131a9bd6be8f76f1f08eac5c5317221d6ad1e143ae03894b862e8976890"},
- {file = "pytest-6.2.4.tar.gz", hash = "sha256:50bcad0a0b9c5a72c8e4e7c9855a3ad496ca6a881a3641b4260605450772c54b"},
+ {file = "pytest-6.2.5-py3-none-any.whl", hash = "sha256:7310f8d27bc79ced999e760ca304d69f6ba6c6649c0b60fb0e04a4a77cacc134"},
+ {file = "pytest-6.2.5.tar.gz", hash = "sha256:131b36680866a76e6781d13f101efb86cf674ebb9762eb70d3082b6f29889e89"},
]
python-dateutil = [
{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"},
]
pyyaml = [
- {file = "PyYAML-5.4.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:3b2b1824fe7112845700f815ff6a489360226a5609b96ec2190a45e62a9fc922"},
- {file = "PyYAML-5.4.1-cp27-cp27m-win32.whl", hash = "sha256:129def1b7c1bf22faffd67b8f3724645203b79d8f4cc81f674654d9902cb4393"},
- {file = "PyYAML-5.4.1-cp27-cp27m-win_amd64.whl", hash = "sha256:4465124ef1b18d9ace298060f4eccc64b0850899ac4ac53294547536533800c8"},
- {file = "PyYAML-5.4.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:bb4191dfc9306777bc594117aee052446b3fa88737cd13b7188d0e7aa8162185"},
- {file = "PyYAML-5.4.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:6c78645d400265a062508ae399b60b8c167bf003db364ecb26dcab2bda048253"},
- {file = "PyYAML-5.4.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:4e0583d24c881e14342eaf4ec5fbc97f934b999a6828693a99157fde912540cc"},
- {file = "PyYAML-5.4.1-cp36-cp36m-win32.whl", hash = "sha256:3bd0e463264cf257d1ffd2e40223b197271046d09dadf73a0fe82b9c1fc385a5"},
- {file = "PyYAML-5.4.1-cp36-cp36m-win_amd64.whl", hash = "sha256:e4fac90784481d221a8e4b1162afa7c47ed953be40d31ab4629ae917510051df"},
- {file = "PyYAML-5.4.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:5accb17103e43963b80e6f837831f38d314a0495500067cb25afab2e8d7a4018"},
- {file = "PyYAML-5.4.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:e1d4970ea66be07ae37a3c2e48b5ec63f7ba6804bdddfdbd3cfd954d25a82e63"},
- {file = "PyYAML-5.4.1-cp37-cp37m-win32.whl", hash = "sha256:dd5de0646207f053eb0d6c74ae45ba98c3395a571a2891858e87df7c9b9bd51b"},
- {file = "PyYAML-5.4.1-cp37-cp37m-win_amd64.whl", hash = "sha256:08682f6b72c722394747bddaf0aa62277e02557c0fd1c42cb853016a38f8dedf"},
- {file = "PyYAML-5.4.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d2d9808ea7b4af864f35ea216be506ecec180628aced0704e34aca0b040ffe46"},
- {file = "PyYAML-5.4.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:8c1be557ee92a20f184922c7b6424e8ab6691788e6d86137c5d93c1a6ec1b8fb"},
- {file = "PyYAML-5.4.1-cp38-cp38-win32.whl", hash = "sha256:fa5ae20527d8e831e8230cbffd9f8fe952815b2b7dae6ffec25318803a7528fc"},
- {file = "PyYAML-5.4.1-cp38-cp38-win_amd64.whl", hash = "sha256:0f5f5786c0e09baddcd8b4b45f20a7b5d61a7e7e99846e3c799b05c7c53fa696"},
- {file = "PyYAML-5.4.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:294db365efa064d00b8d1ef65d8ea2c3426ac366c0c4368d930bf1c5fb497f77"},
- {file = "PyYAML-5.4.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:74c1485f7707cf707a7aef42ef6322b8f97921bd89be2ab6317fd782c2d53183"},
- {file = "PyYAML-5.4.1-cp39-cp39-win32.whl", hash = "sha256:49d4cdd9065b9b6e206d0595fee27a96b5dd22618e7520c33204a4a3239d5b10"},
- {file = "PyYAML-5.4.1-cp39-cp39-win_amd64.whl", hash = "sha256:c20cfa2d49991c8b4147af39859b167664f2ad4561704ee74c1de03318e898db"},
- {file = "PyYAML-5.4.1.tar.gz", hash = "sha256:607774cbba28732bfa802b54baa7484215f530991055bb562efbed5b2f20a45e"},
+ {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"},
+ {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a80a78046a72361de73f8f395f1f1e49f956c6be882eed58505a15f3e430962b"},
+ {file = "PyYAML-6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f84fbc98b019fef2ee9a1cb3ce93e3187a6df0b2538a651bfb890254ba9f90b5"},
+ {file = "PyYAML-6.0-cp310-cp310-win32.whl", hash = "sha256:2cd5df3de48857ed0544b34e2d40e9fac445930039f3cfe4bcc592a1f836d513"},
+ {file = "PyYAML-6.0-cp310-cp310-win_amd64.whl", hash = "sha256:daf496c58a8c52083df09b80c860005194014c3698698d1a57cbcfa182142a3a"},
+ {file = "PyYAML-6.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:897b80890765f037df3403d22bab41627ca8811ae55e9a722fd0392850ec4d86"},
+ {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50602afada6d6cbfad699b0c7bb50d5ccffa7e46a3d738092afddc1f9758427f"},
+ {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:48c346915c114f5fdb3ead70312bd042a953a8ce5c7106d5bfb1a5254e47da92"},
+ {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:98c4d36e99714e55cfbaaee6dd5badbc9a1ec339ebfc3b1f52e293aee6bb71a4"},
+ {file = "PyYAML-6.0-cp36-cp36m-win32.whl", hash = "sha256:0283c35a6a9fbf047493e3a0ce8d79ef5030852c51e9d911a27badfde0605293"},
+ {file = "PyYAML-6.0-cp36-cp36m-win_amd64.whl", hash = "sha256:07751360502caac1c067a8132d150cf3d61339af5691fe9e87803040dbc5db57"},
+ {file = "PyYAML-6.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:819b3830a1543db06c4d4b865e70ded25be52a2e0631ccd2f6a47a2822f2fd7c"},
+ {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:473f9edb243cb1935ab5a084eb238d842fb8f404ed2193a915d1784b5a6b5fc0"},
+ {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0ce82d761c532fe4ec3f87fc45688bdd3a4c1dc5e0b4a19814b9009a29baefd4"},
+ {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:231710d57adfd809ef5d34183b8ed1eeae3f76459c18fb4a0b373ad56bedcdd9"},
+ {file = "PyYAML-6.0-cp37-cp37m-win32.whl", hash = "sha256:c5687b8d43cf58545ade1fe3e055f70eac7a5a1a0bf42824308d868289a95737"},
+ {file = "PyYAML-6.0-cp37-cp37m-win_amd64.whl", hash = "sha256:d15a181d1ecd0d4270dc32edb46f7cb7733c7c508857278d3d378d14d606db2d"},
+ {file = "PyYAML-6.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0b4624f379dab24d3725ffde76559cff63d9ec94e1736b556dacdfebe5ab6d4b"},
+ {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:213c60cd50106436cc818accf5baa1aba61c0189ff610f64f4a3e8c6726218ba"},
+ {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9fa600030013c4de8165339db93d182b9431076eb98eb40ee068700c9c813e34"},
+ {file = "PyYAML-6.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:277a0ef2981ca40581a47093e9e2d13b3f1fbbeffae064c1d21bfceba2030287"},
+ {file = "PyYAML-6.0-cp38-cp38-win32.whl", hash = "sha256:d4eccecf9adf6fbcc6861a38015c2a64f38b9d94838ac1810a9023a0609e1b78"},
+ {file = "PyYAML-6.0-cp38-cp38-win_amd64.whl", hash = "sha256:1e4747bc279b4f613a09eb64bba2ba602d8a6664c6ce6396a4d0cd413a50ce07"},
+ {file = "PyYAML-6.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:055d937d65826939cb044fc8c9b08889e8c743fdc6a32b33e2390f66013e449b"},
+ {file = "PyYAML-6.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e61ceaab6f49fb8bdfaa0f92c4b57bcfbea54c09277b1b4f7ac376bfb7a7c174"},
+ {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d67d839ede4ed1b28a4e8909735fc992a923cdb84e618544973d7dfc71540803"},
+ {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cba8c411ef271aa037d7357a2bc8f9ee8b58b9965831d9e51baf703280dc73d3"},
+ {file = "PyYAML-6.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:40527857252b61eacd1d9af500c3337ba8deb8fc298940291486c465c8b46ec0"},
+ {file = "PyYAML-6.0-cp39-cp39-win32.whl", hash = "sha256:b5b9eccad747aabaaffbc6064800670f0c297e52c12754eb1d976c57e4f74dcb"},
+ {file = "PyYAML-6.0-cp39-cp39-win_amd64.whl", hash = "sha256:b3d267842bf12586ba6c734f89d1f5b871df0273157918b0ccefa29deb05c21c"},
+ {file = "PyYAML-6.0.tar.gz", hash = "sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2"},
]
requests = [
- {file = "requests-2.26.0-py2.py3-none-any.whl", hash = "sha256:6c1246513ecd5ecd4528a0906f910e8f0f9c6b8ec72030dc9fd154dc1a6efd24"},
- {file = "requests-2.26.0.tar.gz", hash = "sha256:b8aa58f8cf793ffd8782d3d8cb19e66ef36f7aba4353eec859e74678b01b07a7"},
+ {file = "requests-2.27.1-py2.py3-none-any.whl", hash = "sha256:f22fa1e554c9ddfd16e6e41ac79759e17be9e492b3587efa038054674760e72d"},
+ {file = "requests-2.27.1.tar.gz", hash = "sha256:68d7c56fd5a8999887728ef304a6d12edc7be74f1cfa47714fc8b414525c9a61"},
]
requestsexceptions = [
{file = "requestsexceptions-1.4.0-py2.py3-none-any.whl", hash = "sha256:3083d872b6e07dc5c323563ef37671d992214ad9a32b0ca4a3d7f5500bf38ce3"},
{file = "requestsexceptions-1.4.0.tar.gz", hash = "sha256:b095cbc77618f066d459a02b137b020c37da9f46d9b057704019c9f77dba3065"},
]
s3transfer = [
- {file = "s3transfer-0.5.0-py3-none-any.whl", hash = "sha256:9c1dc369814391a6bda20ebbf4b70a0f34630592c9aa520856bf384916af2803"},
- {file = "s3transfer-0.5.0.tar.gz", hash = "sha256:50ed823e1dc5868ad40c8dc92072f757aa0e653a192845c94a3b676f4a62da4c"},
+ {file = "s3transfer-0.5.2-py3-none-any.whl", hash = "sha256:7a6f4c4d1fdb9a2b640244008e142cbc2cd3ae34b386584ef044dd0f27101971"},
+ {file = "s3transfer-0.5.2.tar.gz", hash = "sha256:95c58c194ce657a5f4fb0b9e60a84968c808888aed628cd98ab8771fe1db98ed"},
]
six = [
{file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"},
{file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"},
]
stevedore = [
- {file = "stevedore-3.3.0-py3-none-any.whl", hash = "sha256:50d7b78fbaf0d04cd62411188fa7eedcb03eb7f4c4b37005615ceebe582aa82a"},
- {file = "stevedore-3.3.0.tar.gz", hash = "sha256:3a5bbd0652bf552748871eaa73a4a8dc2899786bc497a2aa1fcb4dcdb0debeee"},
+ {file = "stevedore-3.5.0-py3-none-any.whl", hash = "sha256:a547de73308fd7e90075bb4d301405bebf705292fa90a90fc3bcf9133f58616c"},
+ {file = "stevedore-3.5.0.tar.gz", hash = "sha256:f40253887d8712eaa2bb0ea3830374416736dc8ec0e22f5a65092c1174c44335"},
]
tabulate = [
{file = "tabulate-0.8.9-py3-none-any.whl", hash = "sha256:d7c013fe7abbc5e491394e10fa845f8f32fe54f8dc60c6622c6cf482d25d47e4"},
@@ -940,61 +1024,158 @@ toml = [
{file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"},
]
typing-extensions = [
- {file = "typing_extensions-3.10.0.0-py2-none-any.whl", hash = "sha256:0ac0f89795dd19de6b97debb0c6af1c70987fd80a2d62d1958f7e56fcc31b497"},
- {file = "typing_extensions-3.10.0.0-py3-none-any.whl", hash = "sha256:779383f6086d90c99ae41cf0ff39aac8a7937a9283ce0a414e5dd782f4c94a84"},
- {file = "typing_extensions-3.10.0.0.tar.gz", hash = "sha256:50b6f157849174217d0656f99dc82fe932884fb250826c18350e159ec6cdf342"},
+ {file = "typing_extensions-4.2.0-py3-none-any.whl", hash = "sha256:6657594ee297170d19f67d55c05852a874e7eb634f4f753dbd667855e07c1708"},
+ {file = "typing_extensions-4.2.0.tar.gz", hash = "sha256:f1c24655a0da0d1b67f07e17a5e6b2a105894e6824b92096378bb3668ef02376"},
]
urllib3 = [
- {file = "urllib3-1.26.6-py2.py3-none-any.whl", hash = "sha256:39fb8672126159acb139a7718dd10806104dec1e2f0f6c88aab05d17df10c8d4"},
- {file = "urllib3-1.26.6.tar.gz", hash = "sha256:f57b4c16c62fa2760b7e3d97c35b255512fb6b59a259730f36ba32ce9f8e342f"},
+ {file = "urllib3-1.26.9-py2.py3-none-any.whl", hash = "sha256:44ece4d53fb1706f667c9bd1c648f5469a2ec925fcf3a776667042d645472c14"},
+ {file = "urllib3-1.26.9.tar.gz", hash = "sha256:aabaf16477806a5e1dd19aa41f8c2b7950dd3c746362d7e3223dbe6de6ac448e"},
]
vcrpy = [
{file = "vcrpy-4.1.1-py2.py3-none-any.whl", hash = "sha256:12c3fcdae7b88ecf11fc0d3e6d77586549d4575a2ceee18e82eee75c1f626162"},
{file = "vcrpy-4.1.1.tar.gz", hash = "sha256:57095bf22fc0a2d99ee9674cdafebed0f3ba763018582450706f7d3a74fff599"},
]
wrapt = [
- {file = "wrapt-1.12.1.tar.gz", hash = "sha256:b62ffa81fb85f4332a4f609cab4ac40709470da05643a082ec1eb88e6d9b97d7"},
+ {file = "wrapt-1.14.0-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:5a9a1889cc01ed2ed5f34574c90745fab1dd06ec2eee663e8ebeefe363e8efd7"},
+ {file = "wrapt-1.14.0-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:9a3ff5fb015f6feb78340143584d9f8a0b91b6293d6b5cf4295b3e95d179b88c"},
+ {file = "wrapt-1.14.0-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:4b847029e2d5e11fd536c9ac3136ddc3f54bc9488a75ef7d040a3900406a91eb"},
+ {file = "wrapt-1.14.0-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:9a5a544861b21e0e7575b6023adebe7a8c6321127bb1d238eb40d99803a0e8bd"},
+ {file = "wrapt-1.14.0-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:88236b90dda77f0394f878324cfbae05ae6fde8a84d548cfe73a75278d760291"},
+ {file = "wrapt-1.14.0-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:f0408e2dbad9e82b4c960274214af533f856a199c9274bd4aff55d4634dedc33"},
+ {file = "wrapt-1.14.0-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:9d8c68c4145041b4eeae96239802cfdfd9ef927754a5be3f50505f09f309d8c6"},
+ {file = "wrapt-1.14.0-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:22626dca56fd7f55a0733e604f1027277eb0f4f3d95ff28f15d27ac25a45f71b"},
+ {file = "wrapt-1.14.0-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:65bf3eb34721bf18b5a021a1ad7aa05947a1767d1aa272b725728014475ea7d5"},
+ {file = "wrapt-1.14.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:09d16ae7a13cff43660155383a2372b4aa09109c7127aa3f24c3cf99b891c330"},
+ {file = "wrapt-1.14.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:debaf04f813ada978d7d16c7dfa16f3c9c2ec9adf4656efdc4defdf841fc2f0c"},
+ {file = "wrapt-1.14.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:748df39ed634851350efa87690c2237a678ed794fe9ede3f0d79f071ee042561"},
+ {file = "wrapt-1.14.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1807054aa7b61ad8d8103b3b30c9764de2e9d0c0978e9d3fc337e4e74bf25faa"},
+ {file = "wrapt-1.14.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:763a73ab377390e2af26042f685a26787c402390f682443727b847e9496e4a2a"},
+ {file = "wrapt-1.14.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:8529b07b49b2d89d6917cfa157d3ea1dfb4d319d51e23030664a827fe5fd2131"},
+ {file = "wrapt-1.14.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:68aeefac31c1f73949662ba8affaf9950b9938b712fb9d428fa2a07e40ee57f8"},
+ {file = "wrapt-1.14.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:59d7d92cee84a547d91267f0fea381c363121d70fe90b12cd88241bd9b0e1763"},
+ {file = "wrapt-1.14.0-cp310-cp310-win32.whl", hash = "sha256:3a88254881e8a8c4784ecc9cb2249ff757fd94b911d5df9a5984961b96113fff"},
+ {file = "wrapt-1.14.0-cp310-cp310-win_amd64.whl", hash = "sha256:9a242871b3d8eecc56d350e5e03ea1854de47b17f040446da0e47dc3e0b9ad4d"},
+ {file = "wrapt-1.14.0-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:a65bffd24409454b889af33b6c49d0d9bcd1a219b972fba975ac935f17bdf627"},
+ {file = "wrapt-1.14.0-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:9d9fcd06c952efa4b6b95f3d788a819b7f33d11bea377be6b8980c95e7d10775"},
+ {file = "wrapt-1.14.0-cp35-cp35m-manylinux2010_i686.whl", hash = "sha256:db6a0ddc1282ceb9032e41853e659c9b638789be38e5b8ad7498caac00231c23"},
+ {file = "wrapt-1.14.0-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:14e7e2c5f5fca67e9a6d5f753d21f138398cad2b1159913ec9e9a67745f09ba3"},
+ {file = "wrapt-1.14.0-cp35-cp35m-win32.whl", hash = "sha256:6d9810d4f697d58fd66039ab959e6d37e63ab377008ef1d63904df25956c7db0"},
+ {file = "wrapt-1.14.0-cp35-cp35m-win_amd64.whl", hash = "sha256:d808a5a5411982a09fef6b49aac62986274ab050e9d3e9817ad65b2791ed1425"},
+ {file = "wrapt-1.14.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:b77159d9862374da213f741af0c361720200ab7ad21b9f12556e0eb95912cd48"},
+ {file = "wrapt-1.14.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:36a76a7527df8583112b24adc01748cd51a2d14e905b337a6fefa8b96fc708fb"},
+ {file = "wrapt-1.14.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a0057b5435a65b933cbf5d859cd4956624df37b8bf0917c71756e4b3d9958b9e"},
+ {file = "wrapt-1.14.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a0a4ca02752ced5f37498827e49c414d694ad7cf451ee850e3ff160f2bee9d3"},
+ {file = "wrapt-1.14.0-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:8c6be72eac3c14baa473620e04f74186c5d8f45d80f8f2b4eda6e1d18af808e8"},
+ {file = "wrapt-1.14.0-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:21b1106bff6ece8cb203ef45b4f5778d7226c941c83aaaa1e1f0f4f32cc148cd"},
+ {file = "wrapt-1.14.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:493da1f8b1bb8a623c16552fb4a1e164c0200447eb83d3f68b44315ead3f9036"},
+ {file = "wrapt-1.14.0-cp36-cp36m-win32.whl", hash = "sha256:89ba3d548ee1e6291a20f3c7380c92f71e358ce8b9e48161401e087e0bc740f8"},
+ {file = "wrapt-1.14.0-cp36-cp36m-win_amd64.whl", hash = "sha256:729d5e96566f44fccac6c4447ec2332636b4fe273f03da128fff8d5559782b06"},
+ {file = "wrapt-1.14.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:891c353e95bb11abb548ca95c8b98050f3620a7378332eb90d6acdef35b401d4"},
+ {file = "wrapt-1.14.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:23f96134a3aa24cc50614920cc087e22f87439053d886e474638c68c8d15dc80"},
+ {file = "wrapt-1.14.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6807bcee549a8cb2f38f73f469703a1d8d5d990815c3004f21ddb68a567385ce"},
+ {file = "wrapt-1.14.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6915682f9a9bc4cf2908e83caf5895a685da1fbd20b6d485dafb8e218a338279"},
+ {file = "wrapt-1.14.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:f2f3bc7cd9c9fcd39143f11342eb5963317bd54ecc98e3650ca22704b69d9653"},
+ {file = "wrapt-1.14.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:3a71dbd792cc7a3d772ef8cd08d3048593f13d6f40a11f3427c000cf0a5b36a0"},
+ {file = "wrapt-1.14.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:5a0898a640559dec00f3614ffb11d97a2666ee9a2a6bad1259c9facd01a1d4d9"},
+ {file = "wrapt-1.14.0-cp37-cp37m-win32.whl", hash = "sha256:167e4793dc987f77fd476862d32fa404d42b71f6a85d3b38cbce711dba5e6b68"},
+ {file = "wrapt-1.14.0-cp37-cp37m-win_amd64.whl", hash = "sha256:d066ffc5ed0be00cd0352c95800a519cf9e4b5dd34a028d301bdc7177c72daf3"},
+ {file = "wrapt-1.14.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d9bdfa74d369256e4218000a629978590fd7cb6cf6893251dad13d051090436d"},
+ {file = "wrapt-1.14.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:2498762814dd7dd2a1d0248eda2afbc3dd9c11537bc8200a4b21789b6df6cd38"},
+ {file = "wrapt-1.14.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5f24ca7953f2643d59a9c87d6e272d8adddd4a53bb62b9208f36db408d7aafc7"},
+ {file = "wrapt-1.14.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5b835b86bd5a1bdbe257d610eecab07bf685b1af2a7563093e0e69180c1d4af1"},
+ {file = "wrapt-1.14.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b21650fa6907e523869e0396c5bd591cc326e5c1dd594dcdccac089561cacfb8"},
+ {file = "wrapt-1.14.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:354d9fc6b1e44750e2a67b4b108841f5f5ea08853453ecbf44c81fdc2e0d50bd"},
+ {file = "wrapt-1.14.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:1f83e9c21cd5275991076b2ba1cd35418af3504667affb4745b48937e214bafe"},
+ {file = "wrapt-1.14.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:61e1a064906ccba038aa3c4a5a82f6199749efbbb3cef0804ae5c37f550eded0"},
+ {file = "wrapt-1.14.0-cp38-cp38-win32.whl", hash = "sha256:28c659878f684365d53cf59dc9a1929ea2eecd7ac65da762be8b1ba193f7e84f"},
+ {file = "wrapt-1.14.0-cp38-cp38-win_amd64.whl", hash = "sha256:b0ed6ad6c9640671689c2dbe6244680fe8b897c08fd1fab2228429b66c518e5e"},
+ {file = "wrapt-1.14.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b3f7e671fb19734c872566e57ce7fc235fa953d7c181bb4ef138e17d607dc8a1"},
+ {file = "wrapt-1.14.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:87fa943e8bbe40c8c1ba4086971a6fefbf75e9991217c55ed1bcb2f1985bd3d4"},
+ {file = "wrapt-1.14.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4775a574e9d84e0212f5b18886cace049a42e13e12009bb0491562a48bb2b758"},
+ {file = "wrapt-1.14.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9d57677238a0c5411c76097b8b93bdebb02eb845814c90f0b01727527a179e4d"},
+ {file = "wrapt-1.14.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:00108411e0f34c52ce16f81f1d308a571df7784932cc7491d1e94be2ee93374b"},
+ {file = "wrapt-1.14.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d332eecf307fca852d02b63f35a7872de32d5ba8b4ec32da82f45df986b39ff6"},
+ {file = "wrapt-1.14.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:01f799def9b96a8ec1ef6b9c1bbaf2bbc859b87545efbecc4a78faea13d0e3a0"},
+ {file = "wrapt-1.14.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:47045ed35481e857918ae78b54891fac0c1d197f22c95778e66302668309336c"},
+ {file = "wrapt-1.14.0-cp39-cp39-win32.whl", hash = "sha256:2eca15d6b947cfff51ed76b2d60fd172c6ecd418ddab1c5126032d27f74bc350"},
+ {file = "wrapt-1.14.0-cp39-cp39-win_amd64.whl", hash = "sha256:bb36fbb48b22985d13a6b496ea5fb9bb2a076fea943831643836c9f6febbcfdc"},
+ {file = "wrapt-1.14.0.tar.gz", hash = "sha256:8323a43bd9c91f62bb7d4be74cc9ff10090e7ef820e27bfe8815c57e68261311"},
]
yarl = [
- {file = "yarl-1.6.3-cp36-cp36m-macosx_10_14_x86_64.whl", hash = "sha256:0355a701b3998dcd832d0dc47cc5dedf3874f966ac7f870e0f3a6788d802d434"},
- {file = "yarl-1.6.3-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:bafb450deef6861815ed579c7a6113a879a6ef58aed4c3a4be54400ae8871478"},
- {file = "yarl-1.6.3-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:547f7665ad50fa8563150ed079f8e805e63dd85def6674c97efd78eed6c224a6"},
- {file = "yarl-1.6.3-cp36-cp36m-manylinux2014_i686.whl", hash = "sha256:63f90b20ca654b3ecc7a8d62c03ffa46999595f0167d6450fa8383bab252987e"},
- {file = "yarl-1.6.3-cp36-cp36m-manylinux2014_ppc64le.whl", hash = "sha256:97b5bdc450d63c3ba30a127d018b866ea94e65655efaf889ebeabc20f7d12406"},
- {file = "yarl-1.6.3-cp36-cp36m-manylinux2014_s390x.whl", hash = "sha256:d8d07d102f17b68966e2de0e07bfd6e139c7c02ef06d3a0f8d2f0f055e13bb76"},
- {file = "yarl-1.6.3-cp36-cp36m-manylinux2014_x86_64.whl", hash = "sha256:15263c3b0b47968c1d90daa89f21fcc889bb4b1aac5555580d74565de6836366"},
- {file = "yarl-1.6.3-cp36-cp36m-win32.whl", hash = "sha256:b5dfc9a40c198334f4f3f55880ecf910adebdcb2a0b9a9c23c9345faa9185721"},
- {file = "yarl-1.6.3-cp36-cp36m-win_amd64.whl", hash = "sha256:b2e9a456c121e26d13c29251f8267541bd75e6a1ccf9e859179701c36a078643"},
- {file = "yarl-1.6.3-cp37-cp37m-macosx_10_14_x86_64.whl", hash = "sha256:ce3beb46a72d9f2190f9e1027886bfc513702d748047b548b05dab7dfb584d2e"},
- {file = "yarl-1.6.3-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:2ce4c621d21326a4a5500c25031e102af589edb50c09b321049e388b3934eec3"},
- {file = "yarl-1.6.3-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:d26608cf178efb8faa5ff0f2d2e77c208f471c5a3709e577a7b3fd0445703ac8"},
- {file = "yarl-1.6.3-cp37-cp37m-manylinux2014_i686.whl", hash = "sha256:4c5bcfc3ed226bf6419f7a33982fb4b8ec2e45785a0561eb99274ebbf09fdd6a"},
- {file = "yarl-1.6.3-cp37-cp37m-manylinux2014_ppc64le.whl", hash = "sha256:4736eaee5626db8d9cda9eb5282028cc834e2aeb194e0d8b50217d707e98bb5c"},
- {file = "yarl-1.6.3-cp37-cp37m-manylinux2014_s390x.whl", hash = "sha256:68dc568889b1c13f1e4745c96b931cc94fdd0defe92a72c2b8ce01091b22e35f"},
- {file = "yarl-1.6.3-cp37-cp37m-manylinux2014_x86_64.whl", hash = "sha256:7356644cbed76119d0b6bd32ffba704d30d747e0c217109d7979a7bc36c4d970"},
- {file = "yarl-1.6.3-cp37-cp37m-win32.whl", hash = "sha256:00d7ad91b6583602eb9c1d085a2cf281ada267e9a197e8b7cae487dadbfa293e"},
- {file = "yarl-1.6.3-cp37-cp37m-win_amd64.whl", hash = "sha256:69ee97c71fee1f63d04c945f56d5d726483c4762845400a6795a3b75d56b6c50"},
- {file = "yarl-1.6.3-cp38-cp38-macosx_10_14_x86_64.whl", hash = "sha256:e46fba844f4895b36f4c398c5af062a9808d1f26b2999c58909517384d5deda2"},
- {file = "yarl-1.6.3-cp38-cp38-manylinux1_i686.whl", hash = "sha256:31ede6e8c4329fb81c86706ba8f6bf661a924b53ba191b27aa5fcee5714d18ec"},
- {file = "yarl-1.6.3-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:fcbb48a93e8699eae920f8d92f7160c03567b421bc17362a9ffbbd706a816f71"},
- {file = "yarl-1.6.3-cp38-cp38-manylinux2014_i686.whl", hash = "sha256:72a660bdd24497e3e84f5519e57a9ee9220b6f3ac4d45056961bf22838ce20cc"},
- {file = "yarl-1.6.3-cp38-cp38-manylinux2014_ppc64le.whl", hash = "sha256:324ba3d3c6fee56e2e0b0d09bf5c73824b9f08234339d2b788af65e60040c959"},
- {file = "yarl-1.6.3-cp38-cp38-manylinux2014_s390x.whl", hash = "sha256:e6b5460dc5ad42ad2b36cca524491dfcaffbfd9c8df50508bddc354e787b8dc2"},
- {file = "yarl-1.6.3-cp38-cp38-manylinux2014_x86_64.whl", hash = "sha256:6d6283d8e0631b617edf0fd726353cb76630b83a089a40933043894e7f6721e2"},
- {file = "yarl-1.6.3-cp38-cp38-win32.whl", hash = "sha256:9ede61b0854e267fd565e7527e2f2eb3ef8858b301319be0604177690e1a3896"},
- {file = "yarl-1.6.3-cp38-cp38-win_amd64.whl", hash = "sha256:f0b059678fd549c66b89bed03efcabb009075bd131c248ecdf087bdb6faba24a"},
- {file = "yarl-1.6.3-cp39-cp39-macosx_10_14_x86_64.whl", hash = "sha256:329412812ecfc94a57cd37c9d547579510a9e83c516bc069470db5f75684629e"},
- {file = "yarl-1.6.3-cp39-cp39-manylinux1_i686.whl", hash = "sha256:c49ff66d479d38ab863c50f7bb27dee97c6627c5fe60697de15529da9c3de724"},
- {file = "yarl-1.6.3-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:f040bcc6725c821a4c0665f3aa96a4d0805a7aaf2caf266d256b8ed71b9f041c"},
- {file = "yarl-1.6.3-cp39-cp39-manylinux2014_i686.whl", hash = "sha256:d5c32c82990e4ac4d8150fd7652b972216b204de4e83a122546dce571c1bdf25"},
- {file = "yarl-1.6.3-cp39-cp39-manylinux2014_ppc64le.whl", hash = "sha256:d597767fcd2c3dc49d6eea360c458b65643d1e4dbed91361cf5e36e53c1f8c96"},
- {file = "yarl-1.6.3-cp39-cp39-manylinux2014_s390x.whl", hash = "sha256:8aa3decd5e0e852dc68335abf5478a518b41bf2ab2f330fe44916399efedfae0"},
- {file = "yarl-1.6.3-cp39-cp39-manylinux2014_x86_64.whl", hash = "sha256:73494d5b71099ae8cb8754f1df131c11d433b387efab7b51849e7e1e851f07a4"},
- {file = "yarl-1.6.3-cp39-cp39-win32.whl", hash = "sha256:5b883e458058f8d6099e4420f0cc2567989032b5f34b271c0827de9f1079a424"},
- {file = "yarl-1.6.3-cp39-cp39-win_amd64.whl", hash = "sha256:4953fb0b4fdb7e08b2f3b3be80a00d28c5c8a2056bb066169de00e6501b986b6"},
- {file = "yarl-1.6.3.tar.gz", hash = "sha256:8a9066529240171b68893d60dca86a763eae2139dd42f42106b03cf4b426bf10"},
+ {file = "yarl-1.7.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:f2a8508f7350512434e41065684076f640ecce176d262a7d54f0da41d99c5a95"},
+ {file = "yarl-1.7.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:da6df107b9ccfe52d3a48165e48d72db0eca3e3029b5b8cb4fe6ee3cb870ba8b"},
+ {file = "yarl-1.7.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a1d0894f238763717bdcfea74558c94e3bc34aeacd3351d769460c1a586a8b05"},
+ {file = "yarl-1.7.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dfe4b95b7e00c6635a72e2d00b478e8a28bfb122dc76349a06e20792eb53a523"},
+ {file = "yarl-1.7.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c145ab54702334c42237a6c6c4cc08703b6aa9b94e2f227ceb3d477d20c36c63"},
+ {file = "yarl-1.7.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1ca56f002eaf7998b5fcf73b2421790da9d2586331805f38acd9997743114e98"},
+ {file = "yarl-1.7.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:1d3d5ad8ea96bd6d643d80c7b8d5977b4e2fb1bab6c9da7322616fd26203d125"},
+ {file = "yarl-1.7.2-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:167ab7f64e409e9bdd99333fe8c67b5574a1f0495dcfd905bc7454e766729b9e"},
+ {file = "yarl-1.7.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:95a1873b6c0dd1c437fb3bb4a4aaa699a48c218ac7ca1e74b0bee0ab16c7d60d"},
+ {file = "yarl-1.7.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:6152224d0a1eb254f97df3997d79dadd8bb2c1a02ef283dbb34b97d4f8492d23"},
+ {file = "yarl-1.7.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:5bb7d54b8f61ba6eee541fba4b83d22b8a046b4ef4d8eb7f15a7e35db2e1e245"},
+ {file = "yarl-1.7.2-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:9c1f083e7e71b2dd01f7cd7434a5f88c15213194df38bc29b388ccdf1492b739"},
+ {file = "yarl-1.7.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:f44477ae29025d8ea87ec308539f95963ffdc31a82f42ca9deecf2d505242e72"},
+ {file = "yarl-1.7.2-cp310-cp310-win32.whl", hash = "sha256:cff3ba513db55cc6a35076f32c4cdc27032bd075c9faef31fec749e64b45d26c"},
+ {file = "yarl-1.7.2-cp310-cp310-win_amd64.whl", hash = "sha256:c9c6d927e098c2d360695f2e9d38870b2e92e0919be07dbe339aefa32a090265"},
+ {file = "yarl-1.7.2-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:9b4c77d92d56a4c5027572752aa35082e40c561eec776048330d2907aead891d"},
+ {file = "yarl-1.7.2-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c01a89a44bb672c38f42b49cdb0ad667b116d731b3f4c896f72302ff77d71656"},
+ {file = "yarl-1.7.2-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c19324a1c5399b602f3b6e7db9478e5b1adf5cf58901996fc973fe4fccd73eed"},
+ {file = "yarl-1.7.2-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3abddf0b8e41445426d29f955b24aeecc83fa1072be1be4e0d194134a7d9baee"},
+ {file = "yarl-1.7.2-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:6a1a9fe17621af43e9b9fcea8bd088ba682c8192d744b386ee3c47b56eaabb2c"},
+ {file = "yarl-1.7.2-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:8b0915ee85150963a9504c10de4e4729ae700af11df0dc5550e6587ed7891e92"},
+ {file = "yarl-1.7.2-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:29e0656d5497733dcddc21797da5a2ab990c0cb9719f1f969e58a4abac66234d"},
+ {file = "yarl-1.7.2-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:bf19725fec28452474d9887a128e98dd67eee7b7d52e932e6949c532d820dc3b"},
+ {file = "yarl-1.7.2-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:d6f3d62e16c10e88d2168ba2d065aa374e3c538998ed04996cd373ff2036d64c"},
+ {file = "yarl-1.7.2-cp36-cp36m-musllinux_1_1_s390x.whl", hash = "sha256:ac10bbac36cd89eac19f4e51c032ba6b412b3892b685076f4acd2de18ca990aa"},
+ {file = "yarl-1.7.2-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:aa32aaa97d8b2ed4e54dc65d241a0da1c627454950f7d7b1f95b13985afd6c5d"},
+ {file = "yarl-1.7.2-cp36-cp36m-win32.whl", hash = "sha256:87f6e082bce21464857ba58b569370e7b547d239ca22248be68ea5d6b51464a1"},
+ {file = "yarl-1.7.2-cp36-cp36m-win_amd64.whl", hash = "sha256:ac35ccde589ab6a1870a484ed136d49a26bcd06b6a1c6397b1967ca13ceb3913"},
+ {file = "yarl-1.7.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:a467a431a0817a292121c13cbe637348b546e6ef47ca14a790aa2fa8cc93df63"},
+ {file = "yarl-1.7.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6ab0c3274d0a846840bf6c27d2c60ba771a12e4d7586bf550eefc2df0b56b3b4"},
+ {file = "yarl-1.7.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d260d4dc495c05d6600264a197d9d6f7fc9347f21d2594926202fd08cf89a8ba"},
+ {file = "yarl-1.7.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fc4dd8b01a8112809e6b636b00f487846956402834a7fd59d46d4f4267181c41"},
+ {file = "yarl-1.7.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:c1164a2eac148d85bbdd23e07dfcc930f2e633220f3eb3c3e2a25f6148c2819e"},
+ {file = "yarl-1.7.2-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:67e94028817defe5e705079b10a8438b8cb56e7115fa01640e9c0bb3edf67332"},
+ {file = "yarl-1.7.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:89ccbf58e6a0ab89d487c92a490cb5660d06c3a47ca08872859672f9c511fc52"},
+ {file = "yarl-1.7.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:8cce6f9fa3df25f55521fbb5c7e4a736683148bcc0c75b21863789e5185f9185"},
+ {file = "yarl-1.7.2-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:211fcd65c58bf250fb994b53bc45a442ddc9f441f6fec53e65de8cba48ded986"},
+ {file = "yarl-1.7.2-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:c10ea1e80a697cf7d80d1ed414b5cb8f1eec07d618f54637067ae3c0334133c4"},
+ {file = "yarl-1.7.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:52690eb521d690ab041c3919666bea13ab9fbff80d615ec16fa81a297131276b"},
+ {file = "yarl-1.7.2-cp37-cp37m-win32.whl", hash = "sha256:695ba021a9e04418507fa930d5f0704edbce47076bdcfeeaba1c83683e5649d1"},
+ {file = "yarl-1.7.2-cp37-cp37m-win_amd64.whl", hash = "sha256:c17965ff3706beedafd458c452bf15bac693ecd146a60a06a214614dc097a271"},
+ {file = "yarl-1.7.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:fce78593346c014d0d986b7ebc80d782b7f5e19843ca798ed62f8e3ba8728576"},
+ {file = "yarl-1.7.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:c2a1ac41a6aa980db03d098a5531f13985edcb451bcd9d00670b03129922cd0d"},
+ {file = "yarl-1.7.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:39d5493c5ecd75c8093fa7700a2fb5c94fe28c839c8e40144b7ab7ccba6938c8"},
+ {file = "yarl-1.7.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1eb6480ef366d75b54c68164094a6a560c247370a68c02dddb11f20c4c6d3c9d"},
+ {file = "yarl-1.7.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5ba63585a89c9885f18331a55d25fe81dc2d82b71311ff8bd378fc8004202ff6"},
+ {file = "yarl-1.7.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e39378894ee6ae9f555ae2de332d513a5763276a9265f8e7cbaeb1b1ee74623a"},
+ {file = "yarl-1.7.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:c0910c6b6c31359d2f6184828888c983d54d09d581a4a23547a35f1d0b9484b1"},
+ {file = "yarl-1.7.2-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:6feca8b6bfb9eef6ee057628e71e1734caf520a907b6ec0d62839e8293e945c0"},
+ {file = "yarl-1.7.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:8300401dc88cad23f5b4e4c1226f44a5aa696436a4026e456fe0e5d2f7f486e6"},
+ {file = "yarl-1.7.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:788713c2896f426a4e166b11f4ec538b5736294ebf7d5f654ae445fd44270832"},
+ {file = "yarl-1.7.2-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:fd547ec596d90c8676e369dd8a581a21227fe9b4ad37d0dc7feb4ccf544c2d59"},
+ {file = "yarl-1.7.2-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:737e401cd0c493f7e3dd4db72aca11cfe069531c9761b8ea474926936b3c57c8"},
+ {file = "yarl-1.7.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:baf81561f2972fb895e7844882898bda1eef4b07b5b385bcd308d2098f1a767b"},
+ {file = "yarl-1.7.2-cp38-cp38-win32.whl", hash = "sha256:ede3b46cdb719c794427dcce9d8beb4abe8b9aa1e97526cc20de9bd6583ad1ef"},
+ {file = "yarl-1.7.2-cp38-cp38-win_amd64.whl", hash = "sha256:cc8b7a7254c0fc3187d43d6cb54b5032d2365efd1df0cd1749c0c4df5f0ad45f"},
+ {file = "yarl-1.7.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:580c1f15500e137a8c37053e4cbf6058944d4c114701fa59944607505c2fe3a0"},
+ {file = "yarl-1.7.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3ec1d9a0d7780416e657f1e405ba35ec1ba453a4f1511eb8b9fbab81cb8b3ce1"},
+ {file = "yarl-1.7.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3bf8cfe8856708ede6a73907bf0501f2dc4e104085e070a41f5d88e7faf237f3"},
+ {file = "yarl-1.7.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1be4bbb3d27a4e9aa5f3df2ab61e3701ce8fcbd3e9846dbce7c033a7e8136746"},
+ {file = "yarl-1.7.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:534b047277a9a19d858cde163aba93f3e1677d5acd92f7d10ace419d478540de"},
+ {file = "yarl-1.7.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c6ddcd80d79c96eb19c354d9dca95291589c5954099836b7c8d29278a7ec0bda"},
+ {file = "yarl-1.7.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:9bfcd43c65fbb339dc7086b5315750efa42a34eefad0256ba114cd8ad3896f4b"},
+ {file = "yarl-1.7.2-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f64394bd7ceef1237cc604b5a89bf748c95982a84bcd3c4bbeb40f685c810794"},
+ {file = "yarl-1.7.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:044daf3012e43d4b3538562da94a88fb12a6490652dbc29fb19adfa02cf72eac"},
+ {file = "yarl-1.7.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:368bcf400247318382cc150aaa632582d0780b28ee6053cd80268c7e72796dec"},
+ {file = "yarl-1.7.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:bab827163113177aee910adb1f48ff7af31ee0289f434f7e22d10baf624a6dfe"},
+ {file = "yarl-1.7.2-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:0cba38120db72123db7c58322fa69e3c0efa933040ffb586c3a87c063ec7cae8"},
+ {file = "yarl-1.7.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:59218fef177296451b23214c91ea3aba7858b4ae3306dde120224cfe0f7a6ee8"},
+ {file = "yarl-1.7.2-cp39-cp39-win32.whl", hash = "sha256:1edc172dcca3f11b38a9d5c7505c83c1913c0addc99cd28e993efeaafdfaa18d"},
+ {file = "yarl-1.7.2-cp39-cp39-win_amd64.whl", hash = "sha256:797c2c412b04403d2da075fb93c123df35239cd7b4cc4e0cd9e5839b73f52c58"},
+ {file = "yarl-1.7.2.tar.gz", hash = "sha256:45399b46d60c253327a460e99856752009fcee5f5d3c80b2f7c0cae1c38d56dd"},
]
zipp = [
- {file = "zipp-3.5.0-py3-none-any.whl", hash = "sha256:957cfda87797e389580cb8b9e3870841ca991e2125350677b2ca83a0e99390a3"},
- {file = "zipp-3.5.0.tar.gz", hash = "sha256:f5812b1e007e48cff63449a5e9f4e7ebea716b4111f9c4f9a645f91d579bf0c4"},
+ {file = "zipp-3.8.0-py3-none-any.whl", hash = "sha256:c4f6e5bbf48e74f7a38e7cc5b0480ff42b0ae5178957d564d18932525d5cf099"},
+ {file = "zipp-3.8.0.tar.gz", hash = "sha256:56bf8aadb83c24db6c4b577e13de374ccfb67da2078beba1d037c17980bf43ad"},
]
diff --git a/tools/c7n_openstack/pyproject.toml b/tools/c7n_openstack/pyproject.toml
index e56da4c7d1b..70b24ca91f2 100644
--- a/tools/c7n_openstack/pyproject.toml
+++ b/tools/c7n_openstack/pyproject.toml
@@ -1,6 +1,6 @@
[tool.poetry]
name = "c7n_openstack"
-version = "0.1.4"
+version = "0.1.6"
description = "Cloud Custodian - OpenStack Provider"
readme = "readme.md"
authors = ["Cloud Custodian Project"]
@@ -15,7 +15,7 @@ classifiers = [
]
[tool.poetry.dependencies]
-python = "^3.6"
+python = "^3.7"
openstacksdk = "^0.52.0"
[tool.poetry.dev-dependencies]
diff --git a/tools/c7n_openstack/requirements.txt b/tools/c7n_openstack/requirements.txt
index 786893e8740..2f8dadf8fd3 100644
--- a/tools/c7n_openstack/requirements.txt
+++ b/tools/c7n_openstack/requirements.txt
@@ -1,28 +1,28 @@
appdirs==1.4.4; python_version >= "3.6"
-certifi==2021.5.30; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
-cffi==1.14.6; python_version >= "3.6"
-charset-normalizer==2.0.4; python_full_version >= "3.6.0" and python_version >= "3.6"
-cryptography==3.4.7; python_version >= "3.6"
-decorator==5.0.9; python_version >= "3.6"
-dogpile.cache==1.1.3; python_version >= "3.6"
-idna==3.2; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
-importlib-metadata==4.6.4; python_version < "3.8" and python_version >= "3.6"
-iso8601==0.1.16; python_version >= "3.6"
-jmespath==0.10.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.3.0" and python_version >= "3.6"
+certifi==2021.10.8; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
+cffi==1.15.0; python_version >= "3.6"
+charset-normalizer==2.0.12; python_full_version >= "3.6.0" and python_version >= "3.6"
+cryptography==36.0.2; python_version >= "3.6"
+decorator==5.1.1; python_version >= "3.6"
+dogpile.cache==1.1.5; python_version >= "3.6"
+idna==3.3; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
+importlib-metadata==4.11.3; python_version < "3.8" and python_version >= "3.7"
+iso8601==1.0.2; python_full_version >= "3.6.2" and python_version < "4.0" and python_version >= "3.6"
+jmespath==1.0.0; python_version >= "3.7"
jsonpatch==1.32; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.6"
-jsonpointer==2.1; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.6"
-keystoneauth1==4.3.1; python_version >= "3.6"
+jsonpointer==2.3; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.6"
+keystoneauth1==4.5.0; python_version >= "3.6"
munch==2.5.0; python_version >= "3.6"
netifaces==0.11.0; python_version >= "3.6"
openstacksdk==0.52.0; python_version >= "3.6"
os-service-types==1.7.0; python_version >= "3.6"
-pbr==5.6.0; python_version >= "3.6"
-pycparser==2.20; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
-pyyaml==5.4.1; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
-requests==2.26.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
+pbr==5.8.1; python_version >= "3.6"
+pycparser==2.21; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
+pyyaml==6.0; python_version >= "3.6"
+requests==2.27.1; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
requestsexceptions==1.4.0; python_version >= "3.6"
six==1.16.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.3.0" and python_version >= "3.6"
-stevedore==3.3.0; python_version >= "3.6"
-typing-extensions==3.10.0.0; python_version < "3.8" and python_version >= "3.6"
-urllib3==1.26.6; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version < "4" and python_version >= "3.6"
-zipp==3.5.0; python_version < "3.8" and python_version >= "3.6"
+stevedore==3.5.0; python_version >= "3.6"
+typing-extensions==4.2.0; python_version < "3.8" and python_version >= "3.7"
+urllib3==1.26.9; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version < "4" and python_version >= "3.6"
+zipp==3.8.0; python_version < "3.8" and python_version >= "3.7"
diff --git a/tools/c7n_openstack/setup.py b/tools/c7n_openstack/setup.py
index bc0bb8ab0b4..a40812518f7 100644
--- a/tools/c7n_openstack/setup.py
+++ b/tools/c7n_openstack/setup.py
@@ -10,28 +10,30 @@
{'': ['*']}
install_requires = \
-['argcomplete (>=1.12.3,<2.0.0)',
- 'attrs (>=21.2.0,<22.0.0)',
- 'boto3 (>=1.18.21,<2.0.0)',
- 'botocore (>=1.21.21,<2.0.0)',
- 'c7n (>=0.9.14,<0.10.0)',
- 'importlib-metadata (>=4.6.4,<5.0.0)',
- 'jmespath (>=0.10.0,<0.11.0)',
- 'jsonschema (>=3.2.0,<4.0.0)',
+['argcomplete (>=2.0.0,<3.0.0)',
+ 'attrs (>=21.4.0,<22.0.0)',
+ 'boto3 (>=1.21.42,<2.0.0)',
+ 'botocore (>=1.24.42,<2.0.0)',
+ 'c7n (>=0.9.16,<0.10.0)',
+ 'docutils (>=0.17.1,<0.18.0)',
+ 'importlib-metadata (>=4.11.3,<5.0.0)',
+ 'importlib-resources (>=5.7.1,<6.0.0)',
+ 'jmespath (>=1.0.0,<2.0.0)',
+ 'jsonschema (>=4.4.0,<5.0.0)',
'openstacksdk>=0.52.0,<0.53.0',
- 'pyrsistent (>=0.18.0,<0.19.0)',
+ 'pyrsistent (>=0.18.1,<0.19.0)',
'python-dateutil (>=2.8.2,<3.0.0)',
- 'pyyaml (>=5.4.1,<6.0.0)',
- 's3transfer (>=0.5.0,<0.6.0)',
+ 'pyyaml (>=6.0,<7.0)',
+ 's3transfer (>=0.5.2,<0.6.0)',
'six (>=1.16.0,<2.0.0)',
'tabulate (>=0.8.9,<0.9.0)',
- 'typing-extensions (>=3.10.0.0,<4.0.0.0)',
- 'urllib3 (>=1.26.6,<2.0.0)',
- 'zipp (>=3.5.0,<4.0.0)']
+ 'typing-extensions (>=4.2.0,<5.0.0)',
+ 'urllib3 (>=1.26.9,<2.0.0)',
+ 'zipp (>=3.8.0,<4.0.0)']
setup_kwargs = {
'name': 'c7n-openstack',
- 'version': '0.1.4',
+ 'version': '0.1.6',
'description': 'Cloud Custodian - OpenStack Provider',
'license': 'Apache-2.0',
'classifiers': [
@@ -49,7 +51,7 @@
'packages': packages,
'package_data': package_data,
'install_requires': install_requires,
- 'python_requires': '>=3.6,<4.0',
+ 'python_requires': '>=3.7,<4.0',
}
diff --git a/tools/c7n_org/README.md b/tools/c7n_org/README.md
index 8e3608c697a..cc5d4cc23e9 100644
--- a/tools/c7n_org/README.md
+++ b/tools/c7n_org/README.md
@@ -1,8 +1,8 @@
# c7n-org: Multi Account Custodian Execution
-[//]: # ( !!! IMPORTANT !!! )
-[//]: # (This file is moved during document generation.)
-[//]: # (Only edit the original document at ./tools/c7n_org/README.md)
+% [comment]: # ( !!! IMPORTANT !!! )
+% [comment]: # (This file is moved during document generation.)
+% [comment]: # (Only edit the original document at ./tools/c7n_org/README.md)
c7n-org is a tool to run custodian against multiple AWS accounts,
Azure subscriptions, or GCP projects in parallel.
diff --git a/tools/c7n_org/c7n_org/cli.py b/tools/c7n_org/c7n_org/cli.py
index 2a17475958a..8e482521117 100644
--- a/tools/c7n_org/c7n_org/cli.py
+++ b/tools/c7n_org/c7n_org/cli.py
@@ -10,6 +10,7 @@
import time
import subprocess # nosec
import sys
+from datetime import timedelta, datetime
import multiprocessing
from concurrent.futures import (
@@ -27,7 +28,7 @@
from c7n.config import Config
from c7n.policy import PolicyCollection
from c7n.provider import get_resource_class
-from c7n.reports.csvout import Formatter, fs_record_set
+from c7n.reports.csvout import Formatter, fs_record_set, record_set, strip_output_path
from c7n.resources import load_available
from c7n.utils import CONN_CACHE, dumps, filter_empty
@@ -312,7 +313,20 @@ def report_account(account, region, policies_config, output_path, cache_path, de
log.debug(
"Report policy:%s account:%s region:%s path:%s",
p.name, account['name'], region, output_path)
- policy_records = fs_record_set(p.ctx.log_dir, p.name)
+
+ if p.ctx.output.type == "s3":
+ delta = timedelta(days=1)
+ begin_date = datetime.now() - delta
+
+ policy_records = record_set(
+ p.session_factory,
+ p.ctx.output.config['netloc'],
+ strip_output_path(p.ctx.output.config['path'], p.name),
+ begin_date
+ )
+ else:
+ policy_records = fs_record_set(p.ctx.log_dir, p.name)
+
for r in policy_records:
r['policy'] = p.name
r['region'] = p.options.region
diff --git a/tools/c7n_org/poetry.lock b/tools/c7n_org/poetry.lock
index 9b92b30573e..3a8359de359 100644
--- a/tools/c7n_org/poetry.lock
+++ b/tools/c7n_org/poetry.lock
@@ -1,13 +1,13 @@
[[package]]
name = "argcomplete"
-version = "1.12.3"
+version = "2.0.0"
description = "Bash tab completion for argparse"
category = "dev"
optional = false
-python-versions = "*"
+python-versions = ">=3.6"
[package.dependencies]
-importlib-metadata = {version = ">=0.23,<5", markers = "python_version == \"3.6\" or python_version == \"3.7\""}
+importlib-metadata = {version = ">=0.23,<5", markers = "python_version == \"3.7\""}
[package.extras]
test = ["coverage", "flake8", "pexpect", "wheel"]
@@ -22,29 +22,29 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
[[package]]
name = "attrs"
-version = "21.2.0"
+version = "21.4.0"
description = "Classes Without Boilerplate"
category = "dev"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
[package.extras]
-dev = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "furo", "sphinx", "sphinx-notfound-page", "pre-commit"]
+dev = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "furo", "sphinx", "sphinx-notfound-page", "pre-commit", "cloudpickle"]
docs = ["furo", "sphinx", "zope.interface", "sphinx-notfound-page"]
-tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface"]
-tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins"]
+tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "cloudpickle"]
+tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "cloudpickle"]
[[package]]
name = "boto3"
-version = "1.18.21"
+version = "1.21.42"
description = "The AWS SDK for Python"
category = "dev"
optional = false
python-versions = ">= 3.6"
[package.dependencies]
-botocore = ">=1.21.21,<1.22.0"
-jmespath = ">=0.7.1,<1.0.0"
+botocore = ">=1.24.42,<1.25.0"
+jmespath = ">=0.7.1,<2.0.0"
s3transfer = ">=0.5.0,<0.6.0"
[package.extras]
@@ -52,36 +52,37 @@ crt = ["botocore[crt] (>=1.21.0,<2.0a0)"]
[[package]]
name = "botocore"
-version = "1.21.21"
+version = "1.24.42"
description = "Low-level, data-driven core of boto 3."
category = "dev"
optional = false
python-versions = ">= 3.6"
[package.dependencies]
-jmespath = ">=0.7.1,<1.0.0"
+jmespath = ">=0.7.1,<2.0.0"
python-dateutil = ">=2.1,<3.0.0"
urllib3 = ">=1.25.4,<1.27"
[package.extras]
-crt = ["awscrt (==0.11.24)"]
+crt = ["awscrt (==0.13.8)"]
[[package]]
name = "c7n"
-version = "0.9.14"
+version = "0.9.16"
description = "Cloud Custodian - Policy Rules Engine"
category = "dev"
optional = false
-python-versions = "^3.6"
+python-versions = "^3.7"
develop = true
[package.dependencies]
-argcomplete = "^1.11.1"
+argcomplete = ">=1.12.3"
boto3 = "^1.12.31"
-importlib-metadata = ">1.7.0;python_version<3.8"
-jsonschema = "^3.2.0"
-python-dateutil = "^2.8.1"
-pyyaml = "^5.3"
+docutils = ">=0.14,<0.18"
+importlib-metadata = ">=4.11.1"
+jsonschema = ">=3.0.0"
+python-dateutil = "^2.8.2"
+pyyaml = ">=5.4.0"
tabulate = "^0.8.6"
[package.source]
@@ -90,36 +91,63 @@ url = "../.."
[[package]]
name = "click"
-version = "7.1.2"
+version = "8.1.2"
description = "Composable command line interface toolkit"
category = "main"
optional = false
-python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
+python-versions = ">=3.7"
+
+[package.dependencies]
+colorama = {version = "*", markers = "platform_system == \"Windows\""}
+importlib-metadata = {version = "*", markers = "python_version < \"3.8\""}
[[package]]
name = "colorama"
version = "0.4.4"
description = "Cross-platform colored terminal text."
+category = "main"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
+
+[[package]]
+name = "docutils"
+version = "0.17.1"
+description = "Docutils -- Python Documentation Utilities"
category = "dev"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
[[package]]
name = "importlib-metadata"
-version = "4.6.4"
+version = "4.11.3"
description = "Read metadata from Python packages"
-category = "dev"
+category = "main"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.7"
[package.dependencies]
typing-extensions = {version = ">=3.6.4", markers = "python_version < \"3.8\""}
zipp = ">=0.5"
[package.extras]
-docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
+docs = ["sphinx", "jaraco.packaging (>=9)", "rst.linker (>=1.9)"]
perf = ["ipython"]
-testing = ["pytest (>=4.6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pep517", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy", "importlib-resources (>=1.3)"]
+testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)", "importlib-resources (>=1.3)"]
+
+[[package]]
+name = "importlib-resources"
+version = "5.7.1"
+description = "Read resources from Python packages"
+category = "dev"
+optional = false
+python-versions = ">=3.7"
+
+[package.dependencies]
+zipp = {version = ">=3.1.0", markers = "python_version < \"3.10\""}
+
+[package.extras]
+docs = ["sphinx", "jaraco.packaging (>=9)", "rst.linker (>=1.9)"]
+testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)"]
[[package]]
name = "iniconfig"
@@ -131,82 +159,87 @@ python-versions = "*"
[[package]]
name = "jmespath"
-version = "0.10.0"
+version = "1.0.0"
description = "JSON Matching Expressions"
category = "dev"
optional = false
-python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*"
+python-versions = ">=3.7"
[[package]]
name = "jsonschema"
-version = "3.2.0"
+version = "4.4.0"
description = "An implementation of JSON Schema validation for Python"
category = "dev"
optional = false
-python-versions = "*"
+python-versions = ">=3.7"
[package.dependencies]
attrs = ">=17.4.0"
importlib-metadata = {version = "*", markers = "python_version < \"3.8\""}
-pyrsistent = ">=0.14.0"
-six = ">=1.11.0"
+importlib-resources = {version = ">=1.4.0", markers = "python_version < \"3.9\""}
+pyrsistent = ">=0.14.0,<0.17.0 || >0.17.0,<0.17.1 || >0.17.1,<0.17.2 || >0.17.2"
+typing-extensions = {version = "*", markers = "python_version < \"3.8\""}
[package.extras]
-format = ["idna", "jsonpointer (>1.13)", "rfc3987", "strict-rfc3339", "webcolors"]
-format_nongpl = ["idna", "jsonpointer (>1.13)", "webcolors", "rfc3986-validator (>0.1.0)", "rfc3339-validator"]
+format = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3987", "uri-template", "webcolors (>=1.11)"]
+format_nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3986-validator (>0.1.0)", "uri-template", "webcolors (>=1.11)"]
[[package]]
name = "packaging"
-version = "21.0"
+version = "21.3"
description = "Core utilities for Python packages"
category = "dev"
optional = false
python-versions = ">=3.6"
[package.dependencies]
-pyparsing = ">=2.0.2"
+pyparsing = ">=2.0.2,<3.0.5 || >3.0.5"
[[package]]
name = "pluggy"
-version = "0.13.1"
+version = "1.0.0"
description = "plugin and hook calling mechanisms for python"
category = "dev"
optional = false
-python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
+python-versions = ">=3.6"
[package.dependencies]
importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""}
[package.extras]
dev = ["pre-commit", "tox"]
+testing = ["pytest", "pytest-benchmark"]
[[package]]
name = "py"
-version = "1.10.0"
+version = "1.11.0"
description = "library with cross-python path, ini-parsing, io, code, log facilities"
category = "dev"
optional = false
-python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
[[package]]
name = "pyparsing"
-version = "2.4.7"
-description = "Python parsing module"
+version = "3.0.8"
+description = "pyparsing module - Classes and methods to define and execute parsing grammars"
category = "dev"
optional = false
-python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*"
+python-versions = ">=3.6.8"
+
+[package.extras]
+diagrams = ["railroad-diagrams", "jinja2"]
[[package]]
name = "pyrsistent"
-version = "0.18.0"
+version = "0.18.1"
description = "Persistent/Functional/Immutable data structures"
category = "dev"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.7"
[[package]]
name = "pytest"
-version = "6.2.4"
+version = "6.2.5"
description = "pytest: simple powerful testing with Python"
category = "dev"
optional = false
@@ -219,7 +252,7 @@ colorama = {version = "*", markers = "sys_platform == \"win32\""}
importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""}
iniconfig = "*"
packaging = "*"
-pluggy = ">=0.12,<1.0.0a1"
+pluggy = ">=0.12,<2.0"
py = ">=1.8.2"
toml = "*"
@@ -239,15 +272,15 @@ six = ">=1.5"
[[package]]
name = "pyyaml"
-version = "5.4.1"
+version = "6.0"
description = "YAML parser and emitter for Python"
category = "dev"
optional = false
-python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*"
+python-versions = ">=3.6"
[[package]]
name = "s3transfer"
-version = "0.5.0"
+version = "0.5.2"
description = "An Amazon S3 Transfer Manager"
category = "dev"
optional = false
@@ -288,161 +321,181 @@ python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*"
[[package]]
name = "typing-extensions"
-version = "3.10.0.0"
-description = "Backported and Experimental Type Hints for Python 3.5+"
-category = "dev"
+version = "4.2.0"
+description = "Backported and Experimental Type Hints for Python 3.7+"
+category = "main"
optional = false
-python-versions = "*"
+python-versions = ">=3.7"
[[package]]
name = "urllib3"
-version = "1.26.6"
+version = "1.26.9"
description = "HTTP library with thread-safe connection pooling, file post, and more."
category = "dev"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, <4"
[package.extras]
-brotli = ["brotlipy (>=0.6.0)"]
+brotli = ["brotlicffi (>=0.8.0)", "brotli (>=1.0.9)", "brotlipy (>=0.6.0)"]
secure = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "certifi", "ipaddress"]
socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"]
[[package]]
name = "zipp"
-version = "3.5.0"
+version = "3.8.0"
description = "Backport of pathlib-compatible object wrapper for zip files"
-category = "dev"
+category = "main"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.7"
[package.extras]
-docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
-testing = ["pytest (>=4.6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "jaraco.itertools", "func-timeout", "pytest-black (>=0.3.7)", "pytest-mypy"]
+docs = ["sphinx", "jaraco.packaging (>=9)", "rst.linker (>=1.9)"]
+testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "jaraco.itertools", "func-timeout", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)"]
[metadata]
lock-version = "1.1"
-python-versions = "^3.6"
-content-hash = "171039be9df6511d9fe75a2e02db8a0d864bba8857d5c4a024129b1171bf573c"
+python-versions = "^3.7"
+content-hash = "c8ef5194617d4f5db077187eff99d683227498eaa3c20ecfb006816669d01ad8"
[metadata.files]
argcomplete = [
- {file = "argcomplete-1.12.3-py2.py3-none-any.whl", hash = "sha256:291f0beca7fd49ce285d2f10e4c1c77e9460cf823eef2de54df0c0fec88b0d81"},
- {file = "argcomplete-1.12.3.tar.gz", hash = "sha256:2c7dbffd8c045ea534921e63b0be6fe65e88599990d8dc408ac8c542b72a5445"},
+ {file = "argcomplete-2.0.0-py2.py3-none-any.whl", hash = "sha256:cffa11ea77999bb0dd27bb25ff6dc142a6796142f68d45b1a26b11f58724561e"},
+ {file = "argcomplete-2.0.0.tar.gz", hash = "sha256:6372ad78c89d662035101418ae253668445b391755cfe94ea52f1b9d22425b20"},
]
atomicwrites = [
{file = "atomicwrites-1.4.0-py2.py3-none-any.whl", hash = "sha256:6d1784dea7c0c8d4a5172b6c620f40b6e4cbfdf96d783691f2e1302a7b88e197"},
{file = "atomicwrites-1.4.0.tar.gz", hash = "sha256:ae70396ad1a434f9c7046fd2dd196fc04b12f9e91ffb859164193be8b6168a7a"},
]
attrs = [
- {file = "attrs-21.2.0-py2.py3-none-any.whl", hash = "sha256:149e90d6d8ac20db7a955ad60cf0e6881a3f20d37096140088356da6c716b0b1"},
- {file = "attrs-21.2.0.tar.gz", hash = "sha256:ef6aaac3ca6cd92904cdd0d83f629a15f18053ec84e6432106f7a4d04ae4f5fb"},
+ {file = "attrs-21.4.0-py2.py3-none-any.whl", hash = "sha256:2d27e3784d7a565d36ab851fe94887c5eccd6a463168875832a1be79c82828b4"},
+ {file = "attrs-21.4.0.tar.gz", hash = "sha256:626ba8234211db98e869df76230a137c4c40a12d72445c45d5f5b716f076e2fd"},
]
boto3 = [
- {file = "boto3-1.18.21-py3-none-any.whl", hash = "sha256:59b6e8e79b2114e21388288a06a004f2a9378b1e0fc58466a35da8fb74fe2dd8"},
- {file = "boto3-1.18.21.tar.gz", hash = "sha256:00748c760dc30be61c6db4b092718f6a9f8d27c767da0e232695a65adb75cde8"},
+ {file = "boto3-1.21.42-py3-none-any.whl", hash = "sha256:895fb88c69be78f82cfee58a79c97a3ad8d4a2a1209041a411d7d6b9fc5393e4"},
+ {file = "boto3-1.21.42.tar.gz", hash = "sha256:bcb541175a7d190dd919a0af0e807ee6e9d26f135551e741b10d94343f2d7588"},
]
botocore = [
- {file = "botocore-1.21.21-py3-none-any.whl", hash = "sha256:fa5ac13829d24fcdd385e82c3b6d78e22d93f427cca8dac38158cae84a8cc2f5"},
- {file = "botocore-1.21.21.tar.gz", hash = "sha256:12cfe74b0a5c44afb34bdd86c1f8ad74bc2ad9ec168eaed9040ef70cb3db944f"},
+ {file = "botocore-1.24.42-py3-none-any.whl", hash = "sha256:14aee41c8bf59d2dd2d89e8751fa37d3c95dcb92707d1966aa02697e914c1417"},
+ {file = "botocore-1.24.42.tar.gz", hash = "sha256:a2baa9484bbaee96ef312c049b8e360badcab58329e487b57567644a571b5f4a"},
]
c7n = []
click = [
- {file = "click-7.1.2-py2.py3-none-any.whl", hash = "sha256:dacca89f4bfadd5de3d7489b7c8a566eee0d3676333fbb50030263894c38c0dc"},
- {file = "click-7.1.2.tar.gz", hash = "sha256:d2b5255c7c6349bc1bd1e59e08cd12acbbd63ce649f2588755783aa94dfb6b1a"},
+ {file = "click-8.1.2-py3-none-any.whl", hash = "sha256:24e1a4a9ec5bf6299411369b208c1df2188d9eb8d916302fe6bf03faed227f1e"},
+ {file = "click-8.1.2.tar.gz", hash = "sha256:479707fe14d9ec9a0757618b7a100a0ae4c4e236fac5b7f80ca68028141a1a72"},
]
colorama = [
{file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"},
{file = "colorama-0.4.4.tar.gz", hash = "sha256:5941b2b48a20143d2267e95b1c2a7603ce057ee39fd88e7329b0c292aa16869b"},
]
+docutils = [
+ {file = "docutils-0.17.1-py2.py3-none-any.whl", hash = "sha256:cf316c8370a737a022b72b56874f6602acf974a37a9fba42ec2876387549fc61"},
+ {file = "docutils-0.17.1.tar.gz", hash = "sha256:686577d2e4c32380bb50cbb22f575ed742d58168cee37e99117a854bcd88f125"},
+]
importlib-metadata = [
- {file = "importlib_metadata-4.6.4-py3-none-any.whl", hash = "sha256:ed5157fef23a4bc4594615a0dd8eba94b2bb36bf2a343fa3d8bb2fa0a62a99d5"},
- {file = "importlib_metadata-4.6.4.tar.gz", hash = "sha256:7b30a78db2922d78a6f47fb30683156a14f3c6aa5cc23f77cc8967e9ab2d002f"},
+ {file = "importlib_metadata-4.11.3-py3-none-any.whl", hash = "sha256:1208431ca90a8cca1a6b8af391bb53c1a2db74e5d1cef6ddced95d4b2062edc6"},
+ {file = "importlib_metadata-4.11.3.tar.gz", hash = "sha256:ea4c597ebf37142f827b8f39299579e31685c31d3a438b59f469406afd0f2539"},
+]
+importlib-resources = [
+ {file = "importlib_resources-5.7.1-py3-none-any.whl", hash = "sha256:e447dc01619b1e951286f3929be820029d48c75eb25d265c28b92a16548212b8"},
+ {file = "importlib_resources-5.7.1.tar.gz", hash = "sha256:b6062987dfc51f0fcb809187cffbd60f35df7acb4589091f154214af6d0d49d3"},
]
iniconfig = [
{file = "iniconfig-1.1.1-py2.py3-none-any.whl", hash = "sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3"},
{file = "iniconfig-1.1.1.tar.gz", hash = "sha256:bc3af051d7d14b2ee5ef9969666def0cd1a000e121eaea580d4a313df4b37f32"},
]
jmespath = [
- {file = "jmespath-0.10.0-py2.py3-none-any.whl", hash = "sha256:cdf6525904cc597730141d61b36f2e4b8ecc257c420fa2f4549bac2c2d0cb72f"},
- {file = "jmespath-0.10.0.tar.gz", hash = "sha256:b85d0567b8666149a93172712e68920734333c0ce7e89b78b3e987f71e5ed4f9"},
+ {file = "jmespath-1.0.0-py3-none-any.whl", hash = "sha256:e8dcd576ed616f14ec02eed0005c85973b5890083313860136657e24784e4c04"},
+ {file = "jmespath-1.0.0.tar.gz", hash = "sha256:a490e280edd1f57d6de88636992d05b71e97d69a26a19f058ecf7d304474bf5e"},
]
jsonschema = [
- {file = "jsonschema-3.2.0-py2.py3-none-any.whl", hash = "sha256:4e5b3cf8216f577bee9ce139cbe72eca3ea4f292ec60928ff24758ce626cd163"},
- {file = "jsonschema-3.2.0.tar.gz", hash = "sha256:c8a85b28d377cc7737e46e2d9f2b4f44ee3c0e1deac6bf46ddefc7187d30797a"},
+ {file = "jsonschema-4.4.0-py3-none-any.whl", hash = "sha256:77281a1f71684953ee8b3d488371b162419767973789272434bbc3f29d9c8823"},
+ {file = "jsonschema-4.4.0.tar.gz", hash = "sha256:636694eb41b3535ed608fe04129f26542b59ed99808b4f688aa32dcf55317a83"},
]
packaging = [
- {file = "packaging-21.0-py3-none-any.whl", hash = "sha256:c86254f9220d55e31cc94d69bade760f0847da8000def4dfe1c6b872fd14ff14"},
- {file = "packaging-21.0.tar.gz", hash = "sha256:7dc96269f53a4ccec5c0670940a4281106dd0bb343f47b7471f779df49c2fbe7"},
+ {file = "packaging-21.3-py3-none-any.whl", hash = "sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522"},
+ {file = "packaging-21.3.tar.gz", hash = "sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb"},
]
pluggy = [
- {file = "pluggy-0.13.1-py2.py3-none-any.whl", hash = "sha256:966c145cd83c96502c3c3868f50408687b38434af77734af1e9ca461a4081d2d"},
- {file = "pluggy-0.13.1.tar.gz", hash = "sha256:15b2acde666561e1298d71b523007ed7364de07029219b604cf808bfa1c765b0"},
+ {file = "pluggy-1.0.0-py2.py3-none-any.whl", hash = "sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3"},
+ {file = "pluggy-1.0.0.tar.gz", hash = "sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159"},
]
py = [
- {file = "py-1.10.0-py2.py3-none-any.whl", hash = "sha256:3b80836aa6d1feeaa108e046da6423ab8f6ceda6468545ae8d02d9d58d18818a"},
- {file = "py-1.10.0.tar.gz", hash = "sha256:21b81bda15b66ef5e1a777a21c4dcd9c20ad3efd0b3f817e7a809035269e1bd3"},
+ {file = "py-1.11.0-py2.py3-none-any.whl", hash = "sha256:607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378"},
+ {file = "py-1.11.0.tar.gz", hash = "sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719"},
]
pyparsing = [
- {file = "pyparsing-2.4.7-py2.py3-none-any.whl", hash = "sha256:ef9d7589ef3c200abe66653d3f1ab1033c3c419ae9b9bdb1240a85b024efc88b"},
- {file = "pyparsing-2.4.7.tar.gz", hash = "sha256:c203ec8783bf771a155b207279b9bccb8dea02d8f0c9e5f8ead507bc3246ecc1"},
+ {file = "pyparsing-3.0.8-py3-none-any.whl", hash = "sha256:ef7b523f6356f763771559412c0d7134753f037822dad1b16945b7b846f7ad06"},
+ {file = "pyparsing-3.0.8.tar.gz", hash = "sha256:7bf433498c016c4314268d95df76c81b842a4cb2b276fa3312cfb1e1d85f6954"},
]
pyrsistent = [
- {file = "pyrsistent-0.18.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:f4c8cabb46ff8e5d61f56a037974228e978f26bfefce4f61a4b1ac0ba7a2ab72"},
- {file = "pyrsistent-0.18.0-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:da6e5e818d18459fa46fac0a4a4e543507fe1110e808101277c5a2b5bab0cd2d"},
- {file = "pyrsistent-0.18.0-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:5e4395bbf841693eaebaa5bb5c8f5cdbb1d139e07c975c682ec4e4f8126e03d2"},
- {file = "pyrsistent-0.18.0-cp36-cp36m-win32.whl", hash = "sha256:527be2bfa8dc80f6f8ddd65242ba476a6c4fb4e3aedbf281dfbac1b1ed4165b1"},
- {file = "pyrsistent-0.18.0-cp36-cp36m-win_amd64.whl", hash = "sha256:2aaf19dc8ce517a8653746d98e962ef480ff34b6bc563fc067be6401ffb457c7"},
- {file = "pyrsistent-0.18.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:58a70d93fb79dc585b21f9d72487b929a6fe58da0754fa4cb9f279bb92369396"},
- {file = "pyrsistent-0.18.0-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:4916c10896721e472ee12c95cdc2891ce5890898d2f9907b1b4ae0f53588b710"},
- {file = "pyrsistent-0.18.0-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:73ff61b1411e3fb0ba144b8f08d6749749775fe89688093e1efef9839d2dcc35"},
- {file = "pyrsistent-0.18.0-cp37-cp37m-win32.whl", hash = "sha256:b29b869cf58412ca5738d23691e96d8aff535e17390128a1a52717c9a109da4f"},
- {file = "pyrsistent-0.18.0-cp37-cp37m-win_amd64.whl", hash = "sha256:097b96f129dd36a8c9e33594e7ebb151b1515eb52cceb08474c10a5479e799f2"},
- {file = "pyrsistent-0.18.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:772e94c2c6864f2cd2ffbe58bb3bdefbe2a32afa0acb1a77e472aac831f83427"},
- {file = "pyrsistent-0.18.0-cp38-cp38-manylinux1_i686.whl", hash = "sha256:c1a9ff320fa699337e05edcaae79ef8c2880b52720bc031b219e5b5008ebbdef"},
- {file = "pyrsistent-0.18.0-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:cd3caef37a415fd0dae6148a1b6957a8c5f275a62cca02e18474608cb263640c"},
- {file = "pyrsistent-0.18.0-cp38-cp38-win32.whl", hash = "sha256:e79d94ca58fcafef6395f6352383fa1a76922268fa02caa2272fff501c2fdc78"},
- {file = "pyrsistent-0.18.0-cp38-cp38-win_amd64.whl", hash = "sha256:a0c772d791c38bbc77be659af29bb14c38ced151433592e326361610250c605b"},
- {file = "pyrsistent-0.18.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d5ec194c9c573aafaceebf05fc400656722793dac57f254cd4741f3c27ae57b4"},
- {file = "pyrsistent-0.18.0-cp39-cp39-manylinux1_i686.whl", hash = "sha256:6b5eed00e597b5b5773b4ca30bd48a5774ef1e96f2a45d105db5b4ebb4bca680"},
- {file = "pyrsistent-0.18.0-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:48578680353f41dca1ca3dc48629fb77dfc745128b56fc01096b2530c13fd426"},
- {file = "pyrsistent-0.18.0-cp39-cp39-win32.whl", hash = "sha256:f3ef98d7b76da5eb19c37fda834d50262ff9167c65658d1d8f974d2e4d90676b"},
- {file = "pyrsistent-0.18.0-cp39-cp39-win_amd64.whl", hash = "sha256:404e1f1d254d314d55adb8d87f4f465c8693d6f902f67eb6ef5b4526dc58e6ea"},
- {file = "pyrsistent-0.18.0.tar.gz", hash = "sha256:773c781216f8c2900b42a7b638d5b517bb134ae1acbebe4d1e8f1f41ea60eb4b"},
+ {file = "pyrsistent-0.18.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:df46c854f490f81210870e509818b729db4488e1f30f2a1ce1698b2295a878d1"},
+ {file = "pyrsistent-0.18.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d45866ececf4a5fff8742c25722da6d4c9e180daa7b405dc0a2a2790d668c26"},
+ {file = "pyrsistent-0.18.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4ed6784ceac462a7d6fcb7e9b663e93b9a6fb373b7f43594f9ff68875788e01e"},
+ {file = "pyrsistent-0.18.1-cp310-cp310-win32.whl", hash = "sha256:e4f3149fd5eb9b285d6bfb54d2e5173f6a116fe19172686797c056672689daf6"},
+ {file = "pyrsistent-0.18.1-cp310-cp310-win_amd64.whl", hash = "sha256:636ce2dc235046ccd3d8c56a7ad54e99d5c1cd0ef07d9ae847306c91d11b5fec"},
+ {file = "pyrsistent-0.18.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:e92a52c166426efbe0d1ec1332ee9119b6d32fc1f0bbfd55d5c1088070e7fc1b"},
+ {file = "pyrsistent-0.18.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d7a096646eab884bf8bed965bad63ea327e0d0c38989fc83c5ea7b8a87037bfc"},
+ {file = "pyrsistent-0.18.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cdfd2c361b8a8e5d9499b9082b501c452ade8bbf42aef97ea04854f4a3f43b22"},
+ {file = "pyrsistent-0.18.1-cp37-cp37m-win32.whl", hash = "sha256:7ec335fc998faa4febe75cc5268a9eac0478b3f681602c1f27befaf2a1abe1d8"},
+ {file = "pyrsistent-0.18.1-cp37-cp37m-win_amd64.whl", hash = "sha256:6455fc599df93d1f60e1c5c4fe471499f08d190d57eca040c0ea182301321286"},
+ {file = "pyrsistent-0.18.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:fd8da6d0124efa2f67d86fa70c851022f87c98e205f0594e1fae044e7119a5a6"},
+ {file = "pyrsistent-0.18.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7bfe2388663fd18bd8ce7db2c91c7400bf3e1a9e8bd7d63bf7e77d39051b85ec"},
+ {file = "pyrsistent-0.18.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0e3e1fcc45199df76053026a51cc59ab2ea3fc7c094c6627e93b7b44cdae2c8c"},
+ {file = "pyrsistent-0.18.1-cp38-cp38-win32.whl", hash = "sha256:b568f35ad53a7b07ed9b1b2bae09eb15cdd671a5ba5d2c66caee40dbf91c68ca"},
+ {file = "pyrsistent-0.18.1-cp38-cp38-win_amd64.whl", hash = "sha256:d1b96547410f76078eaf66d282ddca2e4baae8964364abb4f4dcdde855cd123a"},
+ {file = "pyrsistent-0.18.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:f87cc2863ef33c709e237d4b5f4502a62a00fab450c9e020892e8e2ede5847f5"},
+ {file = "pyrsistent-0.18.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6bc66318fb7ee012071b2792024564973ecc80e9522842eb4e17743604b5e045"},
+ {file = "pyrsistent-0.18.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:914474c9f1d93080338ace89cb2acee74f4f666fb0424896fcfb8d86058bf17c"},
+ {file = "pyrsistent-0.18.1-cp39-cp39-win32.whl", hash = "sha256:1b34eedd6812bf4d33814fca1b66005805d3640ce53140ab8bbb1e2651b0d9bc"},
+ {file = "pyrsistent-0.18.1-cp39-cp39-win_amd64.whl", hash = "sha256:e24a828f57e0c337c8d8bb9f6b12f09dfdf0273da25fda9e314f0b684b415a07"},
+ {file = "pyrsistent-0.18.1.tar.gz", hash = "sha256:d4d61f8b993a7255ba714df3aca52700f8125289f84f704cf80916517c46eb96"},
]
pytest = [
- {file = "pytest-6.2.4-py3-none-any.whl", hash = "sha256:91ef2131a9bd6be8f76f1f08eac5c5317221d6ad1e143ae03894b862e8976890"},
- {file = "pytest-6.2.4.tar.gz", hash = "sha256:50bcad0a0b9c5a72c8e4e7c9855a3ad496ca6a881a3641b4260605450772c54b"},
+ {file = "pytest-6.2.5-py3-none-any.whl", hash = "sha256:7310f8d27bc79ced999e760ca304d69f6ba6c6649c0b60fb0e04a4a77cacc134"},
+ {file = "pytest-6.2.5.tar.gz", hash = "sha256:131b36680866a76e6781d13f101efb86cf674ebb9762eb70d3082b6f29889e89"},
]
python-dateutil = [
{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"},
]
pyyaml = [
- {file = "PyYAML-5.4.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:3b2b1824fe7112845700f815ff6a489360226a5609b96ec2190a45e62a9fc922"},
- {file = "PyYAML-5.4.1-cp27-cp27m-win32.whl", hash = "sha256:129def1b7c1bf22faffd67b8f3724645203b79d8f4cc81f674654d9902cb4393"},
- {file = "PyYAML-5.4.1-cp27-cp27m-win_amd64.whl", hash = "sha256:4465124ef1b18d9ace298060f4eccc64b0850899ac4ac53294547536533800c8"},
- {file = "PyYAML-5.4.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:bb4191dfc9306777bc594117aee052446b3fa88737cd13b7188d0e7aa8162185"},
- {file = "PyYAML-5.4.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:6c78645d400265a062508ae399b60b8c167bf003db364ecb26dcab2bda048253"},
- {file = "PyYAML-5.4.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:4e0583d24c881e14342eaf4ec5fbc97f934b999a6828693a99157fde912540cc"},
- {file = "PyYAML-5.4.1-cp36-cp36m-win32.whl", hash = "sha256:3bd0e463264cf257d1ffd2e40223b197271046d09dadf73a0fe82b9c1fc385a5"},
- {file = "PyYAML-5.4.1-cp36-cp36m-win_amd64.whl", hash = "sha256:e4fac90784481d221a8e4b1162afa7c47ed953be40d31ab4629ae917510051df"},
- {file = "PyYAML-5.4.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:5accb17103e43963b80e6f837831f38d314a0495500067cb25afab2e8d7a4018"},
- {file = "PyYAML-5.4.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:e1d4970ea66be07ae37a3c2e48b5ec63f7ba6804bdddfdbd3cfd954d25a82e63"},
- {file = "PyYAML-5.4.1-cp37-cp37m-win32.whl", hash = "sha256:dd5de0646207f053eb0d6c74ae45ba98c3395a571a2891858e87df7c9b9bd51b"},
- {file = "PyYAML-5.4.1-cp37-cp37m-win_amd64.whl", hash = "sha256:08682f6b72c722394747bddaf0aa62277e02557c0fd1c42cb853016a38f8dedf"},
- {file = "PyYAML-5.4.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d2d9808ea7b4af864f35ea216be506ecec180628aced0704e34aca0b040ffe46"},
- {file = "PyYAML-5.4.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:8c1be557ee92a20f184922c7b6424e8ab6691788e6d86137c5d93c1a6ec1b8fb"},
- {file = "PyYAML-5.4.1-cp38-cp38-win32.whl", hash = "sha256:fa5ae20527d8e831e8230cbffd9f8fe952815b2b7dae6ffec25318803a7528fc"},
- {file = "PyYAML-5.4.1-cp38-cp38-win_amd64.whl", hash = "sha256:0f5f5786c0e09baddcd8b4b45f20a7b5d61a7e7e99846e3c799b05c7c53fa696"},
- {file = "PyYAML-5.4.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:294db365efa064d00b8d1ef65d8ea2c3426ac366c0c4368d930bf1c5fb497f77"},
- {file = "PyYAML-5.4.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:74c1485f7707cf707a7aef42ef6322b8f97921bd89be2ab6317fd782c2d53183"},
- {file = "PyYAML-5.4.1-cp39-cp39-win32.whl", hash = "sha256:49d4cdd9065b9b6e206d0595fee27a96b5dd22618e7520c33204a4a3239d5b10"},
- {file = "PyYAML-5.4.1-cp39-cp39-win_amd64.whl", hash = "sha256:c20cfa2d49991c8b4147af39859b167664f2ad4561704ee74c1de03318e898db"},
- {file = "PyYAML-5.4.1.tar.gz", hash = "sha256:607774cbba28732bfa802b54baa7484215f530991055bb562efbed5b2f20a45e"},
+ {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"},
+ {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a80a78046a72361de73f8f395f1f1e49f956c6be882eed58505a15f3e430962b"},
+ {file = "PyYAML-6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f84fbc98b019fef2ee9a1cb3ce93e3187a6df0b2538a651bfb890254ba9f90b5"},
+ {file = "PyYAML-6.0-cp310-cp310-win32.whl", hash = "sha256:2cd5df3de48857ed0544b34e2d40e9fac445930039f3cfe4bcc592a1f836d513"},
+ {file = "PyYAML-6.0-cp310-cp310-win_amd64.whl", hash = "sha256:daf496c58a8c52083df09b80c860005194014c3698698d1a57cbcfa182142a3a"},
+ {file = "PyYAML-6.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:897b80890765f037df3403d22bab41627ca8811ae55e9a722fd0392850ec4d86"},
+ {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50602afada6d6cbfad699b0c7bb50d5ccffa7e46a3d738092afddc1f9758427f"},
+ {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:48c346915c114f5fdb3ead70312bd042a953a8ce5c7106d5bfb1a5254e47da92"},
+ {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:98c4d36e99714e55cfbaaee6dd5badbc9a1ec339ebfc3b1f52e293aee6bb71a4"},
+ {file = "PyYAML-6.0-cp36-cp36m-win32.whl", hash = "sha256:0283c35a6a9fbf047493e3a0ce8d79ef5030852c51e9d911a27badfde0605293"},
+ {file = "PyYAML-6.0-cp36-cp36m-win_amd64.whl", hash = "sha256:07751360502caac1c067a8132d150cf3d61339af5691fe9e87803040dbc5db57"},
+ {file = "PyYAML-6.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:819b3830a1543db06c4d4b865e70ded25be52a2e0631ccd2f6a47a2822f2fd7c"},
+ {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:473f9edb243cb1935ab5a084eb238d842fb8f404ed2193a915d1784b5a6b5fc0"},
+ {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0ce82d761c532fe4ec3f87fc45688bdd3a4c1dc5e0b4a19814b9009a29baefd4"},
+ {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:231710d57adfd809ef5d34183b8ed1eeae3f76459c18fb4a0b373ad56bedcdd9"},
+ {file = "PyYAML-6.0-cp37-cp37m-win32.whl", hash = "sha256:c5687b8d43cf58545ade1fe3e055f70eac7a5a1a0bf42824308d868289a95737"},
+ {file = "PyYAML-6.0-cp37-cp37m-win_amd64.whl", hash = "sha256:d15a181d1ecd0d4270dc32edb46f7cb7733c7c508857278d3d378d14d606db2d"},
+ {file = "PyYAML-6.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0b4624f379dab24d3725ffde76559cff63d9ec94e1736b556dacdfebe5ab6d4b"},
+ {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:213c60cd50106436cc818accf5baa1aba61c0189ff610f64f4a3e8c6726218ba"},
+ {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9fa600030013c4de8165339db93d182b9431076eb98eb40ee068700c9c813e34"},
+ {file = "PyYAML-6.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:277a0ef2981ca40581a47093e9e2d13b3f1fbbeffae064c1d21bfceba2030287"},
+ {file = "PyYAML-6.0-cp38-cp38-win32.whl", hash = "sha256:d4eccecf9adf6fbcc6861a38015c2a64f38b9d94838ac1810a9023a0609e1b78"},
+ {file = "PyYAML-6.0-cp38-cp38-win_amd64.whl", hash = "sha256:1e4747bc279b4f613a09eb64bba2ba602d8a6664c6ce6396a4d0cd413a50ce07"},
+ {file = "PyYAML-6.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:055d937d65826939cb044fc8c9b08889e8c743fdc6a32b33e2390f66013e449b"},
+ {file = "PyYAML-6.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e61ceaab6f49fb8bdfaa0f92c4b57bcfbea54c09277b1b4f7ac376bfb7a7c174"},
+ {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d67d839ede4ed1b28a4e8909735fc992a923cdb84e618544973d7dfc71540803"},
+ {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cba8c411ef271aa037d7357a2bc8f9ee8b58b9965831d9e51baf703280dc73d3"},
+ {file = "PyYAML-6.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:40527857252b61eacd1d9af500c3337ba8deb8fc298940291486c465c8b46ec0"},
+ {file = "PyYAML-6.0-cp39-cp39-win32.whl", hash = "sha256:b5b9eccad747aabaaffbc6064800670f0c297e52c12754eb1d976c57e4f74dcb"},
+ {file = "PyYAML-6.0-cp39-cp39-win_amd64.whl", hash = "sha256:b3d267842bf12586ba6c734f89d1f5b871df0273157918b0ccefa29deb05c21c"},
+ {file = "PyYAML-6.0.tar.gz", hash = "sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2"},
]
s3transfer = [
- {file = "s3transfer-0.5.0-py3-none-any.whl", hash = "sha256:9c1dc369814391a6bda20ebbf4b70a0f34630592c9aa520856bf384916af2803"},
- {file = "s3transfer-0.5.0.tar.gz", hash = "sha256:50ed823e1dc5868ad40c8dc92072f757aa0e653a192845c94a3b676f4a62da4c"},
+ {file = "s3transfer-0.5.2-py3-none-any.whl", hash = "sha256:7a6f4c4d1fdb9a2b640244008e142cbc2cd3ae34b386584ef044dd0f27101971"},
+ {file = "s3transfer-0.5.2.tar.gz", hash = "sha256:95c58c194ce657a5f4fb0b9e60a84968c808888aed628cd98ab8771fe1db98ed"},
]
six = [
{file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"},
@@ -457,15 +510,14 @@ toml = [
{file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"},
]
typing-extensions = [
- {file = "typing_extensions-3.10.0.0-py2-none-any.whl", hash = "sha256:0ac0f89795dd19de6b97debb0c6af1c70987fd80a2d62d1958f7e56fcc31b497"},
- {file = "typing_extensions-3.10.0.0-py3-none-any.whl", hash = "sha256:779383f6086d90c99ae41cf0ff39aac8a7937a9283ce0a414e5dd782f4c94a84"},
- {file = "typing_extensions-3.10.0.0.tar.gz", hash = "sha256:50b6f157849174217d0656f99dc82fe932884fb250826c18350e159ec6cdf342"},
+ {file = "typing_extensions-4.2.0-py3-none-any.whl", hash = "sha256:6657594ee297170d19f67d55c05852a874e7eb634f4f753dbd667855e07c1708"},
+ {file = "typing_extensions-4.2.0.tar.gz", hash = "sha256:f1c24655a0da0d1b67f07e17a5e6b2a105894e6824b92096378bb3668ef02376"},
]
urllib3 = [
- {file = "urllib3-1.26.6-py2.py3-none-any.whl", hash = "sha256:39fb8672126159acb139a7718dd10806104dec1e2f0f6c88aab05d17df10c8d4"},
- {file = "urllib3-1.26.6.tar.gz", hash = "sha256:f57b4c16c62fa2760b7e3d97c35b255512fb6b59a259730f36ba32ce9f8e342f"},
+ {file = "urllib3-1.26.9-py2.py3-none-any.whl", hash = "sha256:44ece4d53fb1706f667c9bd1c648f5469a2ec925fcf3a776667042d645472c14"},
+ {file = "urllib3-1.26.9.tar.gz", hash = "sha256:aabaf16477806a5e1dd19aa41f8c2b7950dd3c746362d7e3223dbe6de6ac448e"},
]
zipp = [
- {file = "zipp-3.5.0-py3-none-any.whl", hash = "sha256:957cfda87797e389580cb8b9e3870841ca991e2125350677b2ca83a0e99390a3"},
- {file = "zipp-3.5.0.tar.gz", hash = "sha256:f5812b1e007e48cff63449a5e9f4e7ebea716b4111f9c4f9a645f91d579bf0c4"},
+ {file = "zipp-3.8.0-py3-none-any.whl", hash = "sha256:c4f6e5bbf48e74f7a38e7cc5b0480ff42b0ae5178957d564d18932525d5cf099"},
+ {file = "zipp-3.8.0.tar.gz", hash = "sha256:56bf8aadb83c24db6c4b577e13de374ccfb67da2078beba1d037c17980bf43ad"},
]
diff --git a/tools/c7n_org/pyproject.toml b/tools/c7n_org/pyproject.toml
index cde3f9211d7..0f2cc0f1c13 100644
--- a/tools/c7n_org/pyproject.toml
+++ b/tools/c7n_org/pyproject.toml
@@ -1,6 +1,6 @@
[tool.poetry]
name = "c7n_org"
-version = "0.6.13"
+version = "0.6.15"
description = "Cloud Custodian - Parallel Execution"
readme = "README.md"
homepage = "https://cloudcustodian.io"
@@ -18,8 +18,8 @@ classifiers=[
c7n-org = 'c7n_org.cli:cli'
[tool.poetry.dependencies]
-python = "^3.6"
-click = "^7.0"
+python = "^3.7"
+click = "^8.0"
[tool.poetry.dev-dependencies]
c7n = {path = "../..", develop = true}
diff --git a/tools/c7n_org/requirements.txt b/tools/c7n_org/requirements.txt
index da177b7c7b2..7ef5dc7fec9 100644
--- a/tools/c7n_org/requirements.txt
+++ b/tools/c7n_org/requirements.txt
@@ -1 +1,5 @@
-click==7.1.2; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.5.0")
+click==8.1.2; python_version >= "3.7"
+colorama==0.4.4; python_version >= "3.7" and python_full_version < "3.0.0" and platform_system == "Windows" or platform_system == "Windows" and python_version >= "3.7" and python_full_version >= "3.5.0"
+importlib-metadata==4.11.3; python_version < "3.8" and python_version >= "3.7"
+typing-extensions==4.2.0; python_version < "3.8" and python_version >= "3.7"
+zipp==3.8.0; python_version < "3.8" and python_version >= "3.7"
diff --git a/tools/c7n_org/setup.py b/tools/c7n_org/setup.py
index acc17e30b39..458aa072908 100644
--- a/tools/c7n_org/setup.py
+++ b/tools/c7n_org/setup.py
@@ -10,31 +10,33 @@
{'': ['*']}
install_requires = \
-['argcomplete (>=1.12.3,<2.0.0)',
- 'attrs (>=21.2.0,<22.0.0)',
- 'boto3 (>=1.18.21,<2.0.0)',
- 'botocore (>=1.21.21,<2.0.0)',
- 'c7n (>=0.9.14,<0.10.0)',
- 'click>=7.0,<8.0',
- 'importlib-metadata (>=4.6.4,<5.0.0)',
- 'jmespath (>=0.10.0,<0.11.0)',
- 'jsonschema (>=3.2.0,<4.0.0)',
- 'pyrsistent (>=0.18.0,<0.19.0)',
+['argcomplete (>=2.0.0,<3.0.0)',
+ 'attrs (>=21.4.0,<22.0.0)',
+ 'boto3 (>=1.21.42,<2.0.0)',
+ 'botocore (>=1.24.42,<2.0.0)',
+ 'c7n (>=0.9.16,<0.10.0)',
+ 'click>=8.0,<9.0',
+ 'docutils (>=0.17.1,<0.18.0)',
+ 'importlib-metadata (>=4.11.3,<5.0.0)',
+ 'importlib-resources (>=5.7.1,<6.0.0)',
+ 'jmespath (>=1.0.0,<2.0.0)',
+ 'jsonschema (>=4.4.0,<5.0.0)',
+ 'pyrsistent (>=0.18.1,<0.19.0)',
'python-dateutil (>=2.8.2,<3.0.0)',
- 'pyyaml (>=5.4.1,<6.0.0)',
- 's3transfer (>=0.5.0,<0.6.0)',
+ 'pyyaml (>=6.0,<7.0)',
+ 's3transfer (>=0.5.2,<0.6.0)',
'six (>=1.16.0,<2.0.0)',
'tabulate (>=0.8.9,<0.9.0)',
- 'typing-extensions (>=3.10.0.0,<4.0.0.0)',
- 'urllib3 (>=1.26.6,<2.0.0)',
- 'zipp (>=3.5.0,<4.0.0)']
+ 'typing-extensions (>=4.2.0,<5.0.0)',
+ 'urllib3 (>=1.26.9,<2.0.0)',
+ 'zipp (>=3.8.0,<4.0.0)']
entry_points = \
{'console_scripts': ['c7n-org = c7n_org.cli:cli']}
setup_kwargs = {
'name': 'c7n-org',
- 'version': '0.6.13',
+ 'version': '0.6.15',
'description': 'Cloud Custodian - Parallel Execution',
'license': 'Apache-2.0',
'classifiers': [
@@ -42,7 +44,7 @@
'Topic :: System :: Systems Administration',
'Topic :: System :: Distributed Computing'
],
- 'long_description': '# c7n-org: Multi Account Custodian Execution\n\n[//]: # ( !!! IMPORTANT !!! )\n[//]: # (This file is moved during document generation.)\n[//]: # (Only edit the original document at ./tools/c7n_org/README.md)\n\nc7n-org is a tool to run custodian against multiple AWS accounts,\nAzure subscriptions, or GCP projects in parallel.\n\n## Installation\n\n```shell\npip install c7n-org\n```\n\nc7n-org has 3 run modes:\n\n```shell\nUsage: c7n-org [OPTIONS] COMMAND [ARGS]...\n\n custodian organization multi-account runner.\n\nOptions:\n --help Show this message and exit.\n\nCommands:\n report report on an AWS cross account policy execution\n run run a custodian policy across accounts (AWS, Azure, GCP)\n run-script run a script across AWS accounts\n```\n\nIn order to run c7n-org against multiple accounts, a config file must\nfirst be created containing pertinent information about the accounts:\n\n\nExample AWS Config File:\n\n```yaml\naccounts:\n- account_id: \'123123123123\'\n name: account-1\n regions:\n - us-east-1\n - us-west-2\n role: arn:aws:iam::123123123123:role/CloudCustodian\n vars:\n charge_code: xyz\n tags:\n - type:prod\n - division:some division\n - partition:us\n - scope:pci\n...\n```\n\nExample Azure Config File:\n\n```yaml\nsubscriptions:\n- name: Subscription-1\n subscription_id: a1b2c3d4-e5f6-g7h8i9...\n- name: Subscription-2\n subscription_id: 1z2y3x4w-5v6u-7t8s9r...\n```\n\nExample GCP Config File:\n\n```yaml\nprojects:\n- name: app-dev\n project_id: app-203501\n tags:\n - label:env:dev \n- name: app-prod\n project_id: app-1291\n tags:\n - label:env:dev\n\n```\n\n### Config File Generation\n\nWe also distribute scripts to generate the necessary config file in the `scripts` folder.\n\n**Note** Currently these are distributed only via git, per\nhttps://github.com/cloud-custodian/cloud-custodian/issues/2420 we\'ll\nbe looking to incorporate them into a new c7n-org subcommand.\n\n- For **AWS**, the script `orgaccounts.py` generates a config file\n from the AWS Organizations API\n\n- For **Azure**, the script `azuresubs.py` generates a config file\n from the Azure Resource Management API\n\n - Please see the [Additional Azure Instructions](#Additional-Azure-Instructions)\n - for initial setup and other important info\n\n- For **GCP**, the script `gcpprojects.py` generates a config file from\n the GCP Resource Management API\n\n\n```shell\npython orgaccounts.py -f accounts.yml\n```\n```shell\npython azuresubs.py -f subscriptions.yml\n```\n```shell\npython gcpprojects.py -f projects.yml\n```\n\n## Running a Policy with c7n-org\n\nTo run a policy, the following arguments must be passed in:\n\n```shell\n-c | accounts|projects|subscriptions config file\n-s | output directory\n-u | policy\n```\n\n\n```shell\nc7n-org run -c accounts.yml -s output -u test.yml --dryrun\n```\n\nAfter running the above command, the following folder structure will be created:\n\n```\noutput\n |_ account-1\n |_ us-east-1\n |_ policy-name\n |_ resources.json\n |_ custodian-run.log\n |_ us-west-2\n |_ policy-name\n |_ resources.json\n |_ custodian-run.log\n |- account-2\n...\n```\n\nUse `c7n-org report` to generate a csv report from the output directory.\n\n## Selecting accounts, regions, policies for execution\n\nYou can filter the accounts to be run against by either passing the\naccount name or id via the `-a` flag, which can be specified multiple\ntimes, or alternatively with comma separated values.\n\nGroups of accounts can also be selected for execution by specifying\nthe `-t` tag filter. Account tags are specified in the config\nfile. ie given the above accounts config file you can specify all prod\naccounts with `-t type:prod`. you can specify the -t flag multiple\ntimes or use a comma separated list.\n\nYou can specify which policies to use for execution by either\nspecifying `-p` or selecting groups of policies via their tags with\n`-l`, both options support being specified multiple times or using\ncomma separated values.\n\nBy default in aws, c7n-org will execute in parallel across regions,\nthe \'-r\' flag can be specified multiple times, and defaults to\n(us-east-1, us-west-2). a special value of `all` will execute across\nall regions.\n\n\nSee `c7n-org run --help` for more information.\n\n## Defining and using variables\n\nEach account/subscription/project configuration in the config file can\nalso define a variables section `vars` that can be used in policies\'\ndefinitions and are interpolated at execution time. These are in\naddition to the default runtime variables custodian provides like\n`account_id`, `now`, and `region`.\n\nExample of defining in c7n-org config file:\n\n```yaml\naccounts:\n- account_id: \'123123123123\'\n name: account-1\n role: arn:aws:iam::123123123123:role/CloudCustodian\n vars:\n charge_code: xyz\n```\n\nExample of using in a policy file:\n\n```yaml\npolicies:\n - name: ec2-check-tag\n resource: aws.ec2\n filters:\n - "tag:CostCenter": "{charge_code}"\n```\n\n**Note** Variable interpolation is sensitive to proper quoting and spacing,\ni.e., `{ charge_code }` would be invalid due to the extra white space. Additionally,\nyaml parsing can transform a value like `{charge_code}` to null, unless it\'s quoted\nin strings like the above example. Values that do interpolation into other content\ndon\'t require quoting, i.e., "my_{charge_code}".\n\n## Other commands\n\nc7n-org also supports running arbitrary scripts against accounts via the run-script command.\nFor AWS the standard AWS SDK credential information is exported into the process environment before executing.\nFor Azure and GCP, only the environment variables `AZURE_SUBSCRIPTION_ID` and `PROJECT_ID` are exported(in addition\nof the system env variables).\n\nc7n-org also supports generating reports for a given policy execution\nacross accounts via the `c7n-org report` subcommand.\n\n## Additional Azure Instructions\n\nIf you\'re using an Azure Service Principal for executing c7n-org\nyou\'ll need to ensure that the principal has access to multiple\nsubscriptions.\n\nFor instructions on creating a service principal and granting access\nacross subscriptions, visit the [Azure authentication docs\npage](https://cloudcustodian.io/docs/azure/authentication.html).\n',
+ 'long_description': '# c7n-org: Multi Account Custodian Execution\n\n% [comment]: # ( !!! IMPORTANT !!! )\n% [comment]: # (This file is moved during document generation.)\n% [comment]: # (Only edit the original document at ./tools/c7n_org/README.md)\n\nc7n-org is a tool to run custodian against multiple AWS accounts,\nAzure subscriptions, or GCP projects in parallel.\n\n## Installation\n\n```shell\npip install c7n-org\n```\n\nc7n-org has 3 run modes:\n\n```shell\nUsage: c7n-org [OPTIONS] COMMAND [ARGS]...\n\n custodian organization multi-account runner.\n\nOptions:\n --help Show this message and exit.\n\nCommands:\n report report on an AWS cross account policy execution\n run run a custodian policy across accounts (AWS, Azure, GCP)\n run-script run a script across AWS accounts\n```\n\nIn order to run c7n-org against multiple accounts, a config file must\nfirst be created containing pertinent information about the accounts:\n\n\nExample AWS Config File:\n\n```yaml\naccounts:\n- account_id: \'123123123123\'\n name: account-1\n regions:\n - us-east-1\n - us-west-2\n role: arn:aws:iam::123123123123:role/CloudCustodian\n vars:\n charge_code: xyz\n tags:\n - type:prod\n - division:some division\n - partition:us\n - scope:pci\n...\n```\n\nExample Azure Config File:\n\n```yaml\nsubscriptions:\n- name: Subscription-1\n subscription_id: a1b2c3d4-e5f6-g7h8i9...\n- name: Subscription-2\n subscription_id: 1z2y3x4w-5v6u-7t8s9r...\n```\n\nExample GCP Config File:\n\n```yaml\nprojects:\n- name: app-dev\n project_id: app-203501\n tags:\n - label:env:dev \n- name: app-prod\n project_id: app-1291\n tags:\n - label:env:dev\n\n```\n\n### Config File Generation\n\nWe also distribute scripts to generate the necessary config file in the `scripts` folder.\n\n**Note** Currently these are distributed only via git, per\nhttps://github.com/cloud-custodian/cloud-custodian/issues/2420 we\'ll\nbe looking to incorporate them into a new c7n-org subcommand.\n\n- For **AWS**, the script `orgaccounts.py` generates a config file\n from the AWS Organizations API\n\n- For **Azure**, the script `azuresubs.py` generates a config file\n from the Azure Resource Management API\n\n - Please see the [Additional Azure Instructions](#Additional-Azure-Instructions)\n - for initial setup and other important info\n\n- For **GCP**, the script `gcpprojects.py` generates a config file from\n the GCP Resource Management API\n\n\n```shell\npython orgaccounts.py -f accounts.yml\n```\n```shell\npython azuresubs.py -f subscriptions.yml\n```\n```shell\npython gcpprojects.py -f projects.yml\n```\n\n## Running a Policy with c7n-org\n\nTo run a policy, the following arguments must be passed in:\n\n```shell\n-c | accounts|projects|subscriptions config file\n-s | output directory\n-u | policy\n```\n\n\n```shell\nc7n-org run -c accounts.yml -s output -u test.yml --dryrun\n```\n\nAfter running the above command, the following folder structure will be created:\n\n```\noutput\n |_ account-1\n |_ us-east-1\n |_ policy-name\n |_ resources.json\n |_ custodian-run.log\n |_ us-west-2\n |_ policy-name\n |_ resources.json\n |_ custodian-run.log\n |- account-2\n...\n```\n\nUse `c7n-org report` to generate a csv report from the output directory.\n\n## Selecting accounts, regions, policies for execution\n\nYou can filter the accounts to be run against by either passing the\naccount name or id via the `-a` flag, which can be specified multiple\ntimes, or alternatively with comma separated values.\n\nGroups of accounts can also be selected for execution by specifying\nthe `-t` tag filter. Account tags are specified in the config\nfile. ie given the above accounts config file you can specify all prod\naccounts with `-t type:prod`. you can specify the -t flag multiple\ntimes or use a comma separated list.\n\nYou can specify which policies to use for execution by either\nspecifying `-p` or selecting groups of policies via their tags with\n`-l`, both options support being specified multiple times or using\ncomma separated values.\n\nBy default in aws, c7n-org will execute in parallel across regions,\nthe \'-r\' flag can be specified multiple times, and defaults to\n(us-east-1, us-west-2). a special value of `all` will execute across\nall regions.\n\n\nSee `c7n-org run --help` for more information.\n\n## Defining and using variables\n\nEach account/subscription/project configuration in the config file can\nalso define a variables section `vars` that can be used in policies\'\ndefinitions and are interpolated at execution time. These are in\naddition to the default runtime variables custodian provides like\n`account_id`, `now`, and `region`.\n\nExample of defining in c7n-org config file:\n\n```yaml\naccounts:\n- account_id: \'123123123123\'\n name: account-1\n role: arn:aws:iam::123123123123:role/CloudCustodian\n vars:\n charge_code: xyz\n```\n\nExample of using in a policy file:\n\n```yaml\npolicies:\n - name: ec2-check-tag\n resource: aws.ec2\n filters:\n - "tag:CostCenter": "{charge_code}"\n```\n\n**Note** Variable interpolation is sensitive to proper quoting and spacing,\ni.e., `{ charge_code }` would be invalid due to the extra white space. Additionally,\nyaml parsing can transform a value like `{charge_code}` to null, unless it\'s quoted\nin strings like the above example. Values that do interpolation into other content\ndon\'t require quoting, i.e., "my_{charge_code}".\n\n## Other commands\n\nc7n-org also supports running arbitrary scripts against accounts via the run-script command.\nFor AWS the standard AWS SDK credential information is exported into the process environment before executing.\nFor Azure and GCP, only the environment variables `AZURE_SUBSCRIPTION_ID` and `PROJECT_ID` are exported(in addition\nof the system env variables).\n\nc7n-org also supports generating reports for a given policy execution\nacross accounts via the `c7n-org report` subcommand.\n\n## Additional Azure Instructions\n\nIf you\'re using an Azure Service Principal for executing c7n-org\nyou\'ll need to ensure that the principal has access to multiple\nsubscriptions.\n\nFor instructions on creating a service principal and granting access\nacross subscriptions, visit the [Azure authentication docs\npage](https://cloudcustodian.io/docs/azure/authentication.html).\n',
'long_description_content_type': 'text/markdown',
'author': 'Cloud Custodian Project',
'author_email': None,
@@ -53,7 +55,7 @@
'package_data': package_data,
'install_requires': install_requires,
'entry_points': entry_points,
- 'python_requires': '>=3.6,<4.0',
+ 'python_requires': '>=3.7,<4.0',
}
diff --git a/tools/c7n_policystream/README.md b/tools/c7n_policystream/README.md
index 96247e721f3..09d9177eac0 100644
--- a/tools/c7n_policystream/README.md
+++ b/tools/c7n_policystream/README.md
@@ -1,8 +1,8 @@
# c7n-policystream: Policy Changes from Git
-[//]: # ( !!! IMPORTANT !!! )
-[//]: # (This file is moved during document generation.)
-[//]: # (Only edit the original document at ./tools/c7n_policystream/README.md)
+% [comment]: # ( !!! IMPORTANT !!! )
+% [comment]: # (This file is moved during document generation.)
+% [comment]: # (Only edit the original document at ./tools/c7n_policystream/README.md)
Using custodian in accordance with infrastructure as code principles,
we store policy assets in a versioned control repository. This
diff --git a/tools/c7n_policystream/poetry.lock b/tools/c7n_policystream/poetry.lock
index eaae14c56bd..59304c9a6f4 100644
--- a/tools/c7n_policystream/poetry.lock
+++ b/tools/c7n_policystream/poetry.lock
@@ -1,13 +1,13 @@
[[package]]
name = "argcomplete"
-version = "1.12.3"
+version = "2.0.0"
description = "Bash tab completion for argparse"
category = "dev"
optional = false
-python-versions = "*"
+python-versions = ">=3.6"
[package.dependencies]
-importlib-metadata = {version = ">=0.23,<5", markers = "python_version == \"3.6\" or python_version == \"3.7\""}
+importlib-metadata = {version = ">=0.23,<5", markers = "python_version == \"3.7\""}
[package.extras]
test = ["coverage", "flake8", "pexpect", "wheel"]
@@ -22,29 +22,29 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
[[package]]
name = "attrs"
-version = "21.2.0"
+version = "21.4.0"
description = "Classes Without Boilerplate"
category = "dev"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
[package.extras]
-dev = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "furo", "sphinx", "sphinx-notfound-page", "pre-commit"]
+dev = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "furo", "sphinx", "sphinx-notfound-page", "pre-commit", "cloudpickle"]
docs = ["furo", "sphinx", "zope.interface", "sphinx-notfound-page"]
-tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface"]
-tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins"]
+tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "cloudpickle"]
+tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "cloudpickle"]
[[package]]
name = "boto3"
-version = "1.18.21"
+version = "1.21.42"
description = "The AWS SDK for Python"
category = "main"
optional = false
python-versions = ">= 3.6"
[package.dependencies]
-botocore = ">=1.21.21,<1.22.0"
-jmespath = ">=0.7.1,<1.0.0"
+botocore = ">=1.24.42,<1.25.0"
+jmespath = ">=0.7.1,<2.0.0"
s3transfer = ">=0.5.0,<0.6.0"
[package.extras]
@@ -52,36 +52,37 @@ crt = ["botocore[crt] (>=1.21.0,<2.0a0)"]
[[package]]
name = "botocore"
-version = "1.21.21"
+version = "1.24.42"
description = "Low-level, data-driven core of boto 3."
category = "main"
optional = false
python-versions = ">= 3.6"
[package.dependencies]
-jmespath = ">=0.7.1,<1.0.0"
+jmespath = ">=0.7.1,<2.0.0"
python-dateutil = ">=2.1,<3.0.0"
urllib3 = ">=1.25.4,<1.27"
[package.extras]
-crt = ["awscrt (==0.11.24)"]
+crt = ["awscrt (==0.13.8)"]
[[package]]
name = "c7n"
-version = "0.9.14"
+version = "0.9.16"
description = "Cloud Custodian - Policy Rules Engine"
category = "dev"
optional = false
-python-versions = "^3.6"
+python-versions = "^3.7"
develop = true
[package.dependencies]
-argcomplete = "^1.11.1"
+argcomplete = ">=1.12.3"
boto3 = "^1.12.31"
-importlib-metadata = ">1.7.0;python_version<3.8"
-jsonschema = "^3.2.0"
-python-dateutil = "^2.8.1"
-pyyaml = "^5.3"
+docutils = ">=0.14,<0.18"
+importlib-metadata = ">=4.11.1"
+jsonschema = ">=3.0.0"
+python-dateutil = "^2.8.2"
+pyyaml = ">=5.4.0"
tabulate = "^0.8.6"
[package.source]
@@ -98,7 +99,7 @@ python-versions = "*"
[[package]]
name = "certifi"
-version = "2021.5.30"
+version = "2021.10.8"
description = "Python package for providing Mozilla's CA Bundle."
category = "main"
optional = false
@@ -106,7 +107,7 @@ python-versions = "*"
[[package]]
name = "cffi"
-version = "1.14.6"
+version = "1.15.0"
description = "Foreign Function Interface for Python calling C code."
category = "main"
optional = false
@@ -117,7 +118,7 @@ pycparser = "*"
[[package]]
name = "charset-normalizer"
-version = "2.0.4"
+version = "2.0.12"
description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet."
category = "main"
optional = false
@@ -128,23 +129,35 @@ unicode_backport = ["unicodedata2"]
[[package]]
name = "click"
-version = "7.1.2"
+version = "8.1.2"
description = "Composable command line interface toolkit"
category = "main"
optional = false
-python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
+python-versions = ">=3.7"
+
+[package.dependencies]
+colorama = {version = "*", markers = "platform_system == \"Windows\""}
+importlib-metadata = {version = "*", markers = "python_version < \"3.8\""}
[[package]]
name = "colorama"
version = "0.4.4"
description = "Cross-platform colored terminal text."
+category = "main"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
+
+[[package]]
+name = "docutils"
+version = "0.17.1"
+description = "Docutils -- Python Documentation Utilities"
category = "dev"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
[[package]]
name = "idna"
-version = "3.2"
+version = "3.3"
description = "Internationalized Domain Names in Applications (IDNA)"
category = "main"
optional = false
@@ -152,20 +165,35 @@ python-versions = ">=3.5"
[[package]]
name = "importlib-metadata"
-version = "4.6.4"
+version = "4.11.3"
description = "Read metadata from Python packages"
-category = "dev"
+category = "main"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.7"
[package.dependencies]
typing-extensions = {version = ">=3.6.4", markers = "python_version < \"3.8\""}
zipp = ">=0.5"
[package.extras]
-docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
+docs = ["sphinx", "jaraco.packaging (>=9)", "rst.linker (>=1.9)"]
perf = ["ipython"]
-testing = ["pytest (>=4.6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pep517", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy", "importlib-resources (>=1.3)"]
+testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)", "importlib-resources (>=1.3)"]
+
+[[package]]
+name = "importlib-resources"
+version = "5.7.1"
+description = "Read resources from Python packages"
+category = "dev"
+optional = false
+python-versions = ">=3.7"
+
+[package.dependencies]
+zipp = {version = ">=3.1.0", markers = "python_version < \"3.10\""}
+
+[package.extras]
+docs = ["sphinx", "jaraco.packaging (>=9)", "rst.linker (>=1.9)"]
+testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)"]
[[package]]
name = "iniconfig"
@@ -177,29 +205,30 @@ python-versions = "*"
[[package]]
name = "jmespath"
-version = "0.10.0"
+version = "1.0.0"
description = "JSON Matching Expressions"
category = "main"
optional = false
-python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*"
+python-versions = ">=3.7"
[[package]]
name = "jsonschema"
-version = "3.2.0"
+version = "4.4.0"
description = "An implementation of JSON Schema validation for Python"
category = "dev"
optional = false
-python-versions = "*"
+python-versions = ">=3.7"
[package.dependencies]
attrs = ">=17.4.0"
importlib-metadata = {version = "*", markers = "python_version < \"3.8\""}
-pyrsistent = ">=0.14.0"
-six = ">=1.11.0"
+importlib-resources = {version = ">=1.4.0", markers = "python_version < \"3.9\""}
+pyrsistent = ">=0.14.0,<0.17.0 || >0.17.0,<0.17.1 || >0.17.1,<0.17.2 || >0.17.2"
+typing-extensions = {version = "*", markers = "python_version < \"3.8\""}
[package.extras]
-format = ["idna", "jsonpointer (>1.13)", "rfc3987", "strict-rfc3339", "webcolors"]
-format_nongpl = ["idna", "jsonpointer (>1.13)", "webcolors", "rfc3986-validator (>0.1.0)", "rfc3339-validator"]
+format = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3987", "uri-template", "webcolors (>=1.11)"]
+format_nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3986-validator (>0.1.0)", "uri-template", "webcolors (>=1.11)"]
[[package]]
name = "mock"
@@ -216,40 +245,41 @@ test = ["pytest (<5.4)", "pytest-cov"]
[[package]]
name = "packaging"
-version = "21.0"
+version = "21.3"
description = "Core utilities for Python packages"
category = "dev"
optional = false
python-versions = ">=3.6"
[package.dependencies]
-pyparsing = ">=2.0.2"
+pyparsing = ">=2.0.2,<3.0.5 || >3.0.5"
[[package]]
name = "pluggy"
-version = "0.13.1"
+version = "1.0.0"
description = "plugin and hook calling mechanisms for python"
category = "dev"
optional = false
-python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
+python-versions = ">=3.6"
[package.dependencies]
importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""}
[package.extras]
dev = ["pre-commit", "tox"]
+testing = ["pytest", "pytest-benchmark"]
[[package]]
name = "py"
-version = "1.10.0"
+version = "1.11.0"
description = "library with cross-python path, ini-parsing, io, code, log facilities"
category = "dev"
optional = false
-python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
[[package]]
name = "pycparser"
-version = "2.20"
+version = "2.21"
description = "C parser in Python"
category = "main"
optional = false
@@ -257,35 +287,38 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
[[package]]
name = "pygit2"
-version = "1.5.0"
+version = "1.9.1"
description = "Python bindings for libgit2."
category = "main"
optional = false
-python-versions = "*"
+python-versions = ">=3.7"
[package.dependencies]
-cached-property = "*"
-cffi = ">=1.4.0"
+cached-property = {version = "*", markers = "python_version < \"3.8\""}
+cffi = ">=1.9.1"
[[package]]
name = "pyparsing"
-version = "2.4.7"
-description = "Python parsing module"
+version = "3.0.8"
+description = "pyparsing module - Classes and methods to define and execute parsing grammars"
category = "dev"
optional = false
-python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*"
+python-versions = ">=3.6.8"
+
+[package.extras]
+diagrams = ["railroad-diagrams", "jinja2"]
[[package]]
name = "pyrsistent"
-version = "0.18.0"
+version = "0.18.1"
description = "Persistent/Functional/Immutable data structures"
category = "dev"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.7"
[[package]]
name = "pytest"
-version = "6.2.4"
+version = "6.2.5"
description = "pytest: simple powerful testing with Python"
category = "dev"
optional = false
@@ -298,7 +331,7 @@ colorama = {version = "*", markers = "sys_platform == \"win32\""}
importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""}
iniconfig = "*"
packaging = "*"
-pluggy = ">=0.12,<1.0.0a1"
+pluggy = ">=0.12,<2.0"
py = ">=1.8.2"
toml = "*"
@@ -318,15 +351,15 @@ six = ">=1.5"
[[package]]
name = "pyyaml"
-version = "5.4.1"
+version = "6.0"
description = "YAML parser and emitter for Python"
category = "main"
optional = false
-python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*"
+python-versions = ">=3.6"
[[package]]
name = "requests"
-version = "2.26.0"
+version = "2.27.1"
description = "Python HTTP for Humans."
category = "main"
optional = false
@@ -344,7 +377,7 @@ use_chardet_on_py3 = ["chardet (>=3.0.2,<5)"]
[[package]]
name = "s3transfer"
-version = "0.5.0"
+version = "0.5.2"
description = "An Amazon S3 Transfer Manager"
category = "main"
optional = false
@@ -385,62 +418,62 @@ python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*"
[[package]]
name = "typing-extensions"
-version = "3.10.0.0"
-description = "Backported and Experimental Type Hints for Python 3.5+"
-category = "dev"
+version = "4.2.0"
+description = "Backported and Experimental Type Hints for Python 3.7+"
+category = "main"
optional = false
-python-versions = "*"
+python-versions = ">=3.7"
[[package]]
name = "urllib3"
-version = "1.26.6"
+version = "1.26.9"
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.*, <4"
[package.extras]
-brotli = ["brotlipy (>=0.6.0)"]
+brotli = ["brotlicffi (>=0.8.0)", "brotli (>=1.0.9)", "brotlipy (>=0.6.0)"]
secure = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "certifi", "ipaddress"]
socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"]
[[package]]
name = "zipp"
-version = "3.5.0"
+version = "3.8.0"
description = "Backport of pathlib-compatible object wrapper for zip files"
-category = "dev"
+category = "main"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.7"
[package.extras]
-docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
-testing = ["pytest (>=4.6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "jaraco.itertools", "func-timeout", "pytest-black (>=0.3.7)", "pytest-mypy"]
+docs = ["sphinx", "jaraco.packaging (>=9)", "rst.linker (>=1.9)"]
+testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "jaraco.itertools", "func-timeout", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)"]
[metadata]
lock-version = "1.1"
-python-versions = "^3.6"
-content-hash = "0aa0a91d5c4ff37d7828fa23abc17ae9b67fd6cfab0522dce20526c4255f8222"
+python-versions = "^3.7"
+content-hash = "d9823dad30f47d432a02cc8566981a7e689eb96bb90773f7c57b7ad4f2805690"
[metadata.files]
argcomplete = [
- {file = "argcomplete-1.12.3-py2.py3-none-any.whl", hash = "sha256:291f0beca7fd49ce285d2f10e4c1c77e9460cf823eef2de54df0c0fec88b0d81"},
- {file = "argcomplete-1.12.3.tar.gz", hash = "sha256:2c7dbffd8c045ea534921e63b0be6fe65e88599990d8dc408ac8c542b72a5445"},
+ {file = "argcomplete-2.0.0-py2.py3-none-any.whl", hash = "sha256:cffa11ea77999bb0dd27bb25ff6dc142a6796142f68d45b1a26b11f58724561e"},
+ {file = "argcomplete-2.0.0.tar.gz", hash = "sha256:6372ad78c89d662035101418ae253668445b391755cfe94ea52f1b9d22425b20"},
]
atomicwrites = [
{file = "atomicwrites-1.4.0-py2.py3-none-any.whl", hash = "sha256:6d1784dea7c0c8d4a5172b6c620f40b6e4cbfdf96d783691f2e1302a7b88e197"},
{file = "atomicwrites-1.4.0.tar.gz", hash = "sha256:ae70396ad1a434f9c7046fd2dd196fc04b12f9e91ffb859164193be8b6168a7a"},
]
attrs = [
- {file = "attrs-21.2.0-py2.py3-none-any.whl", hash = "sha256:149e90d6d8ac20db7a955ad60cf0e6881a3f20d37096140088356da6c716b0b1"},
- {file = "attrs-21.2.0.tar.gz", hash = "sha256:ef6aaac3ca6cd92904cdd0d83f629a15f18053ec84e6432106f7a4d04ae4f5fb"},
+ {file = "attrs-21.4.0-py2.py3-none-any.whl", hash = "sha256:2d27e3784d7a565d36ab851fe94887c5eccd6a463168875832a1be79c82828b4"},
+ {file = "attrs-21.4.0.tar.gz", hash = "sha256:626ba8234211db98e869df76230a137c4c40a12d72445c45d5f5b716f076e2fd"},
]
boto3 = [
- {file = "boto3-1.18.21-py3-none-any.whl", hash = "sha256:59b6e8e79b2114e21388288a06a004f2a9378b1e0fc58466a35da8fb74fe2dd8"},
- {file = "boto3-1.18.21.tar.gz", hash = "sha256:00748c760dc30be61c6db4b092718f6a9f8d27c767da0e232695a65adb75cde8"},
+ {file = "boto3-1.21.42-py3-none-any.whl", hash = "sha256:895fb88c69be78f82cfee58a79c97a3ad8d4a2a1209041a411d7d6b9fc5393e4"},
+ {file = "boto3-1.21.42.tar.gz", hash = "sha256:bcb541175a7d190dd919a0af0e807ee6e9d26f135551e741b10d94343f2d7588"},
]
botocore = [
- {file = "botocore-1.21.21-py3-none-any.whl", hash = "sha256:fa5ac13829d24fcdd385e82c3b6d78e22d93f427cca8dac38158cae84a8cc2f5"},
- {file = "botocore-1.21.21.tar.gz", hash = "sha256:12cfe74b0a5c44afb34bdd86c1f8ad74bc2ad9ec168eaed9040ef70cb3db944f"},
+ {file = "botocore-1.24.42-py3-none-any.whl", hash = "sha256:14aee41c8bf59d2dd2d89e8751fa37d3c95dcb92707d1966aa02697e914c1417"},
+ {file = "botocore-1.24.42.tar.gz", hash = "sha256:a2baa9484bbaee96ef312c049b8e360badcab58329e487b57567644a571b5f4a"},
]
c7n = []
cached-property = [
@@ -448,192 +481,230 @@ cached-property = [
{file = "cached_property-1.5.2-py2.py3-none-any.whl", hash = "sha256:df4f613cf7ad9a588cc381aaf4a512d26265ecebd5eb9e1ba12f1319eb85a6a0"},
]
certifi = [
- {file = "certifi-2021.5.30-py2.py3-none-any.whl", hash = "sha256:50b1e4f8446b06f41be7dd6338db18e0990601dce795c2b1686458aa7e8fa7d8"},
- {file = "certifi-2021.5.30.tar.gz", hash = "sha256:2bbf76fd432960138b3ef6dda3dde0544f27cbf8546c458e60baf371917ba9ee"},
+ {file = "certifi-2021.10.8-py2.py3-none-any.whl", hash = "sha256:d62a0163eb4c2344ac042ab2bdf75399a71a2d8c7d47eac2e2ee91b9d6339569"},
+ {file = "certifi-2021.10.8.tar.gz", hash = "sha256:78884e7c1d4b00ce3cea67b44566851c4343c120abd683433ce934a68ea58872"},
]
cffi = [
- {file = "cffi-1.14.6-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:22b9c3c320171c108e903d61a3723b51e37aaa8c81255b5e7ce102775bd01e2c"},
- {file = "cffi-1.14.6-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:f0c5d1acbfca6ebdd6b1e3eded8d261affb6ddcf2186205518f1428b8569bb99"},
- {file = "cffi-1.14.6-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:99f27fefe34c37ba9875f224a8f36e31d744d8083e00f520f133cab79ad5e819"},
- {file = "cffi-1.14.6-cp27-cp27m-win32.whl", hash = "sha256:55af55e32ae468e9946f741a5d51f9896da6b9bf0bbdd326843fec05c730eb20"},
- {file = "cffi-1.14.6-cp27-cp27m-win_amd64.whl", hash = "sha256:7bcac9a2b4fdbed2c16fa5681356d7121ecabf041f18d97ed5b8e0dd38a80224"},
- {file = "cffi-1.14.6-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:ed38b924ce794e505647f7c331b22a693bee1538fdf46b0222c4717b42f744e7"},
- {file = "cffi-1.14.6-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:e22dcb48709fc51a7b58a927391b23ab37eb3737a98ac4338e2448bef8559b33"},
- {file = "cffi-1.14.6-cp35-cp35m-macosx_10_9_x86_64.whl", hash = "sha256:aedb15f0a5a5949ecb129a82b72b19df97bbbca024081ed2ef88bd5c0a610534"},
- {file = "cffi-1.14.6-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:48916e459c54c4a70e52745639f1db524542140433599e13911b2f329834276a"},
- {file = "cffi-1.14.6-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:f627688813d0a4140153ff532537fbe4afea5a3dffce1f9deb7f91f848a832b5"},
- {file = "cffi-1.14.6-cp35-cp35m-win32.whl", hash = "sha256:f0010c6f9d1a4011e429109fda55a225921e3206e7f62a0c22a35344bfd13cca"},
- {file = "cffi-1.14.6-cp35-cp35m-win_amd64.whl", hash = "sha256:57e555a9feb4a8460415f1aac331a2dc833b1115284f7ded7278b54afc5bd218"},
- {file = "cffi-1.14.6-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:e8c6a99be100371dbb046880e7a282152aa5d6127ae01783e37662ef73850d8f"},
- {file = "cffi-1.14.6-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:19ca0dbdeda3b2615421d54bef8985f72af6e0c47082a8d26122adac81a95872"},
- {file = "cffi-1.14.6-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:d950695ae4381ecd856bcaf2b1e866720e4ab9a1498cba61c602e56630ca7195"},
- {file = "cffi-1.14.6-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e9dc245e3ac69c92ee4c167fbdd7428ec1956d4e754223124991ef29eb57a09d"},
- {file = "cffi-1.14.6-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a8661b2ce9694ca01c529bfa204dbb144b275a31685a075ce123f12331be790b"},
- {file = "cffi-1.14.6-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b315d709717a99f4b27b59b021e6207c64620790ca3e0bde636a6c7f14618abb"},
- {file = "cffi-1.14.6-cp36-cp36m-win32.whl", hash = "sha256:80b06212075346b5546b0417b9f2bf467fea3bfe7352f781ffc05a8ab24ba14a"},
- {file = "cffi-1.14.6-cp36-cp36m-win_amd64.whl", hash = "sha256:a9da7010cec5a12193d1af9872a00888f396aba3dc79186604a09ea3ee7c029e"},
- {file = "cffi-1.14.6-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:4373612d59c404baeb7cbd788a18b2b2a8331abcc84c3ba40051fcd18b17a4d5"},
- {file = "cffi-1.14.6-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:f10afb1004f102c7868ebfe91c28f4a712227fe4cb24974350ace1f90e1febbf"},
- {file = "cffi-1.14.6-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:fd4305f86f53dfd8cd3522269ed7fc34856a8ee3709a5e28b2836b2db9d4cd69"},
- {file = "cffi-1.14.6-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6d6169cb3c6c2ad50db5b868db6491a790300ade1ed5d1da29289d73bbe40b56"},
- {file = "cffi-1.14.6-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5d4b68e216fc65e9fe4f524c177b54964af043dde734807586cf5435af84045c"},
- {file = "cffi-1.14.6-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:33791e8a2dc2953f28b8d8d300dde42dd929ac28f974c4b4c6272cb2955cb762"},
- {file = "cffi-1.14.6-cp37-cp37m-win32.whl", hash = "sha256:0c0591bee64e438883b0c92a7bed78f6290d40bf02e54c5bf0978eaf36061771"},
- {file = "cffi-1.14.6-cp37-cp37m-win_amd64.whl", hash = "sha256:8eb687582ed7cd8c4bdbff3df6c0da443eb89c3c72e6e5dcdd9c81729712791a"},
- {file = "cffi-1.14.6-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ba6f2b3f452e150945d58f4badd92310449876c4c954836cfb1803bdd7b422f0"},
- {file = "cffi-1.14.6-cp38-cp38-manylinux1_i686.whl", hash = "sha256:64fda793737bc4037521d4899be780534b9aea552eb673b9833b01f945904c2e"},
- {file = "cffi-1.14.6-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:9f3e33c28cd39d1b655ed1ba7247133b6f7fc16fa16887b120c0c670e35ce346"},
- {file = "cffi-1.14.6-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:26bb2549b72708c833f5abe62b756176022a7b9a7f689b571e74c8478ead51dc"},
- {file = "cffi-1.14.6-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:eb687a11f0a7a1839719edd80f41e459cc5366857ecbed383ff376c4e3cc6afd"},
- {file = "cffi-1.14.6-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d2ad4d668a5c0645d281dcd17aff2be3212bc109b33814bbb15c4939f44181cc"},
- {file = "cffi-1.14.6-cp38-cp38-win32.whl", hash = "sha256:487d63e1454627c8e47dd230025780e91869cfba4c753a74fda196a1f6ad6548"},
- {file = "cffi-1.14.6-cp38-cp38-win_amd64.whl", hash = "sha256:c33d18eb6e6bc36f09d793c0dc58b0211fccc6ae5149b808da4a62660678b156"},
- {file = "cffi-1.14.6-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:06c54a68935738d206570b20da5ef2b6b6d92b38ef3ec45c5422c0ebaf338d4d"},
- {file = "cffi-1.14.6-cp39-cp39-manylinux1_i686.whl", hash = "sha256:f174135f5609428cc6e1b9090f9268f5c8935fddb1b25ccb8255a2d50de6789e"},
- {file = "cffi-1.14.6-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:f3ebe6e73c319340830a9b2825d32eb6d8475c1dac020b4f0aa774ee3b898d1c"},
- {file = "cffi-1.14.6-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3c8d896becff2fa653dc4438b54a5a25a971d1f4110b32bd3068db3722c80202"},
- {file = "cffi-1.14.6-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4922cd707b25e623b902c86188aca466d3620892db76c0bdd7b99a3d5e61d35f"},
- {file = "cffi-1.14.6-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c9e005e9bd57bc987764c32a1bee4364c44fdc11a3cc20a40b93b444984f2b87"},
- {file = "cffi-1.14.6-cp39-cp39-win32.whl", hash = "sha256:eb9e2a346c5238a30a746893f23a9535e700f8192a68c07c0258e7ece6ff3728"},
- {file = "cffi-1.14.6-cp39-cp39-win_amd64.whl", hash = "sha256:818014c754cd3dba7229c0f5884396264d51ffb87ec86e927ef0be140bfdb0d2"},
- {file = "cffi-1.14.6.tar.gz", hash = "sha256:c9a875ce9d7fe32887784274dd533c57909b7b1dcadcc128a2ac21331a9765dd"},
+ {file = "cffi-1.15.0-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:c2502a1a03b6312837279c8c1bd3ebedf6c12c4228ddbad40912d671ccc8a962"},
+ {file = "cffi-1.15.0-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:23cfe892bd5dd8941608f93348c0737e369e51c100d03718f108bf1add7bd6d0"},
+ {file = "cffi-1.15.0-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:41d45de54cd277a7878919867c0f08b0cf817605e4eb94093e7516505d3c8d14"},
+ {file = "cffi-1.15.0-cp27-cp27m-win32.whl", hash = "sha256:4a306fa632e8f0928956a41fa8e1d6243c71e7eb59ffbd165fc0b41e316b2474"},
+ {file = "cffi-1.15.0-cp27-cp27m-win_amd64.whl", hash = "sha256:e7022a66d9b55e93e1a845d8c9eba2a1bebd4966cd8bfc25d9cd07d515b33fa6"},
+ {file = "cffi-1.15.0-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:14cd121ea63ecdae71efa69c15c5543a4b5fbcd0bbe2aad864baca0063cecf27"},
+ {file = "cffi-1.15.0-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:d4d692a89c5cf08a8557fdeb329b82e7bf609aadfaed6c0d79f5a449a3c7c023"},
+ {file = "cffi-1.15.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0104fb5ae2391d46a4cb082abdd5c69ea4eab79d8d44eaaf79f1b1fd806ee4c2"},
+ {file = "cffi-1.15.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:91ec59c33514b7c7559a6acda53bbfe1b283949c34fe7440bcf917f96ac0723e"},
+ {file = "cffi-1.15.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:f5c7150ad32ba43a07c4479f40241756145a1f03b43480e058cfd862bf5041c7"},
+ {file = "cffi-1.15.0-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:00c878c90cb53ccfaae6b8bc18ad05d2036553e6d9d1d9dbcf323bbe83854ca3"},
+ {file = "cffi-1.15.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:abb9a20a72ac4e0fdb50dae135ba5e77880518e742077ced47eb1499e29a443c"},
+ {file = "cffi-1.15.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a5263e363c27b653a90078143adb3d076c1a748ec9ecc78ea2fb916f9b861962"},
+ {file = "cffi-1.15.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f54a64f8b0c8ff0b64d18aa76675262e1700f3995182267998c31ae974fbc382"},
+ {file = "cffi-1.15.0-cp310-cp310-win32.whl", hash = "sha256:c21c9e3896c23007803a875460fb786118f0cdd4434359577ea25eb556e34c55"},
+ {file = "cffi-1.15.0-cp310-cp310-win_amd64.whl", hash = "sha256:5e069f72d497312b24fcc02073d70cb989045d1c91cbd53979366077959933e0"},
+ {file = "cffi-1.15.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:64d4ec9f448dfe041705426000cc13e34e6e5bb13736e9fd62e34a0b0c41566e"},
+ {file = "cffi-1.15.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2756c88cbb94231c7a147402476be2c4df2f6078099a6f4a480d239a8817ae39"},
+ {file = "cffi-1.15.0-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3b96a311ac60a3f6be21d2572e46ce67f09abcf4d09344c49274eb9e0bf345fc"},
+ {file = "cffi-1.15.0-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:75e4024375654472cc27e91cbe9eaa08567f7fbdf822638be2814ce059f58032"},
+ {file = "cffi-1.15.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:59888172256cac5629e60e72e86598027aca6bf01fa2465bdb676d37636573e8"},
+ {file = "cffi-1.15.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:27c219baf94952ae9d50ec19651a687b826792055353d07648a5695413e0c605"},
+ {file = "cffi-1.15.0-cp36-cp36m-win32.whl", hash = "sha256:4958391dbd6249d7ad855b9ca88fae690783a6be9e86df65865058ed81fc860e"},
+ {file = "cffi-1.15.0-cp36-cp36m-win_amd64.whl", hash = "sha256:f6f824dc3bce0edab5f427efcfb1d63ee75b6fcb7282900ccaf925be84efb0fc"},
+ {file = "cffi-1.15.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:06c48159c1abed75c2e721b1715c379fa3200c7784271b3c46df01383b593636"},
+ {file = "cffi-1.15.0-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:c2051981a968d7de9dd2d7b87bcb9c939c74a34626a6e2f8181455dd49ed69e4"},
+ {file = "cffi-1.15.0-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:fd8a250edc26254fe5b33be00402e6d287f562b6a5b2152dec302fa15bb3e997"},
+ {file = "cffi-1.15.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:91d77d2a782be4274da750752bb1650a97bfd8f291022b379bb8e01c66b4e96b"},
+ {file = "cffi-1.15.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:45db3a33139e9c8f7c09234b5784a5e33d31fd6907800b316decad50af323ff2"},
+ {file = "cffi-1.15.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:263cc3d821c4ab2213cbe8cd8b355a7f72a8324577dc865ef98487c1aeee2bc7"},
+ {file = "cffi-1.15.0-cp37-cp37m-win32.whl", hash = "sha256:17771976e82e9f94976180f76468546834d22a7cc404b17c22df2a2c81db0c66"},
+ {file = "cffi-1.15.0-cp37-cp37m-win_amd64.whl", hash = "sha256:3415c89f9204ee60cd09b235810be700e993e343a408693e80ce7f6a40108029"},
+ {file = "cffi-1.15.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:4238e6dab5d6a8ba812de994bbb0a79bddbdf80994e4ce802b6f6f3142fcc880"},
+ {file = "cffi-1.15.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0808014eb713677ec1292301ea4c81ad277b6cdf2fdd90fd540af98c0b101d20"},
+ {file = "cffi-1.15.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:57e9ac9ccc3101fac9d6014fba037473e4358ef4e89f8e181f8951a2c0162024"},
+ {file = "cffi-1.15.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b6c2ea03845c9f501ed1313e78de148cd3f6cad741a75d43a29b43da27f2e1e"},
+ {file = "cffi-1.15.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:10dffb601ccfb65262a27233ac273d552ddc4d8ae1bf93b21c94b8511bffe728"},
+ {file = "cffi-1.15.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:786902fb9ba7433aae840e0ed609f45c7bcd4e225ebb9c753aa39725bb3e6ad6"},
+ {file = "cffi-1.15.0-cp38-cp38-win32.whl", hash = "sha256:da5db4e883f1ce37f55c667e5c0de439df76ac4cb55964655906306918e7363c"},
+ {file = "cffi-1.15.0-cp38-cp38-win_amd64.whl", hash = "sha256:181dee03b1170ff1969489acf1c26533710231c58f95534e3edac87fff06c443"},
+ {file = "cffi-1.15.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:45e8636704eacc432a206ac7345a5d3d2c62d95a507ec70d62f23cd91770482a"},
+ {file = "cffi-1.15.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:31fb708d9d7c3f49a60f04cf5b119aeefe5644daba1cd2a0fe389b674fd1de37"},
+ {file = "cffi-1.15.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:6dc2737a3674b3e344847c8686cf29e500584ccad76204efea14f451d4cc669a"},
+ {file = "cffi-1.15.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:74fdfdbfdc48d3f47148976f49fab3251e550a8720bebc99bf1483f5bfb5db3e"},
+ {file = "cffi-1.15.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ffaa5c925128e29efbde7301d8ecaf35c8c60ffbcd6a1ffd3a552177c8e5e796"},
+ {file = "cffi-1.15.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3f7d084648d77af029acb79a0ff49a0ad7e9d09057a9bf46596dac9514dc07df"},
+ {file = "cffi-1.15.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ef1f279350da2c586a69d32fc8733092fd32cc8ac95139a00377841f59a3f8d8"},
+ {file = "cffi-1.15.0-cp39-cp39-win32.whl", hash = "sha256:2a23af14f408d53d5e6cd4e3d9a24ff9e05906ad574822a10563efcef137979a"},
+ {file = "cffi-1.15.0-cp39-cp39-win_amd64.whl", hash = "sha256:3773c4d81e6e818df2efbc7dd77325ca0dcb688116050fb2b3011218eda36139"},
+ {file = "cffi-1.15.0.tar.gz", hash = "sha256:920f0d66a896c2d99f0adbb391f990a84091179542c205fa53ce5787aff87954"},
]
charset-normalizer = [
- {file = "charset-normalizer-2.0.4.tar.gz", hash = "sha256:f23667ebe1084be45f6ae0538e4a5a865206544097e4e8bbcacf42cd02a348f3"},
- {file = "charset_normalizer-2.0.4-py3-none-any.whl", hash = "sha256:0c8911edd15d19223366a194a513099a302055a962bca2cec0f54b8b63175d8b"},
+ {file = "charset-normalizer-2.0.12.tar.gz", hash = "sha256:2857e29ff0d34db842cd7ca3230549d1a697f96ee6d3fb071cfa6c7393832597"},
+ {file = "charset_normalizer-2.0.12-py3-none-any.whl", hash = "sha256:6881edbebdb17b39b4eaaa821b438bf6eddffb4468cf344f09f89def34a8b1df"},
]
click = [
- {file = "click-7.1.2-py2.py3-none-any.whl", hash = "sha256:dacca89f4bfadd5de3d7489b7c8a566eee0d3676333fbb50030263894c38c0dc"},
- {file = "click-7.1.2.tar.gz", hash = "sha256:d2b5255c7c6349bc1bd1e59e08cd12acbbd63ce649f2588755783aa94dfb6b1a"},
+ {file = "click-8.1.2-py3-none-any.whl", hash = "sha256:24e1a4a9ec5bf6299411369b208c1df2188d9eb8d916302fe6bf03faed227f1e"},
+ {file = "click-8.1.2.tar.gz", hash = "sha256:479707fe14d9ec9a0757618b7a100a0ae4c4e236fac5b7f80ca68028141a1a72"},
]
colorama = [
{file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"},
{file = "colorama-0.4.4.tar.gz", hash = "sha256:5941b2b48a20143d2267e95b1c2a7603ce057ee39fd88e7329b0c292aa16869b"},
]
+docutils = [
+ {file = "docutils-0.17.1-py2.py3-none-any.whl", hash = "sha256:cf316c8370a737a022b72b56874f6602acf974a37a9fba42ec2876387549fc61"},
+ {file = "docutils-0.17.1.tar.gz", hash = "sha256:686577d2e4c32380bb50cbb22f575ed742d58168cee37e99117a854bcd88f125"},
+]
idna = [
- {file = "idna-3.2-py3-none-any.whl", hash = "sha256:14475042e284991034cb48e06f6851428fb14c4dc953acd9be9a5e95c7b6dd7a"},
- {file = "idna-3.2.tar.gz", hash = "sha256:467fbad99067910785144ce333826c71fb0e63a425657295239737f7ecd125f3"},
+ {file = "idna-3.3-py3-none-any.whl", hash = "sha256:84d9dd047ffa80596e0f246e2eab0b391788b0503584e8945f2368256d2735ff"},
+ {file = "idna-3.3.tar.gz", hash = "sha256:9d643ff0a55b762d5cdb124b8eaa99c66322e2157b69160bc32796e824360e6d"},
]
importlib-metadata = [
- {file = "importlib_metadata-4.6.4-py3-none-any.whl", hash = "sha256:ed5157fef23a4bc4594615a0dd8eba94b2bb36bf2a343fa3d8bb2fa0a62a99d5"},
- {file = "importlib_metadata-4.6.4.tar.gz", hash = "sha256:7b30a78db2922d78a6f47fb30683156a14f3c6aa5cc23f77cc8967e9ab2d002f"},
+ {file = "importlib_metadata-4.11.3-py3-none-any.whl", hash = "sha256:1208431ca90a8cca1a6b8af391bb53c1a2db74e5d1cef6ddced95d4b2062edc6"},
+ {file = "importlib_metadata-4.11.3.tar.gz", hash = "sha256:ea4c597ebf37142f827b8f39299579e31685c31d3a438b59f469406afd0f2539"},
+]
+importlib-resources = [
+ {file = "importlib_resources-5.7.1-py3-none-any.whl", hash = "sha256:e447dc01619b1e951286f3929be820029d48c75eb25d265c28b92a16548212b8"},
+ {file = "importlib_resources-5.7.1.tar.gz", hash = "sha256:b6062987dfc51f0fcb809187cffbd60f35df7acb4589091f154214af6d0d49d3"},
]
iniconfig = [
{file = "iniconfig-1.1.1-py2.py3-none-any.whl", hash = "sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3"},
{file = "iniconfig-1.1.1.tar.gz", hash = "sha256:bc3af051d7d14b2ee5ef9969666def0cd1a000e121eaea580d4a313df4b37f32"},
]
jmespath = [
- {file = "jmespath-0.10.0-py2.py3-none-any.whl", hash = "sha256:cdf6525904cc597730141d61b36f2e4b8ecc257c420fa2f4549bac2c2d0cb72f"},
- {file = "jmespath-0.10.0.tar.gz", hash = "sha256:b85d0567b8666149a93172712e68920734333c0ce7e89b78b3e987f71e5ed4f9"},
+ {file = "jmespath-1.0.0-py3-none-any.whl", hash = "sha256:e8dcd576ed616f14ec02eed0005c85973b5890083313860136657e24784e4c04"},
+ {file = "jmespath-1.0.0.tar.gz", hash = "sha256:a490e280edd1f57d6de88636992d05b71e97d69a26a19f058ecf7d304474bf5e"},
]
jsonschema = [
- {file = "jsonschema-3.2.0-py2.py3-none-any.whl", hash = "sha256:4e5b3cf8216f577bee9ce139cbe72eca3ea4f292ec60928ff24758ce626cd163"},
- {file = "jsonschema-3.2.0.tar.gz", hash = "sha256:c8a85b28d377cc7737e46e2d9f2b4f44ee3c0e1deac6bf46ddefc7187d30797a"},
+ {file = "jsonschema-4.4.0-py3-none-any.whl", hash = "sha256:77281a1f71684953ee8b3d488371b162419767973789272434bbc3f29d9c8823"},
+ {file = "jsonschema-4.4.0.tar.gz", hash = "sha256:636694eb41b3535ed608fe04129f26542b59ed99808b4f688aa32dcf55317a83"},
]
mock = [
{file = "mock-4.0.3-py3-none-any.whl", hash = "sha256:122fcb64ee37cfad5b3f48d7a7d51875d7031aaf3d8be7c42e2bee25044eee62"},
{file = "mock-4.0.3.tar.gz", hash = "sha256:7d3fbbde18228f4ff2f1f119a45cdffa458b4c0dee32eb4d2bb2f82554bac7bc"},
]
packaging = [
- {file = "packaging-21.0-py3-none-any.whl", hash = "sha256:c86254f9220d55e31cc94d69bade760f0847da8000def4dfe1c6b872fd14ff14"},
- {file = "packaging-21.0.tar.gz", hash = "sha256:7dc96269f53a4ccec5c0670940a4281106dd0bb343f47b7471f779df49c2fbe7"},
+ {file = "packaging-21.3-py3-none-any.whl", hash = "sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522"},
+ {file = "packaging-21.3.tar.gz", hash = "sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb"},
]
pluggy = [
- {file = "pluggy-0.13.1-py2.py3-none-any.whl", hash = "sha256:966c145cd83c96502c3c3868f50408687b38434af77734af1e9ca461a4081d2d"},
- {file = "pluggy-0.13.1.tar.gz", hash = "sha256:15b2acde666561e1298d71b523007ed7364de07029219b604cf808bfa1c765b0"},
+ {file = "pluggy-1.0.0-py2.py3-none-any.whl", hash = "sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3"},
+ {file = "pluggy-1.0.0.tar.gz", hash = "sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159"},
]
py = [
- {file = "py-1.10.0-py2.py3-none-any.whl", hash = "sha256:3b80836aa6d1feeaa108e046da6423ab8f6ceda6468545ae8d02d9d58d18818a"},
- {file = "py-1.10.0.tar.gz", hash = "sha256:21b81bda15b66ef5e1a777a21c4dcd9c20ad3efd0b3f817e7a809035269e1bd3"},
+ {file = "py-1.11.0-py2.py3-none-any.whl", hash = "sha256:607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378"},
+ {file = "py-1.11.0.tar.gz", hash = "sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719"},
]
pycparser = [
- {file = "pycparser-2.20-py2.py3-none-any.whl", hash = "sha256:7582ad22678f0fcd81102833f60ef8d0e57288b6b5fb00323d101be910e35705"},
- {file = "pycparser-2.20.tar.gz", hash = "sha256:2d475327684562c3a96cc71adf7dc8c4f0565175cf86b6d7a404ff4c771f15f0"},
+ {file = "pycparser-2.21-py2.py3-none-any.whl", hash = "sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9"},
+ {file = "pycparser-2.21.tar.gz", hash = "sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206"},
]
pygit2 = [
- {file = "pygit2-1.5.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:eb333e43024ba631e83c7500a9853f79feb5daf8b25e6faa8025021f3d83a51a"},
- {file = "pygit2-1.5.0-cp36-cp36m-manylinux2014_x86_64.whl", hash = "sha256:7a2a511ab8cde226a377bff1e1c517be52f1f3162c5bab2d37e3098a2e12e97e"},
- {file = "pygit2-1.5.0-cp36-cp36m-win32.whl", hash = "sha256:6512e6f0f07affb97fef4b8733bee0953693de3d38e870d106092d6566ca91b2"},
- {file = "pygit2-1.5.0-cp36-cp36m-win_amd64.whl", hash = "sha256:89a095765337fa2c2100a840b21f1e9a9cbf931df6b0a8ef7ed046e27194b5f3"},
- {file = "pygit2-1.5.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:320ec448bb37a02c620a3b2ed3355614198513093de6e1777783e826a030bcea"},
- {file = "pygit2-1.5.0-cp37-cp37m-manylinux2014_x86_64.whl", hash = "sha256:fda3f8dd30608475f24a531e6f968010662ed7b9d4e303525d945c8933d9528f"},
- {file = "pygit2-1.5.0-cp37-cp37m-win32.whl", hash = "sha256:b5f52c2d0bda69be8ded1f66c7e6c6c9e21fdeb6d76488edf63af466fb9273ce"},
- {file = "pygit2-1.5.0-cp37-cp37m-win_amd64.whl", hash = "sha256:b59e0ab959b682ca0dbc2040f11eaed144b4963c91c97a815b076559ea0e6f24"},
- {file = "pygit2-1.5.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:5acd2a1c3b0949c9804a98ea7f447a9fc6e1f229b9bafa64bb71fa2500899914"},
- {file = "pygit2-1.5.0-cp38-cp38-manylinux2014_x86_64.whl", hash = "sha256:a5c64ec093523710a5849cc35d73878d0762aac6920d5b7bec949809fe7f2446"},
- {file = "pygit2-1.5.0-cp38-cp38-win32.whl", hash = "sha256:ea9c540e2b87153707b16ddcc5853a27bcc6e60a3817b3ec7ca3dce09cc954fe"},
- {file = "pygit2-1.5.0-cp38-cp38-win_amd64.whl", hash = "sha256:d3951d2ef3942c0377738189c307df002d8a2c19351b2cf6620cbe2229703c5f"},
- {file = "pygit2-1.5.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:279ebf1560be0f563caab1584ff38169c757afdaf44ca7fc790b72bd14b6d1a6"},
- {file = "pygit2-1.5.0-cp39-cp39-manylinux2014_x86_64.whl", hash = "sha256:711829b95c42f5db019f381647fe6e8f52f3ff349c9ed9c77722b1e7bfdca3cf"},
- {file = "pygit2-1.5.0-cp39-cp39-win32.whl", hash = "sha256:40c2a6f15f916fc5ff7be191daf1d0308eb081c8a7e24db1263f7d3e4fffbc65"},
- {file = "pygit2-1.5.0-cp39-cp39-win_amd64.whl", hash = "sha256:b953b84871bf21581019c0b2b3c8c7613b1543c6b9b726d22d0d9838ed835a83"},
- {file = "pygit2-1.5.0.tar.gz", hash = "sha256:9711367bd05f96ad6fc9c91d88fa96126ba2d1f1c3ea6f23c11402c243d66a20"},
+ {file = "pygit2-1.9.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:2656ec2576151eeeba8a85fae935c755b06e33e3da8bad049dc590217faee2fa"},
+ {file = "pygit2-1.9.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:073c4c20c1c3ce8941957fa3b8044dd03c9776b48b5ab81f859fc9241a276176"},
+ {file = "pygit2-1.9.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:143a4e12f52d9d7be4c60d7f5e6d1770220e67e48e0f7c4e6cee9d0a6a2078aa"},
+ {file = "pygit2-1.9.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f35cb840757ab16155201d8dee30cd2ace0fda99bc80078164bbc96100e5dd28"},
+ {file = "pygit2-1.9.1-cp310-cp310-win32.whl", hash = "sha256:72bb2a903d325b25e74d9639b1558c54fed446aeea859c3cc92b7b0ac3193cdb"},
+ {file = "pygit2-1.9.1-cp310-cp310-win_amd64.whl", hash = "sha256:7928d18671e8dfb877d91c93ea19c7262a8631374217ef10a1a9f045f2f673e5"},
+ {file = "pygit2-1.9.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b342f465c3ae0bd3dfcd679251a44a16909508a3422be6352c61bce14ed6abd9"},
+ {file = "pygit2-1.9.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d1724987886d23cf8d6d901ad9333fe6929fa80460878eac0e3da6a91bb5a1c6"},
+ {file = "pygit2-1.9.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd7b23a9494b3f91a781b17a23289ec60e2af36846c496abdc6249b33f3e1513"},
+ {file = "pygit2-1.9.1-cp37-cp37m-win32.whl", hash = "sha256:e94721b6384843576102bd18d409cc0f2bc693e35ab4900346d6a7abbc2a4f2c"},
+ {file = "pygit2-1.9.1-cp37-cp37m-win_amd64.whl", hash = "sha256:871cc88bf81e8acd33554bc231e6b6dbccbbc489bbde93d1f1beced08015ab27"},
+ {file = "pygit2-1.9.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:0590bf04f68e49a089cad7431230c5106d22988ff49f54f7ca11f69437f82d20"},
+ {file = "pygit2-1.9.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:5d79812d677e4a87555245a31737c563cd774ba8c3506bf6f98bdc318ae70cf5"},
+ {file = "pygit2-1.9.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b2803dae866f2759318c4927c72a973aa6fb0ad87d4d6be67cab9ce6edff997e"},
+ {file = "pygit2-1.9.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4d10ff2de10d986ae4299f9c9c1fb38e531aed399d69d4b75a7fa0f51d8eaa4b"},
+ {file = "pygit2-1.9.1-cp38-cp38-win32.whl", hash = "sha256:c3e2889e85468e64fd2a18c9fbbeabb885aa98dfcfb9ad3e6f6efab1f6503d5d"},
+ {file = "pygit2-1.9.1-cp38-cp38-win_amd64.whl", hash = "sha256:f95484e7077ce332d1b0647a095733fd4bff1fafd172c0d3a2cb4893412fe5ae"},
+ {file = "pygit2-1.9.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:29b643ef1d5c2eab9df1c2ce0add5392578080dc32d9a65de7c5496a686a02b4"},
+ {file = "pygit2-1.9.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6895aa2e9ccdfcf2028e4b1dc0da90e2b01aff1e419f51696d0eca67b0a65d2b"},
+ {file = "pygit2-1.9.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ac9181259ca653da4965528ada6a1fa92455d0945b1c05a6f2092ab5a6ee4f77"},
+ {file = "pygit2-1.9.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7953a8914b87f1e835d6b1c65d529750d46e1571c5f34dabe2299d5b57b90333"},
+ {file = "pygit2-1.9.1-cp39-cp39-win32.whl", hash = "sha256:1aa1cfa15f3492e36afe0ba7326e9873192e4fad0c5348a1a7c4b34d97f8d91c"},
+ {file = "pygit2-1.9.1-cp39-cp39-win_amd64.whl", hash = "sha256:ea579d4d80408268196117ea9d4177cd02362c1bcbf7780d458305d84ff3dcb2"},
+ {file = "pygit2-1.9.1-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:f54c473ce9bbd6fea42cee70356273f724f11b9b22304718d52c0184fb5d96ec"},
+ {file = "pygit2-1.9.1-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2b41fdc7ef568937692aeab6ea0a63d2f321297128fe40ba0a8e4ae49ca8de6c"},
+ {file = "pygit2-1.9.1-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c4daf5803ef250203464a7c36c39319cb261044d04f2ed1223b94168c3b7a233"},
+ {file = "pygit2-1.9.1-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:f2a60367f1d97aa750faeabb46a2221a16bbc7c3ebe1a54945dd57a8c923718c"},
+ {file = "pygit2-1.9.1-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1c5f90ec59f12c3aa94e6f4009fc2a1c9441eb28bb4c909663267fcf9e41a2ef"},
+ {file = "pygit2-1.9.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b3ef8c18db74d433e4f49ed7271fd521f09a76e7fa8879fa42559765dae52524"},
+ {file = "pygit2-1.9.1.tar.gz", hash = "sha256:ef6479c3b6192825316b056336db77ebff6e7849aeb1fbb88b76001ac337b9c9"},
]
pyparsing = [
- {file = "pyparsing-2.4.7-py2.py3-none-any.whl", hash = "sha256:ef9d7589ef3c200abe66653d3f1ab1033c3c419ae9b9bdb1240a85b024efc88b"},
- {file = "pyparsing-2.4.7.tar.gz", hash = "sha256:c203ec8783bf771a155b207279b9bccb8dea02d8f0c9e5f8ead507bc3246ecc1"},
+ {file = "pyparsing-3.0.8-py3-none-any.whl", hash = "sha256:ef7b523f6356f763771559412c0d7134753f037822dad1b16945b7b846f7ad06"},
+ {file = "pyparsing-3.0.8.tar.gz", hash = "sha256:7bf433498c016c4314268d95df76c81b842a4cb2b276fa3312cfb1e1d85f6954"},
]
pyrsistent = [
- {file = "pyrsistent-0.18.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:f4c8cabb46ff8e5d61f56a037974228e978f26bfefce4f61a4b1ac0ba7a2ab72"},
- {file = "pyrsistent-0.18.0-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:da6e5e818d18459fa46fac0a4a4e543507fe1110e808101277c5a2b5bab0cd2d"},
- {file = "pyrsistent-0.18.0-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:5e4395bbf841693eaebaa5bb5c8f5cdbb1d139e07c975c682ec4e4f8126e03d2"},
- {file = "pyrsistent-0.18.0-cp36-cp36m-win32.whl", hash = "sha256:527be2bfa8dc80f6f8ddd65242ba476a6c4fb4e3aedbf281dfbac1b1ed4165b1"},
- {file = "pyrsistent-0.18.0-cp36-cp36m-win_amd64.whl", hash = "sha256:2aaf19dc8ce517a8653746d98e962ef480ff34b6bc563fc067be6401ffb457c7"},
- {file = "pyrsistent-0.18.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:58a70d93fb79dc585b21f9d72487b929a6fe58da0754fa4cb9f279bb92369396"},
- {file = "pyrsistent-0.18.0-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:4916c10896721e472ee12c95cdc2891ce5890898d2f9907b1b4ae0f53588b710"},
- {file = "pyrsistent-0.18.0-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:73ff61b1411e3fb0ba144b8f08d6749749775fe89688093e1efef9839d2dcc35"},
- {file = "pyrsistent-0.18.0-cp37-cp37m-win32.whl", hash = "sha256:b29b869cf58412ca5738d23691e96d8aff535e17390128a1a52717c9a109da4f"},
- {file = "pyrsistent-0.18.0-cp37-cp37m-win_amd64.whl", hash = "sha256:097b96f129dd36a8c9e33594e7ebb151b1515eb52cceb08474c10a5479e799f2"},
- {file = "pyrsistent-0.18.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:772e94c2c6864f2cd2ffbe58bb3bdefbe2a32afa0acb1a77e472aac831f83427"},
- {file = "pyrsistent-0.18.0-cp38-cp38-manylinux1_i686.whl", hash = "sha256:c1a9ff320fa699337e05edcaae79ef8c2880b52720bc031b219e5b5008ebbdef"},
- {file = "pyrsistent-0.18.0-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:cd3caef37a415fd0dae6148a1b6957a8c5f275a62cca02e18474608cb263640c"},
- {file = "pyrsistent-0.18.0-cp38-cp38-win32.whl", hash = "sha256:e79d94ca58fcafef6395f6352383fa1a76922268fa02caa2272fff501c2fdc78"},
- {file = "pyrsistent-0.18.0-cp38-cp38-win_amd64.whl", hash = "sha256:a0c772d791c38bbc77be659af29bb14c38ced151433592e326361610250c605b"},
- {file = "pyrsistent-0.18.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d5ec194c9c573aafaceebf05fc400656722793dac57f254cd4741f3c27ae57b4"},
- {file = "pyrsistent-0.18.0-cp39-cp39-manylinux1_i686.whl", hash = "sha256:6b5eed00e597b5b5773b4ca30bd48a5774ef1e96f2a45d105db5b4ebb4bca680"},
- {file = "pyrsistent-0.18.0-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:48578680353f41dca1ca3dc48629fb77dfc745128b56fc01096b2530c13fd426"},
- {file = "pyrsistent-0.18.0-cp39-cp39-win32.whl", hash = "sha256:f3ef98d7b76da5eb19c37fda834d50262ff9167c65658d1d8f974d2e4d90676b"},
- {file = "pyrsistent-0.18.0-cp39-cp39-win_amd64.whl", hash = "sha256:404e1f1d254d314d55adb8d87f4f465c8693d6f902f67eb6ef5b4526dc58e6ea"},
- {file = "pyrsistent-0.18.0.tar.gz", hash = "sha256:773c781216f8c2900b42a7b638d5b517bb134ae1acbebe4d1e8f1f41ea60eb4b"},
+ {file = "pyrsistent-0.18.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:df46c854f490f81210870e509818b729db4488e1f30f2a1ce1698b2295a878d1"},
+ {file = "pyrsistent-0.18.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d45866ececf4a5fff8742c25722da6d4c9e180daa7b405dc0a2a2790d668c26"},
+ {file = "pyrsistent-0.18.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4ed6784ceac462a7d6fcb7e9b663e93b9a6fb373b7f43594f9ff68875788e01e"},
+ {file = "pyrsistent-0.18.1-cp310-cp310-win32.whl", hash = "sha256:e4f3149fd5eb9b285d6bfb54d2e5173f6a116fe19172686797c056672689daf6"},
+ {file = "pyrsistent-0.18.1-cp310-cp310-win_amd64.whl", hash = "sha256:636ce2dc235046ccd3d8c56a7ad54e99d5c1cd0ef07d9ae847306c91d11b5fec"},
+ {file = "pyrsistent-0.18.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:e92a52c166426efbe0d1ec1332ee9119b6d32fc1f0bbfd55d5c1088070e7fc1b"},
+ {file = "pyrsistent-0.18.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d7a096646eab884bf8bed965bad63ea327e0d0c38989fc83c5ea7b8a87037bfc"},
+ {file = "pyrsistent-0.18.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cdfd2c361b8a8e5d9499b9082b501c452ade8bbf42aef97ea04854f4a3f43b22"},
+ {file = "pyrsistent-0.18.1-cp37-cp37m-win32.whl", hash = "sha256:7ec335fc998faa4febe75cc5268a9eac0478b3f681602c1f27befaf2a1abe1d8"},
+ {file = "pyrsistent-0.18.1-cp37-cp37m-win_amd64.whl", hash = "sha256:6455fc599df93d1f60e1c5c4fe471499f08d190d57eca040c0ea182301321286"},
+ {file = "pyrsistent-0.18.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:fd8da6d0124efa2f67d86fa70c851022f87c98e205f0594e1fae044e7119a5a6"},
+ {file = "pyrsistent-0.18.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7bfe2388663fd18bd8ce7db2c91c7400bf3e1a9e8bd7d63bf7e77d39051b85ec"},
+ {file = "pyrsistent-0.18.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0e3e1fcc45199df76053026a51cc59ab2ea3fc7c094c6627e93b7b44cdae2c8c"},
+ {file = "pyrsistent-0.18.1-cp38-cp38-win32.whl", hash = "sha256:b568f35ad53a7b07ed9b1b2bae09eb15cdd671a5ba5d2c66caee40dbf91c68ca"},
+ {file = "pyrsistent-0.18.1-cp38-cp38-win_amd64.whl", hash = "sha256:d1b96547410f76078eaf66d282ddca2e4baae8964364abb4f4dcdde855cd123a"},
+ {file = "pyrsistent-0.18.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:f87cc2863ef33c709e237d4b5f4502a62a00fab450c9e020892e8e2ede5847f5"},
+ {file = "pyrsistent-0.18.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6bc66318fb7ee012071b2792024564973ecc80e9522842eb4e17743604b5e045"},
+ {file = "pyrsistent-0.18.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:914474c9f1d93080338ace89cb2acee74f4f666fb0424896fcfb8d86058bf17c"},
+ {file = "pyrsistent-0.18.1-cp39-cp39-win32.whl", hash = "sha256:1b34eedd6812bf4d33814fca1b66005805d3640ce53140ab8bbb1e2651b0d9bc"},
+ {file = "pyrsistent-0.18.1-cp39-cp39-win_amd64.whl", hash = "sha256:e24a828f57e0c337c8d8bb9f6b12f09dfdf0273da25fda9e314f0b684b415a07"},
+ {file = "pyrsistent-0.18.1.tar.gz", hash = "sha256:d4d61f8b993a7255ba714df3aca52700f8125289f84f704cf80916517c46eb96"},
]
pytest = [
- {file = "pytest-6.2.4-py3-none-any.whl", hash = "sha256:91ef2131a9bd6be8f76f1f08eac5c5317221d6ad1e143ae03894b862e8976890"},
- {file = "pytest-6.2.4.tar.gz", hash = "sha256:50bcad0a0b9c5a72c8e4e7c9855a3ad496ca6a881a3641b4260605450772c54b"},
+ {file = "pytest-6.2.5-py3-none-any.whl", hash = "sha256:7310f8d27bc79ced999e760ca304d69f6ba6c6649c0b60fb0e04a4a77cacc134"},
+ {file = "pytest-6.2.5.tar.gz", hash = "sha256:131b36680866a76e6781d13f101efb86cf674ebb9762eb70d3082b6f29889e89"},
]
python-dateutil = [
{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"},
]
pyyaml = [
- {file = "PyYAML-5.4.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:3b2b1824fe7112845700f815ff6a489360226a5609b96ec2190a45e62a9fc922"},
- {file = "PyYAML-5.4.1-cp27-cp27m-win32.whl", hash = "sha256:129def1b7c1bf22faffd67b8f3724645203b79d8f4cc81f674654d9902cb4393"},
- {file = "PyYAML-5.4.1-cp27-cp27m-win_amd64.whl", hash = "sha256:4465124ef1b18d9ace298060f4eccc64b0850899ac4ac53294547536533800c8"},
- {file = "PyYAML-5.4.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:bb4191dfc9306777bc594117aee052446b3fa88737cd13b7188d0e7aa8162185"},
- {file = "PyYAML-5.4.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:6c78645d400265a062508ae399b60b8c167bf003db364ecb26dcab2bda048253"},
- {file = "PyYAML-5.4.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:4e0583d24c881e14342eaf4ec5fbc97f934b999a6828693a99157fde912540cc"},
- {file = "PyYAML-5.4.1-cp36-cp36m-win32.whl", hash = "sha256:3bd0e463264cf257d1ffd2e40223b197271046d09dadf73a0fe82b9c1fc385a5"},
- {file = "PyYAML-5.4.1-cp36-cp36m-win_amd64.whl", hash = "sha256:e4fac90784481d221a8e4b1162afa7c47ed953be40d31ab4629ae917510051df"},
- {file = "PyYAML-5.4.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:5accb17103e43963b80e6f837831f38d314a0495500067cb25afab2e8d7a4018"},
- {file = "PyYAML-5.4.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:e1d4970ea66be07ae37a3c2e48b5ec63f7ba6804bdddfdbd3cfd954d25a82e63"},
- {file = "PyYAML-5.4.1-cp37-cp37m-win32.whl", hash = "sha256:dd5de0646207f053eb0d6c74ae45ba98c3395a571a2891858e87df7c9b9bd51b"},
- {file = "PyYAML-5.4.1-cp37-cp37m-win_amd64.whl", hash = "sha256:08682f6b72c722394747bddaf0aa62277e02557c0fd1c42cb853016a38f8dedf"},
- {file = "PyYAML-5.4.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d2d9808ea7b4af864f35ea216be506ecec180628aced0704e34aca0b040ffe46"},
- {file = "PyYAML-5.4.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:8c1be557ee92a20f184922c7b6424e8ab6691788e6d86137c5d93c1a6ec1b8fb"},
- {file = "PyYAML-5.4.1-cp38-cp38-win32.whl", hash = "sha256:fa5ae20527d8e831e8230cbffd9f8fe952815b2b7dae6ffec25318803a7528fc"},
- {file = "PyYAML-5.4.1-cp38-cp38-win_amd64.whl", hash = "sha256:0f5f5786c0e09baddcd8b4b45f20a7b5d61a7e7e99846e3c799b05c7c53fa696"},
- {file = "PyYAML-5.4.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:294db365efa064d00b8d1ef65d8ea2c3426ac366c0c4368d930bf1c5fb497f77"},
- {file = "PyYAML-5.4.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:74c1485f7707cf707a7aef42ef6322b8f97921bd89be2ab6317fd782c2d53183"},
- {file = "PyYAML-5.4.1-cp39-cp39-win32.whl", hash = "sha256:49d4cdd9065b9b6e206d0595fee27a96b5dd22618e7520c33204a4a3239d5b10"},
- {file = "PyYAML-5.4.1-cp39-cp39-win_amd64.whl", hash = "sha256:c20cfa2d49991c8b4147af39859b167664f2ad4561704ee74c1de03318e898db"},
- {file = "PyYAML-5.4.1.tar.gz", hash = "sha256:607774cbba28732bfa802b54baa7484215f530991055bb562efbed5b2f20a45e"},
+ {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"},
+ {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a80a78046a72361de73f8f395f1f1e49f956c6be882eed58505a15f3e430962b"},
+ {file = "PyYAML-6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f84fbc98b019fef2ee9a1cb3ce93e3187a6df0b2538a651bfb890254ba9f90b5"},
+ {file = "PyYAML-6.0-cp310-cp310-win32.whl", hash = "sha256:2cd5df3de48857ed0544b34e2d40e9fac445930039f3cfe4bcc592a1f836d513"},
+ {file = "PyYAML-6.0-cp310-cp310-win_amd64.whl", hash = "sha256:daf496c58a8c52083df09b80c860005194014c3698698d1a57cbcfa182142a3a"},
+ {file = "PyYAML-6.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:897b80890765f037df3403d22bab41627ca8811ae55e9a722fd0392850ec4d86"},
+ {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50602afada6d6cbfad699b0c7bb50d5ccffa7e46a3d738092afddc1f9758427f"},
+ {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:48c346915c114f5fdb3ead70312bd042a953a8ce5c7106d5bfb1a5254e47da92"},
+ {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:98c4d36e99714e55cfbaaee6dd5badbc9a1ec339ebfc3b1f52e293aee6bb71a4"},
+ {file = "PyYAML-6.0-cp36-cp36m-win32.whl", hash = "sha256:0283c35a6a9fbf047493e3a0ce8d79ef5030852c51e9d911a27badfde0605293"},
+ {file = "PyYAML-6.0-cp36-cp36m-win_amd64.whl", hash = "sha256:07751360502caac1c067a8132d150cf3d61339af5691fe9e87803040dbc5db57"},
+ {file = "PyYAML-6.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:819b3830a1543db06c4d4b865e70ded25be52a2e0631ccd2f6a47a2822f2fd7c"},
+ {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:473f9edb243cb1935ab5a084eb238d842fb8f404ed2193a915d1784b5a6b5fc0"},
+ {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0ce82d761c532fe4ec3f87fc45688bdd3a4c1dc5e0b4a19814b9009a29baefd4"},
+ {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:231710d57adfd809ef5d34183b8ed1eeae3f76459c18fb4a0b373ad56bedcdd9"},
+ {file = "PyYAML-6.0-cp37-cp37m-win32.whl", hash = "sha256:c5687b8d43cf58545ade1fe3e055f70eac7a5a1a0bf42824308d868289a95737"},
+ {file = "PyYAML-6.0-cp37-cp37m-win_amd64.whl", hash = "sha256:d15a181d1ecd0d4270dc32edb46f7cb7733c7c508857278d3d378d14d606db2d"},
+ {file = "PyYAML-6.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0b4624f379dab24d3725ffde76559cff63d9ec94e1736b556dacdfebe5ab6d4b"},
+ {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:213c60cd50106436cc818accf5baa1aba61c0189ff610f64f4a3e8c6726218ba"},
+ {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9fa600030013c4de8165339db93d182b9431076eb98eb40ee068700c9c813e34"},
+ {file = "PyYAML-6.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:277a0ef2981ca40581a47093e9e2d13b3f1fbbeffae064c1d21bfceba2030287"},
+ {file = "PyYAML-6.0-cp38-cp38-win32.whl", hash = "sha256:d4eccecf9adf6fbcc6861a38015c2a64f38b9d94838ac1810a9023a0609e1b78"},
+ {file = "PyYAML-6.0-cp38-cp38-win_amd64.whl", hash = "sha256:1e4747bc279b4f613a09eb64bba2ba602d8a6664c6ce6396a4d0cd413a50ce07"},
+ {file = "PyYAML-6.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:055d937d65826939cb044fc8c9b08889e8c743fdc6a32b33e2390f66013e449b"},
+ {file = "PyYAML-6.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e61ceaab6f49fb8bdfaa0f92c4b57bcfbea54c09277b1b4f7ac376bfb7a7c174"},
+ {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d67d839ede4ed1b28a4e8909735fc992a923cdb84e618544973d7dfc71540803"},
+ {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cba8c411ef271aa037d7357a2bc8f9ee8b58b9965831d9e51baf703280dc73d3"},
+ {file = "PyYAML-6.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:40527857252b61eacd1d9af500c3337ba8deb8fc298940291486c465c8b46ec0"},
+ {file = "PyYAML-6.0-cp39-cp39-win32.whl", hash = "sha256:b5b9eccad747aabaaffbc6064800670f0c297e52c12754eb1d976c57e4f74dcb"},
+ {file = "PyYAML-6.0-cp39-cp39-win_amd64.whl", hash = "sha256:b3d267842bf12586ba6c734f89d1f5b871df0273157918b0ccefa29deb05c21c"},
+ {file = "PyYAML-6.0.tar.gz", hash = "sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2"},
]
requests = [
- {file = "requests-2.26.0-py2.py3-none-any.whl", hash = "sha256:6c1246513ecd5ecd4528a0906f910e8f0f9c6b8ec72030dc9fd154dc1a6efd24"},
- {file = "requests-2.26.0.tar.gz", hash = "sha256:b8aa58f8cf793ffd8782d3d8cb19e66ef36f7aba4353eec859e74678b01b07a7"},
+ {file = "requests-2.27.1-py2.py3-none-any.whl", hash = "sha256:f22fa1e554c9ddfd16e6e41ac79759e17be9e492b3587efa038054674760e72d"},
+ {file = "requests-2.27.1.tar.gz", hash = "sha256:68d7c56fd5a8999887728ef304a6d12edc7be74f1cfa47714fc8b414525c9a61"},
]
s3transfer = [
- {file = "s3transfer-0.5.0-py3-none-any.whl", hash = "sha256:9c1dc369814391a6bda20ebbf4b70a0f34630592c9aa520856bf384916af2803"},
- {file = "s3transfer-0.5.0.tar.gz", hash = "sha256:50ed823e1dc5868ad40c8dc92072f757aa0e653a192845c94a3b676f4a62da4c"},
+ {file = "s3transfer-0.5.2-py3-none-any.whl", hash = "sha256:7a6f4c4d1fdb9a2b640244008e142cbc2cd3ae34b386584ef044dd0f27101971"},
+ {file = "s3transfer-0.5.2.tar.gz", hash = "sha256:95c58c194ce657a5f4fb0b9e60a84968c808888aed628cd98ab8771fe1db98ed"},
]
six = [
{file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"},
@@ -648,15 +719,14 @@ toml = [
{file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"},
]
typing-extensions = [
- {file = "typing_extensions-3.10.0.0-py2-none-any.whl", hash = "sha256:0ac0f89795dd19de6b97debb0c6af1c70987fd80a2d62d1958f7e56fcc31b497"},
- {file = "typing_extensions-3.10.0.0-py3-none-any.whl", hash = "sha256:779383f6086d90c99ae41cf0ff39aac8a7937a9283ce0a414e5dd782f4c94a84"},
- {file = "typing_extensions-3.10.0.0.tar.gz", hash = "sha256:50b6f157849174217d0656f99dc82fe932884fb250826c18350e159ec6cdf342"},
+ {file = "typing_extensions-4.2.0-py3-none-any.whl", hash = "sha256:6657594ee297170d19f67d55c05852a874e7eb634f4f753dbd667855e07c1708"},
+ {file = "typing_extensions-4.2.0.tar.gz", hash = "sha256:f1c24655a0da0d1b67f07e17a5e6b2a105894e6824b92096378bb3668ef02376"},
]
urllib3 = [
- {file = "urllib3-1.26.6-py2.py3-none-any.whl", hash = "sha256:39fb8672126159acb139a7718dd10806104dec1e2f0f6c88aab05d17df10c8d4"},
- {file = "urllib3-1.26.6.tar.gz", hash = "sha256:f57b4c16c62fa2760b7e3d97c35b255512fb6b59a259730f36ba32ce9f8e342f"},
+ {file = "urllib3-1.26.9-py2.py3-none-any.whl", hash = "sha256:44ece4d53fb1706f667c9bd1c648f5469a2ec925fcf3a776667042d645472c14"},
+ {file = "urllib3-1.26.9.tar.gz", hash = "sha256:aabaf16477806a5e1dd19aa41f8c2b7950dd3c746362d7e3223dbe6de6ac448e"},
]
zipp = [
- {file = "zipp-3.5.0-py3-none-any.whl", hash = "sha256:957cfda87797e389580cb8b9e3870841ca991e2125350677b2ca83a0e99390a3"},
- {file = "zipp-3.5.0.tar.gz", hash = "sha256:f5812b1e007e48cff63449a5e9f4e7ebea716b4111f9c4f9a645f91d579bf0c4"},
+ {file = "zipp-3.8.0-py3-none-any.whl", hash = "sha256:c4f6e5bbf48e74f7a38e7cc5b0480ff42b0ae5178957d564d18932525d5cf099"},
+ {file = "zipp-3.8.0.tar.gz", hash = "sha256:56bf8aadb83c24db6c4b577e13de374ccfb67da2078beba1d037c17980bf43ad"},
]
diff --git a/tools/c7n_policystream/pyproject.toml b/tools/c7n_policystream/pyproject.toml
index 565d3449571..bca0b8b20db 100644
--- a/tools/c7n_policystream/pyproject.toml
+++ b/tools/c7n_policystream/pyproject.toml
@@ -1,6 +1,6 @@
[tool.poetry]
name = "c7n_policystream"
-version = "0.4.13"
+version = "0.4.15"
description = "Cloud Custodian - Git Commits as Logical Policy Changes"
readme = "README.md"
homepage = "https://cloudcustodian.io"
@@ -19,11 +19,11 @@ packages = [{"include" = "policystream.py"}]
c7n-policystream = 'policystream:cli'
[tool.poetry.dependencies]
-python = "^3.6"
-click = "^7.0"
+python = "^3.7"
+click = "^8.0"
requests = "^2.22.0"
-pyyaml = "^5.3"
-pygit2 = "~1.5"
+pyyaml = ">=5.4.0"
+pygit2 = "~1.9"
boto3 = "^1.12.0"
[tool.poetry.dev-dependencies]
diff --git a/tools/c7n_policystream/requirements.txt b/tools/c7n_policystream/requirements.txt
index 253464a89db..542ad06593c 100644
--- a/tools/c7n_policystream/requirements.txt
+++ b/tools/c7n_policystream/requirements.txt
@@ -1,17 +1,21 @@
-boto3==1.18.21; python_version >= "3.6"
-botocore==1.21.21; python_version >= "3.6"
-cached-property==1.5.2
-certifi==2021.5.30; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0"
-cffi==1.14.6
-charset-normalizer==2.0.4; python_full_version >= "3.6.0" and python_version >= "3"
-click==7.1.2; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.5.0")
-idna==3.2; python_version >= "3.5" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.5"
-jmespath==0.10.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.3.0" and python_version >= "3.6"
-pycparser==2.20; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0"
-pygit2==1.5.0
+boto3==1.21.42; python_version >= "3.6"
+botocore==1.24.42; python_version >= "3.6"
+cached-property==1.5.2; python_version < "3.8" and python_version >= "3.7"
+certifi==2021.10.8; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0"
+cffi==1.15.0; python_version >= "3.7"
+charset-normalizer==2.0.12; python_full_version >= "3.6.0" and python_version >= "3"
+click==8.1.2; python_version >= "3.7"
+colorama==0.4.4; python_version >= "3.7" and python_full_version < "3.0.0" and platform_system == "Windows" or platform_system == "Windows" and python_version >= "3.7" and python_full_version >= "3.5.0"
+idna==3.3; python_version >= "3.5" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.5"
+importlib-metadata==4.11.3; python_version < "3.8" and python_version >= "3.7"
+jmespath==1.0.0; python_version >= "3.7"
+pycparser==2.21; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7"
+pygit2==1.9.1; python_version >= "3.7"
python-dateutil==2.8.2; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.3.0" and python_version >= "3.6"
-pyyaml==5.4.1; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.6.0")
-requests==2.26.0; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.6.0")
-s3transfer==0.5.0; python_version >= "3.6"
+pyyaml==6.0; python_version >= "3.6"
+requests==2.27.1; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.6.0")
+s3transfer==0.5.2; python_version >= "3.6"
six==1.16.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.3.0" and python_version >= "3.6"
-urllib3==1.26.6; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version < "4" and python_version >= "3.6"
+typing-extensions==4.2.0; python_version < "3.8" and python_version >= "3.7"
+urllib3==1.26.9; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version < "4" and python_version >= "3.6"
+zipp==3.8.0; python_version < "3.8" and python_version >= "3.7"
diff --git a/tools/c7n_policystream/setup.py b/tools/c7n_policystream/setup.py
index ff38c4bb589..355ebdb976e 100644
--- a/tools/c7n_policystream/setup.py
+++ b/tools/c7n_policystream/setup.py
@@ -6,35 +6,37 @@
modules = \
['policystream']
install_requires = \
-['argcomplete (>=1.12.3,<2.0.0)',
- 'attrs (>=21.2.0,<22.0.0)',
- 'boto3 (>=1.18.21,<2.0.0)',
+['argcomplete (>=2.0.0,<3.0.0)',
+ 'attrs (>=21.4.0,<22.0.0)',
+ 'boto3 (>=1.21.42,<2.0.0)',
'boto3>=1.12.0,<2.0.0',
- 'botocore (>=1.21.21,<2.0.0)',
- 'c7n (>=0.9.14,<0.10.0)',
- 'click>=7.0,<8.0',
- 'importlib-metadata (>=4.6.4,<5.0.0)',
- 'jmespath (>=0.10.0,<0.11.0)',
- 'jsonschema (>=3.2.0,<4.0.0)',
- 'pygit2>=1.5,<1.6',
- 'pyrsistent (>=0.18.0,<0.19.0)',
+ 'botocore (>=1.24.42,<2.0.0)',
+ 'c7n (>=0.9.16,<0.10.0)',
+ 'click>=8.0,<9.0',
+ 'docutils (>=0.17.1,<0.18.0)',
+ 'importlib-metadata (>=4.11.3,<5.0.0)',
+ 'importlib-resources (>=5.7.1,<6.0.0)',
+ 'jmespath (>=1.0.0,<2.0.0)',
+ 'jsonschema (>=4.4.0,<5.0.0)',
+ 'pygit2>=1.9,<1.10',
+ 'pyrsistent (>=0.18.1,<0.19.0)',
'python-dateutil (>=2.8.2,<3.0.0)',
- 'pyyaml (>=5.4.1,<6.0.0)',
- 'pyyaml>=5.3,<6.0',
+ 'pyyaml (>=6.0,<7.0)',
+ 'pyyaml>=5.4.0',
'requests>=2.22.0,<3.0.0',
- 's3transfer (>=0.5.0,<0.6.0)',
+ 's3transfer (>=0.5.2,<0.6.0)',
'six (>=1.16.0,<2.0.0)',
'tabulate (>=0.8.9,<0.9.0)',
- 'typing-extensions (>=3.10.0.0,<4.0.0.0)',
- 'urllib3 (>=1.26.6,<2.0.0)',
- 'zipp (>=3.5.0,<4.0.0)']
+ 'typing-extensions (>=4.2.0,<5.0.0)',
+ 'urllib3 (>=1.26.9,<2.0.0)',
+ 'zipp (>=3.8.0,<4.0.0)']
entry_points = \
{'console_scripts': ['c7n-policystream = policystream:cli']}
setup_kwargs = {
'name': 'c7n-policystream',
- 'version': '0.4.13',
+ 'version': '0.4.15',
'description': 'Cloud Custodian - Git Commits as Logical Policy Changes',
'license': 'Apache-2.0',
'classifiers': [
@@ -42,7 +44,7 @@
'Topic :: System :: Systems Administration',
'Topic :: System :: Distributed Computing'
],
- 'long_description': '# c7n-policystream: Policy Changes from Git\n\n[//]: # ( !!! IMPORTANT !!! )\n[//]: # (This file is moved during document generation.)\n[//]: # (Only edit the original document at ./tools/c7n_policystream/README.md)\n\nUsing custodian in accordance with infrastructure as code principles,\nwe store policy assets in a versioned control repository. This\nprovides for an audit log and facilitates code reviews. However this\ncapability is primarily of use to humans making semantic interpretations\nof changes.\n\nThis script also provides logical custodian policy changes over a git\nrepo and allows streaming those changes for machine readable/application\nconsumption. Its typically used as a basis for CI integrations or indexes\nover policies.\n\nTwo example use cases:\n\n - Doing dryrun only on changed policies within a pull request\n - Constructing a database of policy changes.\n\nPolicystream works on individual github repositories, or per Github integration\nacross an organization\'s set of repositories.\n\n## Install\n\npolicystream can be installed via pypi, provided the require pre-requisites\nlibraries are available (libgit2 > 0.26)\n\n```\npip install c7n-policystream\n```\n\nDocker images available soon, see build for constructing your own.\n\n## Build\n\nAlternatively a docker image can be built as follows\n\n```shell\n# Note must be top level directory of checkout\ncd cloud-custodian\n\ndocker build -t policystream:latest -f tools/c7n_policystream/Dockerfile .\n\ndocker run --mount src="$(pwd)",target=/repos,type=bind policystream:latest\n```\n\n## Usage\n\nStreaming use case (default stream is to stdout, also supports kinesis, rdbms and sqs)\n\n```\n $ c7n-policystream stream -r foo\n 2018-08-12 12:37:00,567: c7n.policystream:INFO Cloning repository: foo\n \n \n \n \n \n \n \n 2018-08-12 12:37:01,275: c7n.policystream:INFO Streamed 7 policy changes\n```\n\nPolicy diff between two source and target revision specs. If source\nand target are not specified default revision selection is dependent\non current working tree branch. The intent is for two use cases, if on\na non-master branch then show the diff to master. If on master show\nthe diff to previous commit on master. For repositories not using the\n`master` convention, please specify explicit source and target.\n\n\n```\n $ c7n-policystream diff -r foo -v\n```\n\nPull request use, output policies changes between current branch and master.\n\n```\n $ c7n-policystream diff -r foo\n policies:\n - filters:\n - {type: cross-account}\n name: lambda-access-check\n resource: aws.lambda\n```\n\n## Options\n\n```\n$ c7n-policystream --help\nUsage: c7n-policystream [OPTIONS] COMMAND [ARGS]...\n\n Policy changes from git history\n\nOptions:\n --help Show this message and exit.\n\nCommands:\n diff Policy diff between two arbitrary revisions.\n org-checkout Checkout repositories from a GitHub organization.\n org-stream Stream changes for repos in a GitHub organization.\n stream Stream git history policy changes to destination.\n```\n',
+ 'long_description': '# c7n-policystream: Policy Changes from Git\n\n% [comment]: # ( !!! IMPORTANT !!! )\n% [comment]: # (This file is moved during document generation.)\n% [comment]: # (Only edit the original document at ./tools/c7n_policystream/README.md)\n\nUsing custodian in accordance with infrastructure as code principles,\nwe store policy assets in a versioned control repository. This\nprovides for an audit log and facilitates code reviews. However this\ncapability is primarily of use to humans making semantic interpretations\nof changes.\n\nThis script also provides logical custodian policy changes over a git\nrepo and allows streaming those changes for machine readable/application\nconsumption. Its typically used as a basis for CI integrations or indexes\nover policies.\n\nTwo example use cases:\n\n - Doing dryrun only on changed policies within a pull request\n - Constructing a database of policy changes.\n\nPolicystream works on individual github repositories, or per Github integration\nacross an organization\'s set of repositories.\n\n## Install\n\npolicystream can be installed via pypi, provided the require pre-requisites\nlibraries are available (libgit2 > 0.26)\n\n```\npip install c7n-policystream\n```\n\nDocker images available soon, see build for constructing your own.\n\n## Build\n\nAlternatively a docker image can be built as follows\n\n```shell\n# Note must be top level directory of checkout\ncd cloud-custodian\n\ndocker build -t policystream:latest -f tools/c7n_policystream/Dockerfile .\n\ndocker run --mount src="$(pwd)",target=/repos,type=bind policystream:latest\n```\n\n## Usage\n\nStreaming use case (default stream is to stdout, also supports kinesis, rdbms and sqs)\n\n```\n $ c7n-policystream stream -r foo\n 2018-08-12 12:37:00,567: c7n.policystream:INFO Cloning repository: foo\n \n \n \n \n \n \n \n 2018-08-12 12:37:01,275: c7n.policystream:INFO Streamed 7 policy changes\n```\n\nPolicy diff between two source and target revision specs. If source\nand target are not specified default revision selection is dependent\non current working tree branch. The intent is for two use cases, if on\na non-master branch then show the diff to master. If on master show\nthe diff to previous commit on master. For repositories not using the\n`master` convention, please specify explicit source and target.\n\n\n```\n $ c7n-policystream diff -r foo -v\n```\n\nPull request use, output policies changes between current branch and master.\n\n```\n $ c7n-policystream diff -r foo\n policies:\n - filters:\n - {type: cross-account}\n name: lambda-access-check\n resource: aws.lambda\n```\n\n## Options\n\n```\n$ c7n-policystream --help\nUsage: c7n-policystream [OPTIONS] COMMAND [ARGS]...\n\n Policy changes from git history\n\nOptions:\n --help Show this message and exit.\n\nCommands:\n diff Policy diff between two arbitrary revisions.\n org-checkout Checkout repositories from a GitHub organization.\n org-stream Stream changes for repos in a GitHub organization.\n stream Stream git history policy changes to destination.\n```\n',
'long_description_content_type': 'text/markdown',
'author': 'Cloud Custodian Project',
'author_email': None,
@@ -52,7 +54,7 @@
'py_modules': modules,
'install_requires': install_requires,
'entry_points': entry_points,
- 'python_requires': '>=3.6,<4.0',
+ 'python_requires': '>=3.7,<4.0',
}
diff --git a/tools/c7n_policystream/tests/test_policystream.py b/tools/c7n_policystream/tests/test_policystream.py
index 1235a0bd4d7..b0f72bcf7a3 100644
--- a/tools/c7n_policystream/tests/test_policystream.py
+++ b/tools/c7n_policystream/tests/test_policystream.py
@@ -26,6 +26,9 @@
name = "WatchFolk"
"""
+if os.name == 'nt':
+ pytest.skip('policystream not supported on windows', allow_module_level=True)
+
class GitRepo:
@@ -34,7 +37,7 @@ def __init__(self, repo_path, git_config=None):
self.git_config = git_config or DEFAULT_CONFIG
def init(self):
- subprocess.check_output(['git', 'init'], cwd=self.repo_path)
+ subprocess.check_output(['git', 'init', '--initial-branch', 'main'], cwd=self.repo_path)
with open(os.path.join(self.repo_path, '.git', 'config'), 'w') as fh:
fh.write(self.git_config)
@@ -107,12 +110,12 @@ def setup_basic_repo(self):
git.commit('switch')
return git
- def test_cli_diff_master(self):
+ def test_cli_diff_main(self):
git = self.setup_basic_repo()
runner = CliRunner()
result = runner.invoke(
policystream.cli,
- ['diff', '-r', git.repo_path])
+ ['diff', '-r', git.repo_path, '--source', 'HEAD^', '--target', 'main'])
self.assertEqual(result.exit_code, 0)
self.assertEqual(
yaml.safe_load(result.stdout),
@@ -132,7 +135,7 @@ def test_cli_diff_branch(self):
runner = CliRunner()
result = runner.invoke(
policystream.cli,
- ['diff', '-r', git.repo_path])
+ ['diff', '-r', git.repo_path, '--source', 'main'])
self.assertEqual(result.exit_code, 0)
self.assertEqual(
yaml.safe_load(result.stdout),
diff --git a/tools/c7n_sphinxext/c7n_sphinxext/docgen.py b/tools/c7n_sphinxext/c7n_sphinxext/docgen.py
index 0a5460857d1..d5826ae6915 100644
--- a/tools/c7n_sphinxext/c7n_sphinxext/docgen.py
+++ b/tools/c7n_sphinxext/c7n_sphinxext/docgen.py
@@ -1,10 +1,12 @@
# Copyright The Cloud Custodian Authors.
# SPDX-License-Identifier: Apache-2.0
+import difflib
from functools import partial
import hashlib
import logging
import operator
import os
+import sys
import click
import yaml
@@ -60,6 +62,8 @@ def eperm(provider, el, r=None):
r = Bag({'type': 'instance'})
elif provider == 'azure':
r = Bag({'type': 'vm'})
+ elif provider == 'awscc':
+ r = Bag({'type': 'logs_loggroup'})
# print(f'policy construction lookup {r.type}.{element_type}.{el.type}')
@@ -247,23 +251,34 @@ def main(provider, output_dir, group_by):
try:
_main(provider, output_dir, group_by)
except Exception:
- import traceback, pdb, sys
+ import traceback, pdb
traceback.print_exc()
pdb.post_mortem(sys.exc_info()[-1])
-def write_modified_file(fpath, content):
+def write_modified_file(fpath, content, diff_changes=False):
content_md5 = hashlib.md5(content.encode('utf8'))
+ file_md5 = disk_content = None
if os.path.exists(fpath):
with open(fpath, 'rb') as fh:
- file_md5 = hashlib.md5(fh.read())
- else:
- file_md5 = None
+ disk_content = fh.read()
+
+ if disk_content:
+ file_md5 = hashlib.md5(disk_content)
+ disk_content = disk_content.decode('utf8')
if file_md5 and content_md5.hexdigest() == file_md5.hexdigest():
return False
+ if diff_changes and disk_content:
+ sys.stdout.writelines(
+ difflib.context_diff(
+ content.split('\n'),
+ disk_content.split('\n'),
+ fromfile='a/%s' % fpath, tofile='b/%s' % fpath)
+ )
+
with open(fpath, 'w') as fh:
fh.write(content)
return True
@@ -299,12 +314,22 @@ def _main(provider, output_dir, group_by):
# Create individual resources pages
for r in provider_class.resources.values():
+ # FIXME / TODO: temporary work arounds for a few types that have recursion
+ # in jsonschema on these types.
+ if provider == 'awscc' and r.type in (
+ 'wafv2_rulegroup',
+ 'wafv2_webacl',
+ 'amplifyuibuilder_theme',
+ 'amplifyuibuilder_component',
+ 'amplifybuilder_component'):
+ continue
rpath = resource_file_name(output_dir, r)
t = env.get_template('provider-resource.rst')
written += write_modified_file(
rpath, t.render(
provider_name=provider,
- resource=r))
+ resource=r),
+ diff_changes=not written)
# Create files for all groups
for key, group in sorted(groups.items()):
diff --git a/tools/c7n_sphinxext/poetry.lock b/tools/c7n_sphinxext/poetry.lock
index 1d32dfb2bd7..f33d586a1ce 100644
--- a/tools/c7n_sphinxext/poetry.lock
+++ b/tools/c7n_sphinxext/poetry.lock
@@ -8,31 +8,31 @@ python-versions = "*"
[[package]]
name = "argcomplete"
-version = "1.12.3"
+version = "2.0.0"
description = "Bash tab completion for argparse"
category = "dev"
optional = false
-python-versions = "*"
+python-versions = ">=3.6"
[package.dependencies]
-importlib-metadata = {version = ">=0.23,<5", markers = "python_version == \"3.6\" or python_version == \"3.7\""}
+importlib-metadata = {version = ">=0.23,<5", markers = "python_version == \"3.7\""}
[package.extras]
test = ["coverage", "flake8", "pexpect", "wheel"]
[[package]]
name = "attrs"
-version = "21.2.0"
+version = "21.4.0"
description = "Classes Without Boilerplate"
-category = "dev"
+category = "main"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
[package.extras]
-dev = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "furo", "sphinx", "sphinx-notfound-page", "pre-commit"]
+dev = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "furo", "sphinx", "sphinx-notfound-page", "pre-commit", "cloudpickle"]
docs = ["furo", "sphinx", "zope.interface", "sphinx-notfound-page"]
-tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface"]
-tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins"]
+tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "cloudpickle"]
+tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "cloudpickle"]
[[package]]
name = "babel"
@@ -47,15 +47,15 @@ pytz = ">=2015.7"
[[package]]
name = "boto3"
-version = "1.18.21"
+version = "1.21.42"
description = "The AWS SDK for Python"
category = "dev"
optional = false
python-versions = ">= 3.6"
[package.dependencies]
-botocore = ">=1.21.21,<1.22.0"
-jmespath = ">=0.7.1,<1.0.0"
+botocore = ">=1.24.42,<1.25.0"
+jmespath = ">=0.7.1,<2.0.0"
s3transfer = ">=0.5.0,<0.6.0"
[package.extras]
@@ -63,36 +63,37 @@ crt = ["botocore[crt] (>=1.21.0,<2.0a0)"]
[[package]]
name = "botocore"
-version = "1.21.21"
+version = "1.24.42"
description = "Low-level, data-driven core of boto 3."
category = "dev"
optional = false
python-versions = ">= 3.6"
[package.dependencies]
-jmespath = ">=0.7.1,<1.0.0"
+jmespath = ">=0.7.1,<2.0.0"
python-dateutil = ">=2.1,<3.0.0"
urllib3 = ">=1.25.4,<1.27"
[package.extras]
-crt = ["awscrt (==0.11.24)"]
+crt = ["awscrt (==0.13.8)"]
[[package]]
name = "c7n"
-version = "0.9.14"
+version = "0.9.16"
description = "Cloud Custodian - Policy Rules Engine"
category = "dev"
optional = false
-python-versions = "^3.6"
+python-versions = "^3.7"
develop = true
[package.dependencies]
-argcomplete = "^1.11.1"
+argcomplete = ">=1.12.3"
boto3 = "^1.12.31"
-importlib-metadata = ">1.7.0;python_version<3.8"
-jsonschema = "^3.2.0"
-python-dateutil = "^2.8.1"
-pyyaml = "^5.3"
+docutils = ">=0.14,<0.18"
+importlib-metadata = ">=4.11.1"
+jsonschema = ">=3.0.0"
+python-dateutil = "^2.8.2"
+pyyaml = ">=5.4.0"
tabulate = "^0.8.6"
[package.source]
@@ -101,7 +102,7 @@ url = "../.."
[[package]]
name = "certifi"
-version = "2021.5.30"
+version = "2021.10.8"
description = "Python package for providing Mozilla's CA Bundle."
category = "main"
optional = false
@@ -109,7 +110,7 @@ python-versions = "*"
[[package]]
name = "charset-normalizer"
-version = "2.0.4"
+version = "2.0.12"
description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet."
category = "main"
optional = false
@@ -120,11 +121,15 @@ unicode_backport = ["unicodedata2"]
[[package]]
name = "click"
-version = "7.1.2"
+version = "8.1.2"
description = "Composable command line interface toolkit"
category = "main"
optional = false
-python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
+python-versions = ">=3.7"
+
+[package.dependencies]
+colorama = {version = "*", markers = "platform_system == \"Windows\""}
+importlib-metadata = {version = "*", markers = "python_version < \"3.8\""}
[[package]]
name = "colorama"
@@ -155,7 +160,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
[[package]]
name = "idna"
-version = "3.2"
+version = "3.3"
description = "Internationalized Domain Names in Applications (IDNA)"
category = "main"
optional = false
@@ -163,7 +168,7 @@ python-versions = ">=3.5"
[[package]]
name = "imagesize"
-version = "1.2.0"
+version = "1.3.0"
description = "Getting image size from png/jpeg/jpeg2000/gif file"
category = "main"
optional = false
@@ -171,28 +176,43 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
[[package]]
name = "importlib-metadata"
-version = "4.6.4"
+version = "4.11.3"
description = "Read metadata from Python packages"
-category = "dev"
+category = "main"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.7"
[package.dependencies]
typing-extensions = {version = ">=3.6.4", markers = "python_version < \"3.8\""}
zipp = ">=0.5"
[package.extras]
-docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
+docs = ["sphinx", "jaraco.packaging (>=9)", "rst.linker (>=1.9)"]
perf = ["ipython"]
-testing = ["pytest (>=4.6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pep517", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy", "importlib-resources (>=1.3)"]
+testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)", "importlib-resources (>=1.3)"]
+
+[[package]]
+name = "importlib-resources"
+version = "5.7.1"
+description = "Read resources from Python packages"
+category = "dev"
+optional = false
+python-versions = ">=3.7"
+
+[package.dependencies]
+zipp = {version = ">=3.1.0", markers = "python_version < \"3.10\""}
+
+[package.extras]
+docs = ["sphinx", "jaraco.packaging (>=9)", "rst.linker (>=1.9)"]
+testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)"]
[[package]]
name = "jinja2"
-version = "3.0.1"
+version = "3.1.1"
description = "A very fast and expressive template engine."
category = "main"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.7"
[package.dependencies]
MarkupSafe = ">=2.0"
@@ -202,29 +222,30 @@ i18n = ["Babel (>=2.7)"]
[[package]]
name = "jmespath"
-version = "0.10.0"
+version = "1.0.0"
description = "JSON Matching Expressions"
category = "dev"
optional = false
-python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*"
+python-versions = ">=3.7"
[[package]]
name = "jsonschema"
-version = "3.2.0"
+version = "4.4.0"
description = "An implementation of JSON Schema validation for Python"
category = "dev"
optional = false
-python-versions = "*"
+python-versions = ">=3.7"
[package.dependencies]
attrs = ">=17.4.0"
importlib-metadata = {version = "*", markers = "python_version < \"3.8\""}
-pyrsistent = ">=0.14.0"
-six = ">=1.11.0"
+importlib-resources = {version = ">=1.4.0", markers = "python_version < \"3.9\""}
+pyrsistent = ">=0.14.0,<0.17.0 || >0.17.0,<0.17.1 || >0.17.1,<0.17.2 || >0.17.2"
+typing-extensions = {version = "*", markers = "python_version < \"3.8\""}
[package.extras]
-format = ["idna", "jsonpointer (>1.13)", "rfc3987", "strict-rfc3339", "webcolors"]
-format_nongpl = ["idna", "jsonpointer (>1.13)", "webcolors", "rfc3986-validator (>0.1.0)", "rfc3339-validator"]
+format = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3987", "uri-template", "webcolors (>=1.11)"]
+format_nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3986-validator (>0.1.0)", "uri-template", "webcolors (>=1.11)"]
[[package]]
name = "markdown"
@@ -234,28 +255,86 @@ category = "main"
optional = false
python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*"
+[[package]]
+name = "markdown-it-py"
+version = "1.1.0"
+description = "Python port of markdown-it. Markdown parsing, done right!"
+category = "main"
+optional = false
+python-versions = "~=3.6"
+
+[package.dependencies]
+attrs = ">=19,<22"
+typing-extensions = {version = ">=3.7.4", markers = "python_version < \"3.8\""}
+
+[package.extras]
+code_style = ["pre-commit (==2.6)"]
+compare = ["commonmark (>=0.9.1,<0.10.0)", "markdown (>=3.2.2,<3.3.0)", "mistletoe-ebp (>=0.10.0,<0.11.0)", "mistune (>=0.8.4,<0.9.0)", "panflute (>=1.12,<2.0)"]
+linkify = ["linkify-it-py (>=1.0,<2.0)"]
+plugins = ["mdit-py-plugins"]
+rtd = ["myst-nb (==0.13.0a1)", "pyyaml", "sphinx (>=2,<4)", "sphinx-copybutton", "sphinx-panels (>=0.4.0,<0.5.0)", "sphinx-book-theme"]
+testing = ["coverage", "psutil", "pytest (>=3.6,<4)", "pytest-benchmark (>=3.2,<4.0)", "pytest-cov", "pytest-regressions"]
+
[[package]]
name = "markupsafe"
-version = "2.0.1"
+version = "2.1.1"
description = "Safely add untrusted strings to HTML/XML markup."
category = "main"
optional = false
+python-versions = ">=3.7"
+
+[[package]]
+name = "mdit-py-plugins"
+version = "0.2.8"
+description = "Collection of plugins for markdown-it-py"
+category = "main"
+optional = false
+python-versions = "~=3.6"
+
+[package.dependencies]
+markdown-it-py = ">=1.0,<2.0"
+
+[package.extras]
+code_style = ["pre-commit (==2.6)"]
+rtd = ["myst-parser (==0.14.0a3)", "sphinx-book-theme (>=0.1.0,<0.2.0)"]
+testing = ["coverage", "pytest (>=3.6,<4)", "pytest-cov", "pytest-regressions"]
+
+[[package]]
+name = "myst-parser"
+version = "0.15.2"
+description = "An extended commonmark compliant parser, with bridges to docutils & sphinx."
+category = "main"
+optional = false
python-versions = ">=3.6"
+[package.dependencies]
+docutils = ">=0.15,<0.18"
+jinja2 = "*"
+markdown-it-py = ">=1.0.0,<2.0.0"
+mdit-py-plugins = ">=0.2.8,<0.3.0"
+pyyaml = "*"
+sphinx = ">=3.1,<5"
+
+[package.extras]
+code_style = ["pre-commit (>=2.12,<3.0)"]
+linkify = ["linkify-it-py (>=1.0,<2.0)"]
+rtd = ["ipython", "sphinx-book-theme (>=0.1.0,<0.2.0)", "sphinx-panels (>=0.5.2,<0.6.0)", "sphinxcontrib-bibtex (>=2.1,<3.0)", "sphinxext-rediraffe (>=0.2,<1.0)", "sphinxcontrib.mermaid (>=0.6.3,<0.7.0)", "sphinxext-opengraph (>=0.4.2,<0.5.0)"]
+testing = ["beautifulsoup4", "coverage", "docutils (>=0.17.0,<0.18.0)", "pytest (>=3.6,<4)", "pytest-cov", "pytest-regressions"]
+
[[package]]
name = "packaging"
-version = "21.0"
+version = "21.3"
description = "Core utilities for Python packages"
category = "main"
optional = false
python-versions = ">=3.6"
[package.dependencies]
-pyparsing = ">=2.0.2"
+pyparsing = ">=2.0.2,<3.0.5 || >3.0.5"
[[package]]
name = "pygments"
-version = "2.9.0"
+version = "2.11.2"
description = "Pygments is a syntax highlighting package written in Python."
category = "main"
optional = false
@@ -263,19 +342,22 @@ python-versions = ">=3.5"
[[package]]
name = "pyparsing"
-version = "2.4.7"
-description = "Python parsing module"
+version = "3.0.8"
+description = "pyparsing module - Classes and methods to define and execute parsing grammars"
category = "main"
optional = false
-python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*"
+python-versions = ">=3.6.8"
+
+[package.extras]
+diagrams = ["railroad-diagrams", "jinja2"]
[[package]]
name = "pyrsistent"
-version = "0.18.0"
+version = "0.18.1"
description = "Persistent/Functional/Immutable data structures"
category = "dev"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.7"
[[package]]
name = "python-dateutil"
@@ -290,7 +372,7 @@ six = ">=1.5"
[[package]]
name = "pytz"
-version = "2021.1"
+version = "2022.1"
description = "World timezone definitions, modern and historical"
category = "main"
optional = false
@@ -298,11 +380,11 @@ python-versions = "*"
[[package]]
name = "pyyaml"
-version = "5.4.1"
+version = "6.0"
description = "YAML parser and emitter for Python"
-category = "dev"
+category = "main"
optional = false
-python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*"
+python-versions = ">=3.6"
[[package]]
name = "recommonmark"
@@ -319,7 +401,7 @@ sphinx = ">=1.3.1"
[[package]]
name = "requests"
-version = "2.26.0"
+version = "2.27.1"
description = "Python HTTP for Humans."
category = "main"
optional = false
@@ -337,7 +419,7 @@ use_chardet_on_py3 = ["chardet (>=3.0.2,<5)"]
[[package]]
name = "s3transfer"
-version = "0.5.0"
+version = "0.5.2"
description = "An Amazon S3 Transfer Manager"
category = "dev"
optional = false
@@ -359,7 +441,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*"
[[package]]
name = "snowballstemmer"
-version = "2.1.0"
+version = "2.2.0"
description = "This package provides 29 stemmers for 28 languages generated from Snowball algorithms."
category = "main"
optional = false
@@ -367,18 +449,19 @@ python-versions = "*"
[[package]]
name = "sphinx"
-version = "3.0.4"
+version = "4.5.0"
description = "Python documentation generator"
category = "main"
optional = false
-python-versions = ">=3.5"
+python-versions = ">=3.6"
[package.dependencies]
alabaster = ">=0.7,<0.8"
babel = ">=1.3"
colorama = {version = ">=0.3.5", markers = "sys_platform == \"win32\""}
-docutils = ">=0.12"
+docutils = ">=0.14,<0.18"
imagesize = "*"
+importlib-metadata = {version = ">=4.4", markers = "python_version < \"3.10\""}
Jinja2 = ">=2.3"
packaging = "*"
Pygments = ">=2.0"
@@ -386,15 +469,15 @@ requests = ">=2.5.0"
snowballstemmer = ">=1.1"
sphinxcontrib-applehelp = "*"
sphinxcontrib-devhelp = "*"
-sphinxcontrib-htmlhelp = "*"
+sphinxcontrib-htmlhelp = ">=2.0.0"
sphinxcontrib-jsmath = "*"
sphinxcontrib-qthelp = "*"
-sphinxcontrib-serializinghtml = "*"
+sphinxcontrib-serializinghtml = ">=1.1.5"
[package.extras]
docs = ["sphinxcontrib-websupport"]
-lint = ["flake8 (>=3.5.0)", "flake8-import-order", "mypy (>=0.770)", "docutils-stubs"]
-test = ["pytest", "pytest-cov", "html5lib", "typed-ast", "cython"]
+lint = ["flake8 (>=3.5.0)", "isort", "mypy (>=0.931)", "docutils-stubs", "types-typed-ast", "types-requests"]
+test = ["pytest", "pytest-cov", "html5lib", "cython", "typed-ast"]
[[package]]
name = "sphinx-markdown-tables"
@@ -409,14 +492,18 @@ markdown = "3.0.1"
[[package]]
name = "sphinx-rtd-theme"
-version = "0.4.3"
+version = "1.0.0"
description = "Read the Docs theme for Sphinx"
category = "main"
optional = false
-python-versions = "*"
+python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*"
[package.dependencies]
-sphinx = "*"
+docutils = "<0.18"
+sphinx = ">=1.6"
+
+[package.extras]
+dev = ["transifex-client", "sphinxcontrib-httpdomain", "bump2version"]
[[package]]
name = "sphinxcontrib-applehelp"
@@ -502,41 +589,41 @@ widechars = ["wcwidth"]
[[package]]
name = "typing-extensions"
-version = "3.10.0.0"
-description = "Backported and Experimental Type Hints for Python 3.5+"
+version = "4.2.0"
+description = "Backported and Experimental Type Hints for Python 3.7+"
category = "main"
optional = false
-python-versions = "*"
+python-versions = ">=3.7"
[[package]]
name = "urllib3"
-version = "1.26.6"
+version = "1.26.9"
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.*, <4"
[package.extras]
-brotli = ["brotlipy (>=0.6.0)"]
+brotli = ["brotlicffi (>=0.8.0)", "brotli (>=1.0.9)", "brotlipy (>=0.6.0)"]
secure = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "certifi", "ipaddress"]
socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"]
[[package]]
name = "zipp"
-version = "3.5.0"
+version = "3.8.0"
description = "Backport of pathlib-compatible object wrapper for zip files"
-category = "dev"
+category = "main"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.7"
[package.extras]
-docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
-testing = ["pytest (>=4.6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "jaraco.itertools", "func-timeout", "pytest-black (>=0.3.7)", "pytest-mypy"]
+docs = ["sphinx", "jaraco.packaging (>=9)", "rst.linker (>=1.9)"]
+testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "jaraco.itertools", "func-timeout", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)"]
[metadata]
lock-version = "1.1"
-python-versions = "^3.6"
-content-hash = "2219111f67534db12e998e2d43eb6f12539007fb3a049a5ccb3b7d46fa702fdf"
+python-versions = "^3.7"
+content-hash = "7da2ee31505dde962be4634df8a8442725a8157315523110f88b5cfc693a471e"
[metadata.files]
alabaster = [
@@ -544,37 +631,37 @@ alabaster = [
{file = "alabaster-0.7.12.tar.gz", hash = "sha256:a661d72d58e6ea8a57f7a86e37d86716863ee5e92788398526d58b26a4e4dc02"},
]
argcomplete = [
- {file = "argcomplete-1.12.3-py2.py3-none-any.whl", hash = "sha256:291f0beca7fd49ce285d2f10e4c1c77e9460cf823eef2de54df0c0fec88b0d81"},
- {file = "argcomplete-1.12.3.tar.gz", hash = "sha256:2c7dbffd8c045ea534921e63b0be6fe65e88599990d8dc408ac8c542b72a5445"},
+ {file = "argcomplete-2.0.0-py2.py3-none-any.whl", hash = "sha256:cffa11ea77999bb0dd27bb25ff6dc142a6796142f68d45b1a26b11f58724561e"},
+ {file = "argcomplete-2.0.0.tar.gz", hash = "sha256:6372ad78c89d662035101418ae253668445b391755cfe94ea52f1b9d22425b20"},
]
attrs = [
- {file = "attrs-21.2.0-py2.py3-none-any.whl", hash = "sha256:149e90d6d8ac20db7a955ad60cf0e6881a3f20d37096140088356da6c716b0b1"},
- {file = "attrs-21.2.0.tar.gz", hash = "sha256:ef6aaac3ca6cd92904cdd0d83f629a15f18053ec84e6432106f7a4d04ae4f5fb"},
+ {file = "attrs-21.4.0-py2.py3-none-any.whl", hash = "sha256:2d27e3784d7a565d36ab851fe94887c5eccd6a463168875832a1be79c82828b4"},
+ {file = "attrs-21.4.0.tar.gz", hash = "sha256:626ba8234211db98e869df76230a137c4c40a12d72445c45d5f5b716f076e2fd"},
]
babel = [
{file = "Babel-2.9.1-py2.py3-none-any.whl", hash = "sha256:ab49e12b91d937cd11f0b67cb259a57ab4ad2b59ac7a3b41d6c06c0ac5b0def9"},
{file = "Babel-2.9.1.tar.gz", hash = "sha256:bc0c176f9f6a994582230df350aa6e05ba2ebe4b3ac317eab29d9be5d2768da0"},
]
boto3 = [
- {file = "boto3-1.18.21-py3-none-any.whl", hash = "sha256:59b6e8e79b2114e21388288a06a004f2a9378b1e0fc58466a35da8fb74fe2dd8"},
- {file = "boto3-1.18.21.tar.gz", hash = "sha256:00748c760dc30be61c6db4b092718f6a9f8d27c767da0e232695a65adb75cde8"},
+ {file = "boto3-1.21.42-py3-none-any.whl", hash = "sha256:895fb88c69be78f82cfee58a79c97a3ad8d4a2a1209041a411d7d6b9fc5393e4"},
+ {file = "boto3-1.21.42.tar.gz", hash = "sha256:bcb541175a7d190dd919a0af0e807ee6e9d26f135551e741b10d94343f2d7588"},
]
botocore = [
- {file = "botocore-1.21.21-py3-none-any.whl", hash = "sha256:fa5ac13829d24fcdd385e82c3b6d78e22d93f427cca8dac38158cae84a8cc2f5"},
- {file = "botocore-1.21.21.tar.gz", hash = "sha256:12cfe74b0a5c44afb34bdd86c1f8ad74bc2ad9ec168eaed9040ef70cb3db944f"},
+ {file = "botocore-1.24.42-py3-none-any.whl", hash = "sha256:14aee41c8bf59d2dd2d89e8751fa37d3c95dcb92707d1966aa02697e914c1417"},
+ {file = "botocore-1.24.42.tar.gz", hash = "sha256:a2baa9484bbaee96ef312c049b8e360badcab58329e487b57567644a571b5f4a"},
]
c7n = []
certifi = [
- {file = "certifi-2021.5.30-py2.py3-none-any.whl", hash = "sha256:50b1e4f8446b06f41be7dd6338db18e0990601dce795c2b1686458aa7e8fa7d8"},
- {file = "certifi-2021.5.30.tar.gz", hash = "sha256:2bbf76fd432960138b3ef6dda3dde0544f27cbf8546c458e60baf371917ba9ee"},
+ {file = "certifi-2021.10.8-py2.py3-none-any.whl", hash = "sha256:d62a0163eb4c2344ac042ab2bdf75399a71a2d8c7d47eac2e2ee91b9d6339569"},
+ {file = "certifi-2021.10.8.tar.gz", hash = "sha256:78884e7c1d4b00ce3cea67b44566851c4343c120abd683433ce934a68ea58872"},
]
charset-normalizer = [
- {file = "charset-normalizer-2.0.4.tar.gz", hash = "sha256:f23667ebe1084be45f6ae0538e4a5a865206544097e4e8bbcacf42cd02a348f3"},
- {file = "charset_normalizer-2.0.4-py3-none-any.whl", hash = "sha256:0c8911edd15d19223366a194a513099a302055a962bca2cec0f54b8b63175d8b"},
+ {file = "charset-normalizer-2.0.12.tar.gz", hash = "sha256:2857e29ff0d34db842cd7ca3230549d1a697f96ee6d3fb071cfa6c7393832597"},
+ {file = "charset_normalizer-2.0.12-py3-none-any.whl", hash = "sha256:6881edbebdb17b39b4eaaa821b438bf6eddffb4468cf344f09f89def34a8b1df"},
]
click = [
- {file = "click-7.1.2-py2.py3-none-any.whl", hash = "sha256:dacca89f4bfadd5de3d7489b7c8a566eee0d3676333fbb50030263894c38c0dc"},
- {file = "click-7.1.2.tar.gz", hash = "sha256:d2b5255c7c6349bc1bd1e59e08cd12acbbd63ce649f2588755783aa94dfb6b1a"},
+ {file = "click-8.1.2-py3-none-any.whl", hash = "sha256:24e1a4a9ec5bf6299411369b208c1df2188d9eb8d916302fe6bf03faed227f1e"},
+ {file = "click-8.1.2.tar.gz", hash = "sha256:479707fe14d9ec9a0757618b7a100a0ae4c4e236fac5b7f80ca68028141a1a72"},
]
colorama = [
{file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"},
@@ -589,166 +676,200 @@ docutils = [
{file = "docutils-0.17.1.tar.gz", hash = "sha256:686577d2e4c32380bb50cbb22f575ed742d58168cee37e99117a854bcd88f125"},
]
idna = [
- {file = "idna-3.2-py3-none-any.whl", hash = "sha256:14475042e284991034cb48e06f6851428fb14c4dc953acd9be9a5e95c7b6dd7a"},
- {file = "idna-3.2.tar.gz", hash = "sha256:467fbad99067910785144ce333826c71fb0e63a425657295239737f7ecd125f3"},
+ {file = "idna-3.3-py3-none-any.whl", hash = "sha256:84d9dd047ffa80596e0f246e2eab0b391788b0503584e8945f2368256d2735ff"},
+ {file = "idna-3.3.tar.gz", hash = "sha256:9d643ff0a55b762d5cdb124b8eaa99c66322e2157b69160bc32796e824360e6d"},
]
imagesize = [
- {file = "imagesize-1.2.0-py2.py3-none-any.whl", hash = "sha256:6965f19a6a2039c7d48bca7dba2473069ff854c36ae6f19d2cde309d998228a1"},
- {file = "imagesize-1.2.0.tar.gz", hash = "sha256:b1f6b5a4eab1f73479a50fb79fcf729514a900c341d8503d62a62dbc4127a2b1"},
+ {file = "imagesize-1.3.0-py2.py3-none-any.whl", hash = "sha256:1db2f82529e53c3e929e8926a1fa9235aa82d0bd0c580359c67ec31b2fddaa8c"},
+ {file = "imagesize-1.3.0.tar.gz", hash = "sha256:cd1750d452385ca327479d45b64d9c7729ecf0b3969a58148298c77092261f9d"},
]
importlib-metadata = [
- {file = "importlib_metadata-4.6.4-py3-none-any.whl", hash = "sha256:ed5157fef23a4bc4594615a0dd8eba94b2bb36bf2a343fa3d8bb2fa0a62a99d5"},
- {file = "importlib_metadata-4.6.4.tar.gz", hash = "sha256:7b30a78db2922d78a6f47fb30683156a14f3c6aa5cc23f77cc8967e9ab2d002f"},
+ {file = "importlib_metadata-4.11.3-py3-none-any.whl", hash = "sha256:1208431ca90a8cca1a6b8af391bb53c1a2db74e5d1cef6ddced95d4b2062edc6"},
+ {file = "importlib_metadata-4.11.3.tar.gz", hash = "sha256:ea4c597ebf37142f827b8f39299579e31685c31d3a438b59f469406afd0f2539"},
+]
+importlib-resources = [
+ {file = "importlib_resources-5.7.1-py3-none-any.whl", hash = "sha256:e447dc01619b1e951286f3929be820029d48c75eb25d265c28b92a16548212b8"},
+ {file = "importlib_resources-5.7.1.tar.gz", hash = "sha256:b6062987dfc51f0fcb809187cffbd60f35df7acb4589091f154214af6d0d49d3"},
]
jinja2 = [
- {file = "Jinja2-3.0.1-py3-none-any.whl", hash = "sha256:1f06f2da51e7b56b8f238affdd6b4e2c61e39598a378cc49345bc1bd42a978a4"},
- {file = "Jinja2-3.0.1.tar.gz", hash = "sha256:703f484b47a6af502e743c9122595cc812b0271f661722403114f71a79d0f5a4"},
+ {file = "Jinja2-3.1.1-py3-none-any.whl", hash = "sha256:539835f51a74a69f41b848a9645dbdc35b4f20a3b601e2d9a7e22947b15ff119"},
+ {file = "Jinja2-3.1.1.tar.gz", hash = "sha256:640bed4bb501cbd17194b3cace1dc2126f5b619cf068a726b98192a0fde74ae9"},
]
jmespath = [
- {file = "jmespath-0.10.0-py2.py3-none-any.whl", hash = "sha256:cdf6525904cc597730141d61b36f2e4b8ecc257c420fa2f4549bac2c2d0cb72f"},
- {file = "jmespath-0.10.0.tar.gz", hash = "sha256:b85d0567b8666149a93172712e68920734333c0ce7e89b78b3e987f71e5ed4f9"},
+ {file = "jmespath-1.0.0-py3-none-any.whl", hash = "sha256:e8dcd576ed616f14ec02eed0005c85973b5890083313860136657e24784e4c04"},
+ {file = "jmespath-1.0.0.tar.gz", hash = "sha256:a490e280edd1f57d6de88636992d05b71e97d69a26a19f058ecf7d304474bf5e"},
]
jsonschema = [
- {file = "jsonschema-3.2.0-py2.py3-none-any.whl", hash = "sha256:4e5b3cf8216f577bee9ce139cbe72eca3ea4f292ec60928ff24758ce626cd163"},
- {file = "jsonschema-3.2.0.tar.gz", hash = "sha256:c8a85b28d377cc7737e46e2d9f2b4f44ee3c0e1deac6bf46ddefc7187d30797a"},
+ {file = "jsonschema-4.4.0-py3-none-any.whl", hash = "sha256:77281a1f71684953ee8b3d488371b162419767973789272434bbc3f29d9c8823"},
+ {file = "jsonschema-4.4.0.tar.gz", hash = "sha256:636694eb41b3535ed608fe04129f26542b59ed99808b4f688aa32dcf55317a83"},
]
markdown = [
{file = "Markdown-3.0.1-py2.py3-none-any.whl", hash = "sha256:c00429bd503a47ec88d5e30a751e147dcb4c6889663cd3e2ba0afe858e009baa"},
{file = "Markdown-3.0.1.tar.gz", hash = "sha256:d02e0f9b04c500cde6637c11ad7c72671f359b87b9fe924b2383649d8841db7c"},
]
+markdown-it-py = [
+ {file = "markdown-it-py-1.1.0.tar.gz", hash = "sha256:36be6bb3ad987bfdb839f5ba78ddf094552ca38ccbd784ae4f74a4e1419fc6e3"},
+ {file = "markdown_it_py-1.1.0-py3-none-any.whl", hash = "sha256:98080fc0bc34c4f2bcf0846a096a9429acbd9d5d8e67ed34026c03c61c464389"},
+]
markupsafe = [
- {file = "MarkupSafe-2.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:f9081981fe268bd86831e5c75f7de206ef275defcb82bc70740ae6dc507aee51"},
- {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:0955295dd5eec6cb6cc2fe1698f4c6d84af2e92de33fbcac4111913cd100a6ff"},
- {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:0446679737af14f45767963a1a9ef7620189912317d095f2d9ffa183a4d25d2b"},
- {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:f826e31d18b516f653fe296d967d700fddad5901ae07c622bb3705955e1faa94"},
- {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:fa130dd50c57d53368c9d59395cb5526eda596d3ffe36666cd81a44d56e48872"},
- {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:905fec760bd2fa1388bb5b489ee8ee5f7291d692638ea5f67982d968366bef9f"},
- {file = "MarkupSafe-2.0.1-cp36-cp36m-win32.whl", hash = "sha256:6c4ca60fa24e85fe25b912b01e62cb969d69a23a5d5867682dd3e80b5b02581d"},
- {file = "MarkupSafe-2.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:b2f4bf27480f5e5e8ce285a8c8fd176c0b03e93dcc6646477d4630e83440c6a9"},
- {file = "MarkupSafe-2.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:0717a7390a68be14b8c793ba258e075c6f4ca819f15edfc2a3a027c823718567"},
- {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:6557b31b5e2c9ddf0de32a691f2312a32f77cd7681d8af66c2692efdbef84c18"},
- {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:49e3ceeabbfb9d66c3aef5af3a60cc43b85c33df25ce03d0031a608b0a8b2e3f"},
- {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:d7f9850398e85aba693bb640262d3611788b1f29a79f0c93c565694658f4071f"},
- {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:6a7fae0dd14cf60ad5ff42baa2e95727c3d81ded453457771d02b7d2b3f9c0c2"},
- {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:b7f2d075102dc8c794cbde1947378051c4e5180d52d276987b8d28a3bd58c17d"},
- {file = "MarkupSafe-2.0.1-cp37-cp37m-win32.whl", hash = "sha256:a30e67a65b53ea0a5e62fe23682cfe22712e01f453b95233b25502f7c61cb415"},
- {file = "MarkupSafe-2.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:611d1ad9a4288cf3e3c16014564df047fe08410e628f89805e475368bd304914"},
- {file = "MarkupSafe-2.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:be98f628055368795d818ebf93da628541e10b75b41c559fdf36d104c5787066"},
- {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux1_i686.whl", hash = "sha256:1d609f577dc6e1aa17d746f8bd3c31aa4d258f4070d61b2aa5c4166c1539de35"},
- {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:7d91275b0245b1da4d4cfa07e0faedd5b0812efc15b702576d103293e252af1b"},
- {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:01a9b8ea66f1658938f65b93a85ebe8bc016e6769611be228d797c9d998dd298"},
- {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:47ab1e7b91c098ab893b828deafa1203de86d0bc6ab587b160f78fe6c4011f75"},
- {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:97383d78eb34da7e1fa37dd273c20ad4320929af65d156e35a5e2d89566d9dfb"},
- {file = "MarkupSafe-2.0.1-cp38-cp38-win32.whl", hash = "sha256:023cb26ec21ece8dc3907c0e8320058b2e0cb3c55cf9564da612bc325bed5e64"},
- {file = "MarkupSafe-2.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:984d76483eb32f1bcb536dc27e4ad56bba4baa70be32fa87152832cdd9db0833"},
- {file = "MarkupSafe-2.0.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:2ef54abee730b502252bcdf31b10dacb0a416229b72c18b19e24a4509f273d26"},
- {file = "MarkupSafe-2.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3c112550557578c26af18a1ccc9e090bfe03832ae994343cfdacd287db6a6ae7"},
- {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux1_i686.whl", hash = "sha256:53edb4da6925ad13c07b6d26c2a852bd81e364f95301c66e930ab2aef5b5ddd8"},
- {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:f5653a225f31e113b152e56f154ccbe59eeb1c7487b39b9d9f9cdb58e6c79dc5"},
- {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:4efca8f86c54b22348a5467704e3fec767b2db12fc39c6d963168ab1d3fc9135"},
- {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:ab3ef638ace319fa26553db0624c4699e31a28bb2a835c5faca8f8acf6a5a902"},
- {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:f8ba0e8349a38d3001fae7eadded3f6606f0da5d748ee53cc1dab1d6527b9509"},
- {file = "MarkupSafe-2.0.1-cp39-cp39-win32.whl", hash = "sha256:10f82115e21dc0dfec9ab5c0223652f7197feb168c940f3ef61563fc2d6beb74"},
- {file = "MarkupSafe-2.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:693ce3f9e70a6cf7d2fb9e6c9d8b204b6b39897a2c4a1aa65728d5ac97dcc1d8"},
- {file = "MarkupSafe-2.0.1.tar.gz", hash = "sha256:594c67807fb16238b30c44bdf74f36c02cdf22d1c8cda91ef8a0ed8dabf5620a"},
+ {file = "MarkupSafe-2.1.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:86b1f75c4e7c2ac2ccdaec2b9022845dbb81880ca318bb7a0a01fbf7813e3812"},
+ {file = "MarkupSafe-2.1.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f121a1420d4e173a5d96e47e9a0c0dcff965afdf1626d28de1460815f7c4ee7a"},
+ {file = "MarkupSafe-2.1.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a49907dd8420c5685cfa064a1335b6754b74541bbb3706c259c02ed65b644b3e"},
+ {file = "MarkupSafe-2.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:10c1bfff05d95783da83491be968e8fe789263689c02724e0c691933c52994f5"},
+ {file = "MarkupSafe-2.1.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b7bd98b796e2b6553da7225aeb61f447f80a1ca64f41d83612e6139ca5213aa4"},
+ {file = "MarkupSafe-2.1.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:b09bf97215625a311f669476f44b8b318b075847b49316d3e28c08e41a7a573f"},
+ {file = "MarkupSafe-2.1.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:694deca8d702d5db21ec83983ce0bb4b26a578e71fbdbd4fdcd387daa90e4d5e"},
+ {file = "MarkupSafe-2.1.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:efc1913fd2ca4f334418481c7e595c00aad186563bbc1ec76067848c7ca0a933"},
+ {file = "MarkupSafe-2.1.1-cp310-cp310-win32.whl", hash = "sha256:4a33dea2b688b3190ee12bd7cfa29d39c9ed176bda40bfa11099a3ce5d3a7ac6"},
+ {file = "MarkupSafe-2.1.1-cp310-cp310-win_amd64.whl", hash = "sha256:dda30ba7e87fbbb7eab1ec9f58678558fd9a6b8b853530e176eabd064da81417"},
+ {file = "MarkupSafe-2.1.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:671cd1187ed5e62818414afe79ed29da836dde67166a9fac6d435873c44fdd02"},
+ {file = "MarkupSafe-2.1.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3799351e2336dc91ea70b034983ee71cf2f9533cdff7c14c90ea126bfd95d65a"},
+ {file = "MarkupSafe-2.1.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e72591e9ecd94d7feb70c1cbd7be7b3ebea3f548870aa91e2732960fa4d57a37"},
+ {file = "MarkupSafe-2.1.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6fbf47b5d3728c6aea2abb0589b5d30459e369baa772e0f37a0320185e87c980"},
+ {file = "MarkupSafe-2.1.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:d5ee4f386140395a2c818d149221149c54849dfcfcb9f1debfe07a8b8bd63f9a"},
+ {file = "MarkupSafe-2.1.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:bcb3ed405ed3222f9904899563d6fc492ff75cce56cba05e32eff40e6acbeaa3"},
+ {file = "MarkupSafe-2.1.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:e1c0b87e09fa55a220f058d1d49d3fb8df88fbfab58558f1198e08c1e1de842a"},
+ {file = "MarkupSafe-2.1.1-cp37-cp37m-win32.whl", hash = "sha256:8dc1c72a69aa7e082593c4a203dcf94ddb74bb5c8a731e4e1eb68d031e8498ff"},
+ {file = "MarkupSafe-2.1.1-cp37-cp37m-win_amd64.whl", hash = "sha256:97a68e6ada378df82bc9f16b800ab77cbf4b2fada0081794318520138c088e4a"},
+ {file = "MarkupSafe-2.1.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:e8c843bbcda3a2f1e3c2ab25913c80a3c5376cd00c6e8c4a86a89a28c8dc5452"},
+ {file = "MarkupSafe-2.1.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0212a68688482dc52b2d45013df70d169f542b7394fc744c02a57374a4207003"},
+ {file = "MarkupSafe-2.1.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e576a51ad59e4bfaac456023a78f6b5e6e7651dcd383bcc3e18d06f9b55d6d1"},
+ {file = "MarkupSafe-2.1.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4b9fe39a2ccc108a4accc2676e77da025ce383c108593d65cc909add5c3bd601"},
+ {file = "MarkupSafe-2.1.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:96e37a3dc86e80bf81758c152fe66dbf60ed5eca3d26305edf01892257049925"},
+ {file = "MarkupSafe-2.1.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6d0072fea50feec76a4c418096652f2c3238eaa014b2f94aeb1d56a66b41403f"},
+ {file = "MarkupSafe-2.1.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:089cf3dbf0cd6c100f02945abeb18484bd1ee57a079aefd52cffd17fba910b88"},
+ {file = "MarkupSafe-2.1.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:6a074d34ee7a5ce3effbc526b7083ec9731bb3cbf921bbe1d3005d4d2bdb3a63"},
+ {file = "MarkupSafe-2.1.1-cp38-cp38-win32.whl", hash = "sha256:421be9fbf0ffe9ffd7a378aafebbf6f4602d564d34be190fc19a193232fd12b1"},
+ {file = "MarkupSafe-2.1.1-cp38-cp38-win_amd64.whl", hash = "sha256:fc7b548b17d238737688817ab67deebb30e8073c95749d55538ed473130ec0c7"},
+ {file = "MarkupSafe-2.1.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:e04e26803c9c3851c931eac40c695602c6295b8d432cbe78609649ad9bd2da8a"},
+ {file = "MarkupSafe-2.1.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b87db4360013327109564f0e591bd2a3b318547bcef31b468a92ee504d07ae4f"},
+ {file = "MarkupSafe-2.1.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:99a2a507ed3ac881b975a2976d59f38c19386d128e7a9a18b7df6fff1fd4c1d6"},
+ {file = "MarkupSafe-2.1.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:56442863ed2b06d19c37f94d999035e15ee982988920e12a5b4ba29b62ad1f77"},
+ {file = "MarkupSafe-2.1.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3ce11ee3f23f79dbd06fb3d63e2f6af7b12db1d46932fe7bd8afa259a5996603"},
+ {file = "MarkupSafe-2.1.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:33b74d289bd2f5e527beadcaa3f401e0df0a89927c1559c8566c066fa4248ab7"},
+ {file = "MarkupSafe-2.1.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:43093fb83d8343aac0b1baa75516da6092f58f41200907ef92448ecab8825135"},
+ {file = "MarkupSafe-2.1.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8e3dcf21f367459434c18e71b2a9532d96547aef8a871872a5bd69a715c15f96"},
+ {file = "MarkupSafe-2.1.1-cp39-cp39-win32.whl", hash = "sha256:d4306c36ca495956b6d568d276ac11fdd9c30a36f1b6eb928070dc5360b22e1c"},
+ {file = "MarkupSafe-2.1.1-cp39-cp39-win_amd64.whl", hash = "sha256:46d00d6cfecdde84d40e572d63735ef81423ad31184100411e6e3388d405e247"},
+ {file = "MarkupSafe-2.1.1.tar.gz", hash = "sha256:7f91197cc9e48f989d12e4e6fbc46495c446636dfc81b9ccf50bb0ec74b91d4b"},
+]
+mdit-py-plugins = [
+ {file = "mdit-py-plugins-0.2.8.tar.gz", hash = "sha256:5991cef645502e80a5388ec4fc20885d2313d4871e8b8e320ca2de14ac0c015f"},
+ {file = "mdit_py_plugins-0.2.8-py3-none-any.whl", hash = "sha256:1833bf738e038e35d89cb3a07eb0d227ed647ce7dd357579b65343740c6d249c"},
+]
+myst-parser = [
+ {file = "myst-parser-0.15.2.tar.gz", hash = "sha256:f7f3b2d62db7655cde658eb5d62b2ec2a4631308137bd8d10f296a40d57bbbeb"},
+ {file = "myst_parser-0.15.2-py3-none-any.whl", hash = "sha256:40124b6f27a4c42ac7f06b385e23a9dcd03d84801e9c7130b59b3729a554b1f9"},
]
packaging = [
- {file = "packaging-21.0-py3-none-any.whl", hash = "sha256:c86254f9220d55e31cc94d69bade760f0847da8000def4dfe1c6b872fd14ff14"},
- {file = "packaging-21.0.tar.gz", hash = "sha256:7dc96269f53a4ccec5c0670940a4281106dd0bb343f47b7471f779df49c2fbe7"},
+ {file = "packaging-21.3-py3-none-any.whl", hash = "sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522"},
+ {file = "packaging-21.3.tar.gz", hash = "sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb"},
]
pygments = [
- {file = "Pygments-2.9.0-py3-none-any.whl", hash = "sha256:d66e804411278594d764fc69ec36ec13d9ae9147193a1740cd34d272ca383b8e"},
- {file = "Pygments-2.9.0.tar.gz", hash = "sha256:a18f47b506a429f6f4b9df81bb02beab9ca21d0a5fee38ed15aef65f0545519f"},
+ {file = "Pygments-2.11.2-py3-none-any.whl", hash = "sha256:44238f1b60a76d78fc8ca0528ee429702aae011c265fe6a8dd8b63049ae41c65"},
+ {file = "Pygments-2.11.2.tar.gz", hash = "sha256:4e426f72023d88d03b2fa258de560726ce890ff3b630f88c21cbb8b2503b8c6a"},
]
pyparsing = [
- {file = "pyparsing-2.4.7-py2.py3-none-any.whl", hash = "sha256:ef9d7589ef3c200abe66653d3f1ab1033c3c419ae9b9bdb1240a85b024efc88b"},
- {file = "pyparsing-2.4.7.tar.gz", hash = "sha256:c203ec8783bf771a155b207279b9bccb8dea02d8f0c9e5f8ead507bc3246ecc1"},
+ {file = "pyparsing-3.0.8-py3-none-any.whl", hash = "sha256:ef7b523f6356f763771559412c0d7134753f037822dad1b16945b7b846f7ad06"},
+ {file = "pyparsing-3.0.8.tar.gz", hash = "sha256:7bf433498c016c4314268d95df76c81b842a4cb2b276fa3312cfb1e1d85f6954"},
]
pyrsistent = [
- {file = "pyrsistent-0.18.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:f4c8cabb46ff8e5d61f56a037974228e978f26bfefce4f61a4b1ac0ba7a2ab72"},
- {file = "pyrsistent-0.18.0-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:da6e5e818d18459fa46fac0a4a4e543507fe1110e808101277c5a2b5bab0cd2d"},
- {file = "pyrsistent-0.18.0-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:5e4395bbf841693eaebaa5bb5c8f5cdbb1d139e07c975c682ec4e4f8126e03d2"},
- {file = "pyrsistent-0.18.0-cp36-cp36m-win32.whl", hash = "sha256:527be2bfa8dc80f6f8ddd65242ba476a6c4fb4e3aedbf281dfbac1b1ed4165b1"},
- {file = "pyrsistent-0.18.0-cp36-cp36m-win_amd64.whl", hash = "sha256:2aaf19dc8ce517a8653746d98e962ef480ff34b6bc563fc067be6401ffb457c7"},
- {file = "pyrsistent-0.18.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:58a70d93fb79dc585b21f9d72487b929a6fe58da0754fa4cb9f279bb92369396"},
- {file = "pyrsistent-0.18.0-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:4916c10896721e472ee12c95cdc2891ce5890898d2f9907b1b4ae0f53588b710"},
- {file = "pyrsistent-0.18.0-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:73ff61b1411e3fb0ba144b8f08d6749749775fe89688093e1efef9839d2dcc35"},
- {file = "pyrsistent-0.18.0-cp37-cp37m-win32.whl", hash = "sha256:b29b869cf58412ca5738d23691e96d8aff535e17390128a1a52717c9a109da4f"},
- {file = "pyrsistent-0.18.0-cp37-cp37m-win_amd64.whl", hash = "sha256:097b96f129dd36a8c9e33594e7ebb151b1515eb52cceb08474c10a5479e799f2"},
- {file = "pyrsistent-0.18.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:772e94c2c6864f2cd2ffbe58bb3bdefbe2a32afa0acb1a77e472aac831f83427"},
- {file = "pyrsistent-0.18.0-cp38-cp38-manylinux1_i686.whl", hash = "sha256:c1a9ff320fa699337e05edcaae79ef8c2880b52720bc031b219e5b5008ebbdef"},
- {file = "pyrsistent-0.18.0-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:cd3caef37a415fd0dae6148a1b6957a8c5f275a62cca02e18474608cb263640c"},
- {file = "pyrsistent-0.18.0-cp38-cp38-win32.whl", hash = "sha256:e79d94ca58fcafef6395f6352383fa1a76922268fa02caa2272fff501c2fdc78"},
- {file = "pyrsistent-0.18.0-cp38-cp38-win_amd64.whl", hash = "sha256:a0c772d791c38bbc77be659af29bb14c38ced151433592e326361610250c605b"},
- {file = "pyrsistent-0.18.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d5ec194c9c573aafaceebf05fc400656722793dac57f254cd4741f3c27ae57b4"},
- {file = "pyrsistent-0.18.0-cp39-cp39-manylinux1_i686.whl", hash = "sha256:6b5eed00e597b5b5773b4ca30bd48a5774ef1e96f2a45d105db5b4ebb4bca680"},
- {file = "pyrsistent-0.18.0-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:48578680353f41dca1ca3dc48629fb77dfc745128b56fc01096b2530c13fd426"},
- {file = "pyrsistent-0.18.0-cp39-cp39-win32.whl", hash = "sha256:f3ef98d7b76da5eb19c37fda834d50262ff9167c65658d1d8f974d2e4d90676b"},
- {file = "pyrsistent-0.18.0-cp39-cp39-win_amd64.whl", hash = "sha256:404e1f1d254d314d55adb8d87f4f465c8693d6f902f67eb6ef5b4526dc58e6ea"},
- {file = "pyrsistent-0.18.0.tar.gz", hash = "sha256:773c781216f8c2900b42a7b638d5b517bb134ae1acbebe4d1e8f1f41ea60eb4b"},
+ {file = "pyrsistent-0.18.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:df46c854f490f81210870e509818b729db4488e1f30f2a1ce1698b2295a878d1"},
+ {file = "pyrsistent-0.18.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d45866ececf4a5fff8742c25722da6d4c9e180daa7b405dc0a2a2790d668c26"},
+ {file = "pyrsistent-0.18.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4ed6784ceac462a7d6fcb7e9b663e93b9a6fb373b7f43594f9ff68875788e01e"},
+ {file = "pyrsistent-0.18.1-cp310-cp310-win32.whl", hash = "sha256:e4f3149fd5eb9b285d6bfb54d2e5173f6a116fe19172686797c056672689daf6"},
+ {file = "pyrsistent-0.18.1-cp310-cp310-win_amd64.whl", hash = "sha256:636ce2dc235046ccd3d8c56a7ad54e99d5c1cd0ef07d9ae847306c91d11b5fec"},
+ {file = "pyrsistent-0.18.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:e92a52c166426efbe0d1ec1332ee9119b6d32fc1f0bbfd55d5c1088070e7fc1b"},
+ {file = "pyrsistent-0.18.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d7a096646eab884bf8bed965bad63ea327e0d0c38989fc83c5ea7b8a87037bfc"},
+ {file = "pyrsistent-0.18.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cdfd2c361b8a8e5d9499b9082b501c452ade8bbf42aef97ea04854f4a3f43b22"},
+ {file = "pyrsistent-0.18.1-cp37-cp37m-win32.whl", hash = "sha256:7ec335fc998faa4febe75cc5268a9eac0478b3f681602c1f27befaf2a1abe1d8"},
+ {file = "pyrsistent-0.18.1-cp37-cp37m-win_amd64.whl", hash = "sha256:6455fc599df93d1f60e1c5c4fe471499f08d190d57eca040c0ea182301321286"},
+ {file = "pyrsistent-0.18.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:fd8da6d0124efa2f67d86fa70c851022f87c98e205f0594e1fae044e7119a5a6"},
+ {file = "pyrsistent-0.18.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7bfe2388663fd18bd8ce7db2c91c7400bf3e1a9e8bd7d63bf7e77d39051b85ec"},
+ {file = "pyrsistent-0.18.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0e3e1fcc45199df76053026a51cc59ab2ea3fc7c094c6627e93b7b44cdae2c8c"},
+ {file = "pyrsistent-0.18.1-cp38-cp38-win32.whl", hash = "sha256:b568f35ad53a7b07ed9b1b2bae09eb15cdd671a5ba5d2c66caee40dbf91c68ca"},
+ {file = "pyrsistent-0.18.1-cp38-cp38-win_amd64.whl", hash = "sha256:d1b96547410f76078eaf66d282ddca2e4baae8964364abb4f4dcdde855cd123a"},
+ {file = "pyrsistent-0.18.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:f87cc2863ef33c709e237d4b5f4502a62a00fab450c9e020892e8e2ede5847f5"},
+ {file = "pyrsistent-0.18.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6bc66318fb7ee012071b2792024564973ecc80e9522842eb4e17743604b5e045"},
+ {file = "pyrsistent-0.18.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:914474c9f1d93080338ace89cb2acee74f4f666fb0424896fcfb8d86058bf17c"},
+ {file = "pyrsistent-0.18.1-cp39-cp39-win32.whl", hash = "sha256:1b34eedd6812bf4d33814fca1b66005805d3640ce53140ab8bbb1e2651b0d9bc"},
+ {file = "pyrsistent-0.18.1-cp39-cp39-win_amd64.whl", hash = "sha256:e24a828f57e0c337c8d8bb9f6b12f09dfdf0273da25fda9e314f0b684b415a07"},
+ {file = "pyrsistent-0.18.1.tar.gz", hash = "sha256:d4d61f8b993a7255ba714df3aca52700f8125289f84f704cf80916517c46eb96"},
]
python-dateutil = [
{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"},
]
pytz = [
- {file = "pytz-2021.1-py2.py3-none-any.whl", hash = "sha256:eb10ce3e7736052ed3623d49975ce333bcd712c7bb19a58b9e2089d4057d0798"},
- {file = "pytz-2021.1.tar.gz", hash = "sha256:83a4a90894bf38e243cf052c8b58f381bfe9a7a483f6a9cab140bc7f702ac4da"},
+ {file = "pytz-2022.1-py2.py3-none-any.whl", hash = "sha256:e68985985296d9a66a881eb3193b0906246245294a881e7c8afe623866ac6a5c"},
+ {file = "pytz-2022.1.tar.gz", hash = "sha256:1e760e2fe6a8163bc0b3d9a19c4f84342afa0a2affebfaa84b01b978a02ecaa7"},
]
pyyaml = [
- {file = "PyYAML-5.4.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:3b2b1824fe7112845700f815ff6a489360226a5609b96ec2190a45e62a9fc922"},
- {file = "PyYAML-5.4.1-cp27-cp27m-win32.whl", hash = "sha256:129def1b7c1bf22faffd67b8f3724645203b79d8f4cc81f674654d9902cb4393"},
- {file = "PyYAML-5.4.1-cp27-cp27m-win_amd64.whl", hash = "sha256:4465124ef1b18d9ace298060f4eccc64b0850899ac4ac53294547536533800c8"},
- {file = "PyYAML-5.4.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:bb4191dfc9306777bc594117aee052446b3fa88737cd13b7188d0e7aa8162185"},
- {file = "PyYAML-5.4.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:6c78645d400265a062508ae399b60b8c167bf003db364ecb26dcab2bda048253"},
- {file = "PyYAML-5.4.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:4e0583d24c881e14342eaf4ec5fbc97f934b999a6828693a99157fde912540cc"},
- {file = "PyYAML-5.4.1-cp36-cp36m-win32.whl", hash = "sha256:3bd0e463264cf257d1ffd2e40223b197271046d09dadf73a0fe82b9c1fc385a5"},
- {file = "PyYAML-5.4.1-cp36-cp36m-win_amd64.whl", hash = "sha256:e4fac90784481d221a8e4b1162afa7c47ed953be40d31ab4629ae917510051df"},
- {file = "PyYAML-5.4.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:5accb17103e43963b80e6f837831f38d314a0495500067cb25afab2e8d7a4018"},
- {file = "PyYAML-5.4.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:e1d4970ea66be07ae37a3c2e48b5ec63f7ba6804bdddfdbd3cfd954d25a82e63"},
- {file = "PyYAML-5.4.1-cp37-cp37m-win32.whl", hash = "sha256:dd5de0646207f053eb0d6c74ae45ba98c3395a571a2891858e87df7c9b9bd51b"},
- {file = "PyYAML-5.4.1-cp37-cp37m-win_amd64.whl", hash = "sha256:08682f6b72c722394747bddaf0aa62277e02557c0fd1c42cb853016a38f8dedf"},
- {file = "PyYAML-5.4.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d2d9808ea7b4af864f35ea216be506ecec180628aced0704e34aca0b040ffe46"},
- {file = "PyYAML-5.4.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:8c1be557ee92a20f184922c7b6424e8ab6691788e6d86137c5d93c1a6ec1b8fb"},
- {file = "PyYAML-5.4.1-cp38-cp38-win32.whl", hash = "sha256:fa5ae20527d8e831e8230cbffd9f8fe952815b2b7dae6ffec25318803a7528fc"},
- {file = "PyYAML-5.4.1-cp38-cp38-win_amd64.whl", hash = "sha256:0f5f5786c0e09baddcd8b4b45f20a7b5d61a7e7e99846e3c799b05c7c53fa696"},
- {file = "PyYAML-5.4.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:294db365efa064d00b8d1ef65d8ea2c3426ac366c0c4368d930bf1c5fb497f77"},
- {file = "PyYAML-5.4.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:74c1485f7707cf707a7aef42ef6322b8f97921bd89be2ab6317fd782c2d53183"},
- {file = "PyYAML-5.4.1-cp39-cp39-win32.whl", hash = "sha256:49d4cdd9065b9b6e206d0595fee27a96b5dd22618e7520c33204a4a3239d5b10"},
- {file = "PyYAML-5.4.1-cp39-cp39-win_amd64.whl", hash = "sha256:c20cfa2d49991c8b4147af39859b167664f2ad4561704ee74c1de03318e898db"},
- {file = "PyYAML-5.4.1.tar.gz", hash = "sha256:607774cbba28732bfa802b54baa7484215f530991055bb562efbed5b2f20a45e"},
+ {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"},
+ {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a80a78046a72361de73f8f395f1f1e49f956c6be882eed58505a15f3e430962b"},
+ {file = "PyYAML-6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f84fbc98b019fef2ee9a1cb3ce93e3187a6df0b2538a651bfb890254ba9f90b5"},
+ {file = "PyYAML-6.0-cp310-cp310-win32.whl", hash = "sha256:2cd5df3de48857ed0544b34e2d40e9fac445930039f3cfe4bcc592a1f836d513"},
+ {file = "PyYAML-6.0-cp310-cp310-win_amd64.whl", hash = "sha256:daf496c58a8c52083df09b80c860005194014c3698698d1a57cbcfa182142a3a"},
+ {file = "PyYAML-6.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:897b80890765f037df3403d22bab41627ca8811ae55e9a722fd0392850ec4d86"},
+ {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50602afada6d6cbfad699b0c7bb50d5ccffa7e46a3d738092afddc1f9758427f"},
+ {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:48c346915c114f5fdb3ead70312bd042a953a8ce5c7106d5bfb1a5254e47da92"},
+ {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:98c4d36e99714e55cfbaaee6dd5badbc9a1ec339ebfc3b1f52e293aee6bb71a4"},
+ {file = "PyYAML-6.0-cp36-cp36m-win32.whl", hash = "sha256:0283c35a6a9fbf047493e3a0ce8d79ef5030852c51e9d911a27badfde0605293"},
+ {file = "PyYAML-6.0-cp36-cp36m-win_amd64.whl", hash = "sha256:07751360502caac1c067a8132d150cf3d61339af5691fe9e87803040dbc5db57"},
+ {file = "PyYAML-6.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:819b3830a1543db06c4d4b865e70ded25be52a2e0631ccd2f6a47a2822f2fd7c"},
+ {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:473f9edb243cb1935ab5a084eb238d842fb8f404ed2193a915d1784b5a6b5fc0"},
+ {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0ce82d761c532fe4ec3f87fc45688bdd3a4c1dc5e0b4a19814b9009a29baefd4"},
+ {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:231710d57adfd809ef5d34183b8ed1eeae3f76459c18fb4a0b373ad56bedcdd9"},
+ {file = "PyYAML-6.0-cp37-cp37m-win32.whl", hash = "sha256:c5687b8d43cf58545ade1fe3e055f70eac7a5a1a0bf42824308d868289a95737"},
+ {file = "PyYAML-6.0-cp37-cp37m-win_amd64.whl", hash = "sha256:d15a181d1ecd0d4270dc32edb46f7cb7733c7c508857278d3d378d14d606db2d"},
+ {file = "PyYAML-6.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0b4624f379dab24d3725ffde76559cff63d9ec94e1736b556dacdfebe5ab6d4b"},
+ {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:213c60cd50106436cc818accf5baa1aba61c0189ff610f64f4a3e8c6726218ba"},
+ {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9fa600030013c4de8165339db93d182b9431076eb98eb40ee068700c9c813e34"},
+ {file = "PyYAML-6.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:277a0ef2981ca40581a47093e9e2d13b3f1fbbeffae064c1d21bfceba2030287"},
+ {file = "PyYAML-6.0-cp38-cp38-win32.whl", hash = "sha256:d4eccecf9adf6fbcc6861a38015c2a64f38b9d94838ac1810a9023a0609e1b78"},
+ {file = "PyYAML-6.0-cp38-cp38-win_amd64.whl", hash = "sha256:1e4747bc279b4f613a09eb64bba2ba602d8a6664c6ce6396a4d0cd413a50ce07"},
+ {file = "PyYAML-6.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:055d937d65826939cb044fc8c9b08889e8c743fdc6a32b33e2390f66013e449b"},
+ {file = "PyYAML-6.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e61ceaab6f49fb8bdfaa0f92c4b57bcfbea54c09277b1b4f7ac376bfb7a7c174"},
+ {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d67d839ede4ed1b28a4e8909735fc992a923cdb84e618544973d7dfc71540803"},
+ {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cba8c411ef271aa037d7357a2bc8f9ee8b58b9965831d9e51baf703280dc73d3"},
+ {file = "PyYAML-6.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:40527857252b61eacd1d9af500c3337ba8deb8fc298940291486c465c8b46ec0"},
+ {file = "PyYAML-6.0-cp39-cp39-win32.whl", hash = "sha256:b5b9eccad747aabaaffbc6064800670f0c297e52c12754eb1d976c57e4f74dcb"},
+ {file = "PyYAML-6.0-cp39-cp39-win_amd64.whl", hash = "sha256:b3d267842bf12586ba6c734f89d1f5b871df0273157918b0ccefa29deb05c21c"},
+ {file = "PyYAML-6.0.tar.gz", hash = "sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2"},
]
recommonmark = [
{file = "recommonmark-0.6.0-py2.py3-none-any.whl", hash = "sha256:2ec4207a574289355d5b6ae4ae4abb29043346ca12cdd5f07d374dc5987d2852"},
{file = "recommonmark-0.6.0.tar.gz", hash = "sha256:29cd4faeb6c5268c633634f2d69aef9431e0f4d347f90659fd0aab20e541efeb"},
]
requests = [
- {file = "requests-2.26.0-py2.py3-none-any.whl", hash = "sha256:6c1246513ecd5ecd4528a0906f910e8f0f9c6b8ec72030dc9fd154dc1a6efd24"},
- {file = "requests-2.26.0.tar.gz", hash = "sha256:b8aa58f8cf793ffd8782d3d8cb19e66ef36f7aba4353eec859e74678b01b07a7"},
+ {file = "requests-2.27.1-py2.py3-none-any.whl", hash = "sha256:f22fa1e554c9ddfd16e6e41ac79759e17be9e492b3587efa038054674760e72d"},
+ {file = "requests-2.27.1.tar.gz", hash = "sha256:68d7c56fd5a8999887728ef304a6d12edc7be74f1cfa47714fc8b414525c9a61"},
]
s3transfer = [
- {file = "s3transfer-0.5.0-py3-none-any.whl", hash = "sha256:9c1dc369814391a6bda20ebbf4b70a0f34630592c9aa520856bf384916af2803"},
- {file = "s3transfer-0.5.0.tar.gz", hash = "sha256:50ed823e1dc5868ad40c8dc92072f757aa0e653a192845c94a3b676f4a62da4c"},
+ {file = "s3transfer-0.5.2-py3-none-any.whl", hash = "sha256:7a6f4c4d1fdb9a2b640244008e142cbc2cd3ae34b386584ef044dd0f27101971"},
+ {file = "s3transfer-0.5.2.tar.gz", hash = "sha256:95c58c194ce657a5f4fb0b9e60a84968c808888aed628cd98ab8771fe1db98ed"},
]
six = [
{file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"},
{file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"},
]
snowballstemmer = [
- {file = "snowballstemmer-2.1.0-py2.py3-none-any.whl", hash = "sha256:b51b447bea85f9968c13b650126a888aabd4cb4463fca868ec596826325dedc2"},
- {file = "snowballstemmer-2.1.0.tar.gz", hash = "sha256:e997baa4f2e9139951b6f4c631bad912dfd3c792467e2f03d7239464af90e914"},
+ {file = "snowballstemmer-2.2.0-py2.py3-none-any.whl", hash = "sha256:c8e1716e83cc398ae16824e5572ae04e0d9fc2c6b985fb0f900f5f0c96ecba1a"},
+ {file = "snowballstemmer-2.2.0.tar.gz", hash = "sha256:09b16deb8547d3412ad7b590689584cd0fe25ec8db3be37788be3810cbf19cb1"},
]
sphinx = [
- {file = "Sphinx-3.0.4-py3-none-any.whl", hash = "sha256:779a519adbd3a70fc7c468af08c5e74829868b0a5b34587b33340e010291856c"},
- {file = "Sphinx-3.0.4.tar.gz", hash = "sha256:ea64df287958ee5aac46be7ac2b7277305b0381d213728c3a49d8bb9b8415807"},
+ {file = "Sphinx-4.5.0-py3-none-any.whl", hash = "sha256:ebf612653238bcc8f4359627a9b7ce44ede6fdd75d9d30f68255c7383d3a6226"},
+ {file = "Sphinx-4.5.0.tar.gz", hash = "sha256:7bf8ca9637a4ee15af412d1a1d9689fec70523a68ca9bb9127c2f3eeb344e2e6"},
]
sphinx-markdown-tables = [
{file = "sphinx-markdown-tables-0.0.12.tar.gz", hash = "sha256:08779e77832b6562b6b86e4270ae50b0b10010fdd35cf9aadcb5b8246571b933"},
{file = "sphinx_markdown_tables-0.0.12-py3-none-any.whl", hash = "sha256:ecfc7fd2e02c339fcf12eb9cbcf59fedeb5ff54b6fe666df6e0791a03ece9b05"},
]
sphinx-rtd-theme = [
- {file = "sphinx_rtd_theme-0.4.3-py2.py3-none-any.whl", hash = "sha256:00cf895504a7895ee433807c62094cf1e95f065843bf3acd17037c3e9a2becd4"},
- {file = "sphinx_rtd_theme-0.4.3.tar.gz", hash = "sha256:728607e34d60456d736cc7991fd236afb828b21b82f956c5ea75f94c8414040a"},
+ {file = "sphinx_rtd_theme-1.0.0-py2.py3-none-any.whl", hash = "sha256:4d35a56f4508cfee4c4fb604373ede6feae2a306731d533f409ef5c3496fdbd8"},
+ {file = "sphinx_rtd_theme-1.0.0.tar.gz", hash = "sha256:eec6d497e4c2195fa0e8b2016b337532b8a699a68bcb22a512870e16925c6a5c"},
]
sphinxcontrib-applehelp = [
{file = "sphinxcontrib-applehelp-1.0.2.tar.gz", hash = "sha256:a072735ec80e7675e3f432fcae8610ecf509c5f1869d17e2eecff44389cdbc58"},
@@ -779,15 +900,14 @@ tabulate = [
{file = "tabulate-0.8.9.tar.gz", hash = "sha256:eb1d13f25760052e8931f2ef80aaf6045a6cceb47514db8beab24cded16f13a7"},
]
typing-extensions = [
- {file = "typing_extensions-3.10.0.0-py2-none-any.whl", hash = "sha256:0ac0f89795dd19de6b97debb0c6af1c70987fd80a2d62d1958f7e56fcc31b497"},
- {file = "typing_extensions-3.10.0.0-py3-none-any.whl", hash = "sha256:779383f6086d90c99ae41cf0ff39aac8a7937a9283ce0a414e5dd782f4c94a84"},
- {file = "typing_extensions-3.10.0.0.tar.gz", hash = "sha256:50b6f157849174217d0656f99dc82fe932884fb250826c18350e159ec6cdf342"},
+ {file = "typing_extensions-4.2.0-py3-none-any.whl", hash = "sha256:6657594ee297170d19f67d55c05852a874e7eb634f4f753dbd667855e07c1708"},
+ {file = "typing_extensions-4.2.0.tar.gz", hash = "sha256:f1c24655a0da0d1b67f07e17a5e6b2a105894e6824b92096378bb3668ef02376"},
]
urllib3 = [
- {file = "urllib3-1.26.6-py2.py3-none-any.whl", hash = "sha256:39fb8672126159acb139a7718dd10806104dec1e2f0f6c88aab05d17df10c8d4"},
- {file = "urllib3-1.26.6.tar.gz", hash = "sha256:f57b4c16c62fa2760b7e3d97c35b255512fb6b59a259730f36ba32ce9f8e342f"},
+ {file = "urllib3-1.26.9-py2.py3-none-any.whl", hash = "sha256:44ece4d53fb1706f667c9bd1c648f5469a2ec925fcf3a776667042d645472c14"},
+ {file = "urllib3-1.26.9.tar.gz", hash = "sha256:aabaf16477806a5e1dd19aa41f8c2b7950dd3c746362d7e3223dbe6de6ac448e"},
]
zipp = [
- {file = "zipp-3.5.0-py3-none-any.whl", hash = "sha256:957cfda87797e389580cb8b9e3870841ca991e2125350677b2ca83a0e99390a3"},
- {file = "zipp-3.5.0.tar.gz", hash = "sha256:f5812b1e007e48cff63449a5e9f4e7ebea716b4111f9c4f9a645f91d579bf0c4"},
+ {file = "zipp-3.8.0-py3-none-any.whl", hash = "sha256:c4f6e5bbf48e74f7a38e7cc5b0480ff42b0ae5178957d564d18932525d5cf099"},
+ {file = "zipp-3.8.0.tar.gz", hash = "sha256:56bf8aadb83c24db6c4b577e13de374ccfb67da2078beba1d037c17980bf43ad"},
]
diff --git a/tools/c7n_sphinxext/pyproject.toml b/tools/c7n_sphinxext/pyproject.toml
index d1c3a3c2ffd..9f0dad97e20 100644
--- a/tools/c7n_sphinxext/pyproject.toml
+++ b/tools/c7n_sphinxext/pyproject.toml
@@ -1,6 +1,6 @@
[tool.poetry]
name = "c7n_sphinxext"
-version = "1.1.13"
+version = "1.1.15"
description = "Cloud Custodian - Sphinx Extensions"
authors = ["Cloud Custodian Project"]
license = "Apache-2.0"
@@ -18,14 +18,15 @@ readme = "README.md"
c7n-sphinxext = 'c7n_sphinxext.docgen:main'
[tool.poetry.dependencies]
-python = "^3.6"
-Sphinx = "~3.0"
-Pygments = "^2.6.1"
-sphinx_rtd_theme = "^0.4.3"
+python = "^3.7"
+Sphinx = "^4.2.0"
+Pygments = "^2.10.0"
+sphinx-rtd-theme = "^1.0.0"
recommonmark = "^0.6.0"
sphinx_markdown_tables = "^0.0.12"
-click = "^7.1.2"
-typing-extensions = "^3.7.4"
+myst-parser = "^0.15.2"
+click = "^8.0"
+docutils = ">=0.14,<0.18"
[tool.poetry.dev-dependencies]
c7n = {path = "../..", develop = true}
diff --git a/tools/c7n_sphinxext/requirements.txt b/tools/c7n_sphinxext/requirements.txt
index 5c008dfbcfe..1d121297247 100644
--- a/tools/c7n_sphinxext/requirements.txt
+++ b/tools/c7n_sphinxext/requirements.txt
@@ -1,31 +1,38 @@
-alabaster==0.7.12; python_version >= "3.5"
-babel==2.9.1; python_version >= "3.5" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.5"
-certifi==2021.5.30; python_version >= "3.5" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.5"
-charset-normalizer==2.0.4; python_full_version >= "3.6.0" and python_version >= "3.5"
-click==7.1.2; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.5.0")
-colorama==0.4.4; python_version >= "3.5" and python_full_version < "3.0.0" and sys_platform == "win32" or sys_platform == "win32" and python_version >= "3.5" and python_full_version >= "3.5.0"
+alabaster==0.7.12; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
+attrs==21.4.0; python_version >= "3.6" and python_full_version < "3.0.0" and python_version < "4.0" or python_version >= "3.6" and python_version < "4.0" and python_full_version >= "3.5.0"
+babel==2.9.1; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
+certifi==2021.10.8; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
+charset-normalizer==2.0.12; python_full_version >= "3.6.0" and python_version >= "3.6"
+click==8.1.2; python_version >= "3.7"
+colorama==0.4.4; python_version >= "3.7" and python_full_version < "3.0.0" and sys_platform == "win32" and platform_system == "Windows" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6") or sys_platform == "win32" and python_version >= "3.7" and python_full_version >= "3.5.0" and platform_system == "Windows" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6")
commonmark==0.9.1
-docutils==0.17.1; python_version >= "3.5" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.5"
-idna==3.2; python_version >= "3.5" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.5"
-imagesize==1.2.0; python_version >= "3.5" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.5"
-jinja2==3.0.1; python_version >= "3.6"
+docutils==0.17.1; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.5.0")
+idna==3.3; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
+imagesize==1.3.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
+importlib-metadata==4.11.3; python_version < "3.8" and python_version >= "3.7" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6")
+jinja2==3.1.1; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7"
+markdown-it-py==1.1.0; python_version >= "3.6" and python_version < "4.0"
markdown==3.0.1; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0"
-markupsafe==2.0.1; python_version >= "3.6"
-packaging==21.0; python_version >= "3.6"
-pygments==2.9.0; python_version >= "3.5"
-pyparsing==2.4.7; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.3.0" and python_version >= "3.6"
-pytz==2021.1; python_version >= "3.5" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.5"
+markupsafe==2.1.1; python_version >= "3.7"
+mdit-py-plugins==0.2.8; python_version >= "3.6" and python_version < "4.0"
+myst-parser==0.15.2; python_version >= "3.6"
+packaging==21.3; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
+pygments==2.11.2; python_version >= "3.5"
+pyparsing==3.0.8; python_full_version >= "3.6.8" and python_version >= "3.6"
+pytz==2022.1; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
+pyyaml==6.0; python_version >= "3.6"
recommonmark==0.6.0
-requests==2.26.0; python_version >= "3.5" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.5"
-snowballstemmer==2.1.0; python_version >= "3.5"
+requests==2.27.1; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
+snowballstemmer==2.2.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
sphinx-markdown-tables==0.0.12
-sphinx-rtd-theme==0.4.3
-sphinx==3.0.4; python_version >= "3.5"
-sphinxcontrib-applehelp==1.0.2; python_version >= "3.5"
-sphinxcontrib-devhelp==1.0.2; python_version >= "3.5"
-sphinxcontrib-htmlhelp==2.0.0; python_version >= "3.6"
-sphinxcontrib-jsmath==1.0.1; python_version >= "3.5"
-sphinxcontrib-qthelp==1.0.3; python_version >= "3.5"
-sphinxcontrib-serializinghtml==1.1.5; python_version >= "3.5"
-typing-extensions==3.10.0.0
-urllib3==1.26.6; python_version >= "3.5" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version < "4" and python_version >= "3.5"
+sphinx-rtd-theme==1.0.0; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.4.0")
+sphinx==4.5.0; python_version >= "3.6"
+sphinxcontrib-applehelp==1.0.2; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
+sphinxcontrib-devhelp==1.0.2; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
+sphinxcontrib-htmlhelp==2.0.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
+sphinxcontrib-jsmath==1.0.1; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
+sphinxcontrib-qthelp==1.0.3; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
+sphinxcontrib-serializinghtml==1.1.5; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
+typing-extensions==4.2.0; python_version < "3.8" and python_version >= "3.7"
+urllib3==1.26.9; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version < "4" and python_version >= "3.6"
+zipp==3.8.0; python_version < "3.8" and python_version >= "3.7"
diff --git a/tools/c7n_sphinxext/setup.py b/tools/c7n_sphinxext/setup.py
index d1b08cf9539..f3412c70808 100644
--- a/tools/c7n_sphinxext/setup.py
+++ b/tools/c7n_sphinxext/setup.py
@@ -10,37 +10,40 @@
{'': ['*'], 'c7n_sphinxext': ['_templates/*']}
install_requires = \
-['Pygments>=2.6.1,<3.0.0',
- 'Sphinx>=3.0,<3.1',
- 'argcomplete (>=1.12.3,<2.0.0)',
- 'attrs (>=21.2.0,<22.0.0)',
- 'boto3 (>=1.18.21,<2.0.0)',
- 'botocore (>=1.21.21,<2.0.0)',
- 'c7n (>=0.9.14,<0.10.0)',
- 'click>=7.1.2,<8.0.0',
- 'importlib-metadata (>=4.6.4,<5.0.0)',
- 'jmespath (>=0.10.0,<0.11.0)',
- 'jsonschema (>=3.2.0,<4.0.0)',
- 'pyrsistent (>=0.18.0,<0.19.0)',
+['Pygments>=2.10.0,<3.0.0',
+ 'Sphinx>=4.2.0,<5.0.0',
+ 'argcomplete (>=2.0.0,<3.0.0)',
+ 'attrs (>=21.4.0,<22.0.0)',
+ 'boto3 (>=1.21.42,<2.0.0)',
+ 'botocore (>=1.24.42,<2.0.0)',
+ 'c7n (>=0.9.16,<0.10.0)',
+ 'click>=8.0,<9.0',
+ 'docutils (>=0.17.1,<0.18.0)',
+ 'docutils>=0.14,<0.18',
+ 'importlib-metadata (>=4.11.3,<5.0.0)',
+ 'importlib-resources (>=5.7.1,<6.0.0)',
+ 'jmespath (>=1.0.0,<2.0.0)',
+ 'jsonschema (>=4.4.0,<5.0.0)',
+ 'myst-parser>=0.15.2,<0.16.0',
+ 'pyrsistent (>=0.18.1,<0.19.0)',
'python-dateutil (>=2.8.2,<3.0.0)',
- 'pyyaml (>=5.4.1,<6.0.0)',
+ 'pyyaml (>=6.0,<7.0)',
'recommonmark>=0.6.0,<0.7.0',
- 's3transfer (>=0.5.0,<0.6.0)',
+ 's3transfer (>=0.5.2,<0.6.0)',
'six (>=1.16.0,<2.0.0)',
+ 'sphinx-rtd-theme>=1.0.0,<2.0.0',
'sphinx_markdown_tables>=0.0.12,<0.0.13',
- 'sphinx_rtd_theme>=0.4.3,<0.5.0',
'tabulate (>=0.8.9,<0.9.0)',
- 'typing-extensions (>=3.10.0.0,<4.0.0.0)',
- 'typing-extensions>=3.7.4,<4.0.0',
- 'urllib3 (>=1.26.6,<2.0.0)',
- 'zipp (>=3.5.0,<4.0.0)']
+ 'typing-extensions (>=4.2.0,<5.0.0)',
+ 'urllib3 (>=1.26.9,<2.0.0)',
+ 'zipp (>=3.8.0,<4.0.0)']
entry_points = \
{'console_scripts': ['c7n-sphinxext = c7n_sphinxext.docgen:main']}
setup_kwargs = {
'name': 'c7n-sphinxext',
- 'version': '1.1.13',
+ 'version': '1.1.15',
'description': 'Cloud Custodian - Sphinx Extensions',
'license': 'Apache-2.0',
'classifiers': [
@@ -59,7 +62,7 @@
'package_data': package_data,
'install_requires': install_requires,
'entry_points': entry_points,
- 'python_requires': '>=3.6,<4.0',
+ 'python_requires': '>=3.7,<4.0',
}
diff --git a/tools/c7n_terraform/poetry.lock b/tools/c7n_terraform/poetry.lock
index b6f1ccfb8ce..e56d5167c51 100644
--- a/tools/c7n_terraform/poetry.lock
+++ b/tools/c7n_terraform/poetry.lock
@@ -1,10 +1,10 @@
[[package]]
name = "argcomplete"
-version = "1.12.3"
+version = "2.0.0"
description = "Bash tab completion for argparse"
category = "dev"
optional = false
-python-versions = "*"
+python-versions = ">=3.6"
[package.dependencies]
importlib-metadata = {version = ">=0.23,<5", markers = "python_version == \"3.7\""}
@@ -22,29 +22,29 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
[[package]]
name = "attrs"
-version = "21.2.0"
+version = "21.4.0"
description = "Classes Without Boilerplate"
category = "dev"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
[package.extras]
-dev = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "furo", "sphinx", "sphinx-notfound-page", "pre-commit"]
+dev = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "furo", "sphinx", "sphinx-notfound-page", "pre-commit", "cloudpickle"]
docs = ["furo", "sphinx", "zope.interface", "sphinx-notfound-page"]
-tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface"]
-tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins"]
+tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "cloudpickle"]
+tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "cloudpickle"]
[[package]]
name = "boto3"
-version = "1.18.21"
+version = "1.21.42"
description = "The AWS SDK for Python"
category = "dev"
optional = false
python-versions = ">= 3.6"
[package.dependencies]
-botocore = ">=1.21.21,<1.22.0"
-jmespath = ">=0.7.1,<1.0.0"
+botocore = ">=1.24.42,<1.25.0"
+jmespath = ">=0.7.1,<2.0.0"
s3transfer = ">=0.5.0,<0.6.0"
[package.extras]
@@ -52,36 +52,37 @@ crt = ["botocore[crt] (>=1.21.0,<2.0a0)"]
[[package]]
name = "botocore"
-version = "1.21.21"
+version = "1.24.42"
description = "Low-level, data-driven core of boto 3."
category = "dev"
optional = false
python-versions = ">= 3.6"
[package.dependencies]
-jmespath = ">=0.7.1,<1.0.0"
+jmespath = ">=0.7.1,<2.0.0"
python-dateutil = ">=2.1,<3.0.0"
urllib3 = ">=1.25.4,<1.27"
[package.extras]
-crt = ["awscrt (==0.11.24)"]
+crt = ["awscrt (==0.13.8)"]
[[package]]
name = "c7n"
-version = "0.9.14"
+version = "0.9.16"
description = "Cloud Custodian - Policy Rules Engine"
category = "dev"
optional = false
-python-versions = "^3.6"
+python-versions = "^3.7"
develop = true
[package.dependencies]
-argcomplete = "^1.11.1"
+argcomplete = ">=1.12.3"
boto3 = "^1.12.31"
-importlib-metadata = ">1.7.0;python_version<3.8"
-jsonschema = "^3.2.0"
-python-dateutil = "^2.8.1"
-pyyaml = "^5.3"
+docutils = ">=0.14,<0.18"
+importlib-metadata = ">=4.11.1"
+jsonschema = ">=3.0.0"
+python-dateutil = "^2.8.2"
+pyyaml = ">=5.4.0"
tabulate = "^0.8.6"
[package.source]
@@ -90,11 +91,15 @@ url = "../.."
[[package]]
name = "click"
-version = "7.1.2"
+version = "8.1.2"
description = "Composable command line interface toolkit"
category = "main"
optional = false
-python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
+python-versions = ">=3.7"
+
+[package.dependencies]
+colorama = {version = "*", markers = "platform_system == \"Windows\""}
+importlib-metadata = {version = "*", markers = "python_version < \"3.8\""}
[[package]]
name = "colorama"
@@ -105,32 +110,44 @@ optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
[[package]]
-name = "commonmark"
-version = "0.9.1"
-description = "Python parser for the CommonMark Markdown spec"
-category = "main"
+name = "docutils"
+version = "0.17.1"
+description = "Docutils -- Python Documentation Utilities"
+category = "dev"
optional = false
-python-versions = "*"
-
-[package.extras]
-test = ["flake8 (==3.7.8)", "hypothesis (==3.55.3)"]
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
[[package]]
name = "importlib-metadata"
-version = "4.6.4"
+version = "4.11.3"
description = "Read metadata from Python packages"
-category = "dev"
+category = "main"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.7"
[package.dependencies]
typing-extensions = {version = ">=3.6.4", markers = "python_version < \"3.8\""}
zipp = ">=0.5"
[package.extras]
-docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
+docs = ["sphinx", "jaraco.packaging (>=9)", "rst.linker (>=1.9)"]
perf = ["ipython"]
-testing = ["pytest (>=4.6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pep517", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy", "importlib-resources (>=1.3)"]
+testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)", "importlib-resources (>=1.3)"]
+
+[[package]]
+name = "importlib-resources"
+version = "5.7.1"
+description = "Read resources from Python packages"
+category = "dev"
+optional = false
+python-versions = ">=3.7"
+
+[package.dependencies]
+zipp = {version = ">=3.1.0", markers = "python_version < \"3.10\""}
+
+[package.extras]
+docs = ["sphinx", "jaraco.packaging (>=9)", "rst.linker (>=1.9)"]
+testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)"]
[[package]]
name = "iniconfig"
@@ -142,29 +159,30 @@ python-versions = "*"
[[package]]
name = "jmespath"
-version = "0.10.0"
+version = "1.0.0"
description = "JSON Matching Expressions"
category = "dev"
optional = false
-python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*"
+python-versions = ">=3.7"
[[package]]
name = "jsonschema"
-version = "3.2.0"
+version = "4.4.0"
description = "An implementation of JSON Schema validation for Python"
category = "dev"
optional = false
-python-versions = "*"
+python-versions = ">=3.7"
[package.dependencies]
attrs = ">=17.4.0"
importlib-metadata = {version = "*", markers = "python_version < \"3.8\""}
-pyrsistent = ">=0.14.0"
-six = ">=1.11.0"
+importlib-resources = {version = ">=1.4.0", markers = "python_version < \"3.9\""}
+pyrsistent = ">=0.14.0,<0.17.0 || >0.17.0,<0.17.1 || >0.17.1,<0.17.2 || >0.17.2"
+typing-extensions = {version = "*", markers = "python_version < \"3.8\""}
[package.extras]
-format = ["idna", "jsonpointer (>1.13)", "rfc3987", "strict-rfc3339", "webcolors"]
-format_nongpl = ["idna", "jsonpointer (>1.13)", "webcolors", "rfc3986-validator (>0.1.0)", "rfc3339-validator"]
+format = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3987", "uri-template", "webcolors (>=1.11)"]
+format_nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3986-validator (>0.1.0)", "uri-template", "webcolors (>=1.11)"]
[[package]]
name = "lark-parser"
@@ -180,72 +198,60 @@ regex = ["regex"]
[[package]]
name = "packaging"
-version = "21.0"
+version = "21.3"
description = "Core utilities for Python packages"
category = "dev"
optional = false
python-versions = ">=3.6"
[package.dependencies]
-pyparsing = ">=2.0.2"
+pyparsing = ">=2.0.2,<3.0.5 || >3.0.5"
[[package]]
name = "pluggy"
-version = "0.13.1"
+version = "1.0.0"
description = "plugin and hook calling mechanisms for python"
category = "dev"
optional = false
-python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
+python-versions = ">=3.6"
[package.dependencies]
importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""}
[package.extras]
dev = ["pre-commit", "tox"]
-
-[[package]]
-name = "pprintpp"
-version = "0.4.0"
-description = "A drop-in replacement for pprint that's actually pretty"
-category = "main"
-optional = false
-python-versions = "*"
+testing = ["pytest", "pytest-benchmark"]
[[package]]
name = "py"
-version = "1.10.0"
+version = "1.11.0"
description = "library with cross-python path, ini-parsing, io, code, log facilities"
category = "dev"
optional = false
-python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
-
-[[package]]
-name = "pygments"
-version = "2.9.0"
-description = "Pygments is a syntax highlighting package written in Python."
-category = "main"
-optional = false
-python-versions = ">=3.5"
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
[[package]]
name = "pyparsing"
-version = "2.4.7"
-description = "Python parsing module"
+version = "3.0.8"
+description = "pyparsing module - Classes and methods to define and execute parsing grammars"
category = "dev"
optional = false
-python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*"
+python-versions = ">=3.6.8"
+
+[package.extras]
+diagrams = ["railroad-diagrams", "jinja2"]
[[package]]
name = "pyrsistent"
-version = "0.18.0"
+version = "0.18.1"
description = "Persistent/Functional/Immutable data structures"
category = "dev"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.7"
[[package]]
name = "pytest"
-version = "6.2.4"
+version = "6.2.5"
description = "pytest: simple powerful testing with Python"
category = "dev"
optional = false
@@ -258,7 +264,7 @@ colorama = {version = "*", markers = "sys_platform == \"win32\""}
importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""}
iniconfig = "*"
packaging = "*"
-pluggy = ">=0.12,<1.0.0a1"
+pluggy = ">=0.12,<2.0"
py = ">=1.8.2"
toml = "*"
@@ -289,30 +295,15 @@ lark-parser = ">=0.10.0,<0.11.0"
[[package]]
name = "pyyaml"
-version = "5.4.1"
+version = "6.0"
description = "YAML parser and emitter for Python"
category = "dev"
optional = false
-python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*"
-
-[[package]]
-name = "rich"
-version = "1.3.1"
-description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal"
-category = "main"
-optional = false
-python-versions = ">=3.6,<4.0"
-
-[package.dependencies]
-colorama = ">=0.4.0,<0.5.0"
-commonmark = ">=0.9.0,<0.10.0"
-pprintpp = ">=0.4.0,<0.5.0"
-pygments = ">=2.6.0,<3.0.0"
-typing-extensions = ">=3.7.4,<4.0.0"
+python-versions = ">=3.6"
[[package]]
name = "s3transfer"
-version = "0.5.0"
+version = "0.5.2"
description = "An Amazon S3 Transfer Manager"
category = "dev"
optional = false
@@ -353,145 +344,141 @@ python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*"
[[package]]
name = "typing-extensions"
-version = "3.10.0.0"
-description = "Backported and Experimental Type Hints for Python 3.5+"
+version = "4.2.0"
+description = "Backported and Experimental Type Hints for Python 3.7+"
category = "main"
optional = false
-python-versions = "*"
+python-versions = ">=3.7"
[[package]]
name = "urllib3"
-version = "1.26.6"
+version = "1.26.9"
description = "HTTP library with thread-safe connection pooling, file post, and more."
category = "dev"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, <4"
[package.extras]
-brotli = ["brotlipy (>=0.6.0)"]
+brotli = ["brotlicffi (>=0.8.0)", "brotli (>=1.0.9)", "brotlipy (>=0.6.0)"]
secure = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "certifi", "ipaddress"]
socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"]
[[package]]
name = "zipp"
-version = "3.5.0"
+version = "3.8.0"
description = "Backport of pathlib-compatible object wrapper for zip files"
-category = "dev"
+category = "main"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.7"
[package.extras]
-docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
-testing = ["pytest (>=4.6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "jaraco.itertools", "func-timeout", "pytest-black (>=0.3.7)", "pytest-mypy"]
+docs = ["sphinx", "jaraco.packaging (>=9)", "rst.linker (>=1.9)"]
+testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "jaraco.itertools", "func-timeout", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)"]
[metadata]
lock-version = "1.1"
python-versions = "^3.7"
-content-hash = "84483bf69475b30b75eb1176efe4097f6b7374273034a37b60b8b5a269ba44b7"
+content-hash = "1e18e324f5f1bf2e69602572e5fecb1c9c84001a4989fc0dc9a70595b86cb125"
[metadata.files]
argcomplete = [
- {file = "argcomplete-1.12.3-py2.py3-none-any.whl", hash = "sha256:291f0beca7fd49ce285d2f10e4c1c77e9460cf823eef2de54df0c0fec88b0d81"},
- {file = "argcomplete-1.12.3.tar.gz", hash = "sha256:2c7dbffd8c045ea534921e63b0be6fe65e88599990d8dc408ac8c542b72a5445"},
+ {file = "argcomplete-2.0.0-py2.py3-none-any.whl", hash = "sha256:cffa11ea77999bb0dd27bb25ff6dc142a6796142f68d45b1a26b11f58724561e"},
+ {file = "argcomplete-2.0.0.tar.gz", hash = "sha256:6372ad78c89d662035101418ae253668445b391755cfe94ea52f1b9d22425b20"},
]
atomicwrites = [
{file = "atomicwrites-1.4.0-py2.py3-none-any.whl", hash = "sha256:6d1784dea7c0c8d4a5172b6c620f40b6e4cbfdf96d783691f2e1302a7b88e197"},
{file = "atomicwrites-1.4.0.tar.gz", hash = "sha256:ae70396ad1a434f9c7046fd2dd196fc04b12f9e91ffb859164193be8b6168a7a"},
]
attrs = [
- {file = "attrs-21.2.0-py2.py3-none-any.whl", hash = "sha256:149e90d6d8ac20db7a955ad60cf0e6881a3f20d37096140088356da6c716b0b1"},
- {file = "attrs-21.2.0.tar.gz", hash = "sha256:ef6aaac3ca6cd92904cdd0d83f629a15f18053ec84e6432106f7a4d04ae4f5fb"},
+ {file = "attrs-21.4.0-py2.py3-none-any.whl", hash = "sha256:2d27e3784d7a565d36ab851fe94887c5eccd6a463168875832a1be79c82828b4"},
+ {file = "attrs-21.4.0.tar.gz", hash = "sha256:626ba8234211db98e869df76230a137c4c40a12d72445c45d5f5b716f076e2fd"},
]
boto3 = [
- {file = "boto3-1.18.21-py3-none-any.whl", hash = "sha256:59b6e8e79b2114e21388288a06a004f2a9378b1e0fc58466a35da8fb74fe2dd8"},
- {file = "boto3-1.18.21.tar.gz", hash = "sha256:00748c760dc30be61c6db4b092718f6a9f8d27c767da0e232695a65adb75cde8"},
+ {file = "boto3-1.21.42-py3-none-any.whl", hash = "sha256:895fb88c69be78f82cfee58a79c97a3ad8d4a2a1209041a411d7d6b9fc5393e4"},
+ {file = "boto3-1.21.42.tar.gz", hash = "sha256:bcb541175a7d190dd919a0af0e807ee6e9d26f135551e741b10d94343f2d7588"},
]
botocore = [
- {file = "botocore-1.21.21-py3-none-any.whl", hash = "sha256:fa5ac13829d24fcdd385e82c3b6d78e22d93f427cca8dac38158cae84a8cc2f5"},
- {file = "botocore-1.21.21.tar.gz", hash = "sha256:12cfe74b0a5c44afb34bdd86c1f8ad74bc2ad9ec168eaed9040ef70cb3db944f"},
+ {file = "botocore-1.24.42-py3-none-any.whl", hash = "sha256:14aee41c8bf59d2dd2d89e8751fa37d3c95dcb92707d1966aa02697e914c1417"},
+ {file = "botocore-1.24.42.tar.gz", hash = "sha256:a2baa9484bbaee96ef312c049b8e360badcab58329e487b57567644a571b5f4a"},
]
c7n = []
click = [
- {file = "click-7.1.2-py2.py3-none-any.whl", hash = "sha256:dacca89f4bfadd5de3d7489b7c8a566eee0d3676333fbb50030263894c38c0dc"},
- {file = "click-7.1.2.tar.gz", hash = "sha256:d2b5255c7c6349bc1bd1e59e08cd12acbbd63ce649f2588755783aa94dfb6b1a"},
+ {file = "click-8.1.2-py3-none-any.whl", hash = "sha256:24e1a4a9ec5bf6299411369b208c1df2188d9eb8d916302fe6bf03faed227f1e"},
+ {file = "click-8.1.2.tar.gz", hash = "sha256:479707fe14d9ec9a0757618b7a100a0ae4c4e236fac5b7f80ca68028141a1a72"},
]
colorama = [
{file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"},
{file = "colorama-0.4.4.tar.gz", hash = "sha256:5941b2b48a20143d2267e95b1c2a7603ce057ee39fd88e7329b0c292aa16869b"},
]
-commonmark = [
- {file = "commonmark-0.9.1-py2.py3-none-any.whl", hash = "sha256:da2f38c92590f83de410ba1a3cbceafbc74fee9def35f9251ba9a971d6d66fd9"},
- {file = "commonmark-0.9.1.tar.gz", hash = "sha256:452f9dc859be7f06631ddcb328b6919c67984aca654e5fefb3914d54691aed60"},
+docutils = [
+ {file = "docutils-0.17.1-py2.py3-none-any.whl", hash = "sha256:cf316c8370a737a022b72b56874f6602acf974a37a9fba42ec2876387549fc61"},
+ {file = "docutils-0.17.1.tar.gz", hash = "sha256:686577d2e4c32380bb50cbb22f575ed742d58168cee37e99117a854bcd88f125"},
]
importlib-metadata = [
- {file = "importlib_metadata-4.6.4-py3-none-any.whl", hash = "sha256:ed5157fef23a4bc4594615a0dd8eba94b2bb36bf2a343fa3d8bb2fa0a62a99d5"},
- {file = "importlib_metadata-4.6.4.tar.gz", hash = "sha256:7b30a78db2922d78a6f47fb30683156a14f3c6aa5cc23f77cc8967e9ab2d002f"},
+ {file = "importlib_metadata-4.11.3-py3-none-any.whl", hash = "sha256:1208431ca90a8cca1a6b8af391bb53c1a2db74e5d1cef6ddced95d4b2062edc6"},
+ {file = "importlib_metadata-4.11.3.tar.gz", hash = "sha256:ea4c597ebf37142f827b8f39299579e31685c31d3a438b59f469406afd0f2539"},
+]
+importlib-resources = [
+ {file = "importlib_resources-5.7.1-py3-none-any.whl", hash = "sha256:e447dc01619b1e951286f3929be820029d48c75eb25d265c28b92a16548212b8"},
+ {file = "importlib_resources-5.7.1.tar.gz", hash = "sha256:b6062987dfc51f0fcb809187cffbd60f35df7acb4589091f154214af6d0d49d3"},
]
iniconfig = [
{file = "iniconfig-1.1.1-py2.py3-none-any.whl", hash = "sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3"},
{file = "iniconfig-1.1.1.tar.gz", hash = "sha256:bc3af051d7d14b2ee5ef9969666def0cd1a000e121eaea580d4a313df4b37f32"},
]
jmespath = [
- {file = "jmespath-0.10.0-py2.py3-none-any.whl", hash = "sha256:cdf6525904cc597730141d61b36f2e4b8ecc257c420fa2f4549bac2c2d0cb72f"},
- {file = "jmespath-0.10.0.tar.gz", hash = "sha256:b85d0567b8666149a93172712e68920734333c0ce7e89b78b3e987f71e5ed4f9"},
+ {file = "jmespath-1.0.0-py3-none-any.whl", hash = "sha256:e8dcd576ed616f14ec02eed0005c85973b5890083313860136657e24784e4c04"},
+ {file = "jmespath-1.0.0.tar.gz", hash = "sha256:a490e280edd1f57d6de88636992d05b71e97d69a26a19f058ecf7d304474bf5e"},
]
jsonschema = [
- {file = "jsonschema-3.2.0-py2.py3-none-any.whl", hash = "sha256:4e5b3cf8216f577bee9ce139cbe72eca3ea4f292ec60928ff24758ce626cd163"},
- {file = "jsonschema-3.2.0.tar.gz", hash = "sha256:c8a85b28d377cc7737e46e2d9f2b4f44ee3c0e1deac6bf46ddefc7187d30797a"},
+ {file = "jsonschema-4.4.0-py3-none-any.whl", hash = "sha256:77281a1f71684953ee8b3d488371b162419767973789272434bbc3f29d9c8823"},
+ {file = "jsonschema-4.4.0.tar.gz", hash = "sha256:636694eb41b3535ed608fe04129f26542b59ed99808b4f688aa32dcf55317a83"},
]
lark-parser = [
{file = "lark-parser-0.10.1.tar.gz", hash = "sha256:42f367612a1bbc4cf9d8c8eb1b209d8a9b397d55af75620c9e6f53e502235996"},
]
packaging = [
- {file = "packaging-21.0-py3-none-any.whl", hash = "sha256:c86254f9220d55e31cc94d69bade760f0847da8000def4dfe1c6b872fd14ff14"},
- {file = "packaging-21.0.tar.gz", hash = "sha256:7dc96269f53a4ccec5c0670940a4281106dd0bb343f47b7471f779df49c2fbe7"},
+ {file = "packaging-21.3-py3-none-any.whl", hash = "sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522"},
+ {file = "packaging-21.3.tar.gz", hash = "sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb"},
]
pluggy = [
- {file = "pluggy-0.13.1-py2.py3-none-any.whl", hash = "sha256:966c145cd83c96502c3c3868f50408687b38434af77734af1e9ca461a4081d2d"},
- {file = "pluggy-0.13.1.tar.gz", hash = "sha256:15b2acde666561e1298d71b523007ed7364de07029219b604cf808bfa1c765b0"},
-]
-pprintpp = [
- {file = "pprintpp-0.4.0-py2.py3-none-any.whl", hash = "sha256:b6b4dcdd0c0c0d75e4d7b2f21a9e933e5b2ce62b26e1a54537f9651ae5a5c01d"},
- {file = "pprintpp-0.4.0.tar.gz", hash = "sha256:ea826108e2c7f49dc6d66c752973c3fc9749142a798d6b254e1e301cfdbc6403"},
+ {file = "pluggy-1.0.0-py2.py3-none-any.whl", hash = "sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3"},
+ {file = "pluggy-1.0.0.tar.gz", hash = "sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159"},
]
py = [
- {file = "py-1.10.0-py2.py3-none-any.whl", hash = "sha256:3b80836aa6d1feeaa108e046da6423ab8f6ceda6468545ae8d02d9d58d18818a"},
- {file = "py-1.10.0.tar.gz", hash = "sha256:21b81bda15b66ef5e1a777a21c4dcd9c20ad3efd0b3f817e7a809035269e1bd3"},
-]
-pygments = [
- {file = "Pygments-2.9.0-py3-none-any.whl", hash = "sha256:d66e804411278594d764fc69ec36ec13d9ae9147193a1740cd34d272ca383b8e"},
- {file = "Pygments-2.9.0.tar.gz", hash = "sha256:a18f47b506a429f6f4b9df81bb02beab9ca21d0a5fee38ed15aef65f0545519f"},
+ {file = "py-1.11.0-py2.py3-none-any.whl", hash = "sha256:607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378"},
+ {file = "py-1.11.0.tar.gz", hash = "sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719"},
]
pyparsing = [
- {file = "pyparsing-2.4.7-py2.py3-none-any.whl", hash = "sha256:ef9d7589ef3c200abe66653d3f1ab1033c3c419ae9b9bdb1240a85b024efc88b"},
- {file = "pyparsing-2.4.7.tar.gz", hash = "sha256:c203ec8783bf771a155b207279b9bccb8dea02d8f0c9e5f8ead507bc3246ecc1"},
+ {file = "pyparsing-3.0.8-py3-none-any.whl", hash = "sha256:ef7b523f6356f763771559412c0d7134753f037822dad1b16945b7b846f7ad06"},
+ {file = "pyparsing-3.0.8.tar.gz", hash = "sha256:7bf433498c016c4314268d95df76c81b842a4cb2b276fa3312cfb1e1d85f6954"},
]
pyrsistent = [
- {file = "pyrsistent-0.18.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:f4c8cabb46ff8e5d61f56a037974228e978f26bfefce4f61a4b1ac0ba7a2ab72"},
- {file = "pyrsistent-0.18.0-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:da6e5e818d18459fa46fac0a4a4e543507fe1110e808101277c5a2b5bab0cd2d"},
- {file = "pyrsistent-0.18.0-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:5e4395bbf841693eaebaa5bb5c8f5cdbb1d139e07c975c682ec4e4f8126e03d2"},
- {file = "pyrsistent-0.18.0-cp36-cp36m-win32.whl", hash = "sha256:527be2bfa8dc80f6f8ddd65242ba476a6c4fb4e3aedbf281dfbac1b1ed4165b1"},
- {file = "pyrsistent-0.18.0-cp36-cp36m-win_amd64.whl", hash = "sha256:2aaf19dc8ce517a8653746d98e962ef480ff34b6bc563fc067be6401ffb457c7"},
- {file = "pyrsistent-0.18.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:58a70d93fb79dc585b21f9d72487b929a6fe58da0754fa4cb9f279bb92369396"},
- {file = "pyrsistent-0.18.0-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:4916c10896721e472ee12c95cdc2891ce5890898d2f9907b1b4ae0f53588b710"},
- {file = "pyrsistent-0.18.0-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:73ff61b1411e3fb0ba144b8f08d6749749775fe89688093e1efef9839d2dcc35"},
- {file = "pyrsistent-0.18.0-cp37-cp37m-win32.whl", hash = "sha256:b29b869cf58412ca5738d23691e96d8aff535e17390128a1a52717c9a109da4f"},
- {file = "pyrsistent-0.18.0-cp37-cp37m-win_amd64.whl", hash = "sha256:097b96f129dd36a8c9e33594e7ebb151b1515eb52cceb08474c10a5479e799f2"},
- {file = "pyrsistent-0.18.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:772e94c2c6864f2cd2ffbe58bb3bdefbe2a32afa0acb1a77e472aac831f83427"},
- {file = "pyrsistent-0.18.0-cp38-cp38-manylinux1_i686.whl", hash = "sha256:c1a9ff320fa699337e05edcaae79ef8c2880b52720bc031b219e5b5008ebbdef"},
- {file = "pyrsistent-0.18.0-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:cd3caef37a415fd0dae6148a1b6957a8c5f275a62cca02e18474608cb263640c"},
- {file = "pyrsistent-0.18.0-cp38-cp38-win32.whl", hash = "sha256:e79d94ca58fcafef6395f6352383fa1a76922268fa02caa2272fff501c2fdc78"},
- {file = "pyrsistent-0.18.0-cp38-cp38-win_amd64.whl", hash = "sha256:a0c772d791c38bbc77be659af29bb14c38ced151433592e326361610250c605b"},
- {file = "pyrsistent-0.18.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d5ec194c9c573aafaceebf05fc400656722793dac57f254cd4741f3c27ae57b4"},
- {file = "pyrsistent-0.18.0-cp39-cp39-manylinux1_i686.whl", hash = "sha256:6b5eed00e597b5b5773b4ca30bd48a5774ef1e96f2a45d105db5b4ebb4bca680"},
- {file = "pyrsistent-0.18.0-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:48578680353f41dca1ca3dc48629fb77dfc745128b56fc01096b2530c13fd426"},
- {file = "pyrsistent-0.18.0-cp39-cp39-win32.whl", hash = "sha256:f3ef98d7b76da5eb19c37fda834d50262ff9167c65658d1d8f974d2e4d90676b"},
- {file = "pyrsistent-0.18.0-cp39-cp39-win_amd64.whl", hash = "sha256:404e1f1d254d314d55adb8d87f4f465c8693d6f902f67eb6ef5b4526dc58e6ea"},
- {file = "pyrsistent-0.18.0.tar.gz", hash = "sha256:773c781216f8c2900b42a7b638d5b517bb134ae1acbebe4d1e8f1f41ea60eb4b"},
+ {file = "pyrsistent-0.18.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:df46c854f490f81210870e509818b729db4488e1f30f2a1ce1698b2295a878d1"},
+ {file = "pyrsistent-0.18.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d45866ececf4a5fff8742c25722da6d4c9e180daa7b405dc0a2a2790d668c26"},
+ {file = "pyrsistent-0.18.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4ed6784ceac462a7d6fcb7e9b663e93b9a6fb373b7f43594f9ff68875788e01e"},
+ {file = "pyrsistent-0.18.1-cp310-cp310-win32.whl", hash = "sha256:e4f3149fd5eb9b285d6bfb54d2e5173f6a116fe19172686797c056672689daf6"},
+ {file = "pyrsistent-0.18.1-cp310-cp310-win_amd64.whl", hash = "sha256:636ce2dc235046ccd3d8c56a7ad54e99d5c1cd0ef07d9ae847306c91d11b5fec"},
+ {file = "pyrsistent-0.18.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:e92a52c166426efbe0d1ec1332ee9119b6d32fc1f0bbfd55d5c1088070e7fc1b"},
+ {file = "pyrsistent-0.18.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d7a096646eab884bf8bed965bad63ea327e0d0c38989fc83c5ea7b8a87037bfc"},
+ {file = "pyrsistent-0.18.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cdfd2c361b8a8e5d9499b9082b501c452ade8bbf42aef97ea04854f4a3f43b22"},
+ {file = "pyrsistent-0.18.1-cp37-cp37m-win32.whl", hash = "sha256:7ec335fc998faa4febe75cc5268a9eac0478b3f681602c1f27befaf2a1abe1d8"},
+ {file = "pyrsistent-0.18.1-cp37-cp37m-win_amd64.whl", hash = "sha256:6455fc599df93d1f60e1c5c4fe471499f08d190d57eca040c0ea182301321286"},
+ {file = "pyrsistent-0.18.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:fd8da6d0124efa2f67d86fa70c851022f87c98e205f0594e1fae044e7119a5a6"},
+ {file = "pyrsistent-0.18.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7bfe2388663fd18bd8ce7db2c91c7400bf3e1a9e8bd7d63bf7e77d39051b85ec"},
+ {file = "pyrsistent-0.18.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0e3e1fcc45199df76053026a51cc59ab2ea3fc7c094c6627e93b7b44cdae2c8c"},
+ {file = "pyrsistent-0.18.1-cp38-cp38-win32.whl", hash = "sha256:b568f35ad53a7b07ed9b1b2bae09eb15cdd671a5ba5d2c66caee40dbf91c68ca"},
+ {file = "pyrsistent-0.18.1-cp38-cp38-win_amd64.whl", hash = "sha256:d1b96547410f76078eaf66d282ddca2e4baae8964364abb4f4dcdde855cd123a"},
+ {file = "pyrsistent-0.18.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:f87cc2863ef33c709e237d4b5f4502a62a00fab450c9e020892e8e2ede5847f5"},
+ {file = "pyrsistent-0.18.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6bc66318fb7ee012071b2792024564973ecc80e9522842eb4e17743604b5e045"},
+ {file = "pyrsistent-0.18.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:914474c9f1d93080338ace89cb2acee74f4f666fb0424896fcfb8d86058bf17c"},
+ {file = "pyrsistent-0.18.1-cp39-cp39-win32.whl", hash = "sha256:1b34eedd6812bf4d33814fca1b66005805d3640ce53140ab8bbb1e2651b0d9bc"},
+ {file = "pyrsistent-0.18.1-cp39-cp39-win_amd64.whl", hash = "sha256:e24a828f57e0c337c8d8bb9f6b12f09dfdf0273da25fda9e314f0b684b415a07"},
+ {file = "pyrsistent-0.18.1.tar.gz", hash = "sha256:d4d61f8b993a7255ba714df3aca52700f8125289f84f704cf80916517c46eb96"},
]
pytest = [
- {file = "pytest-6.2.4-py3-none-any.whl", hash = "sha256:91ef2131a9bd6be8f76f1f08eac5c5317221d6ad1e143ae03894b862e8976890"},
- {file = "pytest-6.2.4.tar.gz", hash = "sha256:50bcad0a0b9c5a72c8e4e7c9855a3ad496ca6a881a3641b4260605450772c54b"},
+ {file = "pytest-6.2.5-py3-none-any.whl", hash = "sha256:7310f8d27bc79ced999e760ca304d69f6ba6c6649c0b60fb0e04a4a77cacc134"},
+ {file = "pytest-6.2.5.tar.gz", hash = "sha256:131b36680866a76e6781d13f101efb86cf674ebb9762eb70d3082b6f29889e89"},
]
python-dateutil = [
{file = "python-dateutil-2.8.2.tar.gz", hash = "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86"},
@@ -501,35 +488,43 @@ python-hcl2 = [
{file = "python-hcl2-2.0.3.tar.gz", hash = "sha256:62bfe6a152e794700abd125bfb5c53913af8c8bc98eeef37bd30f87e3f19bfc2"},
]
pyyaml = [
- {file = "PyYAML-5.4.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:3b2b1824fe7112845700f815ff6a489360226a5609b96ec2190a45e62a9fc922"},
- {file = "PyYAML-5.4.1-cp27-cp27m-win32.whl", hash = "sha256:129def1b7c1bf22faffd67b8f3724645203b79d8f4cc81f674654d9902cb4393"},
- {file = "PyYAML-5.4.1-cp27-cp27m-win_amd64.whl", hash = "sha256:4465124ef1b18d9ace298060f4eccc64b0850899ac4ac53294547536533800c8"},
- {file = "PyYAML-5.4.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:bb4191dfc9306777bc594117aee052446b3fa88737cd13b7188d0e7aa8162185"},
- {file = "PyYAML-5.4.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:6c78645d400265a062508ae399b60b8c167bf003db364ecb26dcab2bda048253"},
- {file = "PyYAML-5.4.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:4e0583d24c881e14342eaf4ec5fbc97f934b999a6828693a99157fde912540cc"},
- {file = "PyYAML-5.4.1-cp36-cp36m-win32.whl", hash = "sha256:3bd0e463264cf257d1ffd2e40223b197271046d09dadf73a0fe82b9c1fc385a5"},
- {file = "PyYAML-5.4.1-cp36-cp36m-win_amd64.whl", hash = "sha256:e4fac90784481d221a8e4b1162afa7c47ed953be40d31ab4629ae917510051df"},
- {file = "PyYAML-5.4.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:5accb17103e43963b80e6f837831f38d314a0495500067cb25afab2e8d7a4018"},
- {file = "PyYAML-5.4.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:e1d4970ea66be07ae37a3c2e48b5ec63f7ba6804bdddfdbd3cfd954d25a82e63"},
- {file = "PyYAML-5.4.1-cp37-cp37m-win32.whl", hash = "sha256:dd5de0646207f053eb0d6c74ae45ba98c3395a571a2891858e87df7c9b9bd51b"},
- {file = "PyYAML-5.4.1-cp37-cp37m-win_amd64.whl", hash = "sha256:08682f6b72c722394747bddaf0aa62277e02557c0fd1c42cb853016a38f8dedf"},
- {file = "PyYAML-5.4.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d2d9808ea7b4af864f35ea216be506ecec180628aced0704e34aca0b040ffe46"},
- {file = "PyYAML-5.4.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:8c1be557ee92a20f184922c7b6424e8ab6691788e6d86137c5d93c1a6ec1b8fb"},
- {file = "PyYAML-5.4.1-cp38-cp38-win32.whl", hash = "sha256:fa5ae20527d8e831e8230cbffd9f8fe952815b2b7dae6ffec25318803a7528fc"},
- {file = "PyYAML-5.4.1-cp38-cp38-win_amd64.whl", hash = "sha256:0f5f5786c0e09baddcd8b4b45f20a7b5d61a7e7e99846e3c799b05c7c53fa696"},
- {file = "PyYAML-5.4.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:294db365efa064d00b8d1ef65d8ea2c3426ac366c0c4368d930bf1c5fb497f77"},
- {file = "PyYAML-5.4.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:74c1485f7707cf707a7aef42ef6322b8f97921bd89be2ab6317fd782c2d53183"},
- {file = "PyYAML-5.4.1-cp39-cp39-win32.whl", hash = "sha256:49d4cdd9065b9b6e206d0595fee27a96b5dd22618e7520c33204a4a3239d5b10"},
- {file = "PyYAML-5.4.1-cp39-cp39-win_amd64.whl", hash = "sha256:c20cfa2d49991c8b4147af39859b167664f2ad4561704ee74c1de03318e898db"},
- {file = "PyYAML-5.4.1.tar.gz", hash = "sha256:607774cbba28732bfa802b54baa7484215f530991055bb562efbed5b2f20a45e"},
-]
-rich = [
- {file = "rich-1.3.1-py3-none-any.whl", hash = "sha256:ae56e1d4762fe1aaf580f0462a231f9960353816d3e29188eb7e6ff9a15b9135"},
- {file = "rich-1.3.1.tar.gz", hash = "sha256:6a6c338d5d015ca23e340fe8af5f0b9eedb527821c69c22b94acc76fe3cb2e51"},
+ {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"},
+ {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a80a78046a72361de73f8f395f1f1e49f956c6be882eed58505a15f3e430962b"},
+ {file = "PyYAML-6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f84fbc98b019fef2ee9a1cb3ce93e3187a6df0b2538a651bfb890254ba9f90b5"},
+ {file = "PyYAML-6.0-cp310-cp310-win32.whl", hash = "sha256:2cd5df3de48857ed0544b34e2d40e9fac445930039f3cfe4bcc592a1f836d513"},
+ {file = "PyYAML-6.0-cp310-cp310-win_amd64.whl", hash = "sha256:daf496c58a8c52083df09b80c860005194014c3698698d1a57cbcfa182142a3a"},
+ {file = "PyYAML-6.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:897b80890765f037df3403d22bab41627ca8811ae55e9a722fd0392850ec4d86"},
+ {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50602afada6d6cbfad699b0c7bb50d5ccffa7e46a3d738092afddc1f9758427f"},
+ {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:48c346915c114f5fdb3ead70312bd042a953a8ce5c7106d5bfb1a5254e47da92"},
+ {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:98c4d36e99714e55cfbaaee6dd5badbc9a1ec339ebfc3b1f52e293aee6bb71a4"},
+ {file = "PyYAML-6.0-cp36-cp36m-win32.whl", hash = "sha256:0283c35a6a9fbf047493e3a0ce8d79ef5030852c51e9d911a27badfde0605293"},
+ {file = "PyYAML-6.0-cp36-cp36m-win_amd64.whl", hash = "sha256:07751360502caac1c067a8132d150cf3d61339af5691fe9e87803040dbc5db57"},
+ {file = "PyYAML-6.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:819b3830a1543db06c4d4b865e70ded25be52a2e0631ccd2f6a47a2822f2fd7c"},
+ {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:473f9edb243cb1935ab5a084eb238d842fb8f404ed2193a915d1784b5a6b5fc0"},
+ {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0ce82d761c532fe4ec3f87fc45688bdd3a4c1dc5e0b4a19814b9009a29baefd4"},
+ {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:231710d57adfd809ef5d34183b8ed1eeae3f76459c18fb4a0b373ad56bedcdd9"},
+ {file = "PyYAML-6.0-cp37-cp37m-win32.whl", hash = "sha256:c5687b8d43cf58545ade1fe3e055f70eac7a5a1a0bf42824308d868289a95737"},
+ {file = "PyYAML-6.0-cp37-cp37m-win_amd64.whl", hash = "sha256:d15a181d1ecd0d4270dc32edb46f7cb7733c7c508857278d3d378d14d606db2d"},
+ {file = "PyYAML-6.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0b4624f379dab24d3725ffde76559cff63d9ec94e1736b556dacdfebe5ab6d4b"},
+ {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:213c60cd50106436cc818accf5baa1aba61c0189ff610f64f4a3e8c6726218ba"},
+ {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9fa600030013c4de8165339db93d182b9431076eb98eb40ee068700c9c813e34"},
+ {file = "PyYAML-6.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:277a0ef2981ca40581a47093e9e2d13b3f1fbbeffae064c1d21bfceba2030287"},
+ {file = "PyYAML-6.0-cp38-cp38-win32.whl", hash = "sha256:d4eccecf9adf6fbcc6861a38015c2a64f38b9d94838ac1810a9023a0609e1b78"},
+ {file = "PyYAML-6.0-cp38-cp38-win_amd64.whl", hash = "sha256:1e4747bc279b4f613a09eb64bba2ba602d8a6664c6ce6396a4d0cd413a50ce07"},
+ {file = "PyYAML-6.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:055d937d65826939cb044fc8c9b08889e8c743fdc6a32b33e2390f66013e449b"},
+ {file = "PyYAML-6.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e61ceaab6f49fb8bdfaa0f92c4b57bcfbea54c09277b1b4f7ac376bfb7a7c174"},
+ {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d67d839ede4ed1b28a4e8909735fc992a923cdb84e618544973d7dfc71540803"},
+ {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cba8c411ef271aa037d7357a2bc8f9ee8b58b9965831d9e51baf703280dc73d3"},
+ {file = "PyYAML-6.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:40527857252b61eacd1d9af500c3337ba8deb8fc298940291486c465c8b46ec0"},
+ {file = "PyYAML-6.0-cp39-cp39-win32.whl", hash = "sha256:b5b9eccad747aabaaffbc6064800670f0c297e52c12754eb1d976c57e4f74dcb"},
+ {file = "PyYAML-6.0-cp39-cp39-win_amd64.whl", hash = "sha256:b3d267842bf12586ba6c734f89d1f5b871df0273157918b0ccefa29deb05c21c"},
+ {file = "PyYAML-6.0.tar.gz", hash = "sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2"},
]
s3transfer = [
- {file = "s3transfer-0.5.0-py3-none-any.whl", hash = "sha256:9c1dc369814391a6bda20ebbf4b70a0f34630592c9aa520856bf384916af2803"},
- {file = "s3transfer-0.5.0.tar.gz", hash = "sha256:50ed823e1dc5868ad40c8dc92072f757aa0e653a192845c94a3b676f4a62da4c"},
+ {file = "s3transfer-0.5.2-py3-none-any.whl", hash = "sha256:7a6f4c4d1fdb9a2b640244008e142cbc2cd3ae34b386584ef044dd0f27101971"},
+ {file = "s3transfer-0.5.2.tar.gz", hash = "sha256:95c58c194ce657a5f4fb0b9e60a84968c808888aed628cd98ab8771fe1db98ed"},
]
six = [
{file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"},
@@ -544,15 +539,14 @@ toml = [
{file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"},
]
typing-extensions = [
- {file = "typing_extensions-3.10.0.0-py2-none-any.whl", hash = "sha256:0ac0f89795dd19de6b97debb0c6af1c70987fd80a2d62d1958f7e56fcc31b497"},
- {file = "typing_extensions-3.10.0.0-py3-none-any.whl", hash = "sha256:779383f6086d90c99ae41cf0ff39aac8a7937a9283ce0a414e5dd782f4c94a84"},
- {file = "typing_extensions-3.10.0.0.tar.gz", hash = "sha256:50b6f157849174217d0656f99dc82fe932884fb250826c18350e159ec6cdf342"},
+ {file = "typing_extensions-4.2.0-py3-none-any.whl", hash = "sha256:6657594ee297170d19f67d55c05852a874e7eb634f4f753dbd667855e07c1708"},
+ {file = "typing_extensions-4.2.0.tar.gz", hash = "sha256:f1c24655a0da0d1b67f07e17a5e6b2a105894e6824b92096378bb3668ef02376"},
]
urllib3 = [
- {file = "urllib3-1.26.6-py2.py3-none-any.whl", hash = "sha256:39fb8672126159acb139a7718dd10806104dec1e2f0f6c88aab05d17df10c8d4"},
- {file = "urllib3-1.26.6.tar.gz", hash = "sha256:f57b4c16c62fa2760b7e3d97c35b255512fb6b59a259730f36ba32ce9f8e342f"},
+ {file = "urllib3-1.26.9-py2.py3-none-any.whl", hash = "sha256:44ece4d53fb1706f667c9bd1c648f5469a2ec925fcf3a776667042d645472c14"},
+ {file = "urllib3-1.26.9.tar.gz", hash = "sha256:aabaf16477806a5e1dd19aa41f8c2b7950dd3c746362d7e3223dbe6de6ac448e"},
]
zipp = [
- {file = "zipp-3.5.0-py3-none-any.whl", hash = "sha256:957cfda87797e389580cb8b9e3870841ca991e2125350677b2ca83a0e99390a3"},
- {file = "zipp-3.5.0.tar.gz", hash = "sha256:f5812b1e007e48cff63449a5e9f4e7ebea716b4111f9c4f9a645f91d579bf0c4"},
+ {file = "zipp-3.8.0-py3-none-any.whl", hash = "sha256:c4f6e5bbf48e74f7a38e7cc5b0480ff42b0ae5178957d564d18932525d5cf099"},
+ {file = "zipp-3.8.0.tar.gz", hash = "sha256:56bf8aadb83c24db6c4b577e13de374ccfb67da2078beba1d037c17980bf43ad"},
]
diff --git a/tools/c7n_terraform/pyproject.toml b/tools/c7n_terraform/pyproject.toml
index 98f16fdb54e..e66f421224c 100644
--- a/tools/c7n_terraform/pyproject.toml
+++ b/tools/c7n_terraform/pyproject.toml
@@ -1,6 +1,6 @@
[tool.poetry]
name = "c7n_terraform"
-version = "0.1.4"
+version = "0.1.6"
readme = "readme.md"
description = "Cloud Custodian Provider for evaluating Terraform"
repository = "https://github.com/cloud-custodian/cloud-custodian"
@@ -15,8 +15,7 @@ classifiers = [
[tool.poetry.dependencies]
python = "^3.7"
-rich = "^1.1.9"
-click = "^7.1.2"
+click = "^8.0"
python-hcl2 = "^2.0"
[tool.poetry.dev-dependencies]
@@ -24,5 +23,5 @@ pytest = "^6.0.0"
c7n = {path = "../..", develop = true}
[build-system]
-requires = ["poetry>=0.12"]
+requires = ["poetry>=0.12", "setuptools"]
build-backend = "poetry.masonry.api"
diff --git a/tools/c7n_terraform/requirements.txt b/tools/c7n_terraform/requirements.txt
index 0aeb9624167..c774cd46119 100644
--- a/tools/c7n_terraform/requirements.txt
+++ b/tools/c7n_terraform/requirements.txt
@@ -1,9 +1,7 @@
-click==7.1.2; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.5.0")
-colorama==0.4.4; python_version >= "3.6" and python_full_version < "3.0.0" and python_version < "4.0" or python_version >= "3.6" and python_version < "4.0" and python_full_version >= "3.5.0"
-commonmark==0.9.1; python_version >= "3.6" and python_version < "4.0"
+click==8.1.2; python_version >= "3.7"
+colorama==0.4.4; python_version >= "3.7" and python_full_version < "3.0.0" and platform_system == "Windows" or platform_system == "Windows" and python_version >= "3.7" and python_full_version >= "3.5.0"
+importlib-metadata==4.11.3; python_version < "3.8" and python_version >= "3.7"
lark-parser==0.10.1; python_full_version >= "3.6.0"
-pprintpp==0.4.0; python_version >= "3.6" and python_version < "4.0"
-pygments==2.9.0; python_version >= "3.6" and python_version < "4.0"
python-hcl2==2.0.3; python_full_version >= "3.6.0"
-rich==1.3.1; python_version >= "3.6" and python_version < "4.0"
-typing-extensions==3.10.0.0; python_version >= "3.6" and python_version < "4.0"
+typing-extensions==4.2.0; python_version < "3.8" and python_version >= "3.7"
+zipp==3.8.0; python_version < "3.8" and python_version >= "3.7"
diff --git a/tools/c7n_terraform/setup.py b/tools/c7n_terraform/setup.py
index 0a0807304f2..903843eebb8 100644
--- a/tools/c7n_terraform/setup.py
+++ b/tools/c7n_terraform/setup.py
@@ -10,30 +10,31 @@
{'': ['*']}
install_requires = \
-['argcomplete (>=1.12.3,<2.0.0)',
- 'attrs (>=21.2.0,<22.0.0)',
- 'boto3 (>=1.18.21,<2.0.0)',
- 'botocore (>=1.21.21,<2.0.0)',
- 'c7n (>=0.9.14,<0.10.0)',
- 'click>=7.1.2,<8.0.0',
- 'importlib-metadata (>=4.6.4,<5.0.0)',
- 'jmespath (>=0.10.0,<0.11.0)',
- 'jsonschema (>=3.2.0,<4.0.0)',
- 'pyrsistent (>=0.18.0,<0.19.0)',
+['argcomplete (>=2.0.0,<3.0.0)',
+ 'attrs (>=21.4.0,<22.0.0)',
+ 'boto3 (>=1.21.42,<2.0.0)',
+ 'botocore (>=1.24.42,<2.0.0)',
+ 'c7n (>=0.9.16,<0.10.0)',
+ 'click>=8.0,<9.0',
+ 'docutils (>=0.17.1,<0.18.0)',
+ 'importlib-metadata (>=4.11.3,<5.0.0)',
+ 'importlib-resources (>=5.7.1,<6.0.0)',
+ 'jmespath (>=1.0.0,<2.0.0)',
+ 'jsonschema (>=4.4.0,<5.0.0)',
+ 'pyrsistent (>=0.18.1,<0.19.0)',
'python-dateutil (>=2.8.2,<3.0.0)',
'python-hcl2>=2.0,<3.0',
- 'pyyaml (>=5.4.1,<6.0.0)',
- 'rich>=1.1.9,<2.0.0',
- 's3transfer (>=0.5.0,<0.6.0)',
+ 'pyyaml (>=6.0,<7.0)',
+ 's3transfer (>=0.5.2,<0.6.0)',
'six (>=1.16.0,<2.0.0)',
'tabulate (>=0.8.9,<0.9.0)',
- 'typing-extensions (>=3.10.0.0,<4.0.0.0)',
- 'urllib3 (>=1.26.6,<2.0.0)',
- 'zipp (>=3.5.0,<4.0.0)']
+ 'typing-extensions (>=4.2.0,<5.0.0)',
+ 'urllib3 (>=1.26.9,<2.0.0)',
+ 'zipp (>=3.8.0,<4.0.0)']
setup_kwargs = {
'name': 'c7n-terraform',
- 'version': '0.1.4',
+ 'version': '0.1.6',
'description': 'Cloud Custodian Provider for evaluating Terraform',
'license': 'Apache-2.0',
'classifiers': [
diff --git a/tools/c7n_trailcreator/poetry.lock b/tools/c7n_trailcreator/poetry.lock
index 88b8d999242..d257d80a2aa 100644
--- a/tools/c7n_trailcreator/poetry.lock
+++ b/tools/c7n_trailcreator/poetry.lock
@@ -1,42 +1,42 @@
[[package]]
name = "argcomplete"
-version = "1.12.3"
+version = "2.0.0"
description = "Bash tab completion for argparse"
category = "dev"
optional = false
-python-versions = "*"
+python-versions = ">=3.6"
[package.dependencies]
-importlib-metadata = {version = ">=0.23,<5", markers = "python_version == \"3.6\" or python_version == \"3.7\""}
+importlib-metadata = {version = ">=0.23,<5", markers = "python_version == \"3.7\""}
[package.extras]
test = ["coverage", "flake8", "pexpect", "wheel"]
[[package]]
name = "attrs"
-version = "21.2.0"
+version = "21.4.0"
description = "Classes Without Boilerplate"
category = "dev"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
[package.extras]
-dev = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "furo", "sphinx", "sphinx-notfound-page", "pre-commit"]
+dev = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "furo", "sphinx", "sphinx-notfound-page", "pre-commit", "cloudpickle"]
docs = ["furo", "sphinx", "zope.interface", "sphinx-notfound-page"]
-tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface"]
-tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins"]
+tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "cloudpickle"]
+tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "cloudpickle"]
[[package]]
name = "boto3"
-version = "1.18.21"
+version = "1.21.42"
description = "The AWS SDK for Python"
category = "dev"
optional = false
python-versions = ">= 3.6"
[package.dependencies]
-botocore = ">=1.21.21,<1.22.0"
-jmespath = ">=0.7.1,<1.0.0"
+botocore = ">=1.24.42,<1.25.0"
+jmespath = ">=0.7.1,<2.0.0"
s3transfer = ">=0.5.0,<0.6.0"
[package.extras]
@@ -44,36 +44,37 @@ crt = ["botocore[crt] (>=1.21.0,<2.0a0)"]
[[package]]
name = "botocore"
-version = "1.21.21"
+version = "1.24.42"
description = "Low-level, data-driven core of boto 3."
category = "dev"
optional = false
python-versions = ">= 3.6"
[package.dependencies]
-jmespath = ">=0.7.1,<1.0.0"
+jmespath = ">=0.7.1,<2.0.0"
python-dateutil = ">=2.1,<3.0.0"
urllib3 = ">=1.25.4,<1.27"
[package.extras]
-crt = ["awscrt (==0.11.24)"]
+crt = ["awscrt (==0.13.8)"]
[[package]]
name = "c7n"
-version = "0.9.14"
+version = "0.9.16"
description = "Cloud Custodian - Policy Rules Engine"
category = "dev"
optional = false
-python-versions = "^3.6"
+python-versions = "^3.7"
develop = true
[package.dependencies]
-argcomplete = "^1.11.1"
+argcomplete = ">=1.12.3"
boto3 = "^1.12.31"
-importlib-metadata = ">1.7.0;python_version<3.8"
-jsonschema = "^3.2.0"
-python-dateutil = "^2.8.1"
-pyyaml = "^5.3"
+docutils = ">=0.14,<0.18"
+importlib-metadata = ">=4.11.1"
+jsonschema = ">=3.0.0"
+python-dateutil = "^2.8.2"
+pyyaml = ">=5.4.0"
tabulate = "^0.8.6"
[package.source]
@@ -82,15 +83,15 @@ url = "../.."
[[package]]
name = "c7n-org"
-version = "0.6.13"
+version = "0.6.15"
description = "Cloud Custodian - Parallel Execution"
category = "dev"
optional = false
-python-versions = "^3.6"
+python-versions = "^3.7"
develop = true
[package.dependencies]
-click = "^7.0"
+click = "^8.0"
[package.source]
type = "directory"
@@ -98,62 +99,98 @@ url = "../c7n_org"
[[package]]
name = "click"
-version = "7.1.2"
+version = "8.1.2"
description = "Composable command line interface toolkit"
category = "main"
optional = false
+python-versions = ">=3.7"
+
+[package.dependencies]
+colorama = {version = "*", markers = "platform_system == \"Windows\""}
+importlib-metadata = {version = "*", markers = "python_version < \"3.8\""}
+
+[[package]]
+name = "colorama"
+version = "0.4.4"
+description = "Cross-platform colored terminal text."
+category = "main"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
+
+[[package]]
+name = "docutils"
+version = "0.17.1"
+description = "Docutils -- Python Documentation Utilities"
+category = "dev"
+optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
[[package]]
name = "importlib-metadata"
-version = "4.6.4"
+version = "4.11.3"
description = "Read metadata from Python packages"
-category = "dev"
+category = "main"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.7"
[package.dependencies]
typing-extensions = {version = ">=3.6.4", markers = "python_version < \"3.8\""}
zipp = ">=0.5"
[package.extras]
-docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
+docs = ["sphinx", "jaraco.packaging (>=9)", "rst.linker (>=1.9)"]
perf = ["ipython"]
-testing = ["pytest (>=4.6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pep517", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy", "importlib-resources (>=1.3)"]
+testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)", "importlib-resources (>=1.3)"]
+
+[[package]]
+name = "importlib-resources"
+version = "5.7.1"
+description = "Read resources from Python packages"
+category = "dev"
+optional = false
+python-versions = ">=3.7"
+
+[package.dependencies]
+zipp = {version = ">=3.1.0", markers = "python_version < \"3.10\""}
+
+[package.extras]
+docs = ["sphinx", "jaraco.packaging (>=9)", "rst.linker (>=1.9)"]
+testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)"]
[[package]]
name = "jmespath"
-version = "0.10.0"
+version = "1.0.0"
description = "JSON Matching Expressions"
category = "dev"
optional = false
-python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*"
+python-versions = ">=3.7"
[[package]]
name = "jsonschema"
-version = "3.2.0"
+version = "4.4.0"
description = "An implementation of JSON Schema validation for Python"
category = "dev"
optional = false
-python-versions = "*"
+python-versions = ">=3.7"
[package.dependencies]
attrs = ">=17.4.0"
importlib-metadata = {version = "*", markers = "python_version < \"3.8\""}
-pyrsistent = ">=0.14.0"
-six = ">=1.11.0"
+importlib-resources = {version = ">=1.4.0", markers = "python_version < \"3.9\""}
+pyrsistent = ">=0.14.0,<0.17.0 || >0.17.0,<0.17.1 || >0.17.1,<0.17.2 || >0.17.2"
+typing-extensions = {version = "*", markers = "python_version < \"3.8\""}
[package.extras]
-format = ["idna", "jsonpointer (>1.13)", "rfc3987", "strict-rfc3339", "webcolors"]
-format_nongpl = ["idna", "jsonpointer (>1.13)", "webcolors", "rfc3986-validator (>0.1.0)", "rfc3339-validator"]
+format = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3987", "uri-template", "webcolors (>=1.11)"]
+format_nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3986-validator (>0.1.0)", "uri-template", "webcolors (>=1.11)"]
[[package]]
name = "pyrsistent"
-version = "0.18.0"
+version = "0.18.1"
description = "Persistent/Functional/Immutable data structures"
category = "dev"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.7"
[[package]]
name = "python-dateutil"
@@ -168,15 +205,15 @@ six = ">=1.5"
[[package]]
name = "pyyaml"
-version = "5.4.1"
+version = "6.0"
description = "YAML parser and emitter for Python"
category = "dev"
optional = false
-python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*"
+python-versions = ">=3.6"
[[package]]
name = "s3transfer"
-version = "0.5.0"
+version = "0.5.2"
description = "An Amazon S3 Transfer Manager"
category = "dev"
optional = false
@@ -209,130 +246,154 @@ widechars = ["wcwidth"]
[[package]]
name = "typing-extensions"
-version = "3.10.0.0"
-description = "Backported and Experimental Type Hints for Python 3.5+"
-category = "dev"
+version = "4.2.0"
+description = "Backported and Experimental Type Hints for Python 3.7+"
+category = "main"
optional = false
-python-versions = "*"
+python-versions = ">=3.7"
[[package]]
name = "urllib3"
-version = "1.26.6"
+version = "1.26.9"
description = "HTTP library with thread-safe connection pooling, file post, and more."
category = "dev"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, <4"
[package.extras]
-brotli = ["brotlipy (>=0.6.0)"]
+brotli = ["brotlicffi (>=0.8.0)", "brotli (>=1.0.9)", "brotlipy (>=0.6.0)"]
secure = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "certifi", "ipaddress"]
socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"]
[[package]]
name = "zipp"
-version = "3.5.0"
+version = "3.8.0"
description = "Backport of pathlib-compatible object wrapper for zip files"
-category = "dev"
+category = "main"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.7"
[package.extras]
-docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
-testing = ["pytest (>=4.6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "jaraco.itertools", "func-timeout", "pytest-black (>=0.3.7)", "pytest-mypy"]
+docs = ["sphinx", "jaraco.packaging (>=9)", "rst.linker (>=1.9)"]
+testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "jaraco.itertools", "func-timeout", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)"]
[metadata]
lock-version = "1.1"
-python-versions = "^3.6"
-content-hash = "ecb5fa306cd6e3ced2cd549c4048289e71c0119d338f619a75def237580d53c1"
+python-versions = "^3.7"
+content-hash = "0e751afbfde2943feaf3d9d2555d74d2497449fc47259bb13857174e4671cdab"
[metadata.files]
argcomplete = [
- {file = "argcomplete-1.12.3-py2.py3-none-any.whl", hash = "sha256:291f0beca7fd49ce285d2f10e4c1c77e9460cf823eef2de54df0c0fec88b0d81"},
- {file = "argcomplete-1.12.3.tar.gz", hash = "sha256:2c7dbffd8c045ea534921e63b0be6fe65e88599990d8dc408ac8c542b72a5445"},
+ {file = "argcomplete-2.0.0-py2.py3-none-any.whl", hash = "sha256:cffa11ea77999bb0dd27bb25ff6dc142a6796142f68d45b1a26b11f58724561e"},
+ {file = "argcomplete-2.0.0.tar.gz", hash = "sha256:6372ad78c89d662035101418ae253668445b391755cfe94ea52f1b9d22425b20"},
]
attrs = [
- {file = "attrs-21.2.0-py2.py3-none-any.whl", hash = "sha256:149e90d6d8ac20db7a955ad60cf0e6881a3f20d37096140088356da6c716b0b1"},
- {file = "attrs-21.2.0.tar.gz", hash = "sha256:ef6aaac3ca6cd92904cdd0d83f629a15f18053ec84e6432106f7a4d04ae4f5fb"},
+ {file = "attrs-21.4.0-py2.py3-none-any.whl", hash = "sha256:2d27e3784d7a565d36ab851fe94887c5eccd6a463168875832a1be79c82828b4"},
+ {file = "attrs-21.4.0.tar.gz", hash = "sha256:626ba8234211db98e869df76230a137c4c40a12d72445c45d5f5b716f076e2fd"},
]
boto3 = [
- {file = "boto3-1.18.21-py3-none-any.whl", hash = "sha256:59b6e8e79b2114e21388288a06a004f2a9378b1e0fc58466a35da8fb74fe2dd8"},
- {file = "boto3-1.18.21.tar.gz", hash = "sha256:00748c760dc30be61c6db4b092718f6a9f8d27c767da0e232695a65adb75cde8"},
+ {file = "boto3-1.21.42-py3-none-any.whl", hash = "sha256:895fb88c69be78f82cfee58a79c97a3ad8d4a2a1209041a411d7d6b9fc5393e4"},
+ {file = "boto3-1.21.42.tar.gz", hash = "sha256:bcb541175a7d190dd919a0af0e807ee6e9d26f135551e741b10d94343f2d7588"},
]
botocore = [
- {file = "botocore-1.21.21-py3-none-any.whl", hash = "sha256:fa5ac13829d24fcdd385e82c3b6d78e22d93f427cca8dac38158cae84a8cc2f5"},
- {file = "botocore-1.21.21.tar.gz", hash = "sha256:12cfe74b0a5c44afb34bdd86c1f8ad74bc2ad9ec168eaed9040ef70cb3db944f"},
+ {file = "botocore-1.24.42-py3-none-any.whl", hash = "sha256:14aee41c8bf59d2dd2d89e8751fa37d3c95dcb92707d1966aa02697e914c1417"},
+ {file = "botocore-1.24.42.tar.gz", hash = "sha256:a2baa9484bbaee96ef312c049b8e360badcab58329e487b57567644a571b5f4a"},
]
c7n = []
c7n-org = []
click = [
- {file = "click-7.1.2-py2.py3-none-any.whl", hash = "sha256:dacca89f4bfadd5de3d7489b7c8a566eee0d3676333fbb50030263894c38c0dc"},
- {file = "click-7.1.2.tar.gz", hash = "sha256:d2b5255c7c6349bc1bd1e59e08cd12acbbd63ce649f2588755783aa94dfb6b1a"},
+ {file = "click-8.1.2-py3-none-any.whl", hash = "sha256:24e1a4a9ec5bf6299411369b208c1df2188d9eb8d916302fe6bf03faed227f1e"},
+ {file = "click-8.1.2.tar.gz", hash = "sha256:479707fe14d9ec9a0757618b7a100a0ae4c4e236fac5b7f80ca68028141a1a72"},
+]
+colorama = [
+ {file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"},
+ {file = "colorama-0.4.4.tar.gz", hash = "sha256:5941b2b48a20143d2267e95b1c2a7603ce057ee39fd88e7329b0c292aa16869b"},
+]
+docutils = [
+ {file = "docutils-0.17.1-py2.py3-none-any.whl", hash = "sha256:cf316c8370a737a022b72b56874f6602acf974a37a9fba42ec2876387549fc61"},
+ {file = "docutils-0.17.1.tar.gz", hash = "sha256:686577d2e4c32380bb50cbb22f575ed742d58168cee37e99117a854bcd88f125"},
]
importlib-metadata = [
- {file = "importlib_metadata-4.6.4-py3-none-any.whl", hash = "sha256:ed5157fef23a4bc4594615a0dd8eba94b2bb36bf2a343fa3d8bb2fa0a62a99d5"},
- {file = "importlib_metadata-4.6.4.tar.gz", hash = "sha256:7b30a78db2922d78a6f47fb30683156a14f3c6aa5cc23f77cc8967e9ab2d002f"},
+ {file = "importlib_metadata-4.11.3-py3-none-any.whl", hash = "sha256:1208431ca90a8cca1a6b8af391bb53c1a2db74e5d1cef6ddced95d4b2062edc6"},
+ {file = "importlib_metadata-4.11.3.tar.gz", hash = "sha256:ea4c597ebf37142f827b8f39299579e31685c31d3a438b59f469406afd0f2539"},
+]
+importlib-resources = [
+ {file = "importlib_resources-5.7.1-py3-none-any.whl", hash = "sha256:e447dc01619b1e951286f3929be820029d48c75eb25d265c28b92a16548212b8"},
+ {file = "importlib_resources-5.7.1.tar.gz", hash = "sha256:b6062987dfc51f0fcb809187cffbd60f35df7acb4589091f154214af6d0d49d3"},
]
jmespath = [
- {file = "jmespath-0.10.0-py2.py3-none-any.whl", hash = "sha256:cdf6525904cc597730141d61b36f2e4b8ecc257c420fa2f4549bac2c2d0cb72f"},
- {file = "jmespath-0.10.0.tar.gz", hash = "sha256:b85d0567b8666149a93172712e68920734333c0ce7e89b78b3e987f71e5ed4f9"},
+ {file = "jmespath-1.0.0-py3-none-any.whl", hash = "sha256:e8dcd576ed616f14ec02eed0005c85973b5890083313860136657e24784e4c04"},
+ {file = "jmespath-1.0.0.tar.gz", hash = "sha256:a490e280edd1f57d6de88636992d05b71e97d69a26a19f058ecf7d304474bf5e"},
]
jsonschema = [
- {file = "jsonschema-3.2.0-py2.py3-none-any.whl", hash = "sha256:4e5b3cf8216f577bee9ce139cbe72eca3ea4f292ec60928ff24758ce626cd163"},
- {file = "jsonschema-3.2.0.tar.gz", hash = "sha256:c8a85b28d377cc7737e46e2d9f2b4f44ee3c0e1deac6bf46ddefc7187d30797a"},
+ {file = "jsonschema-4.4.0-py3-none-any.whl", hash = "sha256:77281a1f71684953ee8b3d488371b162419767973789272434bbc3f29d9c8823"},
+ {file = "jsonschema-4.4.0.tar.gz", hash = "sha256:636694eb41b3535ed608fe04129f26542b59ed99808b4f688aa32dcf55317a83"},
]
pyrsistent = [
- {file = "pyrsistent-0.18.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:f4c8cabb46ff8e5d61f56a037974228e978f26bfefce4f61a4b1ac0ba7a2ab72"},
- {file = "pyrsistent-0.18.0-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:da6e5e818d18459fa46fac0a4a4e543507fe1110e808101277c5a2b5bab0cd2d"},
- {file = "pyrsistent-0.18.0-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:5e4395bbf841693eaebaa5bb5c8f5cdbb1d139e07c975c682ec4e4f8126e03d2"},
- {file = "pyrsistent-0.18.0-cp36-cp36m-win32.whl", hash = "sha256:527be2bfa8dc80f6f8ddd65242ba476a6c4fb4e3aedbf281dfbac1b1ed4165b1"},
- {file = "pyrsistent-0.18.0-cp36-cp36m-win_amd64.whl", hash = "sha256:2aaf19dc8ce517a8653746d98e962ef480ff34b6bc563fc067be6401ffb457c7"},
- {file = "pyrsistent-0.18.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:58a70d93fb79dc585b21f9d72487b929a6fe58da0754fa4cb9f279bb92369396"},
- {file = "pyrsistent-0.18.0-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:4916c10896721e472ee12c95cdc2891ce5890898d2f9907b1b4ae0f53588b710"},
- {file = "pyrsistent-0.18.0-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:73ff61b1411e3fb0ba144b8f08d6749749775fe89688093e1efef9839d2dcc35"},
- {file = "pyrsistent-0.18.0-cp37-cp37m-win32.whl", hash = "sha256:b29b869cf58412ca5738d23691e96d8aff535e17390128a1a52717c9a109da4f"},
- {file = "pyrsistent-0.18.0-cp37-cp37m-win_amd64.whl", hash = "sha256:097b96f129dd36a8c9e33594e7ebb151b1515eb52cceb08474c10a5479e799f2"},
- {file = "pyrsistent-0.18.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:772e94c2c6864f2cd2ffbe58bb3bdefbe2a32afa0acb1a77e472aac831f83427"},
- {file = "pyrsistent-0.18.0-cp38-cp38-manylinux1_i686.whl", hash = "sha256:c1a9ff320fa699337e05edcaae79ef8c2880b52720bc031b219e5b5008ebbdef"},
- {file = "pyrsistent-0.18.0-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:cd3caef37a415fd0dae6148a1b6957a8c5f275a62cca02e18474608cb263640c"},
- {file = "pyrsistent-0.18.0-cp38-cp38-win32.whl", hash = "sha256:e79d94ca58fcafef6395f6352383fa1a76922268fa02caa2272fff501c2fdc78"},
- {file = "pyrsistent-0.18.0-cp38-cp38-win_amd64.whl", hash = "sha256:a0c772d791c38bbc77be659af29bb14c38ced151433592e326361610250c605b"},
- {file = "pyrsistent-0.18.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d5ec194c9c573aafaceebf05fc400656722793dac57f254cd4741f3c27ae57b4"},
- {file = "pyrsistent-0.18.0-cp39-cp39-manylinux1_i686.whl", hash = "sha256:6b5eed00e597b5b5773b4ca30bd48a5774ef1e96f2a45d105db5b4ebb4bca680"},
- {file = "pyrsistent-0.18.0-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:48578680353f41dca1ca3dc48629fb77dfc745128b56fc01096b2530c13fd426"},
- {file = "pyrsistent-0.18.0-cp39-cp39-win32.whl", hash = "sha256:f3ef98d7b76da5eb19c37fda834d50262ff9167c65658d1d8f974d2e4d90676b"},
- {file = "pyrsistent-0.18.0-cp39-cp39-win_amd64.whl", hash = "sha256:404e1f1d254d314d55adb8d87f4f465c8693d6f902f67eb6ef5b4526dc58e6ea"},
- {file = "pyrsistent-0.18.0.tar.gz", hash = "sha256:773c781216f8c2900b42a7b638d5b517bb134ae1acbebe4d1e8f1f41ea60eb4b"},
+ {file = "pyrsistent-0.18.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:df46c854f490f81210870e509818b729db4488e1f30f2a1ce1698b2295a878d1"},
+ {file = "pyrsistent-0.18.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d45866ececf4a5fff8742c25722da6d4c9e180daa7b405dc0a2a2790d668c26"},
+ {file = "pyrsistent-0.18.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4ed6784ceac462a7d6fcb7e9b663e93b9a6fb373b7f43594f9ff68875788e01e"},
+ {file = "pyrsistent-0.18.1-cp310-cp310-win32.whl", hash = "sha256:e4f3149fd5eb9b285d6bfb54d2e5173f6a116fe19172686797c056672689daf6"},
+ {file = "pyrsistent-0.18.1-cp310-cp310-win_amd64.whl", hash = "sha256:636ce2dc235046ccd3d8c56a7ad54e99d5c1cd0ef07d9ae847306c91d11b5fec"},
+ {file = "pyrsistent-0.18.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:e92a52c166426efbe0d1ec1332ee9119b6d32fc1f0bbfd55d5c1088070e7fc1b"},
+ {file = "pyrsistent-0.18.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d7a096646eab884bf8bed965bad63ea327e0d0c38989fc83c5ea7b8a87037bfc"},
+ {file = "pyrsistent-0.18.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cdfd2c361b8a8e5d9499b9082b501c452ade8bbf42aef97ea04854f4a3f43b22"},
+ {file = "pyrsistent-0.18.1-cp37-cp37m-win32.whl", hash = "sha256:7ec335fc998faa4febe75cc5268a9eac0478b3f681602c1f27befaf2a1abe1d8"},
+ {file = "pyrsistent-0.18.1-cp37-cp37m-win_amd64.whl", hash = "sha256:6455fc599df93d1f60e1c5c4fe471499f08d190d57eca040c0ea182301321286"},
+ {file = "pyrsistent-0.18.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:fd8da6d0124efa2f67d86fa70c851022f87c98e205f0594e1fae044e7119a5a6"},
+ {file = "pyrsistent-0.18.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7bfe2388663fd18bd8ce7db2c91c7400bf3e1a9e8bd7d63bf7e77d39051b85ec"},
+ {file = "pyrsistent-0.18.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0e3e1fcc45199df76053026a51cc59ab2ea3fc7c094c6627e93b7b44cdae2c8c"},
+ {file = "pyrsistent-0.18.1-cp38-cp38-win32.whl", hash = "sha256:b568f35ad53a7b07ed9b1b2bae09eb15cdd671a5ba5d2c66caee40dbf91c68ca"},
+ {file = "pyrsistent-0.18.1-cp38-cp38-win_amd64.whl", hash = "sha256:d1b96547410f76078eaf66d282ddca2e4baae8964364abb4f4dcdde855cd123a"},
+ {file = "pyrsistent-0.18.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:f87cc2863ef33c709e237d4b5f4502a62a00fab450c9e020892e8e2ede5847f5"},
+ {file = "pyrsistent-0.18.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6bc66318fb7ee012071b2792024564973ecc80e9522842eb4e17743604b5e045"},
+ {file = "pyrsistent-0.18.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:914474c9f1d93080338ace89cb2acee74f4f666fb0424896fcfb8d86058bf17c"},
+ {file = "pyrsistent-0.18.1-cp39-cp39-win32.whl", hash = "sha256:1b34eedd6812bf4d33814fca1b66005805d3640ce53140ab8bbb1e2651b0d9bc"},
+ {file = "pyrsistent-0.18.1-cp39-cp39-win_amd64.whl", hash = "sha256:e24a828f57e0c337c8d8bb9f6b12f09dfdf0273da25fda9e314f0b684b415a07"},
+ {file = "pyrsistent-0.18.1.tar.gz", hash = "sha256:d4d61f8b993a7255ba714df3aca52700f8125289f84f704cf80916517c46eb96"},
]
python-dateutil = [
{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"},
]
pyyaml = [
- {file = "PyYAML-5.4.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:3b2b1824fe7112845700f815ff6a489360226a5609b96ec2190a45e62a9fc922"},
- {file = "PyYAML-5.4.1-cp27-cp27m-win32.whl", hash = "sha256:129def1b7c1bf22faffd67b8f3724645203b79d8f4cc81f674654d9902cb4393"},
- {file = "PyYAML-5.4.1-cp27-cp27m-win_amd64.whl", hash = "sha256:4465124ef1b18d9ace298060f4eccc64b0850899ac4ac53294547536533800c8"},
- {file = "PyYAML-5.4.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:bb4191dfc9306777bc594117aee052446b3fa88737cd13b7188d0e7aa8162185"},
- {file = "PyYAML-5.4.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:6c78645d400265a062508ae399b60b8c167bf003db364ecb26dcab2bda048253"},
- {file = "PyYAML-5.4.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:4e0583d24c881e14342eaf4ec5fbc97f934b999a6828693a99157fde912540cc"},
- {file = "PyYAML-5.4.1-cp36-cp36m-win32.whl", hash = "sha256:3bd0e463264cf257d1ffd2e40223b197271046d09dadf73a0fe82b9c1fc385a5"},
- {file = "PyYAML-5.4.1-cp36-cp36m-win_amd64.whl", hash = "sha256:e4fac90784481d221a8e4b1162afa7c47ed953be40d31ab4629ae917510051df"},
- {file = "PyYAML-5.4.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:5accb17103e43963b80e6f837831f38d314a0495500067cb25afab2e8d7a4018"},
- {file = "PyYAML-5.4.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:e1d4970ea66be07ae37a3c2e48b5ec63f7ba6804bdddfdbd3cfd954d25a82e63"},
- {file = "PyYAML-5.4.1-cp37-cp37m-win32.whl", hash = "sha256:dd5de0646207f053eb0d6c74ae45ba98c3395a571a2891858e87df7c9b9bd51b"},
- {file = "PyYAML-5.4.1-cp37-cp37m-win_amd64.whl", hash = "sha256:08682f6b72c722394747bddaf0aa62277e02557c0fd1c42cb853016a38f8dedf"},
- {file = "PyYAML-5.4.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d2d9808ea7b4af864f35ea216be506ecec180628aced0704e34aca0b040ffe46"},
- {file = "PyYAML-5.4.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:8c1be557ee92a20f184922c7b6424e8ab6691788e6d86137c5d93c1a6ec1b8fb"},
- {file = "PyYAML-5.4.1-cp38-cp38-win32.whl", hash = "sha256:fa5ae20527d8e831e8230cbffd9f8fe952815b2b7dae6ffec25318803a7528fc"},
- {file = "PyYAML-5.4.1-cp38-cp38-win_amd64.whl", hash = "sha256:0f5f5786c0e09baddcd8b4b45f20a7b5d61a7e7e99846e3c799b05c7c53fa696"},
- {file = "PyYAML-5.4.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:294db365efa064d00b8d1ef65d8ea2c3426ac366c0c4368d930bf1c5fb497f77"},
- {file = "PyYAML-5.4.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:74c1485f7707cf707a7aef42ef6322b8f97921bd89be2ab6317fd782c2d53183"},
- {file = "PyYAML-5.4.1-cp39-cp39-win32.whl", hash = "sha256:49d4cdd9065b9b6e206d0595fee27a96b5dd22618e7520c33204a4a3239d5b10"},
- {file = "PyYAML-5.4.1-cp39-cp39-win_amd64.whl", hash = "sha256:c20cfa2d49991c8b4147af39859b167664f2ad4561704ee74c1de03318e898db"},
- {file = "PyYAML-5.4.1.tar.gz", hash = "sha256:607774cbba28732bfa802b54baa7484215f530991055bb562efbed5b2f20a45e"},
+ {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"},
+ {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a80a78046a72361de73f8f395f1f1e49f956c6be882eed58505a15f3e430962b"},
+ {file = "PyYAML-6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f84fbc98b019fef2ee9a1cb3ce93e3187a6df0b2538a651bfb890254ba9f90b5"},
+ {file = "PyYAML-6.0-cp310-cp310-win32.whl", hash = "sha256:2cd5df3de48857ed0544b34e2d40e9fac445930039f3cfe4bcc592a1f836d513"},
+ {file = "PyYAML-6.0-cp310-cp310-win_amd64.whl", hash = "sha256:daf496c58a8c52083df09b80c860005194014c3698698d1a57cbcfa182142a3a"},
+ {file = "PyYAML-6.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:897b80890765f037df3403d22bab41627ca8811ae55e9a722fd0392850ec4d86"},
+ {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50602afada6d6cbfad699b0c7bb50d5ccffa7e46a3d738092afddc1f9758427f"},
+ {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:48c346915c114f5fdb3ead70312bd042a953a8ce5c7106d5bfb1a5254e47da92"},
+ {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:98c4d36e99714e55cfbaaee6dd5badbc9a1ec339ebfc3b1f52e293aee6bb71a4"},
+ {file = "PyYAML-6.0-cp36-cp36m-win32.whl", hash = "sha256:0283c35a6a9fbf047493e3a0ce8d79ef5030852c51e9d911a27badfde0605293"},
+ {file = "PyYAML-6.0-cp36-cp36m-win_amd64.whl", hash = "sha256:07751360502caac1c067a8132d150cf3d61339af5691fe9e87803040dbc5db57"},
+ {file = "PyYAML-6.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:819b3830a1543db06c4d4b865e70ded25be52a2e0631ccd2f6a47a2822f2fd7c"},
+ {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:473f9edb243cb1935ab5a084eb238d842fb8f404ed2193a915d1784b5a6b5fc0"},
+ {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0ce82d761c532fe4ec3f87fc45688bdd3a4c1dc5e0b4a19814b9009a29baefd4"},
+ {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:231710d57adfd809ef5d34183b8ed1eeae3f76459c18fb4a0b373ad56bedcdd9"},
+ {file = "PyYAML-6.0-cp37-cp37m-win32.whl", hash = "sha256:c5687b8d43cf58545ade1fe3e055f70eac7a5a1a0bf42824308d868289a95737"},
+ {file = "PyYAML-6.0-cp37-cp37m-win_amd64.whl", hash = "sha256:d15a181d1ecd0d4270dc32edb46f7cb7733c7c508857278d3d378d14d606db2d"},
+ {file = "PyYAML-6.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0b4624f379dab24d3725ffde76559cff63d9ec94e1736b556dacdfebe5ab6d4b"},
+ {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:213c60cd50106436cc818accf5baa1aba61c0189ff610f64f4a3e8c6726218ba"},
+ {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9fa600030013c4de8165339db93d182b9431076eb98eb40ee068700c9c813e34"},
+ {file = "PyYAML-6.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:277a0ef2981ca40581a47093e9e2d13b3f1fbbeffae064c1d21bfceba2030287"},
+ {file = "PyYAML-6.0-cp38-cp38-win32.whl", hash = "sha256:d4eccecf9adf6fbcc6861a38015c2a64f38b9d94838ac1810a9023a0609e1b78"},
+ {file = "PyYAML-6.0-cp38-cp38-win_amd64.whl", hash = "sha256:1e4747bc279b4f613a09eb64bba2ba602d8a6664c6ce6396a4d0cd413a50ce07"},
+ {file = "PyYAML-6.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:055d937d65826939cb044fc8c9b08889e8c743fdc6a32b33e2390f66013e449b"},
+ {file = "PyYAML-6.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e61ceaab6f49fb8bdfaa0f92c4b57bcfbea54c09277b1b4f7ac376bfb7a7c174"},
+ {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d67d839ede4ed1b28a4e8909735fc992a923cdb84e618544973d7dfc71540803"},
+ {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cba8c411ef271aa037d7357a2bc8f9ee8b58b9965831d9e51baf703280dc73d3"},
+ {file = "PyYAML-6.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:40527857252b61eacd1d9af500c3337ba8deb8fc298940291486c465c8b46ec0"},
+ {file = "PyYAML-6.0-cp39-cp39-win32.whl", hash = "sha256:b5b9eccad747aabaaffbc6064800670f0c297e52c12754eb1d976c57e4f74dcb"},
+ {file = "PyYAML-6.0-cp39-cp39-win_amd64.whl", hash = "sha256:b3d267842bf12586ba6c734f89d1f5b871df0273157918b0ccefa29deb05c21c"},
+ {file = "PyYAML-6.0.tar.gz", hash = "sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2"},
]
s3transfer = [
- {file = "s3transfer-0.5.0-py3-none-any.whl", hash = "sha256:9c1dc369814391a6bda20ebbf4b70a0f34630592c9aa520856bf384916af2803"},
- {file = "s3transfer-0.5.0.tar.gz", hash = "sha256:50ed823e1dc5868ad40c8dc92072f757aa0e653a192845c94a3b676f4a62da4c"},
+ {file = "s3transfer-0.5.2-py3-none-any.whl", hash = "sha256:7a6f4c4d1fdb9a2b640244008e142cbc2cd3ae34b386584ef044dd0f27101971"},
+ {file = "s3transfer-0.5.2.tar.gz", hash = "sha256:95c58c194ce657a5f4fb0b9e60a84968c808888aed628cd98ab8771fe1db98ed"},
]
six = [
{file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"},
@@ -343,15 +404,14 @@ tabulate = [
{file = "tabulate-0.8.9.tar.gz", hash = "sha256:eb1d13f25760052e8931f2ef80aaf6045a6cceb47514db8beab24cded16f13a7"},
]
typing-extensions = [
- {file = "typing_extensions-3.10.0.0-py2-none-any.whl", hash = "sha256:0ac0f89795dd19de6b97debb0c6af1c70987fd80a2d62d1958f7e56fcc31b497"},
- {file = "typing_extensions-3.10.0.0-py3-none-any.whl", hash = "sha256:779383f6086d90c99ae41cf0ff39aac8a7937a9283ce0a414e5dd782f4c94a84"},
- {file = "typing_extensions-3.10.0.0.tar.gz", hash = "sha256:50b6f157849174217d0656f99dc82fe932884fb250826c18350e159ec6cdf342"},
+ {file = "typing_extensions-4.2.0-py3-none-any.whl", hash = "sha256:6657594ee297170d19f67d55c05852a874e7eb634f4f753dbd667855e07c1708"},
+ {file = "typing_extensions-4.2.0.tar.gz", hash = "sha256:f1c24655a0da0d1b67f07e17a5e6b2a105894e6824b92096378bb3668ef02376"},
]
urllib3 = [
- {file = "urllib3-1.26.6-py2.py3-none-any.whl", hash = "sha256:39fb8672126159acb139a7718dd10806104dec1e2f0f6c88aab05d17df10c8d4"},
- {file = "urllib3-1.26.6.tar.gz", hash = "sha256:f57b4c16c62fa2760b7e3d97c35b255512fb6b59a259730f36ba32ce9f8e342f"},
+ {file = "urllib3-1.26.9-py2.py3-none-any.whl", hash = "sha256:44ece4d53fb1706f667c9bd1c648f5469a2ec925fcf3a776667042d645472c14"},
+ {file = "urllib3-1.26.9.tar.gz", hash = "sha256:aabaf16477806a5e1dd19aa41f8c2b7950dd3c746362d7e3223dbe6de6ac448e"},
]
zipp = [
- {file = "zipp-3.5.0-py3-none-any.whl", hash = "sha256:957cfda87797e389580cb8b9e3870841ca991e2125350677b2ca83a0e99390a3"},
- {file = "zipp-3.5.0.tar.gz", hash = "sha256:f5812b1e007e48cff63449a5e9f4e7ebea716b4111f9c4f9a645f91d579bf0c4"},
+ {file = "zipp-3.8.0-py3-none-any.whl", hash = "sha256:c4f6e5bbf48e74f7a38e7cc5b0480ff42b0ae5178957d564d18932525d5cf099"},
+ {file = "zipp-3.8.0.tar.gz", hash = "sha256:56bf8aadb83c24db6c4b577e13de374ccfb67da2078beba1d037c17980bf43ad"},
]
diff --git a/tools/c7n_trailcreator/pyproject.toml b/tools/c7n_trailcreator/pyproject.toml
index f7b47a86fc8..ceda8c4b78c 100644
--- a/tools/c7n_trailcreator/pyproject.toml
+++ b/tools/c7n_trailcreator/pyproject.toml
@@ -1,6 +1,6 @@
[tool.poetry]
name = "c7n_trailcreator"
-version = "0.2.13"
+version = "0.2.15"
readme = "readme.md"
homepage = "https://cloudcustodian.io"
repository = "https://github.com/cloud-custodian/cloud-custodian"
@@ -19,8 +19,8 @@ classifiers=[
c7n-trailcreator = 'c7n_trailcreator.trailcreator:cli'
[tool.poetry.dependencies]
-python = "^3.6"
-click = "^7.0"
+python = "^3.7"
+click = "^8.0"
[tool.poetry.dev-dependencies]
c7n_org = {path = "../c7n_org", develop = true}
diff --git a/tools/c7n_trailcreator/requirements.txt b/tools/c7n_trailcreator/requirements.txt
index da177b7c7b2..7ef5dc7fec9 100644
--- a/tools/c7n_trailcreator/requirements.txt
+++ b/tools/c7n_trailcreator/requirements.txt
@@ -1 +1,5 @@
-click==7.1.2; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.5.0")
+click==8.1.2; python_version >= "3.7"
+colorama==0.4.4; python_version >= "3.7" and python_full_version < "3.0.0" and platform_system == "Windows" or platform_system == "Windows" and python_version >= "3.7" and python_full_version >= "3.5.0"
+importlib-metadata==4.11.3; python_version < "3.8" and python_version >= "3.7"
+typing-extensions==4.2.0; python_version < "3.8" and python_version >= "3.7"
+zipp==3.8.0; python_version < "3.8" and python_version >= "3.7"
diff --git a/tools/c7n_trailcreator/setup.py b/tools/c7n_trailcreator/setup.py
index 84bce733b63..5c72b3209c1 100644
--- a/tools/c7n_trailcreator/setup.py
+++ b/tools/c7n_trailcreator/setup.py
@@ -10,33 +10,36 @@
{'': ['*']}
install_requires = \
-['argcomplete (>=1.12.3,<2.0.0)',
- 'attrs (>=21.2.0,<22.0.0)',
- 'boto3 (>=1.18.21,<2.0.0)',
- 'botocore (>=1.21.21,<2.0.0)',
- 'c7n (>=0.9.14,<0.10.0)',
- 'c7n-org (>=0.6.13,<0.7.0)',
- 'click (>=7.1.2,<8.0.0)',
- 'click>=7.0,<8.0',
- 'importlib-metadata (>=4.6.4,<5.0.0)',
- 'jmespath (>=0.10.0,<0.11.0)',
- 'jsonschema (>=3.2.0,<4.0.0)',
- 'pyrsistent (>=0.18.0,<0.19.0)',
+['argcomplete (>=2.0.0,<3.0.0)',
+ 'attrs (>=21.4.0,<22.0.0)',
+ 'boto3 (>=1.21.42,<2.0.0)',
+ 'botocore (>=1.24.42,<2.0.0)',
+ 'c7n (>=0.9.16,<0.10.0)',
+ 'c7n-org (>=0.6.15,<0.7.0)',
+ 'click (>=8.1.2,<9.0.0)',
+ 'click>=8.0,<9.0',
+ 'colorama (>=0.4.4,<0.5.0)',
+ 'docutils (>=0.17.1,<0.18.0)',
+ 'importlib-metadata (>=4.11.3,<5.0.0)',
+ 'importlib-resources (>=5.7.1,<6.0.0)',
+ 'jmespath (>=1.0.0,<2.0.0)',
+ 'jsonschema (>=4.4.0,<5.0.0)',
+ 'pyrsistent (>=0.18.1,<0.19.0)',
'python-dateutil (>=2.8.2,<3.0.0)',
- 'pyyaml (>=5.4.1,<6.0.0)',
- 's3transfer (>=0.5.0,<0.6.0)',
+ 'pyyaml (>=6.0,<7.0)',
+ 's3transfer (>=0.5.2,<0.6.0)',
'six (>=1.16.0,<2.0.0)',
'tabulate (>=0.8.9,<0.9.0)',
- 'typing-extensions (>=3.10.0.0,<4.0.0.0)',
- 'urllib3 (>=1.26.6,<2.0.0)',
- 'zipp (>=3.5.0,<4.0.0)']
+ 'typing-extensions (>=4.2.0,<5.0.0)',
+ 'urllib3 (>=1.26.9,<2.0.0)',
+ 'zipp (>=3.8.0,<4.0.0)']
entry_points = \
{'console_scripts': ['c7n-trailcreator = c7n_trailcreator.trailcreator:cli']}
setup_kwargs = {
'name': 'c7n-trailcreator',
- 'version': '0.2.13',
+ 'version': '0.2.15',
'description': 'Cloud Custodian - Retroactive Tag Resource Creators from CloudTrail',
'license': 'Apache-2.0',
'classifiers': [
@@ -55,7 +58,7 @@
'package_data': package_data,
'install_requires': install_requires,
'entry_points': entry_points,
- 'python_requires': '>=3.6,<4.0',
+ 'python_requires': '>=3.7,<4.0',
}
diff --git a/tools/cask/go.mod b/tools/cask/go.mod
index d97fd9c031c..854ce1e89c3 100644
--- a/tools/cask/go.mod
+++ b/tools/cask/go.mod
@@ -3,23 +3,19 @@ module github.com/cloud-custodian/cloud-custodian/tools/cask
go 1.14
require (
- github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78 // indirect
- github.com/Microsoft/go-winio v0.4.12 // indirect
- github.com/Sirupsen/logrus v0.0.0-00010101000000-000000000000 // indirect
- github.com/docker/distribution v2.7.1+incompatible // indirect
- github.com/docker/docker v0.0.0-20170601211448-f5ec1e2936dc
+ github.com/Microsoft/go-winio v0.5.1 // indirect
+ github.com/containerd/containerd v1.5.11 // indirect
+ github.com/docker/distribution v2.8.0+incompatible // indirect
+ github.com/docker/docker v20.10.12+incompatible
github.com/docker/go-connections v0.4.0 // indirect
- github.com/docker/go-units v0.4.0 // indirect
- github.com/mattn/go-isatty v0.0.9
- github.com/onsi/ginkgo v1.14.0 // indirect
- github.com/opencontainers/go-digest v1.0.0-rc1 // indirect
- github.com/pkg/errors v0.8.1 // indirect
- github.com/sirupsen/logrus v1.6.0 // indirect
- github.com/stretchr/testify v1.3.0 // indirect
- github.com/thoas/go-funk v0.4.0
- golang.org/x/crypto v0.0.0-20190618222545-ea8f1a30c443 // indirect
- gopkg.in/airbrake/gobrake.v2 v2.0.9 // indirect
- gopkg.in/gemnasium/logrus-airbrake-hook.v2 v2.1.2 // indirect
+ github.com/mattn/go-isatty v0.0.14
+ github.com/moby/term v0.0.0-20210619224110-3f7ff695adc6 // indirect
+ github.com/morikuni/aec v1.0.0 // indirect
+ github.com/opencontainers/runc v1.0.3 // indirect
+ github.com/thoas/go-funk v0.9.1
+ golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd // indirect
+ golang.org/x/sys v0.0.0-20220209214540-3681064d5158 // indirect
+ google.golang.org/genproto v0.0.0-20220211171837-173942840c17 // indirect
)
diff --git a/tools/cask/go.sum b/tools/cask/go.sum
index 051aab9ce4a..5dea15f66b1 100644
--- a/tools/cask/go.sum
+++ b/tools/cask/go.sum
@@ -1,108 +1,1037 @@
-github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78 h1:w+iIsaOQNcT7OZ575w+acHgRric5iCyQh+xv+KJ4HB8=
+bazil.org/fuse v0.0.0-20160811212531-371fbbdaa898/go.mod h1:Xbm+BRKSBEpa4q4hTSxohYNQpsxXPbPry4JJWOB3LB8=
+cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
+cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
+cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU=
+cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU=
+cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY=
+cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc=
+cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0=
+cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To=
+cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4=
+cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M=
+cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc=
+cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o=
+cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE=
+cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc=
+cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE=
+cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk=
+cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I=
+cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw=
+cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA=
+cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw=
+cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos=
+cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk=
+dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
+github.com/Azure/azure-sdk-for-go v16.2.1+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc=
github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8=
-github.com/Microsoft/go-winio v0.4.12 h1:xAfWHN1IrQ0NJ9TBC0KBZoqLjzDTr1ML+4MywiUOryc=
-github.com/Microsoft/go-winio v0.4.12/go.mod h1:VhR8bwka0BXejwEJY73c50VrPtXAaKcyvVC4A4RozmA=
-github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8=
+github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 h1:UQHMgLO+TxOElx5B5HZ4hJQsoJ/PvUvKRhJHDQXO8P8=
+github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E=
+github.com/Azure/go-autorest v10.8.1+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24=
+github.com/Azure/go-autorest v14.2.0+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24=
+github.com/Azure/go-autorest/autorest v0.11.1/go.mod h1:JFgpikqFJ/MleTTxwepExTKnFUKKszPS8UavbQYUMuw=
+github.com/Azure/go-autorest/autorest/adal v0.9.0/go.mod h1:/c022QCutn2P7uY+/oQWWNcK9YU+MH96NgK+jErpbcg=
+github.com/Azure/go-autorest/autorest/adal v0.9.5/go.mod h1:B7KF7jKIeC9Mct5spmyCB/A8CG/sEz1vwIRGv/bbw7A=
+github.com/Azure/go-autorest/autorest/date v0.3.0/go.mod h1:BI0uouVdmngYNUzGWeSYnokU+TrmwEsOqdt8Y6sso74=
+github.com/Azure/go-autorest/autorest/mocks v0.4.0/go.mod h1:LTp+uSrOhSkaKrUy935gNZuuIPPVsHlr9DSOxSayd+k=
+github.com/Azure/go-autorest/autorest/mocks v0.4.1/go.mod h1:LTp+uSrOhSkaKrUy935gNZuuIPPVsHlr9DSOxSayd+k=
+github.com/Azure/go-autorest/logger v0.2.0/go.mod h1:T9E3cAhj2VqvPOtCYAvby9aBXkZmbF5NWuPV8+WeEW8=
+github.com/Azure/go-autorest/tracing v0.6.0/go.mod h1:+vhtPC754Xsa23ID7GlGsrdKBpUA79WCAKPPZVC2DeU=
+github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
+github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
+github.com/Microsoft/go-winio v0.4.11/go.mod h1:VhR8bwka0BXejwEJY73c50VrPtXAaKcyvVC4A4RozmA=
+github.com/Microsoft/go-winio v0.4.14/go.mod h1:qXqCSQ3Xa7+6tgxaGTIe4Kpcdsi+P8jBhyzoq1bpyYA=
+github.com/Microsoft/go-winio v0.4.15-0.20190919025122-fc70bd9a86b5/go.mod h1:tTuCMEN+UleMWgg9dVx4Hu52b1bJo+59jBh3ajtinzw=
+github.com/Microsoft/go-winio v0.4.16-0.20201130162521-d1ffc52c7331/go.mod h1:XB6nPKklQyQ7GC9LdcBEcBl8PF76WugXOPRXwdLnMv0=
+github.com/Microsoft/go-winio v0.4.16/go.mod h1:XB6nPKklQyQ7GC9LdcBEcBl8PF76WugXOPRXwdLnMv0=
+github.com/Microsoft/go-winio v0.4.17-0.20210211115548-6eac466e5fa3/go.mod h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOpzfwIujj1a84=
+github.com/Microsoft/go-winio v0.4.17-0.20210324224401-5516f17a5958/go.mod h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOpzfwIujj1a84=
+github.com/Microsoft/go-winio v0.4.17/go.mod h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOpzfwIujj1a84=
+github.com/Microsoft/go-winio v0.5.1 h1:aPJp2QD7OOrhO5tQXqQoGSJc+DjDtWTGLOmNyAm6FgY=
+github.com/Microsoft/go-winio v0.5.1/go.mod h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOpzfwIujj1a84=
+github.com/Microsoft/hcsshim v0.8.6/go.mod h1:Op3hHsoHPAvb6lceZHDtd9OkTew38wNoXnJs8iY7rUg=
+github.com/Microsoft/hcsshim v0.8.7-0.20190325164909-8abdbb8205e4/go.mod h1:Op3hHsoHPAvb6lceZHDtd9OkTew38wNoXnJs8iY7rUg=
+github.com/Microsoft/hcsshim v0.8.7/go.mod h1:OHd7sQqRFrYd3RmSgbgji+ctCwkbq2wbEYNSzOYtcBQ=
+github.com/Microsoft/hcsshim v0.8.9/go.mod h1:5692vkUqntj1idxauYlpoINNKeqCiG6Sg38RRsjT5y8=
+github.com/Microsoft/hcsshim v0.8.14/go.mod h1:NtVKoYxQuTLx6gEq0L96c9Ju4JbRJ4nY2ow3VK6a9Lg=
+github.com/Microsoft/hcsshim v0.8.15/go.mod h1:x38A4YbHbdxJtc0sF6oIz+RG0npwSCAvn69iY6URG00=
+github.com/Microsoft/hcsshim v0.8.16/go.mod h1:o5/SZqmR7x9JNKsW3pu+nqHm0MF8vbA+VxGOoXdC600=
+github.com/Microsoft/hcsshim v0.8.23 h1:47MSwtKGXet80aIn+7h4YI6fwPmwIghAnsx2aOUrG2M=
+github.com/Microsoft/hcsshim v0.8.23/go.mod h1:4zegtUJth7lAvFyc6cH2gGQ5B3OFQim01nnU2M8jKDg=
+github.com/Microsoft/hcsshim v0.8.24 h1:jP+GMeRXIR1sH1kG4lJr9ShmSjVrua5jmFZDtfYGkn4=
+github.com/Microsoft/hcsshim v0.8.24/go.mod h1:4zegtUJth7lAvFyc6cH2gGQ5B3OFQim01nnU2M8jKDg=
+github.com/Microsoft/hcsshim/test v0.0.0-20201218223536-d3e5debf77da/go.mod h1:5hlzMzRKMLyo42nCZ9oml8AdTlq/0cvIaBv6tK1RehU=
+github.com/Microsoft/hcsshim/test v0.0.0-20210227013316-43a75bb4edd3/go.mod h1:mw7qgWloBUl75W/gVH3cQszUg1+gUITj7D6NY7ywVnY=
+github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ=
+github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU=
+github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0=
+github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE=
+github.com/Shopify/logrus-bugsnag v0.0.0-20171204204709-577dee27f20d/go.mod h1:HI8ITrYtUY+O+ZhtlqUnD8+KwNPOyugEhfP9fdUIaEQ=
+github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
+github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
+github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
+github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
+github.com/alexflint/go-filemutex v0.0.0-20171022225611-72bdc8eae2ae/go.mod h1:CgnQgUtFrFz9mxFNtED3jI5tLDjKlOM+oUF/sTk6ps0=
+github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY=
+github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8=
+github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY=
+github.com/aws/aws-sdk-go v1.15.11/go.mod h1:mFuSZ37Z9YOHbQEwBWztmVzqXrEkub65tZoCYDt7FT0=
+github.com/beorn7/perks v0.0.0-20160804104726-4c0e84591b9a/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=
+github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=
+github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8=
+github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
+github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs=
+github.com/bitly/go-simplejson v0.5.0/go.mod h1:cXHtHw4XUPsvGaxgjIAn8PhEWG9NfngEKAMDJEczWVA=
+github.com/bits-and-blooms/bitset v1.2.0 h1:Kn4yilvwNtMACtf1eYDlG8H77R07mZSPbMjLyS07ChA=
+github.com/bits-and-blooms/bitset v1.2.0/go.mod h1:gIdJ4wp64HaoK2YrL1Q5/N7Y16edYb8uY+O0FJTyyDA=
+github.com/blang/semver v3.1.0+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk=
+github.com/blang/semver v3.5.1+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk=
+github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869/go.mod h1:Ekp36dRnpXw/yCqJaO+ZrUyxD+3VXMFFr56k5XYrpB4=
+github.com/bshuster-repo/logrus-logstash-hook v0.4.1/go.mod h1:zsTqEiSzDgAa/8GZR7E1qaXrhYNDKBYy5/dWPTIflbk=
+github.com/buger/jsonparser v0.0.0-20180808090653-f4dd9f5a6b44/go.mod h1:bbYlZJ7hK1yFx9hf58LP0zeX7UjIGs20ufpu3evjr+s=
+github.com/bugsnag/bugsnag-go v0.0.0-20141110184014-b1d153021fcd/go.mod h1:2oa8nejYd4cQ/b0hMIopN0lCRxU0bueqREvZLWFrtK8=
+github.com/bugsnag/osext v0.0.0-20130617224835-0dd3f918b21b/go.mod h1:obH5gd0BsqsP2LwDJ9aOkm/6J86V6lyAXCoQWGw3K50=
+github.com/bugsnag/panicwrap v0.0.0-20151223152923-e2c28503fcd0/go.mod h1:D/8v3kj0zr8ZAKg1AQ6crr+5VwKN5eIywRkfhyM/+dE=
+github.com/cenkalti/backoff/v4 v4.1.1/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw=
+github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
+github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc=
+github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
+github.com/checkpoint-restore/go-criu/v4 v4.1.0/go.mod h1:xUQBLp4RLc5zJtWY++yjOoMoB5lihDt7fai+75m+rGw=
+github.com/checkpoint-restore/go-criu/v5 v5.0.0 h1:TW8f/UvntYoVDMN1K2HlT82qH1rb0sOjpGw3m6Ym+i4=
+github.com/checkpoint-restore/go-criu/v5 v5.0.0/go.mod h1:cfwC0EG7HMUenopBsUf9d89JlCLQIfgVcNsNN0t6T2M=
+github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI=
+github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI=
+github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU=
+github.com/cilium/ebpf v0.0.0-20200110133405-4032b1d8aae3/go.mod h1:MA5e5Lr8slmEg9bt0VpxxWqJlO4iwu3FBdHUzV7wQVg=
+github.com/cilium/ebpf v0.0.0-20200702112145-1c8d4c9ef775/go.mod h1:7cR51M8ViRLIdUjrmSXlK9pkrsDlLHbO8jiB8X8JnOc=
+github.com/cilium/ebpf v0.2.0/go.mod h1:To2CFviqOWL/M0gIMsvSMlqe7em/l1ALkX1PyjrX2Qs=
+github.com/cilium/ebpf v0.4.0/go.mod h1:4tRaxcgiL706VnOzHOdBlY8IEAIdxINsQBcU4xJJXRs=
+github.com/cilium/ebpf v0.6.2 h1:iHsfF/t4aW4heW2YKfeHrVPGdtYTL4C4KocpM8KTSnI=
+github.com/cilium/ebpf v0.6.2/go.mod h1:4tRaxcgiL706VnOzHOdBlY8IEAIdxINsQBcU4xJJXRs=
+github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
+github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
+github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk=
+github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI=
+github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
+github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
+github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
+github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8=
+github.com/containerd/aufs v0.0.0-20200908144142-dab0cbea06f4/go.mod h1:nukgQABAEopAHvB6j7cnP5zJ+/3aVcE7hCYqvIwAHyE=
+github.com/containerd/aufs v0.0.0-20201003224125-76a6863f2989/go.mod h1:AkGGQs9NM2vtYHaUen+NljV0/baGCAPELGm2q9ZXpWU=
+github.com/containerd/aufs v0.0.0-20210316121734-20793ff83c97/go.mod h1:kL5kd6KM5TzQjR79jljyi4olc1Vrx6XBlcyj3gNv2PU=
+github.com/containerd/aufs v1.0.0/go.mod h1:kL5kd6KM5TzQjR79jljyi4olc1Vrx6XBlcyj3gNv2PU=
+github.com/containerd/btrfs v0.0.0-20201111183144-404b9149801e/go.mod h1:jg2QkJcsabfHugurUvvPhS3E08Oxiuh5W/g1ybB4e0E=
+github.com/containerd/btrfs v0.0.0-20210316141732-918d888fb676/go.mod h1:zMcX3qkXTAi9GI50+0HOeuV8LU2ryCE/V2vG/ZBiTss=
+github.com/containerd/btrfs v1.0.0/go.mod h1:zMcX3qkXTAi9GI50+0HOeuV8LU2ryCE/V2vG/ZBiTss=
+github.com/containerd/cgroups v0.0.0-20190717030353-c4b9ac5c7601/go.mod h1:X9rLEHIqSf/wfK8NsPqxJmeZgW4pcfzdXITDrUSJ6uI=
+github.com/containerd/cgroups v0.0.0-20190919134610-bf292b21730f/go.mod h1:OApqhQ4XNSNC13gXIwDjhOQxjWa/NxkwZXJ1EvqT0ko=
+github.com/containerd/cgroups v0.0.0-20200531161412-0dbf7f05ba59/go.mod h1:pA0z1pT8KYB3TCXK/ocprsh7MAkoW8bZVzPdih9snmM=
+github.com/containerd/cgroups v0.0.0-20200710171044-318312a37340/go.mod h1:s5q4SojHctfxANBDvMeIaIovkq29IP48TKAxnhYRxvo=
+github.com/containerd/cgroups v0.0.0-20200824123100-0b889c03f102/go.mod h1:s5q4SojHctfxANBDvMeIaIovkq29IP48TKAxnhYRxvo=
+github.com/containerd/cgroups v0.0.0-20210114181951-8a68de567b68/go.mod h1:ZJeTFisyysqgcCdecO57Dj79RfL0LNeGiFUqLYQRYLE=
+github.com/containerd/cgroups v1.0.1 h1:iJnMvco9XGvKUvNQkv88bE4uJXxRQH18efbKo9w5vHQ=
+github.com/containerd/cgroups v1.0.1/go.mod h1:0SJrPIenamHDcZhEcJMNBB85rHcUsw4f25ZfBiPYRkU=
+github.com/containerd/console v0.0.0-20180822173158-c12b1e7919c1/go.mod h1:Tj/on1eG8kiEhd0+fhSDzsPAFESxzBBvdyEgyryXffw=
+github.com/containerd/console v0.0.0-20181022165439-0650fd9eeb50/go.mod h1:Tj/on1eG8kiEhd0+fhSDzsPAFESxzBBvdyEgyryXffw=
+github.com/containerd/console v0.0.0-20191206165004-02ecf6a7291e/go.mod h1:8Pf4gM6VEbTNRIT26AyyU7hxdQU3MvAvxVI0sc00XBE=
+github.com/containerd/console v1.0.1/go.mod h1:XUsP6YE/mKtz6bxc+I8UiKKTP04qjQL4qcS3XoQ5xkw=
+github.com/containerd/console v1.0.2 h1:Pi6D+aZXM+oUw1czuKgH5IJ+y0jhYcwBJfx5/Ghn9dE=
+github.com/containerd/console v1.0.2/go.mod h1:ytZPjGgY2oeTkAONYafi2kSj0aYggsf8acV1PGKCbzQ=
+github.com/containerd/containerd v1.2.10/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA=
+github.com/containerd/containerd v1.3.0-beta.2.0.20190828155532-0293cbd26c69/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA=
+github.com/containerd/containerd v1.3.0/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA=
+github.com/containerd/containerd v1.3.1-0.20191213020239-082f7e3aed57/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA=
+github.com/containerd/containerd v1.3.2/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA=
+github.com/containerd/containerd v1.4.0-beta.2.0.20200729163537-40b22ef07410/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA=
+github.com/containerd/containerd v1.4.1/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA=
+github.com/containerd/containerd v1.4.3/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA=
+github.com/containerd/containerd v1.4.9/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA=
+github.com/containerd/containerd v1.5.0-beta.1/go.mod h1:5HfvG1V2FsKesEGQ17k5/T7V960Tmcumvqn8Mc+pCYQ=
+github.com/containerd/containerd v1.5.0-beta.3/go.mod h1:/wr9AVtEM7x9c+n0+stptlo/uBBoBORwEx6ardVcmKU=
+github.com/containerd/containerd v1.5.0-beta.4/go.mod h1:GmdgZd2zA2GYIBZ0w09ZvgqEq8EfBp/m3lcVZIvPHhI=
+github.com/containerd/containerd v1.5.0-rc.0/go.mod h1:V/IXoMqNGgBlabz3tHD2TWDoTJseu1FGOKuoA4nNb2s=
+github.com/containerd/containerd v1.5.9 h1:rs6Xg1gtIxaeyG+Smsb/0xaSDu1VgFhOCKBXxMxbsF4=
+github.com/containerd/containerd v1.5.9/go.mod h1:fvQqCfadDGga5HZyn3j4+dx56qj2I9YwBrlSdalvJYQ=
+github.com/containerd/containerd v1.5.10 h1:3cQ2uRVCkJVcx5VombsE7105Gl9Wrl7ORAO3+4+ogf4=
+github.com/containerd/containerd v1.5.10/go.mod h1:fvQqCfadDGga5HZyn3j4+dx56qj2I9YwBrlSdalvJYQ=
+github.com/containerd/containerd v1.5.11 h1:+biZCY9Kns9t2J8L9hOqubjvNQBr1ULdmR7kL+omKoY=
+github.com/containerd/containerd v1.5.11/go.mod h1:FJl/l1urLXpO3oKDx2No2ouBno2GSI56nTl02HfHeZY=
+github.com/containerd/continuity v0.0.0-20190426062206-aaeac12a7ffc/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y=
+github.com/containerd/continuity v0.0.0-20190815185530-f2a389ac0a02/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y=
+github.com/containerd/continuity v0.0.0-20191127005431-f65d91d395eb/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y=
+github.com/containerd/continuity v0.0.0-20200710164510-efbc4488d8fe/go.mod h1:cECdGN1O8G9bgKTlLhuPJimka6Xb/Gg7vYzCTNVxhvo=
+github.com/containerd/continuity v0.0.0-20201208142359-180525291bb7/go.mod h1:kR3BEg7bDFaEddKm54WSmrol1fKWDU1nKYkgrcgZT7Y=
+github.com/containerd/continuity v0.0.0-20210208174643-50096c924a4e/go.mod h1:EXlVlkqNba9rJe3j7w3Xa924itAMLgZH4UD/Q4PExuQ=
+github.com/containerd/continuity v0.1.0 h1:UFRRY5JemiAhPZrr/uE0n8fMTLcZsUvySPr1+D7pgr8=
+github.com/containerd/continuity v0.1.0/go.mod h1:ICJu0PwR54nI0yPEnJ6jcS+J7CZAUXrLh8lPo2knzsM=
+github.com/containerd/fifo v0.0.0-20180307165137-3d5202aec260/go.mod h1:ODA38xgv3Kuk8dQz2ZQXpnv/UZZUHUCL7pnLehbXgQI=
+github.com/containerd/fifo v0.0.0-20190226154929-a9fb20d87448/go.mod h1:ODA38xgv3Kuk8dQz2ZQXpnv/UZZUHUCL7pnLehbXgQI=
+github.com/containerd/fifo v0.0.0-20200410184934-f15a3290365b/go.mod h1:jPQ2IAeZRCYxpS/Cm1495vGFww6ecHmMk1YJH2Q5ln0=
+github.com/containerd/fifo v0.0.0-20201026212402-0724c46b320c/go.mod h1:jPQ2IAeZRCYxpS/Cm1495vGFww6ecHmMk1YJH2Q5ln0=
+github.com/containerd/fifo v0.0.0-20210316144830-115abcc95a1d/go.mod h1:ocF/ME1SX5b1AOlWi9r677YJmCPSwwWnQ9O123vzpE4=
+github.com/containerd/fifo v1.0.0 h1:6PirWBr9/L7GDamKr+XM0IeUFXu5mf3M/BPpH9gaLBU=
+github.com/containerd/fifo v1.0.0/go.mod h1:ocF/ME1SX5b1AOlWi9r677YJmCPSwwWnQ9O123vzpE4=
+github.com/containerd/go-cni v1.0.1/go.mod h1:+vUpYxKvAF72G9i1WoDOiPGRtQpqsNW/ZHtSlv++smU=
+github.com/containerd/go-cni v1.0.2/go.mod h1:nrNABBHzu0ZwCug9Ije8hL2xBCYh/pjfMb1aZGrrohk=
+github.com/containerd/go-runc v0.0.0-20180907222934-5a6d9f37cfa3/go.mod h1:IV7qH3hrUgRmyYrtgEeGWJfWbgcHL9CSRruz2Vqcph0=
+github.com/containerd/go-runc v0.0.0-20190911050354-e029b79d8cda/go.mod h1:IV7qH3hrUgRmyYrtgEeGWJfWbgcHL9CSRruz2Vqcph0=
+github.com/containerd/go-runc v0.0.0-20200220073739-7016d3ce2328/go.mod h1:PpyHrqVs8FTi9vpyHwPwiNEGaACDxT/N/pLcvMSRA9g=
+github.com/containerd/go-runc v0.0.0-20201020171139-16b287bc67d0/go.mod h1:cNU0ZbCgCQVZK4lgG3P+9tn9/PaJNmoDXPpoJhDR+Ok=
+github.com/containerd/go-runc v1.0.0/go.mod h1:cNU0ZbCgCQVZK4lgG3P+9tn9/PaJNmoDXPpoJhDR+Ok=
+github.com/containerd/imgcrypt v1.0.1/go.mod h1:mdd8cEPW7TPgNG4FpuP3sGBiQ7Yi/zak9TYCG3juvb0=
+github.com/containerd/imgcrypt v1.0.4-0.20210301171431-0ae5c75f59ba/go.mod h1:6TNsg0ctmizkrOgXRNQjAPFWpMYRWuiB6dSF4Pfa5SA=
+github.com/containerd/imgcrypt v1.1.1-0.20210312161619-7ed62a527887/go.mod h1:5AZJNI6sLHJljKuI9IHnw1pWqo/F0nGDOuR9zgTs7ow=
+github.com/containerd/imgcrypt v1.1.1/go.mod h1:xpLnwiQmEUJPvQoAapeb2SNCxz7Xr6PJrXQb0Dpc4ms=
+github.com/containerd/nri v0.0.0-20201007170849-eb1350a75164/go.mod h1:+2wGSDGFYfE5+So4M5syatU0N0f0LbWpuqyMi4/BE8c=
+github.com/containerd/nri v0.0.0-20210316161719-dbaa18c31c14/go.mod h1:lmxnXF6oMkbqs39FiCt1s0R2HSMhcLel9vNL3m4AaeY=
+github.com/containerd/nri v0.1.0/go.mod h1:lmxnXF6oMkbqs39FiCt1s0R2HSMhcLel9vNL3m4AaeY=
+github.com/containerd/ttrpc v0.0.0-20190828154514-0e0f228740de/go.mod h1:PvCDdDGpgqzQIzDW1TphrGLssLDZp2GuS+X5DkEJB8o=
+github.com/containerd/ttrpc v0.0.0-20190828172938-92c8520ef9f8/go.mod h1:PvCDdDGpgqzQIzDW1TphrGLssLDZp2GuS+X5DkEJB8o=
+github.com/containerd/ttrpc v0.0.0-20191028202541-4f1b8fe65a5c/go.mod h1:LPm1u0xBw8r8NOKoOdNMeVHSawSsltak+Ihv+etqsE8=
+github.com/containerd/ttrpc v1.0.1/go.mod h1:UAxOpgT9ziI0gJrmKvgcZivgxOp8iFPSk8httJEt98Y=
+github.com/containerd/ttrpc v1.0.2/go.mod h1:UAxOpgT9ziI0gJrmKvgcZivgxOp8iFPSk8httJEt98Y=
+github.com/containerd/ttrpc v1.1.0 h1:GbtyLRxb0gOLR0TYQWt3O6B0NvT8tMdorEHqIQo/lWI=
+github.com/containerd/ttrpc v1.1.0/go.mod h1:XX4ZTnoOId4HklF4edwc4DcqskFZuvXB1Evzy5KFQpQ=
+github.com/containerd/typeurl v0.0.0-20180627222232-a93fcdb778cd/go.mod h1:Cm3kwCdlkCfMSHURc+r6fwoGH6/F1hH3S4sg0rLFWPc=
+github.com/containerd/typeurl v0.0.0-20190911142611-5eb25027c9fd/go.mod h1:GeKYzf2pQcqv7tJ0AoCuuhtnqhva5LNU3U+OyKxxJpk=
+github.com/containerd/typeurl v1.0.1/go.mod h1:TB1hUtrpaiO88KEK56ijojHS1+NeF0izUACaJW2mdXg=
+github.com/containerd/typeurl v1.0.2 h1:Chlt8zIieDbzQFzXzAeBEF92KhExuE4p9p92/QmY7aY=
+github.com/containerd/typeurl v1.0.2/go.mod h1:9trJWW2sRlGub4wZJRTW83VtbOLS6hwcDZXTn6oPz9s=
+github.com/containerd/zfs v0.0.0-20200918131355-0a33824f23a2/go.mod h1:8IgZOBdv8fAgXddBT4dBXJPtxyRsejFIpXoklgxgEjw=
+github.com/containerd/zfs v0.0.0-20210301145711-11e8f1707f62/go.mod h1:A9zfAbMlQwE+/is6hi0Xw8ktpL+6glmqZYtevJgaB8Y=
+github.com/containerd/zfs v0.0.0-20210315114300-dde8f0fda960/go.mod h1:m+m51S1DvAP6r3FcmYCp54bQ34pyOwTieQDNRIRHsFY=
+github.com/containerd/zfs v0.0.0-20210324211415-d5c4544f0433/go.mod h1:m+m51S1DvAP6r3FcmYCp54bQ34pyOwTieQDNRIRHsFY=
+github.com/containerd/zfs v1.0.0/go.mod h1:m+m51S1DvAP6r3FcmYCp54bQ34pyOwTieQDNRIRHsFY=
+github.com/containernetworking/cni v0.7.1/go.mod h1:LGwApLUm2FpoOfxTDEeq8T9ipbpZ61X79hmU3w8FmsY=
+github.com/containernetworking/cni v0.8.0/go.mod h1:LGwApLUm2FpoOfxTDEeq8T9ipbpZ61X79hmU3w8FmsY=
+github.com/containernetworking/cni v0.8.1/go.mod h1:LGwApLUm2FpoOfxTDEeq8T9ipbpZ61X79hmU3w8FmsY=
+github.com/containernetworking/plugins v0.8.6/go.mod h1:qnw5mN19D8fIwkqW7oHHYDHVlzhJpcY6TQxn/fUyDDM=
+github.com/containernetworking/plugins v0.9.1/go.mod h1:xP/idU2ldlzN6m4p5LmGiwRDjeJr6FLK6vuiUwoH7P8=
+github.com/containers/ocicrypt v1.0.1/go.mod h1:MeJDzk1RJHv89LjsH0Sp5KTY3ZYkjXO/C+bKAeWFIrc=
+github.com/containers/ocicrypt v1.1.0/go.mod h1:b8AOe0YR67uU8OqfVNcznfFpAzu3rdgUV4GP9qXPfu4=
+github.com/containers/ocicrypt v1.1.1/go.mod h1:Dm55fwWm1YZAjYRaJ94z2mfZikIyIN4B0oB3dj3jFxY=
+github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk=
+github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE=
+github.com/coreos/go-iptables v0.4.5/go.mod h1:/mVI274lEDI2ns62jHCDnCyBF9Iwsmekav8Dbxlm1MU=
+github.com/coreos/go-iptables v0.5.0/go.mod h1:/mVI274lEDI2ns62jHCDnCyBF9Iwsmekav8Dbxlm1MU=
+github.com/coreos/go-oidc v2.1.0+incompatible/go.mod h1:CgnwVTmzoESiwO9qyAFEMiHoZ1nMCKZlZ9V6mm3/LKc=
+github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk=
+github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk=
+github.com/coreos/go-systemd v0.0.0-20161114122254-48702e0da86b/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4=
+github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4=
+github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e h1:Wf6HqHfScWJN9/ZjdUKyjop4mf3Qdd+1TvvltAvM3m8=
+github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4=
+github.com/coreos/go-systemd/v22 v22.0.0/go.mod h1:xO0FLkIi5MaZafQlIrOotqXZ90ih+1atmu1JpKERPPk=
+github.com/coreos/go-systemd/v22 v22.1.0/go.mod h1:xO0FLkIi5MaZafQlIrOotqXZ90ih+1atmu1JpKERPPk=
+github.com/coreos/go-systemd/v22 v22.3.2 h1:D9/bQk5vlXQFZ6Kwuu6zaiXJ9oTPe68++AzAJc1DzSI=
+github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc=
+github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA=
+github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA=
+github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
+github.com/cpuguy83/go-md2man/v2 v2.0.0 h1:EoUDS0afbrsXAZ9YQ9jdu/mZ2sXgT1/2yyNng4PGlyM=
+github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
+github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY=
+github.com/creack/pty v1.1.11 h1:07n33Z8lZxZ2qwegKbObQohDhXDQxiMMz1NOUGYlesw=
+github.com/creack/pty v1.1.11/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
+github.com/cyphar/filepath-securejoin v0.2.2 h1:jCwT2GTP+PY5nBz3c/YL5PAIbusElVrPujOBSCj8xRg=
+github.com/cyphar/filepath-securejoin v0.2.2/go.mod h1:FpkQEhXnPnOthhzymB7CGsFk2G9VLXONKD9G7QGMM+4=
+github.com/d2g/dhcp4 v0.0.0-20170904100407-a1d1b6c41b1c/go.mod h1:Ct2BUK8SB0YC1SMSibvLzxjeJLnrYEVLULFNiHY9YfQ=
+github.com/d2g/dhcp4client v1.0.0/go.mod h1:j0hNfjhrt2SxUOw55nL0ATM/z4Yt3t2Kd1mW34z5W5s=
+github.com/d2g/dhcp4server v0.0.0-20181031114812-7d4a0a7f59a5/go.mod h1:Eo87+Kg/IX2hfWJfwxMzLyuSZyxSoAug2nGa1G2QAi8=
+github.com/d2g/hardwareaddr v0.0.0-20190221164911-e7d9fbe030e4/go.mod h1:bMl4RjIciD2oAxI7DmWRx6gbeqrkoLqv3MV0vzNad+I=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/docker/distribution v2.7.1+incompatible h1:a5mlkVzth6W5A4fOsS3D2EO5BUmsJpcB+cRlLU7cSug=
+github.com/denverdino/aliyungo v0.0.0-20190125010748-a747050bb1ba/go.mod h1:dV8lFg6daOBZbT6/BDGIz6Y3WFGn8juu6G+CQ6LHtl0=
+github.com/dgrijalva/jwt-go v0.0.0-20170104182250-a601269ab70c/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ=
+github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ=
+github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no=
+github.com/dnaeon/go-vcr v1.0.1/go.mod h1:aBB1+wY4s93YsC3HHjMBMrwTj2R9FHDzUr9KyGc8n1E=
+github.com/docker/distribution v0.0.0-20190905152932-14b96e55d84c/go.mod h1:0+TTO4EOBfRPhZXAeF1Vu+W3hHZ8eLp8PgKVZlcvtFY=
+github.com/docker/distribution v2.7.1-0.20190205005809-0d3efadf0154+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w=
github.com/docker/distribution v2.7.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w=
-github.com/docker/docker v0.0.0-20170601211448-f5ec1e2936dc h1:S8H7eaOGNNOZ83UGSgpgv4FlCtoBTJxG6GzFNkwJr5Q=
-github.com/docker/docker v0.0.0-20170601211448-f5ec1e2936dc/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
+github.com/docker/distribution v2.8.0+incompatible h1:l9EaZDICImO1ngI+uTifW+ZYvvz7fKISBAKpg+MbWbY=
+github.com/docker/distribution v2.8.0+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w=
+github.com/docker/docker v20.10.12+incompatible h1:CEeNmFM0QZIsJCZKMkZx0ZcahTiewkrgiwfYD+dfl1U=
+github.com/docker/docker v20.10.12+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
github.com/docker/go-connections v0.4.0 h1:El9xVISelRB7BuFusrZozjnkIM5YnzCViNKohAFqRJQ=
github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec=
+github.com/docker/go-events v0.0.0-20170721190031-9461782956ad/go.mod h1:Uw6UezgYA44ePAFQYUehOuCzmy5zmg/+nl2ZfMWGkpA=
+github.com/docker/go-events v0.0.0-20190806004212-e31b211e4f1c h1:+pKlWGMw7gf6bQ+oDZB4KHQFypsfjYlq/C4rfL7D3g8=
+github.com/docker/go-events v0.0.0-20190806004212-e31b211e4f1c/go.mod h1:Uw6UezgYA44ePAFQYUehOuCzmy5zmg/+nl2ZfMWGkpA=
+github.com/docker/go-metrics v0.0.0-20180209012529-399ea8c73916/go.mod h1:/u0gXw0Gay3ceNrsHubL3BtdOL2fHf93USgMTe0W5dI=
+github.com/docker/go-metrics v0.0.1/go.mod h1:cG1hvH2utMXtqgqqYE9plW6lDxS3/5ayHzueweSI3Vw=
github.com/docker/go-units v0.4.0 h1:3uh0PgVws3nIA0Q+MwDC8yjEPf9zjRfZZWXZYDct3Tw=
github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk=
+github.com/docker/libtrust v0.0.0-20150114040149-fa567046d9b1/go.mod h1:cyGadeNEkKy96OOhEzfZl+yxihPEzKnqJwvfuSUqbZE=
+github.com/docker/spdystream v0.0.0-20160310174837-449fdfce4d96/go.mod h1:Qh8CwZgvJUkLughtfhJv5dyTYa91l1fOUCrgjqmcifM=
+github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE=
+github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk=
+github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk=
+github.com/elazarl/goproxy v0.0.0-20180725130230-947c36da3153/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc=
+github.com/emicklei/go-restful v0.0.0-20170410110728-ff4f55a20633/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs=
+github.com/emicklei/go-restful v2.9.5+incompatible/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs=
+github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
+github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
+github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
+github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk=
+github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0=
+github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
+github.com/evanphx/json-patch v4.9.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk=
+github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4=
+github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k=
+github.com/frankban/quicktest v1.11.3/go.mod h1:wRf/ReqHper53s+kmmSZizM8NamnL3IM0I9ntUbOk+k=
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
-github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4=
github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ=
+github.com/fullsailor/pkcs7 v0.0.0-20190404230743-d7302db945fa/go.mod h1:KnogPXtdwXqoenmZCw6S+25EAm2MkxbG0deNDu4cbSA=
+github.com/garyburd/redigo v0.0.0-20150301180006-535138d7bcd7/go.mod h1:NR3MbYisc3/PwhQ00EMzDiPmrwpPxAn5GI05/YaO1SY=
+github.com/ghodss/yaml v0.0.0-20150909031657-73d445a93680/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
+github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
+github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU=
+github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
+github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
+github.com/go-ini/ini v1.25.4/go.mod h1:ByCAeIL28uOIIG0E3PJtZPDL8WnHpFKFOtgjp+3Ies8=
+github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
+github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
+github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE=
+github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk=
+github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas=
+github.com/go-logr/logr v0.2.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU=
+github.com/go-openapi/jsonpointer v0.19.2/go.mod h1:3akKfEdA7DF1sugOqz1dVQHBcuDBPKZGEoHC/NkiQRg=
+github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg=
+github.com/go-openapi/jsonreference v0.19.2/go.mod h1:jMjeRr2HHw6nAVajTXJ4eiUwohSTlpa0o73RUL1owJc=
+github.com/go-openapi/jsonreference v0.19.3/go.mod h1:rjx6GuL8TTa9VaixXglHmQmIL98+wF9xc8zWvFonSJ8=
+github.com/go-openapi/spec v0.19.3/go.mod h1:FpwSN1ksY1eteniUU7X0N/BgJ7a4WvBFVA8Lj9mJglo=
+github.com/go-openapi/swag v0.19.2/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk=
+github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk=
+github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
+github.com/godbus/dbus v0.0.0-20151105175453-c7fdd8b5cd55/go.mod h1:/YcGZj5zSblfDWMMoOzV4fas9FZnQYTkDnsGvmh2Grw=
+github.com/godbus/dbus v0.0.0-20180201030542-885f9cc04c9c/go.mod h1:/YcGZj5zSblfDWMMoOzV4fas9FZnQYTkDnsGvmh2Grw=
+github.com/godbus/dbus v0.0.0-20190422162347-ade71ed3457e h1:BWhy2j3IXJhjCbC68FptL43tDKIq8FladmaTs3Xs7Z8=
+github.com/godbus/dbus v0.0.0-20190422162347-ade71ed3457e/go.mod h1:bBOAhwG1umN6/6ZUMtDFBMQR8jRg9O75tm9K00oMsK4=
+github.com/godbus/dbus/v5 v5.0.3/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
+github.com/godbus/dbus/v5 v5.0.4 h1:9349emZab16e7zQvpmsbtjc18ykshndd8y2PG3sgJbA=
+github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
+github.com/gogo/googleapis v1.2.0/go.mod h1:Njal3psf3qN6dwBtQfUmBZh2ybovJ0tlu3o/AC7HYjU=
+github.com/gogo/googleapis v1.4.0 h1:zgVt4UpGxcqVOw97aRGxT4svlcmdK35fynLNctY32zI=
+github.com/gogo/googleapis v1.4.0/go.mod h1:5YRNX2z1oM5gXdAkurHa942MDgEJyk02w4OecKY87+c=
+github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
+github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4=
+github.com/gogo/protobuf v1.2.2-0.20190723190241-65acae22fc9d/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o=
+github.com/gogo/protobuf v1.3.0/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o=
+github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o=
+github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
+github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
+github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
+github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
+github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
+github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
+github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
+github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e h1:1r7pUrabqp18hOBcwBwiTsbnFeTZHV9eER/QT5JVZxY=
+github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
+github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
+github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
+github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y=
+github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw=
+github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw=
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
+github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
+github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
+github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=
+github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=
+github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk=
github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8=
github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA=
github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs=
github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=
github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
-github.com/golang/protobuf v1.4.2 h1:+Z5KGCizgyZCbGh1KZqA0fcLLkwbsjIzS4aV2v7wJX0=
+github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8=
github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
+github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
+github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
+github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw=
+github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
+github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
+github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
+github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
-github.com/google/go-cmp v0.4.0 h1:xsAVV57WRhGj6kEIi8ReJzQlHHqcBYCElAvkovg3B/4=
github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/go-cmp v0.5.5 h1:Khx7svrCpmxxtHBq5j2mp/xVjsi8hQMfNLvJFAlrGgU=
+github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
+github.com/google/gofuzz v1.1.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
+github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs=
+github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=
+github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=
+github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
+github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
+github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
+github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
+github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
+github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
+github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
+github.com/google/uuid v1.2.0 h1:qJYtXnJRWmpe7m/3XlyhrsLrEURqHRM2kxzoxXqyUDs=
+github.com/google/uuid v1.2.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
+github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg=
+github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk=
+github.com/googleapis/gnostic v0.4.1/go.mod h1:LRhVm6pbyptWbWbuZ38d1eyptfvIytN3ir6b65WBswg=
+github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
+github.com/gorilla/handlers v0.0.0-20150720190736-60c7bfde3e33/go.mod h1:Qkdc/uu4tH4g6mTK6auzZ766c4CA0Ng8+o/OAirnOIQ=
+github.com/gorilla/mux v1.7.2 h1:zoNxOV7WjqXptQOVngLmcSQgXmgk4NMz1HibBchjl/I=
+github.com/gorilla/mux v1.7.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
+github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ=
+github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ=
+github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
+github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA=
+github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs=
+github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs=
+github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk=
+github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY=
+github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY=
+github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw=
+github.com/hashicorp/errwrap v0.0.0-20141028054710-7554cd9344ce/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
+github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
+github.com/hashicorp/go-multierror v0.0.0-20161216184304-ed905158d874/go.mod h1:JMRHfdO9jKNzS/+BTlxCjKNQHg/jZAft8U7LloJvN7I=
+github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk=
+github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
+github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
+github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ=
github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
-github.com/konsorten/go-windows-terminal-sequences v1.0.3 h1:CE8S1cTafDpPvMhIxNJKvHsGVBgn1xWYf1NbHQhywc8=
+github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
+github.com/imdario/mergo v0.3.5/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA=
+github.com/imdario/mergo v0.3.8/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA=
+github.com/imdario/mergo v0.3.10/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA=
+github.com/imdario/mergo v0.3.11/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA=
+github.com/imdario/mergo v0.3.12/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA=
+github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8=
+github.com/j-keck/arping v0.0.0-20160618110441-2cf9dc699c56/go.mod h1:ymszkNOg6tORTn+6F6j+Jc8TOr5osrynvN6ivFWZ2GA=
+github.com/jmespath/go-jmespath v0.0.0-20160202185014-0b12d6b521d8/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k=
+github.com/jmespath/go-jmespath v0.0.0-20160803190731-bd40a432e4c7/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k=
+github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo=
+github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
+github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
+github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
+github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU=
+github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk=
+github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU=
+github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w=
+github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q=
+github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00=
+github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
+github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
+github.com/klauspost/compress v1.11.3/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs=
+github.com/klauspost/compress v1.11.13 h1:eSvu8Tmq6j2psUJqJrLcWH6K3w5Dwc+qipbaA6eVEN4=
+github.com/klauspost/compress v1.11.13/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs=
+github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
+github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
-github.com/mattn/go-isatty v0.0.9 h1:d5US/mDsogSGW37IV293h//ZFaeajb69h+EHFsv2xGg=
-github.com/mattn/go-isatty v0.0.9/go.mod h1:YNRxwqDuOph6SZLI9vUUz6OYw3QyUt7WiY2yME+cCiQ=
-github.com/nxadm/tail v1.4.4 h1:DQuhQpB1tVlglWS2hLQ5OV6B5r8aGxSrPc5Qo6uTN78=
+github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc=
+github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
+github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
+github.com/kr/pretty v0.2.1 h1:Fmg33tUaq4/8ym9TJN1x7sLJnHVwhP33CNkpYV/7rwI=
+github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
+github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
+github.com/kr/pty v1.1.5/go.mod h1:9r2w37qlBe7rQ6e1fg1S/9xpWHSnaqNdHD3WcMdbPDA=
+github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
+github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
+github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ=
+github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
+github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
+github.com/mailru/easyjson v0.7.0/go.mod h1:KAzv3t3aY1NaHWoQz1+4F1ccyAH66Jk7yos7ldAVICs=
+github.com/marstr/guid v1.1.0/go.mod h1:74gB1z2wpxxInTG6yaqA7KrtM0NZ+RbrcqDvYHefzho=
+github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU=
+github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4=
+github.com/mattn/go-isatty v0.0.14 h1:yVuAays6BHfxijgZPzw+3Zlu5yQgKGP2/hcQbHb7S9Y=
+github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94=
+github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU=
+github.com/mattn/go-shellwords v1.0.3/go.mod h1:3xCvwCdWdlDJUrvuMn7Wuy9eWs4pE8vqg+NOMyg4B2o=
+github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
+github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4=
+github.com/miekg/pkcs11 v1.0.3/go.mod h1:XsNlhZGX73bx86s2hdc/FuaLm2CPZJemRLMA+WTFxgs=
+github.com/mistifyio/go-zfs v2.1.2-0.20190413222219-f784269be439+incompatible/go.mod h1:8AuVvqP/mXw1px98n46wfvcGfQ4ci2FwoAjKYxuo3Z4=
+github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
+github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
+github.com/mitchellh/osext v0.0.0-20151018003038-5e2d6d41470f/go.mod h1:OkQIRizQZAeMln+1tSwduZz7+Af5oFlKirV/MSYes2A=
+github.com/moby/locker v1.0.1 h1:fOXqR41zeveg4fFODix+1Ch4mj/gT0NE1XJbp/epuBg=
+github.com/moby/locker v1.0.1/go.mod h1:S7SDdo5zpBK84bzzVlKr2V0hz+7x9hWbYC/kq7oQppc=
+github.com/moby/sys/mountinfo v0.4.0/go.mod h1:rEr8tzG/lsIZHBtN/JjGG+LMYx9eXgW2JI+6q0qou+A=
+github.com/moby/sys/mountinfo v0.4.1 h1:1O+1cHA1aujwEwwVMa2Xm2l+gIpUHyd3+D+d7LZh1kM=
+github.com/moby/sys/mountinfo v0.4.1/go.mod h1:rEr8tzG/lsIZHBtN/JjGG+LMYx9eXgW2JI+6q0qou+A=
+github.com/moby/sys/symlink v0.1.0/go.mod h1:GGDODQmbFOjFsXvfLVn3+ZRxkch54RkSiGqsZeMYowQ=
+github.com/moby/term v0.0.0-20200312100748-672ec06f55cd/go.mod h1:DdlQx2hp0Ss5/fLikoLlEeIYiATotOjgB//nb973jeo=
+github.com/moby/term v0.0.0-20210619224110-3f7ff695adc6 h1:dcztxKSvZ4Id8iPpHERQBbIJfabdt4wUm5qy3wOL2Zc=
+github.com/moby/term v0.0.0-20210619224110-3f7ff695adc6/go.mod h1:E2VnQOmVuvZB6UYnnDB0qG5Nq/1tD9acaOpo6xmt0Kw=
+github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
+github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
+github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
+github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
+github.com/morikuni/aec v1.0.0 h1:nP9CBfwrvYnBRgY6qfDQkygYDmYwOilePFkwzv4dU8A=
+github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc=
+github.com/mrunalp/fileutils v0.5.0 h1:NKzVxiH7eSk+OQ4M+ZYW1K6h27RUV3MI6NUTsHhU6Z4=
+github.com/mrunalp/fileutils v0.5.0/go.mod h1:M1WthSahJixYnrXQl/DFQuteStB1weuxD2QJNHXfbSQ=
+github.com/munnerz/goautoneg v0.0.0-20120707110453-a547fc61f48d/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ=
+github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ=
+github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
+github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw=
+github.com/ncw/swift v1.0.47/go.mod h1:23YIA4yWVnGwv2dQlN4bB7egfYX6YLn0Yo/S6zZO/ZM=
github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A=
+github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U=
+github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo=
+github.com/onsi/ginkgo v0.0.0-20151202141238-7f8ab55aaf3b/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
+github.com/onsi/ginkgo v0.0.0-20170829012221-11459a886d9c/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
+github.com/onsi/ginkgo v1.10.1/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
+github.com/onsi/ginkgo v1.10.3/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
+github.com/onsi/ginkgo v1.11.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk=
-github.com/onsi/ginkgo v1.14.0 h1:2mOpI4JVVPBN+WQRa0WKH2eXR+Ey+uK4n7Zj0aYpIQA=
-github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY=
+github.com/onsi/gomega v0.0.0-20151007035656-2152b45fa28a/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA=
+github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA=
+github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY=
-github.com/onsi/gomega v1.10.1 h1:o0+MgICZLuZ7xjH7Vx6zS/zcu93/BEp1VwkIW1mEXCE=
-github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo=
-github.com/opencontainers/go-digest v1.0.0-rc1 h1:WzifXhOVOEOuFYOJAW6aQqW0TooG2iki3E3Ii+WN7gQ=
+github.com/onsi/gomega v1.10.3/go.mod h1:V9xEwhxec5O8UDM77eCW8vLymOMltsqPVYWrpDsH8xc=
+github.com/opencontainers/go-digest v0.0.0-20170106003457-a6d0ee40d420/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s=
+github.com/opencontainers/go-digest v0.0.0-20180430190053-c9281466c8b2/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s=
github.com/opencontainers/go-digest v1.0.0-rc1/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s=
-github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I=
+github.com/opencontainers/go-digest v1.0.0-rc1.0.20180430190053-c9281466c8b2/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s=
+github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U=
+github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM=
+github.com/opencontainers/image-spec v1.0.0/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0=
+github.com/opencontainers/image-spec v1.0.1/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0=
+github.com/opencontainers/image-spec v1.0.2 h1:9yCKha/T5XdGtO0q9Q9a6T5NUCsTn/DrBg0D7ufOcFM=
+github.com/opencontainers/image-spec v1.0.2/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0=
+github.com/opencontainers/runc v0.0.0-20190115041553-12f6a991201f/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U=
+github.com/opencontainers/runc v0.1.1/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U=
+github.com/opencontainers/runc v1.0.0-rc8.0.20190926000215-3e425f80a8c9/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U=
+github.com/opencontainers/runc v1.0.0-rc9/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U=
+github.com/opencontainers/runc v1.0.0-rc93/go.mod h1:3NOsor4w32B2tC0Zbl8Knk4Wg84SM2ImC1fxBuqJ/H0=
+github.com/opencontainers/runc v1.0.2 h1:opHZMaswlyxz1OuGpBE53Dwe4/xF7EZTY0A2L/FpCOg=
+github.com/opencontainers/runc v1.0.2/go.mod h1:aTaHFFwQXuA71CiyxOdFFIorAoemI04suvGRQFzWTD0=
+github.com/opencontainers/runc v1.0.3 h1:1hbqejyQWCJBvtKAfdO0b1FmaEf2z/bxnjqbARass5k=
+github.com/opencontainers/runc v1.0.3/go.mod h1:aTaHFFwQXuA71CiyxOdFFIorAoemI04suvGRQFzWTD0=
+github.com/opencontainers/runtime-spec v0.1.2-0.20190507144316-5b71a03e2700/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0=
+github.com/opencontainers/runtime-spec v1.0.1/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0=
+github.com/opencontainers/runtime-spec v1.0.2-0.20190207185410-29686dbc5559/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0=
+github.com/opencontainers/runtime-spec v1.0.2/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0=
+github.com/opencontainers/runtime-spec v1.0.3-0.20200929063507-e6143ca7d51d/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0=
+github.com/opencontainers/runtime-spec v1.0.3-0.20210326190908-1c3f411f0417 h1:3snG66yBm59tKhhSPQrQ/0bCrv1LQbKt40LnUPiUxdc=
+github.com/opencontainers/runtime-spec v1.0.3-0.20210326190908-1c3f411f0417/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0=
+github.com/opencontainers/runtime-tools v0.0.0-20181011054405-1d69bd0f9c39/go.mod h1:r3f7wjNzSs2extwzU3Y+6pKfobzPh+kKFJ3ofN+3nfs=
+github.com/opencontainers/selinux v1.6.0/go.mod h1:VVGKuOLlE7v4PJyT6h7mNWvq1rzqiriPsEqVhc+svHE=
+github.com/opencontainers/selinux v1.8.0/go.mod h1:RScLhm78qiWa2gbVCcGkC7tCGdgk3ogry1nUQF8Evvo=
+github.com/opencontainers/selinux v1.8.2 h1:c4ca10UMgRcvZ6h0K4HtS15UaVSBEaE+iln2LVpAuGc=
+github.com/opencontainers/selinux v1.8.2/go.mod h1:MUIHuUEvKB1wtJjQdOyYRgOnLD2xAPP8dBsCoU0KuF8=
+github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic=
+github.com/pelletier/go-toml v1.8.1/go.mod h1:T2/BmBdy8dvIRq1a/8aqjN41wvWlN4lrapLU/GW4pbc=
+github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU=
+github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
+github.com/pkg/errors v0.8.1-0.20171018195549-f15c970de5b7/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
+github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
+github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
-github.com/sirupsen/logrus v1.0.5 h1:8c8b5uO0zS4X6RPl/sd1ENwSkIc0/H2PaHxE3udaE8I=
-github.com/sirupsen/logrus v1.0.5/go.mod h1:pMByvHTf9Beacp5x1UXfOR9xyW/9antXMhjMPG0dEzc=
-github.com/sirupsen/logrus v1.6.0 h1:UBcNElsrwanuuMsnGSlYmtmgbb23qDR5dG+6X6Oo89I=
+github.com/pquerna/cachecontrol v0.0.0-20171018203845-0dec1b30a021/go.mod h1:prYjPmNq4d1NPVmpShWobRqXY3q7Vp+80DqgxxUrUIA=
+github.com/prometheus/client_golang v0.0.0-20180209125602-c332b6f63c06/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw=
+github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw=
+github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso=
+github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo=
+github.com/prometheus/client_golang v1.1.0/go.mod h1:I1FGZT9+L76gKKOs5djB6ezCbFQP1xR9D75/vuwEF3g=
+github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M=
+github.com/prometheus/client_model v0.0.0-20171117100541-99fa1f4be8e5/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
+github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
+github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
+github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
+github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
+github.com/prometheus/common v0.0.0-20180110214958-89604d197083/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro=
+github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro=
+github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
+github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
+github.com/prometheus/common v0.6.0/go.mod h1:eBmuwkDJBwy6iBfxCBob6t6dR6ENT/y+J+Zk0j9GMYc=
+github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo=
+github.com/prometheus/procfs v0.0.0-20180125133057-cb4147076ac7/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
+github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
+github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
+github.com/prometheus/procfs v0.0.0-20190522114515-bc1a522cf7b1/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
+github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
+github.com/prometheus/procfs v0.0.3/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDaekg4FpcdQ=
+github.com/prometheus/procfs v0.0.5/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDaekg4FpcdQ=
+github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A=
+github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU=
+github.com/prometheus/procfs v0.2.0/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU=
+github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA=
+github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU=
+github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg=
+github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ=
+github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
+github.com/russross/blackfriday/v2 v2.0.1 h1:lPqVAte+HuHNfhJ/0LC98ESWRz8afy9tM/0RK8m9o+Q=
+github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
+github.com/safchain/ethtool v0.0.0-20190326074333-42ed695e3de8/go.mod h1:Z0q5wiBQGYcxhMZ6gUqHn6pYNLypFAvaL3UvgZLR0U4=
+github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0=
+github.com/seccomp/libseccomp-golang v0.9.1 h1:NJjM5DNFOs0s3kYE1WUOr6G8V97sdt46rlXTMfXGWBo=
+github.com/seccomp/libseccomp-golang v0.9.1/go.mod h1:GbW5+tmTXfcxTToHLXlScSlAvWlF4P2Ca7zGrPiEpWo=
+github.com/shurcooL/sanitized_anchor_name v1.0.0 h1:PdmoCO6wvbs+7yrJyMORt4/BmY5IYyJwS/kOiWx8mHo=
+github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc=
+github.com/sirupsen/logrus v1.0.4-0.20170822132746-89742aefa4b2/go.mod h1:pMByvHTf9Beacp5x1UXfOR9xyW/9antXMhjMPG0dEzc=
+github.com/sirupsen/logrus v1.0.6/go.mod h1:pMByvHTf9Beacp5x1UXfOR9xyW/9antXMhjMPG0dEzc=
+github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
+github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q=
+github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88=
+github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0=
+github.com/sirupsen/logrus v1.8.1 h1:dJKuHgqk1NNQlqoA6BTlM1Wf9DOH3NBjQyu0h9+AZZE=
+github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0=
+github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc=
+github.com/smartystreets/goconvey v0.0.0-20190330032615-68dc04aab96a/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA=
+github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM=
+github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA=
+github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ=
+github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk=
+github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE=
+github.com/spf13/cobra v0.0.2-0.20171109065643-2da4a54c5cee/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ=
+github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ=
+github.com/spf13/cobra v1.0.0/go.mod h1:/6GTrnGXV9HjY+aR4k0oJ5tcvakLuG6EuKReYlHNrgE=
+github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo=
+github.com/spf13/pflag v0.0.0-20170130214245-9ff6c6923cff/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
+github.com/spf13/pflag v1.0.1-0.20171106142849-4c012f6dcd95/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
+github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
+github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
+github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
+github.com/spf13/viper v1.4.0/go.mod h1:PTJ7Z/lr49W6bUbkmS1V3by4uWynFiR9p7+dSq/yZzE=
+github.com/stefanberger/go-pkcs11uri v0.0.0-20201008174630-78d3cae3a980/go.mod h1:AO3tvPzVZ/ayst6UlUKUv6rcPQInYe3IknH3jYhAKu8=
+github.com/stretchr/objx v0.0.0-20180129172003-8a3f7159479f/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
+github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
+github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE=
+github.com/stretchr/testify v0.0.0-20180303142811-b89eecf5ca5d/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
-github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
-github.com/thoas/go-funk v0.4.0 h1:KBaa5NL7NMtsFlQaD8nQMbDt1wuM+OOaNQyYNYQFhVo=
-github.com/thoas/go-funk v0.4.0/go.mod h1:mlR+dHGb+4YgXkf13rkQTuzrneeHANxOm6+ZnEV9HsA=
-golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2 h1:VklqNMn3ovrHsnt90PveolxSbWFaJdECFbxSq0Mqo2M=
+github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
+github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
+github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
+github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY=
+github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
+github.com/syndtr/gocapability v0.0.0-20170704070218-db04d3cc01c8/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww=
+github.com/syndtr/gocapability v0.0.0-20180916011248-d98352740cb2/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww=
+github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635 h1:kdXcSzyDtseVEc4yCz2qF8ZrQvIDBJLl4S1c3GCXmoI=
+github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww=
+github.com/tchap/go-patricia v2.2.6+incompatible/go.mod h1:bmLyhP68RS6kStMGxByiQ23RP/odRBOTVjwp2cDyi6I=
+github.com/thoas/go-funk v0.9.1 h1:O549iLZqPpTUQ10ykd26sZhzD+rmR5pWhuElrhbC20M=
+github.com/thoas/go-funk v0.9.1/go.mod h1:+IWnUfUmFO1+WVYQWQtIJHeRRdaIyyYglZN7xzUPe4Q=
+github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U=
+github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U=
+github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc=
+github.com/urfave/cli v0.0.0-20171014202726-7bc6a0acffa5/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA=
+github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA=
+github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0=
+github.com/urfave/cli v1.22.2 h1:gsqYFH8bb9ekPA12kRo0hfjngWQjkJPlN9R0N78BoUo=
+github.com/urfave/cli v1.22.2/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0=
+github.com/vishvananda/netlink v0.0.0-20181108222139-023a6dafdcdf/go.mod h1:+SR5DhBJrl6ZM7CoCKvpw5BKroDKQ+PJqOg65H/2ktk=
+github.com/vishvananda/netlink v1.1.0/go.mod h1:cTgwzPIzzgDAYoQrMm0EdrjRUBkTqKYppBueQtXaqoE=
+github.com/vishvananda/netlink v1.1.1-0.20201029203352-d40f9887b852 h1:cPXZWzzG0NllBLdjWoD1nDfaqu98YMv+OneaKc8sPOA=
+github.com/vishvananda/netlink v1.1.1-0.20201029203352-d40f9887b852/go.mod h1:twkDnbuQxJYemMlGd4JFIcuhgX83tXhKS2B/PRMpOho=
+github.com/vishvananda/netns v0.0.0-20180720170159-13995c7128cc/go.mod h1:ZjcWmFBXmLKZu9Nxj3WKYEafiSqer2rnvPr0en9UNpI=
+github.com/vishvananda/netns v0.0.0-20191106174202-0a2b9b5464df/go.mod h1:JP3t17pCcGlemwknint6hfoeCVQrEMVwxRLRjXpq+BU=
+github.com/vishvananda/netns v0.0.0-20200728191858-db3c7e526aae h1:4hwBBUfQCFe3Cym0ZtKyq7L16eZUtYKs+BaHDN6mAns=
+github.com/vishvananda/netns v0.0.0-20200728191858-db3c7e526aae/go.mod h1:DD4vA1DwXk04H54A1oHXtwZmA0grkVMdPxx/VGLCah0=
+github.com/willf/bitset v1.1.11-0.20200630133818-d5bec3311243/go.mod h1:RjeCKbqT1RxIR/KWY6phxZiaY1IyutSBfGjNPySAYV4=
+github.com/willf/bitset v1.1.11/go.mod h1:83CECat5yLh5zVOf4P1ErAgKA5UDvKtgyUABdr3+MjI=
+github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU=
+github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ=
+github.com/xeipuuv/gojsonschema v0.0.0-20180618132009-1d523034197f/go.mod h1:5yf86TLmAcydyeJq5YvxkGPE2fm/u4myDekKRoLuqhs=
+github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU=
+github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q=
+github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
+github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
+github.com/yvasiyarov/go-metrics v0.0.0-20140926110328-57bccd1ccd43/go.mod h1:aX5oPXxHm3bOH+xeAttToC8pqch2ScQN/JoXYupl6xs=
+github.com/yvasiyarov/gorelic v0.0.0-20141212073537-a9bba5b9ab50/go.mod h1:NUSPSUX/bi6SeDMUh6brw0nXpxHnc96TguQh0+r/ssA=
+github.com/yvasiyarov/newrelic_platform_go v0.0.0-20140908184405-b21fdbd4370f/go.mod h1:GlGEuHIJweS1mbCqG+7vt2nvWLzLLnRHbXz5JKd/Qbg=
+go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU=
+go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU=
+go.etcd.io/bbolt v1.3.5/go.mod h1:G5EMThwa9y8QZGBClrRx5EY+Yw9kAhnjy3bSjsnlVTQ=
+go.etcd.io/etcd v0.5.0-alpha.5.0.20200910180754-dd1b699fc489/go.mod h1:yVHk9ub3CSBatqGNg7GRmsnfLWtoW60w4eDYfh7vHDg=
+go.mozilla.org/pkcs7 v0.0.0-20200128120323-432b2356ecb1/go.mod h1:SNgMg+EgDFwmvSmLRTNKC5fegJjB7v23qTQ0XLGUNHk=
+go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU=
+go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8=
+go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
+go.opencensus.io v0.22.3 h1:8sGtKOrtQqkN1bp2AtX+misvLIlOmsEsNd+9NIcPEm8=
+go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
+go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI=
+go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE=
+go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE=
+go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0=
+go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q=
+golang.org/x/crypto v0.0.0-20171113213409-9f005a07e0d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
+golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
+golang.org/x/crypto v0.0.0-20181009213950-7c1a557ab941/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
-golang.org/x/crypto v0.0.0-20190618222545-ea8f1a30c443 h1:IcSOAf4PyMp3U3XbIEj1/xJ2BjNN2jWv7JoyOsMxXUU=
-golang.org/x/crypto v0.0.0-20190618222545-ea8f1a30c443/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
+golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
+golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
+golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
+golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
+golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
+golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
+golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
+golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
+golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4=
+golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
+golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
+golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
+golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek=
+golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY=
+golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=
+golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=
+golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=
+golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM=
+golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU=
+golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js=
+golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
+golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
+golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
+golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
+golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
+golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
+golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
+golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
+golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs=
+golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
+golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
+golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE=
+golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o=
+golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc=
+golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY=
+golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
+golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
+golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
+golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
+golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20181011144130-49bb7cea24b1/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
-golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7 h1:AeiKBIuRw3UomYXSbLy0Mc2dDLfdtbT/IVn4keq83P0=
-golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
+golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
+golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
+golang.org/x/net v0.0.0-20190522155817-f3200d17e092/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
+golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
+golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20190619014844-b5b0513f8c1b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20191004110552-13f9640d40b9/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
+golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
+golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
+golang.org/x/net v0.0.0-20201006153459-a7d1128ccaa0/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
+golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
+golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
+golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
+golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
+golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM=
+golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd h1:O7DYs+zxREGLKzKoMQrtrEacpb0ZVXA5rIwylE2Xchk=
+golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
+golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
+golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
+golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
+golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
+golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20201207232520-09787c993a3a h1:DcqTD9SDLc+1P/r1EmRBwnVsrOwW+kk2vWf9n+1sGhs=
+golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a h1:1BGLXjeY4akVXGgbC9HugT3Jv3hCI0z56oJR5vAMgBU=
+golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a h1:aYOabOQFp6Vj6W1F80affTUvO9UxmJRx8K0gsfABByQ=
-golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190514135907-3a4b5fb9f71f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190522044717-8097e1b27ff5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190602015325-4c4f7f33c9ed/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190606203320-7fc4e5ec1444/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190616124812-15dcb6c0061f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190801041406-cbf593c0f2f3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190812073006-9eafafc0a87e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20191022100944-742c48ecaeb7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20191115151921-52ab43148777/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20191210023423-ac6580df4449/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200120151820-655fe14d7479/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200124204421-9fbb57f87de9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200217220822-9197077df867/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200519105757-fe76b779f299 h1:DYfZAGf2WMFjMxbgTjaC+2HC7NkNAQs+6Q8b9WEB/F4=
-golang.org/x/sys v0.0.0-20200519105757-fe76b779f299/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200622214017-ed371f2e16b4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200728102440-3e129f6d46b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200817155316-9781c653f443/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200909081042-eff7692f9009/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200916030750-2334cc1a136f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200922070232-aee5d888a860/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20201112073958-5cba982894dd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20201117170446-d9b008d0a637/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20201202213521-69691e467435/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20210324051608-47abb6519492/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20210426230700-d19ff857e887/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20220209214540-3681064d5158 h1:rm+CHSpPEEW2IsXUib1ThaHIjuBVZjxNgSKmBLFfD4c=
+golang.org/x/sys v0.0.0-20220209214540-3681064d5158/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
+golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
+golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
-golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs=
+golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
+golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
+golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
+golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
+golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk=
+golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
+golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
+golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
+golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
+golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
+golang.org/x/time v0.0.0-20200630173020-3af7569d3a1e h1:EHBhcS0mlXEAVwNyO2dLfjToGsyY4j24pTs2ScHnX7s=
+golang.org/x/time v0.0.0-20200630173020-3af7569d3a1e/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
+golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4=
+golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
+golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
+golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
+golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
+golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
+golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
+golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
+golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
+golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
+golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
+golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
+golang.org/x/tools v0.0.0-20190614205625-5aca471b1d59/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
+golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
+golang.org/x/tools v0.0.0-20190624222133-a101b041ded4/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
+golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
+golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
+golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
+golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
+golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
+golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
+golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
+golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
+golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
+golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
+golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
+golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
+golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
+golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
+golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
+golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
+golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
+golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
+golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw=
+golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
+golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
+golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE=
+golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+google.golang.org/api v0.0.0-20160322025152-9bf6e6e569ff/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0=
+google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE=
+google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M=
+google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg=
+google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg=
+google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI=
+google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI=
+google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI=
+google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
+google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
+google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
+google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
+google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
+google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
+google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0=
+google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
+google.golang.org/cloud v0.0.0-20151119220103-975617b05ea8/go.mod h1:0H1ncTHf11KCFhTc/+EFRbzSCOZx+VUbRMk55Yv5MYk=
+google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
+google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
+google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
+google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
+google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
+google.golang.org/genproto v0.0.0-20190522204451-c2c4e71fbf69/go.mod h1:z3L6/3dTEVtUr6QSP8miRzeRqwQOioJ9I66odjN4I7s=
+google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
+google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
+google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8=
+google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
+google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
+google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
+google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
+google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
+google.golang.org/genproto v0.0.0-20200117163144-32f20d992d24/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
+google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
+google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA=
+google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
+google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
+google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
+google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
+google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
+google.golang.org/genproto v0.0.0-20201110150050-8816d57aaa9a/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
+google.golang.org/genproto v0.0.0-20220211171837-173942840c17 h1:2X+CNIheCutWRyKRte8szGxrE5ggtV4U+NKAbh/oLhg=
+google.golang.org/genproto v0.0.0-20220211171837-173942840c17/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI=
+google.golang.org/grpc v0.0.0-20160317175043-d3ddb4469d5a/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw=
+google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
+google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38=
+google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM=
+google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM=
+google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
+google.golang.org/grpc v1.23.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
+google.golang.org/grpc v1.24.0/go.mod h1:XDChyiUovWa60DnaeDeZmSW86xtLtjtZbwvSiRnRtcA=
+google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY=
+google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
+google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
+google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
+google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=
+google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0=
+google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc=
+google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU=
+google.golang.org/grpc v1.44.0 h1:weqSxi/TMs1SqFRMHCtBgXRs8k3X39QIDEZ0pRcttUg=
+google.golang.org/grpc v1.44.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU=
google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE=
google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo=
-google.golang.org/protobuf v1.23.0 h1:4MY060fB1DLGMB/7MBTLnwQUY6+F09GEiz6SsrNqyzM=
+google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
-gopkg.in/airbrake/gobrake.v2 v2.0.9 h1:7z2uVWwn7oVeeugY1DtlPAy5H+KYgB1KeKTnqjNatLo=
+google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
+google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4=
+google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
+google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
+google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
+google.golang.org/protobuf v1.27.1 h1:SnqbnDw1V7RiZcXPx5MEeqPv2s79L9i7BJUlG/+RurQ=
+google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
gopkg.in/airbrake/gobrake.v2 v2.0.9/go.mod h1:/h5ZAUhDkGaJfjzjKLSjv6zCL6O0LLBxU4K+aSYdM/U=
-gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
+gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/check.v1 v1.0.0-20141024133853-64131543e789/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo=
+gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/cheggaaa/pb.v1 v1.0.25/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw=
+gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
-gopkg.in/gemnasium/logrus-airbrake-hook.v2 v2.1.2 h1:OAj3g0cR6Dx/R07QgQe8wkA9RNjB2u4i700xBkIT4e0=
gopkg.in/gemnasium/logrus-airbrake-hook.v2 v2.1.2/go.mod h1:Xk6kEKp8OKb+X14hQBKWaSkCsqBpgog8nAV2xsGOxlo=
-gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ=
+gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw=
+gopkg.in/natefinch/lumberjack.v2 v2.0.0/go.mod h1:l0ndWWf7gzL7RNwBG7wST/UCcT4T24xpD6X8LsfU/+k=
+gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo=
+gopkg.in/square/go-jose.v2 v2.2.2/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI=
+gopkg.in/square/go-jose.v2 v2.3.1/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI=
+gopkg.in/square/go-jose.v2 v2.5.1/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI=
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
+gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74=
+gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
-gopkg.in/yaml.v2 v2.3.0 h1:clyUAQHOM3G0M3f5vQj7LuJrETvjVot3Z5el9nffUtU=
+gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
+gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo=
+gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
+gotest.tools v2.2.0+incompatible h1:VsBPFP1AI068pPrMxtb/S8Zkgf9xEmTLJjfM+P5UIEo=
+gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw=
+gotest.tools/v3 v3.0.2/go.mod h1:3SzNCllyD9/Y+b5r9JIKQ474KzkZyqLqEfYqMsX94Bk=
+gotest.tools/v3 v3.0.3 h1:4AuOwCGf4lLR9u3YOe2awrHygurzhO/HeQ6laiA6Sx0=
+gotest.tools/v3 v3.0.3/go.mod h1:Z7Lb0S5l+klDB31fvDQX8ss/FlKDxtlFlw3Oa8Ymbl8=
+honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
+honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
+honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
+honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
+honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=
+honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
+k8s.io/api v0.20.1/go.mod h1:KqwcCVogGxQY3nBlRpwt+wpAMF/KjaCc7RpywacvqUo=
+k8s.io/api v0.20.4/go.mod h1:++lNL1AJMkDymriNniQsWRkMDzRaX2Y/POTUi8yvqYQ=
+k8s.io/api v0.20.6/go.mod h1:X9e8Qag6JV/bL5G6bU8sdVRltWKmdHsFUGS3eVndqE8=
+k8s.io/apimachinery v0.20.1/go.mod h1:WlLqWAHZGg07AeltaI0MV5uk1Omp8xaN0JGLY6gkRpU=
+k8s.io/apimachinery v0.20.4/go.mod h1:WlLqWAHZGg07AeltaI0MV5uk1Omp8xaN0JGLY6gkRpU=
+k8s.io/apimachinery v0.20.6/go.mod h1:ejZXtW1Ra6V1O5H8xPBGz+T3+4gfkTCeExAHKU57MAc=
+k8s.io/apiserver v0.20.1/go.mod h1:ro5QHeQkgMS7ZGpvf4tSMx6bBOgPfE+f52KwvXfScaU=
+k8s.io/apiserver v0.20.4/go.mod h1:Mc80thBKOyy7tbvFtB4kJv1kbdD0eIH8k8vianJcbFM=
+k8s.io/apiserver v0.20.6/go.mod h1:QIJXNt6i6JB+0YQRNcS0hdRHJlMhflFmsBDeSgT1r8Q=
+k8s.io/client-go v0.20.1/go.mod h1:/zcHdt1TeWSd5HoUe6elJmHSQ6uLLgp4bIJHVEuy+/Y=
+k8s.io/client-go v0.20.4/go.mod h1:LiMv25ND1gLUdBeYxBIwKpkSC5IsozMMmOOeSJboP+k=
+k8s.io/client-go v0.20.6/go.mod h1:nNQMnOvEUEsOzRRFIIkdmYOjAZrC8bgq0ExboWSU1I0=
+k8s.io/component-base v0.20.1/go.mod h1:guxkoJnNoh8LNrbtiQOlyp2Y2XFCZQmrcg2n/DeYNLk=
+k8s.io/component-base v0.20.4/go.mod h1:t4p9EdiagbVCJKrQ1RsA5/V4rFQNDfRlevJajlGwgjI=
+k8s.io/component-base v0.20.6/go.mod h1:6f1MPBAeI+mvuts3sIdtpjljHWBQ2cIy38oBIWMYnrM=
+k8s.io/cri-api v0.17.3/go.mod h1:X1sbHmuXhwaHs9xxYffLqJogVsnI+f6cPRcgPel7ywM=
+k8s.io/cri-api v0.20.1/go.mod h1:2JRbKt+BFLTjtrILYVqQK5jqhI+XNdF6UiGMgczeBCI=
+k8s.io/cri-api v0.20.4/go.mod h1:2JRbKt+BFLTjtrILYVqQK5jqhI+XNdF6UiGMgczeBCI=
+k8s.io/cri-api v0.20.6/go.mod h1:ew44AjNXwyn1s0U4xCKGodU7J1HzBeZ1MpGrpa5r8Yc=
+k8s.io/gengo v0.0.0-20200413195148-3a45101e95ac/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0=
+k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE=
+k8s.io/klog/v2 v2.4.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y=
+k8s.io/kube-openapi v0.0.0-20201113171705-d219536bb9fd/go.mod h1:WOJ3KddDSol4tAGcJo0Tvi+dK12EcqSLqcWsryKMpfM=
+k8s.io/kubernetes v1.13.0/go.mod h1:ocZa8+6APFNC2tX1DZASIbocyYT5jHzqFVsY5aoB7Jk=
+k8s.io/utils v0.0.0-20201110183641-67b214c5f920/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA=
+rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8=
+rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0=
+rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA=
+sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.14/go.mod h1:LEScyzhFmoF5pso/YSeBstl57mOzx9xlU9n85RGrDQg=
+sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.15/go.mod h1:LEScyzhFmoF5pso/YSeBstl57mOzx9xlU9n85RGrDQg=
+sigs.k8s.io/structured-merge-diff/v4 v4.0.2/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw=
+sigs.k8s.io/structured-merge-diff/v4 v4.0.3/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw=
+sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o=
+sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc=
diff --git a/tools/cask/main.go b/tools/cask/main.go
index 482071a0081..e9885b028a3 100644
--- a/tools/cask/main.go
+++ b/tools/cask/main.go
@@ -159,6 +159,7 @@ func create(ctx context.Context, image string, dockerClient *client.Client) stri
NetworkMode: "host",
},
nil,
+ nil,
"")
if err != nil {
log.Fatal(err)
diff --git a/tools/cask/readme.md b/tools/cask/readme.md
index bcaa0410064..1f023ca84c9 100644
--- a/tools/cask/readme.md
+++ b/tools/cask/readme.md
@@ -8,6 +8,7 @@ would use for a local Custodian installation.
This can be useful in situations where you would like to ensure a working
CLI without requiring Python or package dependencies.
+
Install
-------
diff --git a/tools/dev/dockerpkg.py b/tools/dev/dockerpkg.py
index 2998ef96bbb..7fc19ac646e 100644
--- a/tools/dev/dockerpkg.py
+++ b/tools/dev/dockerpkg.py
@@ -35,7 +35,8 @@
RUN apt-get --yes update
RUN apt-get --yes install build-essential curl python3-venv python3-dev --no-install-recommends
RUN python3 -m venv /usr/local
-RUN curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py | python3
+RUN curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py \
+ | python3 - -y --version 1.1.9
WORKDIR /src
@@ -43,7 +44,8 @@
ADD pyproject.toml poetry.lock README.md /src/
ADD c7n /src/c7n/
RUN . /usr/local/bin/activate && $HOME/.poetry/bin/poetry install --no-dev
-RUN . /usr/local/bin/activate && pip install -q wheel
+RUN . /usr/local/bin/activate && pip install -q wheel && \
+ pip install -U pip
RUN . /usr/local/bin/activate && pip install -q aws-xray-sdk psutil jsonpatch
# Add provider packages
@@ -145,7 +147,7 @@
# Verify the install
# - policystream is not in ci due to libgit2 compilation needed
# - as a sanity check to distributing known good assets / we test here
-RUN . /usr/local/bin/activate && pytest tools/c7n_policystream
+RUN . /usr/local/bin/activate && pytest -n "no:terraform" tools/c7n_policystream
"""
@@ -469,7 +471,8 @@ def test_image(image_id, image_name, providers):
if providers not in (None, ()):
env["CUSTODIAN_PROVIDERS"] = " ".join(providers)
subprocess.check_call(
- [Path(sys.executable).parent / "pytest", "-v", "tests/test_docker.py"],
+ [Path(sys.executable).parent / "pytest", "-p",
+ "no:terraform", "-v", "tests/test_docker.py"],
env=env,
stderr=subprocess.STDOUT,
)
diff --git a/tools/dev/license-check.py b/tools/dev/license-check.py
index 34e9d92313d..0ce86027daf 100644
--- a/tools/dev/license-check.py
+++ b/tools/dev/license-check.py
@@ -37,7 +37,7 @@
'ldap3', # mailer dependency, LGPL
'sphinx-markdown-tables', # docgen - GPL
'docutils', # docgen - couple of different licenses but bulk is public domain
- 'chardet', # requests dep - LPGL
+ # 'chardet', # requests dep - LPGL
'websocket-client', # c7n_kube dep - LGPL-2.1
#
# packages with bad metadata
@@ -58,9 +58,10 @@ def main():
found = False
for d in sorted(metadata.distributions(), key=lambda d: d.metadata['Name']):
dname = d.metadata['Name']
-
if dname in seen:
continue
+ if d.metadata['License'] in accept:
+ continue
classifiers = d.metadata.get_all('Classifier') or ()
classifiers = [c for c in classifiers if c.startswith('License')]
@@ -70,6 +71,7 @@ def main():
print(f"{dname}: {d.metadata['License']} {classifiers}")
seen.add(dname)
+
if found:
sys.exit(1)
diff --git a/tools/dev/poetrypkg.py b/tools/dev/poetrypkg.py
index 1b6019cbf1c..5b6f05d51ec 100644
--- a/tools/dev/poetrypkg.py
+++ b/tools/dev/poetrypkg.py
@@ -13,19 +13,61 @@
from pathlib import Path
+def envbool(value):
+ if not value:
+ return False
+ value = value.lower()
+ if value == 'true':
+ return True
+ elif value == 'yes':
+ return True
+ return False
+
+
+POETRY_DEBUG = envbool(os.environ.get('POETRY_DEBUG'))
+
+
@click.group()
def cli():
"""Custodian Python Packaging Utility
some simple tooling to sync poetry files to setup/pip
"""
+
+ # if we're using poetry from git, have a flag to prevent the user installed
+ # one from getting precedence.
+ if POETRY_DEBUG:
+ return
+
+ # If there is a global installation of poetry, prefer that.
+ poetry_python_lib = Path(os.path.expanduser('~/.poetry/lib'))
+ if poetry_python_lib.exists():
+ sys.path.insert(0, os.path.realpath(poetry_python_lib))
+ # poetry env vendored deps
+ sys.path.insert(
+ 0,
+ os.path.join(
+ poetry_python_lib,
+ 'poetry',
+ '_vendor',
+ 'py{}.{}'.format(sys.version_info.major, sys.version_info.minor),
+ ),
+ )
+
# If there is a global installation of poetry, prefer that.
- poetry_python_lib = os.path.expanduser('~/.poetry/lib')
- sys.path.insert(0, os.path.realpath(poetry_python_lib))
- # poetry env vendored deps
- sys.path.insert(0,
- os.path.join(poetry_python_lib, 'poetry', '_vendor', 'py{}.{}'.format(
- sys.version_info.major, sys.version_info.minor)))
+ cur_poetry_python_lib = Path(os.path.expanduser('~/.local/share/pypoetry/venv/lib'))
+ if cur_poetry_python_lib.exists():
+ sys.path.insert(
+ 0, str(list(cur_poetry_python_lib.glob('*'))[0] / "site-packages")
+ )
+
+ osx_poetry_python_lib = Path(
+ os.path.expanduser('~/Library/Application Support/pypoetry/venv/lib')
+ )
+ if osx_poetry_python_lib.exists():
+ sys.path.insert(
+ 0, str(list(osx_poetry_python_lib.glob('*'))[0] / "site-packages")
+ )
# Override the poetry base template as all our readmes files
@@ -78,8 +120,7 @@ def gen_version_file(package_dir, version_file):
@cli.command()
@click.option('-p', '--package-dir', type=click.Path())
def gen_setup(package_dir):
- """Generate a setup suitable for dev compatibility with pip.
- """
+ """Generate a setup suitable for dev compatibility with pip."""
from poetry.core.masonry.builders import sdist
from poetry.factory import Factory
@@ -114,9 +155,10 @@ def convert_dependencies(cls, package, dependencies):
@cli.command()
@click.option('-p', '--package-dir', type=click.Path())
@click.option('-o', '--output', default='setup.py')
-def gen_frozensetup(package_dir, output):
- """Generate a frozen setup suitable for distribution.
- """
+@click.option('-x', '--exclude', multiple=True)
+@click.option('-r', '--remove', multiple=True)
+def gen_frozensetup(package_dir, output, exclude, remove):
+ """Generate a frozen setup suitable for distribution."""
from poetry.core.masonry.builders import sdist
from poetry.factory import Factory
@@ -126,10 +168,9 @@ def gen_frozensetup(package_dir, output):
sdist.SETUP = SETUP_TEMPLATE
class FrozenBuilder(sdist.SdistBuilder):
-
@classmethod
def convert_dependencies(cls, package, dependencies):
- reqs, default = locked_deps(package, poetry)
+ reqs, default = locked_deps(package, poetry, exclude, remove)
resolve_source_deps(poetry, package, reqs, frozen=True)
return reqs, default
@@ -175,13 +216,25 @@ def resolve_source_deps(poetry, package, reqs, frozen=False):
seen.add(cdep)
-def locked_deps(package, poetry):
+def locked_deps(package, poetry, exclude=(), remove=()):
reqs = []
- packages = poetry.locker.locked_repository(False).packages
- for p in packages:
- dep = p.to_dependency()
+ deps = poetry.locker.get_project_dependency_packages(
+ project_requires=package.all_requires,
+ dev=False, extras=[])
+
+ project_deps = {r.name: r for r in poetry.package.requires}
+ for dep_pkg in deps:
+ p = dep_pkg.package
+ d = dep_pkg.dependency
+
+ if p.name in exclude and p.name in project_deps:
+ reqs.append(project_deps[p.name].to_pep_508())
+ continue
+ if p.name in remove:
+ continue
+
line = "{}=={}".format(p.name, p.version)
- requirement = dep.to_pep_508()
+ requirement = d.to_pep_508(with_extras=False)
if ';' in requirement:
line += "; {}".format(requirement.split(";")[1].strip())
reqs.append(line)
diff --git a/tools/omnissm/go.mod b/tools/omnissm/go.mod
index abeec3c70ae..8586bb3e1c9 100644
--- a/tools/omnissm/go.mod
+++ b/tools/omnissm/go.mod
@@ -1,50 +1,56 @@
module github.com/capitalone/cloud-custodian/tools/omnissm
require (
- github.com/BurntSushi/toml v0.3.0 // indirect
- github.com/DATA-DOG/go-sqlmock v1.3.0 // indirect
- github.com/StackExchange/wmi v0.0.0-20180725035823-b12b22c5341f // indirect
github.com/aws/amazon-ssm-agent v0.0.0-20181107231829-b9654b268afc
github.com/aws/aws-lambda-go v1.6.0
github.com/aws/aws-sdk-go v1.15.23
github.com/aws/aws-xray-sdk-go v1.0.0-rc.5
+ github.com/golang/time v0.0.0-20180412165947-fbb02b2291d2
+ github.com/google/go-cmp v0.2.0
+ github.com/hashicorp/go-multierror v1.0.0
+ github.com/hashicorp/go-version v1.0.0
+ github.com/olivere/elastic v6.1.25+incompatible
+ github.com/pkg/errors v0.8.0
+ github.com/rs/zerolog v1.8.0
+ github.com/sha1sum/aws_signing_client v0.0.0-20170514202702-9088e4c7b34b
+ github.com/shirou/gopsutil v2.17.12+incompatible
+ github.com/spf13/cobra v0.0.3
+ github.com/spf13/pflag v1.0.2
+ github.com/spf13/viper v1.1.0
+ golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f
+ golang.org/x/sys v0.0.0-20180828065106-d99a578cf41b
+ gopkg.in/yaml.v2 v2.2.8
+)
+
+require (
+ github.com/BurntSushi/toml v0.3.0 // indirect
+ github.com/DATA-DOG/go-sqlmock v1.3.0 // indirect
+ github.com/StackExchange/wmi v0.0.0-20180725035823-b12b22c5341f // indirect
github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 // indirect
github.com/fortytw2/leaktest v1.2.0 // indirect
github.com/fsnotify/fsnotify v1.4.7 // indirect
+ github.com/go-ini/ini v1.25.4 // indirect
github.com/go-ole/go-ole v1.2.1 // indirect
- github.com/golang/time v0.0.0-20180412165947-fbb02b2291d2
- github.com/google/go-cmp v0.2.0
github.com/gopherjs/gopherjs v0.0.0-20180825215210-0210a2f0f73c // indirect
- github.com/hashicorp/go-multierror v1.0.0
- github.com/hashicorp/go-version v1.0.0
+ github.com/hashicorp/errwrap v1.0.0 // indirect
github.com/hashicorp/hcl v1.0.0 // indirect
github.com/inconshreveable/mousetrap v1.0.0 // indirect
+ github.com/jmespath/go-jmespath v0.0.0-20160202185014-0b12d6b521d8 // indirect
github.com/jtolds/gls v4.2.1+incompatible // indirect
github.com/kr/pretty v0.1.0 // indirect
github.com/magiconair/properties v1.8.0 // indirect
github.com/mailru/easyjson v0.0.0-20180823135443-60711f1a8329 // indirect
github.com/mitchellh/mapstructure v1.0.0 // indirect
- github.com/olivere/elastic v6.1.25+incompatible
github.com/pelletier/go-toml v1.2.0 // indirect
- github.com/pkg/errors v0.8.0
github.com/pmezard/go-difflib v1.0.0 // indirect
- github.com/rs/zerolog v1.8.0
- github.com/sha1sum/aws_signing_client v0.0.0-20170514202702-9088e4c7b34b
- github.com/shirou/gopsutil v2.17.12+incompatible
github.com/shirou/w32 v0.0.0-20160930032740-bb4de0191aa4 // indirect
github.com/smartystreets/assertions v0.0.0-20180820201707-7c9eb446e3cf // indirect
github.com/smartystreets/goconvey v0.0.0-20180222194500-ef6db91d284a // indirect
github.com/spf13/afero v1.1.1 // indirect
github.com/spf13/cast v1.2.0 // indirect
- github.com/spf13/cobra v0.0.3
github.com/spf13/jwalterweatherman v0.0.0-20180814060501-14d3d4c51834 // indirect
- github.com/spf13/pflag v1.0.2
- github.com/spf13/viper v1.1.0
github.com/stretchr/testify v1.2.2 // indirect
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d // indirect
- golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f
- golang.org/x/sys v0.0.0-20180828065106-d99a578cf41b
golang.org/x/text v0.3.0 // indirect
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 // indirect
- gopkg.in/yaml.v2 v2.2.1
)
diff --git a/tools/omnissm/go.sum b/tools/omnissm/go.sum
index 69d08cc36bc..1a6957872a8 100644
--- a/tools/omnissm/go.sum
+++ b/tools/omnissm/go.sum
@@ -97,9 +97,8 @@ golang.org/x/sys v0.0.0-20180828065106-d99a578cf41b h1:cmOZLU2i7CLArKNViO+ZCQ47w
golang.org/x/sys v0.0.0-20180828065106-d99a578cf41b/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
-gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY=
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
-gopkg.in/yaml.v2 v2.2.1 h1:mUhvW9EsL+naU5Q3cakzfE91YhliOondGd6ZrsDBHQE=
-gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10=
+gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
diff --git a/tools/ops/mugc.py b/tools/ops/mugc.py
index 5f13b55872d..ffacac40567 100644
--- a/tools/ops/mugc.py
+++ b/tools/ops/mugc.py
@@ -16,7 +16,6 @@
# TODO: mugc has alot of aws assumptions
from c7n.resources.aws import AWS
-import boto3
from botocore.exceptions import ClientError
@@ -32,6 +31,7 @@ def load_policies(options, config):
def region_gc(options, region, policy_config, policies):
+ log.debug("Region:%s Starting garbage collection", region)
session_factory = SessionFactory(
region=region,
assume_role=policy_config.assume_role,
@@ -123,18 +123,21 @@ def resources_gc_prefix(options, policy_config, policy_collection):
continue
policy_regions.setdefault(p.options.region, []).append(p)
- regions = get_gc_regions(options.regions)
+ regions = get_gc_regions(options.regions, policy_config)
for r in regions:
region_gc(options, r, policy_config, policy_regions.get(r, []))
-def get_gc_regions(regions):
+def get_gc_regions(regions, policy_config):
if 'all' in regions:
- session = boto3.Session(
- region_name='us-east-1',
- aws_access_key_id='never',
- aws_secret_access_key='found')
- return session.get_available_regions('s3')
+ session_factory = SessionFactory(
+ region='us-east-1',
+ assume_role=policy_config.assume_role,
+ profile=policy_config.profile,
+ external_id=policy_config.external_id)
+
+ client = session_factory().client('ec2')
+ return [region['RegionName'] for region in client.describe_regions()['Regions']]
return regions
diff --git a/tox.ini b/tox.ini
index 4989d0e1854..a9b3c5ffa41 100644
--- a/tox.ini
+++ b/tox.ini
@@ -30,52 +30,22 @@ setenv =
GOOGLE_CLOUD_PROJECT=custodian-1291
GOOGLE_APPLICATION_CREDENTIALS=tools/c7n_gcp/tests/data/credentials.json
-
-[testenv:py38]
+[testenv:py39]
commands =
pytest -n {env:C7N_TEST_WORKERS:auto} tests tools {posargs}
-[testenv:py38-cov]
-commands =
- pytest -vv -n {env:C7N_TEST_WORKERS:auto} --cov c7n --cov tools/c7n_azure/c7n_azure --cov tools/c7n_gcp/c7n_gcp --cov tools/c7n_kube/c7n_kube --cov tools/c7n_mailer/c7n_mailer --cov tools/c7n_terraform/c7n_terraform tests tools {posargs}
-
-
-[testenv:py36]
+[testenv:py38]
commands =
pytest -n {env:C7N_TEST_WORKERS:auto} tests tools {posargs}
-[testenv:py36-cov]
-commands =
- pytest -n {env:C7N_TEST_WORKERS:auto} --cov c7n --cov tools/c7n_azure/c7n_azure --cov tools/c7n_gcp/c7n_gcp --cov tools/c7n_kube/c7n_kube --cov tools/c7n_mailer/c7n_mailer tests tools {posargs}
-
[testenv:py37]
-;; override because this runner will run with schema validation on test policies
-;; by setting C7N_VALIDATE=true
-setenv =
- AWS_DEFAULT_REGION=us-east-1
- AWS_ACCESS_KEY_ID=foo
- AWS_SECRET_ACCESS_KEY=bar
- AWS_SESSION_TOKEN=fake
- C7N_TEST_RUN=true
- AZURE_ACCESS_TOKEN=fake_token
- AZURE_SUBSCRIPTION_ID=ea42f556-5106-4743-99b0-c129bfa71a47
- AZURE_TENANT_ID=ea42f556-5106-4743-99b0-000000000000
- GOOGLE_CLOUD_PROJECT=custodian-1291
- GOOGLE_APPLICATION_CREDENTIALS=tools/c7n_gcp/tests/data/credentials.json
- C7N_VALIDATE=true
commands =
py.test -n {env:C7N_TEST_WORKERS:auto} tests tools {posargs}
-
-[testenv:py37-windows]
-;; separate out win32 as the default py37 runner is running with validation
+[testenv:py36]
commands =
pytest -n {env:C7N_TEST_WORKERS:auto} tests tools {posargs}
-[testenv:py37-cov]
-commands =
- pytest -n {env:C7N_TEST_WORKERS:auto} --cov c7n --cov tools/c7n_azure/c7n_azure --cov tools/c7n_gcp/c7n_gcp --cov tools/c7n_kube/c7n_kube --cov tools/c7n_mailer/c7n_mailer tests tools {posargs}
-
[testenv:pypy]
commands =
pytest -n {env:C7N_TEST_WORKERS:auto} tests tools {posargs}