sillo-framework 0.2.0__tar.gz → 0.2.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1047) hide show
  1. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/CHANGELOG.md +8 -0
  2. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/PKG-INFO +2 -3
  3. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/advanced/security.md +2 -2
  4. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/advanced/sessions.md +24 -8
  5. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/concurrency.md +4 -4
  6. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/csrf.md +26 -6
  7. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/sessions.md +16 -1
  8. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/pyproject.toml +2 -3
  9. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/requirements.txt +0 -1
  10. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/__init__.py +1 -1
  11. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/core/http/response.py +85 -8
  12. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/core/routing/router.py +1 -1
  13. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/helpers/crypto.py +27 -5
  14. sillo_framework-0.2.1/sillo/helpers/signing.py +192 -0
  15. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/objects/http.py +1 -1
  16. sillo_framework-0.2.1/sillo/security/csrf/_middleware.py +253 -0
  17. sillo_framework-0.2.1/sillo/security/csrf/config.py +230 -0
  18. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/session/config.py +38 -0
  19. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/session/middleware.py +58 -2
  20. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/session/session_objects.py +32 -36
  21. sillo_framework-0.2.1/sillo/session/signed_cookies.py +114 -0
  22. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/templating/middleware.py +4 -1
  23. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_helpers/test_concurrency.py +1 -1
  24. sillo_framework-0.2.1/tests/test_helpers/test_signing.py +155 -0
  25. sillo_framework-0.2.1/tests/test_responses/test_cookie_attributes.py +155 -0
  26. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_security/test_csrf.py +2 -2
  27. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_security/test_csrf_predicates.py +10 -19
  28. sillo_framework-0.2.1/tests/test_security/test_csrf_regressions.py +226 -0
  29. sillo_framework-0.2.1/tests/test_sessions/test_expiry.py +224 -0
  30. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/uv.lock +3 -13
  31. sillo_framework-0.2.0/sillo/security/csrf/_middleware.py +0 -162
  32. sillo_framework-0.2.0/sillo/security/csrf/config.py +0 -117
  33. sillo_framework-0.2.0/sillo/session/signed_cookies.py +0 -57
  34. sillo_framework-0.2.0/sillo/utils/__init__.py +0 -1
  35. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/.github/CODE_OF_CONDUCT.md +0 -0
  36. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/.github/CONTRIBUTING.MD +0 -0
  37. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  38. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  39. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/.github/dependabot.yml +0 -0
  40. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/.github/funding.yml +0 -0
  41. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/.github/workflows/coverage.yml +0 -0
  42. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/.github/workflows/format-code.yml +0 -0
  43. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/.github/workflows/lint.yaml +0 -0
  44. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/.github/workflows/merge-to-main.yml +0 -0
  45. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/.github/workflows/release.yml +0 -0
  46. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/.github/workflows/run-tests.yaml +0 -0
  47. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/.github/workflows/triage.yml +0 -0
  48. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/.github/workflows/type-check.yaml +0 -0
  49. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/.gitignore +0 -0
  50. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/LICENSE +0 -0
  51. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/README.md +0 -0
  52. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/SECURITY.md +0 -0
  53. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/benchmarks/.gitignore +0 -0
  54. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/benchmarks/README.md +0 -0
  55. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/benchmarks/pyproject.toml +0 -0
  56. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/benchmarks/results/.gitkeep +0 -0
  57. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/benchmarks/sillo_bench/__init__.py +0 -0
  58. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/benchmarks/sillo_bench/__main__.py +0 -0
  59. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/benchmarks/sillo_bench/apps/__init__.py +0 -0
  60. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/benchmarks/sillo_bench/apps/django_app.py +0 -0
  61. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/benchmarks/sillo_bench/apps/fastapi_app.py +0 -0
  62. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/benchmarks/sillo_bench/apps/flask_app.py +0 -0
  63. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/benchmarks/sillo_bench/apps/sillo_app.py +0 -0
  64. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/benchmarks/sillo_bench/apps/starlette_app.py +0 -0
  65. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/benchmarks/sillo_bench/cli.py +0 -0
  66. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/benchmarks/sillo_bench/environment.py +0 -0
  67. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/benchmarks/sillo_bench/loadtools.py +0 -0
  68. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/benchmarks/sillo_bench/payloads.py +0 -0
  69. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/benchmarks/sillo_bench/report.py +0 -0
  70. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/benchmarks/sillo_bench/runner.py +0 -0
  71. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/benchmarks/sillo_bench/scenarios.py +0 -0
  72. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/coverage.json +0 -0
  73. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/.github/workflows/ci.yml +0 -0
  74. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/.github/workflows/deploy-docs-preview.yml +0 -0
  75. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/.github/workflows/deploy-docs.yml +0 -0
  76. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/.github/workflows/publish-package.yml +0 -0
  77. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/.gitignore +0 -0
  78. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/.prettierrc +0 -0
  79. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/README.md +0 -0
  80. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/bun.lock +0 -0
  81. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/README.md +0 -0
  82. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/astro.config.mjs +0 -0
  83. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/community-unpublished/README.md +0 -0
  84. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/community-unpublished/contribution-guide.md +0 -0
  85. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/community-unpublished/index.md +0 -0
  86. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/community-unpublished/installation.md +0 -0
  87. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/community-unpublished/integrations/jrpc.md +0 -0
  88. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/community-unpublished/integrations/mail.md +0 -0
  89. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/community-unpublished/integrations/redis.md +0 -0
  90. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/community-unpublished/integrations/scheduler.md +0 -0
  91. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/community-unpublished/integrations/tasks.md +0 -0
  92. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/community-unpublished/integrations/tortoise.md +0 -0
  93. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/community-unpublished/middleware/etag.md +0 -0
  94. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/community-unpublished/middleware/proxy.md +0 -0
  95. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/community-unpublished/middleware/timeout.md +0 -0
  96. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/community-unpublished/middleware/trusted-host.md +0 -0
  97. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/package.json +0 -0
  98. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/public/favicon.svg +0 -0
  99. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/public/logo-white.svg +0 -0
  100. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/public/logo.ico +0 -0
  101. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/public/logo.png +0 -0
  102. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/assets/houston.webp +0 -0
  103. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/assets/logo-black.svg +0 -0
  104. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/assets/logo-white.svg +0 -0
  105. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/assets/placeholder.svg +0 -0
  106. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/assets/placeholder169.svg +0 -0
  107. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/components/Header.astro +0 -0
  108. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/components/MermaidRenderer.astro +0 -0
  109. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/components/PageFrame.astro +0 -0
  110. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/components/SectionNav.astro +0 -0
  111. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/components/SiteFooter.astro +0 -0
  112. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/advanced/admin.md +0 -0
  113. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/advanced/application-lifecycle.md +0 -0
  114. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/advanced/architecture-overview.md +0 -0
  115. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/advanced/atlas.md +0 -0
  116. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/advanced/auth-backends.md +0 -0
  117. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/advanced/authentication.md +0 -0
  118. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/advanced/cache.md +0 -0
  119. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/advanced/change-impact.md +0 -0
  120. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/advanced/configuration.md +0 -0
  121. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/advanced/console.md +0 -0
  122. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/advanced/debugging.md +0 -0
  123. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/advanced/decisions.md +0 -0
  124. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/advanced/dependency-injection.md +0 -0
  125. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/advanced/events.md +0 -0
  126. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/advanced/exception-handling.md +0 -0
  127. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/advanced/extending.md +0 -0
  128. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/advanced/glossary.md +0 -0
  129. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/advanced/hashing.md +0 -0
  130. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/advanced/helpers.md +0 -0
  131. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/advanced/http-correctness.md +0 -0
  132. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/advanced/http-request.md +0 -0
  133. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/advanced/http-response.md +0 -0
  134. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/advanced/index.md +0 -0
  135. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/advanced/inertia.md +0 -0
  136. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/advanced/mail.md +0 -0
  137. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/advanced/middleware.md +0 -0
  138. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/advanced/oauth.md +0 -0
  139. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/advanced/openapi.md +0 -0
  140. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/advanced/pagination.md +0 -0
  141. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/advanced/parameters.md +0 -0
  142. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/advanced/permissions.md +0 -0
  143. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/advanced/record-factories.md +0 -0
  144. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/advanced/record-migrations.md +0 -0
  145. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/advanced/record-models.md +0 -0
  146. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/advanced/record-queries.md +0 -0
  147. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/advanced/record-transactions.md +0 -0
  148. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/advanced/records-orm.md +0 -0
  149. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/advanced/routing.md +0 -0
  150. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/advanced/start.md +0 -0
  151. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/advanced/templating.md +0 -0
  152. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/advanced/test-client.md +0 -0
  153. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/advanced/types-and-encoding.md +0 -0
  154. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/advanced/users.md +0 -0
  155. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/advanced/validation.md +0 -0
  156. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/advanced/websockets.md +0 -0
  157. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/advanced/work-background.md +0 -0
  158. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/advanced/work-queues.md +0 -0
  159. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/advanced/work-scheduler.md +0 -0
  160. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/advanced/work-tasks.md +0 -0
  161. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/cli/arguments.md +0 -0
  162. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/cli/custom-commands.md +0 -0
  163. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/cli/database.md +0 -0
  164. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/cli/discovery.md +0 -0
  165. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/cli/framework-commands.md +0 -0
  166. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/cli/index.md +0 -0
  167. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/cli/output.md +0 -0
  168. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/cli/prompts.md +0 -0
  169. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/cli/queues.md +0 -0
  170. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/cli/scheduler.md +0 -0
  171. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/cli/standalone-consoles.md +0 -0
  172. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/cli/styling.md +0 -0
  173. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/cli/users.md +0 -0
  174. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/api-keys.md +0 -0
  175. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/authentication.md +0 -0
  176. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/cache.mdx +0 -0
  177. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/configuration.md +0 -0
  178. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/console.md +0 -0
  179. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/content-negotiation.md +0 -0
  180. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/cookies.mdx +0 -0
  181. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/cors.md +0 -0
  182. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/dependency-injection.md +0 -0
  183. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/environment.md +0 -0
  184. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/error-handling.mdx +0 -0
  185. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/events.mdx +0 -0
  186. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/file-upload.md +0 -0
  187. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/frontend.md +0 -0
  188. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/graphql.md +0 -0
  189. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/handlers.md +0 -0
  190. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/hashing.md +0 -0
  191. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/headers.mdx +0 -0
  192. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/helpers/async.mdx +0 -0
  193. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/helpers/crypto.mdx +0 -0
  194. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/helpers/deprecation.mdx +0 -0
  195. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/helpers/files.mdx +0 -0
  196. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/helpers/hashing.mdx +0 -0
  197. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/helpers/html.mdx +0 -0
  198. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/helpers/index.mdx +0 -0
  199. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/helpers/jwt.mdx +0 -0
  200. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/helpers/network.mdx +0 -0
  201. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/helpers/retry.mdx +0 -0
  202. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/helpers/strings.mdx +0 -0
  203. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/helpers/text.mdx +0 -0
  204. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/http/client.md +0 -0
  205. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/inertia/assets.md +0 -0
  206. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/inertia/forms.md +0 -0
  207. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/inertia/index.md +0 -0
  208. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/inertia/pages.md +0 -0
  209. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/inertia/start.mdx +0 -0
  210. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/inertia/structure.md +0 -0
  211. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/installation.mdx +0 -0
  212. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/introduction.md +0 -0
  213. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/jwt-auth.md +0 -0
  214. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/middleware.md +0 -0
  215. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/oauth/index.md +0 -0
  216. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/oauth/openapi.md +0 -0
  217. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/oauth/persisting-logins.md +0 -0
  218. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/oauth/providers.md +0 -0
  219. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/oauth/security.md +0 -0
  220. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/openapi/authentication-documentation.md +0 -0
  221. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/openapi/basic-config.png +0 -0
  222. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/openapi/bearerAuth.png +0 -0
  223. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/openapi/custom.png +0 -0
  224. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/openapi/custom2.png +0 -0
  225. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/openapi/customizing-openapi-configuration.md +0 -0
  226. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/openapi/description.png +0 -0
  227. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/openapi/documentation-ui.md +0 -0
  228. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/openapi/headers.png +0 -0
  229. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/openapi/index.md +0 -0
  230. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/openapi/multi-response.png +0 -0
  231. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/openapi/path-params.png +0 -0
  232. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/openapi/query-params.png +0 -0
  233. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/openapi/request-body.png +0 -0
  234. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/openapi/request-parameters.md +0 -0
  235. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/openapi/request-schemas.mdx +0 -0
  236. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/openapi/response-list.png +0 -0
  237. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/openapi/response-models.md +0 -0
  238. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/openapi/response.png +0 -0
  239. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/pagination.mdx +0 -0
  240. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/permissions.md +0 -0
  241. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/protecting-routes.md +0 -0
  242. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/rate-limiting.md +0 -0
  243. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/record/casting-collections.mdx +0 -0
  244. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/record/exceptions-pydantic.mdx +0 -0
  245. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/record/index.mdx +0 -0
  246. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/record/migrations.mdx +0 -0
  247. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/record/models.mdx +0 -0
  248. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/record/pagination.mdx +0 -0
  249. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/record/scopes-events.mdx +0 -0
  250. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/record/transactions-factories.mdx +0 -0
  251. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/request-info.md +0 -0
  252. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/request-inputs.md +0 -0
  253. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/request-lifecycle.md +0 -0
  254. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/request-parameters.mdx +0 -0
  255. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/routers-and-subapps.md +0 -0
  256. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/routing.mdx +0 -0
  257. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/security.md +0 -0
  258. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/sending-responses.mdx +0 -0
  259. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/serialization.md +0 -0
  260. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/services/mail.mdx +0 -0
  261. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/session-auth.md +0 -0
  262. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/start/admin.md +0 -0
  263. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/start/authentication.md +0 -0
  264. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/start/background-work.md +0 -0
  265. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/start/console.md +0 -0
  266. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/start/database.md +0 -0
  267. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/start/deployment.md +0 -0
  268. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/start/index.mdx +0 -0
  269. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/start/structure.md +0 -0
  270. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/start/testing.md +0 -0
  271. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/startups-and-shutdowns.mdx +0 -0
  272. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/static-files.mdx +0 -0
  273. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/streaming-response.mdx +0 -0
  274. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/templating/advanced.mdx +0 -0
  275. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/templating/index.mdx +0 -0
  276. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/url-normalization.md +0 -0
  277. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/users.md +0 -0
  278. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/validation/errors.md +0 -0
  279. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/validation/forms-and-files.md +0 -0
  280. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/validation/index.md +0 -0
  281. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/validation/openapi.md +0 -0
  282. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/validation/parameters.md +0 -0
  283. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/validation/request-bodies.md +0 -0
  284. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/validation/response-models.md +0 -0
  285. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/websockets/channels.mdx +0 -0
  286. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/websockets/consumer.mdx +0 -0
  287. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/websockets/events.mdx +0 -0
  288. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/websockets/groups.mdx +0 -0
  289. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/websockets/index.mdx +0 -0
  290. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/work/background.mdx +0 -0
  291. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/work/events.mdx +0 -0
  292. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/work/index.mdx +0 -0
  293. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/work/jobs.mdx +0 -0
  294. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/work/queue.mdx +0 -0
  295. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/guides/work/scheduler.mdx +0 -0
  296. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/orm/admin-customising.md +0 -0
  297. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/orm/admin-permissions.md +0 -0
  298. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/orm/admin-registering.md +0 -0
  299. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/orm/admin.md +0 -0
  300. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/orm/aggregation.md +0 -0
  301. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/orm/bulk.md +0 -0
  302. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/orm/casting.md +0 -0
  303. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/orm/collections.md +0 -0
  304. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/orm/configuration.md +0 -0
  305. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/orm/connections.md +0 -0
  306. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/orm/eager-loading.md +0 -0
  307. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/orm/events.md +0 -0
  308. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/orm/exceptions.md +0 -0
  309. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/orm/factories.md +0 -0
  310. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/orm/field-reference.md +0 -0
  311. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/orm/fields.md +0 -0
  312. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/orm/filtering.md +0 -0
  313. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/orm/index.md +0 -0
  314. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/orm/lookups.md +0 -0
  315. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/orm/mass-assignment.md +0 -0
  316. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/orm/meta.md +0 -0
  317. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/orm/migrations-applying.md +0 -0
  318. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/orm/migrations-programmatic.md +0 -0
  319. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/orm/migrations.md +0 -0
  320. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/orm/mixins.md +0 -0
  321. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/orm/models.md +0 -0
  322. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/orm/pagination.md +0 -0
  323. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/orm/pydantic.md +0 -0
  324. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/orm/queries.md +0 -0
  325. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/orm/queryset.md +0 -0
  326. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/orm/raw-sql.md +0 -0
  327. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/orm/relationships.md +0 -0
  328. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/orm/scopes.md +0 -0
  329. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/orm/seeding.md +0 -0
  330. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/orm/setup.md +0 -0
  331. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/orm/transactions.md +0 -0
  332. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/orm/values.md +0 -0
  333. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/pydantic/config.md +0 -0
  334. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/pydantic/errors.md +0 -0
  335. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/pydantic/fields.md +0 -0
  336. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/pydantic/index.md +0 -0
  337. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/pydantic/models.md +0 -0
  338. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/pydantic/nested.md +0 -0
  339. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/pydantic/openapi.md +0 -0
  340. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/pydantic/orm-bridge.md +0 -0
  341. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/pydantic/parameters.md +0 -0
  342. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/pydantic/patterns.md +0 -0
  343. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/pydantic/request-models.md +0 -0
  344. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/pydantic/response-models.md +0 -0
  345. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/pydantic/serialization.md +0 -0
  346. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/pydantic/types.md +0 -0
  347. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/pydantic/validators.md +0 -0
  348. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/reference/components.mdx +0 -0
  349. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/reference/plugin-api.md +0 -0
  350. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/showcase/splash/banner.mdx +0 -0
  351. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/showcase/splash/centered-top.mdx +0 -0
  352. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/showcase/splash/centered.mdx +0 -0
  353. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/showcase/splash/split-left.mdx +0 -0
  354. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/showcase/splash/split-right.mdx +0 -0
  355. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/showcase/splash-pages.mdx +0 -0
  356. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/showcase/starlight-components.mdx +0 -0
  357. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/showcase/typography.md +0 -0
  358. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/start/after-creating.mdx +0 -0
  359. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/start/create-app.md +0 -0
  360. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/start/custom-starters.md +0 -0
  361. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/start/errors.md +0 -0
  362. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/start/index.md +0 -0
  363. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/start/install.mdx +0 -0
  364. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/start/internals.md +0 -0
  365. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/start/naming.md +0 -0
  366. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/start/package-managers.md +0 -0
  367. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/start/personalisation.md +0 -0
  368. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/start/secrets.md +0 -0
  369. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content/docs/start/starters.md +0 -0
  370. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/content.config.ts +0 -0
  371. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/plugins/remark-mermaid.mjs +0 -0
  372. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/src/styles/global.css +0 -0
  373. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/docs/tsconfig.json +0 -0
  374. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/package.json +0 -0
  375. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/packages/lucode-starlight/README.md +0 -0
  376. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/packages/lucode-starlight/components/custom/ContainerSection.astro +0 -0
  377. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/packages/lucode-starlight/components/custom/LinkButton.astro +0 -0
  378. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/packages/lucode-starlight/components/custom/dropdown/Dropdown.astro +0 -0
  379. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/packages/lucode-starlight/components/custom/dropdown/DropdownContent.astro +0 -0
  380. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/packages/lucode-starlight/components/custom/dropdown/DropdownItem.astro +0 -0
  381. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/packages/lucode-starlight/components/custom/dropdown/DropdownLabel.astro +0 -0
  382. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/packages/lucode-starlight/components/custom/dropdown/DropdownSeparator.astro +0 -0
  383. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/packages/lucode-starlight/components/custom/dropdown/DropdownShortcut.astro +0 -0
  384. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/packages/lucode-starlight/components/custom/dropdown/DropdownTrigger.astro +0 -0
  385. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/packages/lucode-starlight/components/custom/dropdown/index.ts +0 -0
  386. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/packages/lucode-starlight/components/overrides/ContentPanel.astro +0 -0
  387. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/packages/lucode-starlight/components/overrides/Footer.astro +0 -0
  388. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/packages/lucode-starlight/components/overrides/Header.astro +0 -0
  389. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/packages/lucode-starlight/components/overrides/Hero.astro +0 -0
  390. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/packages/lucode-starlight/components/overrides/MarkdownContent.astro +0 -0
  391. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/packages/lucode-starlight/components/overrides/PageFrame.astro +0 -0
  392. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/packages/lucode-starlight/components/overrides/PageSidebar.astro +0 -0
  393. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/packages/lucode-starlight/components/overrides/PageTitle.astro +0 -0
  394. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/packages/lucode-starlight/components/overrides/Pagination.astro +0 -0
  395. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/packages/lucode-starlight/components/overrides/Search.astro +0 -0
  396. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/packages/lucode-starlight/components/overrides/Sidebar.astro +0 -0
  397. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/packages/lucode-starlight/components/overrides/SiteTitle.astro +0 -0
  398. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/packages/lucode-starlight/components/overrides/SocialIcons.astro +0 -0
  399. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/packages/lucode-starlight/components/overrides/TableOfContents.astro +0 -0
  400. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/packages/lucode-starlight/components/overrides/ThemeSelect.astro +0 -0
  401. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/packages/lucode-starlight/components/overrides/TwoColumnContent.astro +0 -0
  402. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/packages/lucode-starlight/components/overrides/parts/Drawer.astro +0 -0
  403. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/packages/lucode-starlight/components/overrides/parts/MobileMenuToggle.astro +0 -0
  404. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/packages/lucode-starlight/components/overrides/parts/NavBar.astro +0 -0
  405. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/packages/lucode-starlight/components/overrides/parts/SidebarSublist.astro +0 -0
  406. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/packages/lucode-starlight/components/overrides/parts/toc/TableOfContentsList.astro +0 -0
  407. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/packages/lucode-starlight/components/overrides/parts/toc/starlight-toc.ts +0 -0
  408. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/packages/lucode-starlight/core/config/constants.ts +0 -0
  409. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/packages/lucode-starlight/core/config/expresive-code.ts +0 -0
  410. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/packages/lucode-starlight/core/config/override.ts +0 -0
  411. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/packages/lucode-starlight/core/config/schemas.ts +0 -0
  412. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/packages/lucode-starlight/core/config/vite.ts +0 -0
  413. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/packages/lucode-starlight/core/plugin.ts +0 -0
  414. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/packages/lucode-starlight/global.d.ts +0 -0
  415. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/packages/lucode-starlight/index.ts +0 -0
  416. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/packages/lucode-starlight/package.json +0 -0
  417. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/packages/lucode-starlight/schema.ts +0 -0
  418. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/packages/lucode-starlight/styles/base.css +0 -0
  419. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/packages/lucode-starlight/styles/layers.css +0 -0
  420. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/packages/lucode-starlight/styles/theme.css +0 -0
  421. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/packages/lucode-starlight/user-components.ts +0 -0
  422. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/packages/lucode-starlight/virtual.d.ts +0 -0
  423. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/renovate.json +0 -0
  424. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/test/lucode-starlight/config.test.ts +0 -0
  425. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/test/lucode-starlight/plugin.test.ts +0 -0
  426. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/test/lucode-starlight/starlight-toc.test.ts +0 -0
  427. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/tsconfig.json +0 -0
  428. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/vercel.json +0 -0
  429. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/docs/vitest.config.ts +0 -0
  430. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/examples/README.md +0 -0
  431. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/examples/auth/01_session_auth.py +0 -0
  432. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/examples/auth/02_jwt_auth.py +0 -0
  433. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/examples/auth/03_custom_backend.py +0 -0
  434. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/examples/auth/04_multiple_backends.py +0 -0
  435. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/examples/auth/05_router_integration.py +0 -0
  436. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/examples/config/.env.development +0 -0
  437. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/examples/config/.env.example +0 -0
  438. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/examples/config/.env.production +0 -0
  439. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/examples/config/01_basic_config.py +0 -0
  440. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/examples/config/02_web_app.py +0 -0
  441. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/examples/config/README.md +0 -0
  442. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/examples/database/01_sqlite_todo.py +0 -0
  443. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/examples/database/02_tortoise_notes.py +0 -0
  444. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/examples/database/03_tortoise_blog.py +0 -0
  445. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/examples/exception_handling/01_basic.py +0 -0
  446. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/examples/exception_handling/02_custom.py +0 -0
  447. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/examples/file_handling/01_upload_download.py +0 -0
  448. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/examples/file_handling/02_simple_upload.py +0 -0
  449. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/examples/getting_started/01_hello_world.py +0 -0
  450. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/examples/getting_started/02_basic_rest.py +0 -0
  451. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/examples/getting_started/03_enhanced_api.py +0 -0
  452. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/examples/getting_started/04_lifespan.py +0 -0
  453. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/examples/getting_started/05_streaming_middleware.py +0 -0
  454. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/examples/getting_started/README.md +0 -0
  455. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/examples/hashing/01_basic_password_hashing.py +0 -0
  456. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/examples/hashing/01_basic_usage.py +0 -0
  457. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/examples/hashing/02_multiple_algorithms.py +0 -0
  458. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/examples/hashing/02_schemes.py +0 -0
  459. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/examples/hashing/03_web_api.py +0 -0
  460. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/examples/hashing/README.md +0 -0
  461. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/examples/middleware/01_basic.py +0 -0
  462. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/examples/middleware/02_class_based.py +0 -0
  463. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/examples/middleware/03_asgi_middleware.py +0 -0
  464. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/examples/request_inputs/01_json_data.py +0 -0
  465. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/examples/request_inputs/02_form_data.py +0 -0
  466. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/examples/request_inputs/03_raw_body.py +0 -0
  467. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/examples/request_inputs/04_streaming.py +0 -0
  468. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/examples/responses/01_return_values.py +0 -0
  469. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/examples/responses/02_json_with_headers.py +0 -0
  470. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/examples/responses/03_response_types.py +0 -0
  471. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/examples/responses/04_response_classes.py +0 -0
  472. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/examples/routing/01_basic_routes.py +0 -0
  473. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/examples/routing/02_path_parameters.py +0 -0
  474. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/examples/routing/03_routes_class.py +0 -0
  475. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/examples/routing/04_routers.py +0 -0
  476. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/examples/templating/01_basic.py +0 -0
  477. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/examples/templating/02_inheritance.py +0 -0
  478. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/examples/templating/03_custom_filters.py +0 -0
  479. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/examples/templating/README.md +0 -0
  480. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/examples/templating/requirements.txt +0 -0
  481. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/examples/templating/templates/index.html +0 -0
  482. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/examples/templating/templates/user_profile.html +0 -0
  483. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/examples/validation/01_advanced.py +0 -0
  484. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/examples/validation/02_pydantic.py +0 -0
  485. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/examples/websockets/01_basic_echo.py +0 -0
  486. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/examples/websockets/02_chat_rooms.py +0 -0
  487. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/examples/websockets/03_custom_history.py +0 -0
  488. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/requirements-dev.txt +0 -0
  489. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/__main__.py +0 -0
  490. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/_internals/__init__.py +0 -0
  491. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/_internals/_middleware.py +0 -0
  492. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/_internals/lazy.py +0 -0
  493. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/admin/__init__.py +0 -0
  494. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/admin/auth.py +0 -0
  495. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/admin/default_user.py +0 -0
  496. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/admin/models.py +0 -0
  497. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/admin/registry.py +0 -0
  498. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/admin/router.py +0 -0
  499. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/admin/routes.py +0 -0
  500. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/admin/static/logo.png +0 -0
  501. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/admin/templates/base.html +0 -0
  502. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/admin/templates/create.html +0 -0
  503. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/admin/templates/dashboard.html +0 -0
  504. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/admin/templates/delete.html +0 -0
  505. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/admin/templates/detail.html +0 -0
  506. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/admin/templates/list.html +0 -0
  507. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/admin/templates/login.html +0 -0
  508. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/admin/templates/query.html +0 -0
  509. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/admin/templates/update.html +0 -0
  510. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/admin/templating.py +0 -0
  511. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/application.py +0 -0
  512. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/auth/__init__.py +0 -0
  513. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/auth/apikey/__init__.py +0 -0
  514. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/auth/apikey/backend.py +0 -0
  515. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/auth/apikey/mixins.py +0 -0
  516. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/auth/apikey/models.py +0 -0
  517. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/auth/backend.py +0 -0
  518. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/auth/exceptions.py +0 -0
  519. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/auth/jwt_auth/__init__.py +0 -0
  520. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/auth/jwt_auth/backend.py +0 -0
  521. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/auth/jwt_auth/mixins.py +0 -0
  522. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/auth/jwt_auth/models.py +0 -0
  523. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/auth/jwt_auth/tokens.py +0 -0
  524. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/auth/middleware.py +0 -0
  525. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/auth/model.py +0 -0
  526. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/auth/session_auth/__init__.py +0 -0
  527. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/auth/session_auth/backend.py +0 -0
  528. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/auth/session_auth/guard.py +0 -0
  529. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/auth/session_auth/mixins.py +0 -0
  530. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/auth/session_auth/models.py +0 -0
  531. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/auth/use_auth.py +0 -0
  532. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/cache/__init__.py +0 -0
  533. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/cache/backends.py +0 -0
  534. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/cache/base.py +0 -0
  535. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/cache/config.py +0 -0
  536. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/cache/decorator.py +0 -0
  537. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/config/__init__.py +0 -0
  538. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/config/core.py +0 -0
  539. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/console/__init__.py +0 -0
  540. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/console/arguments.py +0 -0
  541. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/console/command.py +0 -0
  542. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/console/console.py +0 -0
  543. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/console/exceptions.py +0 -0
  544. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/console/output.py +0 -0
  545. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/console/prompt.py +0 -0
  546. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/console/style.py +0 -0
  547. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/console/terminal.py +0 -0
  548. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/core/__init__.py +0 -0
  549. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/core/converters.py +0 -0
  550. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/core/dependencies/__init__.py +0 -0
  551. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/core/dependencies/base.py +0 -0
  552. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/core/encoding.py +0 -0
  553. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/core/error/__init__.py +0 -0
  554. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/core/error/handler.py +0 -0
  555. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/core/helpers/__init__.py +0 -0
  556. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/core/helpers/async_helpers.py +0 -0
  557. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/core/helpers/deprecation.py +0 -0
  558. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/core/http/__init__.py +0 -0
  559. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/core/http/cookies.py +0 -0
  560. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/core/http/request.py +0 -0
  561. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/core/routing/__init__.py +0 -0
  562. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/core/routing/_utils.py +0 -0
  563. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/core/routing/base.py +0 -0
  564. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/core/routing/grouping.py +0 -0
  565. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/core/routing/websocket.py +0 -0
  566. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/encoding.py +0 -0
  567. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/env/__init__.py +0 -0
  568. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/env/_loader.py +0 -0
  569. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/events/__init__.py +0 -0
  570. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/events/core.py +0 -0
  571. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/events/emitter.py +0 -0
  572. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/events/enums.py +0 -0
  573. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/events/exceptions.py +0 -0
  574. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/events/mixins.py +0 -0
  575. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/events/transports/__init__.py +0 -0
  576. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/events/transports/base.py +0 -0
  577. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/events/transports/memory.py +0 -0
  578. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/events/transports/persistent.py +0 -0
  579. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/events/transports/record.py +0 -0
  580. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/events/transports/redis.py +0 -0
  581. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/events/types.py +0 -0
  582. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/exception_handler.py +0 -0
  583. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/exceptions.py +0 -0
  584. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/formparser.py +0 -0
  585. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/frontend.py +0 -0
  586. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/graphql/__init__.py +0 -0
  587. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/graphql/handler.py +0 -0
  588. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/handlers/__init__.py +0 -0
  589. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/handlers/not_found.py +0 -0
  590. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/hashing/__init__.py +0 -0
  591. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/hashing/config.py +0 -0
  592. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/hashing/core.py +0 -0
  593. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/hashing/exceptions.py +0 -0
  594. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/hashing/utils.py +0 -0
  595. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/helpers/__init__.py +0 -0
  596. {sillo_framework-0.2.0/sillo/utils → sillo_framework-0.2.1/sillo/helpers}/concurrency.py +0 -0
  597. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/helpers/files.py +0 -0
  598. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/helpers/hashing.py +0 -0
  599. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/helpers/html.py +0 -0
  600. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/helpers/jwt.py +0 -0
  601. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/helpers/network.py +0 -0
  602. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/helpers/retry.py +0 -0
  603. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/helpers/strings.py +0 -0
  604. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/helpers/text.py +0 -0
  605. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/http/__init__.py +0 -0
  606. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/http/accepts.py +0 -0
  607. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/http/client/__init__.py +0 -0
  608. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/http/client/caching.py +0 -0
  609. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/http/client/client.py +0 -0
  610. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/http/client/config.py +0 -0
  611. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/http/client/errors.py +0 -0
  612. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/http/client/middleware.py +0 -0
  613. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/http/client/models.py +0 -0
  614. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/http/client/retry.py +0 -0
  615. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/http/client/transport.py +0 -0
  616. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/http/client/utils.py +0 -0
  617. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/http/etag.py +0 -0
  618. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/http/lifecycle/__init__.py +0 -0
  619. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/http/lifecycle/context.py +0 -0
  620. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/http/lifecycle/helpers.py +0 -0
  621. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/http/lifecycle/middleware.py +0 -0
  622. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/http/sse.py +0 -0
  623. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/http/status.py +0 -0
  624. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/logging.py +0 -0
  625. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/mail/__init__.py +0 -0
  626. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/mail/client.py +0 -0
  627. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/mail/config.py +0 -0
  628. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/mail/models.py +0 -0
  629. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/middleware/__init__.py +0 -0
  630. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/middleware/base.py +0 -0
  631. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/middleware/gzip.py +0 -0
  632. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/middleware/security.py +0 -0
  633. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/middleware/utils.py +0 -0
  634. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/normalize/__init__.py +0 -0
  635. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/normalize/helpers.py +0 -0
  636. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/normalize/middleware.py +0 -0
  637. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/objects/__init__.py +0 -0
  638. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/objects/common.py +0 -0
  639. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/objects/datastructures.py +0 -0
  640. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/objects/routing.py +0 -0
  641. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/openapi/__init__.py +0 -0
  642. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/openapi/_builder.py +0 -0
  643. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/openapi/config.py +0 -0
  644. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/openapi/models.py +0 -0
  645. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/openapi/ui.py +0 -0
  646. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/openapi/utils.py +0 -0
  647. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/pagination.py +0 -0
  648. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/parameters.py +0 -0
  649. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/permissions/__init__.py +0 -0
  650. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/permissions/mixins.py +0 -0
  651. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/permissions/models.py +0 -0
  652. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/py.typed +0 -0
  653. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/record/__init__.py +0 -0
  654. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/record/_bridge.py +0 -0
  655. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/record/casting.py +0 -0
  656. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/record/collection.py +0 -0
  657. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/record/commands/__init__.py +0 -0
  658. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/record/commands/functions.py +0 -0
  659. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/record/config.py +0 -0
  660. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/record/console.py +0 -0
  661. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/record/events.py +0 -0
  662. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/record/exceptions.py +0 -0
  663. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/record/factories.py +0 -0
  664. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/record/fields.py +0 -0
  665. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/record/helpers.py +0 -0
  666. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/record/logging.py +0 -0
  667. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/record/manager.py +0 -0
  668. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/record/mixins/__init__.py +0 -0
  669. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/record/models.py +0 -0
  670. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/record/pagination.py +0 -0
  671. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/record/pydantic.py +0 -0
  672. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/record/queries.py +0 -0
  673. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/record/scopes.py +0 -0
  674. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/record/transactions.py +0 -0
  675. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/route_builder.py +0 -0
  676. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/security/__init__.py +0 -0
  677. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/security/cors/__init__.py +0 -0
  678. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/security/cors/_middleware.py +0 -0
  679. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/security/cors/config.py +0 -0
  680. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/security/csrf/__init__.py +0 -0
  681. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/security/ratelimit/__init__.py +0 -0
  682. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/security/ratelimit/_middleware.py +0 -0
  683. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/security/ratelimit/backends/__init__.py +0 -0
  684. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/security/ratelimit/backends/base.py +0 -0
  685. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/security/ratelimit/backends/memory.py +0 -0
  686. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/security/ratelimit/backends/record.py +0 -0
  687. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/security/ratelimit/backends/redis.py +0 -0
  688. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/security/ratelimit/config.py +0 -0
  689. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/security/ratelimit/models.py +0 -0
  690. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/security/ratelimit/strategies/__init__.py +0 -0
  691. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/security/ratelimit/strategies/base.py +0 -0
  692. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/security/ratelimit/strategies/fixed_window.py +0 -0
  693. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/security/ratelimit/strategies/sliding_window.py +0 -0
  694. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/security/ratelimit/strategies/token_bucket.py +0 -0
  695. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/security/shield.py +0 -0
  696. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/server/__init__.py +0 -0
  697. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/server/_uvicorn.py +0 -0
  698. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/server/access.py +0 -0
  699. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/server/banner.py +0 -0
  700. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/server/inspector.py +0 -0
  701. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/server/logs.py +0 -0
  702. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/server/server.py +0 -0
  703. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/server/theme.py +0 -0
  704. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/session/__init__.py +0 -0
  705. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/session/base.py +0 -0
  706. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/session/file.py +0 -0
  707. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/static.py +0 -0
  708. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/templating/__init__.py +0 -0
  709. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/templating/utils.py +0 -0
  710. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/testclient/__init__.py +0 -0
  711. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/testclient/_internal/__init__.py +0 -0
  712. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/testclient/_internal/inputs.py +0 -0
  713. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/testclient/_internal/transport.py +0 -0
  714. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/testclient/_internal/types.py +0 -0
  715. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/testclient/_internal/utils.py +0 -0
  716. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/testclient/_internal/websockets.py +0 -0
  717. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/testclient/async_client.py +0 -0
  718. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/testclient/base.py +0 -0
  719. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/testclient/exceptions.py +0 -0
  720. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/testclient/helpers.py +0 -0
  721. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/types.py +0 -0
  722. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/users/__init__.py +0 -0
  723. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/users/base.py +0 -0
  724. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/users/commands.py +0 -0
  725. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/users/console.py +0 -0
  726. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/users/managers.py +0 -0
  727. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/users/protocol.py +0 -0
  728. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/users/simple.py +0 -0
  729. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/validation/__init__.py +0 -0
  730. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/validation/compiler.py +0 -0
  731. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/validation/errors.py +0 -0
  732. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/validation/fields.py +0 -0
  733. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/websockets/__init__.py +0 -0
  734. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/websockets/base.py +0 -0
  735. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/websockets/channels.py +0 -0
  736. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/websockets/consumers.py +0 -0
  737. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/websockets/errors.py +0 -0
  738. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/websockets/history.py +0 -0
  739. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/websockets/status.py +0 -0
  740. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/websockets/utils.py +0 -0
  741. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/work/__init__.py +0 -0
  742. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/work/backends.py +0 -0
  743. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/work/background/__init__.py +0 -0
  744. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/work/background/supervisor.py +0 -0
  745. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/work/background/tasks.py +0 -0
  746. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/work/commands.py +0 -0
  747. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/work/console.py +0 -0
  748. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/work/dependency.py +0 -0
  749. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/work/middleware.py +0 -0
  750. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/work/queue/__init__.py +0 -0
  751. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/work/queue/batches.py +0 -0
  752. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/work/queue/connection.py +0 -0
  753. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/work/queue/events.py +0 -0
  754. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/work/queue/failed.py +0 -0
  755. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/work/queue/job.py +0 -0
  756. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/work/queue/listener.py +0 -0
  757. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/work/queue/middleware.py +0 -0
  758. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/work/queue/payloads.py +0 -0
  759. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/work/queue/workers.py +0 -0
  760. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/work/scheduler/__init__.py +0 -0
  761. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/work/scheduler/cron.py +0 -0
  762. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/work/scheduler/jobs.py +0 -0
  763. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/work/scheduler/manager.py +0 -0
  764. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/work/scheduler/middleware.py +0 -0
  765. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/work/scheduler/triggers.py +0 -0
  766. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/work/task.py +0 -0
  767. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/sillo/work/types.py +0 -0
  768. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/__init__.py +0 -0
  769. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/conftest.py +0 -0
  770. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/static/example.txt +0 -0
  771. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/static/page.html +0 -0
  772. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/static/script.js +0 -0
  773. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/static/style.css +0 -0
  774. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/static/subfolder/subfile.txt +0 -0
  775. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/templates/base.html +0 -0
  776. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/templates/product.html +0 -0
  777. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/templates/welcome.html +0 -0
  778. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_admin/__init__.py +0 -0
  779. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_admin/test_admin_export_query.py +0 -0
  780. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_admin/test_admin_helpers.py +0 -0
  781. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_admin/test_admin_models.py +0 -0
  782. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_admin/test_admin_startup_order.py +0 -0
  783. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_admin/test_admin_views.py +0 -0
  784. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_applications/__init__.py +0 -0
  785. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_applications/test_app_class_name.py +0 -0
  786. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_applications/test_application.py +0 -0
  787. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_applications/test_middleware_chain_cache.py +0 -0
  788. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_applications/test_route_kwargs.py +0 -0
  789. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_auth/__init__.py +0 -0
  790. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_auth/test_apikey_backend.py +0 -0
  791. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_auth/test_auth_middleware.py +0 -0
  792. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_auth/test_auth_utilities.py +0 -0
  793. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_auth/test_custom_backend.py +0 -0
  794. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_auth/test_jwt_backend.py +0 -0
  795. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_auth/test_jwt_user_mixin.py +0 -0
  796. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_auth/test_security_schemes.py +0 -0
  797. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_auth/test_session_backend.py +0 -0
  798. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_auth/test_session_guard.py +0 -0
  799. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_auth/test_session_model_extend.py +0 -0
  800. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_auth/test_token_for_user.py +0 -0
  801. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_auth/test_use_auth.py +0 -0
  802. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_auth/test_user_models.py +0 -0
  803. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_cache/__init__.py +0 -0
  804. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_cache/test_base.py +0 -0
  805. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_cache/test_decorator.py +0 -0
  806. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_cache/test_memory_cache.py +0 -0
  807. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_cache/test_redis_backend.py +0 -0
  808. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_cache/test_redis_cache_fake.py +0 -0
  809. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_config/__init__.py +0 -0
  810. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_config/conftest.py +0 -0
  811. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_config/test_config_loading.py +0 -0
  812. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_config/test_env_loading.py +0 -0
  813. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_console/__init__.py +0 -0
  814. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_console/test_arguments.py +0 -0
  815. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_console/test_builtin_record.py +0 -0
  816. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_console/test_builtin_users.py +0 -0
  817. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_console/test_builtin_work.py +0 -0
  818. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_console/test_cli.py +0 -0
  819. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_console/test_command.py +0 -0
  820. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_console/test_console.py +0 -0
  821. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_console/test_output.py +0 -0
  822. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_console/test_prompt.py +0 -0
  823. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_console/test_style.py +0 -0
  824. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_console/test_terminal.py +0 -0
  825. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_cors/__init__.py +0 -0
  826. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_cors/test_configuration.py +0 -0
  827. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_cors/test_credentials_security.py +0 -0
  828. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_cors/test_error_handling.py +0 -0
  829. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_cors/test_integration.py +0 -0
  830. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_cors/test_preflight_requests.py +0 -0
  831. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_cors/test_simple_requests.py +0 -0
  832. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_dependencies/__init__.py +0 -0
  833. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_dependencies/test_dependency_injection.py +0 -0
  834. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_encoding/__init__.py +0 -0
  835. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_encoding/test_custom_encoder.py +0 -0
  836. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_encoding/test_encoding_shim.py +0 -0
  837. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_encoding/test_jsonable_encoder.py +0 -0
  838. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_encoding/test_passthrough_fast_path.py +0 -0
  839. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_env/__init__.py +0 -0
  840. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_env/conftest.py +0 -0
  841. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_env/test_load.py +0 -0
  842. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_env/test_parse.py +0 -0
  843. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_events/__init__.py +0 -0
  844. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_events/test_comprehensive_events.py +0 -0
  845. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_events/test_core_propagation.py +0 -0
  846. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_events/test_emitter_paths.py +0 -0
  847. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_events/test_events_backends.py +0 -0
  848. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_events/test_persistent_transport_fake.py +0 -0
  849. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_events/test_record_transport.py +0 -0
  850. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_events/test_redis_transport_fake.py +0 -0
  851. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_events/test_transport_registry_and_base.py +0 -0
  852. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_exception_handlers/__init__.py +0 -0
  853. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_exception_handlers/test_basic_exception_handlers.py +0 -0
  854. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_exception_handlers/test_concurrent_error_pages.py +0 -0
  855. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_exception_handlers/test_dispatch_internals.py +0 -0
  856. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_exception_handlers/test_exception_handler_integration.py +0 -0
  857. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_exception_handlers/test_not_found_handler.py +0 -0
  858. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_exception_handlers/test_server_error_debug.py +0 -0
  859. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_forms/__init__.py +0 -0
  860. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_forms/test_form_parser.py +0 -0
  861. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_forms/test_uploaded_file_save.py +0 -0
  862. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_frontend/__init__.py +0 -0
  863. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_frontend/test_frontend_app.py +0 -0
  864. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_graphql/__init__.py +0 -0
  865. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_graphql/test_graphql_schema.py +0 -0
  866. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_graphql/test_handler_paths.py +0 -0
  867. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_helpers/__init__.py +0 -0
  868. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_helpers/test_accepts.py +0 -0
  869. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_helpers/test_async.py +0 -0
  870. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_helpers/test_deprecation.py +0 -0
  871. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_helpers/test_files.py +0 -0
  872. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_helpers/test_hashing_crypto.py +0 -0
  873. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_helpers/test_html.py +0 -0
  874. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_helpers/test_jwt.py +0 -0
  875. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_helpers/test_network.py +0 -0
  876. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_helpers/test_retry.py +0 -0
  877. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_helpers/test_strings.py +0 -0
  878. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_helpers/test_text.py +0 -0
  879. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_http/__init__.py +0 -0
  880. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_http/test_accepts_middleware.py +0 -0
  881. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_http/test_accepts_negotiation.py +0 -0
  882. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_http/test_cookie_parsing.py +0 -0
  883. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_http/test_etag_full.py +0 -0
  884. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_http/test_http_client.py +0 -0
  885. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_http/test_http_etag.py +0 -0
  886. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_http/test_http_module_exports.py +0 -0
  887. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_http/test_sse.py +0 -0
  888. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_lifecycle/__init__.py +0 -0
  889. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_lifecycle/test_context.py +0 -0
  890. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_lifecycle/test_request_id.py +0 -0
  891. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_mail/__init__.py +0 -0
  892. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_mail/test_mail_client.py +0 -0
  893. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_mail/test_mail_service.py +0 -0
  894. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_mail/test_mail_transport.py +0 -0
  895. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_middleware/__init__.py +0 -0
  896. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_middleware/test_app_level_middleware.py +0 -0
  897. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_middleware/test_asgi_middleware.py +0 -0
  898. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_middleware/test_gzip.py +0 -0
  899. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_middleware/test_internals_bridge.py +0 -0
  900. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_middleware/test_raw_asgi_layers.py +0 -0
  901. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_middleware/test_route_level_middleware.py +0 -0
  902. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_middleware/test_router_level_middleware.py +0 -0
  903. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_middleware/test_security_middleware.py +0 -0
  904. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_middleware/test_use_for_route.py +0 -0
  905. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_normalize/__init__.py +0 -0
  906. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_normalize/test_helpers.py +0 -0
  907. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_normalize/test_middleware.py +0 -0
  908. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_objects/__init__.py +0 -0
  909. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_objects/test_headers.py +0 -0
  910. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_objects/test_multidict.py +0 -0
  911. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_objects/test_url.py +0 -0
  912. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_objects/test_url_building.py +0 -0
  913. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_openapi/__init__.py +0 -0
  914. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_openapi/test_docs_ui.py +0 -0
  915. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_openapi/test_openapi_config.py +0 -0
  916. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_openapi/test_openapi_spec.py +0 -0
  917. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_openapi/test_openapi_utils.py +0 -0
  918. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_optional_imports.py +0 -0
  919. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_pagination/__init__.py +0 -0
  920. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_pagination/test_data_handlers.py +0 -0
  921. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_pagination/test_edge_cases.py +0 -0
  922. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_pagination/test_error_handling.py +0 -0
  923. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_pagination/test_integration.py +0 -0
  924. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_pagination/test_pagination_strategies.py +0 -0
  925. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_pagination/test_paginators.py +0 -0
  926. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_pagination/test_response_classes.py +0 -0
  927. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_pagination/test_response_paginate.py +0 -0
  928. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_parameters/__init__.py +0 -0
  929. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_parameters/test_cookie.py +0 -0
  930. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_parameters/test_header.py +0 -0
  931. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_parameters/test_nested.py +0 -0
  932. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_parameters/test_openapi.py +0 -0
  933. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_parameters/test_query.py +0 -0
  934. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_permissions/__init__.py +0 -0
  935. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_permissions/test_permissions.py +0 -0
  936. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_record/__init__.py +0 -0
  937. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_record/test_backend_config.py +0 -0
  938. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_record/test_collection.py +0 -0
  939. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_record/test_events.py +0 -0
  940. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_record/test_mass_assignment.py +0 -0
  941. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_record/test_mixins.py +0 -0
  942. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_record/test_model_features.py +0 -0
  943. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_record/test_pagination_and_exceptions.py +0 -0
  944. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_record/test_pydantic_bridge.py +0 -0
  945. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_record/test_queries.py +0 -0
  946. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_record/test_query_logging.py +0 -0
  947. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_record/test_record_commands.py +0 -0
  948. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_record/test_release_fixes.py +0 -0
  949. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_record/test_savepoints.py +0 -0
  950. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_record/test_seeding.py +0 -0
  951. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_redis/__init__.py +0 -0
  952. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_redis/test_redis_cache.py +0 -0
  953. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_redis/test_redis_transport.py +0 -0
  954. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_requests/__init__.py +0 -0
  955. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_requests/test_basic_properties.py +0 -0
  956. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_requests/test_body_data.py +0 -0
  957. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_requests/test_cookies_auth.py +0 -0
  958. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_requests/test_path_params.py +0 -0
  959. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_requests/test_query_params.py +0 -0
  960. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_requests/test_request_flags.py +0 -0
  961. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_requests/test_request_surface.py +0 -0
  962. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_responses/__init__.py +0 -0
  963. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_responses/test_abort_not_found.py +0 -0
  964. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_responses/test_advanced_responses.py +0 -0
  965. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_responses/test_basic_responses.py +0 -0
  966. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_responses/test_file_responses.py +0 -0
  967. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_responses/test_header_override.py +0 -0
  968. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_responses/test_headers_cookies.py +0 -0
  969. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_responses/test_json_serialization.py +0 -0
  970. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_responses/test_redirect_streaming.py +0 -0
  971. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_responses/test_response_properties.py +0 -0
  972. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_routing/__init__.py +0 -0
  973. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_routing/test_basic_routing.py +0 -0
  974. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_routing/test_converters.py +0 -0
  975. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_routing/test_grouping.py +0 -0
  976. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_routing/test_http_methods.py +0 -0
  977. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_routing/test_nested_routes.py +0 -0
  978. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_routing/test_path_parameters.py +0 -0
  979. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_routing/test_router_wrap_asgi.py +0 -0
  980. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_security/__init__.py +0 -0
  981. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_security/test_backends.py +0 -0
  982. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_security/test_middleware.py +0 -0
  983. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_security/test_ratelimit_redis_backend.py +0 -0
  984. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_security/test_record_backend.py +0 -0
  985. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_security/test_strategies.py +0 -0
  986. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_server/__init__.py +0 -0
  987. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_server/test_inspector.py +0 -0
  988. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_server/test_server_wiring.py +0 -0
  989. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_server/test_sillo_server.py +0 -0
  990. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_sessions/__init__.py +0 -0
  991. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_sessions/test_base.py +0 -0
  992. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_sessions/test_file_sessions.py +0 -0
  993. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_sessions/test_integration.py +0 -0
  994. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_sessions/test_middleware.py +0 -0
  995. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_sessions/test_security.py +0 -0
  996. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_sessions/test_settings.py +0 -0
  997. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_sessions/test_signed_cookies.py +0 -0
  998. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_small_module_gaps.py +0 -0
  999. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_static/__init__.py +0 -0
  1000. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_static/test_static_files.py +0 -0
  1001. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_supported_python_versions.py +0 -0
  1002. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_templating/__init__.py +0 -0
  1003. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_templating/test_template_utils.py +0 -0
  1004. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_templating/test_templates.py +0 -0
  1005. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_type_comments.py +0 -0
  1006. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_users/__init__.py +0 -0
  1007. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_users/test_password.py +0 -0
  1008. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_users/test_user_commands.py +0 -0
  1009. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_users/test_user_model.py +0 -0
  1010. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_validation/__init__.py +0 -0
  1011. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_validation/conftest.py +0 -0
  1012. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_validation/test_body_form.py +0 -0
  1013. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_validation/test_legacy_compat.py +0 -0
  1014. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_validation/test_markers_unit.py +0 -0
  1015. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_validation/test_openapi_generation.py +0 -0
  1016. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_validation/test_params.py +0 -0
  1017. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_validation/test_request_model.py +0 -0
  1018. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_validation/test_response_model.py +0 -0
  1019. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_websockets/__init__.py +0 -0
  1020. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_websockets/test_channel_history.py +0 -0
  1021. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_websockets/test_consumer_encodings.py +0 -0
  1022. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_websockets/test_group_removal.py +0 -0
  1023. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_websockets/test_history_contract.py +0 -0
  1024. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_websockets/test_websocket_consumers.py +0 -0
  1025. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_websockets/test_websocket_errors.py +0 -0
  1026. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_websockets/test_websocket_groups.py +0 -0
  1027. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_websockets/test_websocket_protocol.py +0 -0
  1028. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_websockets/test_websocket_routing.py +0 -0
  1029. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_websockets/test_websocket_state_machine.py +0 -0
  1030. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_work/__init__.py +0 -0
  1031. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_work/test_backends_full.py +0 -0
  1032. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_work/test_background.py +0 -0
  1033. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_work/test_events.py +0 -0
  1034. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_work/test_job_dispatch.py +0 -0
  1035. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_work/test_job_queue.py +0 -0
  1036. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_work/test_job_round_trip.py +0 -0
  1037. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_work/test_memory_backend.py +0 -0
  1038. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_work/test_queue.py +0 -0
  1039. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_work/test_queue_worker.py +0 -0
  1040. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_work/test_redis_queue_reliability.py +0 -0
  1041. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_work/test_routes.py +0 -0
  1042. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_work/test_scheduler.py +0 -0
  1043. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_work/test_scheduler_middleware.py +0 -0
  1044. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_work/test_task.py +0 -0
  1045. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_work/test_work_commands.py +0 -0
  1046. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_work/test_work_di.py +0 -0
  1047. {sillo_framework-0.2.0 → sillo_framework-0.2.1}/tests/test_work/work_jobs.py +0 -0
