sillo-framework 0.0.2a2__tar.gz → 0.0.2a3__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.0.2a2 → sillo_framework-0.0.2a3}/CHANGELOG.md +19 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/PKG-INFO +1 -1
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/pyproject.toml +2 -2
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/__init__.py +1 -1
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/core/routing/router.py +8 -6
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/openapi/_builder.py +1 -1
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_routing/test_http_methods.py +75 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/uv.lock +1 -1
- sillo_framework-0.0.2a2/.agents/skills/nexios-overview/SKILL.md +0 -61
- sillo_framework-0.0.2a2/.agents/skills/nexios-overview/agents/openai.yaml +0 -4
- sillo_framework-0.0.2a2/.agents/skills/nexios-overview/references/adoption-guide.md +0 -72
- sillo_framework-0.0.2a2/.agents/skills/nexios-overview/references/auth-state-and-security.md +0 -318
- sillo_framework-0.0.2a2/.agents/skills/nexios-overview/references/capabilities-map.md +0 -164
- sillo_framework-0.0.2a2/.agents/skills/nexios-overview/references/composition-and-lifecycle.md +0 -209
- sillo_framework-0.0.2a2/.agents/skills/nexios-overview/references/contrib-modules.md +0 -159
- sillo_framework-0.0.2a2/.agents/skills/nexios-overview/references/dependency-injection-deep-dive.md +0 -175
- sillo_framework-0.0.2a2/.agents/skills/nexios-overview/references/events-and-emitter.md +0 -124
- sillo_framework-0.0.2a2/.agents/skills/nexios-overview/references/framework-overview.md +0 -109
- sillo_framework-0.0.2a2/.agents/skills/nexios-overview/references/http-and-routing.md +0 -282
- sillo_framework-0.0.2a2/.agents/skills/nexios-overview/references/realtime-and-productivity.md +0 -201
- sillo_framework-0.0.2a2/.agents/skills/nexios-overview/references/responses-reference.md +0 -126
- sillo_framework-0.0.2a2/.agents/skills/nexios-overview/references/sessions-and-state.md +0 -125
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/.github/CODE_OF_CONDUCT.md +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/.github/CONTRIBUTING.MD +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/.github/dependabot.yml +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/.github/funding.yml +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/.github/workflows/coverage.yml +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/.github/workflows/format-code.yml +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/.github/workflows/lint.yaml +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/.github/workflows/merge-to-main.yml +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/.github/workflows/release.yml +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/.github/workflows/run-tests.yaml +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/.github/workflows/triage.yml +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/.github/workflows/type-check.yaml +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/.gitignore +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/LICENSE +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/README.md +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/SECURITY.md +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/.github/workflows/ci.yml +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/.github/workflows/deploy-docs-preview.yml +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/.github/workflows/deploy-docs.yml +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/.github/workflows/publish-package.yml +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/.gitignore +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/.prettierrc +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/README.md +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/bun.lock +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/README.md +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/astro.config.mjs +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/community-unpublished/README.md +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/community-unpublished/contribution-guide.md +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/community-unpublished/index.md +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/community-unpublished/installation.md +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/community-unpublished/integrations/jrpc.md +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/community-unpublished/integrations/mail.md +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/community-unpublished/integrations/redis.md +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/community-unpublished/integrations/scheduler.md +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/community-unpublished/integrations/tasks.md +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/community-unpublished/integrations/tortoise.md +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/community-unpublished/middleware/etag.md +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/community-unpublished/middleware/proxy.md +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/community-unpublished/middleware/timeout.md +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/community-unpublished/middleware/trusted-host.md +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/package.json +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/public/favicon.svg +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/public/logo-white.svg +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/public/logo.ico +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/public/logo.png +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/assets/houston.webp +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/assets/logo-black.svg +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/assets/logo-white.svg +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/assets/placeholder.svg +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/assets/placeholder169.svg +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/api-keys.md +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/authentication.md +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/cache.mdx +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/concurrency.md +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/configuration.md +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/console.md +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/content-negotiation.md +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/cookies.mdx +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/cors.md +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/csrf.md +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/dependency-injection.md +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/error-handling.mdx +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/events.mdx +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/file-upload.md +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/frontend.md +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/graphql.md +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/handlers.md +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/hashing.md +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/headers.mdx +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/helpers/async.mdx +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/helpers/crypto.mdx +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/helpers/deprecation.mdx +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/helpers/files.mdx +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/helpers/hashing.mdx +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/helpers/html.mdx +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/helpers/index.mdx +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/helpers/jwt.mdx +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/helpers/network.mdx +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/helpers/retry.mdx +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/helpers/strings.mdx +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/helpers/text.mdx +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/http/client.md +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/inertia.md +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/installation.mdx +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/introduction.md +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/jwt-auth.md +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/middleware.md +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/oauth/index.md +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/oauth/openapi.md +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/oauth/persisting-logins.md +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/oauth/providers.md +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/oauth/security.md +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/openapi/authentication-documentation.md +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/openapi/basic-config.png +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/openapi/bearerAuth.png +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/openapi/custom.png +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/openapi/custom2.png +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/openapi/customizing-openapi-configuration.md +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/openapi/description.png +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/openapi/documentation-ui.md +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/openapi/headers.png +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/openapi/index.md +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/openapi/multi-response.png +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/openapi/path-params.png +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/openapi/query-params.png +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/openapi/request-body.png +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/openapi/request-parameters.md +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/openapi/request-schemas.mdx +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/openapi/response-list.png +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/openapi/response-models.md +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/openapi/response.png +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/pagination.mdx +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/permissions.md +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/protecting-routes.md +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/rate-limiting.md +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/record/casting-collections.mdx +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/record/exceptions-pydantic.mdx +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/record/index.mdx +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/record/migrations.mdx +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/record/models.mdx +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/record/pagination.mdx +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/record/scopes-events.mdx +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/record/transactions-factories.mdx +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/request-info.md +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/request-inputs.md +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/request-lifecycle.md +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/request-parameters.mdx +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/routers-and-subapps.md +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/routing.mdx +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/security.md +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/sending-responses.mdx +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/serialization.md +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/services/mail.mdx +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/session-auth.md +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/sessions.md +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/start/admin.md +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/start/authentication.md +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/start/background-work.md +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/start/console.md +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/start/database.md +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/start/deployment.md +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/start/index.md +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/start/structure.md +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/start/testing.md +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/startups-and-shutdowns.mdx +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/static-files.mdx +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/streaming-response.mdx +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/templating/advanced.mdx +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/templating/index.mdx +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/url-normalization.md +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/users.md +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/validation/errors.md +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/validation/forms-and-files.md +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/validation/index.md +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/validation/openapi.md +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/validation/parameters.md +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/validation/request-bodies.md +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/validation/response-models.md +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/websockets/channels.mdx +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/websockets/consumer.mdx +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/websockets/events.mdx +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/websockets/groups.mdx +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/websockets/index.mdx +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/work/background.mdx +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/work/events.mdx +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/work/index.mdx +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/work/jobs.mdx +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/work/queue.mdx +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/work/scheduler.mdx +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/reference/components.mdx +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/reference/plugin-api.md +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/showcase/splash/banner.mdx +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/showcase/splash/centered-top.mdx +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/showcase/splash/centered.mdx +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/showcase/splash/split-left.mdx +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/showcase/splash/split-right.mdx +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/showcase/splash-pages.mdx +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/showcase/starlight-components.mdx +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/showcase/typography.md +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content.config.ts +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/styles/global.css +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/tsconfig.json +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/package.json +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/packages/lucode-starlight/README.md +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/packages/lucode-starlight/components/custom/ContainerSection.astro +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/packages/lucode-starlight/components/custom/LinkButton.astro +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/packages/lucode-starlight/components/custom/dropdown/Dropdown.astro +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/packages/lucode-starlight/components/custom/dropdown/DropdownContent.astro +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/packages/lucode-starlight/components/custom/dropdown/DropdownItem.astro +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/packages/lucode-starlight/components/custom/dropdown/DropdownLabel.astro +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/packages/lucode-starlight/components/custom/dropdown/DropdownSeparator.astro +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/packages/lucode-starlight/components/custom/dropdown/DropdownShortcut.astro +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/packages/lucode-starlight/components/custom/dropdown/DropdownTrigger.astro +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/packages/lucode-starlight/components/custom/dropdown/index.ts +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/packages/lucode-starlight/components/overrides/ContentPanel.astro +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/packages/lucode-starlight/components/overrides/Footer.astro +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/packages/lucode-starlight/components/overrides/Header.astro +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/packages/lucode-starlight/components/overrides/Hero.astro +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/packages/lucode-starlight/components/overrides/MarkdownContent.astro +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/packages/lucode-starlight/components/overrides/PageFrame.astro +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/packages/lucode-starlight/components/overrides/PageSidebar.astro +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/packages/lucode-starlight/components/overrides/PageTitle.astro +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/packages/lucode-starlight/components/overrides/Pagination.astro +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/packages/lucode-starlight/components/overrides/Search.astro +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/packages/lucode-starlight/components/overrides/Sidebar.astro +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/packages/lucode-starlight/components/overrides/SiteTitle.astro +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/packages/lucode-starlight/components/overrides/SocialIcons.astro +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/packages/lucode-starlight/components/overrides/TableOfContents.astro +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/packages/lucode-starlight/components/overrides/ThemeSelect.astro +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/packages/lucode-starlight/components/overrides/TwoColumnContent.astro +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/packages/lucode-starlight/components/overrides/parts/Drawer.astro +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/packages/lucode-starlight/components/overrides/parts/MobileMenuToggle.astro +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/packages/lucode-starlight/components/overrides/parts/NavBar.astro +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/packages/lucode-starlight/components/overrides/parts/SidebarSublist.astro +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/packages/lucode-starlight/components/overrides/parts/toc/TableOfContentsList.astro +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/packages/lucode-starlight/components/overrides/parts/toc/starlight-toc.ts +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/packages/lucode-starlight/core/config/constants.ts +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/packages/lucode-starlight/core/config/expresive-code.ts +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/packages/lucode-starlight/core/config/override.ts +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/packages/lucode-starlight/core/config/schemas.ts +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/packages/lucode-starlight/core/config/vite.ts +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/packages/lucode-starlight/core/plugin.ts +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/packages/lucode-starlight/global.d.ts +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/packages/lucode-starlight/index.ts +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/packages/lucode-starlight/package.json +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/packages/lucode-starlight/schema.ts +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/packages/lucode-starlight/styles/base.css +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/packages/lucode-starlight/styles/layers.css +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/packages/lucode-starlight/styles/theme.css +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/packages/lucode-starlight/user-components.ts +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/packages/lucode-starlight/virtual.d.ts +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/renovate.json +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/test/lucode-starlight/config.test.ts +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/test/lucode-starlight/plugin.test.ts +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/test/lucode-starlight/starlight-toc.test.ts +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/tsconfig.json +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/vercel.json +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/vitest.config.ts +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/examples/README.md +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/examples/auth/01_session_auth.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/examples/auth/02_jwt_auth.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/examples/auth/03_custom_backend.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/examples/auth/04_multiple_backends.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/examples/auth/05_router_integration.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/examples/config/.env.development +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/examples/config/.env.example +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/examples/config/.env.production +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/examples/config/01_basic_config.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/examples/config/02_web_app.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/examples/config/README.md +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/examples/database/01_sqlite_todo.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/examples/database/02_tortoise_notes.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/examples/database/03_tortoise_blog.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/examples/exception_handling/01_basic.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/examples/exception_handling/02_custom.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/examples/file_handling/01_upload_download.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/examples/file_handling/02_simple_upload.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/examples/getting_started/01_hello_world.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/examples/getting_started/02_basic_rest.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/examples/getting_started/03_enhanced_api.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/examples/getting_started/04_lifespan.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/examples/getting_started/05_streaming_middleware.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/examples/getting_started/README.md +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/examples/hashing/01_basic_password_hashing.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/examples/hashing/01_basic_usage.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/examples/hashing/02_multiple_algorithms.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/examples/hashing/02_schemes.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/examples/hashing/03_web_api.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/examples/hashing/README.md +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/examples/middleware/01_basic.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/examples/middleware/02_class_based.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/examples/middleware/03_asgi_middleware.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/examples/request_inputs/01_json_data.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/examples/request_inputs/02_form_data.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/examples/request_inputs/03_raw_body.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/examples/request_inputs/04_streaming.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/examples/responses/01_return_values.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/examples/responses/02_json_with_headers.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/examples/responses/03_response_types.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/examples/responses/04_response_classes.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/examples/routing/01_basic_routes.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/examples/routing/02_path_parameters.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/examples/routing/03_routes_class.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/examples/routing/04_routers.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/examples/templating/01_basic.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/examples/templating/02_inheritance.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/examples/templating/03_custom_filters.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/examples/templating/README.md +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/examples/templating/requirements.txt +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/examples/templating/templates/index.html +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/examples/templating/templates/user_profile.html +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/examples/validation/01_advanced.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/examples/validation/02_pydantic.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/examples/websockets/01_basic_echo.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/examples/websockets/02_chat_rooms.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/examples/websockets/03_custom_history.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/requirements-dev.txt +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/requirements.txt +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/__main__.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/_internals/__init__.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/_internals/_middleware.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/_internals/lazy.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/admin/__init__.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/admin/auth.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/admin/default_user.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/admin/models.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/admin/registry.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/admin/router.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/admin/routes.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/admin/static/logo.png +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/admin/templates/base.html +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/admin/templates/create.html +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/admin/templates/dashboard.html +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/admin/templates/delete.html +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/admin/templates/detail.html +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/admin/templates/list.html +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/admin/templates/login.html +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/admin/templates/query.html +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/admin/templates/update.html +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/admin/templating.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/application.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/auth/__init__.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/auth/apikey/__init__.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/auth/apikey/backend.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/auth/apikey/mixins.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/auth/apikey/models.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/auth/backend.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/auth/exceptions.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/auth/jwt_auth/__init__.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/auth/jwt_auth/backend.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/auth/jwt_auth/mixins.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/auth/jwt_auth/models.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/auth/jwt_auth/tokens.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/auth/middleware.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/auth/model.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/auth/session_auth/__init__.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/auth/session_auth/backend.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/auth/session_auth/guard.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/auth/session_auth/mixins.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/auth/session_auth/models.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/auth/use_auth.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/cache/__init__.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/cache/backends.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/cache/base.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/cache/config.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/cache/decorator.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/config/__init__.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/config/core.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/console/__init__.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/console/arguments.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/console/command.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/console/console.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/console/exceptions.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/console/output.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/console/prompt.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/console/style.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/console/terminal.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/core/__init__.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/core/converters.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/core/dependencies/__init__.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/core/dependencies/base.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/core/encoding.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/core/error/__init__.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/core/error/handler.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/core/helpers/__init__.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/core/helpers/async_helpers.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/core/helpers/deprecation.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/core/http/__init__.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/core/http/cookies.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/core/http/request.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/core/http/response.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/core/routing/__init__.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/core/routing/_utils.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/core/routing/base.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/core/routing/grouping.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/core/routing/websocket.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/encoding.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/events/__init__.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/events/core.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/events/emitter.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/events/enums.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/events/exceptions.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/events/mixins.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/events/transports/__init__.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/events/transports/base.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/events/transports/memory.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/events/transports/persistent.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/events/transports/record.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/events/transports/redis.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/events/types.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/exception_handler.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/exceptions.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/formparser.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/frontend.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/graphql/__init__.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/graphql/handler.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/handlers/__init__.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/handlers/not_found.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/hashing/__init__.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/hashing/config.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/hashing/core.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/hashing/exceptions.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/hashing/utils.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/helpers/__init__.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/helpers/crypto.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/helpers/files.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/helpers/hashing.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/helpers/html.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/helpers/jwt.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/helpers/network.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/helpers/retry.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/helpers/strings.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/helpers/text.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/http/__init__.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/http/accepts.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/http/client/__init__.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/http/client/caching.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/http/client/client.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/http/client/config.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/http/client/errors.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/http/client/middleware.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/http/client/models.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/http/client/retry.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/http/client/transport.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/http/client/utils.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/http/etag.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/http/lifecycle/__init__.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/http/lifecycle/context.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/http/lifecycle/helpers.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/http/lifecycle/middleware.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/http/status.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/logging.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/mail/__init__.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/mail/client.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/mail/config.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/mail/models.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/middleware/__init__.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/middleware/base.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/middleware/gzip.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/middleware/security.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/middleware/utils.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/normalize/__init__.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/normalize/helpers.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/normalize/middleware.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/objects/__init__.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/objects/common.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/objects/datastructures.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/objects/http.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/objects/routing.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/openapi/__init__.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/openapi/config.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/openapi/models.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/openapi/ui.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/openapi/utils.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/pagination.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/parameters.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/permissions/__init__.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/permissions/mixins.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/permissions/models.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/py.typed +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/record/__init__.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/record/_bridge.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/record/casting.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/record/collection.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/record/commands/__init__.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/record/commands/functions.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/record/config.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/record/console.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/record/events.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/record/exceptions.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/record/factories.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/record/fields.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/record/helpers.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/record/logging.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/record/manager.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/record/mixins/__init__.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/record/models.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/record/pagination.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/record/pydantic.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/record/queries.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/record/scopes.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/record/transactions.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/route_builder.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/security/__init__.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/security/cors/__init__.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/security/cors/_middleware.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/security/cors/config.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/security/csrf/__init__.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/security/csrf/_middleware.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/security/csrf/config.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/security/ratelimit/__init__.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/security/ratelimit/_middleware.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/security/ratelimit/backends/__init__.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/security/ratelimit/backends/base.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/security/ratelimit/backends/memory.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/security/ratelimit/backends/record.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/security/ratelimit/backends/redis.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/security/ratelimit/config.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/security/ratelimit/models.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/security/ratelimit/strategies/__init__.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/security/ratelimit/strategies/base.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/security/ratelimit/strategies/fixed_window.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/security/ratelimit/strategies/sliding_window.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/security/ratelimit/strategies/token_bucket.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/security/shield.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/session/__init__.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/session/base.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/session/config.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/session/file.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/session/middleware.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/session/session_objects.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/session/signed_cookies.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/static.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/templating/__init__.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/templating/middleware.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/templating/utils.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/testclient/__init__.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/testclient/_internal/__init__.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/testclient/_internal/inputs.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/testclient/_internal/transport.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/testclient/_internal/types.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/testclient/_internal/utils.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/testclient/_internal/websockets.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/testclient/async_client.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/testclient/base.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/testclient/exceptions.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/testclient/helpers.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/types.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/users/__init__.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/users/base.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/users/commands.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/users/console.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/users/managers.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/users/protocol.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/users/simple.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/utils/__init__.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/utils/concurrency.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/validation/__init__.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/validation/compiler.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/validation/errors.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/validation/fields.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/websockets/__init__.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/websockets/base.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/websockets/channels.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/websockets/consumers.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/websockets/errors.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/websockets/history.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/websockets/status.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/websockets/utils.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/work/__init__.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/work/backends.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/work/background/__init__.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/work/background/supervisor.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/work/background/tasks.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/work/commands.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/work/console.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/work/dependency.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/work/middleware.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/work/queue/__init__.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/work/queue/batches.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/work/queue/connection.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/work/queue/events.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/work/queue/failed.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/work/queue/job.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/work/queue/listener.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/work/queue/middleware.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/work/queue/payloads.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/work/queue/workers.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/work/scheduler/__init__.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/work/scheduler/cron.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/work/scheduler/jobs.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/work/scheduler/manager.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/work/scheduler/middleware.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/work/scheduler/triggers.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/work/task.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/work/types.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/__init__.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/conftest.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/static/example.txt +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/static/page.html +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/static/script.js +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/static/style.css +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/static/subfolder/subfile.txt +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/templates/base.html +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/templates/product.html +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/templates/welcome.html +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_admin/__init__.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_admin/test_admin_export_query.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_admin/test_admin_models.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_admin/test_admin_startup_order.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_admin/test_admin_views.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_applications/__init__.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_applications/test_app_class_name.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_applications/test_application.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_applications/test_route_kwargs.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_auth/__init__.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_auth/test_apikey_backend.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_auth/test_auth_middleware.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_auth/test_auth_utilities.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_auth/test_custom_backend.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_auth/test_jwt_backend.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_auth/test_jwt_user_mixin.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_auth/test_security_schemes.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_auth/test_session_backend.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_auth/test_session_guard.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_auth/test_token_for_user.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_auth/test_use_auth.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_auth/test_user_models.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_cache/__init__.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_cache/test_base.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_cache/test_decorator.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_cache/test_memory_cache.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_cache/test_redis_backend.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_config/__init__.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_config/conftest.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_config/test_config_loading.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_console/__init__.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_console/test_arguments.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_console/test_builtin_record.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_console/test_builtin_users.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_console/test_builtin_work.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_console/test_cli.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_console/test_command.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_console/test_console.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_console/test_output.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_console/test_prompt.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_console/test_style.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_console/test_terminal.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_cors/__init__.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_cors/test_configuration.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_cors/test_error_handling.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_cors/test_integration.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_cors/test_preflight_requests.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_cors/test_simple_requests.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_dependencies/__init__.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_dependencies/test_dependency_injection.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_encoding/__init__.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_encoding/test_custom_encoder.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_encoding/test_encoding_shim.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_encoding/test_jsonable_encoder.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_events/__init__.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_events/test_comprehensive_events.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_events/test_events_backends.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_exception_handlers/__init__.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_exception_handlers/test_basic_exception_handlers.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_exception_handlers/test_exception_handler_integration.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_exception_handlers/test_not_found_handler.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_exception_handlers/test_server_error_debug.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_forms/__init__.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_forms/test_form_parser.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_forms/test_uploaded_file_save.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_frontend/__init__.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_frontend/test_frontend_app.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_graphql/__init__.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_graphql/test_graphql_schema.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_helpers/__init__.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_helpers/test_accepts.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_helpers/test_async.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_helpers/test_concurrency.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_helpers/test_deprecation.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_helpers/test_files.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_helpers/test_hashing_crypto.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_helpers/test_html.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_helpers/test_jwt.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_helpers/test_network.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_helpers/test_retry.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_helpers/test_strings.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_helpers/test_text.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_http/__init__.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_http/test_accepts_middleware.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_http/test_accepts_negotiation.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_http/test_cookie_parsing.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_http/test_http_client.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_http/test_http_etag.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_http/test_http_module_exports.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_lifecycle/__init__.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_lifecycle/test_context.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_lifecycle/test_request_id.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_mail/__init__.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_mail/test_mail_client.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_mail/test_mail_service.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_mail/test_mail_transport.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_middleware/__init__.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_middleware/test_app_level_middleware.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_middleware/test_asgi_middleware.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_middleware/test_gzip.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_middleware/test_route_level_middleware.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_middleware/test_router_level_middleware.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_middleware/test_security_middleware.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_middleware/test_use_for_route.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_normalize/__init__.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_normalize/test_helpers.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_normalize/test_middleware.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_objects/__init__.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_objects/test_headers.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_objects/test_multidict.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_objects/test_url.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_openapi/__init__.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_openapi/test_docs_ui.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_openapi/test_openapi_config.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_openapi/test_openapi_spec.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_openapi/test_openapi_utils.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_optional_imports.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_pagination/__init__.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_pagination/test_data_handlers.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_pagination/test_edge_cases.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_pagination/test_error_handling.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_pagination/test_integration.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_pagination/test_pagination_strategies.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_pagination/test_paginators.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_pagination/test_response_classes.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_pagination/test_response_paginate.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_parameters/__init__.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_parameters/test_cookie.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_parameters/test_header.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_parameters/test_nested.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_parameters/test_openapi.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_parameters/test_query.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_permissions/__init__.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_permissions/test_permissions.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_record/__init__.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_record/test_backend_config.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_record/test_collection.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_record/test_events.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_record/test_model_features.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_record/test_queries.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_record/test_query_logging.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_record/test_record_commands.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_record/test_savepoints.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_record/test_seeding.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_redis/__init__.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_redis/test_redis_cache.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_redis/test_redis_transport.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_requests/__init__.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_requests/test_basic_properties.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_requests/test_body_data.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_requests/test_cookies_auth.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_requests/test_path_params.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_requests/test_query_params.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_requests/test_request_flags.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_responses/__init__.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_responses/test_abort_not_found.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_responses/test_advanced_responses.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_responses/test_basic_responses.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_responses/test_file_responses.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_responses/test_headers_cookies.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_responses/test_redirect_streaming.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_responses/test_response_properties.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_routing/__init__.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_routing/test_basic_routing.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_routing/test_converters.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_routing/test_grouping.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_routing/test_nested_routes.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_routing/test_path_parameters.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_routing/test_router_wrap_asgi.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_security/__init__.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_security/test_backends.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_security/test_csrf.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_security/test_middleware.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_security/test_record_backend.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_security/test_strategies.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_sessions/__init__.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_sessions/test_base.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_sessions/test_file_sessions.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_sessions/test_integration.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_sessions/test_middleware.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_sessions/test_settings.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_sessions/test_signed_cookies.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_static/__init__.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_static/test_static_files.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_templating/__init__.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_templating/test_template_utils.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_templating/test_templates.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_users/__init__.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_users/test_password.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_users/test_user_commands.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_users/test_user_model.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_validation/__init__.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_validation/conftest.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_validation/test_body_form.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_validation/test_legacy_compat.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_validation/test_markers_unit.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_validation/test_openapi_generation.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_validation/test_params.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_validation/test_request_model.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_validation/test_response_model.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_websockets/__init__.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_websockets/test_channel_history.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_websockets/test_consumer_encodings.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_websockets/test_group_removal.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_websockets/test_history_contract.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_websockets/test_websocket_consumers.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_websockets/test_websocket_errors.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_websockets/test_websocket_groups.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_websockets/test_websocket_protocol.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_websockets/test_websocket_routing.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_websockets/test_websocket_state_machine.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_work/__init__.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_work/test_background.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_work/test_events.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_work/test_job_dispatch.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_work/test_job_queue.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_work/test_job_round_trip.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_work/test_memory_backend.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_work/test_queue.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_work/test_queue_worker.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_work/test_redis_queue_reliability.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_work/test_routes.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_work/test_scheduler.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_work/test_scheduler_middleware.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_work/test_task.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_work/test_work_commands.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_work/test_work_di.py +0 -0
- {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_work/work_jobs.py +0 -0
|
@@ -7,6 +7,25 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [0.0.2a3] - 2026-08-10
|
|
11
|
+
|
|
12
|
+
### Fixed
|
|
13
|
+
|
|
14
|
+
- **A 405 response no longer permanently breaks a route.** `Route.handle`
|
|
15
|
+
assigned a fresh `JSONResponse` to `self.app` the first time a disallowed
|
|
16
|
+
method hit the route, silently replacing the real handler and its
|
|
17
|
+
middleware chain: every later request — even with an allowed method —
|
|
18
|
+
received 405 forever. The 405 is now built per request and returned
|
|
19
|
+
directly, with a proper `{"detail": "Method Not Allowed"}` body and a
|
|
20
|
+
sorted `Allow` header.
|
|
21
|
+
|
|
22
|
+
Also fixed in the same pass: the dispatch loop leaking the last
|
|
23
|
+
iteration's `matched_params` onto the first partial match, a dead
|
|
24
|
+
`prefix.rstrip("/")` no-op, and per-request rebuilding of a lowercased
|
|
25
|
+
method generator (methods are now compared in a single `set` check).
|
|
26
|
+
OpenAPI generation iterates sorted methods so the generated docs are
|
|
27
|
+
deterministic.
|
|
28
|
+
|
|
10
29
|
## [0.0.2a2] - 2026-08-09
|
|
11
30
|
|
|
12
31
|
### Removed
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: sillo-framework
|
|
3
|
-
Version: 0.0.
|
|
3
|
+
Version: 0.0.2a3
|
|
4
4
|
Summary: An async Python web framework for serious APIs, web applications, real-time systems, and business backends.
|
|
5
5
|
Project-URL: Homepage, https://github.com/sillohq/core
|
|
6
6
|
Project-URL: Repository, https://github.com/sillohq/core
|
|
@@ -10,7 +10,7 @@ packages = ["sillo"]
|
|
|
10
10
|
|
|
11
11
|
[project]
|
|
12
12
|
name = "sillo-framework"
|
|
13
|
-
version = "0.0.
|
|
13
|
+
version = "0.0.2a3"
|
|
14
14
|
description = "An async Python web framework for serious APIs, web applications, real-time systems, and business backends."
|
|
15
15
|
authors = [
|
|
16
16
|
{name = "Chidebele Dunamis", email = "techwithdunamix@gmail.com"}
|
|
@@ -296,7 +296,7 @@ ignore = [
|
|
|
296
296
|
|
|
297
297
|
[tool.commitizen]
|
|
298
298
|
name = "cz_conventional_commits"
|
|
299
|
-
version = "0.0.
|
|
299
|
+
version = "0.0.2a3"
|
|
300
300
|
version_files = [
|
|
301
301
|
"pyproject.toml:version",
|
|
302
302
|
"sillo/__init__.py:__version__"
|
|
@@ -561,7 +561,7 @@ class Route(BaseRoute):
|
|
|
561
561
|
matched_params = match.groupdict()
|
|
562
562
|
for key, value in matched_params.items():
|
|
563
563
|
matched_params[key] = self.route_info.convertor[key].convert(value)
|
|
564
|
-
is_method_allowed = method.
|
|
564
|
+
is_method_allowed = method.upper() in self.methods
|
|
565
565
|
if not is_method_allowed:
|
|
566
566
|
return MatchStatus.PARTIAL, matched_params
|
|
567
567
|
|
|
@@ -740,11 +740,12 @@ class Route(BaseRoute):
|
|
|
740
740
|
"""
|
|
741
741
|
|
|
742
742
|
if self.methods and scope["method"] not in self.methods:
|
|
743
|
-
|
|
744
|
-
{"Method Not Allowed"},
|
|
743
|
+
response = JSONResponse(
|
|
744
|
+
{"detail": "Method Not Allowed"},
|
|
745
745
|
status_code=405,
|
|
746
|
-
headers={"Allow": ", ".join(self.methods)},
|
|
746
|
+
headers={"Allow": ", ".join(sorted(self.methods))},
|
|
747
747
|
)
|
|
748
|
+
return await response(scope, receive, send)
|
|
748
749
|
|
|
749
750
|
await self.app(scope, receive, send)
|
|
750
751
|
|
|
@@ -824,7 +825,6 @@ class Router(BaseRouter):
|
|
|
824
825
|
via decorator methods. Defaults to the standard Route class.
|
|
825
826
|
"""
|
|
826
827
|
self.prefix = prefix or ""
|
|
827
|
-
self.prefix.rstrip("/")
|
|
828
828
|
self.routes = list(routes)
|
|
829
829
|
self.middleware: list[Middleware] = []
|
|
830
830
|
self.sub_routers: dict[str, Router | ASGIApp] = {}
|
|
@@ -3221,6 +3221,7 @@ class Router(BaseRouter):
|
|
|
3221
3221
|
scope["app"] = self
|
|
3222
3222
|
|
|
3223
3223
|
path_match = None
|
|
3224
|
+
path_match_params: dict[str, Any] = {}
|
|
3224
3225
|
|
|
3225
3226
|
for route in self.routes:
|
|
3226
3227
|
match, matched_params = route.match(scope)
|
|
@@ -3230,9 +3231,10 @@ class Router(BaseRouter):
|
|
|
3230
3231
|
return
|
|
3231
3232
|
elif match == MatchStatus.PARTIAL and path_match is None:
|
|
3232
3233
|
path_match = route
|
|
3234
|
+
path_match_params = matched_params
|
|
3233
3235
|
|
|
3234
3236
|
if path_match is not None:
|
|
3235
|
-
scope["route_params"] = RouteParam(
|
|
3237
|
+
scope["route_params"] = RouteParam(path_match_params)
|
|
3236
3238
|
await path_match.handle(scope, receive, send)
|
|
3237
3239
|
return
|
|
3238
3240
|
if scope.get("type") == "http":
|
|
@@ -240,7 +240,7 @@ class APIDocumentation:
|
|
|
240
240
|
openapi_path = self._convert_path_to_openapi_format(full_path)
|
|
241
241
|
|
|
242
242
|
# Process each HTTP method for this route
|
|
243
|
-
for method in route.methods:
|
|
243
|
+
for method in sorted(route.methods):
|
|
244
244
|
# Prepare request body specification
|
|
245
245
|
request_body_spec = self._build_request_body_spec(route, method)
|
|
246
246
|
|
|
@@ -321,6 +321,81 @@ def test_method_not_allowed(test_client_factory: Callable[[SilloApp], TestClient
|
|
|
321
321
|
assert post_resp.status_code != 200
|
|
322
322
|
|
|
323
323
|
|
|
324
|
+
def test_405_does_not_corrupt_the_route(
|
|
325
|
+
test_client_factory: Callable[[SilloApp], TestClient],
|
|
326
|
+
):
|
|
327
|
+
"""A 405 must be a per-request response, not a replacement of the route.
|
|
328
|
+
|
|
329
|
+
``Route.handle`` used to assign ``self.app = JSONResponse(...)`` on the
|
|
330
|
+
first disallowed method, permanently replacing the handler and its
|
|
331
|
+
middleware chain: every later request, even with an allowed method,
|
|
332
|
+
would then receive 405.
|
|
333
|
+
"""
|
|
334
|
+
app = SilloApp()
|
|
335
|
+
|
|
336
|
+
@app.get("/only-get")
|
|
337
|
+
async def only_get(request: Request, response: Response):
|
|
338
|
+
return response.text("GET only")
|
|
339
|
+
|
|
340
|
+
with test_client_factory(app) as client:
|
|
341
|
+
post_resp = client.post("/only-get")
|
|
342
|
+
assert post_resp.status_code == 405
|
|
343
|
+
assert post_resp.json() == {"detail": "Method Not Allowed"}
|
|
344
|
+
|
|
345
|
+
get_resp = client.get("/only-get")
|
|
346
|
+
assert get_resp.status_code == 200
|
|
347
|
+
assert get_resp.text == "GET only"
|
|
348
|
+
|
|
349
|
+
|
|
350
|
+
async def test_405_route_params_come_from_the_partial_match():
|
|
351
|
+
"""The 405 path must carry the first partial match's params.
|
|
352
|
+
|
|
353
|
+
The dispatch loop kept ``matched_params`` from the *last* route
|
|
354
|
+
iteration and handed it to the first partial match, so ``route_params``
|
|
355
|
+
on the scope could be empty or belong to an unrelated route.
|
|
356
|
+
"""
|
|
357
|
+
router = Router()
|
|
358
|
+
|
|
359
|
+
async def alpha_handler(request: Request, response: Response, x: str):
|
|
360
|
+
return response.text(x)
|
|
361
|
+
|
|
362
|
+
async def beta_handler(request: Request, response: Response):
|
|
363
|
+
return response.text("beta")
|
|
364
|
+
|
|
365
|
+
router.add_route(Route("/alpha/{x}", alpha_handler, methods=["GET"]))
|
|
366
|
+
router.add_route(Route("/beta", beta_handler, methods=["GET"]))
|
|
367
|
+
|
|
368
|
+
sent = []
|
|
369
|
+
|
|
370
|
+
async def receive():
|
|
371
|
+
return {"type": "http.request", "body": b"", "more_body": False}
|
|
372
|
+
|
|
373
|
+
async def send(message):
|
|
374
|
+
sent.append(message)
|
|
375
|
+
|
|
376
|
+
scope = {
|
|
377
|
+
"type": "http",
|
|
378
|
+
"method": "POST",
|
|
379
|
+
"path": "/alpha/42",
|
|
380
|
+
"raw_path": b"/alpha/42",
|
|
381
|
+
"query_string": b"",
|
|
382
|
+
"headers": [],
|
|
383
|
+
"scheme": "http",
|
|
384
|
+
"server": ("testserver", 80),
|
|
385
|
+
"client": ("testclient", 50000),
|
|
386
|
+
}
|
|
387
|
+
|
|
388
|
+
await router(scope, receive, send)
|
|
389
|
+
|
|
390
|
+
status = next(
|
|
391
|
+
message["status"]
|
|
392
|
+
for message in sent
|
|
393
|
+
if message["type"] == "http.response.start"
|
|
394
|
+
)
|
|
395
|
+
assert status == 405
|
|
396
|
+
assert dict(scope["route_params"]) == {"x": "42"}
|
|
397
|
+
|
|
398
|
+
|
|
324
399
|
# ========== Router Method Decorators Tests ==========
|
|
325
400
|
|
|
326
401
|
|
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: sillo-overview
|
|
3
|
-
description: Teach sillo comprehensively to AI editors and coding agents as an external async Python web framework. Use when Codex needs to explain or generate sillo code with concept-by-concept guidance, runnable examples, and best practices across app setup, ASGI basics, routing, handlers, request inputs, responses, middleware, dependency injection, authentication, sessions, cookies, security, pagination, WebSockets, events, OpenAPI, testing, templating, static files, uploads, and CLI workflows. Prefer this skill for tutorial-style answers, onboarding, code generation, and framework learning rather than repo-specific debugging or source edits.
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# sillo Overview
|
|
7
|
-
|
|
8
|
-
## Overview
|
|
9
|
-
|
|
10
|
-
Use this skill to teach sillo from the outside in. Treat sillo as a framework an editor or coding agent must learn well enough to explain, scaffold, and write correct examples for.
|
|
11
|
-
|
|
12
|
-
## Start Here
|
|
13
|
-
|
|
14
|
-
1. Read [references/capabilities-map.md](references/capabilities-map.md) first for the full concept map and topic-to-file routing.
|
|
15
|
-
2. Read [references/framework-overview.md](references/framework-overview.md) for the foundation: what sillo is, ASGI mental model, app setup, config, and request lifecycle.
|
|
16
|
-
3. Read [references/http-and-routing.md](references/http-and-routing.md) for handlers, request inputs, responses, routing, routers, class-based handlers, uploads, and pagination.
|
|
17
|
-
4. Read [references/composition-and-lifecycle.md](references/composition-and-lifecycle.md) for middleware, dependency injection, app structure, startup/shutdown, lifespan, and events.
|
|
18
|
-
5. Read [references/auth-state-and-security.md](references/auth-state-and-security.md) for authentication, sessions, cookies, headers, and security middleware.
|
|
19
|
-
6. Read [references/realtime-and-productivity.md](references/realtime-and-productivity.md) for WebSockets, OpenAPI, Pydantic, testing, CLI, static files, and templating.
|
|
20
|
-
7. Use the deep dives when the request is narrow:
|
|
21
|
-
- [references/dependency-injection-deep-dive.md](references/dependency-injection-deep-dive.md)
|
|
22
|
-
- [references/events-and-emitter.md](references/events-and-emitter.md)
|
|
23
|
-
- [references/sessions-and-state.md](references/sessions-and-state.md)
|
|
24
|
-
- [references/responses-reference.md](references/responses-reference.md)
|
|
25
|
-
- [references/contrib-modules.md](references/contrib-modules.md)
|
|
26
|
-
8. Read [references/adoption-guide.md](references/adoption-guide.md) only when the user is comparing sillo with other frameworks or deciding whether to adopt it.
|
|
27
|
-
|
|
28
|
-
## Keep It External
|
|
29
|
-
|
|
30
|
-
- Prefer public concepts, documented APIs, and developer-facing mental models.
|
|
31
|
-
- Avoid repo-relative file paths, internal module maps, code search instructions, or claims based on local implementation details unless the user explicitly asks for source-level analysis.
|
|
32
|
-
- Frame uncertain points as documented behavior rather than verified internals.
|
|
33
|
-
- Write as if the reader is outside the sillo repository and only needs a clear mental model plus practical guidance.
|
|
34
|
-
|
|
35
|
-
## Teaching Pattern
|
|
36
|
-
|
|
37
|
-
- Start with a one-sentence positioning statement.
|
|
38
|
-
- Explain the concept in plain language before showing code.
|
|
39
|
-
- Include a compact, runnable example whenever possible.
|
|
40
|
-
- Mention one or two important gotchas when the docs call them out.
|
|
41
|
-
- Prefer small examples that show the sillo shape clearly: `SilloApp`, async handlers, explicit `request` and `response`, and response helpers such as `response.json(...)`.
|
|
42
|
-
- For comparisons, explain both where sillo fits well and where another framework may be a better match.
|
|
43
|
-
- For recommendations, give a clear verdict and reason instead of only listing features.
|
|
44
|
-
|
|
45
|
-
## Generation Rules For AI Editors
|
|
46
|
-
|
|
47
|
-
- Highlight sillo as an async-first ASGI framework with low boilerplate, clean architecture, and strong developer ergonomics.
|
|
48
|
-
- Default to `async def` handlers and explicit route decorators.
|
|
49
|
-
- Prefer direct handler parameters for path params, for example `async def get_user(request, response, user_id: int)`.
|
|
50
|
-
- Use the `response` helper methods when teaching status codes, headers, cookies, files, redirects, streams, and pagination.
|
|
51
|
-
- Use `Depend(...)` when teaching dependency injection.
|
|
52
|
-
- Show middleware as either function-based or class-based depending on the teaching goal.
|
|
53
|
-
- Distinguish between "good fit for async APIs and real-time services" and "not automatically the best fit when a team wants a batteries-included ORM or admin stack."
|
|
54
|
-
|
|
55
|
-
## Example Requests
|
|
56
|
-
|
|
57
|
-
- "Explain sillo to a FastAPI team."
|
|
58
|
-
- "Teach me sillo routing with examples."
|
|
59
|
-
- "Show how auth and sessions work in sillo."
|
|
60
|
-
- "How do I do pagination, uploads, and OpenAPI in sillo?"
|
|
61
|
-
- "Give me a full sillo learning guide for an AI coding editor."
|
|
@@ -1,72 +0,0 @@
|
|
|
1
|
-
# sillo Adoption Guide
|
|
2
|
-
|
|
3
|
-
Use this reference when the user wants a recommendation, comparison, or migration-oriented explanation.
|
|
4
|
-
|
|
5
|
-
## Good Fit Signals
|
|
6
|
-
|
|
7
|
-
Recommend sillo more strongly when the team wants:
|
|
8
|
-
|
|
9
|
-
- Async APIs with high concurrency
|
|
10
|
-
- Real-time features such as WebSockets or channel-based messaging
|
|
11
|
-
- A lighter framework than Django
|
|
12
|
-
- More built-in structure than a very bare microframework
|
|
13
|
-
- Clean architecture patterns with middleware and dependency injection
|
|
14
|
-
|
|
15
|
-
## Possible Tradeoffs
|
|
16
|
-
|
|
17
|
-
Call these out honestly:
|
|
18
|
-
|
|
19
|
-
- Teams that want a fully batteries-included ORM, admin UI, and large plugin ecosystem may prefer Django
|
|
20
|
-
- Teams standardized on FastAPI and its surrounding ecosystem may value ecosystem familiarity over switching
|
|
21
|
-
- Async-first frameworks still require good async discipline from the team
|
|
22
|
-
|
|
23
|
-
## Comparison Cues
|
|
24
|
-
|
|
25
|
-
Use these positioning cues:
|
|
26
|
-
|
|
27
|
-
### Compared with FastAPI
|
|
28
|
-
|
|
29
|
-
- Similar overlap in async API use cases
|
|
30
|
-
- sillo can be framed as emphasizing clean architecture, middleware structure, and real-time patterns
|
|
31
|
-
- FastAPI may still win on ecosystem familiarity and widespread adoption
|
|
32
|
-
|
|
33
|
-
### Compared with Django
|
|
34
|
-
|
|
35
|
-
- sillo is lighter and more API-service oriented
|
|
36
|
-
- Django is better when the team wants an integrated ORM, admin, and mature full-stack conventions
|
|
37
|
-
- sillo is easier to frame as an async service framework than a full monolith
|
|
38
|
-
|
|
39
|
-
### Compared with Flask
|
|
40
|
-
|
|
41
|
-
- sillo offers a more async-native and structured starting point
|
|
42
|
-
- Flask remains attractive for very small sync-first services and minimalism
|
|
43
|
-
- sillo usually gives more built-in guidance for modern backend patterns
|
|
44
|
-
|
|
45
|
-
## Recommendation Pattern
|
|
46
|
-
|
|
47
|
-
Use this template:
|
|
48
|
-
|
|
49
|
-
1. State the verdict clearly
|
|
50
|
-
2. Name the strongest reason
|
|
51
|
-
3. Mention one tradeoff or condition
|
|
52
|
-
|
|
53
|
-
Example:
|
|
54
|
-
|
|
55
|
-
"I would consider sillo a strong fit for this project because you need async APIs and live WebSocket features, which line up well with its ASGI-first design. The main question is whether your team wants that lighter service-focused approach or a larger ecosystem with more prebuilt integrations."
|
|
56
|
-
|
|
57
|
-
## Migration and Evaluation Framing
|
|
58
|
-
|
|
59
|
-
When helping a team evaluate sillo:
|
|
60
|
-
|
|
61
|
-
- Start with the application style: API, real-time backend, or modular service
|
|
62
|
-
- Check whether async I/O is a real requirement
|
|
63
|
-
- Compare operational needs such as authentication, docs, testing, and middleware
|
|
64
|
-
- Separate framework needs from ecosystem needs
|
|
65
|
-
|
|
66
|
-
## What Not to Claim
|
|
67
|
-
|
|
68
|
-
Avoid overselling. Do not imply:
|
|
69
|
-
|
|
70
|
-
- That sillo is automatically the best framework for every Python backend
|
|
71
|
-
- That local source inspection was used to verify every runtime detail
|
|
72
|
-
- That framework comparisons are purely objective without team-context tradeoffs
|
sillo_framework-0.0.2a2/.agents/skills/nexios-overview/references/auth-state-and-security.md
DELETED
|
@@ -1,318 +0,0 @@
|
|
|
1
|
-
# sillo Auth, State, And Security
|
|
2
|
-
|
|
3
|
-
Use this reference for login flows, protected routes, session state, cookie handling, and response hardening.
|
|
4
|
-
|
|
5
|
-
## Table of Contents
|
|
6
|
-
|
|
7
|
-
1. [Authentication Middleware](#authentication-middleware)
|
|
8
|
-
2. [Protected Routes](#protected-routes)
|
|
9
|
-
3. [Sessions](#sessions)
|
|
10
|
-
4. [Cookies](#cookies)
|
|
11
|
-
5. [Headers](#headers)
|
|
12
|
-
6. [CORS and Request Hardening](#cors-and-request-hardening)
|
|
13
|
-
7. [Security Middleware](#security-middleware)
|
|
14
|
-
|
|
15
|
-
## Authentication Middleware
|
|
16
|
-
|
|
17
|
-
The docs present authentication as middleware plus protected handlers.
|
|
18
|
-
|
|
19
|
-
```python
|
|
20
|
-
from sillo import SilloApp
|
|
21
|
-
from sillo.auth import SimpleUser
|
|
22
|
-
from sillo.auth.decorators import auth
|
|
23
|
-
from sillo.auth.backends.jwt import JWTAuthBackend
|
|
24
|
-
from sillo.auth.middleware import AuthenticationMiddleware
|
|
25
|
-
|
|
26
|
-
app = SilloApp()
|
|
27
|
-
|
|
28
|
-
app.add_middleware(
|
|
29
|
-
AuthenticationMiddleware(user_model=SimpleUser, backend=JWTAuthBackend())
|
|
30
|
-
)
|
|
31
|
-
```
|
|
32
|
-
|
|
33
|
-
Key mental model:
|
|
34
|
-
|
|
35
|
-
- Authentication middleware attaches the current user to `request.user`
|
|
36
|
-
- The auth type is exposed through request scope metadata
|
|
37
|
-
- Route protection happens with decorators or auth-aware logic
|
|
38
|
-
|
|
39
|
-
## Protected Routes
|
|
40
|
-
|
|
41
|
-
```python
|
|
42
|
-
@app.get("/profile")
|
|
43
|
-
@auth()
|
|
44
|
-
async def profile(request, response):
|
|
45
|
-
return response.json(
|
|
46
|
-
{
|
|
47
|
-
"user": request.user.display_name,
|
|
48
|
-
"authenticated": request.user.is_authenticated,
|
|
49
|
-
}
|
|
50
|
-
)
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
@app.get("/profile")
|
|
54
|
-
@auth(scope=["jwt"]) # for scoped auth
|
|
55
|
-
async def profile(request, response):
|
|
56
|
-
return response.json(
|
|
57
|
-
{
|
|
58
|
-
"user": request.user.display_name,
|
|
59
|
-
"authenticated": request.user.is_authenticated,
|
|
60
|
-
}
|
|
61
|
-
)
|
|
62
|
-
```
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
## Auth Backends
|
|
67
|
-
|
|
68
|
-
```python
|
|
69
|
-
from sillo.auth.backends.session import SessionAuthBackend
|
|
70
|
-
from sillo.session import SessionConfig
|
|
71
|
-
from sillo.session.middleware import SessionMiddleware
|
|
72
|
-
|
|
73
|
-
app.add_middleware(
|
|
74
|
-
AuthenticationMiddleware(user_model=SimpleUser, backend=JWTAuthBackend())
|
|
75
|
-
)
|
|
76
|
-
|
|
77
|
-
app.add_middleware(
|
|
78
|
-
AuthenticationMiddleware(
|
|
79
|
-
user_model=SimpleUser,
|
|
80
|
-
backend=SessionAuthBackend(), # require session middleware
|
|
81
|
-
)
|
|
82
|
-
)
|
|
83
|
-
|
|
84
|
-
app.add_middleware(
|
|
85
|
-
AuthenticationMiddleware(user_model=SimpleUser, backend=APIKeyAuthBackend())
|
|
86
|
-
)
|
|
87
|
-
```
|
|
88
|
-
|
|
89
|
-
### Backend Explanations
|
|
90
|
-
|
|
91
|
-
- `JWTAuthBackend` accepts a token in the `Authorization` header and verifies it with a secret or public key
|
|
92
|
-
- `SessionAuthBackend` reads a session cookie and uses it to identify the user
|
|
93
|
-
- `APIKeyAuthBackend` expects an API key in the `Authorization` header
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
```python
|
|
97
|
-
class CustomAuthBackend(BaseAuthBackend):
|
|
98
|
-
async def authenticate(self, request):
|
|
99
|
-
# custom authentication logic here
|
|
100
|
-
if request.headers.get("X-API-Key") == "your-super-secret-key":
|
|
101
|
-
return CustomUser(request, "Super User")
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
class CustomUser(BaseUser):
|
|
105
|
-
def __init__(self, request, name):
|
|
106
|
-
self.request = request
|
|
107
|
-
self.name = name
|
|
108
|
-
|
|
109
|
-
@property
|
|
110
|
-
def display_name(self):
|
|
111
|
-
return self.name
|
|
112
|
-
|
|
113
|
-
@property
|
|
114
|
-
def is_authenticated(self):
|
|
115
|
-
return True
|
|
116
|
-
|
|
117
|
-
@property
|
|
118
|
-
def is_active(self):
|
|
119
|
-
return True
|
|
120
|
-
|
|
121
|
-
@property
|
|
122
|
-
def is_anonymous(self):
|
|
123
|
-
return False
|
|
124
|
-
|
|
125
|
-
@property
|
|
126
|
-
def auth_type(self):
|
|
127
|
-
return "custom"
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
app.add_middleware(
|
|
131
|
-
AuthenticationMiddleware(user_model=CustomUser, backend=CustomAuthBackend())
|
|
132
|
-
)
|
|
133
|
-
```
|
|
134
|
-
|
|
135
|
-
The above code snippet demonstrates how to add a custom authentication backend to sillo. It defines a custom authentication backend by subclassing `BaseAuthBackend` and implementing the `authenticate` method. The `authenticate` method is responsible for verifying the user's credentials and returning a `BaseUser` subclass instance if authentication is successful. In the example, the custom authentication backend checks for the presence of a specific API key in the request headers. If the API key is present and matches a hard-coded value, a `CustomUser` instance is returned.
|
|
136
|
-
|
|
137
|
-
The `CustomUser` class is a subclass of `BaseUser` and implements the user properties required by sillo. It stores a reference to the request and the user's name. The `display_name` property returns the user's name, the `is_authenticated` property returns `True` to indicate that the user is authenticated, and the `auth_type` property returns the string "custom" to indicate the type of authentication.
|
|
138
|
-
|
|
139
|
-
Finally, the custom authentication backend is added as middleware to the sillo app using the `add_middleware` method.
|
|
140
|
-
|
|
141
|
-
This code is provided as a starting point for implementing custom authentication in sillo.
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
Teach this as the default secured-endpoint shape.
|
|
145
|
-
|
|
146
|
-
## Sessions
|
|
147
|
-
|
|
148
|
-
Basic documented setup:
|
|
149
|
-
|
|
150
|
-
```python
|
|
151
|
-
from sillo.session import SessionConfig
|
|
152
|
-
from sillo.session.middleware import SessionMiddleware
|
|
153
|
-
|
|
154
|
-
session_config = SessionConfig(
|
|
155
|
-
session_cookie_name="sillo_session",
|
|
156
|
-
cookie_secure=True,
|
|
157
|
-
cookie_httponly=True,
|
|
158
|
-
cookie_samesite="lax",
|
|
159
|
-
session_expiration_time=86400,
|
|
160
|
-
)
|
|
161
|
-
|
|
162
|
-
app.add_middleware(
|
|
163
|
-
SessionMiddleware(config=session_config, secret_key="your-secure-secret-key")
|
|
164
|
-
)
|
|
165
|
-
```
|
|
166
|
-
|
|
167
|
-
Session usage:
|
|
168
|
-
|
|
169
|
-
```python
|
|
170
|
-
@app.get("/counter")
|
|
171
|
-
async def counter(request, response):
|
|
172
|
-
count = request.session.get("count", 0) + 1
|
|
173
|
-
request.session["count"] = count
|
|
174
|
-
return response.json({"count": count})
|
|
175
|
-
```
|
|
176
|
-
|
|
177
|
-
Teaching notes:
|
|
178
|
-
|
|
179
|
-
- `request.session` behaves a lot like a dictionary
|
|
180
|
-
- Session middleware depends on a configured secret key
|
|
181
|
-
|
|
182
|
-
## Cookies
|
|
183
|
-
|
|
184
|
-
### Read Cookies
|
|
185
|
-
|
|
186
|
-
```python
|
|
187
|
-
@app.get("/whoami")
|
|
188
|
-
async def whoami(request, response):
|
|
189
|
-
token = request.cookies.get("auth_token")
|
|
190
|
-
return response.json({"token": token})
|
|
191
|
-
```
|
|
192
|
-
|
|
193
|
-
### Set Cookies
|
|
194
|
-
|
|
195
|
-
```python
|
|
196
|
-
@app.get("/set-cookie")
|
|
197
|
-
async def set_cookie(request, response):
|
|
198
|
-
return response.json({"status": "ok"}).set_cookie(
|
|
199
|
-
key="auth_token",
|
|
200
|
-
value="abc123",
|
|
201
|
-
max_age=3600,
|
|
202
|
-
httponly=True,
|
|
203
|
-
secure=True,
|
|
204
|
-
samesite="strict",
|
|
205
|
-
)
|
|
206
|
-
```
|
|
207
|
-
|
|
208
|
-
### Delete Cookies
|
|
209
|
-
|
|
210
|
-
```python
|
|
211
|
-
@app.get("/logout")
|
|
212
|
-
async def logout(request, response):
|
|
213
|
-
return response.json({"status": "logged out"}).delete_cookie("auth_token")
|
|
214
|
-
```
|
|
215
|
-
|
|
216
|
-
Teach these best practices:
|
|
217
|
-
|
|
218
|
-
- Use `secure=True` in production
|
|
219
|
-
- Use `httponly=True` for sensitive cookies
|
|
220
|
-
- Prefer strict or appropriate `samesite` settings for auth cookies
|
|
221
|
-
|
|
222
|
-
## Headers
|
|
223
|
-
|
|
224
|
-
### Read Request Headers
|
|
225
|
-
|
|
226
|
-
```python
|
|
227
|
-
@app.get("/headers")
|
|
228
|
-
async def show_headers(request, response):
|
|
229
|
-
return response.json(
|
|
230
|
-
{
|
|
231
|
-
"user_agent": request.headers.get("user-agent"),
|
|
232
|
-
"accept_language": request.headers.get("accept-language"),
|
|
233
|
-
}
|
|
234
|
-
)
|
|
235
|
-
```
|
|
236
|
-
|
|
237
|
-
### Set Response Headers
|
|
238
|
-
|
|
239
|
-
```python
|
|
240
|
-
@app.get("/custom")
|
|
241
|
-
async def custom(request, response):
|
|
242
|
-
return response.text(
|
|
243
|
-
"ok",
|
|
244
|
-
headers={
|
|
245
|
-
"X-Content-Type-Options": "nosniff",
|
|
246
|
-
"X-Frame-Options": "DENY",
|
|
247
|
-
"X-XSS-Protection": "1; mode=block",
|
|
248
|
-
},
|
|
249
|
-
)
|
|
250
|
-
# another way to set headers after setting response type
|
|
251
|
-
# response = response.text("ok")
|
|
252
|
-
# response.set_header("X-Frame-Options", "DENY")
|
|
253
|
-
# response.set_header("X-XSS-Protection", "1; mode=block")
|
|
254
|
-
# return response
|
|
255
|
-
```
|
|
256
|
-
|
|
257
|
-
In middleware, set headers after `await next()` or the equivalent response-producing step.
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
### Example: Setting Headers After Middleware
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
### Example: Setting Headers After Middleware
|
|
264
|
-
|
|
265
|
-
```py
|
|
266
|
-
async def set_headers_after_middleware(request, response, next):
|
|
267
|
-
strem = await next()
|
|
268
|
-
response.set_header("X-Frame-Options", "DENY")
|
|
269
|
-
response.set_header("X-XSS-Protection", "1; mode=block")
|
|
270
|
-
return stream
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
app.add_middleware(set_headers_after_middleware)
|
|
274
|
-
```
|
|
275
|
-
|
|
276
|
-
## CORS And Request Hardening
|
|
277
|
-
|
|
278
|
-
sillo docs also cover cross-origin and browser-safety concerns.
|
|
279
|
-
|
|
280
|
-
```python
|
|
281
|
-
from sillo.middleware import CORSMiddleware
|
|
282
|
-
|
|
283
|
-
app.add_middleware(CORSMiddleware())
|
|
284
|
-
```
|
|
285
|
-
|
|
286
|
-
Use this concept bucket for:
|
|
287
|
-
|
|
288
|
-
- Cross-origin policies
|
|
289
|
-
- Credentialed browser requests
|
|
290
|
-
- Request and response header shaping
|
|
291
|
-
- CSRF discussions when the user is working with browser sessions or forms
|
|
292
|
-
|
|
293
|
-
## Security Middleware
|
|
294
|
-
|
|
295
|
-
The docs present a configurable security middleware:
|
|
296
|
-
|
|
297
|
-
```python
|
|
298
|
-
from sillo.middleware.security import SecurityMiddleware
|
|
299
|
-
|
|
300
|
-
app.add_middleware(
|
|
301
|
-
SecurityMiddleware(
|
|
302
|
-
csp_enabled=True, hsts_enabled=True, ssl_redirect=True, frame_options="DENY"
|
|
303
|
-
)
|
|
304
|
-
)
|
|
305
|
-
```
|
|
306
|
-
|
|
307
|
-
This is the right concept cluster for:
|
|
308
|
-
|
|
309
|
-
- Content Security Policy
|
|
310
|
-
- HSTS
|
|
311
|
-
- SSL redirects
|
|
312
|
-
- Frame protection
|
|
313
|
-
- Cross-origin response policies
|
|
314
|
-
- Cache and header hardening
|
|
315
|
-
|
|
316
|
-
Good teaching summary:
|
|
317
|
-
|
|
318
|
-
"sillo treats security as middleware-driven response hardening plus authentication and session management. Use dedicated middleware for broad protections, and route-level logic for application-specific access control."
|