nitro-framework 0.3.0__tar.gz → 0.3.2__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 (142) hide show
  1. {nitro_framework-0.3.0 → nitro_framework-0.3.2}/Cargo.lock +58 -57
  2. {nitro_framework-0.3.0 → nitro_framework-0.3.2}/Cargo.toml +5 -5
  3. {nitro_framework-0.3.0 → nitro_framework-0.3.2}/PKG-INFO +3 -2
  4. {nitro_framework-0.3.0 → nitro_framework-0.3.2}/nitro/__init__.py +1 -1
  5. {nitro_framework-0.3.0 → nitro_framework-0.3.2}/nitro/sessions.py +37 -1
  6. {nitro_framework-0.3.0 → nitro_framework-0.3.2}/nitro/settings/__init__.py +9 -10
  7. {nitro_framework-0.3.0 → nitro_framework-0.3.2}/pyproject.toml +6 -2
  8. {nitro_framework-0.3.0 → nitro_framework-0.3.2}/LICENSE-APACHE +0 -0
  9. {nitro_framework-0.3.0 → nitro_framework-0.3.2}/LICENSE-MIT +0 -0
  10. {nitro_framework-0.3.0 → nitro_framework-0.3.2}/README.md +0 -0
  11. {nitro_framework-0.3.0 → nitro_framework-0.3.2}/crates/intercom-core/Cargo.toml +0 -0
  12. {nitro_framework-0.3.0 → nitro_framework-0.3.2}/crates/intercom-core/LICENSE-APACHE +0 -0
  13. {nitro_framework-0.3.0 → nitro_framework-0.3.2}/crates/intercom-core/LICENSE-MIT +0 -0
  14. {nitro_framework-0.3.0 → nitro_framework-0.3.2}/crates/intercom-core/src/channel.rs +0 -0
  15. {nitro_framework-0.3.0 → nitro_framework-0.3.2}/crates/intercom-core/src/codec.rs +0 -0
  16. {nitro_framework-0.3.0 → nitro_framework-0.3.2}/crates/intercom-core/src/intercom_core.rs +0 -0
  17. {nitro_framework-0.3.0 → nitro_framework-0.3.2}/crates/intercom-core/src/redis.rs +0 -0
  18. {nitro_framework-0.3.0 → nitro_framework-0.3.2}/crates/intercom-core/tests/redis_backend.rs +0 -0
  19. {nitro_framework-0.3.0 → nitro_framework-0.3.2}/crates/nitro-core/Cargo.toml +0 -0
  20. {nitro_framework-0.3.0 → nitro_framework-0.3.2}/crates/nitro-core/LICENSE-APACHE +0 -0
  21. {nitro_framework-0.3.0 → nitro_framework-0.3.2}/crates/nitro-core/LICENSE-MIT +0 -0
  22. {nitro_framework-0.3.0 → nitro_framework-0.3.2}/crates/nitro-core/examples/floor.rs +0 -0
  23. {nitro_framework-0.3.0 → nitro_framework-0.3.2}/crates/nitro-core/src/config.rs +0 -0
  24. {nitro_framework-0.3.0 → nitro_framework-0.3.2}/crates/nitro-core/src/disconnect.rs +0 -0
  25. {nitro_framework-0.3.0 → nitro_framework-0.3.2}/crates/nitro-core/src/files.rs +0 -0
  26. {nitro_framework-0.3.0 → nitro_framework-0.3.2}/crates/nitro-core/src/headers.rs +0 -0
  27. {nitro_framework-0.3.0 → nitro_framework-0.3.2}/crates/nitro-core/src/hosts.rs +0 -0
  28. {nitro_framework-0.3.0 → nitro_framework-0.3.2}/crates/nitro-core/src/lifecycle/drain.rs +0 -0
  29. {nitro_framework-0.3.0 → nitro_framework-0.3.2}/crates/nitro-core/src/lifecycle/signals.rs +0 -0
  30. {nitro_framework-0.3.0 → nitro_framework-0.3.2}/crates/nitro-core/src/lifecycle.rs +0 -0
  31. {nitro_framework-0.3.0 → nitro_framework-0.3.2}/crates/nitro-core/src/nitro_core.rs +0 -0
  32. {nitro_framework-0.3.0 → nitro_framework-0.3.2}/crates/nitro-core/src/router/matcher.rs +0 -0
  33. {nitro_framework-0.3.0 → nitro_framework-0.3.2}/crates/nitro-core/src/router/route.rs +0 -0
  34. {nitro_framework-0.3.0 → nitro_framework-0.3.2}/crates/nitro-core/src/router.rs +0 -0
  35. {nitro_framework-0.3.0 → nitro_framework-0.3.2}/crates/nitro-core/src/streaming.rs +0 -0
  36. {nitro_framework-0.3.0 → nitro_framework-0.3.2}/crates/nitro-core/src/transport/accept.rs +0 -0
  37. {nitro_framework-0.3.0 → nitro_framework-0.3.2}/crates/nitro-core/src/transport/connection.rs +0 -0
  38. {nitro_framework-0.3.0 → nitro_framework-0.3.2}/crates/nitro-core/src/transport/quic.rs +0 -0
  39. {nitro_framework-0.3.0 → nitro_framework-0.3.2}/crates/nitro-core/src/transport/tls.rs +0 -0
  40. {nitro_framework-0.3.0 → nitro_framework-0.3.2}/crates/nitro-core/src/transport.rs +0 -0
  41. {nitro_framework-0.3.0 → nitro_framework-0.3.2}/crates/nitro-core/src/websocket.rs +0 -0
  42. {nitro_framework-0.3.0 → nitro_framework-0.3.2}/crates/nitro-core/src/webtransport.rs +0 -0
  43. {nitro_framework-0.3.0 → nitro_framework-0.3.2}/crates/nitro-core/tests/observability.rs +0 -0
  44. {nitro_framework-0.3.0 → nitro_framework-0.3.2}/crates/nitro-core/tests/serving.rs +0 -0
  45. {nitro_framework-0.3.0 → nitro_framework-0.3.2}/crates/nitro-core/tests/signals.rs +0 -0
  46. {nitro_framework-0.3.0 → nitro_framework-0.3.2}/crates/nitro-core/tests/webtransport.rs +0 -0
  47. {nitro_framework-0.3.0 → nitro_framework-0.3.2}/crates/nitro-observability/Cargo.toml +0 -0
  48. {nitro_framework-0.3.0 → nitro_framework-0.3.2}/crates/nitro-observability/LICENSE-APACHE +0 -0
  49. {nitro_framework-0.3.0 → nitro_framework-0.3.2}/crates/nitro-observability/LICENSE-MIT +0 -0
  50. {nitro_framework-0.3.0 → nitro_framework-0.3.2}/crates/nitro-observability/src/exporter.rs +0 -0
  51. {nitro_framework-0.3.0 → nitro_framework-0.3.2}/crates/nitro-observability/src/metrics.rs +0 -0
  52. {nitro_framework-0.3.0 → nitro_framework-0.3.2}/crates/nitro-observability/src/nitro_observability.rs +0 -0
  53. {nitro_framework-0.3.0 → nitro_framework-0.3.2}/crates/nitro-py/Cargo.toml +0 -0
  54. {nitro_framework-0.3.0 → nitro_framework-0.3.2}/crates/nitro-py/LICENSE-APACHE +0 -0
  55. {nitro_framework-0.3.0 → nitro_framework-0.3.2}/crates/nitro-py/LICENSE-MIT +0 -0
  56. {nitro_framework-0.3.0 → nitro_framework-0.3.2}/crates/nitro-py/src/config.rs +0 -0
  57. {nitro_framework-0.3.0 → nitro_framework-0.3.2}/crates/nitro-py/src/dispatch.rs +0 -0
  58. {nitro_framework-0.3.0 → nitro_framework-0.3.2}/crates/nitro-py/src/handoff.rs +0 -0
  59. {nitro_framework-0.3.0 → nitro_framework-0.3.2}/crates/nitro-py/src/headers.rs +0 -0
  60. {nitro_framework-0.3.0 → nitro_framework-0.3.2}/crates/nitro-py/src/intercom_bridge.rs +0 -0
  61. {nitro_framework-0.3.0 → nitro_framework-0.3.2}/crates/nitro-py/src/lifecycle.rs +0 -0
  62. {nitro_framework-0.3.0 → nitro_framework-0.3.2}/crates/nitro-py/src/nitro_py.rs +0 -0
  63. {nitro_framework-0.3.0 → nitro_framework-0.3.2}/crates/nitro-py/src/protocol.rs +0 -0
  64. {nitro_framework-0.3.0 → nitro_framework-0.3.2}/crates/nitro-py/src/scope.rs +0 -0
  65. {nitro_framework-0.3.0 → nitro_framework-0.3.2}/crates/nitro-py/src/server.rs +0 -0
  66. {nitro_framework-0.3.0 → nitro_framework-0.3.2}/nitro/app.py +0 -0
  67. {nitro_framework-0.3.0 → nitro_framework-0.3.2}/nitro/cache/__init__.py +0 -0
  68. {nitro_framework-0.3.0 → nitro_framework-0.3.2}/nitro/cache/backends/__init__.py +0 -0
  69. {nitro_framework-0.3.0 → nitro_framework-0.3.2}/nitro/cache/backends/memcached.py +0 -0
  70. {nitro_framework-0.3.0 → nitro_framework-0.3.2}/nitro/cache/backends/memory.py +0 -0
  71. {nitro_framework-0.3.0 → nitro_framework-0.3.2}/nitro/cache/backends/redis.py +0 -0
  72. {nitro_framework-0.3.0 → nitro_framework-0.3.2}/nitro/cache/base.py +0 -0
  73. {nitro_framework-0.3.0 → nitro_framework-0.3.2}/nitro/cache/handler.py +0 -0
  74. {nitro_framework-0.3.0 → nitro_framework-0.3.2}/nitro/cli/__init__.py +0 -0
  75. {nitro_framework-0.3.0 → nitro_framework-0.3.2}/nitro/cli/__main__.py +0 -0
  76. {nitro_framework-0.3.0 → nitro_framework-0.3.2}/nitro/cli/commands/__init__.py +0 -0
  77. {nitro_framework-0.3.0 → nitro_framework-0.3.2}/nitro/cli/commands/check.py +0 -0
  78. {nitro_framework-0.3.0 → nitro_framework-0.3.2}/nitro/cli/commands/shell.py +0 -0
  79. {nitro_framework-0.3.0 → nitro_framework-0.3.2}/nitro/cli/commands/static.py +0 -0
  80. {nitro_framework-0.3.0 → nitro_framework-0.3.2}/nitro/cli/commands/version.py +0 -0
  81. {nitro_framework-0.3.0 → nitro_framework-0.3.2}/nitro/cli/serve.py +0 -0
  82. {nitro_framework-0.3.0 → nitro_framework-0.3.2}/nitro/di/__init__.py +0 -0
  83. {nitro_framework-0.3.0 → nitro_framework-0.3.2}/nitro/endpoints.py +0 -0
  84. {nitro_framework-0.3.0 → nitro_framework-0.3.2}/nitro/intercom/__init__.py +0 -0
  85. {nitro_framework-0.3.0 → nitro_framework-0.3.2}/nitro/intercom/backends.py +0 -0
  86. {nitro_framework-0.3.0 → nitro_framework-0.3.2}/nitro/log.py +0 -0
  87. {nitro_framework-0.3.0 → nitro_framework-0.3.2}/nitro/mail/__init__.py +0 -0
  88. {nitro_framework-0.3.0 → nitro_framework-0.3.2}/nitro/mail/backends/__init__.py +0 -0
  89. {nitro_framework-0.3.0 → nitro_framework-0.3.2}/nitro/mail/backends/base.py +0 -0
  90. {nitro_framework-0.3.0 → nitro_framework-0.3.2}/nitro/mail/backends/console.py +0 -0
  91. {nitro_framework-0.3.0 → nitro_framework-0.3.2}/nitro/mail/backends/oauth_smtp.py +0 -0
  92. {nitro_framework-0.3.0 → nitro_framework-0.3.2}/nitro/mail/backends/sendgrid.py +0 -0
  93. {nitro_framework-0.3.0 → nitro_framework-0.3.2}/nitro/mail/backends/ses.py +0 -0
  94. {nitro_framework-0.3.0 → nitro_framework-0.3.2}/nitro/mail/backends/smtp.py +0 -0
  95. {nitro_framework-0.3.0 → nitro_framework-0.3.2}/nitro/mail/message.py +0 -0
  96. {nitro_framework-0.3.0 → nitro_framework-0.3.2}/nitro/mail/utils.py +0 -0
  97. {nitro_framework-0.3.0 → nitro_framework-0.3.2}/nitro/middleware/__init__.py +0 -0
  98. {nitro_framework-0.3.0 → nitro_framework-0.3.2}/nitro/middleware/base.py +0 -0
  99. {nitro_framework-0.3.0 → nitro_framework-0.3.2}/nitro/middleware/common.py +0 -0
  100. {nitro_framework-0.3.0 → nitro_framework-0.3.2}/nitro/middleware/stack.py +0 -0
  101. {nitro_framework-0.3.0 → nitro_framework-0.3.2}/nitro/protocols/__init__.py +0 -0
  102. {nitro_framework-0.3.0 → nitro_framework-0.3.2}/nitro/protocols/exceptions.py +0 -0
  103. {nitro_framework-0.3.0 → nitro_framework-0.3.2}/nitro/protocols/http.py +0 -0
  104. {nitro_framework-0.3.0 → nitro_framework-0.3.2}/nitro/protocols/websocket.py +0 -0
  105. {nitro_framework-0.3.0 → nitro_framework-0.3.2}/nitro/protocols/webtransport.py +0 -0
  106. {nitro_framework-0.3.0 → nitro_framework-0.3.2}/nitro/reload.py +0 -0
  107. {nitro_framework-0.3.0 → nitro_framework-0.3.2}/nitro/routing/__init__.py +0 -0
  108. {nitro_framework-0.3.0 → nitro_framework-0.3.2}/nitro/routing/converters.py +0 -0
  109. {nitro_framework-0.3.0 → nitro_framework-0.3.2}/nitro/routing/mount.py +0 -0
  110. {nitro_framework-0.3.0 → nitro_framework-0.3.2}/nitro/routing/parameters.py +0 -0
  111. {nitro_framework-0.3.0 → nitro_framework-0.3.2}/nitro/routing/patterns.py +0 -0
  112. {nitro_framework-0.3.0 → nitro_framework-0.3.2}/nitro/routing/reverse.py +0 -0
  113. {nitro_framework-0.3.0 → nitro_framework-0.3.2}/nitro/routing/router.py +0 -0
  114. {nitro_framework-0.3.0 → nitro_framework-0.3.2}/nitro/settings/defaults.py +0 -0
  115. {nitro_framework-0.3.0 → nitro_framework-0.3.2}/nitro/shortcuts.py +0 -0
  116. {nitro_framework-0.3.0 → nitro_framework-0.3.2}/nitro/staticfiles.py +0 -0
  117. {nitro_framework-0.3.0 → nitro_framework-0.3.2}/nitro/storage/__init__.py +0 -0
  118. {nitro_framework-0.3.0 → nitro_framework-0.3.2}/nitro/storage/backends/__init__.py +0 -0
  119. {nitro_framework-0.3.0 → nitro_framework-0.3.2}/nitro/storage/backends/azure.py +0 -0
  120. {nitro_framework-0.3.0 → nitro_framework-0.3.2}/nitro/storage/backends/filesystem.py +0 -0
  121. {nitro_framework-0.3.0 → nitro_framework-0.3.2}/nitro/storage/backends/memory.py +0 -0
  122. {nitro_framework-0.3.0 → nitro_framework-0.3.2}/nitro/storage/backends/s3.py +0 -0
  123. {nitro_framework-0.3.0 → nitro_framework-0.3.2}/nitro/storage/base.py +0 -0
  124. {nitro_framework-0.3.0 → nitro_framework-0.3.2}/nitro/storage/handler.py +0 -0
  125. {nitro_framework-0.3.0 → nitro_framework-0.3.2}/nitro/templates/__init__.py +0 -0
  126. {nitro_framework-0.3.0 → nitro_framework-0.3.2}/nitro/templates/engine.py +0 -0
  127. {nitro_framework-0.3.0 → nitro_framework-0.3.2}/nitro/templates/exceptions.py +0 -0
  128. {nitro_framework-0.3.0 → nitro_framework-0.3.2}/nitro/templates/templates.py +0 -0
  129. {nitro_framework-0.3.0 → nitro_framework-0.3.2}/nitro/testing.py +0 -0
  130. {nitro_framework-0.3.0 → nitro_framework-0.3.2}/nitro/utils/__init__.py +0 -0
  131. {nitro_framework-0.3.0 → nitro_framework-0.3.2}/nitro/utils/archives.py +0 -0
  132. {nitro_framework-0.3.0 → nitro_framework-0.3.2}/nitro/utils/content.py +0 -0
  133. {nitro_framework-0.3.0 → nitro_framework-0.3.2}/nitro/utils/crypto.py +0 -0
  134. {nitro_framework-0.3.0 → nitro_framework-0.3.2}/nitro/utils/datetime.py +0 -0
  135. {nitro_framework-0.3.0 → nitro_framework-0.3.2}/nitro/utils/decorators.py +0 -0
  136. {nitro_framework-0.3.0 → nitro_framework-0.3.2}/nitro/utils/http.py +0 -0
  137. {nitro_framework-0.3.0 → nitro_framework-0.3.2}/nitro/utils/json.py +0 -0
  138. {nitro_framework-0.3.0 → nitro_framework-0.3.2}/nitro/utils/modules.py +0 -0
  139. {nitro_framework-0.3.0 → nitro_framework-0.3.2}/nitro/views/__init__.py +0 -0
  140. {nitro_framework-0.3.0 → nitro_framework-0.3.2}/nitro/views/debug.py +0 -0
  141. {nitro_framework-0.3.0 → nitro_framework-0.3.2}/nitro/views/templates/error_404.html +0 -0
  142. {nitro_framework-0.3.0 → nitro_framework-0.3.2}/nitro/views/templates/error_500.html +0 -0