@@ -5,6 +5,14 @@ All notable changes to Sillo are documented here.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [0.2.1] - 2026-08-19
9
+
10
+ ### Changed
11
+
12
+ - Replaced `itsdangerous` with an internal `sillo.helpers.signing` implementation for CSRF tokens and signed session cookies.
13
+ - Moved `sillo.utils` modules into `sillo.helpers`.
14
+ - Fixed `typing-extensions` dependency marker to require the package on Python < 3.13.
15
+
8
16
  ## [Unreleased]
9
17
 
10
18
  ## [0.2.0] - 2026-08-18
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: sillo-framework
3
- Version: 0.2.0
3
+ Version: 0.2.1
4
4
  Summary: Python with the pieces already in place: an async web framework whose ORM, auth, admin, queues, scheduler and WebSockets share one configuration model.
5
5
  Project-URL: Homepage, https://github.com/sillohq/core
6
6
  Project-URL: Repository, https://github.com/sillohq/core
@@ -29,10 +29,9 @@ Classifier: Topic :: Software Development :: Libraries :: Application Frameworks
29
29
  Classifier: Typing :: Typed
30
30
  Requires-Python: >=3.10
31
31
  Requires-Dist: anyio==4.14.1
32
- Requires-Dist: itsdangerous>=2.1.2
33
32
  Requires-Dist: pydantic<3.0,>=2.0
