diff --git a/ansible/collections/ansible_collections/nhsd/apigee/plugins/module_utils/constants.py b/ansible/collections/ansible_collections/nhsd/apigee/plugins/module_utils/constants.py index 3f84944..b919580 100644 --- a/ansible/collections/ansible_collections/nhsd/apigee/plugins/module_utils/constants.py +++ b/ansible/collections/ansible_collections/nhsd/apigee/plugins/module_utils/constants.py @@ -8,6 +8,7 @@ "internal-qa", "internal-qa-sandbox", "ref", + "res", ], "nhsd-prod": ["dev", "int", "sandbox", "prod"], } diff --git a/ansible/collections/ansible_collections/nhsd/apigee/plugins/module_utils/models/ansible/add_jwks_resource_url.py b/ansible/collections/ansible_collections/nhsd/apigee/plugins/module_utils/models/ansible/add_jwks_resource_url.py index 0a568e0..7931418 100644 --- a/ansible/collections/ansible_collections/nhsd/apigee/plugins/module_utils/models/ansible/add_jwks_resource_url.py +++ b/ansible/collections/ansible_collections/nhsd/apigee/plugins/module_utils/models/ansible/add_jwks_resource_url.py @@ -35,6 +35,7 @@ class AddJwksResourceUrlToApp(pydantic.BaseModel): "internal-qa", "internal-qa-sandbox", "ref", + "res", "dev", "int", "sandbox", @@ -56,11 +57,10 @@ def check_org_env_combo(cls, environment, values): "internal-qa", "internal-qa-sandbox", "ref", + "res", ] if org == "nhsd-nonprod" and environment not in non_prod_envs: - raise ValueError( - f"Invalid environment {environment} for organization {org}" - ) + raise ValueError(f"Invalid environment {environment} for organization {org}") return environment @pydantic.validator("environment") diff --git a/ansible/collections/ansible_collections/nhsd/apigee/plugins/module_utils/models/apigee/product.py b/ansible/collections/ansible_collections/nhsd/apigee/plugins/module_utils/models/apigee/product.py index da47349..824debd 100644 --- a/ansible/collections/ansible_collections/nhsd/apigee/plugins/module_utils/models/apigee/product.py +++ b/ansible/collections/ansible_collections/nhsd/apigee/plugins/module_utils/models/apigee/product.py @@ -22,6 +22,7 @@ "internal-qa", "internal-qa-sandbox", "ref", + "res", "dev", "sandbox", "int", @@ -35,9 +36,7 @@ class ApigeeProductAttributeRateLimiting(BaseModel): value: Union[Dict[str, RateLimitingConfig], str] @validator("value") - def validate_ratelimiting( - cls, ratelimiting: Union[Dict[str, RateLimitingConfig], str] - ) -> str: + def validate_ratelimiting(cls, ratelimiting: Union[Dict[str, RateLimitingConfig], str]) -> str: """ Apigee API requires a string. We decode it as JSON in the shared flow. @@ -110,19 +109,22 @@ def _literal_name(class_): + ")$)" ) + class ApigeeProductAttributeOther(BaseModel): name: constr(regex=PRODUCT_ATTRIBUTE_REGEX) value: str + ApigeeProductAttributeSpecial = Annotated[ - Union [ + Union[ ApigeeProductAttributeAccess, ApigeeProductAttributeRateLimit, ApigeeProductAttributeRateLimiting, ], - Field(discriminator="name") + Field(discriminator="name"), ] + def _count_cls(items: List[Any], cls: Type): return sum(isinstance(item, cls) for item in items) @@ -130,16 +132,16 @@ def _count_cls(items: List[Any], cls: Type): class ApigeeProduct(BaseModel): name: str approvalType: Literal["auto", "manual"] = "manual" - attributes: List[Union[ApigeeProductAttributeSpecial, ApigeeProductAttributeOther]] = [{"name": "access", "value": "private"}] + attributes: List[Union[ApigeeProductAttributeSpecial, ApigeeProductAttributeOther]] = [ + {"name": "access", "value": "private"} + ] description: str = None displayName: str = None # Note: This value is manually inserted by apigee_environment # object that contains this product. So if you do not provide a # value in the manifest file it is still populated. - environments: conlist( - item_type=LITERAL_APIGEE_ENVIRONMENTS, min_items=1, max_items=1 - ) + environments: conlist(item_type=LITERAL_APIGEE_ENVIRONMENTS, min_items=1, max_items=1) proxies: List[str] = [] quota: constr(regex=r"[1-9][0-9]*") = None quotaInterval: constr(regex=r"[1-9][0-9]*") = None diff --git a/ansible/collections/ansible_collections/nhsd/apigee/roles/deploy_manifest/vars/main.yml b/ansible/collections/ansible_collections/nhsd/apigee/roles/deploy_manifest/vars/main.yml index ff1ab75..5c32a08 100644 --- a/ansible/collections/ansible_collections/nhsd/apigee/roles/deploy_manifest/vars/main.yml +++ b/ansible/collections/ansible_collections/nhsd/apigee/roles/deploy_manifest/vars/main.yml @@ -1,6 +1,14 @@ APIGEE_ORGANIZATIONS: [nhsd-nonprod, nhsd-prod] APIGEE_ENVIRONMENTS: - nhsd-nonprod: [internal-dev, internal-dev-sandbox, internal-qa, internal-qa-sandbox, ref] + nhsd-nonprod: + [ + internal-dev, + internal-dev-sandbox, + internal-qa, + internal-qa-sandbox, + ref, + res, + ] nhsd-prod: [dev, sandbox, int, prod] APIGEE_ENVIRONMENT: "{{ lookup('env','APIGEE_ENVIRONMENT') }}" diff --git a/ansible/collections/ansible_collections/nhsd/apigee/tests/unit/plugins/module_utils/models/manifest/schema_versions/v1.0.0.json b/ansible/collections/ansible_collections/nhsd/apigee/tests/unit/plugins/module_utils/models/manifest/schema_versions/v1.0.0.json index c061453..fba6108 100644 --- a/ansible/collections/ansible_collections/nhsd/apigee/tests/unit/plugins/module_utils/models/manifest/schema_versions/v1.0.0.json +++ b/ansible/collections/ansible_collections/nhsd/apigee/tests/unit/plugins/module_utils/models/manifest/schema_versions/v1.0.0.json @@ -223,6 +223,10 @@ "const": "ref", "type": "string" }, + { + "const": "res", + "type": "string" + }, { "const": "dev", "type": "string" diff --git a/ansible/collections/ansible_collections/nhsd/apigee/tests/unit/plugins/module_utils/models/manifest/schema_versions/v1.1.0.json b/ansible/collections/ansible_collections/nhsd/apigee/tests/unit/plugins/module_utils/models/manifest/schema_versions/v1.1.0.json index 9431f27..b8f170c 100644 --- a/ansible/collections/ansible_collections/nhsd/apigee/tests/unit/plugins/module_utils/models/manifest/schema_versions/v1.1.0.json +++ b/ansible/collections/ansible_collections/nhsd/apigee/tests/unit/plugins/module_utils/models/manifest/schema_versions/v1.1.0.json @@ -282,6 +282,10 @@ "const": "ref", "type": "string" }, + { + "const": "res", + "type": "string" + }, { "const": "dev", "type": "string" diff --git a/ansible/collections/ansible_collections/nhsd/apigee/tests/unit/plugins/module_utils/models/manifest/schema_versions/v1.1.1.json b/ansible/collections/ansible_collections/nhsd/apigee/tests/unit/plugins/module_utils/models/manifest/schema_versions/v1.1.1.json index 605bfdb..e9e845b 100644 --- a/ansible/collections/ansible_collections/nhsd/apigee/tests/unit/plugins/module_utils/models/manifest/schema_versions/v1.1.1.json +++ b/ansible/collections/ansible_collections/nhsd/apigee/tests/unit/plugins/module_utils/models/manifest/schema_versions/v1.1.1.json @@ -282,6 +282,10 @@ "const": "ref", "type": "string" }, + { + "const": "res", + "type": "string" + }, { "const": "dev", "type": "string" diff --git a/ansible/collections/ansible_collections/nhsd/apigee/tests/unit/plugins/module_utils/models/manifest/schema_versions/v1.1.2.json b/ansible/collections/ansible_collections/nhsd/apigee/tests/unit/plugins/module_utils/models/manifest/schema_versions/v1.1.2.json index 949546b..77c4436 100644 --- a/ansible/collections/ansible_collections/nhsd/apigee/tests/unit/plugins/module_utils/models/manifest/schema_versions/v1.1.2.json +++ b/ansible/collections/ansible_collections/nhsd/apigee/tests/unit/plugins/module_utils/models/manifest/schema_versions/v1.1.2.json @@ -382,6 +382,10 @@ "const": "ref", "type": "string" }, + { + "const": "res", + "type": "string" + }, { "const": "dev", "type": "string" diff --git a/ansible/collections/ansible_collections/nhsd/apigee/tests/unit/plugins/module_utils/models/manifest/schema_versions/v1.1.3.json b/ansible/collections/ansible_collections/nhsd/apigee/tests/unit/plugins/module_utils/models/manifest/schema_versions/v1.1.3.json index 2c01cca..71909fc 100644 --- a/ansible/collections/ansible_collections/nhsd/apigee/tests/unit/plugins/module_utils/models/manifest/schema_versions/v1.1.3.json +++ b/ansible/collections/ansible_collections/nhsd/apigee/tests/unit/plugins/module_utils/models/manifest/schema_versions/v1.1.3.json @@ -260,6 +260,10 @@ "const": "ref", "type": "string" }, + { + "const": "res", + "type": "string" + }, { "const": "dev", "type": "string" diff --git a/ansible/collections/ansible_collections/nhsd/apigee/tests/unit/plugins/module_utils/models/manifest/schema_versions/v1.1.4.json b/ansible/collections/ansible_collections/nhsd/apigee/tests/unit/plugins/module_utils/models/manifest/schema_versions/v1.1.4.json index eadd229..e33319c 100644 --- a/ansible/collections/ansible_collections/nhsd/apigee/tests/unit/plugins/module_utils/models/manifest/schema_versions/v1.1.4.json +++ b/ansible/collections/ansible_collections/nhsd/apigee/tests/unit/plugins/module_utils/models/manifest/schema_versions/v1.1.4.json @@ -260,6 +260,10 @@ "const": "ref", "type": "string" }, + { + "const": "res", + "type": "string" + }, { "const": "dev", "type": "string" diff --git a/ansible/collections/ansible_collections/nhsd/apigee/tests/unit/plugins/module_utils/models/manifest/schema_versions/v1.1.5.json b/ansible/collections/ansible_collections/nhsd/apigee/tests/unit/plugins/module_utils/models/manifest/schema_versions/v1.1.5.json index d0bf5ba..2bb2cc5 100644 --- a/ansible/collections/ansible_collections/nhsd/apigee/tests/unit/plugins/module_utils/models/manifest/schema_versions/v1.1.5.json +++ b/ansible/collections/ansible_collections/nhsd/apigee/tests/unit/plugins/module_utils/models/manifest/schema_versions/v1.1.5.json @@ -239,6 +239,7 @@ "internal-qa", "internal-qa-sandbox", "ref", + "res", "dev", "sandbox", "int", @@ -371,6 +372,7 @@ "internal-qa", "internal-qa-sandbox", "ref", + "res", "dev", "sandbox", "int", diff --git a/ansible/collections/ansible_collections/nhsd/apigee/tests/unit/plugins/module_utils/models/manifest/schema_versions/v1.1.6.json b/ansible/collections/ansible_collections/nhsd/apigee/tests/unit/plugins/module_utils/models/manifest/schema_versions/v1.1.6.json index 3ae0e5a..273bd71 100644 --- a/ansible/collections/ansible_collections/nhsd/apigee/tests/unit/plugins/module_utils/models/manifest/schema_versions/v1.1.6.json +++ b/ansible/collections/ansible_collections/nhsd/apigee/tests/unit/plugins/module_utils/models/manifest/schema_versions/v1.1.6.json @@ -9,7 +9,10 @@ "$ref": "#/definitions/ManifestMeta" } }, - "required": ["apigee", "meta"], + "required": [ + "apigee", + "meta" + ], "definitions": { "ApigeeProductAttributeAccess": { "title": "ApigeeProductAttributeAccess", @@ -17,16 +20,24 @@ "properties": { "name": { "title": "Name", - "enum": ["access"], + "enum": [ + "access" + ], "type": "string" }, "value": { "title": "Value", - "enum": ["public", "private"], + "enum": [ + "public", + "private" + ], "type": "string" } }, - "required": ["name", "value"] + "required": [ + "name", + "value" + ] }, "ApigeeProductAttributeRateLimit": { "title": "ApigeeProductAttributeRateLimit", @@ -34,7 +45,9 @@ "properties": { "name": { "title": "Name", - "enum": ["ratelimit"], + "enum": [ + "ratelimit" + ], "type": "string" }, "value": { @@ -43,7 +56,10 @@ "type": "string" } }, - "required": ["name", "value"] + "required": [ + "name", + "value" + ] }, "QuotaConfig": { "title": "QuotaConfig", @@ -66,7 +82,13 @@ }, "timeunit": { "title": "Timeunit", - "enum": ["minute", "hour", "day", "week", "month"], + "enum": [ + "minute", + "hour", + "day", + "week", + "month" + ], "type": "string" } }, @@ -109,7 +131,9 @@ "properties": { "name": { "title": "Name", - "enum": ["ratelimiting"], + "enum": [ + "ratelimiting" + ], "type": "string" }, "value": { @@ -127,7 +151,10 @@ ] } }, - "required": ["name", "value"] + "required": [ + "name", + "value" + ] }, "ApigeeProductAttributeOther": { "title": "ApigeeProductAttributeOther", @@ -143,7 +170,10 @@ "type": "string" } }, - "required": ["name", "value"] + "required": [ + "name", + "value" + ] }, "ApigeeProduct": { "title": "ApigeeProduct", @@ -156,7 +186,10 @@ "approvalType": { "title": "Approvaltype", "default": "manual", - "enum": ["auto", "manual"], + "enum": [ + "auto", + "manual" + ], "type": "string" }, "attributes": { @@ -209,6 +242,7 @@ "internal-qa", "internal-qa-sandbox", "ref", + "res", "dev", "sandbox", "int", @@ -237,7 +271,10 @@ }, "quotaTimeUnit": { "title": "Quotatimeunit", - "enum": ["minute", "hour"], + "enum": [ + "minute", + "hour" + ], "type": "string" }, "scopes": { @@ -249,7 +286,10 @@ } } }, - "required": ["name", "environments"], + "required": [ + "name", + "environments" + ], "additionalProperties": false }, "ApigeeSpec": { @@ -270,7 +310,10 @@ "type": "object" } }, - "required": ["name", "path"], + "required": [ + "name", + "path" + ], "additionalProperties": false }, "ApigeeApidoc": { @@ -315,7 +358,9 @@ "type": "string" } }, - "required": ["edgeAPIProductName"], + "required": [ + "edgeAPIProductName" + ], "additionalProperties": false }, "ManifestApigeeEnvironment": { @@ -330,6 +375,7 @@ "internal-qa", "internal-qa-sandbox", "ref", + "res", "dev", "sandbox", "int", @@ -362,7 +408,9 @@ } } }, - "required": ["name"] + "required": [ + "name" + ] }, "ManifestApigee": { "title": "ManifestApigee", @@ -376,7 +424,9 @@ } } }, - "required": ["environments"] + "required": [ + "environments" + ] }, "ManifestMetaApi": { "title": "ManifestMetaApi", @@ -408,7 +458,9 @@ "uniqueItems": true } }, - "required": ["name"] + "required": [ + "name" + ] }, "ManifestMeta": { "title": "ManifestMeta", @@ -423,7 +475,10 @@ "$ref": "#/definitions/ManifestMetaApi" } }, - "required": ["schema_version", "api"] + "required": [ + "schema_version", + "api" + ] } } -} +} \ No newline at end of file diff --git a/ansible/collections/ansible_collections/nhsd/apigee/tests/unit/plugins/module_utils/models/manifest/schema_versions/v1.1.7.json b/ansible/collections/ansible_collections/nhsd/apigee/tests/unit/plugins/module_utils/models/manifest/schema_versions/v1.1.7.json index e9e0327..1dfe94e 100644 --- a/ansible/collections/ansible_collections/nhsd/apigee/tests/unit/plugins/module_utils/models/manifest/schema_versions/v1.1.7.json +++ b/ansible/collections/ansible_collections/nhsd/apigee/tests/unit/plugins/module_utils/models/manifest/schema_versions/v1.1.7.json @@ -9,7 +9,10 @@ "$ref": "#/definitions/ManifestMeta" } }, - "required": ["apigee", "meta"], + "required": [ + "apigee", + "meta" + ], "definitions": { "ApigeeProductAttributeAccess": { "title": "ApigeeProductAttributeAccess", @@ -17,16 +20,24 @@ "properties": { "name": { "title": "Name", - "enum": ["access"], + "enum": [ + "access" + ], "type": "string" }, "value": { "title": "Value", - "enum": ["public", "private"], + "enum": [ + "public", + "private" + ], "type": "string" } }, - "required": ["name", "value"] + "required": [ + "name", + "value" + ] }, "ApigeeProductAttributeRateLimit": { "title": "ApigeeProductAttributeRateLimit", @@ -34,7 +45,9 @@ "properties": { "name": { "title": "Name", - "enum": ["ratelimit"], + "enum": [ + "ratelimit" + ], "type": "string" }, "value": { @@ -43,7 +56,10 @@ "type": "string" } }, - "required": ["name", "value"] + "required": [ + "name", + "value" + ] }, "QuotaConfig": { "title": "QuotaConfig", @@ -66,7 +82,13 @@ }, "timeunit": { "title": "Timeunit", - "enum": ["minute", "hour", "day", "week", "month"], + "enum": [ + "minute", + "hour", + "day", + "week", + "month" + ], "type": "string" } }, @@ -109,7 +131,9 @@ "properties": { "name": { "title": "Name", - "enum": ["ratelimiting"], + "enum": [ + "ratelimiting" + ], "type": "string" }, "value": { @@ -127,7 +151,10 @@ ] } }, - "required": ["name", "value"] + "required": [ + "name", + "value" + ] }, "ApigeeProductAttributeOther": { "title": "ApigeeProductAttributeOther", @@ -143,7 +170,10 @@ "type": "string" } }, - "required": ["name", "value"] + "required": [ + "name", + "value" + ] }, "ApigeeProduct": { "title": "ApigeeProduct", @@ -156,7 +186,10 @@ "approvalType": { "title": "Approvaltype", "default": "manual", - "enum": ["auto", "manual"], + "enum": [ + "auto", + "manual" + ], "type": "string" }, "attributes": { @@ -209,6 +242,7 @@ "internal-qa", "internal-qa-sandbox", "ref", + "res", "dev", "sandbox", "int", @@ -237,7 +271,10 @@ }, "quotaTimeUnit": { "title": "Quotatimeunit", - "enum": ["minute", "hour"], + "enum": [ + "minute", + "hour" + ], "type": "string" }, "scopes": { @@ -249,7 +286,10 @@ } } }, - "required": ["name", "environments"], + "required": [ + "name", + "environments" + ], "additionalProperties": false }, "ApigeeSpec": { @@ -270,7 +310,10 @@ "type": "object" } }, - "required": ["name", "path"], + "required": [ + "name", + "path" + ], "additionalProperties": false }, "ApigeeApidoc": { @@ -315,7 +358,9 @@ "type": "string" } }, - "required": ["edgeAPIProductName"], + "required": [ + "edgeAPIProductName" + ], "additionalProperties": false }, "ManifestApigeeEnvironment": { @@ -330,6 +375,7 @@ "internal-qa", "internal-qa-sandbox", "ref", + "res", "dev", "sandbox", "int", @@ -362,7 +408,9 @@ } } }, - "required": ["name"] + "required": [ + "name" + ] }, "ManifestApigee": { "title": "ManifestApigee", @@ -376,7 +424,9 @@ } } }, - "required": ["environments"] + "required": [ + "environments" + ] }, "ManifestMetaApi": { "title": "ManifestMetaApi", @@ -408,7 +458,9 @@ "uniqueItems": true } }, - "required": ["name"] + "required": [ + "name" + ] }, "ManifestMeta": { "title": "ManifestMeta", @@ -423,7 +475,10 @@ "$ref": "#/definitions/ManifestMetaApi" } }, - "required": ["schema_version", "api"] + "required": [ + "schema_version", + "api" + ] } } -} +} \ No newline at end of file diff --git a/ansible/collections/ansible_collections/nhsd/apigee/tests/unit/plugins/module_utils/models/manifest/schema_versions/v1.1.8.json b/ansible/collections/ansible_collections/nhsd/apigee/tests/unit/plugins/module_utils/models/manifest/schema_versions/v1.1.8.json index c6b8483..d948f00 100644 --- a/ansible/collections/ansible_collections/nhsd/apigee/tests/unit/plugins/module_utils/models/manifest/schema_versions/v1.1.8.json +++ b/ansible/collections/ansible_collections/nhsd/apigee/tests/unit/plugins/module_utils/models/manifest/schema_versions/v1.1.8.json @@ -1,377 +1,429 @@ { - "title": "Manifest", - "type": "object", - "properties": { - "apigee": { - "$ref": "#/definitions/ManifestApigee" + "title": "Manifest", + "type": "object", + "properties": { + "apigee": { + "$ref": "#/definitions/ManifestApigee" + }, + "meta": { + "$ref": "#/definitions/ManifestMeta" + } + }, + "required": [ + "apigee", + "meta" + ], + "definitions": { + "ApigeeProductAttributeAccess": { + "title": "ApigeeProductAttributeAccess", + "type": "object", + "properties": { + "name": { + "title": "Name", + "enum": [ + "access" + ], + "type": "string" + }, + "value": { + "title": "Value", + "enum": [ + "public", + "private" + ], + "type": "string" + } }, - "meta": { - "$ref": "#/definitions/ManifestMeta" - } + "required": [ + "name", + "value" + ] }, - "required": ["apigee", "meta"], - "definitions": { - "ApigeeProductAttributeAccess": { - "title": "ApigeeProductAttributeAccess", - "type": "object", - "properties": { - "name": { - "title": "Name", - "enum": ["access"], - "type": "string" - }, - "value": { - "title": "Value", - "enum": ["public", "private"], - "type": "string" - } + "ApigeeProductAttributeRateLimit": { + "title": "ApigeeProductAttributeRateLimit", + "type": "object", + "properties": { + "name": { + "title": "Name", + "enum": [ + "ratelimit" + ], + "type": "string" }, - "required": ["name", "value"] + "value": { + "title": "Value", + "pattern": "^[0-9]+(ps|pm)$", + "type": "string" + } }, - "ApigeeProductAttributeRateLimit": { - "title": "ApigeeProductAttributeRateLimit", - "type": "object", - "properties": { - "name": { - "title": "Name", - "enum": ["ratelimit"], - "type": "string" - }, - "value": { - "title": "Value", - "pattern": "^[0-9]+(ps|pm)$", - "type": "string" - } + "required": [ + "name", + "value" + ] + }, + "QuotaConfig": { + "title": "QuotaConfig", + "description": "Providing default values for ratelimiting here would mean that\nchanging defaults required a redeploy for all proxies.\n\nTherefore we set None as the default value on all\nRateLimitingConfig attributes, and *do not* export them as JSON.\n\nThe platform defaults are used to fill in the missing values\ninside the ApplyRateLimiting shared flow. This pattern us to\nupdate the defaults for everyone by just by updating the shared\nflow.", + "type": "object", + "properties": { + "enabled": { + "title": "Enabled", + "type": "boolean" }, - "required": ["name", "value"] + "interval": { + "title": "Interval", + "exclusiveMinimum": 0, + "type": "integer" + }, + "limit": { + "title": "Limit", + "exclusiveMinimum": 0, + "type": "integer" + }, + "timeunit": { + "title": "Timeunit", + "enum": [ + "minute", + "hour", + "day", + "week", + "month" + ], + "type": "string" + } }, - "QuotaConfig": { - "title": "QuotaConfig", - "description": "Providing default values for ratelimiting here would mean that\nchanging defaults required a redeploy for all proxies.\n\nTherefore we set None as the default value on all\nRateLimitingConfig attributes, and *do not* export them as JSON.\n\nThe platform defaults are used to fill in the missing values\ninside the ApplyRateLimiting shared flow. This pattern us to\nupdate the defaults for everyone by just by updating the shared\nflow.", - "type": "object", - "properties": { - "enabled": { - "title": "Enabled", - "type": "boolean" - }, - "interval": { - "title": "Interval", - "exclusiveMinimum": 0, - "type": "integer" - }, - "limit": { - "title": "Limit", - "exclusiveMinimum": 0, - "type": "integer" - }, - "timeunit": { - "title": "Timeunit", - "enum": ["minute", "hour", "day", "week", "month"], - "type": "string" - } + "additionalProperties": false + }, + "SpikeArrestConfig": { + "title": "SpikeArrestConfig", + "description": "Providing default values for ratelimiting here would mean that\nchanging defaults required a redeploy for all proxies.\n\nTherefore we set None as the default value on all\nRateLimitingConfig attributes, and *do not* export them as JSON.\n\nThe platform defaults are used to fill in the missing values\ninside the ApplyRateLimiting shared flow. This pattern us to\nupdate the defaults for everyone by just by updating the shared\nflow.", + "type": "object", + "properties": { + "enabled": { + "title": "Enabled", + "type": "boolean" }, - "additionalProperties": false + "ratelimit": { + "title": "Ratelimit", + "pattern": "^[1-9][0-9]*(ps|pm)$", + "type": "string" + } }, - "SpikeArrestConfig": { - "title": "SpikeArrestConfig", - "description": "Providing default values for ratelimiting here would mean that\nchanging defaults required a redeploy for all proxies.\n\nTherefore we set None as the default value on all\nRateLimitingConfig attributes, and *do not* export them as JSON.\n\nThe platform defaults are used to fill in the missing values\ninside the ApplyRateLimiting shared flow. This pattern us to\nupdate the defaults for everyone by just by updating the shared\nflow.", - "type": "object", - "properties": { - "enabled": { - "title": "Enabled", - "type": "boolean" - }, - "ratelimit": { - "title": "Ratelimit", - "pattern": "^[1-9][0-9]*(ps|pm)$", - "type": "string" - } + "additionalProperties": false + }, + "RateLimitingConfig": { + "title": "RateLimitingConfig", + "description": "Providing default values for ratelimiting here would mean that\nchanging defaults required a redeploy for all proxies.\n\nTherefore we set None as the default value on all\nRateLimitingConfig attributes, and *do not* export them as JSON.\n\nThe platform defaults are used to fill in the missing values\ninside the ApplyRateLimiting shared flow. This pattern us to\nupdate the defaults for everyone by just by updating the shared\nflow.", + "type": "object", + "properties": { + "quota": { + "$ref": "#/definitions/QuotaConfig" }, - "additionalProperties": false + "spikeArrest": { + "$ref": "#/definitions/SpikeArrestConfig" + } }, - "RateLimitingConfig": { - "title": "RateLimitingConfig", - "description": "Providing default values for ratelimiting here would mean that\nchanging defaults required a redeploy for all proxies.\n\nTherefore we set None as the default value on all\nRateLimitingConfig attributes, and *do not* export them as JSON.\n\nThe platform defaults are used to fill in the missing values\ninside the ApplyRateLimiting shared flow. This pattern us to\nupdate the defaults for everyone by just by updating the shared\nflow.", - "type": "object", - "properties": { - "quota": { - "$ref": "#/definitions/QuotaConfig" - }, - "spikeArrest": { - "$ref": "#/definitions/SpikeArrestConfig" - } + "additionalProperties": false + }, + "ApigeeProductAttributeRateLimiting": { + "title": "ApigeeProductAttributeRateLimiting", + "type": "object", + "properties": { + "name": { + "title": "Name", + "enum": [ + "ratelimiting" + ], + "type": "string" }, - "additionalProperties": false + "value": { + "title": "Value", + "anyOf": [ + { + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/RateLimitingConfig" + } + }, + { + "type": "string" + } + ] + } }, - "ApigeeProductAttributeRateLimiting": { - "title": "ApigeeProductAttributeRateLimiting", - "type": "object", - "properties": { - "name": { - "title": "Name", - "enum": ["ratelimiting"], - "type": "string" - }, - "value": { - "title": "Value", + "required": [ + "name", + "value" + ] + }, + "ApigeeProductAttributeOther": { + "title": "ApigeeProductAttributeOther", + "type": "object", + "properties": { + "name": { + "title": "Name", + "pattern": "^(?!(access|ratelimit|ratelimiting)$)", + "type": "string" + }, + "value": { + "title": "Value", + "type": "string" + } + }, + "required": [ + "name", + "value" + ] + }, + "ApigeeProduct": { + "title": "ApigeeProduct", + "type": "object", + "properties": { + "name": { + "title": "Name", + "type": "string" + }, + "approvalType": { + "title": "Approvaltype", + "default": "manual", + "enum": [ + "auto", + "manual" + ], + "type": "string" + }, + "attributes": { + "title": "Attributes", + "default": [ + { + "name": "access", + "value": "private" + } + ], + "type": "array", + "items": { "anyOf": [ { - "type": "object", - "additionalProperties": { - "$ref": "#/definitions/RateLimitingConfig" - } + "oneOf": [ + { + "$ref": "#/definitions/ApigeeProductAttributeAccess" + }, + { + "$ref": "#/definitions/ApigeeProductAttributeRateLimit" + }, + { + "$ref": "#/definitions/ApigeeProductAttributeRateLimiting" + } + ] }, { - "type": "string" + "$ref": "#/definitions/ApigeeProductAttributeOther" } ] } }, - "required": ["name", "value"] - }, - "ApigeeProductAttributeOther": { - "title": "ApigeeProductAttributeOther", - "type": "object", - "properties": { - "name": { - "title": "Name", - "pattern": "^(?!(access|ratelimit|ratelimiting)$)", - "type": "string" - }, - "value": { - "title": "Value", - "type": "string" - } - }, - "required": ["name", "value"] - }, - "ApigeeProduct": { - "title": "ApigeeProduct", - "type": "object", - "properties": { - "name": { - "title": "Name", - "type": "string" - }, - "approvalType": { - "title": "Approvaltype", - "default": "manual", - "enum": ["auto", "manual"], - "type": "string" - }, - "attributes": { - "title": "Attributes", - "default": [ - { - "name": "access", - "value": "private" - } - ], - "type": "array", - "items": { - "anyOf": [ - { - "oneOf": [ - { - "$ref": "#/definitions/ApigeeProductAttributeAccess" - }, - { - "$ref": "#/definitions/ApigeeProductAttributeRateLimit" - }, - { - "$ref": "#/definitions/ApigeeProductAttributeRateLimiting" - } - ] - }, - { - "$ref": "#/definitions/ApigeeProductAttributeOther" - } - ] - } - }, - "description": { - "title": "Description", - "type": "string" - }, - "displayName": { - "title": "Displayname", - "type": "string" - }, - "environments": { - "title": "Environments", - "minItems": 1, - "maxItems": 1, - "type": "array", - "items": { - "enum": [ - "internal-dev", - "internal-dev-sandbox", - "internal-qa", - "internal-qa-sandbox", - "ref", - "dev", - "sandbox", - "int", - "prod" - ], - "type": "string" - } - }, - "proxies": { - "title": "Proxies", - "default": [], - "type": "array", - "items": { - "type": "string" - } - }, - "quota": { - "title": "Quota", - "pattern": "[1-9][0-9]*", - "type": "string" - }, - "quotaInterval": { - "title": "Quotainterval", - "pattern": "[1-9][0-9]*", - "type": "string" - }, - "quotaTimeUnit": { - "title": "Quotatimeunit", - "enum": ["minute", "hour"], - "type": "string" - }, - "scopes": { - "title": "Scopes", - "default": [], - "type": "array", - "items": { - "type": "string" - } - } + "description": { + "title": "Description", + "type": "string" }, - "required": ["name", "environments"], - "additionalProperties": false - }, - "ApigeeSpec": { - "title": "ApigeeSpec", - "type": "object", - "properties": { - "name": { - "title": "Name", - "type": "string" - }, - "path": { - "title": "Path", - "format": "file-path", - "type": "string" - }, - "content": { - "title": "Content", - "type": "object" - } + "displayName": { + "title": "Displayname", + "type": "string" }, - "required": ["name", "path"], - "additionalProperties": false - }, - "ManifestApigeeEnvironment": { - "title": "ManifestApigeeEnvironment", - "type": "object", - "properties": { - "name": { - "title": "Name", + "environments": { + "title": "Environments", + "minItems": 1, + "maxItems": 1, + "type": "array", + "items": { "enum": [ "internal-dev", "internal-dev-sandbox", "internal-qa", "internal-qa-sandbox", "ref", + "res", "dev", "sandbox", "int", "prod" ], "type": "string" - }, - "products": { - "title": "Products", - "default": [], - "type": "array", - "items": { - "$ref": "#/definitions/ApigeeProduct" - } - }, - "specs": { - "title": "Specs", - "default": [], - "type": "array", - "items": { - "$ref": "#/definitions/ApigeeSpec" - } } }, - "required": ["name"] + "proxies": { + "title": "Proxies", + "default": [], + "type": "array", + "items": { + "type": "string" + } + }, + "quota": { + "title": "Quota", + "pattern": "[1-9][0-9]*", + "type": "string" + }, + "quotaInterval": { + "title": "Quotainterval", + "pattern": "[1-9][0-9]*", + "type": "string" + }, + "quotaTimeUnit": { + "title": "Quotatimeunit", + "enum": [ + "minute", + "hour" + ], + "type": "string" + }, + "scopes": { + "title": "Scopes", + "default": [], + "type": "array", + "items": { + "type": "string" + } + } }, - "ManifestApigee": { - "title": "ManifestApigee", - "type": "object", - "properties": { - "environments": { - "title": "Environments", - "type": "array", - "items": { - "$ref": "#/definitions/ManifestApigeeEnvironment" - } + "required": [ + "name", + "environments" + ], + "additionalProperties": false + }, + "ApigeeSpec": { + "title": "ApigeeSpec", + "type": "object", + "properties": { + "name": { + "title": "Name", + "type": "string" + }, + "path": { + "title": "Path", + "format": "file-path", + "type": "string" + }, + "content": { + "title": "Content", + "type": "object" + } + }, + "required": [ + "name", + "path" + ], + "additionalProperties": false + }, + "ManifestApigeeEnvironment": { + "title": "ManifestApigeeEnvironment", + "type": "object", + "properties": { + "name": { + "title": "Name", + "enum": [ + "internal-dev", + "internal-dev-sandbox", + "internal-qa", + "internal-qa-sandbox", + "ref", + "res", + "dev", + "sandbox", + "int", + "prod" + ], + "type": "string" + }, + "products": { + "title": "Products", + "default": [], + "type": "array", + "items": { + "$ref": "#/definitions/ApigeeProduct" } }, - "required": ["environments"] + "specs": { + "title": "Specs", + "default": [], + "type": "array", + "items": { + "$ref": "#/definitions/ApigeeSpec" + } + } }, - "ManifestMetaApi": { - "title": "ManifestMetaApi", - "type": "object", - "properties": { - "name": { - "title": "Name", - "pattern": "^[a-z][a-z0-9]*(-[a-z0-9]+)*$", - "type": "string" - }, - "id": { - "title": "Id", - "description": "This field is deprecated, use guid instead.", - "type": "string", - "format": "uuid4" - }, - "guid": { - "title": "Guid", + "required": [ + "name" + ] + }, + "ManifestApigee": { + "title": "ManifestApigee", + "type": "object", + "properties": { + "environments": { + "title": "Environments", + "type": "array", + "items": { + "$ref": "#/definitions/ManifestApigeeEnvironment" + } + } + }, + "required": [ + "environments" + ] + }, + "ManifestMetaApi": { + "title": "ManifestMetaApi", + "type": "object", + "properties": { + "name": { + "title": "Name", + "pattern": "^[a-z][a-z0-9]*(-[a-z0-9]+)*$", + "type": "string" + }, + "id": { + "title": "Id", + "description": "This field is deprecated, use guid instead.", + "type": "string", + "format": "uuid4" + }, + "guid": { + "title": "Guid", + "type": "string", + "format": "uuid4" + }, + "spec_guids": { + "title": "Spec Guids", + "type": "array", + "items": { "type": "string", "format": "uuid4" }, - "spec_guids": { - "title": "Spec Guids", - "type": "array", - "items": { - "type": "string", - "format": "uuid4" - }, - "uniqueItems": true - } - }, - "required": ["name"] + "uniqueItems": true + } }, - "ManifestMeta": { - "title": "ManifestMeta", - "type": "object", - "properties": { - "schema_version": { - "title": "Schema Version", - "pattern": "[1-9][0-9]*(\\.[0-9]+){0,2}", - "type": "string" - }, - "api": { - "$ref": "#/definitions/ManifestMetaApi" - } + "required": [ + "name" + ] + }, + "ManifestMeta": { + "title": "ManifestMeta", + "type": "object", + "properties": { + "schema_version": { + "title": "Schema Version", + "pattern": "[1-9][0-9]*(\\.[0-9]+){0,2}", + "type": "string" }, - "required": ["schema_version", "api"] - } + "api": { + "$ref": "#/definitions/ManifestMetaApi" + } + }, + "required": [ + "schema_version", + "api" + ] } } - \ No newline at end of file +} \ No newline at end of file diff --git a/azure/cleanup-named-proxy.yml b/azure/cleanup-named-proxy.yml index 460ee7a..c5b8dce 100644 --- a/azure/cleanup-named-proxy.yml +++ b/azure/cleanup-named-proxy.yml @@ -26,21 +26,20 @@ parameters: default: False - name: remove_ecr_build_role - displayName: Remove the ECR build role and pre-reqs for all deployments + displayName: Remove the ECR build role and pre-reqs for all deployments type: boolean default: False - + - name: force_remove_from_apps displayName: Force remove specifed product from subscribed apps type: boolean default: False - stages: - - ${{ if in(parameters.environment, 'internal-qa', 'ref', 'internal-qa-sandbox', 'internal-dev-sandbox', 'internal-dev') }}: + - ${{ if in(parameters.environment, 'internal-qa', 'ref', 'res', 'internal-qa-sandbox', 'internal-dev-sandbox', 'internal-dev') }}: - template: ./components/remove-target-proxy.yml parameters: - apigee_org: nonprod + apigee_org: nonprod service_name: ${{ parameters.service_name }} service_name_short: ${{ parameters.service_name_short }} has_ecs_backend: ${{ parameters.has_ecs_backend }} diff --git a/azure/common/apigee-deployment.yml b/azure/common/apigee-deployment.yml index f6ca45d..3c39b11 100644 --- a/azure/common/apigee-deployment.yml +++ b/azure/common/apigee-deployment.yml @@ -134,6 +134,7 @@ parameters: - internal-qa - internal-qa-sandbox - ref + - res - int - sandbox - prod diff --git a/azure/common/deploy-stage.yml b/azure/common/deploy-stage.yml index 3554bab..f4ba401 100644 --- a/azure/common/deploy-stage.yml +++ b/azure/common/deploy-stage.yml @@ -12,6 +12,7 @@ parameters: - internal-qa - internal-qa-sandbox - ref + - res - dev - int - sandbox diff --git a/azure/common/deploy-stages.yml b/azure/common/deploy-stages.yml index 1073dc6..a595a82 100644 --- a/azure/common/deploy-stages.yml +++ b/azure/common/deploy-stages.yml @@ -19,33 +19,32 @@ parameters: - name: agent_pool type: string - stages: - ${{ each apigee_deployment in parameters.apigee_deployments }}: - - template: ./${{ parameters.deploy_template }} - parameters: - ${{ insert }}: ${{ apigee_deployment }} - ${{ each param in parameters }}: - ${{ if notIn(param.key, 'deploy_template', 'apigee_deployments', 'deploy_review_sandbox', 'prod_requires_approval', 'prod_producer_approval') }}: - ${{ param.key }}: ${{ param.value }} + - template: ./${{ parameters.deploy_template }} + parameters: + ${{ insert }}: ${{ apigee_deployment }} + ${{ each param in parameters }}: + ${{ if notIn(param.key, 'deploy_template', 'apigee_deployments', 'deploy_review_sandbox', 'prod_requires_approval', 'prod_producer_approval') }}: + ${{ param.key }}: ${{ param.value }} - # Compute the apigee organization & org level part of the AWS secret/config path - ${{ if in(apigee_deployment.environment, 'internal-dev', 'internal-dev-sandbox', 'internal-qa', 'internal-qa-sandbox', 'ref', 'manual-approval') }}: - apigee_organization: nonprod - ${{ if in(apigee_deployment.environment, 'dev', 'int', 'sandbox', 'prod') }}: - apigee_organization: prod + # Compute the apigee organization & org level part of the AWS secret/config path + ${{ if in(apigee_deployment.environment, 'internal-dev', 'internal-dev-sandbox', 'internal-qa', 'internal-qa-sandbox', 'ref', 'res', 'manual-approval') }}: + apigee_organization: nonprod + ${{ if in(apigee_deployment.environment, 'dev', 'int', 'sandbox', 'prod') }}: + apigee_organization: prod - # Compute AWS environment level prefix for secrets/config - ${{ if notIn(apigee_deployment.environment, 'prod') }}: - aws_account: ptl - ${{ if in(apigee_deployment.environment, 'prod') }}: - aws_account: prod + # Compute AWS environment level prefix for secrets/config + ${{ if notIn(apigee_deployment.environment, 'prod') }}: + aws_account: ptl + ${{ if in(apigee_deployment.environment, 'prod') }}: + aws_account: prod - # deploy_review_sandbox not for release pipeline, for now - ${{ if eq(parameters.deploy_template, 'pr.yml')}}: - deploy_review_sandbox: ${{ parameters.deploy_review_sandbox }} - pr_label: pr-${{ replace(replace(replace(variables['Build.SourceBranch'], '/merge', ''), 'refs/pull/', ''), '/', '_') }} + # deploy_review_sandbox not for release pipeline, for now + ${{ if eq(parameters.deploy_template, 'pr.yml')}}: + deploy_review_sandbox: ${{ parameters.deploy_review_sandbox }} + pr_label: pr-${{ replace(replace(replace(variables['Build.SourceBranch'], '/merge', ''), 'refs/pull/', ''), '/', '_') }} - # if Release pipeline use friendly api name for api portal - ${{ if eq(parameters.deploy_template, 'release.yml') }}: - friendly_api_name: ${{ apigee_deployment.product_display_name }} + # if Release pipeline use friendly api name for api portal + ${{ if eq(parameters.deploy_template, 'release.yml') }}: + friendly_api_name: ${{ apigee_deployment.product_display_name }} diff --git a/azure/common/release.yml b/azure/common/release.yml index abde4a4..0248b43 100644 --- a/azure/common/release.yml +++ b/azure/common/release.yml @@ -6,6 +6,7 @@ parameters: - internal-qa - internal-qa-sandbox - ref + - res - dev - int - sandbox @@ -67,23 +68,23 @@ parameters: stages: - ${{ if eq(parameters.environment, 'manual-approval') }}: - - template: ./deploy-manual-approval.yml - parameters: - stage_name: ${{ parameters.stage_name }} - depends_on: ${{ parameters.depends_on }} - ${{ if and(eq(true, parameters.manual_approval_prod), eq(true, parameters.producer_approval)) }}: - manual_approval_env: ${{ parameters.service_name }} - ${{ if and(eq(true, parameters.manual_approval_prod), eq(false, parameters.producer_approval)) }}: - manual_approval_env: manual-approval-prod - ${{ if eq(false, parameters.manual_approval_prod) }}: - manual_approval_env: ${{ parameters.manual_approval_env }} + - template: ./deploy-manual-approval.yml + parameters: + stage_name: ${{ parameters.stage_name }} + depends_on: ${{ parameters.depends_on }} + ${{ if and(eq(true, parameters.manual_approval_prod), eq(true, parameters.producer_approval)) }}: + manual_approval_env: ${{ parameters.service_name }} + ${{ if and(eq(true, parameters.manual_approval_prod), eq(false, parameters.producer_approval)) }}: + manual_approval_env: manual-approval-prod + ${{ if eq(false, parameters.manual_approval_prod) }}: + manual_approval_env: ${{ parameters.manual_approval_env }} - ${{ if not(eq(parameters.environment, 'manual-approval')) }}: - - template: ./deploy-stage.yml - parameters: - ${{ if eq('', parameters.fully_qualified_service_name) }}: - fully_qualified_service_name: ${{ parameters.service_name }}-${{ parameters.environment }} - ${{ if ne('', parameters.fully_qualified_service_name) }}: - fully_qualified_service_name: ${{ parameters.fully_qualified_service_name }} - ${{ each param in parameters }}: - ${{ if notIn(param.key, 'fully_qualified_service_name', 'manual_approval_env', 'manual_approval_prod', 'producer_approval') }}: - ${{ param.key }}: ${{ param.value }} + - template: ./deploy-stage.yml + parameters: + ${{ if eq('', parameters.fully_qualified_service_name) }}: + fully_qualified_service_name: ${{ parameters.service_name }}-${{ parameters.environment }} + ${{ if ne('', parameters.fully_qualified_service_name) }}: + fully_qualified_service_name: ${{ parameters.fully_qualified_service_name }} + ${{ each param in parameters }}: + ${{ if notIn(param.key, 'fully_qualified_service_name', 'manual_approval_env', 'manual_approval_prod', 'producer_approval') }}: + ${{ param.key }}: ${{ param.value }} diff --git a/poetry.lock b/poetry.lock index 76ddfbd..45541ec 100644 --- a/poetry.lock +++ b/poetry.lock @@ -58,36 +58,28 @@ files = [ [[package]] name = "attrs" -version = "25.3.0" +version = "25.4.0" description = "Classes Without Boilerplate" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "attrs-25.3.0-py3-none-any.whl", hash = "sha256:427318ce031701fea540783410126f03899a97ffc6f61596ad581ac2e40e3bc3"}, - {file = "attrs-25.3.0.tar.gz", hash = "sha256:75d7cefc7fb576747b2c81b4442d4d4a1ce0900973527c011d1030fd3bf4af1b"}, + {file = "attrs-25.4.0-py3-none-any.whl", hash = "sha256:adcf7e2a1fb3b36ac48d97835bb6d8ade15b8dcce26aba8bf1d14847b57a3373"}, + {file = "attrs-25.4.0.tar.gz", hash = "sha256:16d5969b87f0859ef33a48b35d55ac1be6e42ae49d5e853b597db70c35c57e11"}, ] -[package.extras] -benchmark = ["cloudpickle", "hypothesis", "mypy (>=1.11.1)", "pympler", "pytest (>=4.3.0)", "pytest-codspeed", "pytest-mypy-plugins", "pytest-xdist[psutil]"] -cov = ["cloudpickle", "coverage[toml] (>=5.3)", "hypothesis", "mypy (>=1.11.1)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] -dev = ["cloudpickle", "hypothesis", "mypy (>=1.11.1)", "pre-commit-uv", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] -docs = ["cogapp", "furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier"] -tests = ["cloudpickle", "hypothesis", "mypy (>=1.11.1)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] -tests-mypy = ["mypy (>=1.11.1)", "pytest-mypy-plugins"] - [[package]] name = "awscli" -version = "1.42.40" +version = "1.42.56" description = "Universal Command Line Environment for AWS." optional = false python-versions = ">=3.9" files = [ - {file = "awscli-1.42.40-py3-none-any.whl", hash = "sha256:c27ca5c937cc6386ecc2e25cda6fc0fb545a15b13db1bdcbef5d003de6f92f99"}, - {file = "awscli-1.42.40.tar.gz", hash = "sha256:37ed937ecd989531d1cfa193a605a7145bb75dbaea6cd11211dae95ef56ed646"}, + {file = "awscli-1.42.56-py3-none-any.whl", hash = "sha256:1cabeeb160cf5a5fa071f6096a5c6e50814e24aa7327a4d984881198cd0413d1"}, + {file = "awscli-1.42.56.tar.gz", hash = "sha256:c042e332b07b10149e31fd46838b1c25eca94a057078f65a8e8fd2c191b00a42"}, ] [package.dependencies] -botocore = "1.40.40" +botocore = "1.40.56" colorama = ">=0.2.5,<0.4.7" docutils = ">=0.18.1,<=0.19" PyYAML = ">=3.10,<6.1" @@ -142,17 +134,17 @@ uvloop = ["uvloop (>=0.15.2)"] [[package]] name = "boto3" -version = "1.40.40" +version = "1.40.56" description = "The AWS SDK for Python" optional = false python-versions = ">=3.9" files = [ - {file = "boto3-1.40.40-py3-none-any.whl", hash = "sha256:385904de68623e1c341bdc095d94a30006843032c912adeb1e0752a343632ec6"}, - {file = "boto3-1.40.40.tar.gz", hash = "sha256:f384d3a0410d0f1a4d4ae7aa69c41d0549c6ca5a76667dc25fc97d50ad6db740"}, + {file = "boto3-1.40.56-py3-none-any.whl", hash = "sha256:8985a840d57671aa3c6124b0c178e79be97e3447de4b5819156071793f82ee5c"}, + {file = "boto3-1.40.56.tar.gz", hash = "sha256:c1afdb04dd27418fc58400434ab8e05998bb452b69c428168d9ada344fe6b93e"}, ] [package.dependencies] -botocore = ">=1.40.40,<1.41.0" +botocore = ">=1.40.56,<1.41.0" jmespath = ">=0.7.1,<2.0.0" s3transfer = ">=0.14.0,<0.15.0" @@ -161,13 +153,13 @@ crt = ["botocore[crt] (>=1.21.0,<2.0a0)"] [[package]] name = "botocore" -version = "1.40.40" +version = "1.40.56" description = "Low-level, data-driven core of boto 3." optional = false python-versions = ">=3.9" files = [ - {file = "botocore-1.40.40-py3-none-any.whl", hash = "sha256:68506142b3cde93145ef3ee0268f2444f2b68ada225a151f714092bbd3d6516a"}, - {file = "botocore-1.40.40.tar.gz", hash = "sha256:78eb121a16a6481ed0f6e1aebe53a4f23aa121f34466846c13a5ca48fa980e31"}, + {file = "botocore-1.40.56-py3-none-any.whl", hash = "sha256:0962dfc9bfb0afa1855042a88a72cc722cc7f9c08f51d2c5c88181d525a59a27"}, + {file = "botocore-1.40.56.tar.gz", hash = "sha256:b29df3418a299609632cab240ee79275463b176ebeb3adc841ba367a3fa0c4db"}, ] [package.dependencies] @@ -183,13 +175,13 @@ crt = ["awscrt (==0.27.6)"] [[package]] name = "certifi" -version = "2025.8.3" +version = "2025.10.5" description = "Python package for providing Mozilla's CA Bundle." optional = false python-versions = ">=3.7" files = [ - {file = "certifi-2025.8.3-py3-none-any.whl", hash = "sha256:f6c12493cfb1b06ba2ff328595af9350c65d6644968e5d3a2ffd78699af217a5"}, - {file = "certifi-2025.8.3.tar.gz", hash = "sha256:e564105f78ded564e3ae7c923924435e1daa7463faeab5bb932bc53ffae63407"}, + {file = "certifi-2025.10.5-py3-none-any.whl", hash = "sha256:0f212c2744a9bb6de0c56639a6f68afe01ecd92d91f14ae897c4fe7bbeeef0de"}, + {file = "certifi-2025.10.5.tar.gz", hash = "sha256:47c09d31ccf2acf0be3f701ea53595ee7e0b8fa08801c6624be771df09ae7b43"}, ] [[package]] @@ -290,90 +282,124 @@ pycparser = {version = "*", markers = "implementation_name != \"PyPy\""} [[package]] name = "charset-normalizer" -version = "3.4.3" +version = "3.4.4" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." optional = false python-versions = ">=3.7" files = [ - {file = "charset_normalizer-3.4.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:fb7f67a1bfa6e40b438170ebdc8158b78dc465a5a67b6dde178a46987b244a72"}, - {file = "charset_normalizer-3.4.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:cc9370a2da1ac13f0153780040f465839e6cccb4a1e44810124b4e22483c93fe"}, - {file = "charset_normalizer-3.4.3-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:07a0eae9e2787b586e129fdcbe1af6997f8d0e5abaa0bc98c0e20e124d67e601"}, - {file = "charset_normalizer-3.4.3-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:74d77e25adda8581ffc1c720f1c81ca082921329452eba58b16233ab1842141c"}, - {file = "charset_normalizer-3.4.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d0e909868420b7049dafd3a31d45125b31143eec59235311fc4c57ea26a4acd2"}, - {file = "charset_normalizer-3.4.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:c6f162aabe9a91a309510d74eeb6507fab5fff92337a15acbe77753d88d9dcf0"}, - {file = "charset_normalizer-3.4.3-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:4ca4c094de7771a98d7fbd67d9e5dbf1eb73efa4f744a730437d8a3a5cf994f0"}, - {file = "charset_normalizer-3.4.3-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:02425242e96bcf29a49711b0ca9f37e451da7c70562bc10e8ed992a5a7a25cc0"}, - {file = "charset_normalizer-3.4.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:78deba4d8f9590fe4dae384aeff04082510a709957e968753ff3c48399f6f92a"}, - {file = "charset_normalizer-3.4.3-cp310-cp310-win32.whl", hash = "sha256:d79c198e27580c8e958906f803e63cddb77653731be08851c7df0b1a14a8fc0f"}, - {file = "charset_normalizer-3.4.3-cp310-cp310-win_amd64.whl", hash = "sha256:c6e490913a46fa054e03699c70019ab869e990270597018cef1d8562132c2669"}, - {file = "charset_normalizer-3.4.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:b256ee2e749283ef3ddcff51a675ff43798d92d746d1a6e4631bf8c707d22d0b"}, - {file = "charset_normalizer-3.4.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:13faeacfe61784e2559e690fc53fa4c5ae97c6fcedb8eb6fb8d0a15b475d2c64"}, - {file = "charset_normalizer-3.4.3-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:00237675befef519d9af72169d8604a067d92755e84fe76492fef5441db05b91"}, - {file = "charset_normalizer-3.4.3-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:585f3b2a80fbd26b048a0be90c5aae8f06605d3c92615911c3a2b03a8a3b796f"}, - {file = "charset_normalizer-3.4.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0e78314bdc32fa80696f72fa16dc61168fda4d6a0c014e0380f9d02f0e5d8a07"}, - {file = "charset_normalizer-3.4.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:96b2b3d1a83ad55310de8c7b4a2d04d9277d5591f40761274856635acc5fcb30"}, - {file = "charset_normalizer-3.4.3-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:939578d9d8fd4299220161fdd76e86c6a251987476f5243e8864a7844476ba14"}, - {file = "charset_normalizer-3.4.3-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:fd10de089bcdcd1be95a2f73dbe6254798ec1bda9f450d5828c96f93e2536b9c"}, - {file = "charset_normalizer-3.4.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:1e8ac75d72fa3775e0b7cb7e4629cec13b7514d928d15ef8ea06bca03ef01cae"}, - {file = "charset_normalizer-3.4.3-cp311-cp311-win32.whl", hash = "sha256:6cf8fd4c04756b6b60146d98cd8a77d0cdae0e1ca20329da2ac85eed779b6849"}, - {file = "charset_normalizer-3.4.3-cp311-cp311-win_amd64.whl", hash = "sha256:31a9a6f775f9bcd865d88ee350f0ffb0e25936a7f930ca98995c05abf1faf21c"}, - {file = "charset_normalizer-3.4.3-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:e28e334d3ff134e88989d90ba04b47d84382a828c061d0d1027b1b12a62b39b1"}, - {file = "charset_normalizer-3.4.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0cacf8f7297b0c4fcb74227692ca46b4a5852f8f4f24b3c766dd94a1075c4884"}, - {file = "charset_normalizer-3.4.3-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c6fd51128a41297f5409deab284fecbe5305ebd7e5a1f959bee1c054622b7018"}, - {file = "charset_normalizer-3.4.3-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:3cfb2aad70f2c6debfbcb717f23b7eb55febc0bb23dcffc0f076009da10c6392"}, - {file = "charset_normalizer-3.4.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1606f4a55c0fd363d754049cdf400175ee96c992b1f8018b993941f221221c5f"}, - {file = "charset_normalizer-3.4.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:027b776c26d38b7f15b26a5da1044f376455fb3766df8fc38563b4efbc515154"}, - {file = "charset_normalizer-3.4.3-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:42e5088973e56e31e4fa58eb6bd709e42fc03799c11c42929592889a2e54c491"}, - {file = "charset_normalizer-3.4.3-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:cc34f233c9e71701040d772aa7490318673aa7164a0efe3172b2981218c26d93"}, - {file = "charset_normalizer-3.4.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:320e8e66157cc4e247d9ddca8e21f427efc7a04bbd0ac8a9faf56583fa543f9f"}, - {file = "charset_normalizer-3.4.3-cp312-cp312-win32.whl", hash = "sha256:fb6fecfd65564f208cbf0fba07f107fb661bcd1a7c389edbced3f7a493f70e37"}, - {file = "charset_normalizer-3.4.3-cp312-cp312-win_amd64.whl", hash = "sha256:86df271bf921c2ee3818f0522e9a5b8092ca2ad8b065ece5d7d9d0e9f4849bcc"}, - {file = "charset_normalizer-3.4.3-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:14c2a87c65b351109f6abfc424cab3927b3bdece6f706e4d12faaf3d52ee5efe"}, - {file = "charset_normalizer-3.4.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:41d1fc408ff5fdfb910200ec0e74abc40387bccb3252f3f27c0676731df2b2c8"}, - {file = "charset_normalizer-3.4.3-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:1bb60174149316da1c35fa5233681f7c0f9f514509b8e399ab70fea5f17e45c9"}, - {file = "charset_normalizer-3.4.3-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:30d006f98569de3459c2fc1f2acde170b7b2bd265dc1943e87e1a4efe1b67c31"}, - {file = "charset_normalizer-3.4.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:416175faf02e4b0810f1f38bcb54682878a4af94059a1cd63b8747244420801f"}, - {file = "charset_normalizer-3.4.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:6aab0f181c486f973bc7262a97f5aca3ee7e1437011ef0c2ec04b5a11d16c927"}, - {file = "charset_normalizer-3.4.3-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:fdabf8315679312cfa71302f9bd509ded4f2f263fb5b765cf1433b39106c3cc9"}, - {file = "charset_normalizer-3.4.3-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:bd28b817ea8c70215401f657edef3a8aa83c29d447fb0b622c35403780ba11d5"}, - {file = "charset_normalizer-3.4.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:18343b2d246dc6761a249ba1fb13f9ee9a2bcd95decc767319506056ea4ad4dc"}, - {file = "charset_normalizer-3.4.3-cp313-cp313-win32.whl", hash = "sha256:6fb70de56f1859a3f71261cbe41005f56a7842cc348d3aeb26237560bfa5e0ce"}, - {file = "charset_normalizer-3.4.3-cp313-cp313-win_amd64.whl", hash = "sha256:cf1ebb7d78e1ad8ec2a8c4732c7be2e736f6e5123a4146c5b89c9d1f585f8cef"}, - {file = "charset_normalizer-3.4.3-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:3cd35b7e8aedeb9e34c41385fda4f73ba609e561faedfae0a9e75e44ac558a15"}, - {file = "charset_normalizer-3.4.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b89bc04de1d83006373429975f8ef9e7932534b8cc9ca582e4db7d20d91816db"}, - {file = "charset_normalizer-3.4.3-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:2001a39612b241dae17b4687898843f254f8748b796a2e16f1051a17078d991d"}, - {file = "charset_normalizer-3.4.3-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:8dcfc373f888e4fb39a7bc57e93e3b845e7f462dacc008d9749568b1c4ece096"}, - {file = "charset_normalizer-3.4.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:18b97b8404387b96cdbd30ad660f6407799126d26a39ca65729162fd810a99aa"}, - {file = "charset_normalizer-3.4.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:ccf600859c183d70eb47e05a44cd80a4ce77394d1ac0f79dbd2dd90a69a3a049"}, - {file = "charset_normalizer-3.4.3-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:53cd68b185d98dde4ad8990e56a58dea83a4162161b1ea9272e5c9182ce415e0"}, - {file = "charset_normalizer-3.4.3-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:30a96e1e1f865f78b030d65241c1ee850cdf422d869e9028e2fc1d5e4db73b92"}, - {file = "charset_normalizer-3.4.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:d716a916938e03231e86e43782ca7878fb602a125a91e7acb8b5112e2e96ac16"}, - {file = "charset_normalizer-3.4.3-cp314-cp314-win32.whl", hash = "sha256:c6dbd0ccdda3a2ba7c2ecd9d77b37f3b5831687d8dc1b6ca5f56a4880cc7b7ce"}, - {file = "charset_normalizer-3.4.3-cp314-cp314-win_amd64.whl", hash = "sha256:73dc19b562516fc9bcf6e5d6e596df0b4eb98d87e4f79f3ae71840e6ed21361c"}, - {file = "charset_normalizer-3.4.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:0f2be7e0cf7754b9a30eb01f4295cc3d4358a479843b31f328afd210e2c7598c"}, - {file = "charset_normalizer-3.4.3-cp38-cp38-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c60e092517a73c632ec38e290eba714e9627abe9d301c8c8a12ec32c314a2a4b"}, - {file = "charset_normalizer-3.4.3-cp38-cp38-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:252098c8c7a873e17dd696ed98bbe91dbacd571da4b87df3736768efa7a792e4"}, - {file = "charset_normalizer-3.4.3-cp38-cp38-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:3653fad4fe3ed447a596ae8638b437f827234f01a8cd801842e43f3d0a6b281b"}, - {file = "charset_normalizer-3.4.3-cp38-cp38-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8999f965f922ae054125286faf9f11bc6932184b93011d138925a1773830bbe9"}, - {file = "charset_normalizer-3.4.3-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:d95bfb53c211b57198bb91c46dd5a2d8018b3af446583aab40074bf7988401cb"}, - {file = "charset_normalizer-3.4.3-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:5b413b0b1bfd94dbf4023ad6945889f374cd24e3f62de58d6bb102c4d9ae534a"}, - {file = "charset_normalizer-3.4.3-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:b5e3b2d152e74e100a9e9573837aba24aab611d39428ded46f4e4022ea7d1942"}, - {file = "charset_normalizer-3.4.3-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:a2d08ac246bb48479170408d6c19f6385fa743e7157d716e144cad849b2dd94b"}, - {file = "charset_normalizer-3.4.3-cp38-cp38-win32.whl", hash = "sha256:ec557499516fc90fd374bf2e32349a2887a876fbf162c160e3c01b6849eaf557"}, - {file = "charset_normalizer-3.4.3-cp38-cp38-win_amd64.whl", hash = "sha256:5d8d01eac18c423815ed4f4a2ec3b439d654e55ee4ad610e153cf02faf67ea40"}, - {file = "charset_normalizer-3.4.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:70bfc5f2c318afece2f5838ea5e4c3febada0be750fcf4775641052bbba14d05"}, - {file = "charset_normalizer-3.4.3-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:23b6b24d74478dc833444cbd927c338349d6ae852ba53a0d02a2de1fce45b96e"}, - {file = "charset_normalizer-3.4.3-cp39-cp39-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:34a7f768e3f985abdb42841e20e17b330ad3aaf4bb7e7aeeb73db2e70f077b99"}, - {file = "charset_normalizer-3.4.3-cp39-cp39-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:fb731e5deb0c7ef82d698b0f4c5bb724633ee2a489401594c5c88b02e6cb15f7"}, - {file = "charset_normalizer-3.4.3-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:257f26fed7d7ff59921b78244f3cd93ed2af1800ff048c33f624c87475819dd7"}, - {file = "charset_normalizer-3.4.3-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:1ef99f0456d3d46a50945c98de1774da86f8e992ab5c77865ea8b8195341fc19"}, - {file = "charset_normalizer-3.4.3-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:2c322db9c8c89009a990ef07c3bcc9f011a3269bc06782f916cd3d9eed7c9312"}, - {file = "charset_normalizer-3.4.3-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:511729f456829ef86ac41ca78c63a5cb55240ed23b4b737faca0eb1abb1c41bc"}, - {file = "charset_normalizer-3.4.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:88ab34806dea0671532d3f82d82b85e8fc23d7b2dd12fa837978dad9bb392a34"}, - {file = "charset_normalizer-3.4.3-cp39-cp39-win32.whl", hash = "sha256:16a8770207946ac75703458e2c743631c79c59c5890c80011d536248f8eaa432"}, - {file = "charset_normalizer-3.4.3-cp39-cp39-win_amd64.whl", hash = "sha256:d22dbedd33326a4a5190dd4fe9e9e693ef12160c77382d9e87919bce54f3d4ca"}, - {file = "charset_normalizer-3.4.3-py3-none-any.whl", hash = "sha256:ce571ab16d890d23b5c278547ba694193a45011ff86a9162a71307ed9f86759a"}, - {file = "charset_normalizer-3.4.3.tar.gz", hash = "sha256:6fce4b8500244f6fcb71465d4a4930d132ba9ab8e71a7859e6a5d59851068d14"}, + {file = "charset_normalizer-3.4.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:e824f1492727fa856dd6eda4f7cee25f8518a12f3c4a56a74e8095695089cf6d"}, + {file = "charset_normalizer-3.4.4-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4bd5d4137d500351a30687c2d3971758aac9a19208fc110ccb9d7188fbe709e8"}, + {file = "charset_normalizer-3.4.4-cp310-cp310-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:027f6de494925c0ab2a55eab46ae5129951638a49a34d87f4c3eda90f696b4ad"}, + {file = "charset_normalizer-3.4.4-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f820802628d2694cb7e56db99213f930856014862f3fd943d290ea8438d07ca8"}, + {file = "charset_normalizer-3.4.4-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:798d75d81754988d2565bff1b97ba5a44411867c0cf32b77a7e8f8d84796b10d"}, + {file = "charset_normalizer-3.4.4-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9d1bb833febdff5c8927f922386db610b49db6e0d4f4ee29601d71e7c2694313"}, + {file = "charset_normalizer-3.4.4-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:9cd98cdc06614a2f768d2b7286d66805f94c48cde050acdbbb7db2600ab3197e"}, + {file = "charset_normalizer-3.4.4-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:077fbb858e903c73f6c9db43374fd213b0b6a778106bc7032446a8e8b5b38b93"}, + {file = "charset_normalizer-3.4.4-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:244bfb999c71b35de57821b8ea746b24e863398194a4014e4c76adc2bbdfeff0"}, + {file = "charset_normalizer-3.4.4-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:64b55f9dce520635f018f907ff1b0df1fdc31f2795a922fb49dd14fbcdf48c84"}, + {file = "charset_normalizer-3.4.4-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:faa3a41b2b66b6e50f84ae4a68c64fcd0c44355741c6374813a800cd6695db9e"}, + {file = "charset_normalizer-3.4.4-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:6515f3182dbe4ea06ced2d9e8666d97b46ef4c75e326b79bb624110f122551db"}, + {file = "charset_normalizer-3.4.4-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:cc00f04ed596e9dc0da42ed17ac5e596c6ccba999ba6bd92b0e0aef2f170f2d6"}, + {file = "charset_normalizer-3.4.4-cp310-cp310-win32.whl", hash = "sha256:f34be2938726fc13801220747472850852fe6b1ea75869a048d6f896838c896f"}, + {file = "charset_normalizer-3.4.4-cp310-cp310-win_amd64.whl", hash = "sha256:a61900df84c667873b292c3de315a786dd8dac506704dea57bc957bd31e22c7d"}, + {file = "charset_normalizer-3.4.4-cp310-cp310-win_arm64.whl", hash = "sha256:cead0978fc57397645f12578bfd2d5ea9138ea0fac82b2f63f7f7c6877986a69"}, + {file = "charset_normalizer-3.4.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:6e1fcf0720908f200cd21aa4e6750a48ff6ce4afe7ff5a79a90d5ed8a08296f8"}, + {file = "charset_normalizer-3.4.4-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5f819d5fe9234f9f82d75bdfa9aef3a3d72c4d24a6e57aeaebba32a704553aa0"}, + {file = "charset_normalizer-3.4.4-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:a59cb51917aa591b1c4e6a43c132f0cdc3c76dbad6155df4e28ee626cc77a0a3"}, + {file = "charset_normalizer-3.4.4-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:8ef3c867360f88ac904fd3f5e1f902f13307af9052646963ee08ff4f131adafc"}, + {file = "charset_normalizer-3.4.4-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:d9e45d7faa48ee908174d8fe84854479ef838fc6a705c9315372eacbc2f02897"}, + {file = "charset_normalizer-3.4.4-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:840c25fb618a231545cbab0564a799f101b63b9901f2569faecd6b222ac72381"}, + {file = "charset_normalizer-3.4.4-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:ca5862d5b3928c4940729dacc329aa9102900382fea192fc5e52eb69d6093815"}, + {file = "charset_normalizer-3.4.4-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d9c7f57c3d666a53421049053eaacdd14bbd0a528e2186fcb2e672effd053bb0"}, + {file = "charset_normalizer-3.4.4-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:277e970e750505ed74c832b4bf75dac7476262ee2a013f5574dd49075879e161"}, + {file = "charset_normalizer-3.4.4-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:31fd66405eaf47bb62e8cd575dc621c56c668f27d46a61d975a249930dd5e2a4"}, + {file = "charset_normalizer-3.4.4-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:0d3d8f15c07f86e9ff82319b3d9ef6f4bf907608f53fe9d92b28ea9ae3d1fd89"}, + {file = "charset_normalizer-3.4.4-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:9f7fcd74d410a36883701fafa2482a6af2ff5ba96b9a620e9e0721e28ead5569"}, + {file = "charset_normalizer-3.4.4-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ebf3e58c7ec8a8bed6d66a75d7fb37b55e5015b03ceae72a8e7c74495551e224"}, + {file = "charset_normalizer-3.4.4-cp311-cp311-win32.whl", hash = "sha256:eecbc200c7fd5ddb9a7f16c7decb07b566c29fa2161a16cf67b8d068bd21690a"}, + {file = "charset_normalizer-3.4.4-cp311-cp311-win_amd64.whl", hash = "sha256:5ae497466c7901d54b639cf42d5b8c1b6a4fead55215500d2f486d34db48d016"}, + {file = "charset_normalizer-3.4.4-cp311-cp311-win_arm64.whl", hash = "sha256:65e2befcd84bc6f37095f5961e68a6f077bf44946771354a28ad434c2cce0ae1"}, + {file = "charset_normalizer-3.4.4-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:0a98e6759f854bd25a58a73fa88833fba3b7c491169f86ce1180c948ab3fd394"}, + {file = "charset_normalizer-3.4.4-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b5b290ccc2a263e8d185130284f8501e3e36c5e02750fc6b6bdeb2e9e96f1e25"}, + {file = "charset_normalizer-3.4.4-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:74bb723680f9f7a6234dcf67aea57e708ec1fbdf5699fb91dfd6f511b0a320ef"}, + {file = "charset_normalizer-3.4.4-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f1e34719c6ed0b92f418c7c780480b26b5d9c50349e9a9af7d76bf757530350d"}, + {file = "charset_normalizer-3.4.4-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:2437418e20515acec67d86e12bf70056a33abdacb5cb1655042f6538d6b085a8"}, + {file = "charset_normalizer-3.4.4-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:11d694519d7f29d6cd09f6ac70028dba10f92f6cdd059096db198c283794ac86"}, + {file = "charset_normalizer-3.4.4-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:ac1c4a689edcc530fc9d9aa11f5774b9e2f33f9a0c6a57864e90908f5208d30a"}, + {file = "charset_normalizer-3.4.4-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:21d142cc6c0ec30d2efee5068ca36c128a30b0f2c53c1c07bd78cb6bc1d3be5f"}, + {file = "charset_normalizer-3.4.4-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:5dbe56a36425d26d6cfb40ce79c314a2e4dd6211d51d6d2191c00bed34f354cc"}, + {file = "charset_normalizer-3.4.4-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:5bfbb1b9acf3334612667b61bd3002196fe2a1eb4dd74d247e0f2a4d50ec9bbf"}, + {file = "charset_normalizer-3.4.4-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:d055ec1e26e441f6187acf818b73564e6e6282709e9bcb5b63f5b23068356a15"}, + {file = "charset_normalizer-3.4.4-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:af2d8c67d8e573d6de5bc30cdb27e9b95e49115cd9baad5ddbd1a6207aaa82a9"}, + {file = "charset_normalizer-3.4.4-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:780236ac706e66881f3b7f2f32dfe90507a09e67d1d454c762cf642e6e1586e0"}, + {file = "charset_normalizer-3.4.4-cp312-cp312-win32.whl", hash = "sha256:5833d2c39d8896e4e19b689ffc198f08ea58116bee26dea51e362ecc7cd3ed26"}, + {file = "charset_normalizer-3.4.4-cp312-cp312-win_amd64.whl", hash = "sha256:a79cfe37875f822425b89a82333404539ae63dbdddf97f84dcbc3d339aae9525"}, + {file = "charset_normalizer-3.4.4-cp312-cp312-win_arm64.whl", hash = "sha256:376bec83a63b8021bb5c8ea75e21c4ccb86e7e45ca4eb81146091b56599b80c3"}, + {file = "charset_normalizer-3.4.4-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:e1f185f86a6f3403aa2420e815904c67b2f9ebc443f045edd0de921108345794"}, + {file = "charset_normalizer-3.4.4-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6b39f987ae8ccdf0d2642338faf2abb1862340facc796048b604ef14919e55ed"}, + {file = "charset_normalizer-3.4.4-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:3162d5d8ce1bb98dd51af660f2121c55d0fa541b46dff7bb9b9f86ea1d87de72"}, + {file = "charset_normalizer-3.4.4-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:81d5eb2a312700f4ecaa977a8235b634ce853200e828fbadf3a9c50bab278328"}, + {file = "charset_normalizer-3.4.4-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5bd2293095d766545ec1a8f612559f6b40abc0eb18bb2f5d1171872d34036ede"}, + {file = "charset_normalizer-3.4.4-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a8a8b89589086a25749f471e6a900d3f662d1d3b6e2e59dcecf787b1cc3a1894"}, + {file = "charset_normalizer-3.4.4-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:bc7637e2f80d8530ee4a78e878bce464f70087ce73cf7c1caf142416923b98f1"}, + {file = "charset_normalizer-3.4.4-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f8bf04158c6b607d747e93949aa60618b61312fe647a6369f88ce2ff16043490"}, + {file = "charset_normalizer-3.4.4-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:554af85e960429cf30784dd47447d5125aaa3b99a6f0683589dbd27e2f45da44"}, + {file = "charset_normalizer-3.4.4-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:74018750915ee7ad843a774364e13a3db91682f26142baddf775342c3f5b1133"}, + {file = "charset_normalizer-3.4.4-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:c0463276121fdee9c49b98908b3a89c39be45d86d1dbaa22957e38f6321d4ce3"}, + {file = "charset_normalizer-3.4.4-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:362d61fd13843997c1c446760ef36f240cf81d3ebf74ac62652aebaf7838561e"}, + {file = "charset_normalizer-3.4.4-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:9a26f18905b8dd5d685d6d07b0cdf98a79f3c7a918906af7cc143ea2e164c8bc"}, + {file = "charset_normalizer-3.4.4-cp313-cp313-win32.whl", hash = "sha256:9b35f4c90079ff2e2edc5b26c0c77925e5d2d255c42c74fdb70fb49b172726ac"}, + {file = "charset_normalizer-3.4.4-cp313-cp313-win_amd64.whl", hash = "sha256:b435cba5f4f750aa6c0a0d92c541fb79f69a387c91e61f1795227e4ed9cece14"}, + {file = "charset_normalizer-3.4.4-cp313-cp313-win_arm64.whl", hash = "sha256:542d2cee80be6f80247095cc36c418f7bddd14f4a6de45af91dfad36d817bba2"}, + {file = "charset_normalizer-3.4.4-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:da3326d9e65ef63a817ecbcc0df6e94463713b754fe293eaa03da99befb9a5bd"}, + {file = "charset_normalizer-3.4.4-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8af65f14dc14a79b924524b1e7fffe304517b2bff5a58bf64f30b98bbc5079eb"}, + {file = "charset_normalizer-3.4.4-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:74664978bb272435107de04e36db5a9735e78232b85b77d45cfb38f758efd33e"}, + {file = "charset_normalizer-3.4.4-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:752944c7ffbfdd10c074dc58ec2d5a8a4cd9493b314d367c14d24c17684ddd14"}, + {file = "charset_normalizer-3.4.4-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:d1f13550535ad8cff21b8d757a3257963e951d96e20ec82ab44bc64aeb62a191"}, + {file = "charset_normalizer-3.4.4-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ecaae4149d99b1c9e7b88bb03e3221956f68fd6d50be2ef061b2381b61d20838"}, + {file = "charset_normalizer-3.4.4-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:cb6254dc36b47a990e59e1068afacdcd02958bdcce30bb50cc1700a8b9d624a6"}, + {file = "charset_normalizer-3.4.4-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:c8ae8a0f02f57a6e61203a31428fa1d677cbe50c93622b4149d5c0f319c1d19e"}, + {file = "charset_normalizer-3.4.4-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:47cc91b2f4dd2833fddaedd2893006b0106129d4b94fdb6af1f4ce5a9965577c"}, + {file = "charset_normalizer-3.4.4-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:82004af6c302b5d3ab2cfc4cc5f29db16123b1a8417f2e25f9066f91d4411090"}, + {file = "charset_normalizer-3.4.4-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:2b7d8f6c26245217bd2ad053761201e9f9680f8ce52f0fcd8d0755aeae5b2152"}, + {file = "charset_normalizer-3.4.4-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:799a7a5e4fb2d5898c60b640fd4981d6a25f1c11790935a44ce38c54e985f828"}, + {file = "charset_normalizer-3.4.4-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:99ae2cffebb06e6c22bdc25801d7b30f503cc87dbd283479e7b606f70aff57ec"}, + {file = "charset_normalizer-3.4.4-cp314-cp314-win32.whl", hash = "sha256:f9d332f8c2a2fcbffe1378594431458ddbef721c1769d78e2cbc06280d8155f9"}, + {file = "charset_normalizer-3.4.4-cp314-cp314-win_amd64.whl", hash = "sha256:8a6562c3700cce886c5be75ade4a5db4214fda19fede41d9792d100288d8f94c"}, + {file = "charset_normalizer-3.4.4-cp314-cp314-win_arm64.whl", hash = "sha256:de00632ca48df9daf77a2c65a484531649261ec9f25489917f09e455cb09ddb2"}, + {file = "charset_normalizer-3.4.4-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:ce8a0633f41a967713a59c4139d29110c07e826d131a316b50ce11b1d79b4f84"}, + {file = "charset_normalizer-3.4.4-cp38-cp38-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:eaabd426fe94daf8fd157c32e571c85cb12e66692f15516a83a03264b08d06c3"}, + {file = "charset_normalizer-3.4.4-cp38-cp38-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:c4ef880e27901b6cc782f1b95f82da9313c0eb95c3af699103088fa0ac3ce9ac"}, + {file = "charset_normalizer-3.4.4-cp38-cp38-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:2aaba3b0819274cc41757a1da876f810a3e4d7b6eb25699253a4effef9e8e4af"}, + {file = "charset_normalizer-3.4.4-cp38-cp38-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:778d2e08eda00f4256d7f672ca9fef386071c9202f5e4607920b86d7803387f2"}, + {file = "charset_normalizer-3.4.4-cp38-cp38-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f155a433c2ec037d4e8df17d18922c3a0d9b3232a396690f17175d2946f0218d"}, + {file = "charset_normalizer-3.4.4-cp38-cp38-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:a8bf8d0f749c5757af2142fe7903a9df1d2e8aa3841559b2bad34b08d0e2bcf3"}, + {file = "charset_normalizer-3.4.4-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:194f08cbb32dc406d6e1aea671a68be0823673db2832b38405deba2fb0d88f63"}, + {file = "charset_normalizer-3.4.4-cp38-cp38-musllinux_1_2_armv7l.whl", hash = "sha256:6aee717dcfead04c6eb1ce3bd29ac1e22663cdea57f943c87d1eab9a025438d7"}, + {file = "charset_normalizer-3.4.4-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:cd4b7ca9984e5e7985c12bc60a6f173f3c958eae74f3ef6624bb6b26e2abbae4"}, + {file = "charset_normalizer-3.4.4-cp38-cp38-musllinux_1_2_riscv64.whl", hash = "sha256:b7cf1017d601aa35e6bb650b6ad28652c9cd78ee6caff19f3c28d03e1c80acbf"}, + {file = "charset_normalizer-3.4.4-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:e912091979546adf63357d7e2ccff9b44f026c075aeaf25a52d0e95ad2281074"}, + {file = "charset_normalizer-3.4.4-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:5cb4d72eea50c8868f5288b7f7f33ed276118325c1dfd3957089f6b519e1382a"}, + {file = "charset_normalizer-3.4.4-cp38-cp38-win32.whl", hash = "sha256:837c2ce8c5a65a2035be9b3569c684358dfbf109fd3b6969630a87535495ceaa"}, + {file = "charset_normalizer-3.4.4-cp38-cp38-win_amd64.whl", hash = "sha256:44c2a8734b333e0578090c4cd6b16f275e07aa6614ca8715e6c038e865e70576"}, + {file = "charset_normalizer-3.4.4-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:a9768c477b9d7bd54bc0c86dbaebdec6f03306675526c9927c0e8a04e8f94af9"}, + {file = "charset_normalizer-3.4.4-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1bee1e43c28aa63cb16e5c14e582580546b08e535299b8b6158a7c9c768a1f3d"}, + {file = "charset_normalizer-3.4.4-cp39-cp39-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:fd44c878ea55ba351104cb93cc85e74916eb8fa440ca7903e57575e97394f608"}, + {file = "charset_normalizer-3.4.4-cp39-cp39-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:0f04b14ffe5fdc8c4933862d8306109a2c51e0704acfa35d51598eb45a1e89fc"}, + {file = "charset_normalizer-3.4.4-cp39-cp39-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:cd09d08005f958f370f539f186d10aec3377d55b9eeb0d796025d4886119d76e"}, + {file = "charset_normalizer-3.4.4-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4fe7859a4e3e8457458e2ff592f15ccb02f3da787fcd31e0183879c3ad4692a1"}, + {file = "charset_normalizer-3.4.4-cp39-cp39-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:fa09f53c465e532f4d3db095e0c55b615f010ad81803d383195b6b5ca6cbf5f3"}, + {file = "charset_normalizer-3.4.4-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:7fa17817dc5625de8a027cb8b26d9fefa3ea28c8253929b8d6649e705d2835b6"}, + {file = "charset_normalizer-3.4.4-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:5947809c8a2417be3267efc979c47d76a079758166f7d43ef5ae8e9f92751f88"}, + {file = "charset_normalizer-3.4.4-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:4902828217069c3c5c71094537a8e623f5d097858ac6ca8252f7b4d10b7560f1"}, + {file = "charset_normalizer-3.4.4-cp39-cp39-musllinux_1_2_riscv64.whl", hash = "sha256:7c308f7e26e4363d79df40ca5b2be1c6ba9f02bdbccfed5abddb7859a6ce72cf"}, + {file = "charset_normalizer-3.4.4-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:2c9d3c380143a1fedbff95a312aa798578371eb29da42106a29019368a475318"}, + {file = "charset_normalizer-3.4.4-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:cb01158d8b88ee68f15949894ccc6712278243d95f344770fa7593fa2d94410c"}, + {file = "charset_normalizer-3.4.4-cp39-cp39-win32.whl", hash = "sha256:2677acec1a2f8ef614c6888b5b4ae4060cc184174a938ed4e8ef690e15d3e505"}, + {file = "charset_normalizer-3.4.4-cp39-cp39-win_amd64.whl", hash = "sha256:f8e160feb2aed042cd657a72acc0b481212ed28b1b9a95c0cee1621b524e1966"}, + {file = "charset_normalizer-3.4.4-cp39-cp39-win_arm64.whl", hash = "sha256:b5d84d37db046c5ca74ee7bb47dd6cbc13f80665fdde3e8040bdd3fb015ecb50"}, + {file = "charset_normalizer-3.4.4-py3-none-any.whl", hash = "sha256:7a32c560861a02ff789ad905a2fe94e3f840803362c84fecf1851cb4cf3dc37f"}, + {file = "charset_normalizer-3.4.4.tar.gz", hash = "sha256:94537985111c35f28720e43603b8e7b43a6ecfb2ce1d3058bbe955b73404e21a"}, ] [[package]] @@ -691,13 +717,13 @@ test = ["coverage[toml]", "ddt (>=1.1.1,!=1.4.3)", "mock", "mypy", "pre-commit", [[package]] name = "idna" -version = "3.10" +version = "3.11" description = "Internationalized Domain Names in Applications (IDNA)" optional = false -python-versions = ">=3.6" +python-versions = ">=3.8" files = [ - {file = "idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3"}, - {file = "idna-3.10.tar.gz", hash = "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9"}, + {file = "idna-3.11-py3-none-any.whl", hash = "sha256:771a87f49d9defaf64091e6e6fe9c18d4833f140bd19464795bc32d966ca37ea"}, + {file = "idna-3.11.tar.gz", hash = "sha256:795dafcc9c04ed0c1fb032c2aa73654d8e8c5023a7df64a53f39190ada629902"}, ] [package.extras] @@ -1456,13 +1482,13 @@ use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] [[package]] name = "rich" -version = "14.1.0" +version = "14.2.0" description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" optional = false python-versions = ">=3.8.0" files = [ - {file = "rich-14.1.0-py3-none-any.whl", hash = "sha256:536f5f1785986d6dbdea3c75205c473f970777b4a0d6c6dd1b696aa05a3fa04f"}, - {file = "rich-14.1.0.tar.gz", hash = "sha256:e497a48b844b0320d45007cdebfeaeed8db2a4f4bcf49f15e455cfc4af11eaa8"}, + {file = "rich-14.2.0-py3-none-any.whl", hash = "sha256:76bc51fe2e57d2b1be1f96c524b890b816e334ab4c1e45888799bfaab0021edd"}, + {file = "rich-14.2.0.tar.gz", hash = "sha256:73ff50c7c0c1c77c8243079283f4edb376f0f6442433aecb8ce7e6d0b92d1fe4"}, ] [package.dependencies] @@ -1631,43 +1657,53 @@ files = [ [[package]] name = "tomli" -version = "2.2.1" +version = "2.3.0" description = "A lil' TOML parser" optional = false python-versions = ">=3.8" files = [ - {file = "tomli-2.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:678e4fa69e4575eb77d103de3df8a895e1591b48e740211bd1067378c69e8249"}, - {file = "tomli-2.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:023aa114dd824ade0100497eb2318602af309e5a55595f76b626d6d9f3b7b0a6"}, - {file = "tomli-2.2.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ece47d672db52ac607a3d9599a9d48dcb2f2f735c6c2d1f34130085bb12b112a"}, - {file = "tomli-2.2.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6972ca9c9cc9f0acaa56a8ca1ff51e7af152a9f87fb64623e31d5c83700080ee"}, - {file = "tomli-2.2.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c954d2250168d28797dd4e3ac5cf812a406cd5a92674ee4c8f123c889786aa8e"}, - {file = "tomli-2.2.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:8dd28b3e155b80f4d54beb40a441d366adcfe740969820caf156c019fb5c7ec4"}, - {file = "tomli-2.2.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:e59e304978767a54663af13c07b3d1af22ddee3bb2fb0618ca1593e4f593a106"}, - {file = "tomli-2.2.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:33580bccab0338d00994d7f16f4c4ec25b776af3ffaac1ed74e0b3fc95e885a8"}, - {file = "tomli-2.2.1-cp311-cp311-win32.whl", hash = "sha256:465af0e0875402f1d226519c9904f37254b3045fc5084697cefb9bdde1ff99ff"}, - {file = "tomli-2.2.1-cp311-cp311-win_amd64.whl", hash = "sha256:2d0f2fdd22b02c6d81637a3c95f8cd77f995846af7414c5c4b8d0545afa1bc4b"}, - {file = "tomli-2.2.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:4a8f6e44de52d5e6c657c9fe83b562f5f4256d8ebbfe4ff922c495620a7f6cea"}, - {file = "tomli-2.2.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8d57ca8095a641b8237d5b079147646153d22552f1c637fd3ba7f4b0b29167a8"}, - {file = "tomli-2.2.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4e340144ad7ae1533cb897d406382b4b6fede8890a03738ff1683af800d54192"}, - {file = "tomli-2.2.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:db2b95f9de79181805df90bedc5a5ab4c165e6ec3fe99f970d0e302f384ad222"}, - {file = "tomli-2.2.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:40741994320b232529c802f8bc86da4e1aa9f413db394617b9a256ae0f9a7f77"}, - {file = "tomli-2.2.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:400e720fe168c0f8521520190686ef8ef033fb19fc493da09779e592861b78c6"}, - {file = "tomli-2.2.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:02abe224de6ae62c19f090f68da4e27b10af2b93213d36cf44e6e1c5abd19fdd"}, - {file = "tomli-2.2.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:b82ebccc8c8a36f2094e969560a1b836758481f3dc360ce9a3277c65f374285e"}, - {file = "tomli-2.2.1-cp312-cp312-win32.whl", hash = "sha256:889f80ef92701b9dbb224e49ec87c645ce5df3fa2cc548664eb8a25e03127a98"}, - {file = "tomli-2.2.1-cp312-cp312-win_amd64.whl", hash = "sha256:7fc04e92e1d624a4a63c76474610238576942d6b8950a2d7f908a340494e67e4"}, - {file = "tomli-2.2.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f4039b9cbc3048b2416cc57ab3bda989a6fcf9b36cf8937f01a6e731b64f80d7"}, - {file = "tomli-2.2.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:286f0ca2ffeeb5b9bd4fcc8d6c330534323ec51b2f52da063b11c502da16f30c"}, - {file = "tomli-2.2.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a92ef1a44547e894e2a17d24e7557a5e85a9e1d0048b0b5e7541f76c5032cb13"}, - {file = "tomli-2.2.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9316dc65bed1684c9a98ee68759ceaed29d229e985297003e494aa825ebb0281"}, - {file = "tomli-2.2.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e85e99945e688e32d5a35c1ff38ed0b3f41f43fad8df0bdf79f72b2ba7bc5272"}, - {file = "tomli-2.2.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ac065718db92ca818f8d6141b5f66369833d4a80a9d74435a268c52bdfa73140"}, - {file = "tomli-2.2.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:d920f33822747519673ee656a4b6ac33e382eca9d331c87770faa3eef562aeb2"}, - {file = "tomli-2.2.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:a198f10c4d1b1375d7687bc25294306e551bf1abfa4eace6650070a5c1ae2744"}, - {file = "tomli-2.2.1-cp313-cp313-win32.whl", hash = "sha256:d3f5614314d758649ab2ab3a62d4f2004c825922f9e370b29416484086b264ec"}, - {file = "tomli-2.2.1-cp313-cp313-win_amd64.whl", hash = "sha256:a38aa0308e754b0e3c67e344754dff64999ff9b513e691d0e786265c93583c69"}, - {file = "tomli-2.2.1-py3-none-any.whl", hash = "sha256:cb55c73c5f4408779d0cf3eef9f762b9c9f147a77de7b258bef0a5628adc85cc"}, - {file = "tomli-2.2.1.tar.gz", hash = "sha256:cd45e1dc79c835ce60f7404ec8119f2eb06d38b1deba146f07ced3bbc44505ff"}, + {file = "tomli-2.3.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:88bd15eb972f3664f5ed4b57c1634a97153b4bac4479dcb6a495f41921eb7f45"}, + {file = "tomli-2.3.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:883b1c0d6398a6a9d29b508c331fa56adbcdff647f6ace4dfca0f50e90dfd0ba"}, + {file = "tomli-2.3.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d1381caf13ab9f300e30dd8feadb3de072aeb86f1d34a8569453ff32a7dea4bf"}, + {file = "tomli-2.3.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a0e285d2649b78c0d9027570d4da3425bdb49830a6156121360b3f8511ea3441"}, + {file = "tomli-2.3.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:0a154a9ae14bfcf5d8917a59b51ffd5a3ac1fd149b71b47a3a104ca4edcfa845"}, + {file = "tomli-2.3.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:74bf8464ff93e413514fefd2be591c3b0b23231a77f901db1eb30d6f712fc42c"}, + {file = "tomli-2.3.0-cp311-cp311-win32.whl", hash = "sha256:00b5f5d95bbfc7d12f91ad8c593a1659b6387b43f054104cda404be6bda62456"}, + {file = "tomli-2.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:4dc4ce8483a5d429ab602f111a93a6ab1ed425eae3122032db7e9acf449451be"}, + {file = "tomli-2.3.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:d7d86942e56ded512a594786a5ba0a5e521d02529b3826e7761a05138341a2ac"}, + {file = "tomli-2.3.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:73ee0b47d4dad1c5e996e3cd33b8a76a50167ae5f96a2607cbe8cc773506ab22"}, + {file = "tomli-2.3.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:792262b94d5d0a466afb5bc63c7daa9d75520110971ee269152083270998316f"}, + {file = "tomli-2.3.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4f195fe57ecceac95a66a75ac24d9d5fbc98ef0962e09b2eddec5d39375aae52"}, + {file = "tomli-2.3.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:e31d432427dcbf4d86958c184b9bfd1e96b5b71f8eb17e6d02531f434fd335b8"}, + {file = "tomli-2.3.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:7b0882799624980785240ab732537fcfc372601015c00f7fc367c55308c186f6"}, + {file = "tomli-2.3.0-cp312-cp312-win32.whl", hash = "sha256:ff72b71b5d10d22ecb084d345fc26f42b5143c5533db5e2eaba7d2d335358876"}, + {file = "tomli-2.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:1cb4ed918939151a03f33d4242ccd0aa5f11b3547d0cf30f7c74a408a5b99878"}, + {file = "tomli-2.3.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:5192f562738228945d7b13d4930baffda67b69425a7f0da96d360b0a3888136b"}, + {file = "tomli-2.3.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:be71c93a63d738597996be9528f4abe628d1adf5e6eb11607bc8fe1a510b5dae"}, + {file = "tomli-2.3.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c4665508bcbac83a31ff8ab08f424b665200c0e1e645d2bd9ab3d3e557b6185b"}, + {file = "tomli-2.3.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4021923f97266babc6ccab9f5068642a0095faa0a51a246a6a02fccbb3514eaf"}, + {file = "tomli-2.3.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a4ea38c40145a357d513bffad0ed869f13c1773716cf71ccaa83b0fa0cc4e42f"}, + {file = "tomli-2.3.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:ad805ea85eda330dbad64c7ea7a4556259665bdf9d2672f5dccc740eb9d3ca05"}, + {file = "tomli-2.3.0-cp313-cp313-win32.whl", hash = "sha256:97d5eec30149fd3294270e889b4234023f2c69747e555a27bd708828353ab606"}, + {file = "tomli-2.3.0-cp313-cp313-win_amd64.whl", hash = "sha256:0c95ca56fbe89e065c6ead5b593ee64b84a26fca063b5d71a1122bf26e533999"}, + {file = "tomli-2.3.0-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:cebc6fe843e0733ee827a282aca4999b596241195f43b4cc371d64fc6639da9e"}, + {file = "tomli-2.3.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:4c2ef0244c75aba9355561272009d934953817c49f47d768070c3c94355c2aa3"}, + {file = "tomli-2.3.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c22a8bf253bacc0cf11f35ad9808b6cb75ada2631c2d97c971122583b129afbc"}, + {file = "tomli-2.3.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0eea8cc5c5e9f89c9b90c4896a8deefc74f518db5927d0e0e8d4a80953d774d0"}, + {file = "tomli-2.3.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:b74a0e59ec5d15127acdabd75ea17726ac4c5178ae51b85bfe39c4f8a278e879"}, + {file = "tomli-2.3.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:b5870b50c9db823c595983571d1296a6ff3e1b88f734a4c8f6fc6188397de005"}, + {file = "tomli-2.3.0-cp314-cp314-win32.whl", hash = "sha256:feb0dacc61170ed7ab602d3d972a58f14ee3ee60494292d384649a3dc38ef463"}, + {file = "tomli-2.3.0-cp314-cp314-win_amd64.whl", hash = "sha256:b273fcbd7fc64dc3600c098e39136522650c49bca95df2d11cf3b626422392c8"}, + {file = "tomli-2.3.0-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:940d56ee0410fa17ee1f12b817b37a4d4e4dc4d27340863cc67236c74f582e77"}, + {file = "tomli-2.3.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:f85209946d1fe94416debbb88d00eb92ce9cd5266775424ff81bc959e001acaf"}, + {file = "tomli-2.3.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a56212bdcce682e56b0aaf79e869ba5d15a6163f88d5451cbde388d48b13f530"}, + {file = "tomli-2.3.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c5f3ffd1e098dfc032d4d3af5c0ac64f6d286d98bc148698356847b80fa4de1b"}, + {file = "tomli-2.3.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:5e01decd096b1530d97d5d85cb4dff4af2d8347bd35686654a004f8dea20fc67"}, + {file = "tomli-2.3.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:8a35dd0e643bb2610f156cca8db95d213a90015c11fee76c946aa62b7ae7e02f"}, + {file = "tomli-2.3.0-cp314-cp314t-win32.whl", hash = "sha256:a1f7f282fe248311650081faafa5f4732bdbfef5d45fe3f2e702fbc6f2d496e0"}, + {file = "tomli-2.3.0-cp314-cp314t-win_amd64.whl", hash = "sha256:70a251f8d4ba2d9ac2542eecf008b3c8a9fc5c3f9f02c56a9d7952612be2fdba"}, + {file = "tomli-2.3.0-py3-none-any.whl", hash = "sha256:e95b1af3c5b07d9e643909b5abbec77cd9f1217e6d0bca72b0234736b9fb1f1b"}, + {file = "tomli-2.3.0.tar.gz", hash = "sha256:64be704a875d2a59753d80ee8a533c3fe183e3f06807ff7dc2232938ccb01549"}, ] [[package]] @@ -1767,4 +1803,4 @@ files = [ [metadata] lock-version = "2.0" python-versions = "^3.9" -content-hash = "5b87c6386e5b26c00315050ed3ccb404251b3db997ecfe4e72720003d24c7449" +content-hash = "edcd935793dcb0cfa4748d2565341684cdbc52e775194fe5cba23b0f3bedb97e" diff --git a/pyproject.toml b/pyproject.toml index adaed52..8e06724 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -32,6 +32,7 @@ boto3 = "^1.26.20" ansible-lint = "^4.2.0" black = "^24.3.0" flake8 = "^3.8.3" +pytest = "^5.4.2" [build-system] requires = ["poetry>=0.12"]