sillo-framework 0.2.0__tar.gz → 0.3.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.
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/CHANGELOG.md +17 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/PKG-INFO +9 -28
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/README.md +5 -25
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/astro.config.mjs +3 -0
- sillo_framework-0.3.0/docs/docs/src/content/docs/advanced/context-binding.md +152 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/advanced/glossary.md +1 -18
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/advanced/mail.md +38 -6
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/advanced/security.md +2 -2
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/advanced/sessions.md +24 -8
- sillo_framework-0.3.0/docs/docs/src/content/docs/advanced/storage.md +414 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/cli/custom-commands.md +2 -2
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/cli/discovery.md +2 -2
- sillo_framework-0.3.0/docs/docs/src/content/docs/cli/framework-commands.md +97 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/cli/index.md +3 -4
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/cli/scheduler.md +1 -1
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/guides/authentication.md +40 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/guides/concurrency.md +5 -5
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/guides/configuration.md +1 -1
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/guides/console.md +2 -2
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/guides/csrf.md +26 -6
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/guides/environment.md +2 -2
- sillo_framework-0.3.0/docs/docs/src/content/docs/guides/frontend.md +53 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/guides/inertia/assets.md +3 -3
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/guides/inertia/start.mdx +4 -4
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/guides/installation.mdx +1 -1
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/guides/introduction.md +1 -1
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/guides/sessions.md +16 -1
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/guides/start/admin.md +1 -1
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/guides/start/console.md +2 -2
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/guides/start/deployment.md +4 -4
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/guides/start/index.mdx +4 -4
- sillo_framework-0.3.0/docs/docs/src/content/docs/guides/storage.mdx +654 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/start/after-creating.mdx +1 -1
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/start/create-app.md +1 -1
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/pyproject.toml +9 -4
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/requirements.txt +0 -1
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/__init__.py +1 -3
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/__main__.py +2 -91
- sillo_framework-0.3.0/sillo/_internals/registry.py +101 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/application.py +2 -44
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/auth/use_auth.py +105 -3
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/core/http/response.py +85 -8
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/core/routing/router.py +19 -57
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/helpers/crypto.py +27 -5
- sillo_framework-0.3.0/sillo/helpers/signing.py +192 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/mail/__init__.py +5 -1
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/mail/client.py +37 -0
- sillo_framework-0.3.0/sillo/mail/context.py +49 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/objects/http.py +1 -1
- sillo_framework-0.3.0/sillo/security/csrf/_middleware.py +253 -0
- sillo_framework-0.3.0/sillo/security/csrf/config.py +230 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/session/config.py +38 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/session/middleware.py +58 -2
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/session/session_objects.py +32 -36
- sillo_framework-0.3.0/sillo/session/signed_cookies.py +114 -0
- sillo_framework-0.3.0/sillo/storage/__init__.py +88 -0
- sillo_framework-0.3.0/sillo/storage/base.py +481 -0
- sillo_framework-0.3.0/sillo/storage/bucket.py +415 -0
- sillo_framework-0.3.0/sillo/storage/config.py +94 -0
- sillo_framework-0.3.0/sillo/storage/context.py +58 -0
- sillo_framework-0.3.0/sillo/storage/drivers/__init__.py +15 -0
- sillo_framework-0.3.0/sillo/storage/drivers/local.py +452 -0
- sillo_framework-0.3.0/sillo/storage/drivers/memory.py +173 -0
- sillo_framework-0.3.0/sillo/storage/errors.py +74 -0
- sillo_framework-0.3.0/sillo/storage/paths.py +156 -0
- sillo_framework-0.3.0/sillo/storage/policies.py +335 -0
- sillo_framework-0.3.0/sillo/storage/routes.py +172 -0
- sillo_framework-0.3.0/sillo/storage/signing.py +277 -0
- sillo_framework-0.3.0/sillo/storage/sniff.py +205 -0
- sillo_framework-0.3.0/sillo/storage/storage.py +219 -0
- sillo_framework-0.3.0/sillo/storage/uploads.py +66 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/templating/middleware.py +4 -1
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_auth/test_use_auth.py +278 -1
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_console/test_cli.py +1 -1
- sillo_framework-0.3.0/tests/test_console/test_terminal.py +253 -0
- sillo_framework-0.3.0/tests/test_hashing/test_core.py +104 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_helpers/test_concurrency.py +1 -1
- sillo_framework-0.3.0/tests/test_helpers/test_signing.py +155 -0
- sillo_framework-0.3.0/tests/test_http/test_accepts.py +183 -0
- sillo_framework-0.3.0/tests/test_internals/test_registry.py +81 -0
- sillo_framework-0.3.0/tests/test_mail/test_context.py +80 -0
- sillo_framework-0.3.0/tests/test_responses/test_cookie_attributes.py +155 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_security/test_csrf.py +2 -2
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_security/test_csrf_predicates.py +10 -19
- sillo_framework-0.3.0/tests/test_security/test_csrf_regressions.py +226 -0
- sillo_framework-0.3.0/tests/test_sessions/test_expiry.py +224 -0
- sillo_framework-0.3.0/tests/test_storage/contract.py +231 -0
- sillo_framework-0.3.0/tests/test_storage/test_bucket.py +296 -0
- sillo_framework-0.3.0/tests/test_storage/test_context.py +97 -0
- sillo_framework-0.3.0/tests/test_storage/test_drivers.py +29 -0
- sillo_framework-0.3.0/tests/test_storage/test_integration.py +209 -0
- sillo_framework-0.3.0/tests/test_storage/test_routes.py +226 -0
- sillo_framework-0.3.0/tests/test_storage/test_safety.py +247 -0
- sillo_framework-0.3.0/tests/test_storage/test_uploads.py +97 -0
- sillo_framework-0.3.0/tests/test_work/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/uv.lock +8 -14
- sillo_framework-0.2.0/docs/docs/src/content/docs/cli/framework-commands.md +0 -261
- sillo_framework-0.2.0/docs/docs/src/content/docs/guides/frontend.md +0 -201
- sillo_framework-0.2.0/sillo/frontend.py +0 -211
- sillo_framework-0.2.0/sillo/security/csrf/_middleware.py +0 -162
- sillo_framework-0.2.0/sillo/security/csrf/config.py +0 -117
- sillo_framework-0.2.0/sillo/server/__init__.py +0 -70
- sillo_framework-0.2.0/sillo/server/_uvicorn.py +0 -248
- sillo_framework-0.2.0/sillo/server/access.py +0 -271
- sillo_framework-0.2.0/sillo/server/banner.py +0 -216
- sillo_framework-0.2.0/sillo/server/inspector.py +0 -497
- sillo_framework-0.2.0/sillo/server/logs.py +0 -292
- sillo_framework-0.2.0/sillo/server/server.py +0 -173
- sillo_framework-0.2.0/sillo/server/theme.py +0 -126
- sillo_framework-0.2.0/sillo/session/signed_cookies.py +0 -57
- sillo_framework-0.2.0/sillo/utils/__init__.py +0 -1
- sillo_framework-0.2.0/tests/test_console/test_terminal.py +0 -165
- sillo_framework-0.2.0/tests/test_frontend/test_frontend_app.py +0 -237
- sillo_framework-0.2.0/tests/test_server/test_inspector.py +0 -431
- sillo_framework-0.2.0/tests/test_server/test_server_wiring.py +0 -311
- sillo_framework-0.2.0/tests/test_server/test_sillo_server.py +0 -318
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/.github/CODE_OF_CONDUCT.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/.github/CONTRIBUTING.MD +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/.github/dependabot.yml +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/.github/funding.yml +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/.github/workflows/coverage.yml +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/.github/workflows/format-code.yml +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/.github/workflows/lint.yaml +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/.github/workflows/merge-to-main.yml +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/.github/workflows/release.yml +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/.github/workflows/run-tests.yaml +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/.github/workflows/triage.yml +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/.github/workflows/type-check.yaml +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/.gitignore +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/LICENSE +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/SECURITY.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/benchmarks/.gitignore +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/benchmarks/README.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/benchmarks/pyproject.toml +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/benchmarks/results/.gitkeep +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/benchmarks/sillo_bench/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/benchmarks/sillo_bench/__main__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/benchmarks/sillo_bench/apps/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/benchmarks/sillo_bench/apps/django_app.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/benchmarks/sillo_bench/apps/fastapi_app.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/benchmarks/sillo_bench/apps/flask_app.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/benchmarks/sillo_bench/apps/sillo_app.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/benchmarks/sillo_bench/apps/starlette_app.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/benchmarks/sillo_bench/cli.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/benchmarks/sillo_bench/environment.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/benchmarks/sillo_bench/loadtools.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/benchmarks/sillo_bench/payloads.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/benchmarks/sillo_bench/report.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/benchmarks/sillo_bench/runner.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/benchmarks/sillo_bench/scenarios.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/coverage.json +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/.github/workflows/ci.yml +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/.github/workflows/deploy-docs-preview.yml +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/.github/workflows/deploy-docs.yml +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/.github/workflows/publish-package.yml +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/.gitignore +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/.prettierrc +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/README.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/bun.lock +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/README.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/community-unpublished/README.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/community-unpublished/contribution-guide.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/community-unpublished/index.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/community-unpublished/installation.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/community-unpublished/integrations/jrpc.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/community-unpublished/integrations/mail.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/community-unpublished/integrations/redis.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/community-unpublished/integrations/scheduler.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/community-unpublished/integrations/tasks.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/community-unpublished/integrations/tortoise.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/community-unpublished/middleware/etag.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/community-unpublished/middleware/proxy.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/community-unpublished/middleware/timeout.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/community-unpublished/middleware/trusted-host.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/package.json +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/public/favicon.svg +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/public/logo-white.svg +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/public/logo.ico +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/public/logo.png +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/assets/houston.webp +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/assets/logo-black.svg +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/assets/logo-white.svg +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/assets/placeholder.svg +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/assets/placeholder169.svg +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/components/Header.astro +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/components/MermaidRenderer.astro +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/components/PageFrame.astro +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/components/SectionNav.astro +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/components/SiteFooter.astro +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/advanced/admin.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/advanced/application-lifecycle.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/advanced/architecture-overview.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/advanced/atlas.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/advanced/auth-backends.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/advanced/authentication.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/advanced/cache.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/advanced/change-impact.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/advanced/configuration.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/advanced/console.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/advanced/debugging.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/advanced/decisions.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/advanced/dependency-injection.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/advanced/events.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/advanced/exception-handling.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/advanced/extending.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/advanced/hashing.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/advanced/helpers.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/advanced/http-correctness.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/advanced/http-request.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/advanced/http-response.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/advanced/index.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/advanced/inertia.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/advanced/middleware.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/advanced/oauth.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/advanced/openapi.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/advanced/pagination.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/advanced/parameters.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/advanced/permissions.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/advanced/record-factories.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/advanced/record-migrations.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/advanced/record-models.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/advanced/record-queries.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/advanced/record-transactions.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/advanced/records-orm.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/advanced/routing.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/advanced/start.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/advanced/templating.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/advanced/test-client.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/advanced/types-and-encoding.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/advanced/users.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/advanced/validation.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/advanced/websockets.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/advanced/work-background.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/advanced/work-queues.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/advanced/work-scheduler.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/advanced/work-tasks.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/cli/arguments.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/cli/database.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/cli/output.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/cli/prompts.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/cli/queues.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/cli/standalone-consoles.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/cli/styling.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/cli/users.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/guides/api-keys.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/guides/cache.mdx +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/guides/content-negotiation.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/guides/cookies.mdx +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/guides/cors.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/guides/dependency-injection.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/guides/error-handling.mdx +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/guides/events.mdx +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/guides/file-upload.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/guides/graphql.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/guides/handlers.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/guides/hashing.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/guides/headers.mdx +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/guides/helpers/async.mdx +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/guides/helpers/crypto.mdx +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/guides/helpers/deprecation.mdx +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/guides/helpers/files.mdx +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/guides/helpers/hashing.mdx +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/guides/helpers/html.mdx +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/guides/helpers/index.mdx +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/guides/helpers/jwt.mdx +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/guides/helpers/network.mdx +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/guides/helpers/retry.mdx +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/guides/helpers/strings.mdx +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/guides/helpers/text.mdx +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/guides/http/client.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/guides/inertia/forms.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/guides/inertia/index.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/guides/inertia/pages.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/guides/inertia/structure.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/guides/jwt-auth.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/guides/middleware.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/guides/oauth/index.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/guides/oauth/openapi.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/guides/oauth/persisting-logins.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/guides/oauth/providers.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/guides/oauth/security.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/guides/openapi/authentication-documentation.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/guides/openapi/basic-config.png +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/guides/openapi/bearerAuth.png +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/guides/openapi/custom.png +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/guides/openapi/custom2.png +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/guides/openapi/customizing-openapi-configuration.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/guides/openapi/description.png +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/guides/openapi/documentation-ui.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/guides/openapi/headers.png +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/guides/openapi/index.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/guides/openapi/multi-response.png +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/guides/openapi/path-params.png +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/guides/openapi/query-params.png +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/guides/openapi/request-body.png +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/guides/openapi/request-parameters.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/guides/openapi/request-schemas.mdx +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/guides/openapi/response-list.png +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/guides/openapi/response-models.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/guides/openapi/response.png +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/guides/pagination.mdx +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/guides/permissions.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/guides/protecting-routes.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/guides/rate-limiting.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/guides/record/casting-collections.mdx +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/guides/record/exceptions-pydantic.mdx +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/guides/record/index.mdx +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/guides/record/migrations.mdx +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/guides/record/models.mdx +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/guides/record/pagination.mdx +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/guides/record/scopes-events.mdx +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/guides/record/transactions-factories.mdx +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/guides/request-info.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/guides/request-inputs.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/guides/request-lifecycle.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/guides/request-parameters.mdx +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/guides/routers-and-subapps.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/guides/routing.mdx +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/guides/security.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/guides/sending-responses.mdx +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/guides/serialization.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/guides/services/mail.mdx +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/guides/session-auth.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/guides/start/authentication.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/guides/start/background-work.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/guides/start/database.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/guides/start/structure.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/guides/start/testing.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/guides/startups-and-shutdowns.mdx +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/guides/static-files.mdx +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/guides/streaming-response.mdx +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/guides/templating/advanced.mdx +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/guides/templating/index.mdx +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/guides/url-normalization.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/guides/users.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/guides/validation/errors.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/guides/validation/forms-and-files.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/guides/validation/index.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/guides/validation/openapi.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/guides/validation/parameters.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/guides/validation/request-bodies.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/guides/validation/response-models.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/guides/websockets/channels.mdx +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/guides/websockets/consumer.mdx +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/guides/websockets/events.mdx +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/guides/websockets/groups.mdx +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/guides/websockets/index.mdx +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/guides/work/background.mdx +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/guides/work/events.mdx +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/guides/work/index.mdx +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/guides/work/jobs.mdx +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/guides/work/queue.mdx +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/guides/work/scheduler.mdx +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/orm/admin-customising.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/orm/admin-permissions.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/orm/admin-registering.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/orm/admin.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/orm/aggregation.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/orm/bulk.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/orm/casting.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/orm/collections.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/orm/configuration.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/orm/connections.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/orm/eager-loading.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/orm/events.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/orm/exceptions.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/orm/factories.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/orm/field-reference.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/orm/fields.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/orm/filtering.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/orm/index.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/orm/lookups.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/orm/mass-assignment.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/orm/meta.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/orm/migrations-applying.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/orm/migrations-programmatic.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/orm/migrations.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/orm/mixins.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/orm/models.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/orm/pagination.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/orm/pydantic.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/orm/queries.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/orm/queryset.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/orm/raw-sql.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/orm/relationships.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/orm/scopes.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/orm/seeding.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/orm/setup.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/orm/transactions.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/orm/values.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/pydantic/config.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/pydantic/errors.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/pydantic/fields.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/pydantic/index.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/pydantic/models.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/pydantic/nested.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/pydantic/openapi.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/pydantic/orm-bridge.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/pydantic/parameters.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/pydantic/patterns.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/pydantic/request-models.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/pydantic/response-models.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/pydantic/serialization.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/pydantic/types.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/pydantic/validators.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/reference/components.mdx +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/reference/plugin-api.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/showcase/splash/banner.mdx +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/showcase/splash/centered-top.mdx +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/showcase/splash/centered.mdx +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/showcase/splash/split-left.mdx +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/showcase/splash/split-right.mdx +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/showcase/splash-pages.mdx +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/showcase/starlight-components.mdx +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/showcase/typography.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/start/custom-starters.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/start/errors.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/start/index.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/start/install.mdx +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/start/internals.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/start/naming.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/start/package-managers.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/start/personalisation.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/start/secrets.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/start/starters.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content.config.ts +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/plugins/remark-mermaid.mjs +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/styles/global.css +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/tsconfig.json +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/package.json +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/packages/lucode-starlight/README.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/packages/lucode-starlight/components/custom/ContainerSection.astro +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/packages/lucode-starlight/components/custom/LinkButton.astro +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/packages/lucode-starlight/components/custom/dropdown/Dropdown.astro +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/packages/lucode-starlight/components/custom/dropdown/DropdownContent.astro +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/packages/lucode-starlight/components/custom/dropdown/DropdownItem.astro +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/packages/lucode-starlight/components/custom/dropdown/DropdownLabel.astro +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/packages/lucode-starlight/components/custom/dropdown/DropdownSeparator.astro +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/packages/lucode-starlight/components/custom/dropdown/DropdownShortcut.astro +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/packages/lucode-starlight/components/custom/dropdown/DropdownTrigger.astro +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/packages/lucode-starlight/components/custom/dropdown/index.ts +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/packages/lucode-starlight/components/overrides/ContentPanel.astro +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/packages/lucode-starlight/components/overrides/Footer.astro +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/packages/lucode-starlight/components/overrides/Header.astro +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/packages/lucode-starlight/components/overrides/Hero.astro +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/packages/lucode-starlight/components/overrides/MarkdownContent.astro +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/packages/lucode-starlight/components/overrides/PageFrame.astro +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/packages/lucode-starlight/components/overrides/PageSidebar.astro +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/packages/lucode-starlight/components/overrides/PageTitle.astro +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/packages/lucode-starlight/components/overrides/Pagination.astro +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/packages/lucode-starlight/components/overrides/Search.astro +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/packages/lucode-starlight/components/overrides/Sidebar.astro +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/packages/lucode-starlight/components/overrides/SiteTitle.astro +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/packages/lucode-starlight/components/overrides/SocialIcons.astro +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/packages/lucode-starlight/components/overrides/TableOfContents.astro +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/packages/lucode-starlight/components/overrides/ThemeSelect.astro +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/packages/lucode-starlight/components/overrides/TwoColumnContent.astro +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/packages/lucode-starlight/components/overrides/parts/Drawer.astro +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/packages/lucode-starlight/components/overrides/parts/MobileMenuToggle.astro +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/packages/lucode-starlight/components/overrides/parts/NavBar.astro +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/packages/lucode-starlight/components/overrides/parts/SidebarSublist.astro +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/packages/lucode-starlight/components/overrides/parts/toc/TableOfContentsList.astro +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/packages/lucode-starlight/components/overrides/parts/toc/starlight-toc.ts +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/packages/lucode-starlight/core/config/constants.ts +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/packages/lucode-starlight/core/config/expresive-code.ts +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/packages/lucode-starlight/core/config/override.ts +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/packages/lucode-starlight/core/config/schemas.ts +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/packages/lucode-starlight/core/config/vite.ts +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/packages/lucode-starlight/core/plugin.ts +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/packages/lucode-starlight/global.d.ts +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/packages/lucode-starlight/index.ts +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/packages/lucode-starlight/package.json +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/packages/lucode-starlight/schema.ts +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/packages/lucode-starlight/styles/base.css +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/packages/lucode-starlight/styles/layers.css +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/packages/lucode-starlight/styles/theme.css +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/packages/lucode-starlight/user-components.ts +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/packages/lucode-starlight/virtual.d.ts +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/renovate.json +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/test/lucode-starlight/config.test.ts +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/test/lucode-starlight/plugin.test.ts +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/test/lucode-starlight/starlight-toc.test.ts +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/tsconfig.json +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/vercel.json +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/vitest.config.ts +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/examples/README.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/examples/auth/01_session_auth.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/examples/auth/02_jwt_auth.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/examples/auth/03_custom_backend.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/examples/auth/04_multiple_backends.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/examples/auth/05_router_integration.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/examples/config/.env.development +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/examples/config/.env.example +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/examples/config/.env.production +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/examples/config/01_basic_config.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/examples/config/02_web_app.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/examples/config/README.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/examples/database/01_sqlite_todo.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/examples/database/02_tortoise_notes.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/examples/database/03_tortoise_blog.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/examples/exception_handling/01_basic.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/examples/exception_handling/02_custom.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/examples/file_handling/01_upload_download.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/examples/file_handling/02_simple_upload.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/examples/getting_started/01_hello_world.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/examples/getting_started/02_basic_rest.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/examples/getting_started/03_enhanced_api.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/examples/getting_started/04_lifespan.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/examples/getting_started/05_streaming_middleware.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/examples/getting_started/README.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/examples/hashing/01_basic_password_hashing.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/examples/hashing/01_basic_usage.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/examples/hashing/02_multiple_algorithms.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/examples/hashing/02_schemes.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/examples/hashing/03_web_api.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/examples/hashing/README.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/examples/middleware/01_basic.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/examples/middleware/02_class_based.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/examples/middleware/03_asgi_middleware.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/examples/request_inputs/01_json_data.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/examples/request_inputs/02_form_data.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/examples/request_inputs/03_raw_body.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/examples/request_inputs/04_streaming.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/examples/responses/01_return_values.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/examples/responses/02_json_with_headers.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/examples/responses/03_response_types.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/examples/responses/04_response_classes.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/examples/routing/01_basic_routes.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/examples/routing/02_path_parameters.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/examples/routing/03_routes_class.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/examples/routing/04_routers.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/examples/templating/01_basic.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/examples/templating/02_inheritance.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/examples/templating/03_custom_filters.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/examples/templating/README.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/examples/templating/requirements.txt +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/examples/templating/templates/index.html +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/examples/templating/templates/user_profile.html +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/examples/validation/01_advanced.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/examples/validation/02_pydantic.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/examples/websockets/01_basic_echo.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/examples/websockets/02_chat_rooms.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/examples/websockets/03_custom_history.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/requirements-dev.txt +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/_internals/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/_internals/_middleware.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/_internals/lazy.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/admin/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/admin/auth.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/admin/default_user.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/admin/models.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/admin/registry.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/admin/router.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/admin/routes.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/admin/static/logo.png +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/admin/templates/base.html +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/admin/templates/create.html +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/admin/templates/dashboard.html +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/admin/templates/delete.html +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/admin/templates/detail.html +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/admin/templates/list.html +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/admin/templates/login.html +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/admin/templates/query.html +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/admin/templates/update.html +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/admin/templating.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/auth/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/auth/apikey/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/auth/apikey/backend.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/auth/apikey/mixins.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/auth/apikey/models.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/auth/backend.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/auth/exceptions.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/auth/jwt_auth/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/auth/jwt_auth/backend.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/auth/jwt_auth/mixins.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/auth/jwt_auth/models.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/auth/jwt_auth/tokens.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/auth/middleware.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/auth/model.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/auth/session_auth/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/auth/session_auth/backend.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/auth/session_auth/guard.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/auth/session_auth/mixins.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/auth/session_auth/models.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/cache/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/cache/backends.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/cache/base.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/cache/config.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/cache/decorator.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/config/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/config/core.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/console/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/console/arguments.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/console/command.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/console/console.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/console/exceptions.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/console/output.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/console/prompt.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/console/style.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/console/terminal.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/core/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/core/converters.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/core/dependencies/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/core/dependencies/base.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/core/encoding.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/core/error/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/core/error/handler.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/core/helpers/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/core/helpers/async_helpers.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/core/helpers/deprecation.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/core/http/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/core/http/cookies.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/core/http/request.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/core/routing/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/core/routing/_utils.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/core/routing/base.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/core/routing/grouping.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/core/routing/websocket.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/encoding.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/env/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/env/_loader.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/events/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/events/core.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/events/emitter.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/events/enums.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/events/exceptions.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/events/mixins.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/events/transports/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/events/transports/base.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/events/transports/memory.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/events/transports/persistent.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/events/transports/record.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/events/transports/redis.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/events/types.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/exception_handler.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/exceptions.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/formparser.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/graphql/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/graphql/handler.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/handlers/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/handlers/not_found.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/hashing/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/hashing/config.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/hashing/core.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/hashing/exceptions.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/hashing/utils.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/helpers/__init__.py +0 -0
- {sillo_framework-0.2.0/sillo/utils → sillo_framework-0.3.0/sillo/helpers}/concurrency.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/helpers/files.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/helpers/hashing.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/helpers/html.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/helpers/jwt.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/helpers/network.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/helpers/retry.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/helpers/strings.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/helpers/text.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/http/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/http/accepts.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/http/client/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/http/client/caching.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/http/client/client.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/http/client/config.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/http/client/errors.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/http/client/middleware.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/http/client/models.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/http/client/retry.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/http/client/transport.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/http/client/utils.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/http/etag.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/http/lifecycle/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/http/lifecycle/context.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/http/lifecycle/helpers.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/http/lifecycle/middleware.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/http/sse.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/http/status.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/logging.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/mail/config.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/mail/models.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/middleware/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/middleware/base.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/middleware/gzip.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/middleware/security.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/middleware/utils.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/normalize/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/normalize/helpers.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/normalize/middleware.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/objects/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/objects/common.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/objects/datastructures.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/objects/routing.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/openapi/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/openapi/_builder.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/openapi/config.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/openapi/models.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/openapi/ui.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/openapi/utils.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/pagination.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/parameters.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/permissions/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/permissions/mixins.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/permissions/models.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/py.typed +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/record/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/record/_bridge.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/record/casting.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/record/collection.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/record/commands/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/record/commands/functions.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/record/config.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/record/console.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/record/events.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/record/exceptions.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/record/factories.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/record/fields.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/record/helpers.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/record/logging.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/record/manager.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/record/mixins/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/record/models.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/record/pagination.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/record/pydantic.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/record/queries.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/record/scopes.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/record/transactions.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/route_builder.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/security/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/security/cors/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/security/cors/_middleware.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/security/cors/config.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/security/csrf/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/security/ratelimit/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/security/ratelimit/_middleware.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/security/ratelimit/backends/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/security/ratelimit/backends/base.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/security/ratelimit/backends/memory.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/security/ratelimit/backends/record.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/security/ratelimit/backends/redis.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/security/ratelimit/config.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/security/ratelimit/models.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/security/ratelimit/strategies/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/security/ratelimit/strategies/base.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/security/ratelimit/strategies/fixed_window.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/security/ratelimit/strategies/sliding_window.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/security/ratelimit/strategies/token_bucket.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/security/shield.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/session/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/session/base.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/session/file.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/static.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/templating/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/templating/utils.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/testclient/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/testclient/_internal/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/testclient/_internal/inputs.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/testclient/_internal/transport.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/testclient/_internal/types.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/testclient/_internal/utils.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/testclient/_internal/websockets.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/testclient/async_client.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/testclient/base.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/testclient/exceptions.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/testclient/helpers.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/types.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/users/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/users/base.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/users/commands.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/users/console.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/users/managers.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/users/protocol.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/users/simple.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/validation/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/validation/compiler.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/validation/errors.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/validation/fields.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/websockets/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/websockets/base.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/websockets/channels.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/websockets/consumers.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/websockets/errors.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/websockets/history.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/websockets/status.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/websockets/utils.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/work/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/work/backends.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/work/background/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/work/background/supervisor.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/work/background/tasks.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/work/commands.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/work/console.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/work/dependency.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/work/middleware.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/work/queue/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/work/queue/batches.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/work/queue/connection.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/work/queue/events.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/work/queue/failed.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/work/queue/job.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/work/queue/listener.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/work/queue/middleware.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/work/queue/payloads.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/work/queue/workers.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/work/scheduler/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/work/scheduler/cron.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/work/scheduler/jobs.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/work/scheduler/manager.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/work/scheduler/middleware.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/work/scheduler/triggers.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/work/task.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/sillo/work/types.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/conftest.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/static/example.txt +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/static/page.html +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/static/script.js +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/static/style.css +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/static/subfolder/subfile.txt +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/templates/base.html +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/templates/product.html +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/templates/welcome.html +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_admin/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_admin/test_admin_export_query.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_admin/test_admin_helpers.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_admin/test_admin_models.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_admin/test_admin_startup_order.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_admin/test_admin_views.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_applications/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_applications/test_app_class_name.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_applications/test_application.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_applications/test_middleware_chain_cache.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_applications/test_route_kwargs.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_auth/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_auth/test_apikey_backend.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_auth/test_auth_middleware.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_auth/test_auth_utilities.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_auth/test_custom_backend.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_auth/test_jwt_backend.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_auth/test_jwt_user_mixin.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_auth/test_security_schemes.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_auth/test_session_backend.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_auth/test_session_guard.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_auth/test_session_model_extend.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_auth/test_token_for_user.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_auth/test_user_models.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_cache/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_cache/test_base.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_cache/test_decorator.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_cache/test_memory_cache.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_cache/test_redis_backend.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_cache/test_redis_cache_fake.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_config/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_config/conftest.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_config/test_config_loading.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_config/test_env_loading.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_console/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_console/test_arguments.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_console/test_builtin_record.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_console/test_builtin_users.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_console/test_builtin_work.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_console/test_command.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_console/test_console.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_console/test_output.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_console/test_prompt.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_console/test_style.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_cors/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_cors/test_configuration.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_cors/test_credentials_security.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_cors/test_error_handling.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_cors/test_integration.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_cors/test_preflight_requests.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_cors/test_simple_requests.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_dependencies/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_dependencies/test_dependency_injection.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_encoding/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_encoding/test_custom_encoder.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_encoding/test_encoding_shim.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_encoding/test_jsonable_encoder.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_encoding/test_passthrough_fast_path.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_env/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_env/conftest.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_env/test_load.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_env/test_parse.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_events/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_events/test_comprehensive_events.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_events/test_core_propagation.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_events/test_emitter_paths.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_events/test_events_backends.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_events/test_persistent_transport_fake.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_events/test_record_transport.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_events/test_redis_transport_fake.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_events/test_transport_registry_and_base.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_exception_handlers/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_exception_handlers/test_basic_exception_handlers.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_exception_handlers/test_concurrent_error_pages.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_exception_handlers/test_dispatch_internals.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_exception_handlers/test_exception_handler_integration.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_exception_handlers/test_not_found_handler.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_exception_handlers/test_server_error_debug.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_forms/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_forms/test_form_parser.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_forms/test_uploaded_file_save.py +0 -0
- {sillo_framework-0.2.0/tests/test_frontend → sillo_framework-0.3.0/tests/test_graphql}/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_graphql/test_graphql_schema.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_graphql/test_handler_paths.py +0 -0
- {sillo_framework-0.2.0/tests/test_graphql → sillo_framework-0.3.0/tests/test_hashing}/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_helpers/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_helpers/test_accepts.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_helpers/test_async.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_helpers/test_deprecation.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_helpers/test_files.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_helpers/test_hashing_crypto.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_helpers/test_html.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_helpers/test_jwt.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_helpers/test_network.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_helpers/test_retry.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_helpers/test_strings.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_helpers/test_text.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_http/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_http/test_accepts_middleware.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_http/test_accepts_negotiation.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_http/test_cookie_parsing.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_http/test_etag_full.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_http/test_http_client.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_http/test_http_etag.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_http/test_http_module_exports.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_http/test_sse.py +0 -0
- {sillo_framework-0.2.0/tests/test_lifecycle → sillo_framework-0.3.0/tests/test_internals}/__init__.py +0 -0
- {sillo_framework-0.2.0/tests/test_mail → sillo_framework-0.3.0/tests/test_lifecycle}/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_lifecycle/test_context.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_lifecycle/test_request_id.py +0 -0
- {sillo_framework-0.2.0/tests/test_middleware → sillo_framework-0.3.0/tests/test_mail}/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_mail/test_mail_client.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_mail/test_mail_service.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_mail/test_mail_transport.py +0 -0
- {sillo_framework-0.2.0/tests/test_normalize → sillo_framework-0.3.0/tests/test_middleware}/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_middleware/test_app_level_middleware.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_middleware/test_asgi_middleware.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_middleware/test_gzip.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_middleware/test_internals_bridge.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_middleware/test_raw_asgi_layers.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_middleware/test_route_level_middleware.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_middleware/test_router_level_middleware.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_middleware/test_security_middleware.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_middleware/test_use_for_route.py +0 -0
- {sillo_framework-0.2.0/tests/test_objects → sillo_framework-0.3.0/tests/test_normalize}/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_normalize/test_helpers.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_normalize/test_middleware.py +0 -0
- {sillo_framework-0.2.0/tests/test_openapi → sillo_framework-0.3.0/tests/test_objects}/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_objects/test_headers.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_objects/test_multidict.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_objects/test_url.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_objects/test_url_building.py +0 -0
- {sillo_framework-0.2.0/tests/test_parameters → sillo_framework-0.3.0/tests/test_openapi}/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_openapi/test_docs_ui.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_openapi/test_openapi_config.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_openapi/test_openapi_spec.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_openapi/test_openapi_utils.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_optional_imports.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_pagination/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_pagination/test_data_handlers.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_pagination/test_edge_cases.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_pagination/test_error_handling.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_pagination/test_integration.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_pagination/test_pagination_strategies.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_pagination/test_paginators.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_pagination/test_response_classes.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_pagination/test_response_paginate.py +0 -0
- {sillo_framework-0.2.0/tests/test_permissions → sillo_framework-0.3.0/tests/test_parameters}/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_parameters/test_cookie.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_parameters/test_header.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_parameters/test_nested.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_parameters/test_openapi.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_parameters/test_query.py +0 -0
- {sillo_framework-0.2.0/tests/test_record → sillo_framework-0.3.0/tests/test_permissions}/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_permissions/test_permissions.py +0 -0
- {sillo_framework-0.2.0/tests/test_redis → sillo_framework-0.3.0/tests/test_record}/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_record/test_backend_config.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_record/test_collection.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_record/test_events.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_record/test_mass_assignment.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_record/test_mixins.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_record/test_model_features.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_record/test_pagination_and_exceptions.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_record/test_pydantic_bridge.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_record/test_queries.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_record/test_query_logging.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_record/test_record_commands.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_record/test_release_fixes.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_record/test_savepoints.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_record/test_seeding.py +0 -0
- {sillo_framework-0.2.0/tests/test_requests → sillo_framework-0.3.0/tests/test_redis}/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_redis/test_redis_cache.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_redis/test_redis_transport.py +0 -0
- {sillo_framework-0.2.0/tests/test_responses → sillo_framework-0.3.0/tests/test_requests}/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_requests/test_basic_properties.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_requests/test_body_data.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_requests/test_cookies_auth.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_requests/test_path_params.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_requests/test_query_params.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_requests/test_request_flags.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_requests/test_request_surface.py +0 -0
- {sillo_framework-0.2.0/tests/test_routing → sillo_framework-0.3.0/tests/test_responses}/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_responses/test_abort_not_found.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_responses/test_advanced_responses.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_responses/test_basic_responses.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_responses/test_file_responses.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_responses/test_header_override.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_responses/test_headers_cookies.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_responses/test_json_serialization.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_responses/test_redirect_streaming.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_responses/test_response_properties.py +0 -0
- {sillo_framework-0.2.0/tests/test_security → sillo_framework-0.3.0/tests/test_routing}/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_routing/test_basic_routing.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_routing/test_converters.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_routing/test_grouping.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_routing/test_http_methods.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_routing/test_nested_routes.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_routing/test_path_parameters.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_routing/test_router_wrap_asgi.py +0 -0
- {sillo_framework-0.2.0/tests/test_server → sillo_framework-0.3.0/tests/test_security}/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_security/test_backends.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_security/test_middleware.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_security/test_ratelimit_redis_backend.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_security/test_record_backend.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_security/test_strategies.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_sessions/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_sessions/test_base.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_sessions/test_file_sessions.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_sessions/test_integration.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_sessions/test_middleware.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_sessions/test_security.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_sessions/test_settings.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_sessions/test_signed_cookies.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_small_module_gaps.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_static/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_static/test_static_files.py +0 -0
- {sillo_framework-0.2.0/tests/test_templating → sillo_framework-0.3.0/tests/test_storage}/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_supported_python_versions.py +0 -0
- {sillo_framework-0.2.0/tests/test_users → sillo_framework-0.3.0/tests/test_templating}/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_templating/test_template_utils.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_templating/test_templates.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_type_comments.py +0 -0
- {sillo_framework-0.2.0/tests/test_validation → sillo_framework-0.3.0/tests/test_users}/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_users/test_password.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_users/test_user_commands.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_users/test_user_model.py +0 -0
- {sillo_framework-0.2.0/tests/test_work → sillo_framework-0.3.0/tests/test_validation}/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_validation/conftest.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_validation/test_body_form.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_validation/test_legacy_compat.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_validation/test_markers_unit.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_validation/test_openapi_generation.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_validation/test_params.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_validation/test_request_model.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_validation/test_response_model.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_websockets/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_websockets/test_channel_history.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_websockets/test_consumer_encodings.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_websockets/test_group_removal.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_websockets/test_history_contract.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_websockets/test_websocket_consumers.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_websockets/test_websocket_errors.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_websockets/test_websocket_groups.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_websockets/test_websocket_protocol.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_websockets/test_websocket_routing.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_websockets/test_websocket_state_machine.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_work/test_backends_full.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_work/test_background.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_work/test_events.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_work/test_job_dispatch.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_work/test_job_queue.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_work/test_job_round_trip.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_work/test_memory_backend.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_work/test_queue.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_work/test_queue_worker.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_work/test_redis_queue_reliability.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_work/test_routes.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_work/test_scheduler.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_work/test_scheduler_middleware.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_work/test_task.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_work/test_work_commands.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_work/test_work_di.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.3.0}/tests/test_work/work_jobs.py +0 -0
|
@@ -7,6 +7,23 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [0.3.0] - 2026-08-21
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
|
|
14
|
+
- `sillo.storage.current_storage()` and `sillo.storage.bucket(name)` — reach the `Storage` `setup_storage` registered, from a handler, a queue job, or a script, without the application object or a request.
|
|
15
|
+
- `sillo.mail.current_mail()` and `sillo.mail.send_email(...)` — same shape, for the `MailClient` `setup_mail` registered.
|
|
16
|
+
- `sillo._internals.registry.InstanceRegistry`, the shared internal mechanism behind both: a plain slot filled once at startup and read from anywhere, raising `NotConfiguredError` — not `None` — when asked before `setup_x` has run. Documented in [Instance Registry](https://sillo.build/advanced/context-binding/).
|
|
17
|
+
- `useAuth(unauthorized=..., forbidden=...)` — per-route hooks that answer a failed gate directly instead of raising `AuthenticationFailed`/`PermissionDenied` for the global exception handler to catch. Each is called as `hook(request, response)`, sync or async, and its return value is sent as the response with the route handler never reached. Unset, a gate behaves exactly as before.
|
|
18
|
+
|
|
19
|
+
## [0.2.1] - 2026-08-19
|
|
20
|
+
|
|
21
|
+
### Changed
|
|
22
|
+
|
|
23
|
+
- Replaced `itsdangerous` with an internal `sillo.helpers.signing` implementation for CSRF tokens and signed session cookies.
|
|
24
|
+
- Moved `sillo.utils` modules into `sillo.helpers`.
|
|
25
|
+
- Fixed `typing-extensions` dependency marker to require the package on Python < 3.13.
|
|
26
|
+
|
|
10
27
|
## [0.2.0] - 2026-08-18
|
|
11
28
|
|
|
12
29
|
A minor release, not a patch: `sillo.env` is new public API, and `.env` now
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: sillo-framework
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.3.0
|
|
4
4
|
Summary: Python with the pieces already in place: an async web framework whose ORM, auth, admin, queues, scheduler and WebSockets share one configuration model.
|
|
5
5
|
Project-URL: Homepage, https://github.com/sillohq/core
|
|
6
6
|
Project-URL: Repository, https://github.com/sillohq/core
|
|
@@ -29,10 +29,9 @@ Classifier: Topic :: Software Development :: Libraries :: Application Frameworks
|
|
|
29
29
|
Classifier: Typing :: Typed
|
|
30
30
|
Requires-Python: >=3.10
|
|
31
31
|
Requires-Dist: anyio==4.14.1
|
|
32
|
-
Requires-Dist: itsdangerous>=2.1.2
|
|
33
32
|
Requires-Dist: pydantic<3.0,>=2.0
|
|
34
33
|
Requires-Dist: python-multipart>=0.0.6
|
|
35
|
-
Requires-Dist: typing-extensions>=4.12.2; python_version < '3.
|
|
34
|
+
Requires-Dist: typing-extensions>=4.12.2; python_version < '3.13'
|
|
36
35
|
Requires-Dist: uvicorn>=0.27.0
|
|
37
36
|
Provides-Extra: all
|
|
38
37
|
Requires-Dist: argon2-cffi>=21.2.0; extra == 'all'
|
|
@@ -96,6 +95,8 @@ Provides-Extra: jwt
|
|
|
96
95
|
Requires-Dist: pyjwt>=2.7.0; extra == 'jwt'
|
|
97
96
|
Provides-Extra: record
|
|
98
97
|
Requires-Dist: tortoise-orm>=1.0; extra == 'record'
|
|
98
|
+
Provides-Extra: storage-s3
|
|
99
|
+
Requires-Dist: httpx>=0.23.3; extra == 'storage-s3'
|
|
99
100
|
Provides-Extra: templating
|
|
100
101
|
Requires-Dist: jinja2>=3.1.6; extra == 'templating'
|
|
101
102
|
Description-Content-Type: text/markdown
|
|
@@ -186,42 +187,22 @@ async def home(request, response):
|
|
|
186
187
|
return response.json({"message": "Hello from Sillo"})
|
|
187
188
|
```
|
|
188
189
|
|
|
189
|
-
Run it with
|
|
190
|
+
Run it with uvicorn:
|
|
190
191
|
|
|
191
192
|
```bash
|
|
192
|
-
uv run
|
|
193
|
+
uv run uvicorn app:app --reload
|
|
193
194
|
```
|
|
194
195
|
|
|
195
|
-
|
|
196
|
-
● sillo 0.2.0
|
|
197
|
-
|
|
198
|
-
app main:app
|
|
199
|
-
url http://127.0.0.1:8000
|
|
200
|
-
routes 4
|
|
201
|
-
inspect http://127.0.0.1:8000/__sillo/requests
|
|
202
|
-
mode serving
|
|
203
|
-
pid 5716
|
|
204
|
-
|
|
205
|
-
ready in 7ms · press ctrl-c to stop
|
|
206
|
-
|
|
207
|
-
22:48:04 GET 200 / 409us
|
|
208
|
-
```
|
|
209
|
-
|
|
210
|
-
No import string is needed. `sillo serve` looks for `app.main:app`, `main:app`
|
|
196
|
+
No import string is needed. `uvicorn` looks for `app.main:app`, `main:app`
|
|
211
197
|
and `app:app`, and you can pin it with the `SILLO_APP` environment variable or
|
|
212
198
|
a `[tool.sillo] app` entry in `pyproject.toml`. Pass one explicitly when you
|
|
213
199
|
want something else:
|
|
214
200
|
|
|
215
201
|
```bash
|
|
216
|
-
uv run
|
|
202
|
+
uv run uvicorn api.main:app --port 9000 --workers 4
|
|
217
203
|
```
|
|
218
204
|
|
|
219
|
-
|
|
220
|
-
line is a clickable request log you can open while developing. Add
|
|
221
|
-
`--no-inspect` to leave it out, or `--plain` to see the underlying server's own
|
|
222
|
-
output instead.
|
|
223
|
-
|
|
224
|
-
`sillo serve` is built for development. For production, run the application
|
|
205
|
+
`uvicorn` is built for development. For production, run the application
|
|
225
206
|
under a process supervisor with a reverse proxy in front of it.
|
|
226
207
|
|
|
227
208
|
## Request Validation
|
|
@@ -84,42 +84,22 @@ async def home(request, response):
|
|
|
84
84
|
return response.json({"message": "Hello from Sillo"})
|
|
85
85
|
```
|
|
86
86
|
|
|
87
|
-
Run it with
|
|
87
|
+
Run it with uvicorn:
|
|
88
88
|
|
|
89
89
|
```bash
|
|
90
|
-
uv run
|
|
90
|
+
uv run uvicorn app:app --reload
|
|
91
91
|
```
|
|
92
92
|
|
|
93
|
-
|
|
94
|
-
● sillo 0.2.0
|
|
95
|
-
|
|
96
|
-
app main:app
|
|
97
|
-
url http://127.0.0.1:8000
|
|
98
|
-
routes 4
|
|
99
|
-
inspect http://127.0.0.1:8000/__sillo/requests
|
|
100
|
-
mode serving
|
|
101
|
-
pid 5716
|
|
102
|
-
|
|
103
|
-
ready in 7ms · press ctrl-c to stop
|
|
104
|
-
|
|
105
|
-
22:48:04 GET 200 / 409us
|
|
106
|
-
```
|
|
107
|
-
|
|
108
|
-
No import string is needed. `sillo serve` looks for `app.main:app`, `main:app`
|
|
93
|
+
No import string is needed. `uvicorn` looks for `app.main:app`, `main:app`
|
|
109
94
|
and `app:app`, and you can pin it with the `SILLO_APP` environment variable or
|
|
110
95
|
a `[tool.sillo] app` entry in `pyproject.toml`. Pass one explicitly when you
|
|
111
96
|
want something else:
|
|
112
97
|
|
|
113
98
|
```bash
|
|
114
|
-
uv run
|
|
99
|
+
uv run uvicorn api.main:app --port 9000 --workers 4
|
|
115
100
|
```
|
|
116
101
|
|
|
117
|
-
|
|
118
|
-
line is a clickable request log you can open while developing. Add
|
|
119
|
-
`--no-inspect` to leave it out, or `--plain` to see the underlying server's own
|
|
120
|
-
output instead.
|
|
121
|
-
|
|
122
|
-
`sillo serve` is built for development. For production, run the application
|
|
102
|
+
`uvicorn` is built for development. For production, run the application
|
|
123
103
|
under a process supervisor with a reverse proxy in front of it.
|
|
124
104
|
|
|
125
105
|
## Request Validation
|
|
@@ -296,6 +296,7 @@ export default defineConfig({
|
|
|
296
296
|
{ label: 'Application Lifecycle', link: '/advanced/application-lifecycle/' },
|
|
297
297
|
{ label: 'Configuration System', link: '/advanced/configuration/' },
|
|
298
298
|
{ label: 'Type System & Encoding', link: '/advanced/types-and-encoding/' },
|
|
299
|
+
{ label: 'Instance Registry', link: '/advanced/context-binding/' },
|
|
299
300
|
],
|
|
300
301
|
},
|
|
301
302
|
{
|
|
@@ -375,6 +376,7 @@ export default defineConfig({
|
|
|
375
376
|
{ label: 'Cache System', link: '/advanced/cache/' },
|
|
376
377
|
{ label: 'Templating', link: '/advanced/templating/' },
|
|
377
378
|
{ label: 'Mail Service', link: '/advanced/mail/' },
|
|
379
|
+
{ label: 'Storage', link: '/advanced/storage/' },
|
|
378
380
|
{ label: 'Console Framework', link: '/advanced/console/' },
|
|
379
381
|
{ label: 'Admin Panel', link: '/advanced/admin/' },
|
|
380
382
|
{ label: 'Pagination', link: '/advanced/pagination/' },
|
|
@@ -505,6 +507,7 @@ export default defineConfig({
|
|
|
505
507
|
{ label: 'Startup & Shutdown', link: '/guides/startups-and-shutdowns/' },
|
|
506
508
|
{ label: 'Concurrency & Thread Pool', link: '/guides/concurrency/' },
|
|
507
509
|
{ label: 'Caching', link: '/guides/cache/' },
|
|
510
|
+
{ label: 'Storage', link: '/guides/storage/' },
|
|
508
511
|
{ label: 'Event System', link: '/guides/events/' },
|
|
509
512
|
{ label: 'OpenAPI Overview', link: '/guides/openapi/' },
|
|
510
513
|
{ label: 'Documentation UI', link: '/guides/openapi/documentation-ui/' },
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "Instance Registry"
|
|
3
|
+
description: "The shared mechanism behind current_storage(), current_mail(), and every setup_x() that follows — a plain slot filled at startup, reachable from anywhere"
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
> Internal engineering reference for a small piece of infrastructure shared
|
|
7
|
+
> across subsystems.
|
|
8
|
+
>
|
|
9
|
+
> Source: `core/sillo/_internals/registry.py` (~90 lines)
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## 1. The problem
|
|
14
|
+
|
|
15
|
+
Every `setup_x(app, config)` in the framework follows the same shape: build
|
|
16
|
+
one long-lived instance, put it on `app.state`, register lifecycle hooks,
|
|
17
|
+
return it. `setup_record`, `setup_work`, `setup_mail`, `setup_storage` all do
|
|
18
|
+
exactly this.
|
|
19
|
+
|
|
20
|
+
Getting the instance back is where they used to diverge. A handler could hold
|
|
21
|
+
a closure over it, or reach through `request.base_app.state["storage"]` — both
|
|
22
|
+
fine when there is a request in hand and the code holding it does not mind an
|
|
23
|
+
import shaped by that. Neither works well for the routes module that wants to
|
|
24
|
+
call `bucket(...)` without importing the application that built it (a
|
|
25
|
+
circular import, since the application is what registers the routes), and
|
|
26
|
+
neither works *at all* for a queue job or a script, where there is no request
|
|
27
|
+
and often no `app` object lying around either.
|
|
28
|
+
|
|
29
|
+
The keys were also picked independently per subsystem —
|
|
30
|
+
`app.state["storage"]`, `app.state["mail_client"]`, `app.state["record"]` —
|
|
31
|
+
untyped strings a typo in either the write or the read silently breaks.
|
|
32
|
+
|
|
33
|
+
## 2. What this is, and what it deliberately is not
|
|
34
|
+
|
|
35
|
+
`InstanceRegistry` is a plain slot: `register(instance)` fills it,
|
|
36
|
+
`current(...)` reads it back, and asking before anything was registered raises
|
|
37
|
+
a `NotConfiguredError` naming the `setup_x` call that was skipped, rather than
|
|
38
|
+
returning `None` for code to accept as if it were valid.
|
|
39
|
+
|
|
40
|
+
```python
|
|
41
|
+
class InstanceRegistry(Generic[T]):
|
|
42
|
+
def __init__(self, label: str) -> None:
|
|
43
|
+
self._label = label
|
|
44
|
+
self._instance: T | None = None
|
|
45
|
+
|
|
46
|
+
def register(self, instance: T) -> None:
|
|
47
|
+
self._instance = instance
|
|
48
|
+
|
|
49
|
+
def current(self, *, setup: str, example: str) -> T:
|
|
50
|
+
if self._instance is None:
|
|
51
|
+
raise NotConfiguredError(...)
|
|
52
|
+
return self._instance
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
That is the whole mechanism. Two things it is not, on purpose:
|
|
56
|
+
|
|
57
|
+
**Not a `ContextVar`.** An earlier version of this bound the instance per
|
|
58
|
+
request, with a small ASGI middleware setting and resetting a
|
|
59
|
+
`contextvars.ContextVar` around each call — the same trick
|
|
60
|
+
[`sillo_inertia`](https://github.com/sillohq/inertia) uses for
|
|
61
|
+
`current_inertia()`, where it is the right answer: an Inertia response *is* a
|
|
62
|
+
function of the request answering it, and there is no such thing as rendering
|
|
63
|
+
one outside of one. Mail and storage are different — a queue job sending a
|
|
64
|
+
receipt or a script backfilling a bucket has no request to bind from, and
|
|
65
|
+
those are not edge cases for either subsystem, they are close to half its
|
|
66
|
+
traffic. Tying the lookup to the request lifecycle would have solved the
|
|
67
|
+
import problem and reintroduced the exact "how do I reach this from a
|
|
68
|
+
background job" problem the design was meant to remove. Registering once, at
|
|
69
|
+
startup, removes the request from the question entirely.
|
|
70
|
+
|
|
71
|
+
**Not per-application.** The registry holds one instance at a time, whichever
|
|
72
|
+
`setup_x` call registered most recently — there is no key, no lookup by
|
|
73
|
+
`app`. This is the same assumption `app.state["storage"]` already made *for
|
|
74
|
+
that application* (one `Storage` per app), made explicit at process scope
|
|
75
|
+
instead: one registered `Storage` at a time, full stop. A process serving two
|
|
76
|
+
applications with two different storage configurations — most often a test
|
|
77
|
+
suite building app after app — gets whichever was set up last, and that is a
|
|
78
|
+
deliberate trade for never needing an application object to do the lookup,
|
|
79
|
+
not an oversight. It has not needed to be anything more: sillo applications
|
|
80
|
+
are one per process in every deployment shape the framework targets.
|
|
81
|
+
|
|
82
|
+
## 3. Who uses it
|
|
83
|
+
|
|
84
|
+
| Subsystem | Registry label | Reader |
|
|
85
|
+
|---|---|---|
|
|
86
|
+
| `sillo.storage` | `"storage"` | `current_storage()`, `bucket(name)` |
|
|
87
|
+
| `sillo.mail` | `"mail client"` | `current_mail()`, `send_email(...)` |
|
|
88
|
+
|
|
89
|
+
Each subsystem owns one `InstanceRegistry[T]` at module scope in its own
|
|
90
|
+
`context.py`, and calls `register(instance)` from its `setup_x` function —
|
|
91
|
+
that is the entire integration cost. `app.state["storage"]` and
|
|
92
|
+
`app.state["mail_client"]` are untouched; this is an addition, not a
|
|
93
|
+
replacement, for code that already holds the application object and would
|
|
94
|
+
rather use it.
|
|
95
|
+
|
|
96
|
+
```python
|
|
97
|
+
# sillo/storage/context.py
|
|
98
|
+
_registry: InstanceRegistry[Storage] = InstanceRegistry("storage")
|
|
99
|
+
|
|
100
|
+
def register(storage: Storage) -> None:
|
|
101
|
+
_registry.register(storage)
|
|
102
|
+
|
|
103
|
+
def current_storage() -> Storage:
|
|
104
|
+
return _registry.current(setup="setup_storage", example=_EXAMPLE)
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
```python
|
|
108
|
+
# sillo/storage/storage.py — inside setup_storage
|
|
109
|
+
storage = Storage(config, secret=secret or _app_secret(app))
|
|
110
|
+
app.state["storage"] = storage
|
|
111
|
+
app.on_shutdown(storage.close)
|
|
112
|
+
register(storage) # ← the one line each setup_x adds
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
## 4. The failure mode this was built to avoid
|
|
116
|
+
|
|
117
|
+
A cache miss that returns `None` — instead of a sentinel distinct from every
|
|
118
|
+
valid cached value — invites code to accept `None` as data. The same shape
|
|
119
|
+
would happen here if `current_storage()` returned `None` before startup: a
|
|
120
|
+
handler that forgot to call `setup_storage` would get an `AttributeError` on
|
|
121
|
+
whatever it tried to do with `None`, three call frames away from the actual
|
|
122
|
+
mistake and looking nothing like it.
|
|
123
|
+
|
|
124
|
+
`NotConfiguredError` is raised at the point of the mistake, and names the
|
|
125
|
+
`setup_x` call that should have run first:
|
|
126
|
+
|
|
127
|
+
```
|
|
128
|
+
No storage has been set up yet.
|
|
129
|
+
|
|
130
|
+
This reads the storage setup_storage registers. Call it during startup,
|
|
131
|
+
before anything asks for the storage back:
|
|
132
|
+
|
|
133
|
+
storage = setup_storage(app, StorageConfig(default="attachments", buckets={...}))
|
|
134
|
+
|
|
135
|
+
If it already runs somewhere, check that this code path executes after it —
|
|
136
|
+
module import order, not request order, decides whether that has happened.
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
The last line is the one worth reading twice: because registration happens at
|
|
140
|
+
`setup_x` time and not on first request, the failure this actually catches in
|
|
141
|
+
practice is an import-order bug — a module reading `current_storage()` at its
|
|
142
|
+
own import time, before the application module that calls `setup_storage` has
|
|
143
|
+
run.
|
|
144
|
+
|
|
145
|
+
## 5. Testing
|
|
146
|
+
|
|
147
|
+
`tests/test_internals/test_registry.py` covers the primitive alone — no app,
|
|
148
|
+
no request, nothing async unless the test itself needs to be — proving
|
|
149
|
+
`register`/`current` work as a plain function call would. `tests/test_storage/test_context.py`
|
|
150
|
+
and `tests/test_mail/test_context.py` cover the wiring: that `setup_storage`
|
|
151
|
+
and `setup_mail` actually call `register`, that the last call in a process
|
|
152
|
+
wins, and that a `NotConfiguredError` names the right subsystem.
|
{sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/advanced/glossary.md
RENAMED
|
@@ -1265,22 +1265,7 @@ Jinja2-based template engine.
|
|
|
1265
1265
|
|
|
1266
1266
|
---
|
|
1267
1267
|
|
|
1268
|
-
##
|
|
1269
|
-
|
|
1270
|
-
### FrontendApp
|
|
1271
|
-
|
|
1272
|
-
**Module:** `sillo.frontend`
|
|
1273
|
-
|
|
1274
|
-
SPA build directory serving with fallback routing. Inherits `BaseRouter`.
|
|
1275
|
-
|
|
1276
|
-
**Attributes:** `directory` (Path), `fallback` ("auto" | str | bool | None),
|
|
1277
|
-
`cache_control`.
|
|
1278
|
-
|
|
1279
|
-
**Fallback behaviour:** `"auto"` tries `404.html` then `index.html`.
|
|
1280
|
-
|
|
1281
|
-
**Related:** `StaticFiles`, `SilloApp.frontend()`
|
|
1282
|
-
|
|
1283
|
-
---
|
|
1268
|
+
## Static Files
|
|
1284
1269
|
|
|
1285
1270
|
### StaticFiles
|
|
1286
1271
|
|
|
@@ -1288,8 +1273,6 @@ SPA build directory serving with fallback routing. Inherits `BaseRouter`.
|
|
|
1288
1273
|
|
|
1289
1274
|
Static file serving middleware/router.
|
|
1290
1275
|
|
|
1291
|
-
**Related:** `FrontendApp`
|
|
1292
|
-
|
|
1293
1276
|
---
|
|
1294
1277
|
|
|
1295
1278
|
## WebSocket
|
|
@@ -619,21 +619,53 @@ def get_mail_client(request) -> MailClient:
|
|
|
619
619
|
```
|
|
620
620
|
|
|
621
621
|
Accesses the client stored in `app.state.mail_client` via the request's state
|
|
622
|
-
proxy.
|
|
622
|
+
proxy. Requires a request — `current_mail()` below does not.
|
|
623
|
+
|
|
624
|
+
### `send_email(...)`
|
|
625
|
+
|
|
626
|
+
**File:** `core/sillo/mail/client.py`
|
|
627
|
+
|
|
628
|
+
The way to send mail from a handler, a queue job, or a script — nothing to
|
|
629
|
+
fetch first, no request required:
|
|
630
|
+
|
|
631
|
+
```python
|
|
632
|
+
from sillo.mail import send_email
|
|
633
|
+
|
|
634
|
+
async def process_signup(user): # a queue job, not a handler
|
|
635
|
+
await send_email(user.email, "Welcome", body="...")
|
|
636
|
+
```
|
|
637
|
+
|
|
638
|
+
### `current_mail()`
|
|
639
|
+
|
|
640
|
+
**File:** `core/sillo/mail/context.py`
|
|
641
|
+
|
|
642
|
+
The client itself, for the two things `send_email(...)` doesn't cover:
|
|
643
|
+
`send_message(message)` for a prebuilt `EmailMessage`, and
|
|
644
|
+
`send_template_email(...)` when its distinct signature reads better than
|
|
645
|
+
`send_email`'s `template_name=`/`template_context=` kwargs. Most code never
|
|
646
|
+
needs this — `send_email(...)` already is `current_mail().send_email(...)`.
|
|
647
|
+
|
|
648
|
+
`setup_mail` registers the client with `sillo._internals.registry`, the same
|
|
649
|
+
[instance registry](/advanced/context-binding/) `sillo.storage` uses — a
|
|
650
|
+
plain slot filled at startup, not scoped to a request, because mail is sent
|
|
651
|
+
from queue jobs and scripts at least as often as from a handler. The trade
|
|
652
|
+
that makes explicit: the registry holds one client at a time, whichever
|
|
653
|
+
`setup_mail` call registered last. That is exactly the assumption
|
|
654
|
+
`app.state.mail_client` already made — one mail client per application — made
|
|
655
|
+
visible rather than implicit in a lookup key.
|
|
623
656
|
|
|
624
657
|
### Usage Pattern
|
|
625
658
|
|
|
626
659
|
```python
|
|
627
|
-
from sillo.mail import setup_mail,
|
|
660
|
+
from sillo.mail import setup_mail, send_email, MailConfig
|
|
628
661
|
|
|
629
662
|
# At startup
|
|
630
663
|
config = MailConfig.for_gmail("user@gmail.com", "app-password")
|
|
631
664
|
setup_mail(app, config)
|
|
632
665
|
|
|
633
|
-
# In handler
|
|
634
|
-
async def send_welcome(
|
|
635
|
-
|
|
636
|
-
result = await client.send_template_email(
|
|
666
|
+
# In handler, a queue job, or a script
|
|
667
|
+
async def send_welcome(user):
|
|
668
|
+
result = await send_email(
|
|
637
669
|
to="newuser@example.com",
|
|
638
670
|
subject="Welcome!",
|
|
639
671
|
template_name="welcome",
|
{sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/advanced/security.md
RENAMED
|
@@ -348,14 +348,14 @@ class CSRFConfig:
|
|
|
348
348
|
|
|
349
349
|
### Token Generation
|
|
350
350
|
|
|
351
|
-
The middleware uses `
|
|
351
|
+
The middleware uses an internal `URLSafeSerializer` to sign tokens:
|
|
352
352
|
|
|
353
353
|
```python
|
|
354
354
|
def _generate_csrf_token(self) -> str:
|
|
355
355
|
return self.serializer.dumps(secrets.token_urlsafe(32))
|
|
356
356
|
```
|
|
357
357
|
|
|
358
|
-
A random token is generated with `secrets.token_urlsafe(32)`, then signed with
|
|
358
|
+
A random token is generated with `secrets.token_urlsafe(32)`, then signed with HMAC-SHA256. The signed token is stored in a cookie and must be submitted back in the `X-CSRFToken` header.
|
|
359
359
|
|
|
360
360
|
### Double-Submit Cookie Pattern
|
|
361
361
|
|
{sillo_framework-0.2.0 → sillo_framework-0.3.0}/docs/docs/src/content/docs/advanced/sessions.md
RENAMED
|
@@ -303,12 +303,28 @@ Three methods control when a session expires:
|
|
|
303
303
|
|
|
304
304
|
- **`set_expiration_time(expiration: datetime)`** (line 200): Explicit
|
|
305
305
|
override.
|
|
306
|
-
- **`get_expiration_time()
|
|
306
|
+
- **`get_expiration_time()`**: Resolution order:
|
|
307
307
|
1. Explicit override from `set_expiration_time`
|
|
308
|
-
2. If `session_permanent` is `
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
308
|
+
2. If `session_permanent` is `True` (the default):
|
|
309
|
+
`now(utc) + session_expiration_time`
|
|
310
|
+
3. If `session_permanent` is `False`: `None` — the cookie goes out with no
|
|
311
|
+
`Expires` at all, so the browser drops it when it closes
|
|
312
|
+
4. Fallback: `session_expiration_time`'s default of 86400 if config is
|
|
313
|
+
unreachable
|
|
314
|
+
- **`has_expired()`**: `now(utc) > get_expiration_time()`, and `False` for a
|
|
315
|
+
session with no expiry
|
|
316
|
+
|
|
317
|
+
This used to be inverted — a permanent session got `datetime.max`, so the
|
|
318
|
+
**default** configuration issued a cookie that never expired, and
|
|
319
|
+
`session_expiration_time` applied only to the non-permanent case that did not
|
|
320
|
+
need it.
|
|
321
|
+
|
|
322
|
+
:::caution[The cookie's expiry is not what protects you]
|
|
323
|
+
`Expires` is a request to the browser. Anyone replaying a captured cookie
|
|
324
|
+
simply does not honour it. For the signed-cookie backend the real bound is
|
|
325
|
+
`SignedSessionManager.max_age`, which is checked against a timestamp inside
|
|
326
|
+
the signature and defaults to `session_expiration_time`.
|
|
327
|
+
:::
|
|
312
328
|
|
|
313
329
|
### should_set_cookie
|
|
314
330
|
|
|
@@ -495,11 +511,11 @@ def __init__(self, config=None, secret_key: str | None = None):
|
|
|
495
511
|
)
|
|
496
512
|
```
|
|
497
513
|
|
|
498
|
-
Uses `
|
|
514
|
+
Uses an internal `URLSafeTimedSerializer` which:
|
|
499
515
|
- Serialises the payload to JSON, then base64url-encodes it.
|
|
500
516
|
- Appends a timestamp.
|
|
501
517
|
- Signs the whole thing with HMAC-SHA256 using the secret key and salt.
|
|
502
|
-
- The salt prevents signature reuse across different
|
|
518
|
+
- The salt prevents signature reuse across different signing contexts.
|
|
503
519
|
|
|
504
520
|
### Signing and Verification
|
|
505
521
|
|
|
@@ -813,7 +829,7 @@ app.use(SessionMiddleware(secret_key="your-secret-key"))
|
|
|
813
829
|
config = SessionConfig(
|
|
814
830
|
session_cookie_name="app_session",
|
|
815
831
|
session_expiration_time=3600, # 1 hour
|
|
816
|
-
session_permanent=False, #
|
|
832
|
+
session_permanent=False, # browser-session cookie, no Expires
|
|
817
833
|
session_refresh_each_request=False, # don't refresh on each request
|
|
818
834
|
session_cookie_secure=True, # HTTPS only
|
|
819
835
|
session_cookie_httponly=True, # no JavaScript access
|