34
33
  Requires-Dist: python-multipart>=0.0.6
35
- Requires-Dist: typing-extensions>=4.12.2; python_version < '3.10'
34
+ Requires-Dist: typing-extensions>=4.12.2; python_version < '3.13'
36
35
  Requires-Dist: uvicorn>=0.27.0
37
36
  Provides-Extra: all
38
37
  Requires-Dist: argon2-cffi>=21.2.0; extra == 'all'
@@ -348,14 +348,14 @@ class CSRFConfig:
348
348
 
349
349
  ### Token Generation
350
350
 
351
- The middleware uses `itsdangerous.URLSafeSerializer` to sign tokens:
351
+ The middleware uses an internal `URLSafeSerializer` to sign tokens:
352
352
 
353
353
  ```python
354
354
  def _generate_csrf_token(self) -> str:
355
355
  return self.serializer.dumps(secrets.token_urlsafe(32))
356
356
  ```
357
357
 
358
- A random token is generated with `secrets.token_urlsafe(32)`, then signed with itsdangerous. The signed token is stored in a cookie and must be submitted back in the `X-CSRFToken` header.
358
+ A random token is generated with `secrets.token_urlsafe(32)`, then signed with HMAC-SHA256. The signed token is stored in a cookie and must be submitted back in the `X-CSRFToken` header.
359
359
 
