supython 0.1.6__tar.gz → 0.1.8__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.6 → supython-0.1.8}/PKG-INFO +21 -1
- {supython-0.1.6 → supython-0.1.8}/README.md +20 -0
- {supython-0.1.6 → supython-0.1.8}/pyproject.toml +1 -1
- {supython-0.1.6 → supython-0.1.8}/src/supython/cli.py +22 -2
- {supython-0.1.6 → supython-0.1.8}/src/supython/functions/context.py +28 -6
- {supython-0.1.6 → supython-0.1.8}/.gitignore +0 -0
- {supython-0.1.6 → supython-0.1.8}/CHANGELOG.md +0 -0
- {supython-0.1.6 → supython-0.1.8}/LICENSE +0 -0
- {supython-0.1.6 → supython-0.1.8}/SECURITY.md +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/__init__.py +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/admin/__init__.py +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/admin/api/__init__.py +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/admin/api/auth.py +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/admin/api/auth_templates.py +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/admin/api/auth_users.py +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/admin/api/db.py +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/admin/api/functions.py +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/admin/api/jobs.py +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/admin/api/ops.py +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/admin/api/realtime.py +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/admin/api/service_auth.py +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/admin/api/service_auth_templates.py +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/admin/api/service_auth_users.py +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/admin/api/service_db.py +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/admin/api/service_functions.py +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/admin/api/service_jobs.py +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/admin/api/service_ops.py +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/admin/api/service_realtime.py +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/admin/api/service_storage.py +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/admin/api/storage.py +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/admin/api/system.py +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/admin/audit.py +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/admin/deps.py +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/admin/errors.py +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/admin/schemas.py +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/admin/session.py +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/admin/spa.py +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/admin/static/assets/Alert-dluGVkos.js +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/admin/static/assets/Alert-dluGVkos.js.map +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/admin/static/assets/Audit-Njung3HI.js +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/admin/static/assets/Audit-Njung3HI.js.map +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/admin/static/assets/Backups-DzPlFgrm.js +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/admin/static/assets/Backups-DzPlFgrm.js.map +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/admin/static/assets/Buckets-ByacGkU1.js +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/admin/static/assets/Buckets-ByacGkU1.js.map +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/admin/static/assets/Channels-BoIuTtam.js +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/admin/static/assets/Channels-BoIuTtam.js.map +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/admin/static/assets/ChevronRight-CtQH1EQ1.js +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/admin/static/assets/ChevronRight-CtQH1EQ1.js.map +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/admin/static/assets/CodeViewer-Bqy7-wvH.js +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/admin/static/assets/CodeViewer-Bqy7-wvH.js.map +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/admin/static/assets/Crons-B67vc39F.js +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/admin/static/assets/Crons-B67vc39F.js.map +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/admin/static/assets/DashboardView-CUTFVL6k.js +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/admin/static/assets/DashboardView-CUTFVL6k.js.map +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/admin/static/assets/DataTable-COAAWEft.js +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/admin/static/assets/DataTable-COAAWEft.js.map +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/admin/static/assets/DescriptionsItem-P8JUDaBs.js +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/admin/static/assets/DescriptionsItem-P8JUDaBs.js.map +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/admin/static/assets/DrawerContent-TpYTFgF1.js +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/admin/static/assets/DrawerContent-TpYTFgF1.js.map +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/admin/static/assets/Empty-cr2r7e2u.js +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/admin/static/assets/Empty-cr2r7e2u.js.map +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/admin/static/assets/EmptyState-DeDck-OL.js +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/admin/static/assets/EmptyState-DeDck-OL.js.map +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/admin/static/assets/Grid-hFkp9F4P.js +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/admin/static/assets/Grid-hFkp9F4P.js.map +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/admin/static/assets/Input-DppYTq9C.js +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/admin/static/assets/Input-DppYTq9C.js.map +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/admin/static/assets/Invoke-DW3Nveeh.js +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/admin/static/assets/Invoke-DW3Nveeh.js.map +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/admin/static/assets/JsonField-DibyJgun.js +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/admin/static/assets/JsonField-DibyJgun.js.map +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/admin/static/assets/LoginView-BjLyE3Ds.css +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/admin/static/assets/LoginView-CoOjECT_.js +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/admin/static/assets/LoginView-CoOjECT_.js.map +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/admin/static/assets/Logs-D9WYrnIT.js +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/admin/static/assets/Logs-D9WYrnIT.js.map +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/admin/static/assets/Logs-DS1XPa0h.css +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/admin/static/assets/Migrations-DOSC2ddQ.js +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/admin/static/assets/Migrations-DOSC2ddQ.js.map +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/admin/static/assets/ObjectBrowser-_5w8vOX8.js +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/admin/static/assets/ObjectBrowser-_5w8vOX8.js.map +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/admin/static/assets/Queue-CywZs6vI.js +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/admin/static/assets/Queue-CywZs6vI.js.map +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/admin/static/assets/RefreshTokens-Ccjr53jg.js +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/admin/static/assets/RefreshTokens-Ccjr53jg.js.map +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/admin/static/assets/RlsEditor-BSlH9vSc.js +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/admin/static/assets/RlsEditor-BSlH9vSc.js.map +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/admin/static/assets/Routes-BiLXE49D.js +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/admin/static/assets/Routes-BiLXE49D.js.map +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/admin/static/assets/Routes-C-ianIGD.css +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/admin/static/assets/SchemaBrowser-DKy2_KQi.css +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/admin/static/assets/SchemaBrowser-XFvFbtDB.js +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/admin/static/assets/SchemaBrowser-XFvFbtDB.js.map +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/admin/static/assets/Select-DIzZyRZb.js +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/admin/static/assets/Select-DIzZyRZb.js.map +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/admin/static/assets/Space-n5-XcguU.js +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/admin/static/assets/Space-n5-XcguU.js.map +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/admin/static/assets/SqlEditor-b8pTsILY.js +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/admin/static/assets/SqlEditor-b8pTsILY.js.map +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/admin/static/assets/SqlWorkspace-BUS7IntH.js +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/admin/static/assets/SqlWorkspace-BUS7IntH.js.map +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/admin/static/assets/TableData-CQIagLKn.js +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/admin/static/assets/TableData-CQIagLKn.js.map +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/admin/static/assets/Tag-D1fOKpTH.js +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/admin/static/assets/Tag-D1fOKpTH.js.map +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/admin/static/assets/Templates-BS-ugkdq.js +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/admin/static/assets/Templates-BS-ugkdq.js.map +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/admin/static/assets/Thing-CEAniuMg.js +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/admin/static/assets/Thing-CEAniuMg.js.map +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/admin/static/assets/Users-wzwajhlh.js +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/admin/static/assets/Users-wzwajhlh.js.map +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/admin/static/assets/_plugin-vue_export-helper-DGA9ry_j.js +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/admin/static/assets/dist-VXIJLCYq.js +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/admin/static/assets/dist-VXIJLCYq.js.map +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/admin/static/assets/format-length-CGCY1rMh.js +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/admin/static/assets/format-length-CGCY1rMh.js.map +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/admin/static/assets/get-Ca6unauB.js +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/admin/static/assets/get-Ca6unauB.js.map +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/admin/static/assets/index-CeE6v959.js +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/admin/static/assets/index-CeE6v959.js.map +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/admin/static/assets/pinia-COXwfrOX.js +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/admin/static/assets/pinia-COXwfrOX.js.map +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/admin/static/assets/resources-Bt6thQCD.js +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/admin/static/assets/resources-Bt6thQCD.js.map +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/admin/static/assets/use-locale-mtgM0a3a.js +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/admin/static/assets/use-locale-mtgM0a3a.js.map +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/admin/static/assets/use-merged-state-BvhkaHNX.js +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/admin/static/assets/use-merged-state-BvhkaHNX.js.map +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/admin/static/assets/useConfirm-tMjvBFXR.js +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/admin/static/assets/useConfirm-tMjvBFXR.js.map +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/admin/static/assets/useResource-C_rJCY8C.js +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/admin/static/assets/useResource-C_rJCY8C.js.map +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/admin/static/assets/useTable-CnZc5zhi.js +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/admin/static/assets/useTable-CnZc5zhi.js.map +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/admin/static/assets/useTable-Dg0XlRlq.css +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/admin/static/assets/useToast-DsZKx0IX.js +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/admin/static/assets/useToast-DsZKx0IX.js.map +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/admin/static/assets/utils-sbXoq7Ir.js +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/admin/static/assets/utils-sbXoq7Ir.js.map +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/admin/static/favicon.svg +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/admin/static/icons.svg +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/admin/static/index.html +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/app.py +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/auth/__init__.py +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/auth/_email_job.py +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/auth/claims.py +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/auth/deps.py +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/auth/providers/__init__.py +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/auth/providers/github.py +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/auth/providers/google.py +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/auth/providers/oauth.py +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/auth/providers/registry.py +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/auth/ratelimit.py +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/auth/router.py +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/auth/schemas.py +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/auth/service.py +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/backups/__init__.py +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/backups/_backup_job.py +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/backups/schemas.py +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/backups/service.py +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/body_size.py +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/client/__init__.py +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/client/_auth.py +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/client/_client.py +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/client/_config.py +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/client/_functions.py +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/client/_storage.py +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/client/py.typed +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/db.py +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/db_admin.py +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/extensions.py +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/functions/__init__.py +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/functions/loader.py +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/functions/router.py +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/functions/schemas.py +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/gen/__init__.py +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/gen/_introspect.py +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/gen/types_py.py +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/gen/types_ts.py +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/health.py +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/hooks.py +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/jobs/__init__.py +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/jobs/backends.py +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/jobs/context.py +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/jobs/cron.py +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/jobs/cron_inproc.py +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/jobs/decorators.py +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/jobs/registry.py +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/jobs/router.py +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/jobs/schemas.py +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/jobs/service.py +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/jobs/worker.py +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/jwks.py +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/keyset.py +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/logging_config.py +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/mail.py +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/mailer.py +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/migrate.py +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/migrations/0001_extensions_and_roles.sql +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/migrations/0002_auth_schema.sql +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/migrations/0003_demo_todos.sql +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/migrations/0004_auth_v0_2.sql +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/migrations/0005_storage_schema.sql +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/migrations/0006_realtime_schema.sql +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/migrations/0007_jobs_schema.sql +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/migrations/0008_jobs_last_error.sql +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/migrations/0009_auth_rate_limits.sql +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/migrations/0010_worker_heartbeat.sql +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/migrations/0011_admin_schema.sql +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/migrations/0012_auth_banned_until.sql +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/migrations/0013_email_templates.sql +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/migrations/0014_realtime_payload_warning.sql +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/migrations/0015_backups_schema.sql +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/passwords.py +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/realtime/__init__.py +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/realtime/broker.py +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/realtime/protocol.py +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/realtime/router.py +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/realtime/schemas.py +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/realtime/service.py +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/realtime/topics.py +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/realtime/websocket.py +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/scaffold/__init__.py +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/scaffold/init_project.py +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/scaffold/templates/Caddyfile.tmpl +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/scaffold/templates/README.md.tmpl +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/scaffold/templates/apps_hooks.py.tmpl +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/scaffold/templates/apps_jobs.py.tmpl +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/scaffold/templates/asgi.py.tmpl +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/scaffold/templates/docker-compose.prod.yml.tmpl +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/scaffold/templates/docker-compose.yml.tmpl +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/scaffold/templates/docker_postgres_Dockerfile.tmpl +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/scaffold/templates/docker_postgres_postgresql.conf.tmpl +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/scaffold/templates/env.example.tmpl +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/scaffold/templates/functions_README.md.tmpl +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/scaffold/templates/gitignore.tmpl +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/scaffold/templates/manage.py.tmpl +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/scaffold/templates/migrations/.gitkeep +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/scaffold/templates/package_init.py.tmpl +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/scaffold/templates/settings.py.tmpl +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/secretset.py +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/security_headers.py +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/settings.py +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/settings_module.py +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/storage/__init__.py +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/storage/backends.py +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/storage/router.py +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/storage/schemas.py +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/storage/service.py +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/storage/signing.py +0 -0
- {supython-0.1.6 → supython-0.1.8}/src/supython/tokens.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: supython
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.8
|
|
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
|
|
@@ -418,6 +418,24 @@ SMTP_PASSWORD`.
|
|
|
418
418
|
**OAuth** — add `GOOGLE_CLIENT_ID`, `GOOGLE_CLIENT_SECRET` (and/or GitHub
|
|
419
419
|
equivalents) to `.env`. Providers without credentials are silently disabled.
|
|
420
420
|
|
|
421
|
+
**Logout semantics (stateless JWT)** — `/auth/v1/logout` revokes the
|
|
422
|
+
**refresh** token; the access token remains valid until its `exp` claim. This
|
|
423
|
+
is the standard stateless-JWT posture (same as Supabase Auth, Auth0, Cognito):
|
|
424
|
+
both supython and PostgREST verify access tokens from the JWKS with **no
|
|
425
|
+
per-request DB lookup**, so there is no place to consult a server-side
|
|
426
|
+
denylist without breaking that contract. The mitigation is a **short
|
|
427
|
+
`ACCESS_TOKEN_TTL`** plus refresh-token revocation:
|
|
428
|
+
|
|
429
|
+
- Clients must drop *both* tokens locally on logout — the access token must
|
|
430
|
+
not be reused after the user signs out.
|
|
431
|
+
- A stolen access token cannot be invalidated server-side mid-flight; it
|
|
432
|
+
stops being useful at `exp`. Pick a TTL that bounds your exposure.
|
|
433
|
+
- Default `ACCESS_TOKEN_TTL=3600` (1 hour) is fine for development. For
|
|
434
|
+
production, set it to **300–900 seconds** so logout / role changes
|
|
435
|
+
propagate in minutes rather than an hour. Refresh tokens are still
|
|
436
|
+
long-lived (`REFRESH_TOKEN_TTL=30d`) so users don't get prompted to log
|
|
437
|
+
in every few minutes — clients refresh transparently.
|
|
438
|
+
|
|
421
439
|
### Custom JWT claims [shipped v0.1.3]
|
|
422
440
|
|
|
423
441
|
Register a claims provider to inject application-specific claims into every
|
|
@@ -490,6 +508,8 @@ need any claim beyond the user UUID.
|
|
|
490
508
|
|
|
491
509
|
| Variable | Default | Purpose |
|
|
492
510
|
|---|---|---|
|
|
511
|
+
| `ACCESS_TOKEN_TTL` | `3600` | Access-token lifetime in seconds. Lower this (300–900) in production so logout / role changes propagate quickly — the access token is stateless and only stops working at `exp` |
|
|
512
|
+
| `REFRESH_TOKEN_TTL` | `2592000` | Refresh-token lifetime in seconds (30 d). Refresh tokens *are* revocable via `/auth/v1/logout` |
|
|
493
513
|
| `DB_STATEMENT_TIMEOUT_MS` | `30000` | Per-connection query timeout for the asyncpg pool (`0` disables) |
|
|
494
514
|
| `DB_POOL_MIN_SIZE` | `1` | Minimum asyncpg pool size |
|
|
495
515
|
| `DB_POOL_MAX_SIZE` | `10` | Maximum asyncpg pool size |
|
|
@@ -360,6 +360,24 @@ SMTP_PASSWORD`.
|
|
|
360
360
|
**OAuth** — add `GOOGLE_CLIENT_ID`, `GOOGLE_CLIENT_SECRET` (and/or GitHub
|
|
361
361
|
equivalents) to `.env`. Providers without credentials are silently disabled.
|
|
362
362
|
|
|
363
|
+
**Logout semantics (stateless JWT)** — `/auth/v1/logout` revokes the
|
|
364
|
+
**refresh** token; the access token remains valid until its `exp` claim. This
|
|
365
|
+
is the standard stateless-JWT posture (same as Supabase Auth, Auth0, Cognito):
|
|
366
|
+
both supython and PostgREST verify access tokens from the JWKS with **no
|
|
367
|
+
per-request DB lookup**, so there is no place to consult a server-side
|
|
368
|
+
denylist without breaking that contract. The mitigation is a **short
|
|
369
|
+
`ACCESS_TOKEN_TTL`** plus refresh-token revocation:
|
|
370
|
+
|
|
371
|
+
- Clients must drop *both* tokens locally on logout — the access token must
|
|
372
|
+
not be reused after the user signs out.
|
|
373
|
+
- A stolen access token cannot be invalidated server-side mid-flight; it
|
|
374
|
+
stops being useful at `exp`. Pick a TTL that bounds your exposure.
|
|
375
|
+
- Default `ACCESS_TOKEN_TTL=3600` (1 hour) is fine for development. For
|
|
376
|
+
production, set it to **300–900 seconds** so logout / role changes
|
|
377
|
+
propagate in minutes rather than an hour. Refresh tokens are still
|
|
378
|
+
long-lived (`REFRESH_TOKEN_TTL=30d`) so users don't get prompted to log
|
|
379
|
+
in every few minutes — clients refresh transparently.
|
|
380
|
+
|
|
363
381
|
### Custom JWT claims [shipped v0.1.3]
|
|
364
382
|
|
|
365
383
|
Register a claims provider to inject application-specific claims into every
|
|
@@ -432,6 +450,8 @@ need any claim beyond the user UUID.
|
|
|
432
450
|
|
|
433
451
|
| Variable | Default | Purpose |
|
|
434
452
|
|---|---|---|
|
|
453
|
+
| `ACCESS_TOKEN_TTL` | `3600` | Access-token lifetime in seconds. Lower this (300–900) in production so logout / role changes propagate quickly — the access token is stateless and only stops working at `exp` |
|
|
454
|
+
| `REFRESH_TOKEN_TTL` | `2592000` | Refresh-token lifetime in seconds (30 d). Refresh tokens *are* revocable via `/auth/v1/logout` |
|
|
435
455
|
| `DB_STATEMENT_TIMEOUT_MS` | `30000` | Per-connection query timeout for the asyncpg pool (`0` disables) |
|
|
436
456
|
| `DB_POOL_MIN_SIZE` | `1` | Minimum asyncpg pool size |
|
|
437
457
|
| `DB_POOL_MAX_SIZE` | `10` | Maximum asyncpg pool size |
|
|
@@ -1355,14 +1355,22 @@ def up(
|
|
|
1355
1355
|
timeout: int = typer.Option(30, help="Seconds to wait for Postgres."),
|
|
1356
1356
|
prod: bool = typer.Option(False, "--prod", help="Use docker-compose.prod.yml."),
|
|
1357
1357
|
worker: bool = typer.Option(False, "--worker", help="Also start the worker (prod only)."),
|
|
1358
|
+
profile: list[str] = typer.Option(
|
|
1359
|
+
[],
|
|
1360
|
+
"--profile",
|
|
1361
|
+
help="Compose profile(s) to enable. Repeatable; user-defined extension services gated by a profile come up via a final sweep.",
|
|
1362
|
+
),
|
|
1358
1363
|
) -> None:
|
|
1359
1364
|
"""Start Postgres + PostgREST and apply migrations.
|
|
1360
1365
|
|
|
1361
1366
|
Brings the DB up first, runs migrations (which create the roles
|
|
1362
1367
|
PostgREST needs), rotates the authenticator password, then starts PostgREST.
|
|
1368
|
+
Any user-added services gated behind a compose profile come up after the
|
|
1369
|
+
core services when `--profile <name>` is passed.
|
|
1363
1370
|
"""
|
|
1364
1371
|
compose_file = _resolve_compose_file(prod)
|
|
1365
1372
|
is_prod = compose_file == "docker-compose.prod.yml"
|
|
1373
|
+
user_profiles = tuple(profile)
|
|
1366
1374
|
configure_logging("INFO", json_format=False)
|
|
1367
1375
|
_compose_with(compose_file, "up", "-d", "db")
|
|
1368
1376
|
typer.echo("waiting for Postgres ...")
|
|
@@ -1379,6 +1387,8 @@ def up(
|
|
|
1379
1387
|
_compose_with(compose_file, "up", "-d", "postgrest", "supython")
|
|
1380
1388
|
if worker:
|
|
1381
1389
|
_compose_with(compose_file, "--profile", "worker", "up", "-d", "worker")
|
|
1390
|
+
if user_profiles:
|
|
1391
|
+
_compose_with(compose_file, "up", "-d", profiles=user_profiles)
|
|
1382
1392
|
typer.echo("")
|
|
1383
1393
|
typer.echo("ready.")
|
|
1384
1394
|
typer.echo(" postgres localhost:54322 (bind 127.0.0.1 only)")
|
|
@@ -1386,12 +1396,18 @@ def up(
|
|
|
1386
1396
|
typer.echo(" supython http://localhost:8000")
|
|
1387
1397
|
if worker:
|
|
1388
1398
|
typer.echo(" worker running (profile=worker)")
|
|
1399
|
+
for p in user_profiles:
|
|
1400
|
+
typer.echo(f" profile {p} # user-defined services")
|
|
1389
1401
|
else:
|
|
1390
1402
|
_compose_with(compose_file, "up", "-d", "postgrest")
|
|
1403
|
+
if user_profiles:
|
|
1404
|
+
_compose_with(compose_file, "up", "-d", profiles=user_profiles)
|
|
1391
1405
|
typer.echo("")
|
|
1392
1406
|
typer.echo("ready.")
|
|
1393
1407
|
typer.echo(" postgres localhost:54322 (user/db: supython)")
|
|
1394
1408
|
typer.echo(f" postgrest {s.postgrest_url}")
|
|
1409
|
+
for p in user_profiles:
|
|
1410
|
+
typer.echo(f" profile {p} # user-defined services")
|
|
1395
1411
|
typer.echo(" next supython dev # start the auth/API service")
|
|
1396
1412
|
|
|
1397
1413
|
|
|
@@ -1610,11 +1626,15 @@ def _compose(*args: str) -> None:
|
|
|
1610
1626
|
_compose_with(None, *args)
|
|
1611
1627
|
|
|
1612
1628
|
|
|
1613
|
-
def _compose_with(
|
|
1614
|
-
|
|
1629
|
+
def _compose_with(
|
|
1630
|
+
file: str | None, *args: str, profiles: tuple[str, ...] = ()
|
|
1631
|
+
) -> None:
|
|
1632
|
+
"""Run `docker compose [-f <file>] [--profile <p>]... <args...>`, surfacing common errors."""
|
|
1615
1633
|
cmd = ["docker", "compose"]
|
|
1616
1634
|
if file:
|
|
1617
1635
|
cmd += ["-f", file]
|
|
1636
|
+
for p in profiles:
|
|
1637
|
+
cmd += ["--profile", p]
|
|
1618
1638
|
cmd += list(args)
|
|
1619
1639
|
try:
|
|
1620
1640
|
subprocess.run(cmd, check=True)
|
|
@@ -11,6 +11,7 @@ rule that applies elsewhere.
|
|
|
11
11
|
from __future__ import annotations
|
|
12
12
|
|
|
13
13
|
from collections.abc import AsyncIterator, Awaitable, Callable
|
|
14
|
+
from contextlib import AbstractAsyncContextManager
|
|
14
15
|
from dataclasses import dataclass, field
|
|
15
16
|
from typing import TYPE_CHECKING, Any
|
|
16
17
|
from uuid import UUID
|
|
@@ -18,6 +19,7 @@ from uuid import UUID
|
|
|
18
19
|
import asyncpg
|
|
19
20
|
import httpx
|
|
20
21
|
|
|
22
|
+
from .. import db as _db
|
|
21
23
|
from ..mailer import EmailBackend, EmailMessage, get_mailer
|
|
22
24
|
from ..settings import Settings, get_settings
|
|
23
25
|
from ..storage import service as storage_service
|
|
@@ -73,9 +75,7 @@ class StorageClient:
|
|
|
73
75
|
``backend`` by hand.
|
|
74
76
|
"""
|
|
75
77
|
|
|
76
|
-
def __init__(
|
|
77
|
-
self, conn: asyncpg.Connection, backend: StorageBackend
|
|
78
|
-
) -> None:
|
|
78
|
+
def __init__(self, conn: asyncpg.Connection, backend: StorageBackend) -> None:
|
|
79
79
|
self._conn = conn
|
|
80
80
|
self._backend = backend
|
|
81
81
|
|
|
@@ -120,9 +120,7 @@ class StorageClient:
|
|
|
120
120
|
)
|
|
121
121
|
|
|
122
122
|
async def get_metadata(self, *, bucket: str, path: str) -> ObjectResponse:
|
|
123
|
-
return await storage_service.get_object_metadata(
|
|
124
|
-
self._conn, bucket, path
|
|
125
|
-
)
|
|
123
|
+
return await storage_service.get_object_metadata(self._conn, bucket, path)
|
|
126
124
|
|
|
127
125
|
async def sign(
|
|
128
126
|
self, *, bucket: str, path: str, expires_in: int | None = None
|
|
@@ -234,6 +232,30 @@ class Ctx:
|
|
|
234
232
|
request: Request
|
|
235
233
|
settings: Settings
|
|
236
234
|
|
|
235
|
+
def service_db(
|
|
236
|
+
self,
|
|
237
|
+
*,
|
|
238
|
+
with_user_claims: bool = True,
|
|
239
|
+
) -> AbstractAsyncContextManager[asyncpg.Connection]:
|
|
240
|
+
"""Yield a ``service_role`` connection for housekeeping inside a handler.
|
|
241
|
+
|
|
242
|
+
Convenience wrapper around :func:`supython.db.as_service_role` so user
|
|
243
|
+
code can write::
|
|
244
|
+
|
|
245
|
+
async with ctx.service_db() as conn:
|
|
246
|
+
await conn.execute("insert into audit.events ...")
|
|
247
|
+
|
|
248
|
+
instead of importing ``supython.db``. ``service_role`` bypasses RLS;
|
|
249
|
+
when the caller is authenticated the user's JWT claims are forwarded
|
|
250
|
+
to the session so helpers like ``auth.uid()`` still return the
|
|
251
|
+
caller's id inside the block. Pass ``with_user_claims=False`` to
|
|
252
|
+
suppress that and run truly impersonal admin work.
|
|
253
|
+
"""
|
|
254
|
+
claims = (
|
|
255
|
+
self.user.claims if (with_user_claims and self.user is not None) else None
|
|
256
|
+
)
|
|
257
|
+
return _db.as_service_role(claims=claims)
|
|
258
|
+
|
|
237
259
|
|
|
238
260
|
def build_ctx(
|
|
239
261
|
*,
|
|
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
|
|
File without changes
|
|
File without changes
|
{supython-0.1.6 → supython-0.1.8}/src/supython/admin/static/assets/ChevronRight-CtQH1EQ1.js.map
RENAMED
|
File without changes
|
|
File without changes
|
{supython-0.1.6 → supython-0.1.8}/src/supython/admin/static/assets/CodeViewer-Bqy7-wvH.js.map
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{supython-0.1.6 → supython-0.1.8}/src/supython/admin/static/assets/DashboardView-CUTFVL6k.js
RENAMED
|
File without changes
|
{supython-0.1.6 → supython-0.1.8}/src/supython/admin/static/assets/DashboardView-CUTFVL6k.js.map
RENAMED
|
File without changes
|
|
File without changes
|
{supython-0.1.6 → supython-0.1.8}/src/supython/admin/static/assets/DataTable-COAAWEft.js.map
RENAMED
|
File without changes
|
{supython-0.1.6 → supython-0.1.8}/src/supython/admin/static/assets/DescriptionsItem-P8JUDaBs.js
RENAMED
|
File without changes
|
{supython-0.1.6 → supython-0.1.8}/src/supython/admin/static/assets/DescriptionsItem-P8JUDaBs.js.map
RENAMED
|
File without changes
|
{supython-0.1.6 → supython-0.1.8}/src/supython/admin/static/assets/DrawerContent-TpYTFgF1.js
RENAMED
|
File without changes
|
{supython-0.1.6 → supython-0.1.8}/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.6 → supython-0.1.8}/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.6 → supython-0.1.8}/src/supython/admin/static/assets/JsonField-DibyJgun.js.map
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{supython-0.1.6 → supython-0.1.8}/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.6 → supython-0.1.8}/src/supython/admin/static/assets/Migrations-DOSC2ddQ.js.map
RENAMED
|
File without changes
|
{supython-0.1.6 → supython-0.1.8}/src/supython/admin/static/assets/ObjectBrowser-_5w8vOX8.js
RENAMED
|
File without changes
|
{supython-0.1.6 → supython-0.1.8}/src/supython/admin/static/assets/ObjectBrowser-_5w8vOX8.js.map
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{supython-0.1.6 → supython-0.1.8}/src/supython/admin/static/assets/RefreshTokens-Ccjr53jg.js
RENAMED
|
File without changes
|
{supython-0.1.6 → supython-0.1.8}/src/supython/admin/static/assets/RefreshTokens-Ccjr53jg.js.map
RENAMED
|
File without changes
|
|
File without changes
|
{supython-0.1.6 → supython-0.1.8}/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.6 → supython-0.1.8}/src/supython/admin/static/assets/SchemaBrowser-DKy2_KQi.css
RENAMED
|
File without changes
|
{supython-0.1.6 → supython-0.1.8}/src/supython/admin/static/assets/SchemaBrowser-XFvFbtDB.js
RENAMED
|
File without changes
|
{supython-0.1.6 → supython-0.1.8}/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.6 → supython-0.1.8}/src/supython/admin/static/assets/SqlEditor-b8pTsILY.js.map
RENAMED
|
File without changes
|
|
File without changes
|
{supython-0.1.6 → supython-0.1.8}/src/supython/admin/static/assets/SqlWorkspace-BUS7IntH.js.map
RENAMED
|
File without changes
|
|
File without changes
|
{supython-0.1.6 → supython-0.1.8}/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.6 → supython-0.1.8}/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.6 → supython-0.1.8}/src/supython/admin/static/assets/format-length-CGCY1rMh.js
RENAMED
|
File without changes
|
{supython-0.1.6 → supython-0.1.8}/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.6 → supython-0.1.8}/src/supython/admin/static/assets/resources-Bt6thQCD.js.map
RENAMED
|
File without changes
|
|
File without changes
|
{supython-0.1.6 → supython-0.1.8}/src/supython/admin/static/assets/use-locale-mtgM0a3a.js.map
RENAMED
|
File without changes
|
{supython-0.1.6 → supython-0.1.8}/src/supython/admin/static/assets/use-merged-state-BvhkaHNX.js
RENAMED
|
File without changes
|
{supython-0.1.6 → supython-0.1.8}/src/supython/admin/static/assets/use-merged-state-BvhkaHNX.js.map
RENAMED
|
File without changes
|
|
File without changes
|
{supython-0.1.6 → supython-0.1.8}/src/supython/admin/static/assets/useConfirm-tMjvBFXR.js.map
RENAMED
|
File without changes
|
|
File without changes
|
{supython-0.1.6 → supython-0.1.8}/src/supython/admin/static/assets/useResource-C_rJCY8C.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
|