supython 0.1.9__tar.gz → 0.1.10__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 (253) hide show
  1. {supython-0.1.9 → supython-0.1.10}/CHANGELOG.md +24 -0
  2. {supython-0.1.9 → supython-0.1.10}/PKG-INFO +2 -1
  3. {supython-0.1.9 → supython-0.1.10}/pyproject.toml +2 -1
  4. {supython-0.1.9 → supython-0.1.10}/src/supython/app.py +2 -1
  5. {supython-0.1.9 → supython-0.1.10}/src/supython/cli.py +3 -1
  6. {supython-0.1.9 → supython-0.1.10}/src/supython/settings.py +31 -0
  7. {supython-0.1.9 → supython-0.1.10}/.gitignore +0 -0
  8. {supython-0.1.9 → supython-0.1.10}/LICENSE +0 -0
  9. {supython-0.1.9 → supython-0.1.10}/README.md +0 -0
  10. {supython-0.1.9 → supython-0.1.10}/SECURITY.md +0 -0
  11. {supython-0.1.9 → supython-0.1.10}/src/supython/__init__.py +0 -0
  12. {supython-0.1.9 → supython-0.1.10}/src/supython/admin/__init__.py +0 -0
  13. {supython-0.1.9 → supython-0.1.10}/src/supython/admin/api/__init__.py +0 -0
  14. {supython-0.1.9 → supython-0.1.10}/src/supython/admin/api/auth.py +0 -0
  15. {supython-0.1.9 → supython-0.1.10}/src/supython/admin/api/auth_templates.py +0 -0
  16. {supython-0.1.9 → supython-0.1.10}/src/supython/admin/api/auth_users.py +0 -0
  17. {supython-0.1.9 → supython-0.1.10}/src/supython/admin/api/db.py +0 -0
  18. {supython-0.1.9 → supython-0.1.10}/src/supython/admin/api/functions.py +0 -0
  19. {supython-0.1.9 → supython-0.1.10}/src/supython/admin/api/jobs.py +0 -0
  20. {supython-0.1.9 → supython-0.1.10}/src/supython/admin/api/ops.py +0 -0
  21. {supython-0.1.9 → supython-0.1.10}/src/supython/admin/api/realtime.py +0 -0
  22. {supython-0.1.9 → supython-0.1.10}/src/supython/admin/api/service_auth.py +0 -0
  23. {supython-0.1.9 → supython-0.1.10}/src/supython/admin/api/service_auth_templates.py +0 -0
  24. {supython-0.1.9 → supython-0.1.10}/src/supython/admin/api/service_auth_users.py +0 -0
  25. {supython-0.1.9 → supython-0.1.10}/src/supython/admin/api/service_db.py +0 -0
  26. {supython-0.1.9 → supython-0.1.10}/src/supython/admin/api/service_functions.py +0 -0
  27. {supython-0.1.9 → supython-0.1.10}/src/supython/admin/api/service_jobs.py +0 -0
  28. {supython-0.1.9 → supython-0.1.10}/src/supython/admin/api/service_ops.py +0 -0
  29. {supython-0.1.9 → supython-0.1.10}/src/supython/admin/api/service_realtime.py +0 -0
  30. {supython-0.1.9 → supython-0.1.10}/src/supython/admin/api/service_storage.py +0 -0
  31. {supython-0.1.9 → supython-0.1.10}/src/supython/admin/api/storage.py +0 -0
  32. {supython-0.1.9 → supython-0.1.10}/src/supython/admin/api/system.py +0 -0
  33. {supython-0.1.9 → supython-0.1.10}/src/supython/admin/audit.py +0 -0
  34. {supython-0.1.9 → supython-0.1.10}/src/supython/admin/deps.py +0 -0
  35. {supython-0.1.9 → supython-0.1.10}/src/supython/admin/errors.py +0 -0
  36. {supython-0.1.9 → supython-0.1.10}/src/supython/admin/schemas.py +0 -0
  37. {supython-0.1.9 → supython-0.1.10}/src/supython/admin/session.py +0 -0
  38. {supython-0.1.9 → supython-0.1.10}/src/supython/admin/spa.py +0 -0
  39. {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/Alert-dluGVkos.js +0 -0
  40. {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/Alert-dluGVkos.js.map +0 -0
  41. {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/Audit-Njung3HI.js +0 -0
  42. {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/Audit-Njung3HI.js.map +0 -0
  43. {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/Backups-DzPlFgrm.js +0 -0
  44. {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/Backups-DzPlFgrm.js.map +0 -0
  45. {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/Buckets-ByacGkU1.js +0 -0
  46. {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/Buckets-ByacGkU1.js.map +0 -0
  47. {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/Channels-BoIuTtam.js +0 -0
  48. {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/Channels-BoIuTtam.js.map +0 -0
  49. {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/ChevronRight-CtQH1EQ1.js +0 -0
  50. {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/ChevronRight-CtQH1EQ1.js.map +0 -0
  51. {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/CodeViewer-Bqy7-wvH.js +0 -0
  52. {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/CodeViewer-Bqy7-wvH.js.map +0 -0
  53. {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/Crons-B67vc39F.js +0 -0
  54. {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/Crons-B67vc39F.js.map +0 -0
  55. {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/DashboardView-CUTFVL6k.js +0 -0
  56. {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/DashboardView-CUTFVL6k.js.map +0 -0
  57. {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/DataTable-COAAWEft.js +0 -0
  58. {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/DataTable-COAAWEft.js.map +0 -0
  59. {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/DescriptionsItem-P8JUDaBs.js +0 -0
  60. {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/DescriptionsItem-P8JUDaBs.js.map +0 -0
  61. {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/DrawerContent-TpYTFgF1.js +0 -0
  62. {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/DrawerContent-TpYTFgF1.js.map +0 -0
  63. {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/Empty-cr2r7e2u.js +0 -0
  64. {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/Empty-cr2r7e2u.js.map +0 -0
  65. {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/EmptyState-DeDck-OL.js +0 -0
  66. {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/EmptyState-DeDck-OL.js.map +0 -0
  67. {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/Grid-hFkp9F4P.js +0 -0
  68. {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/Grid-hFkp9F4P.js.map +0 -0
  69. {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/Input-DppYTq9C.js +0 -0
  70. {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/Input-DppYTq9C.js.map +0 -0
  71. {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/Invoke-DW3Nveeh.js +0 -0
  72. {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/Invoke-DW3Nveeh.js.map +0 -0
  73. {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/JsonField-DibyJgun.js +0 -0
  74. {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/JsonField-DibyJgun.js.map +0 -0
  75. {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/LoginView-BjLyE3Ds.css +0 -0
  76. {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/LoginView-CoOjECT_.js +0 -0
  77. {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/LoginView-CoOjECT_.js.map +0 -0
  78. {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/Logs-D9WYrnIT.js +0 -0
  79. {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/Logs-D9WYrnIT.js.map +0 -0
  80. {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/Logs-DS1XPa0h.css +0 -0
  81. {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/Migrations-DOSC2ddQ.js +0 -0
  82. {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/Migrations-DOSC2ddQ.js.map +0 -0
  83. {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/ObjectBrowser-_5w8vOX8.js +0 -0
  84. {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/ObjectBrowser-_5w8vOX8.js.map +0 -0
  85. {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/Queue-CywZs6vI.js +0 -0
  86. {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/Queue-CywZs6vI.js.map +0 -0
  87. {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/RefreshTokens-Ccjr53jg.js +0 -0
  88. {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/RefreshTokens-Ccjr53jg.js.map +0 -0
  89. {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/RlsEditor-BSlH9vSc.js +0 -0
  90. {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/RlsEditor-BSlH9vSc.js.map +0 -0
  91. {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/Routes-BiLXE49D.js +0 -0
  92. {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/Routes-BiLXE49D.js.map +0 -0
  93. {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/Routes-C-ianIGD.css +0 -0
  94. {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/SchemaBrowser-DKy2_KQi.css +0 -0
  95. {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/SchemaBrowser-XFvFbtDB.js +0 -0
  96. {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/SchemaBrowser-XFvFbtDB.js.map +0 -0
  97. {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/Select-DIzZyRZb.js +0 -0
  98. {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/Select-DIzZyRZb.js.map +0 -0
  99. {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/Space-n5-XcguU.js +0 -0
  100. {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/Space-n5-XcguU.js.map +0 -0
  101. {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/SqlEditor-b8pTsILY.js +0 -0
  102. {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/SqlEditor-b8pTsILY.js.map +0 -0
  103. {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/SqlWorkspace-BUS7IntH.js +0 -0
  104. {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/SqlWorkspace-BUS7IntH.js.map +0 -0
  105. {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/TableData-CQIagLKn.js +0 -0
  106. {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/TableData-CQIagLKn.js.map +0 -0
  107. {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/Tag-D1fOKpTH.js +0 -0
  108. {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/Tag-D1fOKpTH.js.map +0 -0
  109. {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/Templates-BS-ugkdq.js +0 -0
  110. {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/Templates-BS-ugkdq.js.map +0 -0
  111. {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/Thing-CEAniuMg.js +0 -0
  112. {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/Thing-CEAniuMg.js.map +0 -0
  113. {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/Users-wzwajhlh.js +0 -0
  114. {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/Users-wzwajhlh.js.map +0 -0
  115. {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/_plugin-vue_export-helper-DGA9ry_j.js +0 -0
  116. {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/dist-VXIJLCYq.js +0 -0
  117. {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/dist-VXIJLCYq.js.map +0 -0
  118. {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/format-length-CGCY1rMh.js +0 -0
  119. {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/format-length-CGCY1rMh.js.map +0 -0
  120. {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/get-Ca6unauB.js +0 -0
  121. {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/get-Ca6unauB.js.map +0 -0
  122. {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/index-CeE6v959.js +0 -0
  123. {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/index-CeE6v959.js.map +0 -0
  124. {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/pinia-COXwfrOX.js +0 -0
  125. {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/pinia-COXwfrOX.js.map +0 -0
  126. {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/resources-Bt6thQCD.js +0 -0
  127. {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/resources-Bt6thQCD.js.map +0 -0
  128. {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/use-locale-mtgM0a3a.js +0 -0
  129. {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/use-locale-mtgM0a3a.js.map +0 -0
  130. {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/use-merged-state-BvhkaHNX.js +0 -0
  131. {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/use-merged-state-BvhkaHNX.js.map +0 -0
  132. {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/useConfirm-tMjvBFXR.js +0 -0
  133. {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/useConfirm-tMjvBFXR.js.map +0 -0
  134. {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/useResource-C_rJCY8C.js +0 -0
  135. {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/useResource-C_rJCY8C.js.map +0 -0
  136. {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/useTable-CnZc5zhi.js +0 -0
  137. {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/useTable-CnZc5zhi.js.map +0 -0
  138. {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/useTable-Dg0XlRlq.css +0 -0
  139. {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/useToast-DsZKx0IX.js +0 -0
  140. {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/useToast-DsZKx0IX.js.map +0 -0
  141. {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/utils-sbXoq7Ir.js +0 -0
  142. {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/utils-sbXoq7Ir.js.map +0 -0
  143. {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/favicon.svg +0 -0
  144. {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/icons.svg +0 -0
  145. {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/index.html +0 -0
  146. {supython-0.1.9 → supython-0.1.10}/src/supython/auth/__init__.py +0 -0
  147. {supython-0.1.9 → supython-0.1.10}/src/supython/auth/_email_job.py +0 -0
  148. {supython-0.1.9 → supython-0.1.10}/src/supython/auth/claims.py +0 -0
  149. {supython-0.1.9 → supython-0.1.10}/src/supython/auth/deps.py +0 -0
  150. {supython-0.1.9 → supython-0.1.10}/src/supython/auth/providers/__init__.py +0 -0
  151. {supython-0.1.9 → supython-0.1.10}/src/supython/auth/providers/github.py +0 -0
  152. {supython-0.1.9 → supython-0.1.10}/src/supython/auth/providers/google.py +0 -0
  153. {supython-0.1.9 → supython-0.1.10}/src/supython/auth/providers/oauth.py +0 -0
  154. {supython-0.1.9 → supython-0.1.10}/src/supython/auth/providers/registry.py +0 -0
  155. {supython-0.1.9 → supython-0.1.10}/src/supython/auth/ratelimit.py +0 -0
  156. {supython-0.1.9 → supython-0.1.10}/src/supython/auth/router.py +0 -0
  157. {supython-0.1.9 → supython-0.1.10}/src/supython/auth/schemas.py +0 -0
  158. {supython-0.1.9 → supython-0.1.10}/src/supython/auth/service.py +0 -0
  159. {supython-0.1.9 → supython-0.1.10}/src/supython/backups/__init__.py +0 -0
  160. {supython-0.1.9 → supython-0.1.10}/src/supython/backups/_backup_job.py +0 -0
  161. {supython-0.1.9 → supython-0.1.10}/src/supython/backups/schemas.py +0 -0
  162. {supython-0.1.9 → supython-0.1.10}/src/supython/backups/service.py +0 -0
  163. {supython-0.1.9 → supython-0.1.10}/src/supython/body_size.py +0 -0
  164. {supython-0.1.9 → supython-0.1.10}/src/supython/client/__init__.py +0 -0
  165. {supython-0.1.9 → supython-0.1.10}/src/supython/client/_auth.py +0 -0
  166. {supython-0.1.9 → supython-0.1.10}/src/supython/client/_client.py +0 -0
  167. {supython-0.1.9 → supython-0.1.10}/src/supython/client/_config.py +0 -0
  168. {supython-0.1.9 → supython-0.1.10}/src/supython/client/_functions.py +0 -0
  169. {supython-0.1.9 → supython-0.1.10}/src/supython/client/_storage.py +0 -0
  170. {supython-0.1.9 → supython-0.1.10}/src/supython/client/py.typed +0 -0
  171. {supython-0.1.9 → supython-0.1.10}/src/supython/db.py +0 -0
  172. {supython-0.1.9 → supython-0.1.10}/src/supython/db_admin.py +0 -0
  173. {supython-0.1.9 → supython-0.1.10}/src/supython/extensions.py +0 -0
  174. {supython-0.1.9 → supython-0.1.10}/src/supython/functions/__init__.py +0 -0
  175. {supython-0.1.9 → supython-0.1.10}/src/supython/functions/context.py +0 -0
  176. {supython-0.1.9 → supython-0.1.10}/src/supython/functions/loader.py +0 -0
  177. {supython-0.1.9 → supython-0.1.10}/src/supython/functions/router.py +0 -0
  178. {supython-0.1.9 → supython-0.1.10}/src/supython/functions/schemas.py +0 -0
  179. {supython-0.1.9 → supython-0.1.10}/src/supython/gen/__init__.py +0 -0
  180. {supython-0.1.9 → supython-0.1.10}/src/supython/gen/_introspect.py +0 -0
  181. {supython-0.1.9 → supython-0.1.10}/src/supython/gen/types_py.py +0 -0
  182. {supython-0.1.9 → supython-0.1.10}/src/supython/gen/types_ts.py +0 -0
  183. {supython-0.1.9 → supython-0.1.10}/src/supython/health.py +0 -0
  184. {supython-0.1.9 → supython-0.1.10}/src/supython/hooks.py +0 -0
  185. {supython-0.1.9 → supython-0.1.10}/src/supython/jobs/__init__.py +0 -0
  186. {supython-0.1.9 → supython-0.1.10}/src/supython/jobs/backends.py +0 -0
  187. {supython-0.1.9 → supython-0.1.10}/src/supython/jobs/context.py +0 -0
  188. {supython-0.1.9 → supython-0.1.10}/src/supython/jobs/cron.py +0 -0
  189. {supython-0.1.9 → supython-0.1.10}/src/supython/jobs/cron_inproc.py +0 -0
  190. {supython-0.1.9 → supython-0.1.10}/src/supython/jobs/decorators.py +0 -0
  191. {supython-0.1.9 → supython-0.1.10}/src/supython/jobs/registry.py +0 -0
  192. {supython-0.1.9 → supython-0.1.10}/src/supython/jobs/router.py +0 -0
  193. {supython-0.1.9 → supython-0.1.10}/src/supython/jobs/schemas.py +0 -0
  194. {supython-0.1.9 → supython-0.1.10}/src/supython/jobs/service.py +0 -0
  195. {supython-0.1.9 → supython-0.1.10}/src/supython/jobs/worker.py +0 -0
  196. {supython-0.1.9 → supython-0.1.10}/src/supython/jwks.py +0 -0
  197. {supython-0.1.9 → supython-0.1.10}/src/supython/keyset.py +0 -0
  198. {supython-0.1.9 → supython-0.1.10}/src/supython/logging_config.py +0 -0
  199. {supython-0.1.9 → supython-0.1.10}/src/supython/mail.py +0 -0
  200. {supython-0.1.9 → supython-0.1.10}/src/supython/mailer.py +0 -0
  201. {supython-0.1.9 → supython-0.1.10}/src/supython/migrate.py +0 -0
  202. {supython-0.1.9 → supython-0.1.10}/src/supython/migrations/0001_extensions_and_roles.sql +0 -0
  203. {supython-0.1.9 → supython-0.1.10}/src/supython/migrations/0002_auth_schema.sql +0 -0
  204. {supython-0.1.9 → supython-0.1.10}/src/supython/migrations/0003_demo_todos.sql +0 -0
  205. {supython-0.1.9 → supython-0.1.10}/src/supython/migrations/0004_auth_v0_2.sql +0 -0
  206. {supython-0.1.9 → supython-0.1.10}/src/supython/migrations/0005_storage_schema.sql +0 -0
  207. {supython-0.1.9 → supython-0.1.10}/src/supython/migrations/0006_realtime_schema.sql +0 -0
  208. {supython-0.1.9 → supython-0.1.10}/src/supython/migrations/0007_jobs_schema.sql +0 -0
  209. {supython-0.1.9 → supython-0.1.10}/src/supython/migrations/0008_jobs_last_error.sql +0 -0
  210. {supython-0.1.9 → supython-0.1.10}/src/supython/migrations/0009_auth_rate_limits.sql +0 -0
  211. {supython-0.1.9 → supython-0.1.10}/src/supython/migrations/0010_worker_heartbeat.sql +0 -0
  212. {supython-0.1.9 → supython-0.1.10}/src/supython/migrations/0011_admin_schema.sql +0 -0
  213. {supython-0.1.9 → supython-0.1.10}/src/supython/migrations/0012_auth_banned_until.sql +0 -0
  214. {supython-0.1.9 → supython-0.1.10}/src/supython/migrations/0013_email_templates.sql +0 -0
  215. {supython-0.1.9 → supython-0.1.10}/src/supython/migrations/0014_realtime_payload_warning.sql +0 -0
  216. {supython-0.1.9 → supython-0.1.10}/src/supython/migrations/0015_backups_schema.sql +0 -0
  217. {supython-0.1.9 → supython-0.1.10}/src/supython/passwords.py +0 -0
  218. {supython-0.1.9 → supython-0.1.10}/src/supython/realtime/__init__.py +0 -0
  219. {supython-0.1.9 → supython-0.1.10}/src/supython/realtime/broker.py +0 -0
  220. {supython-0.1.9 → supython-0.1.10}/src/supython/realtime/protocol.py +0 -0
  221. {supython-0.1.9 → supython-0.1.10}/src/supython/realtime/router.py +0 -0
  222. {supython-0.1.9 → supython-0.1.10}/src/supython/realtime/schemas.py +0 -0
  223. {supython-0.1.9 → supython-0.1.10}/src/supython/realtime/service.py +0 -0
  224. {supython-0.1.9 → supython-0.1.10}/src/supython/realtime/topics.py +0 -0
  225. {supython-0.1.9 → supython-0.1.10}/src/supython/realtime/websocket.py +0 -0
  226. {supython-0.1.9 → supython-0.1.10}/src/supython/scaffold/__init__.py +0 -0
  227. {supython-0.1.9 → supython-0.1.10}/src/supython/scaffold/init_project.py +0 -0
  228. {supython-0.1.9 → supython-0.1.10}/src/supython/scaffold/templates/Caddyfile.tmpl +0 -0
  229. {supython-0.1.9 → supython-0.1.10}/src/supython/scaffold/templates/README.md.tmpl +0 -0
  230. {supython-0.1.9 → supython-0.1.10}/src/supython/scaffold/templates/apps_hooks.py.tmpl +0 -0
  231. {supython-0.1.9 → supython-0.1.10}/src/supython/scaffold/templates/apps_jobs.py.tmpl +0 -0
  232. {supython-0.1.9 → supython-0.1.10}/src/supython/scaffold/templates/asgi.py.tmpl +0 -0
  233. {supython-0.1.9 → supython-0.1.10}/src/supython/scaffold/templates/docker-compose.prod.yml.tmpl +0 -0
  234. {supython-0.1.9 → supython-0.1.10}/src/supython/scaffold/templates/docker-compose.yml.tmpl +0 -0
  235. {supython-0.1.9 → supython-0.1.10}/src/supython/scaffold/templates/docker_postgres_Dockerfile.tmpl +0 -0
  236. {supython-0.1.9 → supython-0.1.10}/src/supython/scaffold/templates/docker_postgres_postgresql.conf.tmpl +0 -0
  237. {supython-0.1.9 → supython-0.1.10}/src/supython/scaffold/templates/env.example.tmpl +0 -0
  238. {supython-0.1.9 → supython-0.1.10}/src/supython/scaffold/templates/functions_README.md.tmpl +0 -0
  239. {supython-0.1.9 → supython-0.1.10}/src/supython/scaffold/templates/gitignore.tmpl +0 -0
  240. {supython-0.1.9 → supython-0.1.10}/src/supython/scaffold/templates/manage.py.tmpl +0 -0
  241. {supython-0.1.9 → supython-0.1.10}/src/supython/scaffold/templates/migrations/.gitkeep +0 -0
  242. {supython-0.1.9 → supython-0.1.10}/src/supython/scaffold/templates/package_init.py.tmpl +0 -0
  243. {supython-0.1.9 → supython-0.1.10}/src/supython/scaffold/templates/settings.py.tmpl +0 -0
  244. {supython-0.1.9 → supython-0.1.10}/src/supython/secretset.py +0 -0
  245. {supython-0.1.9 → supython-0.1.10}/src/supython/security_headers.py +0 -0
  246. {supython-0.1.9 → supython-0.1.10}/src/supython/settings_module.py +0 -0
  247. {supython-0.1.9 → supython-0.1.10}/src/supython/storage/__init__.py +0 -0
  248. {supython-0.1.9 → supython-0.1.10}/src/supython/storage/backends.py +0 -0
  249. {supython-0.1.9 → supython-0.1.10}/src/supython/storage/router.py +0 -0
  250. {supython-0.1.9 → supython-0.1.10}/src/supython/storage/schemas.py +0 -0
  251. {supython-0.1.9 → supython-0.1.10}/src/supython/storage/service.py +0 -0
  252. {supython-0.1.9 → supython-0.1.10}/src/supython/storage/signing.py +0 -0
  253. {supython-0.1.9 → supython-0.1.10}/src/supython/tokens.py +0 -0
@@ -31,6 +31,29 @@ Each entry links the relevant `PROJECT.md` section and decision-log row
31
31
 
32
32
  ---
33
33
 
34
+ ## [0.1.10] — 2026-06-12
35
+
36
+ ### Added
37
+
38
+ - `python-dotenv` is now a direct dependency (previously only transitive via
39
+ `pydantic-settings`), backing the new boot-time `.env` export.
40
+
41
+ ### Fixed
42
+
43
+ - `.env` is now exported into `os.environ` at the start of every boot path
44
+ (`create_app`, `supython worker run`, CLI subcommands) via the shared
45
+ `settings.export_env_file()` helper, **before** extensions load. Previously
46
+ pydantic-settings loaded `.env` into the typed `Settings` model only, so
47
+ dynamically-named secrets read via `os.environ.get(<name>)` (the `secret_ref`
48
+ convention) resolved to `None` under `supython dev` / `worker run` / CLI —
49
+ working in containers only because docker-compose's `env_file:` injected
50
+ `.env` first. The export uses `override=False`, so real environment variables
51
+ set by an orchestrator always win, and the path is sourced from the same
52
+ `SettingsConfigDict.env_file`. Downstream apps can delete their ad-hoc
53
+ `load_dotenv()` boot shims. (#1)
54
+
55
+ ---
56
+
34
57
  ## [0.1.9] — 2026-05-29
35
58
 
36
59
  ### Fixed
@@ -234,5 +257,6 @@ v0.1–v0.7 plus a v1.1.x admin track; see §19 decision log
234
257
  ---
235
258
 
236
259
 
260
+ [0.1.10]: https://github.com/Tkeby/supython/releases/tag/v0.1.10
237
261
  [0.1.9]: https://github.com/Tkeby/supython/releases/tag/v0.1.9
238
262
  [0.1.0]: https://github.com/Tkeby/supython/releases/tag/v0.1.0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: supython
3
- Version: 0.1.9
3
+ Version: 0.1.10
4
4
  Summary: A lightweight Postgres-first BaaS framework for Python
5
5
  Project-URL: Homepage, https://github.com/Tkeby/supython
6
6
  Project-URL: Repository, https://github.com/Tkeby/supython
@@ -35,6 +35,7 @@ Requires-Dist: itsdangerous>=2.2
35
35
  Requires-Dist: pydantic-settings>=2.6
36
36
  Requires-Dist: pydantic>=2.9
37
37
  Requires-Dist: pyjwt[crypto]>=2.10
38
+ Requires-Dist: python-dotenv>=1.0
38
39
  Requires-Dist: python-multipart>=0.0.20
39
40
  Requires-Dist: typer>=0.15
40
41
  Requires-Dist: uvicorn[standard]>=0.32
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "supython"
7
- version = "0.1.9"
7
+ version = "0.1.10"
8
8
  description = "A lightweight Postgres-first BaaS framework for Python"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.11"
@@ -32,6 +32,7 @@ dependencies = [
32
32
  "asyncpg>=0.30",
33
33
  "pydantic>=2.9",
34
34
  "pydantic-settings>=2.6",
35
+ "python-dotenv>=1.0",
35
36
  "email-validator>=2.2",
36
37
  "argon2-cffi>=23.1",
37
38
  "pyjwt[crypto]>=2.10",
@@ -27,7 +27,7 @@ from .body_size import BodySizeLimitMiddleware
27
27
  from .security_headers import SecurityHeadersMiddleware
28
28
  from .realtime import get_broker
29
29
  from .realtime.router import router as realtime_router
30
- from .settings import get_settings
30
+ from .settings import export_env_file, get_settings
31
31
  from .storage.router import router as storage_router
32
32
 
33
33
  logger = logging.getLogger(__name__)
@@ -96,6 +96,7 @@ async def _lifespan(app: FastAPI) -> AsyncIterator[None]:
96
96
 
97
97
 
98
98
  def create_app() -> FastAPI:
99
+ export_env_file()
99
100
  settings = get_settings()
100
101
  configure_logging(settings.log_level, json_format=settings.log_json)
101
102
 
@@ -22,7 +22,7 @@ from .db_admin import rotate_role_password
22
22
  from .gen import render_types_py, render_types_ts
23
23
  from .logging_config import configure_logging
24
24
  from .scaffold import scaffold
25
- from .settings import Settings, get_settings
25
+ from .settings import Settings, export_env_file, get_settings
26
26
 
27
27
  app = typer.Typer(
28
28
  help="supython — lightweight Postgres-first BaaS for Python",
@@ -126,6 +126,7 @@ def _bootstrap_user_modules() -> None:
126
126
  from .extensions import load_extensions
127
127
  from .settings_module import UserSettings, load_user_settings
128
128
 
129
+ export_env_file()
129
130
  s = get_settings()
130
131
  user = load_user_settings(s.settings_module) if s.settings_module else UserSettings()
131
132
  load_extensions([*s.extensions, *user.extensions])
@@ -248,6 +249,7 @@ def worker_run(
248
249
  from .jobs.worker import Worker
249
250
  from .settings_module import UserSettings, load_user_settings
250
251
 
252
+ export_env_file()
251
253
  s = get_settings()
252
254
  configure_logging(s.log_level, json_format=s.log_json)
253
255
  s.jobs_queue_default = queue
@@ -2,6 +2,7 @@ from functools import lru_cache
2
2
  from pathlib import Path
3
3
  from typing import Annotated, Literal
4
4
 
5
+ from dotenv import load_dotenv
5
6
  from pydantic import Field, field_validator
6
7
  from pydantic_settings import BaseSettings, NoDecode, SettingsConfigDict
7
8
 
@@ -242,3 +243,33 @@ class Settings(BaseSettings):
242
243
  @lru_cache
243
244
  def get_settings() -> Settings:
244
245
  return Settings()
246
+
247
+
248
+ def export_env_file() -> None:
249
+ """Export the env file ``Settings`` reads into ``os.environ``.
250
+
251
+ pydantic-settings loads ``env_file`` into the typed ``Settings`` model only;
252
+ it never touches ``os.environ``. Code that resolves a *dynamically-named*
253
+ secret — one whose env var name is not known until runtime (e.g. read from a
254
+ DB column) and so cannot be a typed ``Settings`` field but must be read via
255
+ ``os.environ.get(<name>)`` — therefore sees nothing from ``.env`` when the
256
+ process is launched by supython itself (``supython dev``, ``worker run``, a
257
+ CLI subcommand). In a container it works only by accident: docker-compose's
258
+ ``env_file:`` injects ``.env`` into the real process environment first.
259
+
260
+ Mirror ``uvicorn --env-file``: load the same file with ``override=False`` so
261
+ variables already present in the real environment (set by the orchestrator)
262
+ always win over a checked-in ``.env``. The path is sourced from the same
263
+ ``SettingsConfigDict.env_file`` ``Settings`` uses, never re-hardcoded.
264
+ Idempotent — safe to call from every boot path; a missing file is a no-op.
265
+ """
266
+ env_file = Settings.model_config.get("env_file")
267
+ if not env_file:
268
+ return
269
+ encoding = Settings.model_config.get("env_file_encoding") or "utf-8"
270
+ paths = [env_file] if isinstance(env_file, str | Path) else list(env_file)
271
+ # pydantic gives the *last* listed file precedence; load_dotenv(override=
272
+ # False) gives the *first*-loaded value precedence — so walk in reverse to
273
+ # preserve that ordering while still letting the real environment win.
274
+ for path in reversed(paths):
275
+ load_dotenv(path, override=False, encoding=encoding)
File without changes
File without changes
File without changes
File without changes
File without changes