360
360
  ### Double-Submit Cookie Pattern
361
361
 
@@ -303,12 +303,28 @@ Three methods control when a session expires:
303
303
 
304
304
  - **`set_expiration_time(expiration: datetime)`** (line 200): Explicit
305
305
  override.
306
- - **`get_expiration_time()`** (line 209): Resolution order:
306
+ - **`get_expiration_time()`**: Resolution order:
307
307
  1. Explicit override from `set_expiration_time`
308
- 2. If `session_permanent` is `False`: `now(utc) + session_expiration_time`
309
- 3. If `session_permanent` is `True`: `datetime.max` (effectively never)
310
- 4. Fallback: 7 days if config is unreachable
311
- - **`has_expired()`** (line 251): `now(utc) > get_expiration_time()`
308
+ 2. If `session_permanent` is `True` (the default):
309
+ `now(utc) + session_expiration_time`
310
+ 3. If `session_permanent` is `False`: `None` — the cookie goes out with no
311
+ `Expires` at all, so the browser drops it when it closes
312
+ 4. Fallback: `session_expiration_time`'s default of 86400 if config is
313
+ unreachable
314
+ - **`has_expired()`**: `now(utc) > get_expiration_time()`, and `False` for a
315
+ session with no expiry
316
+
317
+ This used to be inverted — a permanent session got `datetime.max`, so the
318
+ **default** configuration issued a cookie that never expired, and
319
+ `session_expiration_time` applied only to the non-permanent case that did not
320
+ need it.
321
+
322
+ :::caution[The cookie's expiry is not what protects you]
323
+ `Expires` is a request to the browser. Anyone replaying a captured cookie
324
+ simply does not honour it. For the signed-cookie backend the real bound is
325
+ `SignedSessionManager.max_age`, which is checked against a timestamp inside
326
+ the signature and defaults to `session_expiration_time`.
327
+ :::
312
328
 
313
329
  ### should_set_cookie
314
330
 
@@ -495,11 +511,11 @@ def __init__(self, config=None, secret_key: str | None = None):
495
511
  )
