fastapi-rtk 2.16.0__tar.gz → 2.18.0__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.
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/PKG-INFO +1 -1
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/__init__.py +13 -0
- fastapi_rtk-2.18.0/fastapi_rtk/_version.py +1 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/agent_docs/guide/backend.md +7 -5
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/api/__init__.py +13 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/api/base_api.py +14 -4
- fastapi_rtk-2.18.0/fastapi_rtk/api/model_rest_api/__init__.py +19 -0
- fastapi_rtk-2.18.0/fastapi_rtk/api/model_rest_api/model_rest_api.py +2316 -0
- fastapi_rtk-2.16.0/fastapi_rtk/api/model_rest_api/_params.py → fastapi_rtk-2.18.0/fastapi_rtk/api/model_rest_api/params.py +1 -1
- fastapi_rtk-2.18.0/fastapi_rtk/api/model_rest_api/services/__init__.py +25 -0
- fastapi_rtk-2.18.0/fastapi_rtk/api/model_rest_api/services/_add_service.py +99 -0
- fastapi_rtk-2.18.0/fastapi_rtk/api/model_rest_api/services/_bulk_service.py +59 -0
- fastapi_rtk-2.16.0/fastapi_rtk/api/model_rest_api/_delete_mixin.py → fastapi_rtk-2.18.0/fastapi_rtk/api/model_rest_api/services/_delete_service.py +36 -77
- fastapi_rtk-2.16.0/fastapi_rtk/api/model_rest_api/_download_mixin.py → fastapi_rtk-2.18.0/fastapi_rtk/api/model_rest_api/services/_download_service.py +99 -87
- fastapi_rtk-2.18.0/fastapi_rtk/api/model_rest_api/services/_edit_service.py +123 -0
- fastapi_rtk-2.18.0/fastapi_rtk/api/model_rest_api/services/_file_service.py +85 -0
- fastapi_rtk-2.16.0/fastapi_rtk/api/model_rest_api/_info_mixin.py → fastapi_rtk-2.18.0/fastapi_rtk/api/model_rest_api/services/_info_service.py +86 -97
- fastapi_rtk-2.18.0/fastapi_rtk/api/model_rest_api/services/_list_service.py +99 -0
- fastapi_rtk-2.16.0/fastapi_rtk/api/model_rest_api/_columns_mixin.py → fastapi_rtk-2.18.0/fastapi_rtk/api/model_rest_api/services/_schema_service.py +95 -80
- fastapi_rtk-2.18.0/fastapi_rtk/api/model_rest_api/services/_show_service.py +76 -0
- fastapi_rtk-2.16.0/fastapi_rtk/backends/sqla/extensions/audit/_decorators_mixin.py → fastapi_rtk-2.18.0/fastapi_rtk/backends/sqla/extensions/audit/_decorators_service.py +38 -64
- fastapi_rtk-2.16.0/fastapi_rtk/backends/sqla/extensions/audit/_lifecycle_mixin.py → fastapi_rtk-2.18.0/fastapi_rtk/backends/sqla/extensions/audit/_lifecycle_service.py +79 -120
- fastapi_rtk-2.16.0/fastapi_rtk/backends/sqla/extensions/audit/_processing_mixin.py → fastapi_rtk-2.18.0/fastapi_rtk/backends/sqla/extensions/audit/_processing_service.py +51 -56
- fastapi_rtk-2.18.0/fastapi_rtk/backends/sqla/extensions/audit/audit.py +715 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/backends/sqla/filters.py +44 -10
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/backends/sqla/interface.py +3 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/bases/interface.py +3 -1
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/const.py +1 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/fastapi_react_toolkit.py +2 -2
- fastapi_rtk-2.18.0/fastapi_rtk/security/sqla/security_manager/__init__.py +4 -0
- fastapi_rtk-2.16.0/fastapi_rtk/security/sqla/security_manager/__init__.py → fastapi_rtk-2.18.0/fastapi_rtk/security/sqla/security_manager/security_manager.py +1 -1
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/setting.py +18 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/utils/lazy.py +18 -5
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/integration/api/test_model_rest_api.py +30 -6
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/api/model_rest_api/test_init.py +18 -3
- fastapi_rtk-2.18.0/tests/unit/api/model_rest_api/test_service_delegators.py +77 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/backends/sqla/conftest.py +27 -3
- fastapi_rtk-2.18.0/tests/unit/backends/sqla/test_audit_service_delegators.py +81 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/backends/sqla/test_filters.py +70 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/backends/sqla/test_interface.py +15 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/security/sqla/security_manager/test_user_service.py +1 -1
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/test_const.py +1 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/test_setting.py +19 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/utils/test_lazy.py +99 -0
- fastapi_rtk-2.16.0/fastapi_rtk/_version.py +0 -1
- fastapi_rtk-2.16.0/fastapi_rtk/api/model_rest_api/__init__.py +0 -1322
- fastapi_rtk-2.16.0/fastapi_rtk/api/model_rest_api/_add_mixin.py +0 -135
- fastapi_rtk-2.16.0/fastapi_rtk/api/model_rest_api/_bulk_mixin.py +0 -97
- fastapi_rtk-2.16.0/fastapi_rtk/api/model_rest_api/_edit_mixin.py +0 -176
- fastapi_rtk-2.16.0/fastapi_rtk/api/model_rest_api/_file_mixin.py +0 -131
- fastapi_rtk-2.16.0/fastapi_rtk/api/model_rest_api/_list_mixin.py +0 -119
- fastapi_rtk-2.16.0/fastapi_rtk/api/model_rest_api/_show_mixin.py +0 -97
- fastapi_rtk-2.16.0/fastapi_rtk/api/model_rest_api/_typed_base.py +0 -215
- fastapi_rtk-2.16.0/fastapi_rtk/api/model_rest_api/_upload_mixin.py +0 -62
- fastapi_rtk-2.16.0/fastapi_rtk/backends/sqla/extensions/audit/audit.py +0 -255
- fastapi_rtk-2.16.0/tests/unit/api/model_rest_api/test_typed_base_consistency.py +0 -104
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/.gitignore +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/LICENSE +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/README.md +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/agent_docs/adapters/agents-md/AGENTS.md +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/agent_docs/adapters/claude/skill.frontmatter +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/agent_docs/guide/frontend.md +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/agent_docs/guide/legacy.md +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/agent_docs/guide/overview.md +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/apis/__init__.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/apis/info.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/apis/license.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/auth/__init__.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/auth/auth.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/auth/hashers/__init__.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/auth/hashers/pbkdf2.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/auth/hashers/scrypt.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/auth/ldap.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/auth/password_helpers/__init__.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/auth/password_helpers/fab.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/auth/strategies/__init__.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/auth/strategies/config.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/auth/strategies/db.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/auth/strategies/jwt.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/backends/__init__.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/backends/generic/__init__.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/backends/generic/column.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/backends/generic/db.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/backends/generic/exceptions.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/backends/generic/filters.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/backends/generic/interface.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/backends/generic/model.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/backends/generic/session.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/backends/sqla/__init__.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/backends/sqla/column.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/backends/sqla/db.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/backends/sqla/exceptions.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/backends/sqla/extensions/__init__.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/backends/sqla/extensions/audit/__init__.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/backends/sqla/extensions/audit/_logger.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/backends/sqla/extensions/audit/types.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/backends/sqla/extensions/geoalchemy2/__init__.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/backends/sqla/extensions/geoalchemy2/filters.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/backends/sqla/extensions/geoalchemy2/geometry_converter.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/backends/sqla/model.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/backends/sqla/session.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/bases/__init__.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/bases/cache.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/bases/db.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/bases/file_manager.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/bases/filter.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/bases/loop_manager.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/bases/model.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/bases/session.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/bases/user_cache.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/caches/__init__.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/caches/cache.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/caches/serializers.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/caches/storages.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/cli/__init__.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/cli/cli.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/cli/commands/__init__.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/cli/commands/_security_crypto.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/cli/commands/agent/__init__.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/cli/commands/agent/adapters/__init__.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/cli/commands/agent/adapters/agents_md.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/cli/commands/agent/adapters/claude.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/cli/commands/agent/base.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/cli/commands/agent/docs.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/cli/commands/db/__init__.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/cli/commands/db/templates/fastapi/README +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/cli/commands/db/templates/fastapi/alembic.ini.mako +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/cli/commands/db/templates/fastapi/env.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/cli/commands/db/templates/fastapi/script.py.mako +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/cli/commands/db/templates/fastapi-multidb/README +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/cli/commands/db/templates/fastapi-multidb/alembic.ini.mako +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/cli/commands/db/templates/fastapi-multidb/env.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/cli/commands/db/templates/fastapi-multidb/script.py.mako +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/cli/commands/export.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/cli/commands/security.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/cli/commands/translate.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/cli/const.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/cli/decorators.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/cli/types.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/cli/utils.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/config.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/db.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/decorators.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/dependencies.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/exceptions.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/file_managers/__init__.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/file_managers/file_manager.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/file_managers/image_manager.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/file_managers/s3_file_manager.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/file_managers/s3_image_manager.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/filters.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/globals.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/lang/__init__.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/lang/babel/__init__.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/lang/babel/cli.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/lang/babel/config.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/lang/babel.cfg +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/lang/lazy_text.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/lang/messages.pot +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/lang/translations/de/LC_MESSAGES/messages.mo +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/lang/translations/de/LC_MESSAGES/messages.po +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/lang/translations/en/LC_MESSAGES/messages.mo +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/lang/translations/en/LC_MESSAGES/messages.po +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/loop_managers/__init__.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/loop_managers/loop_manager.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/manager.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/middlewares.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/mixins.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/models.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/py.typed +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/registry.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/routers.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/schemas.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/security/__init__.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/security/sqla/__init__.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/security/sqla/apis.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/security/sqla/models.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/security/sqla/security_manager/_builtin_role_service.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/security/sqla/security_manager/_entities.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/security/sqla/security_manager/_exception_filters.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/security/sqla/security_manager/_export.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/security/sqla/security_manager/_import.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/security/sqla/security_manager/_permission_service.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/security/sqla/security_manager/_results.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/security/sqla/security_manager/_role_service.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/security/sqla/security_manager/_user_service.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/security/sqla/user_cache.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/types.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/utils/__init__.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/utils/async_task_runner.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/utils/class_factory.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/utils/csv_json_converter.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/utils/deep_merge.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/utils/extender_mixin.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/utils/flask_appbuilder_utils.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/utils/formatter.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/utils/hooks.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/utils/merge_schema.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/utils/multiple_async_contexts.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/utils/pydantic.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/utils/run_utils.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/utils/self_dependencies.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/utils/smartdefaultdict.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/utils/sqla.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/utils/timezone.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/utils/update_signature.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/utils/use_default_when_none.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/fastapi_rtk/version.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/pyproject.toml +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/conftest.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/docker-compose.gis.yml +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/integration/__init__.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/integration/api/__init__.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/integration/api/test_add_edit_relation_response.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/integration/apis/__init__.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/integration/apis/test_info_callable_schema.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/integration/apis/test_info_contract.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/integration/auth/__init__.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/integration/auth/test_auth_flow.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/integration/auth/test_oauth.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/integration/conftest.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/integration/file_managers/__init__.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/integration/file_managers/test_file_routes.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/integration/security/__init__.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/integration/security/sqla/__init__.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/integration/security/sqla/conftest.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/integration/security/sqla/test_permission_service.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/integration/security/sqla/test_role_service.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/integration/security/sqla/test_security_manager.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/integration/security/sqla/test_user_service.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/integration/test_app_smoke.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/__init__.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/api/__init__.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/api/conftest.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/api/model_rest_api/__init__.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/api/model_rest_api/test_columns.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/api/model_rest_api/test_file_mixin.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/api/test_base_api.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/apis/__init__.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/apis/test_info.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/apis/test_license.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/auth/__init__.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/auth/hashers/__init__.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/auth/hashers/test_pbkdf2.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/auth/hashers/test_scrypt.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/auth/password_helpers/__init__.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/auth/password_helpers/test_fab.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/auth/strategies/__init__.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/auth/strategies/test_config.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/auth/strategies/test_db.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/auth/strategies/test_jwt.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/auth/test_auth.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/backends/__init__.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/backends/generic/__init__.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/backends/generic/test_column.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/backends/generic/test_db.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/backends/generic/test_exceptions.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/backends/generic/test_filters.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/backends/generic/test_interface.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/backends/generic/test_model.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/backends/generic/test_session.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/backends/sqla/__init__.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/backends/sqla/test_audit.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/backends/sqla/test_audit_types.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/backends/sqla/test_column.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/backends/sqla/test_db.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/backends/sqla/test_geoalchemy2.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/backends/sqla/test_model.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/backends/sqla/test_session.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/bases/__init__.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/bases/test_db.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/bases/test_file_manager.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/bases/test_filter.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/bases/test_interface.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/bases/test_model.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/bases/test_session.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/cli/__init__.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/cli/commands/__init__.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/cli/commands/conftest.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/cli/commands/test_db.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/cli/commands/test_export.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/cli/commands/test_security.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/cli/commands/test_security_crypto.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/cli/commands/test_translate.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/cli/conftest.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/cli/test_cli.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/cli/test_decorators.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/cli/test_types.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/cli/test_utils.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/file_managers/__init__.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/file_managers/conftest.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/file_managers/test_file_manager.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/file_managers/test_image_manager.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/file_managers/test_s3_file_manager.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/file_managers/test_s3_image_manager.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/lang/__init__.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/lang/test_babel_cli.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/lang/test_babel_config.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/lang/test_lazy_text.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/security/__init__.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/security/sqla/__init__.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/security/sqla/conftest.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/security/sqla/security_manager/__init__.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/security/sqla/security_manager/test_builtin_role_service.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/security/sqla/security_manager/test_entities.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/security/sqla/security_manager/test_permission_service.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/security/sqla/security_manager/test_results.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/security/sqla/security_manager/test_role_service.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/security/sqla/test_apis.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/security/sqla/test_models.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/security/sqla/test_security_manager.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/test_caches.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/test_config.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/test_db.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/test_decorators.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/test_dependencies.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/test_exceptions.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/test_fastapi_react_toolkit.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/test_filters.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/test_globals.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/test_manager.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/test_middlewares.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/test_mixins.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/test_models.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/test_registry.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/test_routers.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/test_schemas.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/test_types.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/test_user_cache.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/test_version.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/utils/__init__.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/utils/test_async_task_runner.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/utils/test_class_factory.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/utils/test_csv_json_converter.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/utils/test_deep_merge.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/utils/test_extender_mixin.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/utils/test_flask_appbuilder_utils.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/utils/test_formatter.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/utils/test_hooks.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/utils/test_merge_schema.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/utils/test_multiple_async_contexts.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/utils/test_pydantic.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/utils/test_run_utils.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/utils/test_self_dependencies.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/utils/test_smartdefaultdict.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/utils/test_sqla.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/utils/test_timezone.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/utils/test_update_signature.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/tests/unit/utils/test_use_default_when_none.py +0 -0
- {fastapi_rtk-2.16.0 → fastapi_rtk-2.18.0}/uv.lock +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: fastapi-rtk
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.18.0
|
|
4
4
|
Summary: A package that provides a set of tools to build a FastAPI application with a Class-Based CRUD API.
|
|
5
5
|
Project-URL: Homepage, https://codeberg.org/datatactics/fastapi-rtk
|
|
6
6
|
Project-URL: Issues, https://codeberg.org/datatactics/fastapi-rtk/issues
|
|
@@ -37,6 +37,19 @@ __all__ = [
|
|
|
37
37
|
# .api
|
|
38
38
|
"BaseApi",
|
|
39
39
|
"ModelRestApi",
|
|
40
|
+
"Params",
|
|
41
|
+
"P_ID",
|
|
42
|
+
"P_IDS",
|
|
43
|
+
"P_Q",
|
|
44
|
+
"P_SESSION",
|
|
45
|
+
"P_BODY",
|
|
46
|
+
"P_ITEM",
|
|
47
|
+
"P_ITEMS",
|
|
48
|
+
"PARAM_Q",
|
|
49
|
+
"PARAM_IDS_Q_SESSION_ITEMS",
|
|
50
|
+
"PARAM_ID_SESSION",
|
|
51
|
+
"PARAM_ID_SESSION_ITEM",
|
|
52
|
+
"PARAM_BODY_SESSION",
|
|
40
53
|
# .auth
|
|
41
54
|
"FABPasswordHelper",
|
|
42
55
|
"Authenticator",
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "2.18.0"
|
|
@@ -268,7 +268,7 @@ class ItemApi(ModelRestApi):
|
|
|
268
268
|
async def post_delete(self, item: Item, params): ...
|
|
269
269
|
```
|
|
270
270
|
|
|
271
|
-
To reject a request from a pre-hook, `raise fastapi.HTTPException(...)` (a bare `raise ValueError(...)` becomes HTTP 500; there is no auto-translation). To override the response without rejecting, return a non-`Model` value from the hook, and the dispatcher treats that value as the response and skips the rest of the pipeline (see `
|
|
271
|
+
To reject a request from a pre-hook, `raise fastapi.HTTPException(...)` (a bare `raise ValueError(...)` becomes HTTP 500; there is no auto-translation). To override the response without rejecting, return a non-`Model` value from the hook, and the dispatcher treats that value as the response and skips the rest of the pipeline (see `services/_add_service.py:66-72` and `services/_edit_service.py:90-96`).
|
|
272
272
|
|
|
273
273
|
Use hooks for normalization, cross-field validation, audit logging, cache invalidation: anything policy, not wire format (use Pydantic for that at the schema level).
|
|
274
274
|
|
|
@@ -551,7 +551,7 @@ The task runs later, possibly after the loop has advanced or the enclosing funct
|
|
|
551
551
|
|
|
552
552
|
### Sizing the `/download` stream
|
|
553
553
|
|
|
554
|
-
`/download` exports every row matching the query, so it ignores `page` and `page_size` from the request; they reach the handler and are overwritten. It reads the rows in chunks, and `download_page_size` on the Api decides how large a chunk is (since the first release after v2.15.0).
|
|
554
|
+
`/download` exports every row matching the query, so it ignores `page` and `page_size` from the request; they reach the handler and are overwritten. It reads the rows in chunks, and the `download_page_size` attribute on the Api decides how large a chunk is (since the first release after v2.15.0). It is either an int (a fixed chunk) or a resolver `(api, session, params) -> int`. It defaults to the `API_DOWNLOAD_PAGE_SIZE` config key, which is itself the built-in resolver: it counts the matching rows and takes a tenth of them, floored at the `API_DOWNLOAD_MIN_PAGE_SIZE` config key (default `100`) and capped at `API_DOWNLOAD_MAX_PAGE_SIZE` (default `10000`) so a large table cannot size the chunk into an out-of-memory read.
|
|
555
555
|
|
|
556
556
|
Set it to an int for a fixed chunk, which also skips the count query the default runs:
|
|
557
557
|
|
|
@@ -561,16 +561,18 @@ class ReadingApi(ModelRestApi):
|
|
|
561
561
|
download_page_size = 5000
|
|
562
562
|
```
|
|
563
563
|
|
|
564
|
-
|
|
564
|
+
Set it to a resolver when the size depends on the query. It receives the Api, the session, and the `DBQueryParams` the export runs with. Sync and async both work, resolved through `safe_call`, so a sync one runs inline rather than on a worker thread:
|
|
565
565
|
|
|
566
566
|
```python
|
|
567
567
|
class ReadingApi(ModelRestApi):
|
|
568
568
|
datamodel = SQLAInterface(Reading)
|
|
569
569
|
|
|
570
|
-
def download_page_size(
|
|
570
|
+
def download_page_size(api, session, params):
|
|
571
571
|
return 1000 if params.get("filters") else 250
|
|
572
572
|
```
|
|
573
573
|
|
|
574
|
+
Set the `API_DOWNLOAD_PAGE_SIZE` config key (an int or a `(api, session, params)` resolver) to change the default for every Api at once.
|
|
575
|
+
|
|
574
576
|
The chunk size is a read size, not a limit: every matching row is exported whatever it is set to.
|
|
575
577
|
|
|
576
578
|
## 14. Permissions, roles, and auth
|
|
@@ -634,7 +636,7 @@ Reach for the builtin-role inspectors only when the answer must be synchronous a
|
|
|
634
636
|
| Every role's grants, or the role names | `sm.get_role_and_api_permission_tuples_from_builtin_roles()`, `sm.get_roles_from_builtin_roles()` |
|
|
635
637
|
| The resolved roles dict | `sm.builtin_roles` (a caching `lazy` over `Setting.ROLES`) |
|
|
636
638
|
|
|
637
|
-
Two properties to plan around. A role absent from `ROLES` reads as no access from every one of them, the admin role and any runtime-created role included, which is exactly the gap `check_user_access` closes by falling through to the DB. And `builtin_roles` is a caching `lazy` (`security_manager/
|
|
639
|
+
Two properties to plan around. A role absent from `ROLES` reads as no access from every one of them, the admin role and any runtime-created role included, which is exactly the gap `check_user_access` closes by falling through to the DB. And `builtin_roles` is a caching `lazy` (`security_manager/security_manager.py:84`; `cache=True` is the default, `utils/lazy.py`), so a mutation of the config dict after first access is not picked up: an override file loaded at startup is fine, and a test that varies the roles patches the resolved `sm.builtin_roles` attribute instead.
|
|
638
640
|
|
|
639
641
|
`current_permissions(api)` (`dependencies.py:68`) answers a wider question: every permission name the CURRENT user holds on one Api, intersected with that Api's `base_permissions`. It is a dependency factory, so calling it directly is `await current_permissions(self)()` inside `async with db.session():` (it reads `db.current_session`, which that context manager sets). Use it to hand a whole permission set to a template or a response; use `check_user_access` for a single yes/no on a user you already hold.
|
|
640
642
|
|
|
@@ -5,5 +5,18 @@ from .model_rest_api import *
|
|
|
5
5
|
__all__ = [
|
|
6
6
|
"BaseApi",
|
|
7
7
|
"ModelRestApi",
|
|
8
|
+
"Params",
|
|
9
|
+
"P_ID",
|
|
10
|
+
"P_IDS",
|
|
11
|
+
"P_Q",
|
|
12
|
+
"P_SESSION",
|
|
13
|
+
"P_BODY",
|
|
14
|
+
"P_ITEM",
|
|
15
|
+
"P_ITEMS",
|
|
16
|
+
"PARAM_Q",
|
|
17
|
+
"PARAM_IDS_Q_SESSION_ITEMS",
|
|
18
|
+
"PARAM_ID_SESSION",
|
|
19
|
+
"PARAM_ID_SESSION_ITEM",
|
|
20
|
+
"PARAM_BODY_SESSION",
|
|
8
21
|
"SQLAInterface", # Just for backward compatibility, not recommended to use directly
|
|
9
22
|
]
|
|
@@ -74,13 +74,13 @@ class BaseApi:
|
|
|
74
74
|
Example:
|
|
75
75
|
base_permissions = ["can_get", "can_post"]
|
|
76
76
|
"""
|
|
77
|
-
permissions: list[str] = lazy(
|
|
77
|
+
permissions: list[str] = lazy(list[str], with_target=False)
|
|
78
78
|
"""
|
|
79
79
|
List of permissions for the API.
|
|
80
80
|
|
|
81
81
|
DO NOT MODIFY UNLESS YOU KNOW WHAT YOU ARE DOING.
|
|
82
82
|
"""
|
|
83
|
-
messages: list[str] = lazy(
|
|
83
|
+
messages: list[str] = lazy(list[str], with_target=False)
|
|
84
84
|
"""
|
|
85
85
|
List of messages to log when the API is added to the toolkit.
|
|
86
86
|
|
|
@@ -93,7 +93,17 @@ class BaseApi:
|
|
|
93
93
|
collections.abc.Callable,
|
|
94
94
|
dict[str, typing.Any],
|
|
95
95
|
]
|
|
96
|
-
] = lazy(
|
|
96
|
+
] = lazy(
|
|
97
|
+
list[
|
|
98
|
+
tuple[
|
|
99
|
+
collections.abc.Callable,
|
|
100
|
+
dict[str, typing.Any],
|
|
101
|
+
collections.abc.Callable,
|
|
102
|
+
dict[str, typing.Any],
|
|
103
|
+
]
|
|
104
|
+
],
|
|
105
|
+
with_target=False,
|
|
106
|
+
)
|
|
97
107
|
"""
|
|
98
108
|
List of routes to register. Each item is a tuple of (router_func, router_parameters, route_function, metadata). When the API Router is integrated into the FastAPI app, these routes will be registered.
|
|
99
109
|
|
|
@@ -103,7 +113,7 @@ class BaseApi:
|
|
|
103
113
|
"""
|
|
104
114
|
The FastAPIReactToolkit object. Automatically set when the API is added to the toolkit.
|
|
105
115
|
"""
|
|
106
|
-
cache: dict[str, typing.Any] = lazy(
|
|
116
|
+
cache: dict[str, typing.Any] = lazy(dict[str, typing.Any], with_target=False)
|
|
107
117
|
"""
|
|
108
118
|
The cache for the API.
|
|
109
119
|
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
from .model_rest_api import ModelRestApi
|
|
2
|
+
from .params import *
|
|
3
|
+
|
|
4
|
+
__all__ = [
|
|
5
|
+
"ModelRestApi",
|
|
6
|
+
"Params",
|
|
7
|
+
"P_ID",
|
|
8
|
+
"P_IDS",
|
|
9
|
+
"P_Q",
|
|
10
|
+
"P_SESSION",
|
|
11
|
+
"P_BODY",
|
|
12
|
+
"P_ITEM",
|
|
13
|
+
"P_ITEMS",
|
|
14
|
+
"PARAM_Q",
|
|
15
|
+
"PARAM_IDS_Q_SESSION_ITEMS",
|
|
16
|
+
"PARAM_ID_SESSION",
|
|
17
|
+
"PARAM_ID_SESSION_ITEM",
|
|
18
|
+
"PARAM_BODY_SESSION",
|
|
19
|
+
]
|