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.
Files changed (838) hide show
  1. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/CHANGELOG.md +19 -0
  2. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/PKG-INFO +1 -1
  3. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/pyproject.toml +2 -2
  4. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/__init__.py +1 -1
  5. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/core/routing/router.py +8 -6
  6. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/openapi/_builder.py +1 -1
  7. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_routing/test_http_methods.py +75 -0
  8. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/uv.lock +1 -1
  9. sillo_framework-0.0.2a2/.agents/skills/nexios-overview/SKILL.md +0 -61
  10. sillo_framework-0.0.2a2/.agents/skills/nexios-overview/agents/openai.yaml +0 -4
  11. sillo_framework-0.0.2a2/.agents/skills/nexios-overview/references/adoption-guide.md +0 -72
  12. sillo_framework-0.0.2a2/.agents/skills/nexios-overview/references/auth-state-and-security.md +0 -318
  13. sillo_framework-0.0.2a2/.agents/skills/nexios-overview/references/capabilities-map.md +0 -164
  14. sillo_framework-0.0.2a2/.agents/skills/nexios-overview/references/composition-and-lifecycle.md +0 -209
  15. sillo_framework-0.0.2a2/.agents/skills/nexios-overview/references/contrib-modules.md +0 -159
  16. sillo_framework-0.0.2a2/.agents/skills/nexios-overview/references/dependency-injection-deep-dive.md +0 -175
  17. sillo_framework-0.0.2a2/.agents/skills/nexios-overview/references/events-and-emitter.md +0 -124
  18. sillo_framework-0.0.2a2/.agents/skills/nexios-overview/references/framework-overview.md +0 -109
  19. sillo_framework-0.0.2a2/.agents/skills/nexios-overview/references/http-and-routing.md +0 -282
  20. sillo_framework-0.0.2a2/.agents/skills/nexios-overview/references/realtime-and-productivity.md +0 -201
  21. sillo_framework-0.0.2a2/.agents/skills/nexios-overview/references/responses-reference.md +0 -126
  22. sillo_framework-0.0.2a2/.agents/skills/nexios-overview/references/sessions-and-state.md +0 -125
  23. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/.github/CODE_OF_CONDUCT.md +0 -0
  24. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/.github/CONTRIBUTING.MD +0 -0
  25. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  26. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  27. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/.github/dependabot.yml +0 -0
  28. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/.github/funding.yml +0 -0
  29. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/.github/workflows/coverage.yml +0 -0
  30. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/.github/workflows/format-code.yml +0 -0
  31. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/.github/workflows/lint.yaml +0 -0
  32. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/.github/workflows/merge-to-main.yml +0 -0
  33. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/.github/workflows/release.yml +0 -0
  34. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/.github/workflows/run-tests.yaml +0 -0
  35. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/.github/workflows/triage.yml +0 -0
  36. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/.github/workflows/type-check.yaml +0 -0
  37. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/.gitignore +0 -0
  38. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/LICENSE +0 -0
  39. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/README.md +0 -0
  40. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/SECURITY.md +0 -0
  41. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/.github/workflows/ci.yml +0 -0
  42. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/.github/workflows/deploy-docs-preview.yml +0 -0
  43. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/.github/workflows/deploy-docs.yml +0 -0
  44. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/.github/workflows/publish-package.yml +0 -0
  45. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/.gitignore +0 -0
  46. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/.prettierrc +0 -0
  47. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/README.md +0 -0
  48. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/bun.lock +0 -0
  49. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/README.md +0 -0
  50. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/astro.config.mjs +0 -0
  51. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/community-unpublished/README.md +0 -0
  52. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/community-unpublished/contribution-guide.md +0 -0
  53. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/community-unpublished/index.md +0 -0
  54. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/community-unpublished/installation.md +0 -0
  55. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/community-unpublished/integrations/jrpc.md +0 -0
  56. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/community-unpublished/integrations/mail.md +0 -0
  57. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/community-unpublished/integrations/redis.md +0 -0
  58. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/community-unpublished/integrations/scheduler.md +0 -0
  59. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/community-unpublished/integrations/tasks.md +0 -0
  60. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/community-unpublished/integrations/tortoise.md +0 -0
  61. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/community-unpublished/middleware/etag.md +0 -0
  62. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/community-unpublished/middleware/proxy.md +0 -0
  63. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/community-unpublished/middleware/timeout.md +0 -0
  64. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/community-unpublished/middleware/trusted-host.md +0 -0
  65. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/package.json +0 -0
  66. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/public/favicon.svg +0 -0
  67. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/public/logo-white.svg +0 -0
  68. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/public/logo.ico +0 -0
  69. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/public/logo.png +0 -0
  70. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/assets/houston.webp +0 -0
  71. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/assets/logo-black.svg +0 -0
  72. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/assets/logo-white.svg +0 -0
  73. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/assets/placeholder.svg +0 -0
  74. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/assets/placeholder169.svg +0 -0
  75. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/api-keys.md +0 -0
  76. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/authentication.md +0 -0
  77. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/cache.mdx +0 -0
  78. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/concurrency.md +0 -0
  79. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/configuration.md +0 -0
  80. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/console.md +0 -0
  81. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/content-negotiation.md +0 -0
  82. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/cookies.mdx +0 -0
  83. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/cors.md +0 -0
  84. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/csrf.md +0 -0
  85. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/dependency-injection.md +0 -0
  86. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/error-handling.mdx +0 -0
  87. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/events.mdx +0 -0
  88. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/file-upload.md +0 -0
  89. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/frontend.md +0 -0
  90. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/graphql.md +0 -0
  91. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/handlers.md +0 -0
  92. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/hashing.md +0 -0
  93. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/headers.mdx +0 -0
  94. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/helpers/async.mdx +0 -0
  95. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/helpers/crypto.mdx +0 -0
  96. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/helpers/deprecation.mdx +0 -0
  97. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/helpers/files.mdx +0 -0
  98. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/helpers/hashing.mdx +0 -0
  99. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/helpers/html.mdx +0 -0
  100. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/helpers/index.mdx +0 -0
  101. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/helpers/jwt.mdx +0 -0
  102. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/helpers/network.mdx +0 -0
  103. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/helpers/retry.mdx +0 -0
  104. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/helpers/strings.mdx +0 -0
  105. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/helpers/text.mdx +0 -0
  106. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/http/client.md +0 -0
  107. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/inertia.md +0 -0
  108. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/installation.mdx +0 -0
  109. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/introduction.md +0 -0
  110. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/jwt-auth.md +0 -0
  111. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/middleware.md +0 -0
  112. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/oauth/index.md +0 -0
  113. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/oauth/openapi.md +0 -0
  114. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/oauth/persisting-logins.md +0 -0
  115. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/oauth/providers.md +0 -0
  116. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/oauth/security.md +0 -0
  117. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/openapi/authentication-documentation.md +0 -0
  118. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/openapi/basic-config.png +0 -0
  119. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/openapi/bearerAuth.png +0 -0
  120. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/openapi/custom.png +0 -0
  121. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/openapi/custom2.png +0 -0
  122. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/openapi/customizing-openapi-configuration.md +0 -0
  123. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/openapi/description.png +0 -0
  124. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/openapi/documentation-ui.md +0 -0
  125. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/openapi/headers.png +0 -0
  126. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/openapi/index.md +0 -0
  127. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/openapi/multi-response.png +0 -0
  128. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/openapi/path-params.png +0 -0
  129. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/openapi/query-params.png +0 -0
  130. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/openapi/request-body.png +0 -0
  131. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/openapi/request-parameters.md +0 -0
  132. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/openapi/request-schemas.mdx +0 -0
  133. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/openapi/response-list.png +0 -0
  134. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/openapi/response-models.md +0 -0
  135. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/openapi/response.png +0 -0
  136. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/pagination.mdx +0 -0
  137. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/permissions.md +0 -0
  138. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/protecting-routes.md +0 -0
  139. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/rate-limiting.md +0 -0
  140. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/record/casting-collections.mdx +0 -0
  141. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/record/exceptions-pydantic.mdx +0 -0
  142. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/record/index.mdx +0 -0
  143. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/record/migrations.mdx +0 -0
  144. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/record/models.mdx +0 -0
  145. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/record/pagination.mdx +0 -0
  146. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/record/scopes-events.mdx +0 -0
  147. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/record/transactions-factories.mdx +0 -0
  148. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/request-info.md +0 -0
  149. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/request-inputs.md +0 -0
  150. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/request-lifecycle.md +0 -0
  151. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/request-parameters.mdx +0 -0
  152. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/routers-and-subapps.md +0 -0
  153. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/routing.mdx +0 -0
  154. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/security.md +0 -0
  155. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/sending-responses.mdx +0 -0
  156. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/serialization.md +0 -0
  157. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/services/mail.mdx +0 -0
  158. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/session-auth.md +0 -0
  159. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/sessions.md +0 -0
  160. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/start/admin.md +0 -0
  161. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/start/authentication.md +0 -0
  162. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/start/background-work.md +0 -0
  163. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/start/console.md +0 -0
  164. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/start/database.md +0 -0
  165. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/start/deployment.md +0 -0
  166. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/start/index.md +0 -0
  167. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/start/structure.md +0 -0
  168. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/start/testing.md +0 -0
  169. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/startups-and-shutdowns.mdx +0 -0
  170. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/static-files.mdx +0 -0
  171. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/streaming-response.mdx +0 -0
  172. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/templating/advanced.mdx +0 -0
  173. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/templating/index.mdx +0 -0
  174. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/url-normalization.md +0 -0
  175. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/users.md +0 -0
  176. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/validation/errors.md +0 -0
  177. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/validation/forms-and-files.md +0 -0
  178. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/validation/index.md +0 -0
  179. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/validation/openapi.md +0 -0
  180. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/validation/parameters.md +0 -0
  181. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/validation/request-bodies.md +0 -0
  182. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/validation/response-models.md +0 -0
  183. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/websockets/channels.mdx +0 -0
  184. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/websockets/consumer.mdx +0 -0
  185. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/websockets/events.mdx +0 -0
  186. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/websockets/groups.mdx +0 -0
  187. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/websockets/index.mdx +0 -0
  188. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/work/background.mdx +0 -0
  189. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/work/events.mdx +0 -0
  190. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/work/index.mdx +0 -0
  191. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/work/jobs.mdx +0 -0
  192. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/work/queue.mdx +0 -0
  193. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/guides/work/scheduler.mdx +0 -0
  194. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/reference/components.mdx +0 -0
  195. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/reference/plugin-api.md +0 -0
  196. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/showcase/splash/banner.mdx +0 -0
  197. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/showcase/splash/centered-top.mdx +0 -0
  198. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/showcase/splash/centered.mdx +0 -0
  199. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/showcase/splash/split-left.mdx +0 -0
  200. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/showcase/splash/split-right.mdx +0 -0
  201. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/showcase/splash-pages.mdx +0 -0
  202. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/showcase/starlight-components.mdx +0 -0
  203. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content/docs/showcase/typography.md +0 -0
  204. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/content.config.ts +0 -0
  205. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/src/styles/global.css +0 -0
  206. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/docs/tsconfig.json +0 -0
  207. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/package.json +0 -0
  208. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/packages/lucode-starlight/README.md +0 -0
  209. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/packages/lucode-starlight/components/custom/ContainerSection.astro +0 -0
  210. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/packages/lucode-starlight/components/custom/LinkButton.astro +0 -0
  211. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/packages/lucode-starlight/components/custom/dropdown/Dropdown.astro +0 -0
  212. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/packages/lucode-starlight/components/custom/dropdown/DropdownContent.astro +0 -0
  213. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/packages/lucode-starlight/components/custom/dropdown/DropdownItem.astro +0 -0
  214. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/packages/lucode-starlight/components/custom/dropdown/DropdownLabel.astro +0 -0
  215. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/packages/lucode-starlight/components/custom/dropdown/DropdownSeparator.astro +0 -0
  216. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/packages/lucode-starlight/components/custom/dropdown/DropdownShortcut.astro +0 -0
  217. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/packages/lucode-starlight/components/custom/dropdown/DropdownTrigger.astro +0 -0
  218. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/packages/lucode-starlight/components/custom/dropdown/index.ts +0 -0
  219. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/packages/lucode-starlight/components/overrides/ContentPanel.astro +0 -0
  220. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/packages/lucode-starlight/components/overrides/Footer.astro +0 -0
  221. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/packages/lucode-starlight/components/overrides/Header.astro +0 -0
  222. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/packages/lucode-starlight/components/overrides/Hero.astro +0 -0
  223. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/packages/lucode-starlight/components/overrides/MarkdownContent.astro +0 -0
  224. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/packages/lucode-starlight/components/overrides/PageFrame.astro +0 -0
  225. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/packages/lucode-starlight/components/overrides/PageSidebar.astro +0 -0
  226. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/packages/lucode-starlight/components/overrides/PageTitle.astro +0 -0
  227. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/packages/lucode-starlight/components/overrides/Pagination.astro +0 -0
  228. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/packages/lucode-starlight/components/overrides/Search.astro +0 -0
  229. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/packages/lucode-starlight/components/overrides/Sidebar.astro +0 -0
  230. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/packages/lucode-starlight/components/overrides/SiteTitle.astro +0 -0
  231. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/packages/lucode-starlight/components/overrides/SocialIcons.astro +0 -0
  232. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/packages/lucode-starlight/components/overrides/TableOfContents.astro +0 -0
  233. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/packages/lucode-starlight/components/overrides/ThemeSelect.astro +0 -0
  234. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/packages/lucode-starlight/components/overrides/TwoColumnContent.astro +0 -0
  235. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/packages/lucode-starlight/components/overrides/parts/Drawer.astro +0 -0
  236. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/packages/lucode-starlight/components/overrides/parts/MobileMenuToggle.astro +0 -0
  237. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/packages/lucode-starlight/components/overrides/parts/NavBar.astro +0 -0
  238. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/packages/lucode-starlight/components/overrides/parts/SidebarSublist.astro +0 -0
  239. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/packages/lucode-starlight/components/overrides/parts/toc/TableOfContentsList.astro +0 -0
  240. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/packages/lucode-starlight/components/overrides/parts/toc/starlight-toc.ts +0 -0
  241. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/packages/lucode-starlight/core/config/constants.ts +0 -0
  242. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/packages/lucode-starlight/core/config/expresive-code.ts +0 -0
  243. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/packages/lucode-starlight/core/config/override.ts +0 -0
  244. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/packages/lucode-starlight/core/config/schemas.ts +0 -0
  245. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/packages/lucode-starlight/core/config/vite.ts +0 -0
  246. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/packages/lucode-starlight/core/plugin.ts +0 -0
  247. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/packages/lucode-starlight/global.d.ts +0 -0
  248. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/packages/lucode-starlight/index.ts +0 -0
  249. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/packages/lucode-starlight/package.json +0 -0
  250. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/packages/lucode-starlight/schema.ts +0 -0
  251. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/packages/lucode-starlight/styles/base.css +0 -0
  252. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/packages/lucode-starlight/styles/layers.css +0 -0
  253. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/packages/lucode-starlight/styles/theme.css +0 -0
  254. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/packages/lucode-starlight/user-components.ts +0 -0
  255. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/packages/lucode-starlight/virtual.d.ts +0 -0
  256. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/renovate.json +0 -0
  257. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/test/lucode-starlight/config.test.ts +0 -0
  258. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/test/lucode-starlight/plugin.test.ts +0 -0
  259. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/test/lucode-starlight/starlight-toc.test.ts +0 -0
  260. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/tsconfig.json +0 -0
  261. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/vercel.json +0 -0
  262. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/docs/vitest.config.ts +0 -0
  263. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/examples/README.md +0 -0
  264. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/examples/auth/01_session_auth.py +0 -0
  265. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/examples/auth/02_jwt_auth.py +0 -0
  266. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/examples/auth/03_custom_backend.py +0 -0
  267. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/examples/auth/04_multiple_backends.py +0 -0
  268. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/examples/auth/05_router_integration.py +0 -0
  269. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/examples/config/.env.development +0 -0
  270. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/examples/config/.env.example +0 -0
  271. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/examples/config/.env.production +0 -0
  272. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/examples/config/01_basic_config.py +0 -0
  273. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/examples/config/02_web_app.py +0 -0
  274. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/examples/config/README.md +0 -0
  275. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/examples/database/01_sqlite_todo.py +0 -0
  276. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/examples/database/02_tortoise_notes.py +0 -0
  277. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/examples/database/03_tortoise_blog.py +0 -0
  278. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/examples/exception_handling/01_basic.py +0 -0
  279. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/examples/exception_handling/02_custom.py +0 -0
  280. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/examples/file_handling/01_upload_download.py +0 -0
  281. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/examples/file_handling/02_simple_upload.py +0 -0
  282. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/examples/getting_started/01_hello_world.py +0 -0
  283. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/examples/getting_started/02_basic_rest.py +0 -0
  284. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/examples/getting_started/03_enhanced_api.py +0 -0
  285. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/examples/getting_started/04_lifespan.py +0 -0
  286. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/examples/getting_started/05_streaming_middleware.py +0 -0
  287. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/examples/getting_started/README.md +0 -0
  288. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/examples/hashing/01_basic_password_hashing.py +0 -0
  289. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/examples/hashing/01_basic_usage.py +0 -0
  290. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/examples/hashing/02_multiple_algorithms.py +0 -0
  291. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/examples/hashing/02_schemes.py +0 -0
  292. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/examples/hashing/03_web_api.py +0 -0
  293. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/examples/hashing/README.md +0 -0
  294. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/examples/middleware/01_basic.py +0 -0
  295. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/examples/middleware/02_class_based.py +0 -0
  296. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/examples/middleware/03_asgi_middleware.py +0 -0
  297. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/examples/request_inputs/01_json_data.py +0 -0
  298. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/examples/request_inputs/02_form_data.py +0 -0
  299. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/examples/request_inputs/03_raw_body.py +0 -0
  300. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/examples/request_inputs/04_streaming.py +0 -0
  301. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/examples/responses/01_return_values.py +0 -0
  302. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/examples/responses/02_json_with_headers.py +0 -0
  303. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/examples/responses/03_response_types.py +0 -0
  304. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/examples/responses/04_response_classes.py +0 -0
  305. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/examples/routing/01_basic_routes.py +0 -0
  306. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/examples/routing/02_path_parameters.py +0 -0
  307. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/examples/routing/03_routes_class.py +0 -0
  308. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/examples/routing/04_routers.py +0 -0
  309. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/examples/templating/01_basic.py +0 -0
  310. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/examples/templating/02_inheritance.py +0 -0
  311. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/examples/templating/03_custom_filters.py +0 -0
  312. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/examples/templating/README.md +0 -0
  313. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/examples/templating/requirements.txt +0 -0
  314. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/examples/templating/templates/index.html +0 -0
  315. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/examples/templating/templates/user_profile.html +0 -0
  316. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/examples/validation/01_advanced.py +0 -0
  317. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/examples/validation/02_pydantic.py +0 -0
  318. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/examples/websockets/01_basic_echo.py +0 -0
  319. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/examples/websockets/02_chat_rooms.py +0 -0
  320. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/examples/websockets/03_custom_history.py +0 -0
  321. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/requirements-dev.txt +0 -0
  322. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/requirements.txt +0 -0
  323. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/__main__.py +0 -0
  324. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/_internals/__init__.py +0 -0
  325. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/_internals/_middleware.py +0 -0
  326. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/_internals/lazy.py +0 -0
  327. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/admin/__init__.py +0 -0
  328. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/admin/auth.py +0 -0
  329. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/admin/default_user.py +0 -0
  330. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/admin/models.py +0 -0
  331. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/admin/registry.py +0 -0
  332. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/admin/router.py +0 -0
  333. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/admin/routes.py +0 -0
  334. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/admin/static/logo.png +0 -0
  335. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/admin/templates/base.html +0 -0
  336. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/admin/templates/create.html +0 -0
  337. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/admin/templates/dashboard.html +0 -0
  338. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/admin/templates/delete.html +0 -0
  339. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/admin/templates/detail.html +0 -0
  340. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/admin/templates/list.html +0 -0
  341. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/admin/templates/login.html +0 -0
  342. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/admin/templates/query.html +0 -0
  343. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/admin/templates/update.html +0 -0
  344. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/admin/templating.py +0 -0
  345. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/application.py +0 -0
  346. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/auth/__init__.py +0 -0
  347. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/auth/apikey/__init__.py +0 -0
  348. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/auth/apikey/backend.py +0 -0
  349. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/auth/apikey/mixins.py +0 -0
  350. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/auth/apikey/models.py +0 -0
  351. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/auth/backend.py +0 -0
  352. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/auth/exceptions.py +0 -0
  353. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/auth/jwt_auth/__init__.py +0 -0
  354. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/auth/jwt_auth/backend.py +0 -0
  355. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/auth/jwt_auth/mixins.py +0 -0
  356. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/auth/jwt_auth/models.py +0 -0
  357. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/auth/jwt_auth/tokens.py +0 -0
  358. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/auth/middleware.py +0 -0
  359. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/auth/model.py +0 -0
  360. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/auth/session_auth/__init__.py +0 -0
  361. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/auth/session_auth/backend.py +0 -0
  362. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/auth/session_auth/guard.py +0 -0
  363. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/auth/session_auth/mixins.py +0 -0
  364. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/auth/session_auth/models.py +0 -0
  365. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/auth/use_auth.py +0 -0
  366. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/cache/__init__.py +0 -0
  367. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/cache/backends.py +0 -0
  368. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/cache/base.py +0 -0
  369. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/cache/config.py +0 -0
  370. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/cache/decorator.py +0 -0
  371. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/config/__init__.py +0 -0
  372. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/config/core.py +0 -0
  373. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/console/__init__.py +0 -0
  374. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/console/arguments.py +0 -0
  375. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/console/command.py +0 -0
  376. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/console/console.py +0 -0
  377. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/console/exceptions.py +0 -0
  378. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/console/output.py +0 -0
  379. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/console/prompt.py +0 -0
  380. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/console/style.py +0 -0
  381. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/console/terminal.py +0 -0
  382. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/core/__init__.py +0 -0
  383. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/core/converters.py +0 -0
  384. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/core/dependencies/__init__.py +0 -0
  385. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/core/dependencies/base.py +0 -0
  386. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/core/encoding.py +0 -0
  387. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/core/error/__init__.py +0 -0
  388. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/core/error/handler.py +0 -0
  389. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/core/helpers/__init__.py +0 -0
  390. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/core/helpers/async_helpers.py +0 -0
  391. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/core/helpers/deprecation.py +0 -0
  392. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/core/http/__init__.py +0 -0
  393. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/core/http/cookies.py +0 -0
  394. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/core/http/request.py +0 -0
  395. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/core/http/response.py +0 -0
  396. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/core/routing/__init__.py +0 -0
  397. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/core/routing/_utils.py +0 -0
  398. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/core/routing/base.py +0 -0
  399. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/core/routing/grouping.py +0 -0
  400. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/core/routing/websocket.py +0 -0
  401. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/encoding.py +0 -0
  402. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/events/__init__.py +0 -0
  403. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/events/core.py +0 -0
  404. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/events/emitter.py +0 -0
  405. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/events/enums.py +0 -0
  406. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/events/exceptions.py +0 -0
  407. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/events/mixins.py +0 -0
  408. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/events/transports/__init__.py +0 -0
  409. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/events/transports/base.py +0 -0
  410. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/events/transports/memory.py +0 -0
  411. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/events/transports/persistent.py +0 -0
  412. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/events/transports/record.py +0 -0
  413. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/events/transports/redis.py +0 -0
  414. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/events/types.py +0 -0
  415. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/exception_handler.py +0 -0
  416. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/exceptions.py +0 -0
  417. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/formparser.py +0 -0
  418. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/frontend.py +0 -0
  419. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/graphql/__init__.py +0 -0
  420. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/graphql/handler.py +0 -0
  421. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/handlers/__init__.py +0 -0
  422. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/handlers/not_found.py +0 -0
  423. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/hashing/__init__.py +0 -0
  424. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/hashing/config.py +0 -0
  425. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/hashing/core.py +0 -0
  426. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/hashing/exceptions.py +0 -0
  427. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/hashing/utils.py +0 -0
  428. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/helpers/__init__.py +0 -0
  429. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/helpers/crypto.py +0 -0
  430. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/helpers/files.py +0 -0
  431. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/helpers/hashing.py +0 -0
  432. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/helpers/html.py +0 -0
  433. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/helpers/jwt.py +0 -0
  434. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/helpers/network.py +0 -0
  435. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/helpers/retry.py +0 -0
  436. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/helpers/strings.py +0 -0
  437. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/helpers/text.py +0 -0
  438. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/http/__init__.py +0 -0
  439. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/http/accepts.py +0 -0
  440. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/http/client/__init__.py +0 -0
  441. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/http/client/caching.py +0 -0
  442. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/http/client/client.py +0 -0
  443. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/http/client/config.py +0 -0
  444. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/http/client/errors.py +0 -0
  445. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/http/client/middleware.py +0 -0
  446. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/http/client/models.py +0 -0
  447. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/http/client/retry.py +0 -0
  448. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/http/client/transport.py +0 -0
  449. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/http/client/utils.py +0 -0
  450. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/http/etag.py +0 -0
  451. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/http/lifecycle/__init__.py +0 -0
  452. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/http/lifecycle/context.py +0 -0
  453. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/http/lifecycle/helpers.py +0 -0
  454. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/http/lifecycle/middleware.py +0 -0
  455. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/http/status.py +0 -0
  456. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/logging.py +0 -0
  457. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/mail/__init__.py +0 -0
  458. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/mail/client.py +0 -0
  459. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/mail/config.py +0 -0
  460. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/mail/models.py +0 -0
  461. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/middleware/__init__.py +0 -0
  462. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/middleware/base.py +0 -0
  463. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/middleware/gzip.py +0 -0
  464. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/middleware/security.py +0 -0
  465. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/middleware/utils.py +0 -0
  466. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/normalize/__init__.py +0 -0
  467. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/normalize/helpers.py +0 -0
  468. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/normalize/middleware.py +0 -0
  469. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/objects/__init__.py +0 -0
  470. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/objects/common.py +0 -0
  471. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/objects/datastructures.py +0 -0
  472. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/objects/http.py +0 -0
  473. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/objects/routing.py +0 -0
  474. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/openapi/__init__.py +0 -0
  475. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/openapi/config.py +0 -0
  476. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/openapi/models.py +0 -0
  477. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/openapi/ui.py +0 -0
  478. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/openapi/utils.py +0 -0
  479. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/pagination.py +0 -0
  480. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/parameters.py +0 -0
  481. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/permissions/__init__.py +0 -0
  482. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/permissions/mixins.py +0 -0
  483. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/permissions/models.py +0 -0
  484. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/py.typed +0 -0
  485. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/record/__init__.py +0 -0
  486. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/record/_bridge.py +0 -0
  487. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/record/casting.py +0 -0
  488. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/record/collection.py +0 -0
  489. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/record/commands/__init__.py +0 -0
  490. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/record/commands/functions.py +0 -0
  491. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/record/config.py +0 -0
  492. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/record/console.py +0 -0
  493. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/record/events.py +0 -0
  494. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/record/exceptions.py +0 -0
  495. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/record/factories.py +0 -0
  496. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/record/fields.py +0 -0
  497. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/record/helpers.py +0 -0
  498. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/record/logging.py +0 -0
  499. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/record/manager.py +0 -0
  500. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/record/mixins/__init__.py +0 -0
  501. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/record/models.py +0 -0
  502. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/record/pagination.py +0 -0
  503. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/record/pydantic.py +0 -0
  504. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/record/queries.py +0 -0
  505. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/record/scopes.py +0 -0
  506. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/record/transactions.py +0 -0
  507. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/route_builder.py +0 -0
  508. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/security/__init__.py +0 -0
  509. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/security/cors/__init__.py +0 -0
  510. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/security/cors/_middleware.py +0 -0
  511. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/security/cors/config.py +0 -0
  512. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/security/csrf/__init__.py +0 -0
  513. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/security/csrf/_middleware.py +0 -0
  514. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/security/csrf/config.py +0 -0
  515. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/security/ratelimit/__init__.py +0 -0
  516. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/security/ratelimit/_middleware.py +0 -0
  517. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/security/ratelimit/backends/__init__.py +0 -0
  518. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/security/ratelimit/backends/base.py +0 -0
  519. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/security/ratelimit/backends/memory.py +0 -0
  520. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/security/ratelimit/backends/record.py +0 -0
  521. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/security/ratelimit/backends/redis.py +0 -0
  522. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/security/ratelimit/config.py +0 -0
  523. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/security/ratelimit/models.py +0 -0
  524. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/security/ratelimit/strategies/__init__.py +0 -0
  525. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/security/ratelimit/strategies/base.py +0 -0
  526. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/security/ratelimit/strategies/fixed_window.py +0 -0
  527. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/security/ratelimit/strategies/sliding_window.py +0 -0
  528. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/security/ratelimit/strategies/token_bucket.py +0 -0
  529. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/security/shield.py +0 -0
  530. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/session/__init__.py +0 -0
  531. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/session/base.py +0 -0
  532. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/session/config.py +0 -0
  533. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/session/file.py +0 -0
  534. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/session/middleware.py +0 -0
  535. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/session/session_objects.py +0 -0
  536. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/session/signed_cookies.py +0 -0
  537. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/static.py +0 -0
  538. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/templating/__init__.py +0 -0
  539. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/templating/middleware.py +0 -0
  540. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/templating/utils.py +0 -0
  541. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/testclient/__init__.py +0 -0
  542. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/testclient/_internal/__init__.py +0 -0
  543. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/testclient/_internal/inputs.py +0 -0
  544. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/testclient/_internal/transport.py +0 -0
  545. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/testclient/_internal/types.py +0 -0
  546. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/testclient/_internal/utils.py +0 -0
  547. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/testclient/_internal/websockets.py +0 -0
  548. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/testclient/async_client.py +0 -0
  549. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/testclient/base.py +0 -0
  550. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/testclient/exceptions.py +0 -0
  551. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/testclient/helpers.py +0 -0
  552. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/types.py +0 -0
  553. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/users/__init__.py +0 -0
  554. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/users/base.py +0 -0
  555. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/users/commands.py +0 -0
  556. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/users/console.py +0 -0
  557. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/users/managers.py +0 -0
  558. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/users/protocol.py +0 -0
  559. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/users/simple.py +0 -0
  560. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/utils/__init__.py +0 -0
  561. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/utils/concurrency.py +0 -0
  562. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/validation/__init__.py +0 -0
  563. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/validation/compiler.py +0 -0
  564. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/validation/errors.py +0 -0
  565. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/validation/fields.py +0 -0
  566. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/websockets/__init__.py +0 -0
  567. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/websockets/base.py +0 -0
  568. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/websockets/channels.py +0 -0
  569. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/websockets/consumers.py +0 -0
  570. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/websockets/errors.py +0 -0
  571. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/websockets/history.py +0 -0
  572. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/websockets/status.py +0 -0
  573. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/websockets/utils.py +0 -0
  574. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/work/__init__.py +0 -0
  575. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/work/backends.py +0 -0
  576. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/work/background/__init__.py +0 -0
  577. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/work/background/supervisor.py +0 -0
  578. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/work/background/tasks.py +0 -0
  579. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/work/commands.py +0 -0
  580. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/work/console.py +0 -0
  581. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/work/dependency.py +0 -0
  582. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/work/middleware.py +0 -0
  583. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/work/queue/__init__.py +0 -0
  584. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/work/queue/batches.py +0 -0
  585. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/work/queue/connection.py +0 -0
  586. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/work/queue/events.py +0 -0
  587. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/work/queue/failed.py +0 -0
  588. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/work/queue/job.py +0 -0
  589. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/work/queue/listener.py +0 -0
  590. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/work/queue/middleware.py +0 -0
  591. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/work/queue/payloads.py +0 -0
  592. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/work/queue/workers.py +0 -0
  593. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/work/scheduler/__init__.py +0 -0
  594. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/work/scheduler/cron.py +0 -0
  595. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/work/scheduler/jobs.py +0 -0
  596. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/work/scheduler/manager.py +0 -0
  597. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/work/scheduler/middleware.py +0 -0
  598. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/work/scheduler/triggers.py +0 -0
  599. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/work/task.py +0 -0
  600. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/sillo/work/types.py +0 -0
  601. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/__init__.py +0 -0
  602. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/conftest.py +0 -0
  603. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/static/example.txt +0 -0
  604. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/static/page.html +0 -0
  605. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/static/script.js +0 -0
  606. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/static/style.css +0 -0
  607. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/static/subfolder/subfile.txt +0 -0
  608. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/templates/base.html +0 -0
  609. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/templates/product.html +0 -0
  610. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/templates/welcome.html +0 -0
  611. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_admin/__init__.py +0 -0
  612. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_admin/test_admin_export_query.py +0 -0
  613. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_admin/test_admin_models.py +0 -0
  614. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_admin/test_admin_startup_order.py +0 -0
  615. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_admin/test_admin_views.py +0 -0
  616. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_applications/__init__.py +0 -0
  617. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_applications/test_app_class_name.py +0 -0
  618. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_applications/test_application.py +0 -0
  619. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_applications/test_route_kwargs.py +0 -0
  620. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_auth/__init__.py +0 -0
  621. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_auth/test_apikey_backend.py +0 -0
  622. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_auth/test_auth_middleware.py +0 -0
  623. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_auth/test_auth_utilities.py +0 -0
  624. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_auth/test_custom_backend.py +0 -0
  625. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_auth/test_jwt_backend.py +0 -0
  626. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_auth/test_jwt_user_mixin.py +0 -0
  627. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_auth/test_security_schemes.py +0 -0
  628. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_auth/test_session_backend.py +0 -0
  629. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_auth/test_session_guard.py +0 -0
  630. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_auth/test_token_for_user.py +0 -0
  631. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_auth/test_use_auth.py +0 -0
  632. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_auth/test_user_models.py +0 -0
  633. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_cache/__init__.py +0 -0
  634. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_cache/test_base.py +0 -0
  635. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_cache/test_decorator.py +0 -0
  636. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_cache/test_memory_cache.py +0 -0
  637. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_cache/test_redis_backend.py +0 -0
  638. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_config/__init__.py +0 -0
  639. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_config/conftest.py +0 -0
  640. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_config/test_config_loading.py +0 -0
  641. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_console/__init__.py +0 -0
  642. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_console/test_arguments.py +0 -0
  643. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_console/test_builtin_record.py +0 -0
  644. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_console/test_builtin_users.py +0 -0
  645. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_console/test_builtin_work.py +0 -0
  646. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_console/test_cli.py +0 -0
  647. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_console/test_command.py +0 -0
  648. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_console/test_console.py +0 -0
  649. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_console/test_output.py +0 -0
  650. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_console/test_prompt.py +0 -0
  651. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_console/test_style.py +0 -0
  652. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_console/test_terminal.py +0 -0
  653. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_cors/__init__.py +0 -0
  654. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_cors/test_configuration.py +0 -0
  655. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_cors/test_error_handling.py +0 -0
  656. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_cors/test_integration.py +0 -0
  657. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_cors/test_preflight_requests.py +0 -0
  658. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_cors/test_simple_requests.py +0 -0
  659. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_dependencies/__init__.py +0 -0
  660. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_dependencies/test_dependency_injection.py +0 -0
  661. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_encoding/__init__.py +0 -0
  662. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_encoding/test_custom_encoder.py +0 -0
  663. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_encoding/test_encoding_shim.py +0 -0
  664. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_encoding/test_jsonable_encoder.py +0 -0
  665. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_events/__init__.py +0 -0
  666. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_events/test_comprehensive_events.py +0 -0
  667. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_events/test_events_backends.py +0 -0
  668. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_exception_handlers/__init__.py +0 -0
  669. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_exception_handlers/test_basic_exception_handlers.py +0 -0
  670. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_exception_handlers/test_exception_handler_integration.py +0 -0
  671. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_exception_handlers/test_not_found_handler.py +0 -0
  672. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_exception_handlers/test_server_error_debug.py +0 -0
  673. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_forms/__init__.py +0 -0
  674. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_forms/test_form_parser.py +0 -0
  675. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_forms/test_uploaded_file_save.py +0 -0
  676. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_frontend/__init__.py +0 -0
  677. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_frontend/test_frontend_app.py +0 -0
  678. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_graphql/__init__.py +0 -0
  679. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_graphql/test_graphql_schema.py +0 -0
  680. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_helpers/__init__.py +0 -0
  681. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_helpers/test_accepts.py +0 -0
  682. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_helpers/test_async.py +0 -0
  683. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_helpers/test_concurrency.py +0 -0
  684. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_helpers/test_deprecation.py +0 -0
  685. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_helpers/test_files.py +0 -0
  686. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_helpers/test_hashing_crypto.py +0 -0
  687. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_helpers/test_html.py +0 -0
  688. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_helpers/test_jwt.py +0 -0
  689. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_helpers/test_network.py +0 -0
  690. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_helpers/test_retry.py +0 -0
  691. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_helpers/test_strings.py +0 -0
  692. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_helpers/test_text.py +0 -0
  693. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_http/__init__.py +0 -0
  694. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_http/test_accepts_middleware.py +0 -0
  695. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_http/test_accepts_negotiation.py +0 -0
  696. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_http/test_cookie_parsing.py +0 -0
  697. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_http/test_http_client.py +0 -0
  698. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_http/test_http_etag.py +0 -0
  699. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_http/test_http_module_exports.py +0 -0
  700. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_lifecycle/__init__.py +0 -0
  701. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_lifecycle/test_context.py +0 -0
  702. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_lifecycle/test_request_id.py +0 -0
  703. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_mail/__init__.py +0 -0
  704. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_mail/test_mail_client.py +0 -0
  705. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_mail/test_mail_service.py +0 -0
  706. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_mail/test_mail_transport.py +0 -0
  707. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_middleware/__init__.py +0 -0
  708. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_middleware/test_app_level_middleware.py +0 -0
  709. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_middleware/test_asgi_middleware.py +0 -0
  710. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_middleware/test_gzip.py +0 -0
  711. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_middleware/test_route_level_middleware.py +0 -0
  712. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_middleware/test_router_level_middleware.py +0 -0
  713. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_middleware/test_security_middleware.py +0 -0
  714. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_middleware/test_use_for_route.py +0 -0
  715. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_normalize/__init__.py +0 -0
  716. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_normalize/test_helpers.py +0 -0
  717. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_normalize/test_middleware.py +0 -0
  718. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_objects/__init__.py +0 -0
  719. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_objects/test_headers.py +0 -0
  720. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_objects/test_multidict.py +0 -0
  721. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_objects/test_url.py +0 -0
  722. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_openapi/__init__.py +0 -0
  723. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_openapi/test_docs_ui.py +0 -0
  724. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_openapi/test_openapi_config.py +0 -0
  725. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_openapi/test_openapi_spec.py +0 -0
  726. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_openapi/test_openapi_utils.py +0 -0
  727. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_optional_imports.py +0 -0
  728. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_pagination/__init__.py +0 -0
  729. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_pagination/test_data_handlers.py +0 -0
  730. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_pagination/test_edge_cases.py +0 -0
  731. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_pagination/test_error_handling.py +0 -0
  732. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_pagination/test_integration.py +0 -0
  733. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_pagination/test_pagination_strategies.py +0 -0
  734. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_pagination/test_paginators.py +0 -0
  735. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_pagination/test_response_classes.py +0 -0
  736. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_pagination/test_response_paginate.py +0 -0
  737. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_parameters/__init__.py +0 -0
  738. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_parameters/test_cookie.py +0 -0
  739. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_parameters/test_header.py +0 -0
  740. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_parameters/test_nested.py +0 -0
  741. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_parameters/test_openapi.py +0 -0
  742. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_parameters/test_query.py +0 -0
  743. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_permissions/__init__.py +0 -0
  744. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_permissions/test_permissions.py +0 -0
  745. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_record/__init__.py +0 -0
  746. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_record/test_backend_config.py +0 -0
  747. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_record/test_collection.py +0 -0
  748. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_record/test_events.py +0 -0
  749. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_record/test_model_features.py +0 -0
  750. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_record/test_queries.py +0 -0
  751. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_record/test_query_logging.py +0 -0
  752. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_record/test_record_commands.py +0 -0
  753. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_record/test_savepoints.py +0 -0
  754. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_record/test_seeding.py +0 -0
  755. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_redis/__init__.py +0 -0
  756. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_redis/test_redis_cache.py +0 -0
  757. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_redis/test_redis_transport.py +0 -0
  758. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_requests/__init__.py +0 -0
  759. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_requests/test_basic_properties.py +0 -0
  760. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_requests/test_body_data.py +0 -0
  761. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_requests/test_cookies_auth.py +0 -0
  762. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_requests/test_path_params.py +0 -0
  763. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_requests/test_query_params.py +0 -0
  764. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_requests/test_request_flags.py +0 -0
  765. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_responses/__init__.py +0 -0
  766. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_responses/test_abort_not_found.py +0 -0
  767. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_responses/test_advanced_responses.py +0 -0
  768. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_responses/test_basic_responses.py +0 -0
  769. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_responses/test_file_responses.py +0 -0
  770. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_responses/test_headers_cookies.py +0 -0
  771. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_responses/test_redirect_streaming.py +0 -0
  772. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_responses/test_response_properties.py +0 -0
  773. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_routing/__init__.py +0 -0
  774. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_routing/test_basic_routing.py +0 -0
  775. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_routing/test_converters.py +0 -0
  776. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_routing/test_grouping.py +0 -0
  777. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_routing/test_nested_routes.py +0 -0
  778. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_routing/test_path_parameters.py +0 -0
  779. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_routing/test_router_wrap_asgi.py +0 -0
  780. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_security/__init__.py +0 -0
  781. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_security/test_backends.py +0 -0
  782. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_security/test_csrf.py +0 -0
  783. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_security/test_middleware.py +0 -0
  784. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_security/test_record_backend.py +0 -0
  785. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_security/test_strategies.py +0 -0
  786. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_sessions/__init__.py +0 -0
  787. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_sessions/test_base.py +0 -0
  788. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_sessions/test_file_sessions.py +0 -0
  789. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_sessions/test_integration.py +0 -0
  790. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_sessions/test_middleware.py +0 -0
  791. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_sessions/test_settings.py +0 -0
  792. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_sessions/test_signed_cookies.py +0 -0
  793. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_static/__init__.py +0 -0
  794. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_static/test_static_files.py +0 -0
  795. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_templating/__init__.py +0 -0
  796. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_templating/test_template_utils.py +0 -0
  797. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_templating/test_templates.py +0 -0
  798. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_users/__init__.py +0 -0
  799. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_users/test_password.py +0 -0
  800. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_users/test_user_commands.py +0 -0
  801. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_users/test_user_model.py +0 -0
  802. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_validation/__init__.py +0 -0
  803. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_validation/conftest.py +0 -0
  804. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_validation/test_body_form.py +0 -0
  805. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_validation/test_legacy_compat.py +0 -0
  806. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_validation/test_markers_unit.py +0 -0
  807. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_validation/test_openapi_generation.py +0 -0
  808. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_validation/test_params.py +0 -0
  809. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_validation/test_request_model.py +0 -0
  810. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_validation/test_response_model.py +0 -0
  811. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_websockets/__init__.py +0 -0
  812. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_websockets/test_channel_history.py +0 -0
  813. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_websockets/test_consumer_encodings.py +0 -0
  814. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_websockets/test_group_removal.py +0 -0
  815. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_websockets/test_history_contract.py +0 -0
  816. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_websockets/test_websocket_consumers.py +0 -0
  817. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_websockets/test_websocket_errors.py +0 -0
  818. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_websockets/test_websocket_groups.py +0 -0
  819. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_websockets/test_websocket_protocol.py +0 -0
  820. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_websockets/test_websocket_routing.py +0 -0
  821. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_websockets/test_websocket_state_machine.py +0 -0
  822. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_work/__init__.py +0 -0
  823. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_work/test_background.py +0 -0
  824. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_work/test_events.py +0 -0
  825. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_work/test_job_dispatch.py +0 -0
  826. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_work/test_job_queue.py +0 -0
  827. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_work/test_job_round_trip.py +0 -0
  828. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_work/test_memory_backend.py +0 -0
  829. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_work/test_queue.py +0 -0
  830. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_work/test_queue_worker.py +0 -0
  831. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_work/test_redis_queue_reliability.py +0 -0
  832. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_work/test_routes.py +0 -0
  833. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_work/test_scheduler.py +0 -0
  834. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_work/test_scheduler_middleware.py +0 -0
  835. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_work/test_task.py +0 -0
  836. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_work/test_work_commands.py +0 -0
  837. {sillo_framework-0.0.2a2 → sillo_framework-0.0.2a3}/tests/test_work/test_work_di.py +0 -0
  838. {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.2a2
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.2a2"
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.2a2"
299
+ version = "0.0.2a3"
300
300
  version_files = [
301
301
  "pyproject.toml:version",
302
302
  "sillo/__init__.py:__version__"
@@ -103,7 +103,7 @@ Common Patterns:
103
103
 
104
104
  from sillo.core.routing import Route, Router
105
105
 
106
- __version__: str = "0.0.2a2"
106
+ __version__: str = "0.0.2a3"
107
107
 
108
108
  from sillo.core.dependencies import Depend
109
109
 
@@ -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.lower() in (m.lower() for m in self.methods)
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
- self.app = JSONResponse(
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(matched_params)
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
 
@@ -1136,7 +1136,7 @@ wheels = [
1136
1136
 
1137
1137
  [[package]]
1138
1138
  name = "sillo-framework"
1139
- version = "0.0.2a2"
1139
+ version = "0.0.2a3"
1140
1140
  source = { editable = "." }
1141
1141
  dependencies = [
1142
1142
  { name = "anyio" },
@@ -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,4 +0,0 @@
1
- interface:
2
- display_name: "sillo Overview"
3
- short_description: "Comprehensive sillo learning guide"
4
- default_prompt: "Use $sillo-overview to teach sillo with concrete examples across routing, auth, pagination, WebSockets, and the rest of the framework."
@@ -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
@@ -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."