496
512
  ```
497
513
 
498
- Uses `itsdangerous.URLSafeTimedSerializer` which:
514
+ Uses an internal `URLSafeTimedSerializer` which:
499
515
  - Serialises the payload to JSON, then base64url-encodes it.
500
516
  - Appends a timestamp.
501
517
  - Signs the whole thing with HMAC-SHA256 using the secret key and salt.
502
- - The salt prevents signature reuse across different itsdangerous contexts.
518
+ - The salt prevents signature reuse across different signing contexts.
503
519
 
504
520
  ### Signing and Verification
505
521
 
@@ -813,7 +829,7 @@ app.use(SessionMiddleware(secret_key="your-secret-key"))
813
829
  config = SessionConfig(
814
830
  session_cookie_name="app_session",
815
831
  session_expiration_time=3600, # 1 hour
816
- session_permanent=False, # expires with expiration_time
832
+ session_permanent=False, # browser-session cookie, no Expires
817
833
  session_refresh_each_request=False, # don't refresh on each request
818
834
  session_cookie_secure=True, # HTTPS only
819
835
  session_cookie_httponly=True, # no JavaScript access
@@ -14,7 +14,7 @@ head:
14
14
 
15
15
  # Thread Pool
16
16
 
17
- `sillo.utils.concurrency` provides one utility: `run_in_threadpool`. It moves a synchronous function call to a shared thread pool so the event loop isn't blocked.
17
+ `sillo.helpers.concurrency` provides one utility: `run_in_threadpool`. It moves a synchronous function call to a shared thread pool so the event loop isn't blocked.
18
18
 
19
19
  For all other async concurrency patterns (`asyncio.gather`,
20
20
  `asyncio.TaskGroup`, `asyncio.create_task`, `asyncio.Event`, `asyncio.Lock`)
@@ -26,7 +26,7 @@ already available.
26
26
  ## run_in_threadpool
27
27
 
28
28
  ```python
