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.
- {supython-0.1.9 → supython-0.1.10}/CHANGELOG.md +24 -0
- {supython-0.1.9 → supython-0.1.10}/PKG-INFO +2 -1
- {supython-0.1.9 → supython-0.1.10}/pyproject.toml +2 -1
- {supython-0.1.9 → supython-0.1.10}/src/supython/app.py +2 -1
- {supython-0.1.9 → supython-0.1.10}/src/supython/cli.py +3 -1
- {supython-0.1.9 → supython-0.1.10}/src/supython/settings.py +31 -0
- {supython-0.1.9 → supython-0.1.10}/.gitignore +0 -0
- {supython-0.1.9 → supython-0.1.10}/LICENSE +0 -0
- {supython-0.1.9 → supython-0.1.10}/README.md +0 -0
- {supython-0.1.9 → supython-0.1.10}/SECURITY.md +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/__init__.py +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/admin/__init__.py +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/admin/api/__init__.py +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/admin/api/auth.py +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/admin/api/auth_templates.py +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/admin/api/auth_users.py +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/admin/api/db.py +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/admin/api/functions.py +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/admin/api/jobs.py +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/admin/api/ops.py +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/admin/api/realtime.py +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/admin/api/service_auth.py +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/admin/api/service_auth_templates.py +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/admin/api/service_auth_users.py +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/admin/api/service_db.py +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/admin/api/service_functions.py +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/admin/api/service_jobs.py +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/admin/api/service_ops.py +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/admin/api/service_realtime.py +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/admin/api/service_storage.py +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/admin/api/storage.py +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/admin/api/system.py +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/admin/audit.py +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/admin/deps.py +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/admin/errors.py +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/admin/schemas.py +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/admin/session.py +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/admin/spa.py +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/Alert-dluGVkos.js +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/Alert-dluGVkos.js.map +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/Audit-Njung3HI.js +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/Audit-Njung3HI.js.map +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/Backups-DzPlFgrm.js +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/Backups-DzPlFgrm.js.map +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/Buckets-ByacGkU1.js +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/Buckets-ByacGkU1.js.map +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/Channels-BoIuTtam.js +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/Channels-BoIuTtam.js.map +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/ChevronRight-CtQH1EQ1.js +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/ChevronRight-CtQH1EQ1.js.map +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/CodeViewer-Bqy7-wvH.js +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/CodeViewer-Bqy7-wvH.js.map +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/Crons-B67vc39F.js +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/Crons-B67vc39F.js.map +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/DashboardView-CUTFVL6k.js +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/DashboardView-CUTFVL6k.js.map +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/DataTable-COAAWEft.js +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/DataTable-COAAWEft.js.map +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/DescriptionsItem-P8JUDaBs.js +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/DescriptionsItem-P8JUDaBs.js.map +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/DrawerContent-TpYTFgF1.js +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/DrawerContent-TpYTFgF1.js.map +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/Empty-cr2r7e2u.js +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/Empty-cr2r7e2u.js.map +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/EmptyState-DeDck-OL.js +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/EmptyState-DeDck-OL.js.map +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/Grid-hFkp9F4P.js +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/Grid-hFkp9F4P.js.map +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/Input-DppYTq9C.js +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/Input-DppYTq9C.js.map +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/Invoke-DW3Nveeh.js +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/Invoke-DW3Nveeh.js.map +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/JsonField-DibyJgun.js +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/JsonField-DibyJgun.js.map +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/LoginView-BjLyE3Ds.css +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/LoginView-CoOjECT_.js +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/LoginView-CoOjECT_.js.map +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/Logs-D9WYrnIT.js +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/Logs-D9WYrnIT.js.map +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/Logs-DS1XPa0h.css +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/Migrations-DOSC2ddQ.js +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/Migrations-DOSC2ddQ.js.map +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/ObjectBrowser-_5w8vOX8.js +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/ObjectBrowser-_5w8vOX8.js.map +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/Queue-CywZs6vI.js +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/Queue-CywZs6vI.js.map +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/RefreshTokens-Ccjr53jg.js +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/RefreshTokens-Ccjr53jg.js.map +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/RlsEditor-BSlH9vSc.js +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/RlsEditor-BSlH9vSc.js.map +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/Routes-BiLXE49D.js +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/Routes-BiLXE49D.js.map +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/Routes-C-ianIGD.css +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/SchemaBrowser-DKy2_KQi.css +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/SchemaBrowser-XFvFbtDB.js +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/SchemaBrowser-XFvFbtDB.js.map +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/Select-DIzZyRZb.js +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/Select-DIzZyRZb.js.map +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/Space-n5-XcguU.js +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/Space-n5-XcguU.js.map +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/SqlEditor-b8pTsILY.js +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/SqlEditor-b8pTsILY.js.map +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/SqlWorkspace-BUS7IntH.js +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/SqlWorkspace-BUS7IntH.js.map +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/TableData-CQIagLKn.js +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/TableData-CQIagLKn.js.map +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/Tag-D1fOKpTH.js +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/Tag-D1fOKpTH.js.map +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/Templates-BS-ugkdq.js +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/Templates-BS-ugkdq.js.map +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/Thing-CEAniuMg.js +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/Thing-CEAniuMg.js.map +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/Users-wzwajhlh.js +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/Users-wzwajhlh.js.map +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/_plugin-vue_export-helper-DGA9ry_j.js +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/dist-VXIJLCYq.js +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/dist-VXIJLCYq.js.map +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/format-length-CGCY1rMh.js +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/format-length-CGCY1rMh.js.map +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/get-Ca6unauB.js +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/get-Ca6unauB.js.map +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/index-CeE6v959.js +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/index-CeE6v959.js.map +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/pinia-COXwfrOX.js +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/pinia-COXwfrOX.js.map +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/resources-Bt6thQCD.js +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/resources-Bt6thQCD.js.map +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/use-locale-mtgM0a3a.js +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/use-locale-mtgM0a3a.js.map +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/use-merged-state-BvhkaHNX.js +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/use-merged-state-BvhkaHNX.js.map +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/useConfirm-tMjvBFXR.js +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/useConfirm-tMjvBFXR.js.map +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/useResource-C_rJCY8C.js +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/useResource-C_rJCY8C.js.map +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/useTable-CnZc5zhi.js +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/useTable-CnZc5zhi.js.map +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/useTable-Dg0XlRlq.css +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/useToast-DsZKx0IX.js +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/useToast-DsZKx0IX.js.map +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/utils-sbXoq7Ir.js +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/utils-sbXoq7Ir.js.map +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/favicon.svg +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/icons.svg +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/index.html +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/auth/__init__.py +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/auth/_email_job.py +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/auth/claims.py +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/auth/deps.py +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/auth/providers/__init__.py +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/auth/providers/github.py +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/auth/providers/google.py +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/auth/providers/oauth.py +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/auth/providers/registry.py +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/auth/ratelimit.py +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/auth/router.py +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/auth/schemas.py +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/auth/service.py +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/backups/__init__.py +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/backups/_backup_job.py +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/backups/schemas.py +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/backups/service.py +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/body_size.py +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/client/__init__.py +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/client/_auth.py +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/client/_client.py +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/client/_config.py +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/client/_functions.py +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/client/_storage.py +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/client/py.typed +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/db.py +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/db_admin.py +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/extensions.py +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/functions/__init__.py +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/functions/context.py +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/functions/loader.py +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/functions/router.py +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/functions/schemas.py +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/gen/__init__.py +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/gen/_introspect.py +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/gen/types_py.py +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/gen/types_ts.py +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/health.py +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/hooks.py +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/jobs/__init__.py +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/jobs/backends.py +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/jobs/context.py +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/jobs/cron.py +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/jobs/cron_inproc.py +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/jobs/decorators.py +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/jobs/registry.py +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/jobs/router.py +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/jobs/schemas.py +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/jobs/service.py +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/jobs/worker.py +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/jwks.py +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/keyset.py +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/logging_config.py +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/mail.py +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/mailer.py +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/migrate.py +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/migrations/0001_extensions_and_roles.sql +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/migrations/0002_auth_schema.sql +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/migrations/0003_demo_todos.sql +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/migrations/0004_auth_v0_2.sql +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/migrations/0005_storage_schema.sql +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/migrations/0006_realtime_schema.sql +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/migrations/0007_jobs_schema.sql +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/migrations/0008_jobs_last_error.sql +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/migrations/0009_auth_rate_limits.sql +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/migrations/0010_worker_heartbeat.sql +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/migrations/0011_admin_schema.sql +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/migrations/0012_auth_banned_until.sql +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/migrations/0013_email_templates.sql +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/migrations/0014_realtime_payload_warning.sql +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/migrations/0015_backups_schema.sql +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/passwords.py +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/realtime/__init__.py +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/realtime/broker.py +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/realtime/protocol.py +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/realtime/router.py +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/realtime/schemas.py +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/realtime/service.py +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/realtime/topics.py +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/realtime/websocket.py +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/scaffold/__init__.py +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/scaffold/init_project.py +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/scaffold/templates/Caddyfile.tmpl +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/scaffold/templates/README.md.tmpl +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/scaffold/templates/apps_hooks.py.tmpl +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/scaffold/templates/apps_jobs.py.tmpl +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/scaffold/templates/asgi.py.tmpl +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/scaffold/templates/docker-compose.prod.yml.tmpl +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/scaffold/templates/docker-compose.yml.tmpl +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/scaffold/templates/docker_postgres_Dockerfile.tmpl +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/scaffold/templates/docker_postgres_postgresql.conf.tmpl +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/scaffold/templates/env.example.tmpl +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/scaffold/templates/functions_README.md.tmpl +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/scaffold/templates/gitignore.tmpl +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/scaffold/templates/manage.py.tmpl +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/scaffold/templates/migrations/.gitkeep +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/scaffold/templates/package_init.py.tmpl +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/scaffold/templates/settings.py.tmpl +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/secretset.py +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/security_headers.py +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/settings_module.py +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/storage/__init__.py +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/storage/backends.py +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/storage/router.py +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/storage/schemas.py +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/storage/service.py +0 -0
- {supython-0.1.9 → supython-0.1.10}/src/supython/storage/signing.py +0 -0
- {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.
|
|
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.
|
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/Channels-BoIuTtam.js.map
RENAMED
|
File without changes
|
{supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/ChevronRight-CtQH1EQ1.js
RENAMED
|
File without changes
|
{supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/ChevronRight-CtQH1EQ1.js.map
RENAMED
|
File without changes
|
|
File without changes
|
{supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/CodeViewer-Bqy7-wvH.js.map
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/DashboardView-CUTFVL6k.js
RENAMED
|
File without changes
|
{supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/DashboardView-CUTFVL6k.js.map
RENAMED
|
File without changes
|
|
File without changes
|
{supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/DataTable-COAAWEft.js.map
RENAMED
|
File without changes
|
{supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/DescriptionsItem-P8JUDaBs.js
RENAMED
|
File without changes
|
{supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/DescriptionsItem-P8JUDaBs.js.map
RENAMED
|
File without changes
|
{supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/DrawerContent-TpYTFgF1.js
RENAMED
|
File without changes
|
{supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/DrawerContent-TpYTFgF1.js.map
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/EmptyState-DeDck-OL.js.map
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/JsonField-DibyJgun.js.map
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/LoginView-CoOjECT_.js.map
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/Migrations-DOSC2ddQ.js.map
RENAMED
|
File without changes
|
{supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/ObjectBrowser-_5w8vOX8.js
RENAMED
|
File without changes
|
{supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/ObjectBrowser-_5w8vOX8.js.map
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/RefreshTokens-Ccjr53jg.js
RENAMED
|
File without changes
|
{supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/RefreshTokens-Ccjr53jg.js.map
RENAMED
|
File without changes
|
|
File without changes
|
{supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/RlsEditor-BSlH9vSc.js.map
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/SchemaBrowser-DKy2_KQi.css
RENAMED
|
File without changes
|
{supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/SchemaBrowser-XFvFbtDB.js
RENAMED
|
File without changes
|
{supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/SchemaBrowser-XFvFbtDB.js.map
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/SqlEditor-b8pTsILY.js.map
RENAMED
|
File without changes
|
{supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/SqlWorkspace-BUS7IntH.js
RENAMED
|
File without changes
|
{supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/SqlWorkspace-BUS7IntH.js.map
RENAMED
|
File without changes
|
|
File without changes
|
{supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/TableData-CQIagLKn.js.map
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/Templates-BS-ugkdq.js.map
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/format-length-CGCY1rMh.js
RENAMED
|
File without changes
|
{supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/format-length-CGCY1rMh.js.map
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/resources-Bt6thQCD.js.map
RENAMED
|
File without changes
|
|
File without changes
|
{supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/use-locale-mtgM0a3a.js.map
RENAMED
|
File without changes
|
{supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/use-merged-state-BvhkaHNX.js
RENAMED
|
File without changes
|
{supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/use-merged-state-BvhkaHNX.js.map
RENAMED
|
File without changes
|
|
File without changes
|
{supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/useConfirm-tMjvBFXR.js.map
RENAMED
|
File without changes
|
|
File without changes
|
{supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/useResource-C_rJCY8C.js.map
RENAMED
|
File without changes
|
|
File without changes
|
{supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/useTable-CnZc5zhi.js.map
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{supython-0.1.9 → supython-0.1.10}/src/supython/admin/static/assets/useToast-DsZKx0IX.js.map
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|