clear-skies 2.0.2__tar.gz → 2.0.3__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.2 → clear_skies-2.0.3}/PKG-INFO +1 -1
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/columns/belongs_to_id.py +3 -3
- clear_skies-2.0.3/src/clearskies/contexts/cli.py +117 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/contexts/context.py +1 -0
- clear_skies-2.0.3/src/clearskies/contexts/wsgi.py +76 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/contexts/wsgi_ref.py +29 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/endpoint.py +2 -2
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/input_outputs/cli.py +5 -4
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/model.py +116 -6
- clear_skies-2.0.2/src/clearskies/contexts/cli.py +0 -11
- clear_skies-2.0.2/src/clearskies/contexts/wsgi.py +0 -20
- {clear_skies-2.0.2 → clear_skies-2.0.3}/LICENSE +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/README.md +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/pyproject.toml +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/__init__.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/action.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/authentication/__init__.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/authentication/authentication.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/authentication/authorization.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/authentication/authorization_pass_through.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/authentication/jwks.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/authentication/public.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/authentication/secret_bearer.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/autodoc/__init__.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/autodoc/formats/__init__.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/autodoc/formats/oai3_json/__init__.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/autodoc/formats/oai3_json/oai3_json.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/autodoc/formats/oai3_json/oai3_schema_resolver.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/autodoc/formats/oai3_json/parameter.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/autodoc/formats/oai3_json/request.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/autodoc/formats/oai3_json/response.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/autodoc/formats/oai3_json/schema/__init__.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/autodoc/formats/oai3_json/schema/array.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/autodoc/formats/oai3_json/schema/default.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/autodoc/formats/oai3_json/schema/enum.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/autodoc/formats/oai3_json/schema/object.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/autodoc/formats/oai3_json/test.json +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/autodoc/py.typed +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/autodoc/request/__init__.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/autodoc/request/header.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/autodoc/request/json_body.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/autodoc/request/parameter.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/autodoc/request/request.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/autodoc/request/url_parameter.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/autodoc/request/url_path.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/autodoc/response/__init__.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/autodoc/response/response.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/autodoc/schema/__init__.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/autodoc/schema/array.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/autodoc/schema/base64.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/autodoc/schema/boolean.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/autodoc/schema/date.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/autodoc/schema/datetime.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/autodoc/schema/double.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/autodoc/schema/enum.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/autodoc/schema/integer.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/autodoc/schema/long.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/autodoc/schema/number.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/autodoc/schema/object.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/autodoc/schema/password.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/autodoc/schema/schema.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/autodoc/schema/string.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/backends/__init__.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/backends/api_backend.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/backends/backend.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/backends/cursor_backend.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/backends/memory_backend.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/backends/secrets_backend.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/column.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/columns/__init__.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/columns/audit.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/columns/belongs_to_model.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/columns/belongs_to_self.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/columns/boolean.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/columns/category_tree.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/columns/category_tree_ancestors.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/columns/category_tree_children.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/columns/category_tree_descendants.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/columns/created.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/columns/created_by_authorization_data.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/columns/created_by_header.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/columns/created_by_ip.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/columns/created_by_routing_data.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/columns/created_by_user_agent.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/columns/date.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/columns/datetime.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/columns/email.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/columns/float.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/columns/has_many.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/columns/has_many_self.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/columns/has_one.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/columns/integer.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/columns/json.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/columns/many_to_many_ids.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/columns/many_to_many_ids_with_data.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/columns/many_to_many_models.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/columns/many_to_many_pivots.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/columns/phone.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/columns/select.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/columns/string.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/columns/timestamp.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/columns/updated.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/columns/uuid.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/configs/README.md +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/configs/__init__.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/configs/actions.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/configs/any.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/configs/any_dict.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/configs/any_dict_or_callable.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/configs/authentication.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/configs/authorization.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/configs/boolean.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/configs/boolean_or_callable.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/configs/callable_config.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/configs/columns.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/configs/conditions.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/configs/config.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/configs/datetime.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/configs/datetime_or_callable.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/configs/endpoint.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/configs/endpoint_list.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/configs/float.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/configs/float_or_callable.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/configs/integer.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/configs/integer_or_callable.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/configs/joins.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/configs/list_any_dict.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/configs/list_any_dict_or_callable.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/configs/model_class.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/configs/model_column.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/configs/model_columns.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/configs/model_destination_name.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/configs/model_to_id_column.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/configs/readable_model_column.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/configs/readable_model_columns.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/configs/schema.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/configs/searchable_model_columns.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/configs/security_headers.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/configs/select.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/configs/select_list.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/configs/string.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/configs/string_dict.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/configs/string_list.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/configs/string_list_or_callable.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/configs/string_or_callable.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/configs/timedelta.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/configs/timezone.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/configs/url.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/configs/validators.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/configs/writeable_model_column.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/configs/writeable_model_columns.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/configurable.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/contexts/__init__.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/decorators.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/di/__init__.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/di/additional_config.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/di/additional_config_auto_import.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/di/di.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/di/inject/__init__.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/di/inject/by_class.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/di/inject/by_name.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/di/inject/di.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/di/inject/environment.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/di/inject/input_output.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/di/inject/now.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/di/inject/requests.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/di/inject/secrets.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/di/inject/utcnow.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/di/inject/uuid.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/di/injectable.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/di/injectable_properties.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/di/test_module/__init__.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/di/test_module/another_module/__init__.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/di/test_module/module_class.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/end.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/endpoint_group.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/endpoints/__init__.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/endpoints/advanced_search.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/endpoints/callable.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/endpoints/create.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/endpoints/delete.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/endpoints/get.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/endpoints/health_check.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/endpoints/list.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/endpoints/restful_api.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/endpoints/simple_search.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/endpoints/update.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/environment.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/exceptions/__init__.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/exceptions/authentication.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/exceptions/authorization.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/exceptions/client_error.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/exceptions/input_errors.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/exceptions/moved_permanently.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/exceptions/moved_temporarily.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/exceptions/not_found.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/functional/__init__.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/functional/routing.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/functional/string.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/functional/validations.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/input_outputs/__init__.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/input_outputs/exceptions/__init__.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/input_outputs/exceptions/cli_input_error.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/input_outputs/exceptions/cli_not_found.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/input_outputs/headers.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/input_outputs/input_output.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/input_outputs/programmatic.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/input_outputs/py.typed +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/input_outputs/wsgi.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/py.typed +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/query/__init__.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/query/condition.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/query/join.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/query/query.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/query/sort.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/schema.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/secrets/__init__.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/secrets/additional_configs/__init__.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/secrets/additional_configs/mysql_connection_dynamic_producer.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/secrets/additional_configs/mysql_connection_dynamic_producer_via_ssh_cert_bastion.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/secrets/akeyless.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/secrets/exceptions/__init__.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/secrets/exceptions/not_found.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/secrets/secrets.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/security_header.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/security_headers/__init__.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/security_headers/cache_control.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/security_headers/cors.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/security_headers/csp.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/security_headers/hsts.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/security_headers/x_content_type_options.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/security_headers/x_frame_options.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/test_base.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/typing.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/validator.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/validators/__init__.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/validators/after_column.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/validators/before_column.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/validators/in_the_future.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/validators/in_the_future_at_least.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/validators/in_the_future_at_most.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/validators/in_the_past.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/validators/in_the_past_at_least.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/validators/in_the_past_at_most.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/validators/maximum_length.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/validators/maximum_value.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/validators/minimum_length.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/validators/minimum_value.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/validators/required.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/validators/timedelta.py +0 -0
- {clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/validators/unique.py +0 -0
|
@@ -356,11 +356,11 @@ class BelongsToId(String):
|
|
|
356
356
|
parent_model = self.parent_model
|
|
357
357
|
matching_parents = parent_model.where(f"{parent_model.id_column_name}={value}")
|
|
358
358
|
matching_parents = self.apply_wheres(matching_parents)
|
|
359
|
-
matching_parents = matching_parents.
|
|
359
|
+
matching_parents = matching_parents.where_for_request_all(
|
|
360
360
|
matching_parents,
|
|
361
|
-
self.input_output.routing_data,
|
|
362
|
-
self.input_output.authorization_data,
|
|
363
361
|
self.input_output,
|
|
362
|
+
routing_data=self.input_output.routing_data,
|
|
363
|
+
authorization_data=self.input_output.authorization_data,
|
|
364
364
|
)
|
|
365
365
|
if not len(matching_parents):
|
|
366
366
|
return f"Invalid selection for {self.name}: record does not exist"
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
from clearskies.contexts.context import Context
|
|
2
|
+
from clearskies.input_outputs import Cli as CliInputOutput
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
class Cli(Context):
|
|
6
|
+
"""
|
|
7
|
+
Run an application via a CLI command
|
|
8
|
+
|
|
9
|
+
This context converts a clearskies application into a CLI command. Here's a simple example:
|
|
10
|
+
|
|
11
|
+
```
|
|
12
|
+
#!/usr/bin/env python
|
|
13
|
+
import clearskies
|
|
14
|
+
|
|
15
|
+
def my_function():
|
|
16
|
+
return "Hello World!"
|
|
17
|
+
|
|
18
|
+
cli = clearskies.contexts.Cli(my_function)
|
|
19
|
+
cli()
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
Which you can then run as expected:
|
|
23
|
+
|
|
24
|
+
```
|
|
25
|
+
$ ./example.py
|
|
26
|
+
Hello World!
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
Routing is still supported, with routes and route parameters becoming CLI args:
|
|
30
|
+
|
|
31
|
+
```
|
|
32
|
+
#!/usr/bin/env python
|
|
33
|
+
import clearskies
|
|
34
|
+
|
|
35
|
+
def my_function(name):
|
|
36
|
+
return f"Hello {name}!"
|
|
37
|
+
|
|
38
|
+
cli = clearskies.contexts.Cli(
|
|
39
|
+
clearskies.endpoints.Callable(
|
|
40
|
+
my_function,
|
|
41
|
+
url="/hello/:name",
|
|
42
|
+
return_standard_response=False,
|
|
43
|
+
)
|
|
44
|
+
)
|
|
45
|
+
cli()
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
With a url of `/hello/:name` you would invoke like so:
|
|
49
|
+
|
|
50
|
+
```
|
|
51
|
+
./example.py hello Bob
|
|
52
|
+
Hello Bob!
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
If the endpoint expects a request method you can provide it by setting the `-X` or `--request_method=`
|
|
56
|
+
kwargs. So for tihs example:
|
|
57
|
+
|
|
58
|
+
```
|
|
59
|
+
#!/usr/bin/env python
|
|
60
|
+
import clearskies
|
|
61
|
+
|
|
62
|
+
def my_function(name):
|
|
63
|
+
return f"Hello {name}!"
|
|
64
|
+
|
|
65
|
+
cli = clearskies.contexts.Cli(
|
|
66
|
+
clearskies.endpoints.Callable(
|
|
67
|
+
my_function,
|
|
68
|
+
url="/hello/:name",
|
|
69
|
+
request_methods=["POST"],
|
|
70
|
+
)
|
|
71
|
+
)
|
|
72
|
+
cli()
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
And then calling it successfully:
|
|
76
|
+
|
|
77
|
+
```
|
|
78
|
+
./example.py hello Bob --request_method=POST
|
|
79
|
+
|
|
80
|
+
./example.py hello Bob -X POST
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
You can pass data as a json string with the -d flag or set individual named arguments. The following
|
|
84
|
+
example just reflects the request data back to the client:
|
|
85
|
+
|
|
86
|
+
```
|
|
87
|
+
#!/usr/bin/env python
|
|
88
|
+
import clearskies
|
|
89
|
+
|
|
90
|
+
def my_function(request_data):
|
|
91
|
+
return request_data
|
|
92
|
+
|
|
93
|
+
cli = clearskies.contexts.Cli(
|
|
94
|
+
clearskies.endpoints.Callable(
|
|
95
|
+
my_function,
|
|
96
|
+
)
|
|
97
|
+
)
|
|
98
|
+
cli()
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
And these three calls are identical:
|
|
102
|
+
|
|
103
|
+
```
|
|
104
|
+
./example.py -d '{"hello": "world"}'
|
|
105
|
+
|
|
106
|
+
echo '{"hello": "world"}' | ./test.py
|
|
107
|
+
|
|
108
|
+
./test.py --hello=world
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
Although note that the first two are going to be preferred over the third, simply because with the
|
|
112
|
+
third there's simply no way to specify the type of a variable. As a result, you may run into issues
|
|
113
|
+
with strict type checking on endpoints.
|
|
114
|
+
"""
|
|
115
|
+
|
|
116
|
+
def __call__(self): # type: ignore
|
|
117
|
+
return self.execute_application(CliInputOutput())
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import datetime
|
|
2
|
+
from types import ModuleType
|
|
3
|
+
from typing import Any, Callable
|
|
4
|
+
from wsgiref.simple_server import make_server
|
|
5
|
+
from wsgiref.util import setup_testing_defaults
|
|
6
|
+
|
|
7
|
+
import clearskies.endpoint
|
|
8
|
+
import clearskies.endpoint_group
|
|
9
|
+
from clearskies.contexts.context import Context
|
|
10
|
+
from clearskies.di import AdditionalConfig
|
|
11
|
+
from clearskies.input_outputs import Wsgi as WsgiInputOutput
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class Wsgi(Context):
|
|
15
|
+
"""
|
|
16
|
+
Connect your application to a WSGI server.
|
|
17
|
+
|
|
18
|
+
The Wsgi context is used to connect a clearskies application to a WSGI server of your choice. As with all
|
|
19
|
+
contexts, you first create it and pass in the application (a callable, endpoint, or endpoint group) as well
|
|
20
|
+
as any dependency injection parameters. Then, you call the context from inside of the function invoked by
|
|
21
|
+
your WSGI server, passing along the `environment` and `start_response` variables, and returning the response
|
|
22
|
+
from the context. Here's a simple example:
|
|
23
|
+
|
|
24
|
+
```
|
|
25
|
+
import clearskies
|
|
26
|
+
|
|
27
|
+
def hello_world():
|
|
28
|
+
return "Hello World!"
|
|
29
|
+
|
|
30
|
+
wsgi = clearskies.contexts.Wsgi(hello_world)
|
|
31
|
+
|
|
32
|
+
def application(environment, start_response):
|
|
33
|
+
return wsgi(environment, start_response)
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
You would then launch your WSGI server. For instance, here's how to launch it with uwsgi, which automatically
|
|
37
|
+
looks for a function called `application` and treats that as the WSGI starting point:
|
|
38
|
+
|
|
39
|
+
```
|
|
40
|
+
uwsgi --http :9090 --wsgi-file test.py
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
You could then:
|
|
44
|
+
|
|
45
|
+
```
|
|
46
|
+
curl 'http://localhost:9090'
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
And see the response from this "hello world" app. Note than in the above example I create the context outside
|
|
50
|
+
of the application function. Of course, you can do the opposite:
|
|
51
|
+
|
|
52
|
+
```
|
|
53
|
+
import clearskies
|
|
54
|
+
|
|
55
|
+
def hello_world():
|
|
56
|
+
return "Hello World!"
|
|
57
|
+
|
|
58
|
+
def application(environment, start_response):
|
|
59
|
+
wsgi = clearskies.contexts.Wsgi(hello_world)
|
|
60
|
+
return wsgi(environment, start_response)
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
The difference is that most wsgi servers will cache any objects created outside of the handler function (e.g. `application`
|
|
64
|
+
in this case). When you first create the context clearskies will configure and validate any endpoints attached.
|
|
65
|
+
Also, it will create an instance of the dependency injection container and cache it. If the context object is created
|
|
66
|
+
outside of the handler, and the server caches objects in this csae, then this validation will only happen once and
|
|
67
|
+
the DI cache will store objects in between HTTP calls. If you create your context inside the handler function, then
|
|
68
|
+
you'll end up with an empty cache everytime and you'll have slower responses because of clearskies checking the
|
|
69
|
+
application configuration everytime. Note that the DI system for clearskies grants you full cache control, so
|
|
70
|
+
by and large it's normal and expected that you'll persist the cache between requests by creating the context outside
|
|
71
|
+
of any handler functions.
|
|
72
|
+
|
|
73
|
+
"""
|
|
74
|
+
|
|
75
|
+
def __call__(self, env, start_response): # type: ignore
|
|
76
|
+
return self.execute_application(WsgiInputOutput(env, start_response))
|
|
@@ -14,6 +14,35 @@ from clearskies.input_outputs import Wsgi as WsgiInputOutput
|
|
|
14
14
|
class WsgiRef(Context):
|
|
15
15
|
"""
|
|
16
16
|
Use a built in WSGI server (for development purposes only).
|
|
17
|
+
|
|
18
|
+
This context will launch a built-in HTTP server for you, so you can run applications locally
|
|
19
|
+
without having to install extra dependencies. Note that this server is not intended for production
|
|
20
|
+
usage, so this is best used for simple tests/demonstration purposes. Unlike the WSGI context, where
|
|
21
|
+
you define the application handler and invoke the context from inside of it (passing along the
|
|
22
|
+
environment and start_response variables), in this case you simply directly invoke the context to
|
|
23
|
+
launch the server. The default port is 8080:
|
|
24
|
+
|
|
25
|
+
```
|
|
26
|
+
#!/usr/bin/env python
|
|
27
|
+
import clearskies
|
|
28
|
+
|
|
29
|
+
def hello_world(name):
|
|
30
|
+
return f"Hello {name}!"
|
|
31
|
+
|
|
32
|
+
wsgi = clearskies.contexts.WsgiRef(
|
|
33
|
+
clearskies.endpoints.Callable(
|
|
34
|
+
hello_world,
|
|
35
|
+
url="/hello/:name",
|
|
36
|
+
)
|
|
37
|
+
)
|
|
38
|
+
wsgi()
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
And to invoke it:
|
|
42
|
+
|
|
43
|
+
```
|
|
44
|
+
curl 'http://localhost:8080/hello/Friend'
|
|
45
|
+
```
|
|
17
46
|
"""
|
|
18
47
|
|
|
19
48
|
port: int = 8080
|
|
@@ -963,11 +963,11 @@ class Endpoint(
|
|
|
963
963
|
model = self.di.call_function(where, model=model, **input_output.get_context_for_callables())
|
|
964
964
|
else:
|
|
965
965
|
model = model.where(where)
|
|
966
|
-
model = model.
|
|
966
|
+
model = model.where_for_request_all(
|
|
967
967
|
model,
|
|
968
|
+
input_output,
|
|
968
969
|
input_output.routing_data,
|
|
969
970
|
input_output.authorization_data,
|
|
970
|
-
input_output,
|
|
971
971
|
overrides=self.column_overrides,
|
|
972
972
|
)
|
|
973
973
|
return self.authorization.filter_model(model, input_output.authorization_data, input_output)
|
|
@@ -20,12 +20,13 @@ class Cli(InputOutput):
|
|
|
20
20
|
super().__init__()
|
|
21
21
|
|
|
22
22
|
def respond(self, response, status_code=200):
|
|
23
|
-
if status_code != 200:
|
|
24
|
-
sys.exit(response)
|
|
25
23
|
if type(response) != str:
|
|
26
|
-
|
|
24
|
+
final = json.dumps(response)
|
|
27
25
|
else:
|
|
28
|
-
|
|
26
|
+
final = response
|
|
27
|
+
if status_code != 200:
|
|
28
|
+
sys.exit(final)
|
|
29
|
+
print(final)
|
|
29
30
|
|
|
30
31
|
def get_arguments(self):
|
|
31
32
|
return sys.argv
|
|
@@ -983,6 +983,48 @@ class Model(Schema, InjectableProperties):
|
|
|
983
983
|
It has no retrun value and is passed no data. By the time this fires the model has already been
|
|
984
984
|
updated with the new data. You can decide on the necessary actions using the `was_changed` and
|
|
985
985
|
the `previous_value` functions.
|
|
986
|
+
|
|
987
|
+
```
|
|
988
|
+
from typing import Any, Self
|
|
989
|
+
import clearskies
|
|
990
|
+
|
|
991
|
+
class History(clearskies.Model):
|
|
992
|
+
id_column_name = "id"
|
|
993
|
+
backend = clearskies.backends.MemoryBackend()
|
|
994
|
+
|
|
995
|
+
id = clearskies.columns.Uuid()
|
|
996
|
+
message = clearskies.columns.String()
|
|
997
|
+
created_at = clearskies.columns.Created(date_format="%Y-%m-%d %H:%M:%S.%f")
|
|
998
|
+
|
|
999
|
+
class User(clearskies.Model):
|
|
1000
|
+
id_column_name = "id"
|
|
1001
|
+
backend = clearskies.backends.MemoryBackend()
|
|
1002
|
+
histories = clearskies.di.inject.ByClass(History)
|
|
1003
|
+
|
|
1004
|
+
id = clearskies.columns.Uuid()
|
|
1005
|
+
age = clearskies.columns.Integer()
|
|
1006
|
+
name = clearskies.columns.String()
|
|
1007
|
+
|
|
1008
|
+
def save_finished(self: Self) -> None:
|
|
1009
|
+
if not self.was_changed("age"):
|
|
1010
|
+
return
|
|
1011
|
+
|
|
1012
|
+
self.histories.create({"message": f"My name is {self.name} and I am {self.age} years old"})
|
|
1013
|
+
|
|
1014
|
+
def my_application(users, histories):
|
|
1015
|
+
jane = users.create({"name": "Jane"})
|
|
1016
|
+
jane.save({"age": 25})
|
|
1017
|
+
jane.save({"age": 26})
|
|
1018
|
+
jane.save({"age": 30})
|
|
1019
|
+
|
|
1020
|
+
return [history.message for history in histories.sort_by("created_at", "ASC")]
|
|
1021
|
+
|
|
1022
|
+
cli = clearskies.contexts.Cli(
|
|
1023
|
+
my_application,
|
|
1024
|
+
classes=[User, History],
|
|
1025
|
+
)
|
|
1026
|
+
cli()
|
|
1027
|
+
```
|
|
986
1028
|
"""
|
|
987
1029
|
pass
|
|
988
1030
|
|
|
@@ -1004,18 +1046,86 @@ class Model(Schema, InjectableProperties):
|
|
|
1004
1046
|
"""Create a hook to extend so you can provide additional post-delete logic as needed."""
|
|
1005
1047
|
pass
|
|
1006
1048
|
|
|
1007
|
-
def
|
|
1049
|
+
def where_for_request_all(
|
|
1008
1050
|
self: Self,
|
|
1009
|
-
|
|
1051
|
+
model: Self,
|
|
1052
|
+
input_output: Any,
|
|
1010
1053
|
routing_data: dict[str, str],
|
|
1011
1054
|
authorization_data: dict[str, Any],
|
|
1012
|
-
input_output: Any,
|
|
1013
1055
|
overrides: dict[str, Column] = {},
|
|
1014
1056
|
) -> Self:
|
|
1015
|
-
"""
|
|
1057
|
+
"""
|
|
1058
|
+
A hook to automatically apply filtering whenever the model makes an appearance in a get/update/list/search handler.
|
|
1059
|
+
"""
|
|
1016
1060
|
for column in self.get_columns(overrides=overrides).values():
|
|
1017
|
-
models = column.where_for_request(
|
|
1018
|
-
return
|
|
1061
|
+
models = column.where_for_request(model, input_output, routing_data, authorization_data) # type: ignore
|
|
1062
|
+
return self.where_for_request(
|
|
1063
|
+
model, input_output, routing_data=routing_data, authorization_data=authorization_data, overrides=overrides
|
|
1064
|
+
)
|
|
1065
|
+
|
|
1066
|
+
def where_for_request(
|
|
1067
|
+
self: Self,
|
|
1068
|
+
model: Self,
|
|
1069
|
+
input_output: Any,
|
|
1070
|
+
routing_data: dict[str, str],
|
|
1071
|
+
authorization_data: dict[str, Any],
|
|
1072
|
+
overrides: dict[str, Column] = {},
|
|
1073
|
+
) -> Self:
|
|
1074
|
+
"""
|
|
1075
|
+
A hook to automatically apply filtering whenever the model makes an appearance in a get/update/list/search handler.
|
|
1076
|
+
|
|
1077
|
+
Note that this automatically affects the behavior of the various list endpoints, but won't be called when you create your
|
|
1078
|
+
own queries directly. Here's an example where the model restricts the list endpoint so that it only returns users with
|
|
1079
|
+
an age over 18:
|
|
1080
|
+
|
|
1081
|
+
```
|
|
1082
|
+
from typing import Any, Self
|
|
1083
|
+
import clearskies
|
|
1084
|
+
|
|
1085
|
+
class User(clearskies.Model):
|
|
1086
|
+
id_column_name = "id"
|
|
1087
|
+
backend = clearskies.backends.MemoryBackend()
|
|
1088
|
+
id = clearskies.columns.Uuid()
|
|
1089
|
+
name = clearskies.columns.String()
|
|
1090
|
+
age = clearskies.columns.Integer()
|
|
1091
|
+
|
|
1092
|
+
def where_for_request(
|
|
1093
|
+
self: Self,
|
|
1094
|
+
model: Self,
|
|
1095
|
+
input_output: Any,
|
|
1096
|
+
routing_data: dict[str, str],
|
|
1097
|
+
authorization_data: dict[str, Any],
|
|
1098
|
+
overrides: dict[str, clearskies.Column] = {},
|
|
1099
|
+
) -> Self:
|
|
1100
|
+
return model.where("age>=18")
|
|
1101
|
+
|
|
1102
|
+
list_users = clearskies.endpoints.List(
|
|
1103
|
+
model_class=User,
|
|
1104
|
+
readable_column_names=["id", "name", "age"],
|
|
1105
|
+
sortable_column_names=["id", "name", "age"],
|
|
1106
|
+
default_sort_column_name="name",
|
|
1107
|
+
)
|
|
1108
|
+
|
|
1109
|
+
wsgi = clearskies.contexts.WsgiRef(
|
|
1110
|
+
list_users,
|
|
1111
|
+
classes=[User],
|
|
1112
|
+
bindings={
|
|
1113
|
+
"memory_backend_default_data": [
|
|
1114
|
+
{
|
|
1115
|
+
"model_class": User,
|
|
1116
|
+
"records": [
|
|
1117
|
+
{"id": "1-2-3-4", "name": "Bob", "age": 20},
|
|
1118
|
+
{"id": "1-2-3-5", "name": "Jane", "age": 17},
|
|
1119
|
+
{"id": "1-2-3-6", "name": "Greg", "age": 22},
|
|
1120
|
+
],
|
|
1121
|
+
},
|
|
1122
|
+
]
|
|
1123
|
+
},
|
|
1124
|
+
)
|
|
1125
|
+
wsgi()
|
|
1126
|
+
```
|
|
1127
|
+
"""
|
|
1128
|
+
return model
|
|
1019
1129
|
|
|
1020
1130
|
##############################################################
|
|
1021
1131
|
### From here down is functionality related to list/search ###
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
from clearskies.contexts.context import Context
|
|
2
|
-
from clearskies.input_outputs import Cli as CliInputOutput
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
class Cli(Context):
|
|
6
|
-
"""
|
|
7
|
-
Run an application via a CLI command
|
|
8
|
-
"""
|
|
9
|
-
|
|
10
|
-
def __call__(self): # type: ignore
|
|
11
|
-
return self.execute_application(CliInputOutput())
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import datetime
|
|
2
|
-
from types import ModuleType
|
|
3
|
-
from typing import Any, Callable
|
|
4
|
-
from wsgiref.simple_server import make_server
|
|
5
|
-
from wsgiref.util import setup_testing_defaults
|
|
6
|
-
|
|
7
|
-
import clearskies.endpoint
|
|
8
|
-
import clearskies.endpoint_group
|
|
9
|
-
from clearskies.contexts.context import Context
|
|
10
|
-
from clearskies.di import AdditionalConfig
|
|
11
|
-
from clearskies.input_outputs import Wsgi as WsgiInputOutput
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
class Wsgi(Context):
|
|
15
|
-
"""
|
|
16
|
-
Connect your application to a WSGI server.
|
|
17
|
-
"""
|
|
18
|
-
|
|
19
|
-
def __call__(self, env, start_response): # type: ignore
|
|
20
|
-
return self.execute_application(WsgiInputOutput(env, start_response))
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/authentication/authorization_pass_through.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/autodoc/formats/oai3_json/__init__.py
RENAMED
|
File without changes
|
{clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/autodoc/formats/oai3_json/oai3_json.py
RENAMED
|
File without changes
|
|
File without changes
|
{clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/autodoc/formats/oai3_json/parameter.py
RENAMED
|
File without changes
|
|
File without changes
|
{clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/autodoc/formats/oai3_json/response.py
RENAMED
|
File without changes
|
{clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/autodoc/formats/oai3_json/schema/__init__.py
RENAMED
|
File without changes
|
{clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/autodoc/formats/oai3_json/schema/array.py
RENAMED
|
File without changes
|
{clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/autodoc/formats/oai3_json/schema/default.py
RENAMED
|
File without changes
|
{clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/autodoc/formats/oai3_json/schema/enum.py
RENAMED
|
File without changes
|
{clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/autodoc/formats/oai3_json/schema/object.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{clear_skies-2.0.2 → clear_skies-2.0.3}/src/clearskies/columns/created_by_authorization_data.py
RENAMED
|
File without changes
|