29
- from sillo.utils.concurrency import run_in_threadpool
29
+ from sillo.helpers.concurrency import run_in_threadpool
30
30
  ```
31
31
 
32
32
  Moves a blocking or CPU-intensive function to a background thread and returns the result as an awaitable. The thread pool is shared globally and reused across calls.
@@ -34,7 +34,7 @@ Moves a blocking or CPU-intensive function to a background thread and returns th
34
34
  ### Basic usage
35
35
 
36
36
  ```python
37
- from sillo.utils.concurrency import run_in_threadpool
37
+ from sillo.helpers.concurrency import run_in_threadpool
38
38
 
39
39
  def resize_image(image: bytes, width: int, height: int) -> bytes:
40
40
  # CPU-intensive work that would block the event loop
@@ -56,7 +56,7 @@ result = await run_in_threadpool(some_func, arg1, arg2, key="value")
56
56
  Exceptions from the sync function propagate normally:
57
57
 
58
58
  ```python
59
- from sillo.utils.concurrency import run_in_threadpool
59
+ from sillo.helpers.concurrency import run_in_threadpool
60
60
 
61
61
  def risky() -> str:
62
62
  raise ValueError("boom")
@@ -68,9 +68,12 @@ sillo provides flexible configuration to customize CSRF protection for your appl
68
68
  - **Recommended**: `True` in production environments
69
69
  - Example: `CSRFConfig(enabled=True)`
70
70
 
71
- - **`secret_key`** (string, required)
71
+ - **`secret_key`** (string, required when `enabled=True`)
72
72
  - Cryptographic key used to sign CSRF tokens
73
- - **Security Note**: Keep this secret and consistent across application restarts
73
+ - **Security Note**: Keep this secret and consistent across application restarts.
74
+ Changing it invalidates every token in flight, so the next request from each
75
+ open page is a 403 until it reloads.
76
+ - Enabling CSRF without one raises `ValueError` at startup
74
77
  - Example: `CSRFConfig(secret_key="your-secure-key-123")`
75
78
 
76
79
  ### URL Configuration
@@ -83,7 +86,16 @@ sillo provides flexible configuration to customize CSRF protection for your appl
83
86
  - **`exempt_urls`** (list of strings, default: `[]`)
84
87
  - URL patterns excluded from CSRF protection
85
88
  - Takes precedence over `required_urls`
86
- - Example: `["/api/public/*", "/webhooks/stripe"]`
89
+ - Patterns are regular expressions and must match the **whole** path, so
90
+ `/webhooks` does not exempt `/webhooks/stripe` — write `/webhooks/.*`
91
+ - Example: `["/api/public/.*", "/webhooks/stripe"]`
92
+
93
+ - **`sensitive_cookies`** (list of strings, default: `[]`)
94
+ - Cookies that carry ambient authority, typically your session cookie
95
+ - When set, only requests presenting one of them are checked — which is what
96
+ lets an API authenticated by an `Authorization` header skip the token
97
+ - Naming none keeps the safe default of treating every request as sensitive
98
+ - Example: `CSRFConfig(sensitive_cookies=["session_id"])`
87
99
 
88
100
  ### HTTP Methods
89
101
 
@@ -104,9 +116,14 @@ sillo provides flexible configuration to customize CSRF protection for your appl
104
116
  - **Security Best Practice**: Set to `True` in production
105
117
  - Example: `CSRFConfig(cookie_secure=True)`
106
118
 
107
- - **`cookie_httponly`** (boolean, default: `True`)
119
+ - **`cookie_httponly`** (boolean, default: `False`)
108
120
  - Prevents JavaScript from accessing the cookie
109
- - **Security Best Practice**: Keep this as `True`
121
+ - **Leave this off.** The double-submit pattern requires the page to read
122
+ this cookie and echo it back in `header_name`, which `HttpOnly` makes
123
+ impossible — an `HttpOnly` CSRF cookie cannot be used by any JavaScript
124
+ client. The token is not a credential: it is only useful to someone who
125
+ can already read the page. Turn it on only if every form is server-rendered
126
+ with `{{ csrf_token }}` and nothing submits over AJAX.
110
127
  - Example: `CSRFConfig(cookie_httponly=True)`
111
128
 
112
129
  - **`cookie_samesite`** (string, default: `"lax"`)
@@ -121,9 +138,12 @@ sillo provides flexible configuration to customize CSRF protection for your appl
121
138
  - HTTP header name for sending CSRF tokens in AJAX requests
122
139
  - Example: `CSRFConfig(header_name="X-CSRF-TOKEN")`
123
140
 
124
- - **`form_field`** (string, default: `"csrf_token"`)
141
+ - **`form_field`** (string, default: `"csrftoken"`)
125
142
  - Form field name for CSRF tokens in HTML forms
126
143
  - Must match your form field names
144
+ - Read for both `application/x-www-form-urlencoded` and
145
+ `multipart/form-data` bodies, so file-upload forms — which cannot set a
146
+ header — can submit a token too
127
147
  - Example: `CSRFConfig(form_field="_csrf_token")`
128
148
 
129
149
  - **`cookie_path`** (string, default: `"/"`)
@@ -112,12 +112,27 @@ because one of the two would otherwise have to win silently.
112
112
  | `session_cookie_secure` | Send the cookie over HTTPS only | `True` |
113
113
  | `session_cookie_httponly` | Keep the cookie out of reach of JavaScript | `True` |
114
114
  | `session_cookie_samesite` | SameSite attribute (`"lax"`, `"strict"`, or `"none"`) | `"lax"` |
115
- | `session_expiration_time` | Session lifetime in seconds | `86400` (24 hours) |
115
+ | `session_expiration_time` | Session lifetime in seconds, enforced in the signature | `86400` (24 hours) |
116
116
  | `session_permanent` | Whether the cookie carries an expiry at all | `True` |
117
117
  | `session_refresh_each_request` | Re-send the cookie on every response, sliding expiry | `True` |
118
118
  | `session_file_storage_path` | Directory the file backend writes to | `None` |
119
119
  | `manager` | A session backend instance | `SignedSessionManager` |
120
120
 
121
+ :::caution[The signed cookie is signed, not encrypted]
122
+ With the default backend the session's contents travel in the cookie. Anyone
123
+ holding it can base64-decode it and read every key — put identifiers in a
124
+ session, not secrets.
125
+
126
+ `session_expiration_time` is checked against a timestamp inside the signature,
127
+ not just written to the cookie's `Expires`, so a captured cookie stops working
128
+ once it lapses. Nothing else revokes one: there is no server-side record to
129
+ delete, so signing out clears the browser's copy but cannot invalidate a copy
130
+ someone else kept. Use a server-side backend where that matters.
131
+
132
+ Browsers cap a cookie at about 4096 bytes and drop larger ones without saying
133
+ so. Sillo warns when a session cookie crosses that line.
134
+ :::
135
+
121
136
  :::caution
122
137
  **`session_cookie_secure` in local development.** It defaults to `True`, and a
123
138
  browser will not return a `Secure` cookie over plain `http://`. Serving over
