sillo-framework 0.2.0__tar.gz → 0.2.1__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.2.1}/CHANGELOG.md +8 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/PKG-INFO +2 -3
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/advanced/security.md +2 -2
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/advanced/sessions.md +24 -8
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/concurrency.md +4 -4
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/csrf.md +26 -6
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/sessions.md +16 -1
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/pyproject.toml +2 -3
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/requirements.txt +0 -1
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/__init__.py +1 -1
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/core/http/response.py +85 -8
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/core/routing/router.py +1 -1
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/helpers/crypto.py +27 -5
- sillo_framework-0.2.1/sillo/helpers/signing.py +192 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/objects/http.py +1 -1
- sillo_framework-0.2.1/sillo/security/csrf/_middleware.py +253 -0
- sillo_framework-0.2.1/sillo/security/csrf/config.py +230 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/session/config.py +38 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/session/middleware.py +58 -2
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/session/session_objects.py +32 -36
- sillo_framework-0.2.1/sillo/session/signed_cookies.py +114 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/templating/middleware.py +4 -1
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_helpers/test_concurrency.py +1 -1
- sillo_framework-0.2.1/tests/test_helpers/test_signing.py +155 -0
- sillo_framework-0.2.1/tests/test_responses/test_cookie_attributes.py +155 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_security/test_csrf.py +2 -2
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_security/test_csrf_predicates.py +10 -19
- sillo_framework-0.2.1/tests/test_security/test_csrf_regressions.py +226 -0
- sillo_framework-0.2.1/tests/test_sessions/test_expiry.py +224 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/uv.lock +3 -13
- 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/session/signed_cookies.py +0 -57
- sillo_framework-0.2.0/sillo/utils/__init__.py +0 -1
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/.github/CODE_OF_CONDUCT.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/.github/CONTRIBUTING.MD +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/.github/dependabot.yml +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/.github/funding.yml +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/.github/workflows/coverage.yml +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/.github/workflows/format-code.yml +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/.github/workflows/lint.yaml +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/.github/workflows/merge-to-main.yml +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/.github/workflows/release.yml +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/.github/workflows/run-tests.yaml +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/.github/workflows/triage.yml +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/.github/workflows/type-check.yaml +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/.gitignore +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/LICENSE +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/README.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/SECURITY.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/benchmarks/.gitignore +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/benchmarks/README.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/benchmarks/pyproject.toml +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/benchmarks/results/.gitkeep +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/benchmarks/sillo_bench/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/benchmarks/sillo_bench/__main__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/benchmarks/sillo_bench/apps/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/benchmarks/sillo_bench/apps/django_app.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/benchmarks/sillo_bench/apps/fastapi_app.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/benchmarks/sillo_bench/apps/flask_app.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/benchmarks/sillo_bench/apps/sillo_app.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/benchmarks/sillo_bench/apps/starlette_app.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/benchmarks/sillo_bench/cli.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/benchmarks/sillo_bench/environment.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/benchmarks/sillo_bench/loadtools.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/benchmarks/sillo_bench/payloads.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/benchmarks/sillo_bench/report.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/benchmarks/sillo_bench/runner.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/benchmarks/sillo_bench/scenarios.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/coverage.json +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/.github/workflows/ci.yml +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/.github/workflows/deploy-docs-preview.yml +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/.github/workflows/deploy-docs.yml +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/.github/workflows/publish-package.yml +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/.gitignore +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/.prettierrc +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/README.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/bun.lock +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/README.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/astro.config.mjs +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/community-unpublished/README.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/community-unpublished/contribution-guide.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/community-unpublished/index.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/community-unpublished/installation.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/community-unpublished/integrations/jrpc.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/community-unpublished/integrations/mail.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/community-unpublished/integrations/redis.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/community-unpublished/integrations/scheduler.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/community-unpublished/integrations/tasks.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/community-unpublished/integrations/tortoise.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/community-unpublished/middleware/etag.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/community-unpublished/middleware/proxy.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/community-unpublished/middleware/timeout.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/community-unpublished/middleware/trusted-host.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/package.json +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/public/favicon.svg +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/public/logo-white.svg +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/public/logo.ico +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/public/logo.png +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/assets/houston.webp +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/assets/logo-black.svg +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/assets/logo-white.svg +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/assets/placeholder.svg +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/assets/placeholder169.svg +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/components/Header.astro +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/components/MermaidRenderer.astro +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/components/PageFrame.astro +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/components/SectionNav.astro +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/components/SiteFooter.astro +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/advanced/admin.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/advanced/application-lifecycle.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/advanced/architecture-overview.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/advanced/atlas.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/advanced/auth-backends.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/advanced/authentication.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/advanced/cache.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/advanced/change-impact.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/advanced/configuration.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/advanced/console.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/advanced/debugging.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/advanced/decisions.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/advanced/dependency-injection.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/advanced/events.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/advanced/exception-handling.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/advanced/extending.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/advanced/glossary.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/advanced/hashing.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/advanced/helpers.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/advanced/http-correctness.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/advanced/http-request.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/advanced/http-response.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/advanced/index.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/advanced/inertia.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/advanced/mail.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/advanced/middleware.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/advanced/oauth.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/advanced/openapi.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/advanced/pagination.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/advanced/parameters.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/advanced/permissions.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/advanced/record-factories.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/advanced/record-migrations.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/advanced/record-models.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/advanced/record-queries.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/advanced/record-transactions.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/advanced/records-orm.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/advanced/routing.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/advanced/start.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/advanced/templating.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/advanced/test-client.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/advanced/types-and-encoding.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/advanced/users.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/advanced/validation.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/advanced/websockets.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/advanced/work-background.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/advanced/work-queues.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/advanced/work-scheduler.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/advanced/work-tasks.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/cli/arguments.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/cli/custom-commands.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/cli/database.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/cli/discovery.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/cli/framework-commands.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/cli/index.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/cli/output.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/cli/prompts.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/cli/queues.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/cli/scheduler.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/cli/standalone-consoles.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/cli/styling.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/cli/users.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/api-keys.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/authentication.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/cache.mdx +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/configuration.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/console.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/content-negotiation.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/cookies.mdx +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/cors.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/dependency-injection.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/environment.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/error-handling.mdx +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/events.mdx +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/file-upload.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/frontend.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/graphql.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/handlers.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/hashing.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/headers.mdx +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/helpers/async.mdx +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/helpers/crypto.mdx +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/helpers/deprecation.mdx +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/helpers/files.mdx +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/helpers/hashing.mdx +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/helpers/html.mdx +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/helpers/index.mdx +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/helpers/jwt.mdx +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/helpers/network.mdx +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/helpers/retry.mdx +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/helpers/strings.mdx +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/helpers/text.mdx +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/http/client.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/inertia/assets.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/inertia/forms.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/inertia/index.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/inertia/pages.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/inertia/start.mdx +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/inertia/structure.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/installation.mdx +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/introduction.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/jwt-auth.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/middleware.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/oauth/index.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/oauth/openapi.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/oauth/persisting-logins.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/oauth/providers.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/oauth/security.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/openapi/authentication-documentation.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/openapi/basic-config.png +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/openapi/bearerAuth.png +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/openapi/custom.png +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/openapi/custom2.png +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/openapi/customizing-openapi-configuration.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/openapi/description.png +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/openapi/documentation-ui.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/openapi/headers.png +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/openapi/index.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/openapi/multi-response.png +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/openapi/path-params.png +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/openapi/query-params.png +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/openapi/request-body.png +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/openapi/request-parameters.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/openapi/request-schemas.mdx +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/openapi/response-list.png +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/openapi/response-models.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/openapi/response.png +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/pagination.mdx +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/permissions.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/protecting-routes.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/rate-limiting.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/record/casting-collections.mdx +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/record/exceptions-pydantic.mdx +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/record/index.mdx +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/record/migrations.mdx +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/record/models.mdx +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/record/pagination.mdx +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/record/scopes-events.mdx +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/record/transactions-factories.mdx +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/request-info.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/request-inputs.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/request-lifecycle.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/request-parameters.mdx +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/routers-and-subapps.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/routing.mdx +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/security.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/sending-responses.mdx +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/serialization.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/services/mail.mdx +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/session-auth.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/start/admin.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/start/authentication.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/start/background-work.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/start/console.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/start/database.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/start/deployment.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/start/index.mdx +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/start/structure.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/start/testing.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/startups-and-shutdowns.mdx +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/static-files.mdx +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/streaming-response.mdx +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/templating/advanced.mdx +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/templating/index.mdx +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/url-normalization.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/users.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/validation/errors.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/validation/forms-and-files.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/validation/index.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/validation/openapi.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/validation/parameters.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/validation/request-bodies.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/validation/response-models.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/websockets/channels.mdx +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/websockets/consumer.mdx +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/websockets/events.mdx +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/websockets/groups.mdx +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/websockets/index.mdx +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/work/background.mdx +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/work/events.mdx +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/work/index.mdx +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/work/jobs.mdx +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/work/queue.mdx +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/work/scheduler.mdx +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/orm/admin-customising.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/orm/admin-permissions.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/orm/admin-registering.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/orm/admin.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/orm/aggregation.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/orm/bulk.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/orm/casting.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/orm/collections.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/orm/configuration.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/orm/connections.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/orm/eager-loading.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/orm/events.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/orm/exceptions.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/orm/factories.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/orm/field-reference.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/orm/fields.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/orm/filtering.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/orm/index.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/orm/lookups.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/orm/mass-assignment.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/orm/meta.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/orm/migrations-applying.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/orm/migrations-programmatic.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/orm/migrations.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/orm/mixins.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/orm/models.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/orm/pagination.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/orm/pydantic.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/orm/queries.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/orm/queryset.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/orm/raw-sql.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/orm/relationships.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/orm/scopes.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/orm/seeding.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/orm/setup.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/orm/transactions.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/orm/values.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/pydantic/config.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/pydantic/errors.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/pydantic/fields.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/pydantic/index.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/pydantic/models.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/pydantic/nested.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/pydantic/openapi.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/pydantic/orm-bridge.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/pydantic/parameters.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/pydantic/patterns.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/pydantic/request-models.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/pydantic/response-models.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/pydantic/serialization.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/pydantic/types.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/pydantic/validators.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/reference/components.mdx +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/reference/plugin-api.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/showcase/splash/banner.mdx +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/showcase/splash/centered-top.mdx +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/showcase/splash/centered.mdx +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/showcase/splash/split-left.mdx +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/showcase/splash/split-right.mdx +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/showcase/splash-pages.mdx +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/showcase/starlight-components.mdx +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/showcase/typography.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/start/after-creating.mdx +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/start/create-app.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/start/custom-starters.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/start/errors.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/start/index.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/start/install.mdx +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/start/internals.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/start/naming.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/start/package-managers.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/start/personalisation.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/start/secrets.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/start/starters.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content.config.ts +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/plugins/remark-mermaid.mjs +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/styles/global.css +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/tsconfig.json +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/package.json +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/packages/lucode-starlight/README.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/packages/lucode-starlight/components/custom/ContainerSection.astro +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/packages/lucode-starlight/components/custom/LinkButton.astro +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/packages/lucode-starlight/components/custom/dropdown/Dropdown.astro +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/packages/lucode-starlight/components/custom/dropdown/DropdownContent.astro +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/packages/lucode-starlight/components/custom/dropdown/DropdownItem.astro +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/packages/lucode-starlight/components/custom/dropdown/DropdownLabel.astro +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/packages/lucode-starlight/components/custom/dropdown/DropdownSeparator.astro +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/packages/lucode-starlight/components/custom/dropdown/DropdownShortcut.astro +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/packages/lucode-starlight/components/custom/dropdown/DropdownTrigger.astro +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/packages/lucode-starlight/components/custom/dropdown/index.ts +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/packages/lucode-starlight/components/overrides/ContentPanel.astro +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/packages/lucode-starlight/components/overrides/Footer.astro +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/packages/lucode-starlight/components/overrides/Header.astro +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/packages/lucode-starlight/components/overrides/Hero.astro +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/packages/lucode-starlight/components/overrides/MarkdownContent.astro +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/packages/lucode-starlight/components/overrides/PageFrame.astro +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/packages/lucode-starlight/components/overrides/PageSidebar.astro +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/packages/lucode-starlight/components/overrides/PageTitle.astro +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/packages/lucode-starlight/components/overrides/Pagination.astro +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/packages/lucode-starlight/components/overrides/Search.astro +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/packages/lucode-starlight/components/overrides/Sidebar.astro +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/packages/lucode-starlight/components/overrides/SiteTitle.astro +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/packages/lucode-starlight/components/overrides/SocialIcons.astro +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/packages/lucode-starlight/components/overrides/TableOfContents.astro +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/packages/lucode-starlight/components/overrides/ThemeSelect.astro +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/packages/lucode-starlight/components/overrides/TwoColumnContent.astro +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/packages/lucode-starlight/components/overrides/parts/Drawer.astro +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/packages/lucode-starlight/components/overrides/parts/MobileMenuToggle.astro +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/packages/lucode-starlight/components/overrides/parts/NavBar.astro +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/packages/lucode-starlight/components/overrides/parts/SidebarSublist.astro +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/packages/lucode-starlight/components/overrides/parts/toc/TableOfContentsList.astro +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/packages/lucode-starlight/components/overrides/parts/toc/starlight-toc.ts +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/packages/lucode-starlight/core/config/constants.ts +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/packages/lucode-starlight/core/config/expresive-code.ts +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/packages/lucode-starlight/core/config/override.ts +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/packages/lucode-starlight/core/config/schemas.ts +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/packages/lucode-starlight/core/config/vite.ts +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/packages/lucode-starlight/core/plugin.ts +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/packages/lucode-starlight/global.d.ts +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/packages/lucode-starlight/index.ts +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/packages/lucode-starlight/package.json +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/packages/lucode-starlight/schema.ts +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/packages/lucode-starlight/styles/base.css +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/packages/lucode-starlight/styles/layers.css +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/packages/lucode-starlight/styles/theme.css +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/packages/lucode-starlight/user-components.ts +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/packages/lucode-starlight/virtual.d.ts +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/renovate.json +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/test/lucode-starlight/config.test.ts +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/test/lucode-starlight/plugin.test.ts +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/test/lucode-starlight/starlight-toc.test.ts +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/tsconfig.json +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/vercel.json +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/vitest.config.ts +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/examples/README.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/examples/auth/01_session_auth.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/examples/auth/02_jwt_auth.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/examples/auth/03_custom_backend.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/examples/auth/04_multiple_backends.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/examples/auth/05_router_integration.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/examples/config/.env.development +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/examples/config/.env.example +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/examples/config/.env.production +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/examples/config/01_basic_config.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/examples/config/02_web_app.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/examples/config/README.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/examples/database/01_sqlite_todo.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/examples/database/02_tortoise_notes.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/examples/database/03_tortoise_blog.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/examples/exception_handling/01_basic.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/examples/exception_handling/02_custom.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/examples/file_handling/01_upload_download.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/examples/file_handling/02_simple_upload.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/examples/getting_started/01_hello_world.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/examples/getting_started/02_basic_rest.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/examples/getting_started/03_enhanced_api.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/examples/getting_started/04_lifespan.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/examples/getting_started/05_streaming_middleware.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/examples/getting_started/README.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/examples/hashing/01_basic_password_hashing.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/examples/hashing/01_basic_usage.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/examples/hashing/02_multiple_algorithms.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/examples/hashing/02_schemes.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/examples/hashing/03_web_api.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/examples/hashing/README.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/examples/middleware/01_basic.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/examples/middleware/02_class_based.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/examples/middleware/03_asgi_middleware.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/examples/request_inputs/01_json_data.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/examples/request_inputs/02_form_data.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/examples/request_inputs/03_raw_body.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/examples/request_inputs/04_streaming.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/examples/responses/01_return_values.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/examples/responses/02_json_with_headers.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/examples/responses/03_response_types.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/examples/responses/04_response_classes.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/examples/routing/01_basic_routes.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/examples/routing/02_path_parameters.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/examples/routing/03_routes_class.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/examples/routing/04_routers.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/examples/templating/01_basic.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/examples/templating/02_inheritance.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/examples/templating/03_custom_filters.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/examples/templating/README.md +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/examples/templating/requirements.txt +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/examples/templating/templates/index.html +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/examples/templating/templates/user_profile.html +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/examples/validation/01_advanced.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/examples/validation/02_pydantic.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/examples/websockets/01_basic_echo.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/examples/websockets/02_chat_rooms.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/examples/websockets/03_custom_history.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/requirements-dev.txt +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/__main__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/_internals/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/_internals/_middleware.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/_internals/lazy.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/admin/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/admin/auth.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/admin/default_user.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/admin/models.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/admin/registry.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/admin/router.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/admin/routes.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/admin/static/logo.png +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/admin/templates/base.html +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/admin/templates/create.html +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/admin/templates/dashboard.html +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/admin/templates/delete.html +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/admin/templates/detail.html +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/admin/templates/list.html +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/admin/templates/login.html +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/admin/templates/query.html +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/admin/templates/update.html +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/admin/templating.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/application.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/auth/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/auth/apikey/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/auth/apikey/backend.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/auth/apikey/mixins.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/auth/apikey/models.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/auth/backend.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/auth/exceptions.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/auth/jwt_auth/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/auth/jwt_auth/backend.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/auth/jwt_auth/mixins.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/auth/jwt_auth/models.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/auth/jwt_auth/tokens.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/auth/middleware.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/auth/model.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/auth/session_auth/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/auth/session_auth/backend.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/auth/session_auth/guard.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/auth/session_auth/mixins.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/auth/session_auth/models.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/auth/use_auth.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/cache/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/cache/backends.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/cache/base.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/cache/config.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/cache/decorator.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/config/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/config/core.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/console/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/console/arguments.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/console/command.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/console/console.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/console/exceptions.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/console/output.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/console/prompt.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/console/style.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/console/terminal.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/core/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/core/converters.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/core/dependencies/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/core/dependencies/base.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/core/encoding.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/core/error/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/core/error/handler.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/core/helpers/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/core/helpers/async_helpers.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/core/helpers/deprecation.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/core/http/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/core/http/cookies.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/core/http/request.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/core/routing/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/core/routing/_utils.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/core/routing/base.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/core/routing/grouping.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/core/routing/websocket.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/encoding.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/env/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/env/_loader.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/events/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/events/core.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/events/emitter.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/events/enums.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/events/exceptions.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/events/mixins.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/events/transports/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/events/transports/base.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/events/transports/memory.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/events/transports/persistent.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/events/transports/record.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/events/transports/redis.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/events/types.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/exception_handler.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/exceptions.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/formparser.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/frontend.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/graphql/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/graphql/handler.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/handlers/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/handlers/not_found.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/hashing/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/hashing/config.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/hashing/core.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/hashing/exceptions.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/hashing/utils.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/helpers/__init__.py +0 -0
- {sillo_framework-0.2.0/sillo/utils → sillo_framework-0.2.1/sillo/helpers}/concurrency.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/helpers/files.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/helpers/hashing.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/helpers/html.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/helpers/jwt.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/helpers/network.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/helpers/retry.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/helpers/strings.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/helpers/text.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/http/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/http/accepts.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/http/client/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/http/client/caching.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/http/client/client.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/http/client/config.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/http/client/errors.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/http/client/middleware.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/http/client/models.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/http/client/retry.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/http/client/transport.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/http/client/utils.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/http/etag.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/http/lifecycle/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/http/lifecycle/context.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/http/lifecycle/helpers.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/http/lifecycle/middleware.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/http/sse.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/http/status.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/logging.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/mail/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/mail/client.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/mail/config.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/mail/models.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/middleware/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/middleware/base.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/middleware/gzip.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/middleware/security.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/middleware/utils.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/normalize/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/normalize/helpers.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/normalize/middleware.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/objects/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/objects/common.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/objects/datastructures.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/objects/routing.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/openapi/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/openapi/_builder.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/openapi/config.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/openapi/models.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/openapi/ui.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/openapi/utils.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/pagination.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/parameters.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/permissions/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/permissions/mixins.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/permissions/models.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/py.typed +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/record/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/record/_bridge.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/record/casting.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/record/collection.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/record/commands/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/record/commands/functions.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/record/config.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/record/console.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/record/events.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/record/exceptions.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/record/factories.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/record/fields.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/record/helpers.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/record/logging.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/record/manager.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/record/mixins/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/record/models.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/record/pagination.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/record/pydantic.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/record/queries.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/record/scopes.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/record/transactions.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/route_builder.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/security/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/security/cors/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/security/cors/_middleware.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/security/cors/config.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/security/csrf/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/security/ratelimit/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/security/ratelimit/_middleware.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/security/ratelimit/backends/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/security/ratelimit/backends/base.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/security/ratelimit/backends/memory.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/security/ratelimit/backends/record.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/security/ratelimit/backends/redis.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/security/ratelimit/config.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/security/ratelimit/models.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/security/ratelimit/strategies/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/security/ratelimit/strategies/base.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/security/ratelimit/strategies/fixed_window.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/security/ratelimit/strategies/sliding_window.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/security/ratelimit/strategies/token_bucket.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/security/shield.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/server/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/server/_uvicorn.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/server/access.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/server/banner.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/server/inspector.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/server/logs.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/server/server.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/server/theme.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/session/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/session/base.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/session/file.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/static.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/templating/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/templating/utils.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/testclient/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/testclient/_internal/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/testclient/_internal/inputs.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/testclient/_internal/transport.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/testclient/_internal/types.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/testclient/_internal/utils.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/testclient/_internal/websockets.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/testclient/async_client.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/testclient/base.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/testclient/exceptions.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/testclient/helpers.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/types.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/users/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/users/base.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/users/commands.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/users/console.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/users/managers.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/users/protocol.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/users/simple.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/validation/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/validation/compiler.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/validation/errors.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/validation/fields.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/websockets/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/websockets/base.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/websockets/channels.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/websockets/consumers.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/websockets/errors.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/websockets/history.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/websockets/status.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/websockets/utils.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/work/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/work/backends.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/work/background/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/work/background/supervisor.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/work/background/tasks.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/work/commands.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/work/console.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/work/dependency.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/work/middleware.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/work/queue/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/work/queue/batches.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/work/queue/connection.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/work/queue/events.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/work/queue/failed.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/work/queue/job.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/work/queue/listener.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/work/queue/middleware.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/work/queue/payloads.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/work/queue/workers.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/work/scheduler/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/work/scheduler/cron.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/work/scheduler/jobs.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/work/scheduler/manager.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/work/scheduler/middleware.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/work/scheduler/triggers.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/work/task.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/work/types.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/conftest.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/static/example.txt +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/static/page.html +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/static/script.js +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/static/style.css +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/static/subfolder/subfile.txt +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/templates/base.html +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/templates/product.html +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/templates/welcome.html +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_admin/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_admin/test_admin_export_query.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_admin/test_admin_helpers.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_admin/test_admin_models.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_admin/test_admin_startup_order.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_admin/test_admin_views.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_applications/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_applications/test_app_class_name.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_applications/test_application.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_applications/test_middleware_chain_cache.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_applications/test_route_kwargs.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_auth/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_auth/test_apikey_backend.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_auth/test_auth_middleware.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_auth/test_auth_utilities.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_auth/test_custom_backend.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_auth/test_jwt_backend.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_auth/test_jwt_user_mixin.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_auth/test_security_schemes.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_auth/test_session_backend.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_auth/test_session_guard.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_auth/test_session_model_extend.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_auth/test_token_for_user.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_auth/test_use_auth.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_auth/test_user_models.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_cache/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_cache/test_base.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_cache/test_decorator.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_cache/test_memory_cache.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_cache/test_redis_backend.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_cache/test_redis_cache_fake.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_config/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_config/conftest.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_config/test_config_loading.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_config/test_env_loading.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_console/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_console/test_arguments.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_console/test_builtin_record.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_console/test_builtin_users.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_console/test_builtin_work.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_console/test_cli.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_console/test_command.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_console/test_console.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_console/test_output.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_console/test_prompt.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_console/test_style.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_console/test_terminal.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_cors/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_cors/test_configuration.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_cors/test_credentials_security.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_cors/test_error_handling.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_cors/test_integration.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_cors/test_preflight_requests.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_cors/test_simple_requests.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_dependencies/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_dependencies/test_dependency_injection.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_encoding/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_encoding/test_custom_encoder.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_encoding/test_encoding_shim.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_encoding/test_jsonable_encoder.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_encoding/test_passthrough_fast_path.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_env/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_env/conftest.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_env/test_load.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_env/test_parse.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_events/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_events/test_comprehensive_events.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_events/test_core_propagation.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_events/test_emitter_paths.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_events/test_events_backends.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_events/test_persistent_transport_fake.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_events/test_record_transport.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_events/test_redis_transport_fake.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_events/test_transport_registry_and_base.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_exception_handlers/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_exception_handlers/test_basic_exception_handlers.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_exception_handlers/test_concurrent_error_pages.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_exception_handlers/test_dispatch_internals.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_exception_handlers/test_exception_handler_integration.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_exception_handlers/test_not_found_handler.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_exception_handlers/test_server_error_debug.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_forms/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_forms/test_form_parser.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_forms/test_uploaded_file_save.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_frontend/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_frontend/test_frontend_app.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_graphql/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_graphql/test_graphql_schema.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_graphql/test_handler_paths.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_helpers/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_helpers/test_accepts.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_helpers/test_async.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_helpers/test_deprecation.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_helpers/test_files.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_helpers/test_hashing_crypto.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_helpers/test_html.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_helpers/test_jwt.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_helpers/test_network.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_helpers/test_retry.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_helpers/test_strings.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_helpers/test_text.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_http/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_http/test_accepts_middleware.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_http/test_accepts_negotiation.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_http/test_cookie_parsing.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_http/test_etag_full.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_http/test_http_client.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_http/test_http_etag.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_http/test_http_module_exports.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_http/test_sse.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_lifecycle/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_lifecycle/test_context.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_lifecycle/test_request_id.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_mail/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_mail/test_mail_client.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_mail/test_mail_service.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_mail/test_mail_transport.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_middleware/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_middleware/test_app_level_middleware.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_middleware/test_asgi_middleware.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_middleware/test_gzip.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_middleware/test_internals_bridge.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_middleware/test_raw_asgi_layers.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_middleware/test_route_level_middleware.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_middleware/test_router_level_middleware.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_middleware/test_security_middleware.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_middleware/test_use_for_route.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_normalize/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_normalize/test_helpers.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_normalize/test_middleware.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_objects/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_objects/test_headers.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_objects/test_multidict.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_objects/test_url.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_objects/test_url_building.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_openapi/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_openapi/test_docs_ui.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_openapi/test_openapi_config.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_openapi/test_openapi_spec.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_openapi/test_openapi_utils.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_optional_imports.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_pagination/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_pagination/test_data_handlers.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_pagination/test_edge_cases.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_pagination/test_error_handling.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_pagination/test_integration.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_pagination/test_pagination_strategies.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_pagination/test_paginators.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_pagination/test_response_classes.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_pagination/test_response_paginate.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_parameters/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_parameters/test_cookie.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_parameters/test_header.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_parameters/test_nested.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_parameters/test_openapi.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_parameters/test_query.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_permissions/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_permissions/test_permissions.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_record/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_record/test_backend_config.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_record/test_collection.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_record/test_events.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_record/test_mass_assignment.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_record/test_mixins.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_record/test_model_features.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_record/test_pagination_and_exceptions.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_record/test_pydantic_bridge.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_record/test_queries.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_record/test_query_logging.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_record/test_record_commands.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_record/test_release_fixes.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_record/test_savepoints.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_record/test_seeding.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_redis/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_redis/test_redis_cache.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_redis/test_redis_transport.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_requests/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_requests/test_basic_properties.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_requests/test_body_data.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_requests/test_cookies_auth.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_requests/test_path_params.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_requests/test_query_params.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_requests/test_request_flags.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_requests/test_request_surface.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_responses/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_responses/test_abort_not_found.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_responses/test_advanced_responses.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_responses/test_basic_responses.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_responses/test_file_responses.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_responses/test_header_override.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_responses/test_headers_cookies.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_responses/test_json_serialization.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_responses/test_redirect_streaming.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_responses/test_response_properties.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_routing/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_routing/test_basic_routing.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_routing/test_converters.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_routing/test_grouping.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_routing/test_http_methods.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_routing/test_nested_routes.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_routing/test_path_parameters.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_routing/test_router_wrap_asgi.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_security/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_security/test_backends.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_security/test_middleware.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_security/test_ratelimit_redis_backend.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_security/test_record_backend.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_security/test_strategies.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_server/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_server/test_inspector.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_server/test_server_wiring.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_server/test_sillo_server.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_sessions/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_sessions/test_base.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_sessions/test_file_sessions.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_sessions/test_integration.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_sessions/test_middleware.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_sessions/test_security.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_sessions/test_settings.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_sessions/test_signed_cookies.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_small_module_gaps.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_static/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_static/test_static_files.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_supported_python_versions.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_templating/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_templating/test_template_utils.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_templating/test_templates.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_type_comments.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_users/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_users/test_password.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_users/test_user_commands.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_users/test_user_model.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_validation/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_validation/conftest.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_validation/test_body_form.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_validation/test_legacy_compat.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_validation/test_markers_unit.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_validation/test_openapi_generation.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_validation/test_params.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_validation/test_request_model.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_validation/test_response_model.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_websockets/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_websockets/test_channel_history.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_websockets/test_consumer_encodings.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_websockets/test_group_removal.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_websockets/test_history_contract.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_websockets/test_websocket_consumers.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_websockets/test_websocket_errors.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_websockets/test_websocket_groups.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_websockets/test_websocket_protocol.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_websockets/test_websocket_routing.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_websockets/test_websocket_state_machine.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_work/__init__.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_work/test_backends_full.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_work/test_background.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_work/test_events.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_work/test_job_dispatch.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_work/test_job_queue.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_work/test_job_round_trip.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_work/test_memory_backend.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_work/test_queue.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_work/test_queue_worker.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_work/test_redis_queue_reliability.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_work/test_routes.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_work/test_scheduler.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_work/test_scheduler_middleware.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_work/test_task.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_work/test_work_commands.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_work/test_work_di.py +0 -0
- {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_work/work_jobs.py +0 -0
|
@@ -5,6 +5,14 @@ All notable changes to Sillo are documented here.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [0.2.1] - 2026-08-19
|
|
9
|
+
|
|
10
|
+
### Changed
|
|
11
|
+
|
|
12
|
+
- Replaced `itsdangerous` with an internal `sillo.helpers.signing` implementation for CSRF tokens and signed session cookies.
|
|
13
|
+
- Moved `sillo.utils` modules into `sillo.helpers`.
|
|
14
|
+
- Fixed `typing-extensions` dependency marker to require the package on Python < 3.13.
|
|
15
|
+
|
|
8
16
|
## [Unreleased]
|
|
9
17
|
|
|
10
18
|
## [0.2.0] - 2026-08-18
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: sillo-framework
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.1
|
|
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'
|
{sillo_framework-0.2.0 → sillo_framework-0.2.1}/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.2.1}/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
|
{sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/concurrency.md
RENAMED
|
@@ -14,7 +14,7 @@ head:
|
|
|
14
14
|
|
|
15
15
|
# Thread Pool
|
|
16
16
|
|
|
17
|
-
`sillo.
|
|
17
|
+
`sillo.helpers.concurrency` provides one utility: `run_in_threadpool`. It moves a synchronous function call to a shared thread pool so the event loop isn't blocked.
|
|
18
18
|
|
|
19
19
|
For all other async concurrency patterns (`asyncio.gather`,
|
|
20
20
|
`asyncio.TaskGroup`, `asyncio.create_task`, `asyncio.Event`, `asyncio.Lock`)
|
|
@@ -26,7 +26,7 @@ already available.
|
|
|
26
26
|
## run_in_threadpool
|
|
27
27
|
|
|
28
28
|
```python
|
|
29
|
-
from sillo.
|
|
29
|
+
from sillo.helpers.concurrency import run_in_threadpool
|
|
30
30
|
```
|
|
31
31
|
|
|
32
32
|
Moves a blocking or CPU-intensive function to a background thread and returns the result as an awaitable. The thread pool is shared globally and reused across calls.
|
|
@@ -34,7 +34,7 @@ Moves a blocking or CPU-intensive function to a background thread and returns th
|
|
|
34
34
|
### Basic usage
|
|
35
35
|
|
|
36
36
|
```python
|
|
37
|
-
from sillo.
|
|
37
|
+
from sillo.helpers.concurrency import run_in_threadpool
|
|
38
38
|
|
|
39
39
|
def resize_image(image: bytes, width: int, height: int) -> bytes:
|
|
40
40
|
# CPU-intensive work that would block the event loop
|
|
@@ -56,7 +56,7 @@ result = await run_in_threadpool(some_func, arg1, arg2, key="value")
|
|
|
56
56
|
Exceptions from the sync function propagate normally:
|
|
57
57
|
|
|
58
58
|
```python
|
|
59
|
-
from sillo.
|
|
59
|
+
from sillo.helpers.concurrency import run_in_threadpool
|
|
60
60
|
|
|
61
61
|
def risky() -> str:
|
|
62
62
|
raise ValueError("boom")
|
|
@@ -68,9 +68,12 @@ sillo provides flexible configuration to customize CSRF protection for your appl
|
|
|
68
68
|
- **Recommended**: `True` in production environments
|
|
69
69
|
- Example: `CSRFConfig(enabled=True)`
|
|
70
70
|
|
|
71
|
-
- **`secret_key`** (string, required)
|
|
71
|
+
- **`secret_key`** (string, required when `enabled=True`)
|
|
72
72
|
- Cryptographic key used to sign CSRF tokens
|
|
73
|
-
- **Security Note**: Keep this secret and consistent across application restarts
|
|
73
|
+
- **Security Note**: Keep this secret and consistent across application restarts.
|
|
74
|
+
Changing it invalidates every token in flight, so the next request from each
|
|
75
|
+
open page is a 403 until it reloads.
|
|
76
|
+
- Enabling CSRF without one raises `ValueError` at startup
|
|
74
77
|
- Example: `CSRFConfig(secret_key="your-secure-key-123")`
|
|
75
78
|
|
|
76
79
|
### URL Configuration
|
|
@@ -83,7 +86,16 @@ sillo provides flexible configuration to customize CSRF protection for your appl
|
|
|
83
86
|
- **`exempt_urls`** (list of strings, default: `[]`)
|
|
84
87
|
- URL patterns excluded from CSRF protection
|
|
85
88
|
- Takes precedence over `required_urls`
|
|
86
|
-
-
|
|
89
|
+
- Patterns are regular expressions and must match the **whole** path, so
|
|
90
|
+
`/webhooks` does not exempt `/webhooks/stripe` — write `/webhooks/.*`
|
|
91
|
+
- Example: `["/api/public/.*", "/webhooks/stripe"]`
|
|
92
|
+
|
|
93
|
+
- **`sensitive_cookies`** (list of strings, default: `[]`)
|
|
94
|
+
- Cookies that carry ambient authority, typically your session cookie
|
|
95
|
+
- When set, only requests presenting one of them are checked — which is what
|
|
96
|
+
lets an API authenticated by an `Authorization` header skip the token
|
|
97
|
+
- Naming none keeps the safe default of treating every request as sensitive
|
|
98
|
+
- Example: `CSRFConfig(sensitive_cookies=["session_id"])`
|
|
87
99
|
|
|
88
100
|
### HTTP Methods
|
|
89
101
|
|
|
@@ -104,9 +116,14 @@ sillo provides flexible configuration to customize CSRF protection for your appl
|
|
|
104
116
|
- **Security Best Practice**: Set to `True` in production
|
|
105
117
|
- Example: `CSRFConfig(cookie_secure=True)`
|
|
106
118
|
|
|
107
|
-
- **`cookie_httponly`** (boolean, default: `
|
|
119
|
+
- **`cookie_httponly`** (boolean, default: `False`)
|
|
108
120
|
- Prevents JavaScript from accessing the cookie
|
|
109
|
-
- **
|
|
121
|
+
- **Leave this off.** The double-submit pattern requires the page to read
|
|
122
|
+
this cookie and echo it back in `header_name`, which `HttpOnly` makes
|
|
123
|
+
impossible — an `HttpOnly` CSRF cookie cannot be used by any JavaScript
|
|
124
|
+
client. The token is not a credential: it is only useful to someone who
|
|
125
|
+
can already read the page. Turn it on only if every form is server-rendered
|
|
126
|
+
with `{{ csrf_token }}` and nothing submits over AJAX.
|
|
110
127
|
- Example: `CSRFConfig(cookie_httponly=True)`
|
|
111
128
|
|
|
112
129
|
- **`cookie_samesite`** (string, default: `"lax"`)
|
|
@@ -121,9 +138,12 @@ sillo provides flexible configuration to customize CSRF protection for your appl
|
|
|
121
138
|
- HTTP header name for sending CSRF tokens in AJAX requests
|
|
122
139
|
- Example: `CSRFConfig(header_name="X-CSRF-TOKEN")`
|
|
123
140
|
|
|
124
|
-
- **`form_field`** (string, default: `"
|
|
141
|
+
- **`form_field`** (string, default: `"csrftoken"`)
|
|
125
142
|
- Form field name for CSRF tokens in HTML forms
|
|
126
143
|
- Must match your form field names
|
|
144
|
+
- Read for both `application/x-www-form-urlencoded` and
|
|
145
|
+
`multipart/form-data` bodies, so file-upload forms — which cannot set a
|
|
146
|
+
header — can submit a token too
|
|
127
147
|
- Example: `CSRFConfig(form_field="_csrf_token")`
|
|
128
148
|
|
|
129
149
|
- **`cookie_path`** (string, default: `"/"`)
|
{sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/sessions.md
RENAMED
|
@@ -112,12 +112,27 @@ because one of the two would otherwise have to win silently.
|
|
|
112
112
|
| `session_cookie_secure` | Send the cookie over HTTPS only | `True` |
|
|
113
113
|
| `session_cookie_httponly` | Keep the cookie out of reach of JavaScript | `True` |
|
|
114
114
|
| `session_cookie_samesite` | SameSite attribute (`"lax"`, `"strict"`, or `"none"`) | `"lax"` |
|
|
115
|
-
| `session_expiration_time` | Session lifetime in seconds
|
|
115
|
+
| `session_expiration_time` | Session lifetime in seconds, enforced in the signature | `86400` (24 hours) |
|
|
116
116
|
| `session_permanent` | Whether the cookie carries an expiry at all | `True` |
|
|
117
117
|
| `session_refresh_each_request` | Re-send the cookie on every response, sliding expiry | `True` |
|
|
118
118
|
| `session_file_storage_path` | Directory the file backend writes to | `None` |
|
|
119
119
|
| `manager` | A session backend instance | `SignedSessionManager` |
|
|
120
120
|
|
|
121
|
+
:::caution[The signed cookie is signed, not encrypted]
|
|
122
|
+
With the default backend the session's contents travel in the cookie. Anyone
|
|
123
|
+
holding it can base64-decode it and read every key — put identifiers in a
|
|
124
|
+
session, not secrets.
|
|
125
|
+
|
|
126
|
+
`session_expiration_time` is checked against a timestamp inside the signature,
|
|
127
|
+
not just written to the cookie's `Expires`, so a captured cookie stops working
|
|
128
|
+
once it lapses. Nothing else revokes one: there is no server-side record to
|
|
129
|
+
delete, so signing out clears the browser's copy but cannot invalidate a copy
|
|
130
|
+
someone else kept. Use a server-side backend where that matters.
|
|
131
|
+
|
|
132
|
+
Browsers cap a cookie at about 4096 bytes and drop larger ones without saying
|
|
133
|
+
so. Sillo warns when a session cookie crosses that line.
|
|
134
|
+
:::
|
|
135
|
+
|
|
121
136
|
:::caution
|
|
122
137
|
**`session_cookie_secure` in local development.** It defaults to `True`, and a
|
|
123
138
|
browser will not return a `Secure` cookie over plain `http://`. Serving over
|
|
@@ -10,7 +10,7 @@ packages = ["sillo"]
|
|
|
10
10
|
|
|
11
11
|
[project]
|
|
12
12
|
name = "sillo-framework"
|
|
13
|
-
version = "0.2.
|
|
13
|
+
version = "0.2.1"
|
|
14
14
|
description = "Python with the pieces already in place: an async web framework whose ORM, auth, admin, queues, scheduler and WebSockets share one configuration model."
|
|
15
15
|
authors = [
|
|
16
16
|
{name = "Chidebele Dunamis", email = "techwithdunamix@gmail.com"}
|
|
@@ -62,10 +62,9 @@ classifiers = [
|
|
|
62
62
|
dependencies = [
|
|
63
63
|
"uvicorn>=0.27.0",
|
|
64
64
|
"anyio==4.14.1",
|
|
65
|
-
"itsdangerous>=2.1.2",
|
|
66
65
|
"python-multipart>=0.0.6",
|
|
67
66
|
"pydantic>=2.0,<3.0",
|
|
68
|
-
"typing-extensions>=4.12.2; python_version<'3.
|
|
67
|
+
"typing-extensions>=4.12.2; python_version<'3.13'",
|
|
69
68
|
]
|
|
70
69
|
|
|
71
70
|
# CORE: Only includes what's required for any sillo app (HTTP routing, config, password hashing)
|
|
@@ -51,6 +51,37 @@ Send = typing.Callable[[Message], typing.Awaitable[None]]
|
|
|
51
51
|
|
|
52
52
|
JSONType = Union[str, int, float, bool, None, dict[str, Any], list[Any]]
|
|
53
53
|
|
|
54
|
+
#: The expiry :meth:`BaseResponse.delete_cookie` sends. A fixed instant in the
|
|
55
|
+
#: past, so it does not depend on the client's clock agreeing with the
|
|
56
|
+
#: server's.
|
|
57
|
+
_EXPIRED = "Thu, 01 Jan 1970 00:00:00 GMT"
|
|
58
|
+
|
|
59
|
+
#: Punctuation a cookie value may carry unescaped: ``http.cookies._LegalChars``
|
|
60
|
+
#: — anything outside it makes ``SimpleCookie`` fall back to backslash-quoting
|
|
61
|
+
#: the whole value — less ``%``, which is spent on being the escape character.
|
|
62
|
+
#: Alphanumerics are always left alone by ``quote``. Base64url tokens are made
|
|
63
|
+
#: of ``-``, ``_``, ``.`` and alphanumerics, so they pass through untouched.
|
|
64
|
+
_COOKIE_SAFE = "!#$&'*+-.:^_`|~"
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
def _encode_cookie_value(value: str) -> str:
|
|
68
|
+
"""Percent-encode *value* so it survives a round trip through a browser.
|
|
69
|
+
|
|
70
|
+
Handed a value it considers illegal, ``SimpleCookie`` wraps it in double
|
|
71
|
+
quotes and escapes the awkward characters as backslash-octal. Nothing
|
|
72
|
+
undoes that:
|
|
73
|
+
:func:`~sillo.core.http.cookies.parse_cookies` percent-decodes, as browsers
|
|
74
|
+
and ``document.cookie`` do, so ``set_cookie("flash", "a=b/c%20d")`` came
|
|
75
|
+
back as ``'"a=b/c d"'`` — quotes still attached and the escape decoded
|
|
76
|
+
that nobody wrote.
|
|
77
|
+
|
|
78
|
+
Percent-encoding here instead makes writing and reading each other's
|
|
79
|
+
inverse, and matches what ``encodeURIComponent`` produces on the client.
|
|
80
|
+
Ordinary values — base64url tokens, identifiers, numbers — contain nothing
|
|
81
|
+
outside the safe set and pass through untouched.
|
|
82
|
+
"""
|
|
83
|
+
return quote(value, safe=_COOKIE_SAFE)
|
|
84
|
+
|
|
54
85
|
|
|
55
86
|
class MalformedRangeHeader(Exception):
|
|
56
87
|
"""Exception raised when a Range header cannot be parsed.
|
|
@@ -367,7 +398,7 @@ class BaseResponse:
|
|
|
367
398
|
or ``"none"`` (case-insensitive).
|
|
368
399
|
"""
|
|
369
400
|
cookie: http.cookies.BaseCookie[str] = http.cookies.SimpleCookie()
|
|
370
|
-
cookie[key] = value
|
|
401
|
+
cookie[key] = _encode_cookie_value(value)
|
|
371
402
|
if max_age is not None:
|
|
372
403
|
cookie[key]["max-age"] = max_age
|
|
373
404
|
if expires is not None:
|
|
@@ -389,6 +420,15 @@ class BaseResponse:
|
|
|
389
420
|
"lax",
|
|
390
421
|
"none",
|
|
391
422
|
], "samesite must be either 'strict', 'lax' or 'none'"
|
|
423
|
+
if samesite.lower() == "none" and not secure:
|
|
424
|
+
# Browsers reject SameSite=None without Secure and drop the
|
|
425
|
+
# cookie without telling anyone, so the setting that was meant
|
|
426
|
+
# to allow cross-site use instead switches the cookie off.
|
|
427
|
+
raise ValueError(
|
|
428
|
+
f"Cookie {key!r} sets samesite='none' without secure=True. "
|
|
429
|
+
f"Browsers reject that combination and drop the cookie "
|
|
430
|
+
f"silently. Pass secure=True, or use samesite='lax'."
|
|
431
|
+
)
|
|
392
432
|
cookie[key]["samesite"] = samesite
|
|
393
433
|
cookie_val = cookie.output(header="").strip()
|
|
394
434
|
self.set_header("set-cookie", cookie_val)
|
|
@@ -396,14 +436,20 @@ class BaseResponse:
|
|
|
396
436
|
return cookie
|
|
397
437
|
|
|
398
438
|
def delete_cookie(
|
|
399
|
-
self,
|
|
439
|
+
self,
|
|
440
|
+
key: str,
|
|
441
|
+
path: str = "/",
|
|
442
|
+
domain: str | None = None,
|
|
443
|
+
secure: bool | None = False,
|
|
444
|
+
httponly: bool | None = False,
|
|
445
|
+
samesite: typing.Literal["lax", "strict", "none"] | None = "lax",
|
|
400
446
|
) -> Any:
|
|
401
447
|
"""Delete a cookie by setting its expiration to the past.
|
|
402
448
|
|
|
403
|
-
Sends a ``Set-Cookie`` header with an empty value and
|
|
404
|
-
instructing the client to remove the specified cookie. The path
|
|
405
|
-
domain must match those used when the cookie was originally set
|
|
406
|
-
the deletion to take effect.
|
|
449
|
+
Sends a ``Set-Cookie`` header with an empty value and an expiry in the
|
|
450
|
+
past, instructing the client to remove the specified cookie. The path
|
|
451
|
+
and domain must match those used when the cookie was originally set
|
|
452
|
+
for the deletion to take effect.
|
|
407
453
|
|
|
408
454
|
Args:
|
|
409
455
|
key: The name of the cookie to delete.
|
|
@@ -411,6 +457,13 @@ class BaseResponse:
|
|
|
411
457
|
match the original cookie's path. Defaults to ``"/"``.
|
|
412
458
|
domain: The domain where the cookie was originally set. Must
|
|
413
459
|
match the original cookie's domain. Defaults to ``None``.
|
|
460
|
+
secure: Whether to repeat the ``Secure`` attribute. Needed to
|
|
461
|
+
delete a cookie whose name carries the ``__Secure-`` or
|
|
462
|
+
``__Host-`` prefix, since browsers reject a ``Set-Cookie`` for
|
|
463
|
+
one of those names that is not marked ``Secure`` — so without
|
|
464
|
+
it the deletion is ignored and the user stays signed in.
|
|
465
|
+
httponly: Whether to repeat the ``HttpOnly`` attribute.
|
|
466
|
+
samesite: Whether to repeat the ``SameSite`` attribute.
|
|
414
467
|
|
|
415
468
|
Returns:
|
|
416
469
|
The underlying ``SimpleCookie`` object for advanced manipulation.
|
|
@@ -418,8 +471,21 @@ class BaseResponse:
|
|
|
418
471
|
Raises:
|
|
419
472
|
None: This method does not raise exceptions.
|
|
420
473
|
"""
|
|
474
|
+
# A fixed date in the past, not `expires=0`. `SimpleCookie` reads a
|
|
475
|
+
# numeric expires as an offset from now, so `0` rendered as the current
|
|
476
|
+
# time -- which is only in the past if the client's clock agrees with
|
|
477
|
+
# the server's, and a client running a few seconds behind kept the
|
|
478
|
+
# cookie.
|
|
421
479
|
cookie = self.set_cookie(
|
|
422
|
-
key=key,
|
|
480
|
+
key=key,
|
|
481
|
+
value="",
|
|
482
|
+
max_age=0,
|
|
483
|
+
expires=_EXPIRED,
|
|
484
|
+
path=path,
|
|
485
|
+
domain=domain,
|
|
486
|
+
secure=secure,
|
|
487
|
+
httponly=httponly,
|
|
488
|
+
samesite=samesite,
|
|
423
489
|
)
|
|
424
490
|
|
|
425
491
|
return cookie
|
|
@@ -1838,12 +1904,23 @@ class Responder:
|
|
|
1838
1904
|
key: str,
|
|
1839
1905
|
path: str = "/",
|
|
1840
1906
|
domain: str | None = None,
|
|
1907
|
+
secure: bool | None = False,
|
|
1908
|
+
httponly: bool | None = False,
|
|
1909
|
+
samesite: typing.Literal["lax", "strict", "none"] | None = "lax",
|
|
1841
1910
|
):
|
|
1842
|
-
"""Delete a response cookie.
|
|
1911
|
+
"""Delete a response cookie.
|
|
1912
|
+
|
|
1913
|
+
The security attributes have to match the ones the cookie was set with
|
|
1914
|
+
closely enough for the browser to accept the deletion — see
|
|
1915
|
+
:meth:`BaseResponse.delete_cookie`.
|
|
1916
|
+
"""
|
|
1843
1917
|
self._response.delete_cookie(
|
|
1844
1918
|
key=key,
|
|
1845
1919
|
path=path,
|
|
1846
1920
|
domain=domain,
|
|
1921
|
+
secure=secure,
|
|
1922
|
+
httponly=httponly,
|
|
1923
|
+
samesite=samesite,
|
|
1847
1924
|
)
|
|
1848
1925
|
|
|
1849
1926
|
return self
|
|
@@ -212,8 +212,13 @@ def unsign_value(
|
|
|
212
212
|
match the secret used during signing.
|
|
213
213
|
algorithm: The hash algorithm name used for HMAC. Must match the
|
|
214
214
|
algorithm used during signing. Defaults to ``"sha256"``.
|
|
215
|
-
max_age:
|
|
216
|
-
|
|
215
|
+
max_age: Not supported. ``sign_value`` puts no timestamp in the token,
|
|
216
|
+
so there is nothing here to measure an age against. Passing it
|
|
217
|
+
raises rather than being quietly ignored, which is what this did
|
|
218
|
+
before — a caller who set it believed they had bounded the
|
|
219
|
+
token's life and had not. Use
|
|
220
|
+
:class:`sillo.helpers.signing.URLSafeTimedSerializer` when a signed
|
|
221
|
+
value needs to expire.
|
|
217
222
|
|
|
218
223
|
Returns:
|
|
219
224
|
The original plaintext string value that was signed.
|
|
@@ -221,7 +226,15 @@ def unsign_value(
|
|
|
221
226
|
Raises:
|
|
222
227
|
BadSignature: If the signature is invalid, the token format is
|
|
223
228
|
malformed, or the secret does not match.
|
|
229
|
+
NotImplementedError: If *max_age* is given.
|
|
224
230
|
"""
|
|
231
|
+
if max_age is not None:
|
|
232
|
+
raise NotImplementedError(
|
|
233
|
+
"unsign_value() cannot enforce max_age: sign_value() writes no "
|
|
234
|
+
"timestamp into the token, so its age is unknowable. Use "
|
|
235
|
+
"sillo.helpers.signing.URLSafeTimedSerializer for values that expire."
|
|
236
|
+
)
|
|
237
|
+
|
|
225
238
|
secret_bytes: bytes
|
|
226
239
|
if isinstance(secret, str):
|
|
227
240
|
secret_bytes = secret.encode()
|
|
@@ -229,14 +242,23 @@ def unsign_value(
|
|
|
229
242
|
secret_bytes = secret
|
|
230
243
|
|
|
231
244
|
try:
|
|
232
|
-
payload_b64,
|
|
233
|
-
|
|
245
|
+
payload_b64, separator, signature = signed.rpartition(".")
|
|
246
|
+
if not separator:
|
|
247
|
+
raise BadSignature("Invalid signed value")
|
|
248
|
+
|
|
249
|
+
# Restore exactly the padding that was stripped. Appending a fixed
|
|
250
|
+
# "==" happened to decode for the lengths tried, but it is not the
|
|
251
|
+
# inverse of `rstrip("=")` and leaves the format resting on how
|
|
252
|
+
# leniently `b64decode` treats over-padding.
|
|
253
|
+
value = base64.urlsafe_b64decode(
|
|
254
|
+
payload_b64 + "=" * (-len(payload_b64) % 4)
|
|
255
|
+
).decode()
|
|
234
256
|
|
|
235
257
|
expected = _hmac.new(secret_bytes, value.encode(), algorithm).hexdigest()
|
|
236
258
|
if not _hmac.compare_digest(expected, signature):
|
|
237
259
|
raise BadSignature("Invalid signature")
|
|
238
260
|
except Exception:
|
|
239
|
-
raise BadSignature("Invalid signed value")
|
|
261
|
+
raise BadSignature("Invalid signed value") from None
|
|
240
262
|
|
|
241
263
|
return value
|
|
242
264
|
|