clear-skies 2.0.7__tar.gz → 2.0.8__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of clear-skies might be problematic. Click here for more details.
- {clear_skies-2.0.7 → clear_skies-2.0.8}/CHANGELOG.md +11 -0
- clear_skies-2.0.8/LATEST_CHANGELOG.md +9 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/PKG-INFO +1 -1
- {clear_skies-2.0.7 → clear_skies-2.0.8}/pyproject.toml +7 -2
- {clear_skies-2.0.7 → clear_skies-2.0.8}/ruff.toml +3 -1
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/__init__.py +2 -2
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/authentication/authentication.py +1 -3
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/authentication/authorization.py +12 -5
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/authentication/authorization_pass_through.py +5 -3
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/authentication/jwks.py +25 -23
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/authentication/secret_bearer.py +15 -17
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/autodoc/schema/schema.py +1 -1
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/backends/api_backend.py +50 -56
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/backends/backend.py +14 -14
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/backends/cursor_backend.py +17 -23
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/backends/memory_backend.py +27 -30
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/backends/secrets_backend.py +13 -18
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/column.py +44 -56
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/columns/audit.py +14 -13
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/columns/belongs_to_id.py +10 -15
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/columns/belongs_to_model.py +6 -9
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/columns/belongs_to_self.py +13 -9
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/columns/boolean.py +13 -16
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/columns/category_tree.py +9 -11
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/columns/category_tree_children.py +2 -3
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/columns/category_tree_descendants.py +1 -1
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/columns/created.py +8 -11
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/columns/created_by_authorization_data.py +7 -9
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/columns/created_by_header.py +12 -8
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/columns/created_by_ip.py +6 -8
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/columns/created_by_routing_data.py +12 -7
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/columns/created_by_user_agent.py +6 -9
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/columns/date.py +12 -14
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/columns/datetime.py +19 -17
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/columns/email.py +3 -1
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/columns/float.py +10 -14
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/columns/has_many.py +8 -10
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/columns/has_many_self.py +13 -7
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/columns/has_one.py +2 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/columns/integer.py +9 -11
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/columns/json.py +10 -12
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/columns/many_to_many_ids.py +14 -16
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/columns/many_to_many_ids_with_data.py +16 -16
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/columns/many_to_many_models.py +5 -7
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/columns/many_to_many_pivots.py +3 -5
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/columns/phone.py +12 -9
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/columns/select.py +12 -9
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/columns/string.py +1 -1
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/columns/timestamp.py +15 -15
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/columns/updated.py +8 -10
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/columns/uuid.py +7 -10
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/configs/any.py +2 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/configs/any_dict.py +2 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/configs/any_dict_or_callable.py +2 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/configs/boolean.py +2 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/configs/boolean_or_callable.py +2 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/configs/callable_config.py +2 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/configs/config.py +2 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/configs/datetime.py +2 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/configs/datetime_or_callable.py +2 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/configs/float.py +2 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/configs/float_or_callable.py +2 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/configs/integer.py +2 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/configs/integer_or_callable.py +2 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/configs/list_any_dict.py +2 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/configs/list_any_dict_or_callable.py +2 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/configs/model_column.py +2 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/configs/model_columns.py +2 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/configs/model_destination_name.py +2 -1
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/configs/model_to_id_column.py +2 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/configs/readable_model_column.py +2 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/configs/readable_model_columns.py +2 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/configs/searchable_model_columns.py +2 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/configs/select.py +2 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/configs/select_list.py +2 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/configs/string.py +2 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/configs/string_dict.py +2 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/configs/string_list.py +2 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/configs/string_list_or_callable.py +2 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/configs/timedelta.py +2 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/configs/timezone.py +2 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/configs/url.py +2 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/configs/writeable_model_column.py +2 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/configs/writeable_model_columns.py +2 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/configurable.py +2 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/contexts/cli.py +9 -1
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/contexts/context.py +13 -14
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/contexts/wsgi.py +12 -10
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/contexts/wsgi_ref.py +12 -6
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/decorators.py +1 -1
- clear_skies-2.0.8/src/clearskies/decorators.pyi +10 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/di/di.py +7 -6
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/di/inject/by_class.py +2 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/di/inject/by_name.py +2 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/di/inject/di.py +2 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/di/inject/environment.py +1 -1
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/di/inject/now.py +2 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/di/inject/requests.py +2 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/di/inject/secrets.py +2 -2
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/di/inject/utcnow.py +2 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/di/inject/uuid.py +2 -2
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/end.py +45 -7
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/endpoint.py +43 -59
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/endpoint_group.py +15 -18
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/endpoints/advanced_search.py +19 -26
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/endpoints/callable.py +10 -16
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/endpoints/create.py +6 -10
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/endpoints/delete.py +5 -11
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/endpoints/get.py +11 -15
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/endpoints/health_check.py +9 -11
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/endpoints/list.py +29 -36
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/endpoints/restful_api.py +43 -53
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/endpoints/schema.py +14 -18
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/endpoints/simple_search.py +5 -12
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/endpoints/update.py +6 -11
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/environment.py +2 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/input_outputs/cli.py +2 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/input_outputs/headers.py +2 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/input_outputs/input_output.py +15 -15
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/input_outputs/programmatic.py +2 -2
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/input_outputs/wsgi.py +2 -2
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/model.py +120 -25
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/query/query.py +1 -4
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/secrets/__init__.py +2 -1
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/secrets/akeyless.py +12 -10
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/secrets/secrets.py +7 -2
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/security_header.py +4 -2
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/security_headers/cache_control.py +15 -14
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/security_headers/cors.py +10 -9
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/security_headers/csp.py +25 -24
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/security_headers/hsts.py +6 -5
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/typing.py +1 -1
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/validator.py +5 -6
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/validators/after_column.py +6 -7
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/validators/before_column.py +2 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/validators/in_the_future.py +5 -8
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/validators/in_the_future_at_least.py +2 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/validators/in_the_future_at_most.py +2 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/validators/in_the_past.py +5 -8
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/validators/in_the_past_at_least.py +2 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/validators/in_the_past_at_most.py +2 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/validators/maximum_length.py +4 -5
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/validators/maximum_value.py +4 -4
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/validators/minimum_length.py +4 -4
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/validators/minimum_value.py +4 -4
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/validators/required.py +2 -4
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/validators/timedelta.py +8 -9
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/validators/unique.py +2 -3
- {clear_skies-2.0.7 → clear_skies-2.0.8}/uv.lock +127 -102
- clear_skies-2.0.7/LATEST_CHANGELOG.md +0 -12
- {clear_skies-2.0.7 → clear_skies-2.0.8}/.editorconfig +0 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/.github/workflows/create-version.yaml +0 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/.github/workflows/docs.yaml +0 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/.github/workflows/run-tests.yml +0 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/.github/workflows/tests-matrix.yaml +0 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/.github/workflows/tests.yaml +0 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/.gitignore +0 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/.pre-commit-config.yaml +0 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/.python-version +0 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/.vscode/extensions.json +0 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/.vscode/settings.json +0 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/LICENSE +0 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/README.md +0 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/build.sh +0 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/cliff.toml +0 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/action.py +0 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/authentication/__init__.py +0 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/authentication/public.py +0 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/autodoc/__init__.py +0 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/autodoc/formats/__init__.py +0 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/autodoc/formats/oai3_json/__init__.py +0 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/autodoc/formats/oai3_json/oai3_json.py +0 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/autodoc/formats/oai3_json/oai3_schema_resolver.py +0 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/autodoc/formats/oai3_json/parameter.py +0 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/autodoc/formats/oai3_json/request.py +0 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/autodoc/formats/oai3_json/response.py +0 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/autodoc/formats/oai3_json/schema/__init__.py +0 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/autodoc/formats/oai3_json/schema/array.py +0 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/autodoc/formats/oai3_json/schema/default.py +0 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/autodoc/formats/oai3_json/schema/enum.py +0 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/autodoc/formats/oai3_json/schema/object.py +0 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/autodoc/formats/oai3_json/test.json +0 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/autodoc/py.typed +0 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/autodoc/request/__init__.py +0 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/autodoc/request/header.py +0 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/autodoc/request/json_body.py +0 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/autodoc/request/parameter.py +0 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/autodoc/request/request.py +0 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/autodoc/request/url_parameter.py +0 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/autodoc/request/url_path.py +0 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/autodoc/response/__init__.py +0 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/autodoc/response/response.py +0 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/autodoc/schema/__init__.py +0 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/autodoc/schema/array.py +0 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/autodoc/schema/base64.py +0 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/autodoc/schema/boolean.py +0 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/autodoc/schema/date.py +0 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/autodoc/schema/datetime.py +0 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/autodoc/schema/double.py +0 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/autodoc/schema/enum.py +0 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/autodoc/schema/integer.py +0 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/autodoc/schema/long.py +0 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/autodoc/schema/number.py +0 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/autodoc/schema/object.py +0 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/autodoc/schema/password.py +0 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/autodoc/schema/string.py +0 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/backends/__init__.py +0 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/columns/__init__.py +0 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/columns/category_tree_ancestors.py +0 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/configs/README.md +0 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/configs/__init__.py +0 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/configs/actions.py +0 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/configs/authentication.py +0 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/configs/authorization.py +0 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/configs/columns.py +0 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/configs/conditions.py +0 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/configs/endpoint.py +0 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/configs/endpoint_list.py +0 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/configs/joins.py +0 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/configs/model_class.py +0 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/configs/schema.py +0 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/configs/security_headers.py +0 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/configs/string_or_callable.py +0 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/configs/validators.py +0 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/contexts/__init__.py +0 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/di/__init__.py +0 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/di/additional_config.py +0 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/di/additional_config_auto_import.py +0 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/di/inject/__init__.py +0 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/di/inject/input_output.py +0 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/di/injectable.py +0 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/di/injectable_properties.py +0 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/di/test_module/__init__.py +0 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/di/test_module/another_module/__init__.py +0 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/di/test_module/module_class.py +0 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/endpoints/__init__.py +0 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/exceptions/__init__.py +0 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/exceptions/authentication.py +0 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/exceptions/authorization.py +0 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/exceptions/client_error.py +0 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/exceptions/input_errors.py +0 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/exceptions/missing_dependency.py +0 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/exceptions/moved_permanently.py +0 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/exceptions/moved_temporarily.py +0 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/exceptions/not_found.py +0 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/functional/__init__.py +0 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/functional/routing.py +0 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/functional/string.py +0 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/functional/validations.py +0 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/input_outputs/__init__.py +0 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/input_outputs/exceptions/__init__.py +0 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/input_outputs/exceptions/cli_input_error.py +0 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/input_outputs/exceptions/cli_not_found.py +0 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/input_outputs/py.typed +0 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/py.typed +0 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/query/__init__.py +0 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/query/condition.py +0 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/query/join.py +0 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/query/sort.py +0 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/schema.py +0 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/secrets/additional_configs/__init__.py +0 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/secrets/additional_configs/mysql_connection_dynamic_producer.py +0 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/secrets/additional_configs/mysql_connection_dynamic_producer_via_ssh_cert_bastion.py +0 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/secrets/exceptions/__init__.py +0 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/secrets/exceptions/not_found.py +0 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/security_headers/__init__.py +0 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/security_headers/x_content_type_options.py +0 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/security_headers/x_frame_options.py +0 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/test_base.py +0 -0
- {clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/validators/__init__.py +0 -0
|
@@ -5,12 +5,22 @@ All notable changes to this project will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [2.0.8] - 2025-09-22
|
|
9
|
+
|
|
10
|
+
### Changed
|
|
11
|
+
- Move typing import to IF TYPE_CHECKING by @cmancone in [#19](https://github.com/clearskies-py/clearskies/pull/19)
|
|
12
|
+
- Move typing import to IF TYPE_CHECKING:
|
|
13
|
+
|
|
14
|
+
### Fixed
|
|
15
|
+
- Importing reorder
|
|
16
|
+
|
|
8
17
|
## [2.0.7] - 2025-09-16
|
|
9
18
|
|
|
10
19
|
### Added
|
|
11
20
|
- Add secrets: inherit
|
|
12
21
|
|
|
13
22
|
### Changed
|
|
23
|
+
- Bump version to v2.0.7 by @github-actions[bot]
|
|
14
24
|
- Pull latest changes from repo
|
|
15
25
|
|
|
16
26
|
### Fixed
|
|
@@ -768,6 +778,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
768
778
|
* @ made their first contribution
|
|
769
779
|
* @tnijboer made their first contribution
|
|
770
780
|
* @conormancone-cimpress made their first contribution
|
|
781
|
+
[2.0.8]: https://github.com/clearskies-py/clearskies/compare/v2.0.7..v2.0.8
|
|
771
782
|
[2.0.7]: https://github.com/clearskies-py/clearskies/compare/v2.0.6..v2.0.7
|
|
772
783
|
[2.0.6]: https://github.com/clearskies-py/clearskies/compare/v2.0.5..v2.0.6
|
|
773
784
|
[2.0.5]: https://github.com/clearskies-py/clearskies/compare/v2.0.4..v2.0.5
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "clear-skies"
|
|
3
3
|
description = "A framework for building backends in the cloud"
|
|
4
|
-
version = "2.0.
|
|
4
|
+
version = "2.0.8"
|
|
5
5
|
license = "MIT"
|
|
6
6
|
readme = "./README.md"
|
|
7
7
|
authors = [{name = "Conor Mancone", email = "cmancone@gmail.com"}]
|
|
@@ -61,7 +61,7 @@ exclude = [
|
|
|
61
61
|
[tool.black]
|
|
62
62
|
line-length = 120
|
|
63
63
|
skip-magic-trailing-comma = false
|
|
64
|
-
preview =
|
|
64
|
+
preview = false
|
|
65
65
|
|
|
66
66
|
[tool.mypy]
|
|
67
67
|
python_version = "3.11"
|
|
@@ -81,3 +81,8 @@ testpaths = [
|
|
|
81
81
|
pythonpath = [
|
|
82
82
|
"app"
|
|
83
83
|
]
|
|
84
|
+
|
|
85
|
+
# Add a specific rule for wrapt
|
|
86
|
+
[[tool.mypy.overrides]]
|
|
87
|
+
module = "wrapt"
|
|
88
|
+
ignore_missing_imports = true
|
|
@@ -7,7 +7,7 @@ show-fixes = true
|
|
|
7
7
|
quote-style = "double"
|
|
8
8
|
indent-style = "space"
|
|
9
9
|
docstring-code-format = true
|
|
10
|
-
preview =
|
|
10
|
+
preview = false
|
|
11
11
|
skip-magic-trailing-comma = false
|
|
12
12
|
docstring-code-line-length = 100
|
|
13
13
|
line-ending = "lf"
|
|
@@ -27,3 +27,5 @@ ignore = [
|
|
|
27
27
|
|
|
28
28
|
[lint.pydocstyle]
|
|
29
29
|
convention = "pep257"
|
|
30
|
+
[lint.per-file-ignores]
|
|
31
|
+
"**/__init__.py" = ["I001"]
|
|
@@ -12,7 +12,7 @@ from . import (
|
|
|
12
12
|
functional,
|
|
13
13
|
input_outputs,
|
|
14
14
|
query,
|
|
15
|
-
|
|
15
|
+
secrets,
|
|
16
16
|
security_headers,
|
|
17
17
|
typing,
|
|
18
18
|
validators,
|
|
@@ -53,7 +53,7 @@ __all__ = [
|
|
|
53
53
|
"typing",
|
|
54
54
|
"Validator",
|
|
55
55
|
"query",
|
|
56
|
-
|
|
56
|
+
"secrets",
|
|
57
57
|
"SecurityHeader",
|
|
58
58
|
"security_headers",
|
|
59
59
|
"validators",
|
|
@@ -1,9 +1,16 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from typing import TYPE_CHECKING
|
|
4
|
+
|
|
5
|
+
if TYPE_CHECKING:
|
|
6
|
+
from clearskies.input_outputs.input_output import InputOutput
|
|
7
|
+
from clearskies.model import Model
|
|
8
|
+
|
|
9
|
+
|
|
1
10
|
class Authorization:
|
|
2
|
-
"""
|
|
3
|
-
Authorization!
|
|
4
|
-
"""
|
|
11
|
+
"""Authorization."""
|
|
5
12
|
|
|
6
|
-
def gate(self, authorization_data, input_output):
|
|
13
|
+
def gate(self, authorization_data, input_output: InputOutput) -> bool:
|
|
7
14
|
"""
|
|
8
15
|
Return True/False to denote if the given user, as represented by the authorization data, should be allowed access.
|
|
9
16
|
|
|
@@ -11,6 +18,6 @@ class Authorization:
|
|
|
11
18
|
"""
|
|
12
19
|
return True
|
|
13
20
|
|
|
14
|
-
def filter_model(self, model, authorization_data, input_output):
|
|
21
|
+
def filter_model(self, model: Model, authorization_data, input_output: InputOutput) -> Model:
|
|
15
22
|
"""Return a models object with additional filters applied to account for authorization needs."""
|
|
16
23
|
return model
|
{clear_skies-2.0.7 → clear_skies-2.0.8}/src/clearskies/authentication/authorization_pass_through.py
RENAMED
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
import
|
|
1
|
+
from typing import Any
|
|
2
|
+
|
|
3
|
+
from clearskies import di
|
|
2
4
|
|
|
3
5
|
from .jwks import Jwks
|
|
4
6
|
|
|
@@ -14,7 +16,7 @@ class AuthorizationPassThrough(Jwks):
|
|
|
14
16
|
"""
|
|
15
17
|
The input output helper
|
|
16
18
|
"""
|
|
17
|
-
input_output =
|
|
19
|
+
input_output = di.inject.InputOutput()
|
|
18
20
|
|
|
19
|
-
def headers(self, retry_auth=False):
|
|
21
|
+
def headers(self, retry_auth: bool = False) -> dict[str, Any]:
|
|
20
22
|
return {"Authorization": self.input_output.request_headers.get("authorization", True)}
|
|
@@ -1,73 +1,75 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import datetime
|
|
1
4
|
import json
|
|
2
|
-
from typing import Any
|
|
5
|
+
from typing import TYPE_CHECKING, Any
|
|
3
6
|
|
|
4
|
-
import
|
|
5
|
-
import clearskies.decorators
|
|
6
|
-
import clearskies.di
|
|
7
|
+
from clearskies import configs, decorators, di
|
|
7
8
|
from clearskies.authentication.authentication import Authentication
|
|
8
9
|
from clearskies.exceptions import ClientError
|
|
9
10
|
from clearskies.security_headers.cors import Cors
|
|
10
11
|
|
|
12
|
+
if TYPE_CHECKING:
|
|
13
|
+
from clearskies.input_outputs.input_output import InputOutput
|
|
11
14
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
Validate a JWT against a JWKS (JSON Web Key Set)
|
|
15
|
-
"""
|
|
15
|
+
|
|
16
|
+
class Jwks(Authentication, di.InjectableProperties):
|
|
17
|
+
"""Validate a JWT against a JWKS (JSON Web Key Set)."""
|
|
16
18
|
|
|
17
19
|
"""
|
|
18
20
|
The URL of the JWKS
|
|
19
21
|
"""
|
|
20
|
-
jwks_url =
|
|
22
|
+
jwks_url = configs.String(required=True)
|
|
21
23
|
|
|
22
24
|
"""
|
|
23
25
|
The audience to accept JWTs for.
|
|
24
26
|
"""
|
|
25
|
-
audience =
|
|
27
|
+
audience = configs.StringList(default=[])
|
|
26
28
|
|
|
27
29
|
"""
|
|
28
30
|
The expected issuer of the JWTs.
|
|
29
31
|
"""
|
|
30
|
-
issuer =
|
|
32
|
+
issuer = configs.String(default="")
|
|
31
33
|
|
|
32
34
|
"""
|
|
33
35
|
The allowed algorithms
|
|
34
36
|
"""
|
|
35
|
-
algorithms =
|
|
37
|
+
algorithms = configs.StringList(default=["RS256"])
|
|
36
38
|
|
|
37
39
|
"""
|
|
38
40
|
The number of seconds for which the JWKS URL contents can be cached
|
|
39
41
|
"""
|
|
40
|
-
jwks_cache_time =
|
|
42
|
+
jwks_cache_time = configs.Integer(default=86400)
|
|
41
43
|
|
|
42
44
|
"""
|
|
43
45
|
The Authorization URL (used in the auto-generated documentation)
|
|
44
46
|
"""
|
|
45
|
-
authorization_url =
|
|
47
|
+
authorization_url = configs.String()
|
|
46
48
|
|
|
47
49
|
"""
|
|
48
50
|
The name of the security scheme in the auto-generated documentation.
|
|
49
51
|
"""
|
|
50
|
-
documentation_security_name =
|
|
52
|
+
documentation_security_name = configs.String(default="jwt")
|
|
51
53
|
|
|
52
54
|
"""
|
|
53
55
|
The environment helper.
|
|
54
56
|
"""
|
|
55
|
-
environment =
|
|
57
|
+
environment = di.inject.Environment()
|
|
56
58
|
|
|
57
59
|
"""
|
|
58
60
|
The requests object.
|
|
59
61
|
"""
|
|
60
|
-
requests =
|
|
62
|
+
requests = di.inject.Requests()
|
|
61
63
|
|
|
62
64
|
"""
|
|
63
65
|
The JoseJwt library
|
|
64
66
|
"""
|
|
65
|
-
jose_jwt =
|
|
67
|
+
jose_jwt = di.inject.ByName("jose_jwt")
|
|
66
68
|
|
|
67
69
|
"""
|
|
68
70
|
The current time
|
|
69
71
|
"""
|
|
70
|
-
now =
|
|
72
|
+
now = di.inject.Now()
|
|
71
73
|
|
|
72
74
|
"""
|
|
73
75
|
Local cache of the JWKS
|
|
@@ -77,9 +79,9 @@ class Jwks(Authentication, clearskies.di.InjectableProperties):
|
|
|
77
79
|
"""
|
|
78
80
|
The time when the JWKS was last fetched
|
|
79
81
|
"""
|
|
80
|
-
_jwks_fetched
|
|
82
|
+
_jwks_fetched: datetime.datetime
|
|
81
83
|
|
|
82
|
-
@
|
|
84
|
+
@decorators.parameters_to_properties
|
|
83
85
|
def __init__(
|
|
84
86
|
self,
|
|
85
87
|
jwks_url: str,
|
|
@@ -92,8 +94,8 @@ class Jwks(Authentication, clearskies.di.InjectableProperties):
|
|
|
92
94
|
):
|
|
93
95
|
self.finalize_and_validate_configuration()
|
|
94
96
|
|
|
95
|
-
def authenticate(self, input_output) -> bool:
|
|
96
|
-
auth_header = input_output.
|
|
97
|
+
def authenticate(self, input_output: InputOutput) -> bool:
|
|
98
|
+
auth_header = input_output.request_headers.get("authorization", None)
|
|
97
99
|
if not auth_header:
|
|
98
100
|
raise ClientError("Missing 'Authorization' header in request")
|
|
99
101
|
if auth_header[:7].lower() != "bearer ":
|
|
@@ -1,11 +1,9 @@
|
|
|
1
|
-
import
|
|
2
|
-
import clearskies.decorators
|
|
3
|
-
import clearskies.di
|
|
4
|
-
from clearskies import autodoc
|
|
5
|
-
from clearskies.authentication.authentication import Authentication
|
|
1
|
+
from clearskies import configs, decorators, di
|
|
6
2
|
|
|
3
|
+
from .authentication import Authentication
|
|
7
4
|
|
|
8
|
-
|
|
5
|
+
|
|
6
|
+
class SecretBearer(Authentication, di.InjectableProperties):
|
|
9
7
|
"""
|
|
10
8
|
Secret Bearer performs authentication by checking against a static API key stored in either environment variables or a secret manager.
|
|
11
9
|
|
|
@@ -191,8 +189,8 @@ class SecretBearer(Authentication, clearskies.di.InjectableProperties):
|
|
|
191
189
|
is_public = False
|
|
192
190
|
can_authorize = False
|
|
193
191
|
|
|
194
|
-
environment =
|
|
195
|
-
secrets =
|
|
192
|
+
environment = di.inject.Environment()
|
|
193
|
+
secrets = di.inject.Secrets()
|
|
196
194
|
|
|
197
195
|
"""
|
|
198
196
|
The path in our secret manager from which the secret should be fetched.
|
|
@@ -248,7 +246,7 @@ class SecretBearer(Authentication, clearskies.di.InjectableProperties):
|
|
|
248
246
|
```
|
|
249
247
|
|
|
250
248
|
"""
|
|
251
|
-
secret_key =
|
|
249
|
+
secret_key = configs.String(default="")
|
|
252
250
|
|
|
253
251
|
"""
|
|
254
252
|
The path in our secret manager where an alternate secret can also be fetched
|
|
@@ -322,12 +320,12 @@ class SecretBearer(Authentication, clearskies.di.InjectableProperties):
|
|
|
322
320
|
```
|
|
323
321
|
|
|
324
322
|
"""
|
|
325
|
-
alternate_secret_key =
|
|
323
|
+
alternate_secret_key = configs.String(default="")
|
|
326
324
|
|
|
327
325
|
"""
|
|
328
326
|
The name of the environment variable from which we should fetch our key.
|
|
329
327
|
"""
|
|
330
|
-
environment_key =
|
|
328
|
+
environment_key = configs.String(default="")
|
|
331
329
|
|
|
332
330
|
"""
|
|
333
331
|
The name of an alternate environment variable from which we should fetch our key.
|
|
@@ -392,7 +390,7 @@ class SecretBearer(Authentication, clearskies.di.InjectableProperties):
|
|
|
392
390
|
```
|
|
393
391
|
|
|
394
392
|
"""
|
|
395
|
-
alternate_environment_key =
|
|
393
|
+
alternate_environment_key = configs.String(default="")
|
|
396
394
|
|
|
397
395
|
"""
|
|
398
396
|
The expected prefix (if any) that should come before the secret key in the authorization header.
|
|
@@ -445,7 +443,7 @@ class SecretBearer(Authentication, clearskies.di.InjectableProperties):
|
|
|
445
443
|
}
|
|
446
444
|
```
|
|
447
445
|
"""
|
|
448
|
-
header_prefix =
|
|
446
|
+
header_prefix = configs.String(default="")
|
|
449
447
|
|
|
450
448
|
"""
|
|
451
449
|
The length of our header prefix
|
|
@@ -455,12 +453,12 @@ class SecretBearer(Authentication, clearskies.di.InjectableProperties):
|
|
|
455
453
|
"""
|
|
456
454
|
The name of our security scheme in the auto-generated documentation
|
|
457
455
|
"""
|
|
458
|
-
documentation_security_name =
|
|
456
|
+
documentation_security_name = configs.String(default="ApiKey")
|
|
459
457
|
|
|
460
|
-
_secret: str = None
|
|
461
|
-
_alternate_secret: str
|
|
458
|
+
_secret: str | None = None
|
|
459
|
+
_alternate_secret: str | None = None
|
|
462
460
|
|
|
463
|
-
@
|
|
461
|
+
@decorators.parameters_to_properties
|
|
464
462
|
def __init__(
|
|
465
463
|
self,
|
|
466
464
|
secret_key: str = "",
|