@@ -10,7 +10,7 @@ packages = ["sillo"]
10
10
 
11
11
  [project]
12
12
  name = "sillo-framework"
13
- version = "0.2.0"
13
+ version = "0.2.1"
14
14
  description = "Python with the pieces already in place: an async web framework whose ORM, auth, admin, queues, scheduler and WebSockets share one configuration model."
15
15
  authors = [
16
16
  {name = "Chidebele Dunamis", email = "techwithdunamix@gmail.com"}
@@ -62,10 +62,9 @@ classifiers = [
62
62
  dependencies = [
63
63
  "uvicorn>=0.27.0",
64
64
  "anyio==4.14.1",
65
- "itsdangerous>=2.1.2",
66
65
  "python-multipart>=0.0.6",
67
66
  "pydantic>=2.0,<3.0",
68
- "typing-extensions>=4.12.2; python_version<'3.10'",
67
+ "typing-extensions>=4.12.2; python_version<'3.13'",
69
68
  ]
70
69
 
71
70
  # CORE: Only includes what's required for any sillo app (HTTP routing, config, password hashing)
@@ -1,6 +1,5 @@
1
1
  uvicorn>=0.27.0
2
2
  anyio==4.14.1
3
- itsdangerous>=2.1.2
4
3
  python-multipart>=0.0.6
5
4
  typing-extensions==4.16.0
6
5
  pydantic>=2.0,<3.0
@@ -110,7 +110,7 @@ Common Patterns:
110
110
 
111
111
  from sillo.core.routing import Group, Route, Router, WebsocketRoute
112
112
 
113
- __version__: str = "0.2.0"
113
+ __version__: str = "0.2.1"
114
114
 
115
115
  from sillo.core.dependencies import Depend
116
116
 
@@ -51,6 +51,37 @@ Send = typing.Callable[[Message], typing.Awaitable[None]]
51
51
 
52
52
  JSONType = Union[str, int, float, bool, None, dict[str, Any], list[Any]]
53
53
 
54
+ #: The expiry :meth:`BaseResponse.delete_cookie` sends. A fixed instant in the
55
+ #: past, so it does not depend on the client's clock agreeing with the
56
+ #: server's.
57
+ _EXPIRED = "Thu, 01 Jan 1970 00:00:00 GMT"
58
+
59
+ #: Punctuation a cookie value may carry unescaped: ``http.cookies._LegalChars``
60
+ #: — anything outside it makes ``SimpleCookie`` fall back to backslash-quoting
61
+ #: the whole value — less ``%``, which is spent on being the escape character.
62
+ #: Alphanumerics are always left alone by ``quote``. Base64url tokens are made
63
+ #: of ``-``, ``_``, ``.`` and alphanumerics, so they pass through untouched.
64
+ _COOKIE_SAFE = "!#$&'*+-.:^_`|~"
65
+
66
+
67
+ def _encode_cookie_value(value: str) -> str:
68
+ """Percent-encode *value* so it survives a round trip through a browser.
69
+
70
+ Handed a value it considers illegal, ``SimpleCookie`` wraps it in double
71
+ quotes and escapes the awkward characters as backslash-octal. Nothing
72
+ undoes that:
73
+ :func:`~sillo.core.http.cookies.parse_cookies` percent-decodes, as browsers
74
+ and ``document.cookie`` do, so ``set_cookie("flash", "a=b/c%20d")`` came
75
+ back as ``'"a=b/c d"'`` — quotes still attached and the escape decoded
76
+ that nobody wrote.
77
+
78
+ Percent-encoding here instead makes writing and reading each other's
79
+ inverse, and matches what ``encodeURIComponent`` produces on the client.
80
+ Ordinary values — base64url tokens, identifiers, numbers — contain nothing
81
+ outside the safe set and pass through untouched.
82
+ """
83
+ return quote(value, safe=_COOKIE_SAFE)
84
+
54
85
 
55
86
  class MalformedRangeHeader(Exception):
56
87
  """Exception raised when a Range header cannot be parsed.
@@ -367,7 +398,7 @@ class BaseResponse:
367
398
  or ``"none"`` (case-insensitive).
368
399
  """
369
400
  cookie: http.cookies.BaseCookie[str] = http.cookies.SimpleCookie()
370
- cookie[key] = value
401
+ cookie[key] = _encode_cookie_value(value)
371
402
  if max_age is not None:
372
403
  cookie[key]["max-age"] = max_age
373
404
  if expires is not None:
@@ -389,6 +420,15 @@ class BaseResponse:
389
420
  "lax",
390
421
  "none",
391
422
  ], "samesite must be either 'strict', 'lax' or 'none'"
423
+ if samesite.lower() == "none" and not secure:
424
+ # Browsers reject SameSite=None without Secure and drop the
425
+ # cookie without telling anyone, so the setting that was meant
426
+ # to allow cross-site use instead switches the cookie off.
427
+ raise ValueError(
428
+ f"Cookie {key!r} sets samesite='none' without secure=True. "
429
+ f"Browsers reject that combination and drop the cookie "
430
+ f"silently. Pass secure=True, or use samesite='lax'."
431
+ )
392
432
  cookie[key]["samesite"] = samesite
393
433
  cookie_val = cookie.output(header="").strip()
394
434
  self.set_header("set-cookie", cookie_val)
@@ -396,14 +436,20 @@ class BaseResponse:
396
436
  return cookie
397
437
 
398
438
  def delete_cookie(
399
- self, key: str, path: str = "/", domain: str | None = None
439
+ self,
440
+ key: str,
441
+ path: str = "/",
442
+ domain: str | None = None,
443
+ secure: bool | None = False,
444
+ httponly: bool | None = False,
445
+ samesite: typing.Literal["lax", "strict", "none"] | None = "lax",
400
446
  ) -> Any:
401
447
  """Delete a cookie by setting its expiration to the past.
402
448
 
403
- Sends a ``Set-Cookie`` header with an empty value and zero expiration,
404
- instructing the client to remove the specified cookie. The path and
405
- domain must match those used when the cookie was originally set for
406
- the deletion to take effect.
449
+ Sends a ``Set-Cookie`` header with an empty value and an expiry in the
450
+ past, instructing the client to remove the specified cookie. The path
451
+ and domain must match those used when the cookie was originally set
452
+ for the deletion to take effect.
407
453
 
408
454
  Args:
409
455
  key: The name of the cookie to delete.
@@ -411,6 +457,13 @@ class BaseResponse:
411
457
  match the original cookie's path. Defaults to ``"/"``.
412
458
  domain: The domain where the cookie was originally set. Must
413
459
  match the original cookie's domain. Defaults to ``None``.
460
+ secure: Whether to repeat the ``Secure`` attribute. Needed to
461
+ delete a cookie whose name carries the ``__Secure-`` or
462
+ ``__Host-`` prefix, since browsers reject a ``Set-Cookie`` for
463
+ one of those names that is not marked ``Secure`` — so without
464
+ it the deletion is ignored and the user stays signed in.
465
+ httponly: Whether to repeat the ``HttpOnly`` attribute.
466
+ samesite: Whether to repeat the ``SameSite`` attribute.
414
467
 
415
468
  Returns:
416
469
  The underlying ``SimpleCookie`` object for advanced manipulation.
@@ -418,8 +471,21 @@ class BaseResponse:
418
471
  Raises:
419
472
  None: This method does not raise exceptions.
420
473
  """
474
+ # A fixed date in the past, not `expires=0`. `SimpleCookie` reads a
475
+ # numeric expires as an offset from now, so `0` rendered as the current
476
+ # time -- which is only in the past if the client's clock agrees with
477
+ # the server's, and a client running a few seconds behind kept the
478
+ # cookie.
421
479
  cookie = self.set_cookie(
422
- key=key, value="", max_age=0, expires=0, path=path, domain=domain
480
+ key=key,
481
+ value="",
482
+ max_age=0,
483
+ expires=_EXPIRED,
484
+ path=path,
485
+ domain=domain,
486
+ secure=secure,
487
+ httponly=httponly,
488
+ samesite=samesite,
423
489
  )
424
490
 
425
491
  return cookie
@@ -1838,12 +1904,23 @@ class Responder:
1838
1904
  key: str,
1839
1905
  path: str = "/",
1840
1906
  domain: str | None = None,
1907
+ secure: bool | None = False,
1908
+ httponly: bool | None = False,
1909
+ samesite: typing.Literal["lax", "strict", "none"] | None = "lax",
1841
1910
  ):
