setta 0.0.16.dev1__tar.gz → 0.0.18__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.
- {setta-0.0.16.dev1/backend/setta.egg-info → setta-0.0.18}/PKG-INFO +20 -8
- {setta-0.0.16.dev1 → setta-0.0.18}/README.md +19 -7
- setta-0.0.18/backend/setta/__init__.py +1 -0
- setta-0.0.18/backend/setta/database/db/notifications/delete.py +21 -0
- setta-0.0.18/backend/setta/database/db/notifications/load.py +108 -0
- setta-0.0.18/backend/setta/database/db/notifications/save.py +49 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/routers/interactive.py +40 -3
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/routers/projects.py +42 -3
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/routers/settings.py +11 -1
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/constants/Settings.json +1 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/constants/constants.json +8 -1
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/constants/db_init.sql +15 -0
- setta-0.0.18/backend/setta/static/frontend/assets/index-D-mLvWDA.css +32 -0
- setta-0.0.16.dev1/backend/setta/static/frontend/assets/index-DWKVZt-S.js → setta-0.0.18/backend/setta/static/frontend/assets/index-D3_nMLig.js +186 -186
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/index.html +2 -2
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/tasks/tasks.py +3 -0
- setta-0.0.18/backend/setta/utils/__init__.py +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18/backend/setta.egg-info}/PKG-INFO +20 -8
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta.egg-info/SOURCES.txt +6 -2
- setta-0.0.16.dev1/backend/setta/__init__.py +0 -1
- setta-0.0.16.dev1/backend/setta/static/frontend/assets/index-VC4wWLEk.css +0 -32
- {setta-0.0.16.dev1 → setta-0.0.18}/LICENSE +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/MANIFEST.in +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/cli/__init__.py +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/cli/connect.py +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/cli/logger.py +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/code_gen/__init__.py +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/code_gen/create_runnable_scripts.py +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/code_gen/export_selected.py +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/code_gen/find_placeholders.py +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/code_gen/python/__init__.py +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/code_gen/python/ast_utils.py +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/code_gen/python/check_scope.py +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/code_gen/python/generate_code.py +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/code_gen/python/make_parseable.py +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/code_gen/python/position_line_col.py +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/code_gen/python/validate_imports.py +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/code_gen/utils.py +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/code_gen/yaml/__init__.py +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/code_gen/yaml/generate_yaml.py +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/code_gen/yaml/section_dict.py +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/database/__init__.py +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/database/backup.py +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/database/db/__init__.py +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/database/db/artifacts/__init__.py +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/database/db/artifacts/load.py +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/database/db/artifacts/save.py +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/database/db/artifacts/save_or_create.py +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/database/db/artifacts/utils.py +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/database/db/codeInfo/__init__.py +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/database/db/codeInfo/copy.py +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/database/db/codeInfo/load.py +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/database/db/codeInfo/save.py +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/database/db/codeInfo/utils.py +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/database/db/evRefs/__init__.py +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/database/db/evRefs/load.py +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/database/db/evRefs/save.py +0 -0
- {setta-0.0.16.dev1/backend/setta/database/db/projects → setta-0.0.18/backend/setta/database/db/notifications}/__init__.py +0 -0
- {setta-0.0.16.dev1/backend/setta/database/db/sectionVariants → setta-0.0.18/backend/setta/database/db/projects}/__init__.py +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/database/db/projects/copy.py +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/database/db/projects/delete.py +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/database/db/projects/load.py +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/database/db/projects/save.py +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/database/db/projects/saveAs.py +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/database/db/projects/utils.py +0 -0
- {setta-0.0.16.dev1/backend/setta/database/db/sections → setta-0.0.18/backend/setta/database/db/sectionVariants}/__init__.py +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/database/db/sectionVariants/copy.py +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/database/db/sectionVariants/load.py +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/database/db/sectionVariants/save.py +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/database/db/sectionVariants/utils.py +0 -0
- {setta-0.0.16.dev1/backend/setta/database/db/uiTypes → setta-0.0.18/backend/setta/database/db/sections}/__init__.py +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/database/db/sections/copy.py +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/database/db/sections/jsonSource.py +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/database/db/sections/load.py +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/database/db/sections/save.py +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/database/db/sections/utils.py +0 -0
- {setta-0.0.16.dev1/backend/setta/database/export_db → setta-0.0.18/backend/setta/database/db/uiTypes}/__init__.py +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/database/db/uiTypes/copy.py +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/database/db/uiTypes/load.py +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/database/db/uiTypes/save.py +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/database/db/uiTypes/utils.py +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/database/db_init.py +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/database/db_objs.py +0 -0
- {setta-0.0.16.dev1/backend/setta/lsp → setta-0.0.18/backend/setta/database/export_db}/__init__.py +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/database/export_db/export_db.py +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/database/export_db/export_raw.py +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/database/export_db/export_readable.py +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/database/export_db/utils.py +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/database/import_db.py +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/database/seed.py +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/database/settings_file.py +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/database/utils.py +0 -0
- {setta-0.0.16.dev1/backend/setta/lsp/reader_fns → setta-0.0.18/backend/setta/lsp}/__init__.py +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/lsp/file_watcher.py +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/lsp/reader.py +0 -0
- {setta-0.0.16.dev1/backend/setta/tasks → setta-0.0.18/backend/setta/lsp/reader_fns}/__init__.py +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/lsp/reader_fns/completion.py +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/lsp/reader_fns/definition.py +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/lsp/reader_fns/diagnostics.py +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/lsp/reader_fns/documentHighlight.py +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/lsp/reader_fns/references.py +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/lsp/reader_fns/signatureHelp.py +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/lsp/server.py +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/lsp/specific_file_watcher.py +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/lsp/utils.py +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/lsp/writer.py +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/routers/__init__.py +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/routers/artifact.py +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/routers/code_info.py +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/routers/dependencies.py +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/routers/in_memory_fn_stdout_websocket.py +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/routers/lsp.py +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/routers/reference_renaming.py +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/routers/sections.py +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/routers/terminals.py +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/routers/websocket.py +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/server.py +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/start.py +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/constants/BaseUITypes.json +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/constants/defaultValues.json +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/constants/settingsProject.json +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/android-chrome-192x192.png +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/android-chrome-512x512.png +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/apple-touch-icon.png +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/cormorant-garamond-all-700-italic-D-4m7eF5.woff +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/cormorant-garamond-cyrillic-700-italic-C21vCyEA.woff2 +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/cormorant-garamond-cyrillic-ext-700-italic-gsr366qd.woff2 +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/cormorant-garamond-latin-700-italic-BQbwEFjx.woff2 +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/cormorant-garamond-latin-ext-700-italic-DnnS5iSC.woff2 +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/cormorant-garamond-vietnamese-700-italic-2_nTgjbG.woff2 +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/inter-all-400-normal-ByZ5TkcW.woff +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/inter-all-600-normal-BQl_S1BW.woff +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/inter-all-800-normal-BdAoPad8.woff +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/inter-cyrillic-400-normal-BdCE3qi6.woff2 +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/inter-cyrillic-600-normal-7XOpjHIA.woff2 +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/inter-cyrillic-800-normal-DGhuWe7d.woff2 +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/inter-cyrillic-ext-400-normal-BWPw_Wqo.woff2 +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/inter-cyrillic-ext-600-normal-ejcnWb4M.woff2 +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/inter-cyrillic-ext-800-normal-DBv1a6vS.woff2 +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/inter-greek-400-normal-B1y6FevT.woff2 +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/inter-greek-600-normal-C2fO7_LG.woff2 +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/inter-greek-800-normal-Cmzsyk9X.woff2 +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/inter-greek-ext-400-normal-CDYjSWzV.woff2 +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/inter-greek-ext-600-normal-aFl-DVOe.woff2 +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/inter-greek-ext-800-normal-BDfRYppl.woff2 +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/inter-latin-400-normal-C0b7ZYuD.woff2 +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/inter-latin-600-normal-Do_HpvrI.woff2 +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/inter-latin-800-normal-4xo3UuPr.woff2 +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/inter-latin-ext-400-normal-CoAAiu5e.woff2 +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/inter-latin-ext-600-normal-Dc00Iig3.woff2 +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/inter-latin-ext-800-normal-MtSFSlwC.woff2 +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/logo/logo.svg +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/source-code-pro-all-500-normal-r3XLtphf.woff +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/source-code-pro-cyrillic-500-normal-CY1ydVwz.woff2 +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/source-code-pro-cyrillic-ext-500-normal-CfYAfiCF.woff2 +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/source-code-pro-greek-500-normal-CAXYj0Fh.woff2 +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/source-code-pro-latin-500-normal-D9gpC5Cq.woff2 +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/source-code-pro-latin-ext-500-normal-CRAmHsi-.woff2 +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/work-sans-all-400-normal-DjvUmtn7.woff +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/work-sans-all-500-normal-xIKbAjND.woff +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/work-sans-all-600-normal-G3qI_FYS.woff +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/work-sans-all-700-normal-DDAKfh8R.woff +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/work-sans-latin-400-normal-DiMJuv0g.woff2 +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/work-sans-latin-500-normal-Bj5Gxvqh.woff2 +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/work-sans-latin-600-normal-DqkZaPuW.woff2 +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/work-sans-latin-700-normal-DrOaUiEE.woff2 +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/work-sans-latin-ext-400-normal-DVtzt6WA.woff2 +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/work-sans-latin-ext-500-normal-Ci3LVpiW.woff2 +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/work-sans-latin-ext-600-normal-BROvLH43.woff2 +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/work-sans-latin-ext-700-normal-qcgZR4tS.woff2 +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/browserconfig.xml +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/favicon-16x16.png +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/favicon-32x32.png +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/favicon.ico +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/manifest.json +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/mstile-144x144.png +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/mstile-150x150.png +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/mstile-310x150.png +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/mstile-310x310.png +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/mstile-70x70.png +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/robots.txt +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/safari-pinned-tab.svg +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/site.webmanifest +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/seed/.DS_Store +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/seed/examples/.DS_Store +0 -0
- {setta-0.0.16.dev1/backend/setta/terminals → setta-0.0.18/backend/setta/tasks}/__init__.py +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/tasks/fns/__init__.py +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/tasks/fns/codeAreaAutocomplete.py +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/tasks/fns/codeAreaFindTemplateVars.py +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/tasks/fns/codeAreaInitializeCode.py +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/tasks/fns/findEVRefs.py +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/tasks/fns/parametersRequest.py +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/tasks/fns/textFieldAutocomplete.py +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/tasks/fns/textFieldInitializeCode.py +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/tasks/fns/typeCheck.py +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/tasks/fns/utils.py +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/tasks/task_runner.py +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/tasks/utils.py +0 -0
- {setta-0.0.16.dev1/backend/setta/utils → setta-0.0.18/backend/setta/terminals}/__init__.py +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/terminals/terminals.py +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/terminals/utils.py +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/utils/constants.py +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/utils/generate_memorable_string.py +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/utils/generate_new_filename.py +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/utils/section_contents.py +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/utils/utils.py +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/utils/websocket_manager.py +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta.egg-info/dependency_links.txt +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta.egg-info/entry_points.txt +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta.egg-info/requires.txt +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta.egg-info/top_level.txt +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/pyproject.toml +0 -0
- {setta-0.0.16.dev1 → setta-0.0.18}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.2
|
2
2
|
Name: setta
|
3
|
-
Version: 0.0.
|
3
|
+
Version: 0.0.18
|
4
4
|
Summary: Python without the donkeywork.
|
5
5
|
Home-page: https://setta.dev
|
6
6
|
Author: Kevin Musgrave, Jeff Musgrave
|
@@ -42,18 +42,23 @@ Requires-Dist: flake8==6.1.0; extra == "dev"
|
|
42
42
|
|
43
43
|
## News
|
44
44
|
|
45
|
+
**March 13**: [v0.0.17](https://github.com/settadev/setta/releases/tag/v0.0.17)
|
46
|
+
- Added the Notifications view.
|
47
|
+
|
48
|
+
<div align="center">
|
49
|
+
<img width="441" src="https://github.com/user-attachments/assets/1140ad66-311c-4713-8fbf-596b959a15c5" />
|
50
|
+
</div>
|
51
|
+
|
52
|
+
**March 10**: [v0.0.16](https://github.com/settadev/setta/releases/tag/v0.0.16)
|
53
|
+
- Made tooltips resizable and draggable.
|
54
|
+
- Added command palette.
|
55
|
+
- Improved code generation to account for different argument-passing styles.
|
56
|
+
|
45
57
|
**March 7**: [v0.0.15](https://github.com/settadev/setta/releases/tag/v0.0.15)
|
46
58
|
- Improved context menu organization.
|
47
59
|
- Added ability to change size of artifacts while preserving aspect ratio.
|
48
60
|
- Added Stop button for stopping subprocesses.
|
49
61
|
|
50
|
-
**March 5**: [v0.0.14](https://github.com/settadev/setta/releases/tag/v0.0.14)
|
51
|
-
- Allow access to individual layers of Drawing sections, as well as the combined output.
|
52
|
-
- Added button + shortcut for sending current full project state to in-memory functions.
|
53
|
-
|
54
|
-
**March 4**: [v0.0.13](https://github.com/settadev/setta/releases/tag/v0.0.13)
|
55
|
-
- Updated frontend javascript dependencies.
|
56
|
-
|
57
62
|
|
58
63
|
## What does Setta do?
|
59
64
|
|
@@ -90,6 +95,13 @@ Or click on one of the images below to go directly to that example:
|
|
90
95
|
<td><a href="https://github.com/settadev/examples/tree/main/transformers_trainer"><img src="https://github.com/user-attachments/assets/1f6554f8-8d49-4ba8-af48-f5dc6bc5d845" /></a></td>
|
91
96
|
<td><a href="https://github.com/settadev/examples/tree/main/pytorch_metric_learning_trainer"><img src="https://github.com/user-attachments/assets/45ae2047-9dbd-4057-9191-9a3460357ccc" /></a></td>
|
92
97
|
</tr>
|
98
|
+
|
99
|
+
<tr>
|
100
|
+
<td><a href="https://github.com/settadev/examples/tree/main/sapientml_automl"><img src="https://github.com/user-attachments/assets/d58e648a-47e2-4eda-b9e5-9062494518a4" /></a></td>
|
101
|
+
</tr>
|
102
|
+
|
103
|
+
|
104
|
+
|
93
105
|
</table>
|
94
106
|
|
95
107
|
We also have [tutorial videos](https://www.youtube.com/@settadev).
|
@@ -12,18 +12,23 @@
|
|
12
12
|
|
13
13
|
## News
|
14
14
|
|
15
|
+
**March 13**: [v0.0.17](https://github.com/settadev/setta/releases/tag/v0.0.17)
|
16
|
+
- Added the Notifications view.
|
17
|
+
|
18
|
+
<div align="center">
|
19
|
+
<img width="441" src="https://github.com/user-attachments/assets/1140ad66-311c-4713-8fbf-596b959a15c5" />
|
20
|
+
</div>
|
21
|
+
|
22
|
+
**March 10**: [v0.0.16](https://github.com/settadev/setta/releases/tag/v0.0.16)
|
23
|
+
- Made tooltips resizable and draggable.
|
24
|
+
- Added command palette.
|
25
|
+
- Improved code generation to account for different argument-passing styles.
|
26
|
+
|
15
27
|
**March 7**: [v0.0.15](https://github.com/settadev/setta/releases/tag/v0.0.15)
|
16
28
|
- Improved context menu organization.
|
17
29
|
- Added ability to change size of artifacts while preserving aspect ratio.
|
18
30
|
- Added Stop button for stopping subprocesses.
|
19
31
|
|
20
|
-
**March 5**: [v0.0.14](https://github.com/settadev/setta/releases/tag/v0.0.14)
|
21
|
-
- Allow access to individual layers of Drawing sections, as well as the combined output.
|
22
|
-
- Added button + shortcut for sending current full project state to in-memory functions.
|
23
|
-
|
24
|
-
**March 4**: [v0.0.13](https://github.com/settadev/setta/releases/tag/v0.0.13)
|
25
|
-
- Updated frontend javascript dependencies.
|
26
|
-
|
27
32
|
|
28
33
|
## What does Setta do?
|
29
34
|
|
@@ -60,6 +65,13 @@ Or click on one of the images below to go directly to that example:
|
|
60
65
|
<td><a href="https://github.com/settadev/examples/tree/main/transformers_trainer"><img src="https://github.com/user-attachments/assets/1f6554f8-8d49-4ba8-af48-f5dc6bc5d845" /></a></td>
|
61
66
|
<td><a href="https://github.com/settadev/examples/tree/main/pytorch_metric_learning_trainer"><img src="https://github.com/user-attachments/assets/45ae2047-9dbd-4057-9191-9a3460357ccc" /></a></td>
|
62
67
|
</tr>
|
68
|
+
|
69
|
+
<tr>
|
70
|
+
<td><a href="https://github.com/settadev/examples/tree/main/sapientml_automl"><img src="https://github.com/user-attachments/assets/d58e648a-47e2-4eda-b9e5-9062494518a4" /></a></td>
|
71
|
+
</tr>
|
72
|
+
|
73
|
+
|
74
|
+
|
63
75
|
</table>
|
64
76
|
|
65
77
|
We also have [tutorial videos](https://www.youtube.com/@settadev).
|
@@ -0,0 +1 @@
|
|
1
|
+
__version__ = "0.0.18"
|
@@ -0,0 +1,21 @@
|
|
1
|
+
def delete_notification(db, notification_id):
|
2
|
+
"""
|
3
|
+
Delete a notification from the database by its ID.
|
4
|
+
|
5
|
+
Parameters:
|
6
|
+
- db: The database connection/cursor object
|
7
|
+
- notification_id: The ID of the notification to delete
|
8
|
+
|
9
|
+
Returns:
|
10
|
+
- True if the notification was deleted, False if it wasn't found
|
11
|
+
"""
|
12
|
+
query = """
|
13
|
+
DELETE FROM Notifications
|
14
|
+
WHERE id = :notification_id
|
15
|
+
RETURNING id
|
16
|
+
"""
|
17
|
+
|
18
|
+
db.execute(query, {"notification_id": notification_id})
|
19
|
+
result = db.fetchone()
|
20
|
+
|
21
|
+
return result is not None
|
@@ -0,0 +1,108 @@
|
|
1
|
+
from setta.database.utils import create_new_id
|
2
|
+
from setta.utils.constants import C
|
3
|
+
from setta.utils.utils import try_json
|
4
|
+
|
5
|
+
|
6
|
+
def load_project_notifications(db, project_config_id, limit=20):
|
7
|
+
"""
|
8
|
+
Load the latest notifications for a specific project.
|
9
|
+
|
10
|
+
Parameters:
|
11
|
+
- db: The database connection/cursor object
|
12
|
+
- project_config_id: The ID of the project to get notifications for
|
13
|
+
- limit: Maximum number of notifications to return (default: 20)
|
14
|
+
|
15
|
+
Returns:
|
16
|
+
- A list of notification objects
|
17
|
+
"""
|
18
|
+
query = """
|
19
|
+
SELECT
|
20
|
+
id,
|
21
|
+
timestamp,
|
22
|
+
type,
|
23
|
+
message,
|
24
|
+
metadata,
|
25
|
+
read_status
|
26
|
+
FROM
|
27
|
+
Notifications
|
28
|
+
WHERE
|
29
|
+
projectConfigId = :project_config_id
|
30
|
+
ORDER BY
|
31
|
+
id DESC
|
32
|
+
LIMIT :limit
|
33
|
+
"""
|
34
|
+
|
35
|
+
query_params = {"project_config_id": project_config_id, "limit": limit}
|
36
|
+
|
37
|
+
db.execute(query, query_params)
|
38
|
+
|
39
|
+
notifications = []
|
40
|
+
for row in db.fetchall():
|
41
|
+
notification = create_notification_dict(**row)
|
42
|
+
notifications.append(notification)
|
43
|
+
|
44
|
+
return notifications
|
45
|
+
|
46
|
+
|
47
|
+
def load_notification(db, notification_id):
|
48
|
+
"""
|
49
|
+
Load a single notification by its ID.
|
50
|
+
|
51
|
+
Parameters:
|
52
|
+
- db: The database connection/cursor object
|
53
|
+
- notification_id: The ID of the notification to retrieve
|
54
|
+
|
55
|
+
Returns:
|
56
|
+
- A notification object if found, None otherwise
|
57
|
+
"""
|
58
|
+
query = """
|
59
|
+
SELECT
|
60
|
+
id,
|
61
|
+
timestamp,
|
62
|
+
type,
|
63
|
+
message,
|
64
|
+
metadata,
|
65
|
+
read_status
|
66
|
+
FROM
|
67
|
+
Notifications
|
68
|
+
WHERE
|
69
|
+
id = :notification_id
|
70
|
+
"""
|
71
|
+
|
72
|
+
query_params = {"notification_id": notification_id}
|
73
|
+
|
74
|
+
db.execute(query, query_params)
|
75
|
+
row = db.fetchone()
|
76
|
+
|
77
|
+
if not row:
|
78
|
+
return None
|
79
|
+
|
80
|
+
return create_notification_dict(**row)
|
81
|
+
|
82
|
+
|
83
|
+
def create_notification_dict(
|
84
|
+
message,
|
85
|
+
id=None,
|
86
|
+
type=C.NOTIFICATION_TYPE_INFO,
|
87
|
+
timestamp=None,
|
88
|
+
metadata=None,
|
89
|
+
read_status=False,
|
90
|
+
temporary=False,
|
91
|
+
):
|
92
|
+
if not id:
|
93
|
+
id = create_new_id()
|
94
|
+
read_status = bool(read_status)
|
95
|
+
if not isinstance(metadata, dict):
|
96
|
+
metadata = try_json(metadata)
|
97
|
+
if metadata is None:
|
98
|
+
metadata = {}
|
99
|
+
|
100
|
+
return {
|
101
|
+
"id": id,
|
102
|
+
"type": type,
|
103
|
+
"message": message,
|
104
|
+
"timestamp": timestamp,
|
105
|
+
"metadata": metadata,
|
106
|
+
"read_status": read_status,
|
107
|
+
"temporary": temporary,
|
108
|
+
}
|
@@ -0,0 +1,49 @@
|
|
1
|
+
import json
|
2
|
+
|
3
|
+
|
4
|
+
def save_notification(db, project_config_id, type, message, metadata=None):
|
5
|
+
"""
|
6
|
+
Save a new notification to the database.
|
7
|
+
|
8
|
+
Parameters:
|
9
|
+
- db: The database connection/cursor object
|
10
|
+
- project_config_id: The ID of the project associated with this notification
|
11
|
+
- type: The notification type (e.g., 'error', 'warning', 'info', 'success')
|
12
|
+
- message: The notification message text
|
13
|
+
- metadata: Optional JSON-serializable dict with additional data
|
14
|
+
|
15
|
+
Returns:
|
16
|
+
- The ID of the newly created notification
|
17
|
+
"""
|
18
|
+
query = """
|
19
|
+
INSERT INTO Notifications (
|
20
|
+
projectConfigId,
|
21
|
+
type,
|
22
|
+
message,
|
23
|
+
metadata
|
24
|
+
) VALUES (
|
25
|
+
:project_config_id,
|
26
|
+
:type,
|
27
|
+
:message,
|
28
|
+
:metadata
|
29
|
+
)
|
30
|
+
RETURNING id
|
31
|
+
"""
|
32
|
+
|
33
|
+
# Convert metadata to JSON string if provided
|
34
|
+
metadata_json = json.dumps(metadata) if metadata is not None else None
|
35
|
+
|
36
|
+
query_params = {
|
37
|
+
"project_config_id": project_config_id,
|
38
|
+
"type": type,
|
39
|
+
"message": message,
|
40
|
+
"metadata": metadata_json,
|
41
|
+
}
|
42
|
+
|
43
|
+
db.execute(query, query_params)
|
44
|
+
|
45
|
+
# Get the ID of the inserted notification
|
46
|
+
result = db.fetchone()
|
47
|
+
notification_id = result["id"] if result else None
|
48
|
+
|
49
|
+
return notification_id
|
@@ -17,12 +17,17 @@ from setta.code_gen.export_selected import (
|
|
17
17
|
get_section_type,
|
18
18
|
)
|
19
19
|
from setta.code_gen.find_placeholders import parse_template_var
|
20
|
+
from setta.database.db.notifications.load import (
|
21
|
+
create_notification_dict,
|
22
|
+
load_notification,
|
23
|
+
)
|
24
|
+
from setta.database.db.notifications.save import save_notification
|
20
25
|
from setta.tasks.fns.utils import replace_template_vars_with_random_names
|
21
26
|
from setta.tasks.tasks import construct_subprocess_key
|
22
27
|
from setta.utils.constants import C
|
23
28
|
from setta.utils.utils import multireplace
|
24
29
|
|
25
|
-
from .dependencies import get_lsp_writers, get_tasks
|
30
|
+
from .dependencies import get_dbq, get_lsp_writers, get_tasks
|
26
31
|
|
27
32
|
router = APIRouter()
|
28
33
|
|
@@ -36,6 +41,10 @@ class FormatCodeRequest(BaseModel):
|
|
36
41
|
candidateTemplateVars: dict
|
37
42
|
|
38
43
|
|
44
|
+
class KillInMemorySubprocessesRequest(BaseModel):
|
45
|
+
projectConfigId: str
|
46
|
+
|
47
|
+
|
39
48
|
@router.post(C.ROUTE_SEND_PROJECT_TO_INTERACTIVE_CODE)
|
40
49
|
async def route_send_project_to_interactive_code(
|
41
50
|
x: UpdateInteractiveCodeRequest,
|
@@ -151,8 +160,36 @@ async def update_interactive_code(p, tasks, lsp_writers, idx):
|
|
151
160
|
|
152
161
|
|
153
162
|
@router.post(C.ROUTE_KILL_IN_MEMORY_SUBPROCESSES)
|
154
|
-
async def route_kill_in_memory_subprocesses(
|
155
|
-
tasks
|
163
|
+
async def route_kill_in_memory_subprocesses(
|
164
|
+
x: KillInMemorySubprocessesRequest, tasks=Depends(get_tasks), dbq=Depends(get_dbq)
|
165
|
+
):
|
166
|
+
notification = None
|
167
|
+
try:
|
168
|
+
num_killed = tasks.kill_in_memory_subprocesses()
|
169
|
+
if num_killed == 0:
|
170
|
+
notification = create_notification_dict(
|
171
|
+
message="No subprocesses to kill",
|
172
|
+
type=C.NOTIFICATION_TYPE_INFO,
|
173
|
+
temporary=True,
|
174
|
+
)
|
175
|
+
else:
|
176
|
+
with dbq as db:
|
177
|
+
notification_id = save_notification(
|
178
|
+
db,
|
179
|
+
x.projectConfigId,
|
180
|
+
C.NOTIFICATION_TYPE_INFO,
|
181
|
+
f"Killed {num_killed} subprocesses",
|
182
|
+
)
|
183
|
+
notification = load_notification(db, notification_id)
|
184
|
+
|
185
|
+
except Exception as e:
|
186
|
+
notification = create_notification_dict(
|
187
|
+
message="Failed to kill subprocesses",
|
188
|
+
type=C.NOTIFICATION_TYPE_ERROR,
|
189
|
+
temporary=True,
|
190
|
+
)
|
191
|
+
|
192
|
+
return {"notification": notification}
|
156
193
|
|
157
194
|
|
158
195
|
@router.post(C.ROUTE_FORMAT_CODE)
|
@@ -5,6 +5,11 @@ from fastapi import APIRouter, Depends, HTTPException
|
|
5
5
|
from pydantic import BaseModel
|
6
6
|
|
7
7
|
from setta.database.backup import maybe_create_backup
|
8
|
+
from setta.database.db.notifications.delete import delete_notification
|
9
|
+
from setta.database.db.notifications.load import (
|
10
|
+
create_notification_dict,
|
11
|
+
load_project_notifications,
|
12
|
+
)
|
8
13
|
from setta.database.db.projects.delete import delete_project_configs
|
9
14
|
from setta.database.db.projects.load import (
|
10
15
|
ProjectNotFound,
|
@@ -85,6 +90,14 @@ class AddDefaultDataForJSONImportRequest(BaseModel):
|
|
85
90
|
project: dict
|
86
91
|
|
87
92
|
|
93
|
+
class GetNotificationsRequest(BaseModel):
|
94
|
+
projectConfigId: str
|
95
|
+
|
96
|
+
|
97
|
+
class DeleteNotificationRequest(BaseModel):
|
98
|
+
notificationId: str
|
99
|
+
|
100
|
+
|
88
101
|
@router.post(C.ROUTE_ALL_PROJECT_CONFIG_METADATA)
|
89
102
|
def route_all_project_config_metadata(dbq=Depends(get_dbq)):
|
90
103
|
with dbq as db:
|
@@ -120,9 +133,21 @@ def route_load_full_project(x: ProjectLoadFullRequest, dbq=Depends(get_dbq)):
|
|
120
133
|
@router.post(C.ROUTE_SAVE_PROJECT)
|
121
134
|
def route_save_project(x: ProjectSaveRequest, dbq=Depends(get_dbq)):
|
122
135
|
with dbq as db:
|
123
|
-
|
124
|
-
|
125
|
-
|
136
|
+
notification = None
|
137
|
+
try:
|
138
|
+
# Perform existing save operations
|
139
|
+
maybe_create_backup(db.path)
|
140
|
+
save_project_details(db, x.project)
|
141
|
+
maybe_export_database(db, db.path)
|
142
|
+
# Return success response with notification
|
143
|
+
notification = create_notification_dict(message="Saved!", temporary=True)
|
144
|
+
|
145
|
+
except Exception as e:
|
146
|
+
notification = create_notification_dict(
|
147
|
+
message="Failed to save", type=C.NOTIFICATION_TYPE_ERROR, temporary=True
|
148
|
+
)
|
149
|
+
|
150
|
+
return {"notification": notification}
|
126
151
|
|
127
152
|
|
128
153
|
@router.post(C.ROUTE_CREATE_PROJECT_CONFIG)
|
@@ -186,3 +211,17 @@ def router_filter_data_for_json_export(x: FilterDataForJSONExportRequest):
|
|
186
211
|
def router_add_default_data_for_json_import(x: FilterDataForJSONExportRequest):
|
187
212
|
add_defaults_to_project_and_load_json_sources(x.project)
|
188
213
|
return x.project
|
214
|
+
|
215
|
+
|
216
|
+
@router.post(C.ROUTE_GET_NOTIFICATIONS)
|
217
|
+
def route_get_notifications(x: GetNotificationsRequest, dbq=Depends(get_dbq)):
|
218
|
+
with dbq as db:
|
219
|
+
notifications = load_project_notifications(db, x.projectConfigId)
|
220
|
+
return notifications
|
221
|
+
|
222
|
+
|
223
|
+
@router.post(C.ROUTE_DELETE_NOTIFICATION)
|
224
|
+
def route_delete_notification(x: DeleteNotificationRequest, dbq=Depends(get_dbq)):
|
225
|
+
with dbq as db:
|
226
|
+
success = delete_notification(db, x.notificationId)
|
227
|
+
return {"success": success}
|
@@ -1,6 +1,7 @@
|
|
1
1
|
from fastapi import APIRouter, Depends
|
2
2
|
from pydantic import BaseModel
|
3
3
|
|
4
|
+
from setta.database.db.notifications.load import create_notification_dict
|
4
5
|
from setta.utils.constants import C
|
5
6
|
|
6
7
|
from .dependencies import get_settings_file
|
@@ -32,7 +33,16 @@ def route_load_settings(settings_file=Depends(get_settings_file)):
|
|
32
33
|
def route_save_settings_project(
|
33
34
|
x: SaveSettingsProjectRequest, settings_file=Depends(get_settings_file)
|
34
35
|
):
|
35
|
-
|
36
|
+
notification = None
|
37
|
+
try:
|
38
|
+
settings_file.save_settings_project(x.settingsProject)
|
39
|
+
notification = create_notification_dict(message="Saved!", temporary=True)
|
40
|
+
except Exception as e:
|
41
|
+
notification = create_notification_dict(
|
42
|
+
message="Failed to save", type=C.NOTIFICATION_TYPE_ERROR, temporary=True
|
43
|
+
)
|
44
|
+
|
45
|
+
return {"notification": notification}
|
36
46
|
|
37
47
|
|
38
48
|
@router.post(C.ROUTE_LOAD_SETTINGS_PROJECT)
|
@@ -97,6 +97,8 @@
|
|
97
97
|
"ROUTE_LOAD_ARTIFACT_FROM_DISK": "/loadArtifactFromDisk",
|
98
98
|
"ROUTE_RESTART_LANGUAGE_SERVER": "/restartLanguageServer",
|
99
99
|
"ROUTE_FILE_WATCH_LIST": "/fileWatchList",
|
100
|
+
"ROUTE_GET_NOTIFICATIONS": "/getNotifications",
|
101
|
+
"ROUTE_DELETE_NOTIFICATION": "/deleteNotification",
|
100
102
|
"NESTED_PARAM": "NESTED_PARAM",
|
101
103
|
"ARGS_PREFIX": "__",
|
102
104
|
"TEMPLATE_PREFIX": "$",
|
@@ -123,5 +125,10 @@
|
|
123
125
|
"IMAGE": ["img"],
|
124
126
|
"CHART": ["list"],
|
125
127
|
"CHAT": ["chatHistory"]
|
126
|
-
}
|
128
|
+
},
|
129
|
+
"NOTIFICATION_TYPE_SUCCESS": "success",
|
130
|
+
"NOTIFICATION_TYPE_ERROR": "error",
|
131
|
+
"NOTIFICATION_TYPE_WARNING": "warning",
|
132
|
+
"NOTIFICATION_TYPE_INFO": "info",
|
133
|
+
"NOTIFICATION_TYPE_SAVE": "save"
|
127
134
|
}
|
@@ -221,6 +221,21 @@ CREATE TABLE IF NOT EXISTS ArtifactGroup (
|
|
221
221
|
FOREIGN KEY (artifactId) REFERENCES Artifact(id) ON DELETE CASCADE
|
222
222
|
);
|
223
223
|
|
224
|
+
CREATE TABLE IF NOT EXISTS Notifications (
|
225
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
226
|
+
projectConfigId TEXT NOT NULL,
|
227
|
+
timestamp TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%SZ', 'now')),
|
228
|
+
type TEXT NOT NULL,
|
229
|
+
message TEXT NOT NULL,
|
230
|
+
metadata JSON,
|
231
|
+
read_status BOOLEAN NOT NULL DEFAULT 0,
|
232
|
+
FOREIGN KEY (projectConfigId) REFERENCES ProjectConfig(id)
|
233
|
+
);
|
234
|
+
|
235
|
+
|
236
|
+
|
237
|
+
|
238
|
+
|
224
239
|
-- INSERTS ---
|
225
240
|
INSERT OR IGNORE INTO Metadata (id, defaultProject) VALUES (1, NULL);
|
226
241
|
|