@@ -214,9 +214,9 @@ dependencies = [
214
214
 
215
215
  [[package]]
216
216
  name = "combine"
217
- version = "4.6.7"
217
+ version = "4.6.8"
218
218
  source = "registry+https://github.com/rust-lang/crates.io-index"
219
- checksum = "ba5a308b75df32fe02788e748662718f03fde005016435c444eea572398219fd"
219
+ checksum = "cfc320937d09e6de266b31b9afb480f197d7a861be86be7cb2ea7e5d1bfffc5e"
220
220
  dependencies = [
221
221
  "bytes",
222
222
  "futures-core",
@@ -333,7 +333,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
333
333
  checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb"
334
334
  dependencies = [
335
335
  "libc",
336
- "windows-sys 0.61.2",
336
+ "windows-sys 0.52.0",
337
337
  ]
338
338
 
339
339
  [[package]]
@@ -653,9 +653,9 @@ dependencies = [
653
653
 
654
654
  [[package]]
655
655
  name = "hyper"
656
- version = "1.11.1"
656
+ version = "1.12.0"
657
657
  source = "registry+https://github.com/rust-lang/crates.io-index"
658
- checksum = "27b501faa50e7a26c3d3560ca625132f4078a17771f4810baf70475ae48cbe43"
658
+ checksum = "2c3e324da4c95177d6291d4c8730197c0d1822f8a9766814a4a44fa5ab797c9c"
659
659
  dependencies = [
660
660
  "atomic-waker",
661
661
  "bytes",
@@ -690,16 +690,17 @@ dependencies = [
690
690
 
691
691
  [[package]]
692
692
  name = "hyper-util"
693
- version = "0.1.20"
693
+ version = "0.1.21"
694
694
  source = "registry+https://github.com/rust-lang/crates.io-index"
695
- checksum = "96547c2556ec9d12fb1578c4eaf448b04993e7fb79cbaad930a656880a6bdfa0"
695
+ checksum = "ddc03d96684f9226b8a787cdb71488417b53ab5ea8fdb1dac946cb9431cc8bff"
696
696
  dependencies = [
697
- "base64 0.22.1",
697
+ "base64 0.23.1",
698
698
  "bytes",
699
699
  "futures-channel",
700
700
  "futures-util",
701
701
  "http",
702
702
  "http-body",
703
+ "httparse",
703
704
  "hyper",
704
705
  "ipnet",
705
706
  "libc",
@@ -826,7 +827,7 @@ dependencies = [
826
827
 
827
828
  [[package]]
828
829
  name = "intercom-core"
829
- version = "0.3.0"
830
+ version = "0.3.2"
830
831
  dependencies = [
831
832
  "bytes",
832
833
  "futures-util",
@@ -841,7 +842,7 @@ dependencies = [
841
842
 
842
843
  [[package]]
843
844
  name = "intercom-py"
844
- version = "0.3.0"
845
+ version = "0.3.2"
845
846
  dependencies = [
846
847
  "bytes",
847
848
  "futures-util",
@@ -942,9 +943,9 @@ checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe"
942
943
 
943
944
  [[package]]
944
945
  name = "libc"
945
- version = "0.2.189"
946
+ version = "0.2.191"
946
947
  source = "registry+https://github.com/rust-lang/crates.io-index"
947
- checksum = "3eaf3ede3fee6db1a4c2ee091bf8a8b4dccdc6d17f656fb07896ee72867612f2"
948
+ checksum = "65cd87c9a6d60536580b316ad985726104730a5151c99845f2490428ef91240a"
948
949
 
949
950
  [[package]]
950
951
  name = "linux-raw-sys"
@@ -1029,7 +1030,7 @@ dependencies = [
1029
1030
 
1030
1031
  [[package]]
1031
1032
  name = "nitro-core"
1032
- version = "0.3.0"
1033
+ version = "0.3.2"
1033
1034
  dependencies = [
1034
1035
  "base64 0.23.1",
1035
1036
  "bytes",
@@ -1071,7 +1072,7 @@ dependencies = [
1071
1072
 
1072
1073
  [[package]]
1073
1074
  name = "nitro-observability"
1074
- version = "0.3.0"
1075
+ version = "0.3.2"
1075
1076
  dependencies = [
1076
1077
  "bytes",
1077
1078
  "futures-util",
@@ -1089,7 +1090,7 @@ dependencies = [
1089
1090
 
1090
1091
  [[package]]
1091
1092
  name = "nitro-py"
1092
- version = "0.3.0"
1093
+ version = "0.3.2"
1093
1094
  dependencies = [
1094
1095
  "bytes",
1095
1096
  "futures-util",
@@ -1297,9 +1298,9 @@ dependencies = [
1297
1298
 
1298
1299
  [[package]]
1299
1300
  name = "pyo3"
1300
- version = "0.29.2"
1301
+ version = "0.29.3"
1301
1302
  source = "registry+https://github.com/rust-lang/crates.io-index"
1302
- checksum = "4688ddedf473e32662b9b067670129a8afb8c18e351482c70d62ba4a88171e8b"
1303
+ checksum = "700d18fa267b73b9b521fd7e13580e2f446916f176cacee1ab63fcc8191f1655"
1303
1304
  dependencies = [
1304
1305
  "libc",
1305
1306
  "once_cell",
@@ -1325,18 +1326,18 @@ dependencies = [
1325
1326
 
1326
1327
  [[package]]
1327
1328
  name = "pyo3-build-config"
1328
- version = "0.29.2"
1329
+ version = "0.29.3"
1329
1330
  source = "registry+https://github.com/rust-lang/crates.io-index"
1330
- checksum = "f41027e41b4bd03f6e60f9f417fe24a6341a6bb744edd62b6f709f2a52ea30e9"
1331
+ checksum = "7b3fc0c4d08f6bb10e71fe39dfb9e2f59c6eb6854e22ec8092f50c69a4499adb"
1331
1332
  dependencies = [
1332
1333
  "target-lexicon",
1333
1334
  ]
1334
1335
 
1335
1336
  [[package]]
1336
1337
  name = "pyo3-ffi"
1337
- version = "0.29.2"
1338
+ version = "0.29.3"
1338
1339
  source = "registry+https://github.com/rust-lang/crates.io-index"
1339
- checksum = "e591a95526fead067432c3b3a33fc74770b87b1e04e73671090d9c2055a2b327"
1340
+ checksum = "dfc0b8e19df29aad7086cf977bb0c2a2f143e30567eb113e9cf72b62ca698330"
1340
1341
  dependencies = [
1341
1342
  "libc",
1342
1343
  "pyo3-build-config",
@@ -1344,9 +1345,9 @@ dependencies = [
1344
1345
 
1345
1346
  [[package]]
1346
1347
  name = "pyo3-macros"
1347
- version = "0.29.2"
1348
+ version = "0.29.3"
1348
1349
  source = "registry+https://github.com/rust-lang/crates.io-index"
1349
- checksum = "73225868fc1cd84eef2c3c230ddb91273bf1de46aeb8a4248da76d32a0924a1c"
1350
+ checksum = "6100e8a4b5eba53afaa5ed078364851a0b2499c553a44c31026b929049b49dc6"
1350
1351
  dependencies = [
1351
1352
  "proc-macro2",
1352
1353
  "pyo3-macros-backend",
@@ -1356,9 +1357,9 @@ dependencies = [
1356
1357
 
1357
1358
  [[package]]
1358
1359
  name = "pyo3-macros-backend"
1359
- version = "0.29.2"
1360
+ version = "0.29.3"
1360
1361
  source = "registry+https://github.com/rust-lang/crates.io-index"
1361
- checksum = "571575aa3749fa6216757dd47d2a3e7ef360f329a40f0666a9fbd14889024952"
1362
+ checksum = "6143877a16e82b5a727b7127ff4cd86858a24a28d745d72f43e6f227c7b1bdb3"
1362
1363
  dependencies = [
1363
1364
  "heck",
1364
1365
  "proc-macro2",
@@ -1368,9 +1369,9 @@ dependencies = [
1368
1369
 
1369
1370
  [[package]]
1370
1371
  name = "quinn"
1371
- version = "0.11.11"
1372
+ version = "0.11.12"
1372
1373
  source = "registry+https://github.com/rust-lang/crates.io-index"
1373
- checksum = "0c1a41e437b6bbd489372cd4971de128e85c855f56c57f283d20ff016cf7c0a8"
1374
+ checksum = "4051e23e9185c255a7e33ef59cdbca87a22d359052eecd22fc6b901fb37d9d11"
1374
1375
  dependencies = [
1375
1376
  "bytes",
1376
1377
  "cfg_aliases",
@@ -1389,9 +1390,9 @@ dependencies = [
1389
1390
 
1390
1391
  [[package]]
1391
1392
  name = "quinn-proto"
1392
- version = "0.11.16"
1393
+ version = "0.11.19"
1393
1394
  source = "registry+https://github.com/rust-lang/crates.io-index"
1394
- checksum = "2f4bfc015262b9df63c8845072ce59068853ff5872180c2ce2f13038b970e560"
1395
+ checksum = "0e750cca55fe4f0439a15d0bb529da9651e79993e8e72c61a899a36d462befbe"
1395
1396
  dependencies = [
1396
1397
  "bytes",
1397
1398
  "getrandom 0.4.3",
@@ -1420,7 +1421,7 @@ dependencies = [
1420
1421
  "once_cell",
1421
1422
  "socket2",
1422
1423
  "tracing",
1423
- "windows-sys 0.61.2",
1424
+ "windows-sys 0.52.0",
1424
1425
  ]
1425
1426
 
1426
1427
  [[package]]
@@ -1480,9 +1481,9 @@ dependencies = [
1480
1481
 
1481
1482
  [[package]]
1482
1483
  name = "redis"
1483
- version = "1.6.0"
1484
+ version = "1.8.1"
1484
1485
  source = "registry+https://github.com/rust-lang/crates.io-index"
1485
- checksum = "e37a4ca5c6ca42aa3e6df2fd32b987a65d32a4c2159a6f3fe0fd1df306a2658f"
1486
+ checksum = "db7f3d75b5a3301746bff39a767bf4c5c42506b08513527308b3875bfb64a031"
1486
1487
  dependencies = [
1487
1488
  "arc-swap",
1488
1489
  "arcstr",
@@ -1544,11 +1545,11 @@ checksum = "d6f6ff9a378485b298a5286656da665ba74413d36db0979633275d2e708145d4"
1544
1545
 
1545
1546
  [[package]]
1546
1547
  name = "reqwest"
1547
- version = "0.13.4"
1548
+ version = "0.13.5"
1548
1549
  source = "registry+https://github.com/rust-lang/crates.io-index"
1549
- checksum = "219c5811de6525e5416c7d5d53bb656d3afdbc6c5af816e0802bcfa42dbdc1c3"
1550
+ checksum = "16a1cfa75cc186dd73d5818e510e042e40927bccc9c236b061cea97e1eb08029"
1550
1551
  dependencies = [
1551
- "base64 0.22.1",
1552
+ "base64 0.23.1",
1552
1553
  "bytes",
1553
1554
  "futures-core",
1554
1555
  "futures-util",
@@ -1656,14 +1657,14 @@ dependencies = [
1656
1657
  "errno",
1657
1658
  "libc",
1658
1659
  "linux-raw-sys",
1659
- "windows-sys 0.61.2",
1660
+ "windows-sys 0.52.0",
1660
1661
  ]
1661
1662
 
1662
1663
  [[package]]
1663
1664
  name = "rustls"
1664
- version = "0.23.43"
1665
+ version = "0.23.46"
1665
1666
  source = "registry+https://github.com/rust-lang/crates.io-index"
1666
- checksum = "0283386ce02abc0151e1761d08802dfe86c173b0b494af5cbc086574e453da06"
1667
+ checksum = "48e13bd8c0e9365c43cfa5c9e8f9ad49d3c8444926c9aac819e0e4dc503c8fdf"
1667
1668
  dependencies = [
1668
1669
  "aws-lc-rs",
1669
1670
  "log",
@@ -1724,7 +1725,7 @@ dependencies = [
1724
1725
  "security-framework",
1725
1726
  "security-framework-sys",
1726
1727
  "webpki-root-certs",
1727
- "windows-sys 0.61.2",
1728
+ "windows-sys 0.52.0",
1728
1729
  ]
1729
1730
 
1730
1731
  [[package]]
@@ -1735,9 +1736,9 @@ checksum = "f87165f0995f63a9fbeea62b64d10b4d9d8e78ec6d7d51fb2125fda7bb36788f"
1735
1736
 
1736
1737
  [[package]]
1737
1738
  name = "rustls-webpki"
1738
- version = "0.103.13"
1739
+ version = "0.103.15"
1739
1740
  source = "registry+https://github.com/rust-lang/crates.io-index"
1740
- checksum = "61c429a8649f110dddef65e2a5ad240f747e85f7758a6bccc7e5777bd33f756e"
1741
+ checksum = "f3c3cf1d8b1e7d4927e2d154c3fcb02979afb9939629c62cd9048d4f07b60ac2"
1741
1742
  dependencies = [
1742
1743
  "aws-lc-rs",
1743
1744
  "ring",
@@ -1842,9 +1843,9 @@ dependencies = [
1842
1843
 
1843
1844
  [[package]]
1844
1845
  name = "serde_json"
1845
- version = "1.0.151"
1846
+ version = "1.0.154"
1846
1847
  source = "registry+https://github.com/rust-lang/crates.io-index"
1847
- checksum = "c841b55ecdae098c80dcae9cf767f6f8a0c2cdb3416bbef72181df4d0fe73f14"
1848
+ checksum = "e7e9cc8b1b85264074fbcc02a88680c4096b1e47df8f739dceb03bf482f04bd6"
1848
1849
  dependencies = [
1849
1850
  "itoa",
1850
1851
  "memchr",
@@ -2008,23 +2009,23 @@ dependencies = [
2008
2009
  "getrandom 0.4.3",
2009
2010
  "once_cell",
2010
2011
  "rustix",
2011
- "windows-sys 0.61.2",
2012
+ "windows-sys 0.52.0",
2012
2013
  ]
2013
2014
 
2014
2015
  [[package]]
2015
2016
  name = "thiserror"
2016
- version = "2.0.20"
2017
+ version = "2.0.21"
2017
2018
  source = "registry+https://github.com/rust-lang/crates.io-index"
2018
- checksum = "ec86235f5fcc2a73650310756d2ac5b138a5780bbbdfae3eeccec992c435ba4f"
2019
+ checksum = "09e52cb86a36cede5cb101bf8908837b3e4c6e5e59fe7fd85c23fb56200d189e"
2019
2020
  dependencies = [
2020
2021
  "thiserror-impl",
2021
2022
  ]
2022
2023
 
2023
2024
  [[package]]
2024
2025
  name = "thiserror-impl"
2025
- version = "2.0.20"
2026
+ version = "2.0.21"
2026
2027
  source = "registry+https://github.com/rust-lang/crates.io-index"
2027
- checksum = "bc04cd3e1236dd4a98afca4569f2deb3f120e5422a4023be2cb683f8486292af"
2028
+ checksum = "fe5197923287db20a58125f0bc85c062f7f2c892de97b18c356f9efb14b28524"
2028
2029
  dependencies = [
2029
2030
  "proc-macro2",
2030
2031
  "quote",
@@ -2097,9 +2098,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
2097
2098
 
2098
2099
  [[package]]
2099
2100
  name = "tokio"
2100
- version = "1.53.1"
2101
+ version = "1.54.1"
2101
2102
  source = "registry+https://github.com/rust-lang/crates.io-index"
2102
- checksum = "202caea871b69668250d242070849eb495be178ed697a3e98aebce5bc81a0bed"
2103
+ checksum = "b52fd3255258d26fac7264ab5a76b53c13367136dc011d3d6ad4f8ed070396a3"
2103
2104
  dependencies = [
2104
2105
  "bytes",
2105
2106
  "libc",
@@ -2125,9 +2126,9 @@ dependencies = [
2125
2126
 
2126
2127
  [[package]]
2127
2128
  name = "tokio-rustls"
2128
- version = "0.26.4"
2129
+ version = "0.26.6"
2129
2130
  source = "registry+https://github.com/rust-lang/crates.io-index"
2130
- checksum = "1729aa945f29d91ba541258c8df89027d5792d85a8841fb65e8bf0f4ede4ef61"
2131
+ checksum = "c9cc2678c2cdd569ef8215e2afd7954ada2ae20b4fdd2c5fe6139a3b02d105db"
2131
2132
  dependencies = [
2132
2133
  "rustls",
2133
2134
  "tokio",
@@ -2151,9 +2152,9 @@ dependencies = [
2151
2152
 
2152
2153
  [[package]]
2153
2154
  name = "tokio-util"
2154
- version = "0.7.19"
2155
+ version = "0.7.20"
2155
2156
  source = "registry+https://github.com/rust-lang/crates.io-index"
2156
- checksum = "494815d09bf52b5548659851081238f0ca39ff638363907596da739561c62c52"
2157
+ checksum = "e464cf451ba96ebfc6f9b6542f17ee8b8956e33f1e40d9690624e59d7a7f8a4b"
2157
2158
  dependencies = [
2158
2159
  "bytes",
2159
2160
  "futures-core",
@@ -2368,9 +2369,9 @@ dependencies = [
2368
2369
 
2369
2370
  [[package]]
2370
2371
  name = "want"
2371
- version = "0.3.1"
2372
+ version = "0.3.2"
2372
2373
  source = "registry+https://github.com/rust-lang/crates.io-index"
2373
- checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e"
2374
+ checksum = "ec4cdd0dd910afe868b7ef477227d8d538b46b3075031afee8a9f2acb0a2ed0b"
2374
2375
  dependencies = [
2375
2376
  "try-lock",
2376
2377
  ]
@@ -2502,7 +2503,7 @@ version = "0.1.11"
2502
2503
  source = "registry+https://github.com/rust-lang/crates.io-index"
2503
2504
  checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22"
2504
2505
  dependencies = [
2505
- "windows-sys 0.61.2",
2506
+ "windows-sys 0.52.0",
2506
2507
  ]
2507
2508
 
2508
2509
  [[package]]
@@ -5,14 +5,14 @@ members = ["crates/nitro-core", "crates/nitro-observability", "crates/nitro-py",
5
5
  [workspace.package]
6
6
  edition = "2024"
7
7
  license = "MIT OR Apache-2.0"
8
- version = "0.3.0"
8
+ version = "0.3.2"
9
9
  authors = ["Mario Ritzerfeld <oss@jaldis.com>"]
10
10
  repository = "https://github.com/jaldisdev/nitro"
11
11
 
12
12
  [workspace.dependencies]
13
- nitro-core = { path = "crates/nitro-core", version = "0.3.0" }
14
- nitro-observability = { path = "crates/nitro-observability", version = "0.3.0" }
15
- intercom-core = { path = "crates/intercom-core", version = "0.3.0" }
13
+ nitro-core = { path = "crates/nitro-core", version = "0.3.2" }
14
+ nitro-observability = { path = "crates/nitro-observability", version = "0.3.2" }
15
+ intercom-core = { path = "crates/intercom-core", version = "0.3.2" }
16
16
 
17
17
  # Async runtime
18
18
  tokio = { version = "1.53.1", features = ["full"] }
@@ -34,7 +34,7 @@ h3-webtransport = "0.1.2"
34
34
  h3-datagram = "0.0.2"
35
35
 
36
36
  # TLS
37
- rustls = { version = "0.23.43", default-features = false, features = ["tls12", "ring", "logging", "std"] }
37
+ rustls = { version = "0.23.45", default-features = false, features = ["tls12", "ring", "logging", "std"] }
38
38
  rustls-pemfile = "2.2.0"
39
39
  # Default features would bring aws-lc-rs. Everything here uses ring, and a
40
40
  # second crypto provider compiled into the wheel is weight nothing calls.
@@ -1,12 +1,13 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: nitro-framework
3
- Version: 0.3.0
3
+ Version: 0.3.2
4
4
  Classifier: Development Status :: 3 - Alpha
5
5
  Classifier: Framework :: AsyncIO
6
6
  Classifier: Intended Audience :: Developers
7
7
  Classifier: Programming Language :: Python :: 3
8
8
  Classifier: Programming Language :: Python :: 3.13
9
9
  Classifier: Programming Language :: Python :: 3.14
10
+ Classifier: Programming Language :: Python :: 3.15
10
11
  Classifier: Programming Language :: Rust
11
12
  Classifier: Topic :: Internet :: WWW/HTTP
12
13
  Classifier: Topic :: Software Development :: Libraries :: Application Frameworks
@@ -34,7 +35,7 @@ Requires-Dist: pytest-asyncio>=1.0 ; extra == 'dev'
34
35
  Requires-Dist: pytest-timeout>=2.4 ; extra == 'dev'
35
36
  Requires-Dist: cryptography>=50.0.0 ; extra == 'dev'
36
37
  Requires-Dist: websockets>=15 ; extra == 'dev'
37
- Requires-Dist: aioquic>=1.3 ; extra == 'dev'
38
+ Requires-Dist: aioquic>=1.3,<1.6 ; extra == 'dev'
38
39
  Requires-Dist: authlib>=1.7.2 ; extra == 'email-oauth'
39
40
  Requires-Dist: emcache>=1.3.3 ; python_full_version < '3.14' and extra == 'memcached'
40
41
  Requires-Dist: redis[hiredis]>=8.0.0 ; extra == 'redis'
@@ -21,6 +21,6 @@
21
21
 
22
22
  from nitro.app import Nitro
23
23
 
24
- __version__ = "0.3.0"
24
+ __version__ = "0.3.2"
25
25
 
26
26
  __all__ = ["Nitro", "__version__"]
@@ -81,6 +81,13 @@ class SessionStore(Protocol):
81
81
  outlives an eviction, or one an application already queries for its own
82
82
  reasons. :class:`CacheSessionStore` is the default and is enough for state
83
83
  that may be lost.
84
+
85
+ A store whose sessions are created elsewhere — rows an application writes
86
+ at sign-in and nowhere else — says so with an ``allocates_keys = False``
87
+ attribute, and :meth:`Session.set` then refuses a bag with no key at the
88
+ write instead of reaching a :meth:`create` that cannot answer. The
89
+ attribute is optional and taken as true when it is absent, since a store
90
+ predating it had no way to get a key but `create`.
84
91
  """
85
92
 
86
93
  async def read(self, key: str) -> dict[str, Any] | None:
@@ -193,6 +200,23 @@ class Session:
193
200
  """Whether the bag has been read. A session nothing touched has not."""
194
201
  return self._data is not None
195
202
 
203
+ async def writable(self) -> bool:
204
+ """Whether something stored in this bag could be read back.
205
+
206
+ False for a bag with no key in a store that does not allocate them:
207
+ the application creates its sessions itself and this connection is not
208
+ in one. An API token naming no session, and a key whose session has
209
+ expired or been revoked, both arrive here — so a handler storing
210
+ something a later request has to find asks this first.
211
+
212
+ A coroutine rather than a property because the answer is not in the
213
+ key: a key the store has nothing under is dropped when the bag is read,
214
+ and reading it is what settles the question.
215
+ """
216
+ await self._load()
217
+
218
+ return self._key is not None or getattr(self._store, "allocates_keys", True)
219
+
196
220
  async def _load(self) -> dict[str, Any]:
197
221
  if self._data is not None:
198
222
  return self._data
@@ -218,7 +242,19 @@ class Session:
218
242
  return data.get(name, default)
219
243
 
220
244
  async def set(self, name: str, value: Any) -> None:
221
- """Store `value` under `name`."""
245
+ """Store `value` under `name`.
246
+
247
+ Raises :class:`SessionError` when the bag has nowhere to be written
248
+ back to, which :meth:`writable` answers without raising. The refusal
249
+ belongs here rather than at the save that would otherwise fail: by then
250
+ the handler has answered the request and the frame that wrote is gone.
251
+ """
252
+ if not await self.writable():
253
+ raise SessionError(
254
+ f"nothing can be stored under {name!r}: this connection carries no session key, "
255
+ f"and {type(self._store).__name__} does not allocate one"
256
+ )
257
+
222
258
  data = await self._load()
223
259
  data[name] = value
224
260
  self._modified = True
@@ -82,26 +82,25 @@ class LazySettings:
82
82
  _wrapped: Settings | None
83
83
 
84
84
  def __init__(self) -> None:
85
- object.__setattr__(self, "_wrapped", None)
85
+ self._wrapped = None
86
86
 
87
87
  def _setup(self) -> Settings:
88
88
  resolved = Settings(os.environ.get(ENVIRONMENT_VARIABLE))
89
- object.__setattr__(self, "_wrapped", resolved)
89
+ self._wrapped = resolved
90
90
  return resolved
91
91
 
92
+ # An assignment is kept on the proxy, where it shadows the resolved value,
93
+ # rather than written through to the resolved settings. Deleting it then
94
+ # restores what resolution produced, instead of leaving a hole where a
95
+ # default was: `Settings` copies the defaults onto itself, so a name
96
+ # deleted there is gone for the rest of the process. That is what undoing
97
+ # a `monkeypatch.setattr` does, since the name is not one the proxy held.
92
98
  def __getattr__(self, name: str) -> Any:
93
99
  if name.startswith("_"):
94
100
  raise AttributeError(f"{type(self).__name__!r} object has no attribute {name!r}")
95
101
  resolved = self._wrapped or self._setup()
96
102
  return getattr(resolved, name)
97
103
 
98
- def __setattr__(self, name: str, value: Any) -> None:
99
- if name.startswith("_"):
100
- object.__setattr__(self, name, value)
101
- return
102
- resolved = self._wrapped or self._setup()
103
- setattr(resolved, name, value)
104
-
105
104
  @property
106
105
  def configured(self) -> bool:
107
106
  """Whether the settings have been resolved yet."""
@@ -112,7 +111,7 @@ class LazySettings:
112
111
 
113
112
  Intended for tests that change the environment between cases.
114
113
  """
115
- object.__setattr__(self, "_wrapped", None)
114
+ self._wrapped = None
116
115
 
117
116
  def __repr__(self) -> str:
118
117
  if self._wrapped is None:
@@ -4,7 +4,7 @@ build-backend = "maturin"
4
4
 
5
5
  [project]
6
6
  name = "nitro-framework"
7
- version = "0.3.0"
7
+ version = "0.3.2"
8
8
  description = "Async-first Python web framework with a bundled Rust server"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.13"
@@ -19,6 +19,7 @@ classifiers = [
19
19
  "Programming Language :: Python :: 3",
20
20
  "Programming Language :: Python :: 3.13",
21
21
  "Programming Language :: Python :: 3.14",
22
+ "Programming Language :: Python :: 3.15",
22
23
  "Programming Language :: Rust",
23
24
  "Topic :: Internet :: WWW/HTTP",
24
25
  "Topic :: Software Development :: Libraries :: Application Frameworks",
@@ -61,7 +62,10 @@ dev = [
61
62
  "pytest-timeout>=2.4",
62
63
  "cryptography>=50.0.0",
63
64
  "websockets>=15",
64
- "aioquic>=1.3",
65
+ # 1.6.0 checks a response's content-length against the bytes it
66
+ # received without exempting HEAD, so it rejects the HEAD responses
67
+ # RFC 9110 §9.3.2 asks for and drops the events for them.
68
+ "aioquic>=1.3,<1.6",
65
69
  ]
66
70
 
67
71
  [project.urls]