1842
- """Delete a response cookie."""
1911
+ """Delete a response cookie.
1912
+
1913
+ The security attributes have to match the ones the cookie was set with
1914
+ closely enough for the browser to accept the deletion — see
1915
+ :meth:`BaseResponse.delete_cookie`.
1916
+ """
1843
1917
  self._response.delete_cookie(
1844
1918
  key=key,
1845
1919
  path=path,
1846
1920
  domain=domain,
1921
+ secure=secure,
1922
+ httponly=httponly,
1923
+ samesite=samesite,
1847
1924
  )
1848
1925
 
1849
1926
  return self
@@ -51,7 +51,7 @@ from sillo.types import (
51
51
  Scope,
52
52
  Send,
53
53
  )
54
- from sillo.utils.concurrency import run_in_threadpool
54
+ from sillo.helpers.concurrency import run_in_threadpool
55
55
  from sillo.validation import (
56
56
  RequestValidationError,
57
57
  ResponseModelValidator,
@@ -212,8 +212,13 @@ def unsign_value(
212
212
  match the secret used during signing.
213
213
  algorithm: The hash algorithm name used for HMAC. Must match the
214
214
  algorithm used during signing. Defaults to ``"sha256"``.
215
- max_age: Optional maximum age in seconds for the signed value.
216
- Reserved for future use; currently not enforced.
215
+ max_age: Not supported. ``sign_value`` puts no timestamp in the token,
216
+ so there is nothing here to measure an age against. Passing it
217
+ raises rather than being quietly ignored, which is what this did
218
+ before — a caller who set it believed they had bounded the
219
+ token's life and had not. Use
220
+ :class:`sillo.helpers.signing.URLSafeTimedSerializer` when a signed
221
+ value needs to expire.
217
222
 
218
223
  Returns:
219
224
  The original plaintext string value that was signed.
@@ -221,7 +226,15 @@ def unsign_value(
221
226
  Raises:
222
227
  BadSignature: If the signature is invalid, the token format is
223
228
  malformed, or the secret does not match.
229
+ NotImplementedError: If *max_age* is given.
224
230
  """
231
+ if max_age is not None:
232
+ raise NotImplementedError(
233
+ "unsign_value() cannot enforce max_age: sign_value() writes no "
234
+ "timestamp into the token, so its age is unknowable. Use "
235
+ "sillo.helpers.signing.URLSafeTimedSerializer for values that expire."
236
+ )
237
+
225
238
  secret_bytes: bytes
226
239
  if isinstance(secret, str):
227
240
  secret_bytes = secret.encode()
@@ -229,14 +242,23 @@ def unsign_value(
229
242
  secret_bytes = secret
230
243
 
231
244
  try:
232
- payload_b64, _, signature = signed.rpartition(".")
233
- value = base64.urlsafe_b64decode(payload_b64 + "==").decode()
245
+ payload_b64, separator, signature = signed.rpartition(".")
246
+ if not separator:
247
+ raise BadSignature("Invalid signed value")
248
+
249
+ # Restore exactly the padding that was stripped. Appending a fixed
250
+ # "==" happened to decode for the lengths tried, but it is not the
251
+ # inverse of `rstrip("=")` and leaves the format resting on how
252
+ # leniently `b64decode` treats over-padding.
253
+ value = base64.urlsafe_b64decode(
254
+ payload_b64 + "=" * (-len(payload_b64) % 4)
255
+ ).decode()
234
256
 
235
257
  expected = _hmac.new(secret_bytes, value.encode(), algorithm).hexdigest()
236
258
  if not _hmac.compare_digest(expected, signature):
237
259
  raise BadSignature("Invalid signature")
238
260
  except Exception:
239
- raise BadSignature("Invalid signed value")
261
+ raise BadSignature("Invalid signed value") from None
240
262
 
241
263
  return value
242
264