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.
Files changed (272) hide show
  1. {setta-0.0.16.dev1/backend/setta.egg-info → setta-0.0.18}/PKG-INFO +20 -8
  2. {setta-0.0.16.dev1 → setta-0.0.18}/README.md +19 -7
  3. setta-0.0.18/backend/setta/__init__.py +1 -0
  4. setta-0.0.18/backend/setta/database/db/notifications/delete.py +21 -0
  5. setta-0.0.18/backend/setta/database/db/notifications/load.py +108 -0
  6. setta-0.0.18/backend/setta/database/db/notifications/save.py +49 -0
  7. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/routers/interactive.py +40 -3
  8. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/routers/projects.py +42 -3
  9. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/routers/settings.py +11 -1
  10. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/constants/Settings.json +1 -0
  11. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/constants/constants.json +8 -1
  12. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/constants/db_init.sql +15 -0
  13. setta-0.0.18/backend/setta/static/frontend/assets/index-D-mLvWDA.css +32 -0
  14. 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
  15. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/index.html +2 -2
  16. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/tasks/tasks.py +3 -0
  17. setta-0.0.18/backend/setta/utils/__init__.py +0 -0
  18. {setta-0.0.16.dev1 → setta-0.0.18/backend/setta.egg-info}/PKG-INFO +20 -8
  19. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta.egg-info/SOURCES.txt +6 -2
  20. setta-0.0.16.dev1/backend/setta/__init__.py +0 -1
  21. setta-0.0.16.dev1/backend/setta/static/frontend/assets/index-VC4wWLEk.css +0 -32
  22. {setta-0.0.16.dev1 → setta-0.0.18}/LICENSE +0 -0
  23. {setta-0.0.16.dev1 → setta-0.0.18}/MANIFEST.in +0 -0
  24. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/cli/__init__.py +0 -0
  25. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/cli/connect.py +0 -0
  26. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/cli/logger.py +0 -0
  27. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/code_gen/__init__.py +0 -0
  28. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/code_gen/create_runnable_scripts.py +0 -0
  29. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/code_gen/export_selected.py +0 -0
  30. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/code_gen/find_placeholders.py +0 -0
  31. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/code_gen/python/__init__.py +0 -0
  32. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/code_gen/python/ast_utils.py +0 -0
  33. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/code_gen/python/check_scope.py +0 -0
  34. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/code_gen/python/generate_code.py +0 -0
  35. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/code_gen/python/make_parseable.py +0 -0
  36. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/code_gen/python/position_line_col.py +0 -0
  37. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/code_gen/python/validate_imports.py +0 -0
  38. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/code_gen/utils.py +0 -0
  39. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/code_gen/yaml/__init__.py +0 -0
  40. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/code_gen/yaml/generate_yaml.py +0 -0
  41. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/code_gen/yaml/section_dict.py +0 -0
  42. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/database/__init__.py +0 -0
  43. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/database/backup.py +0 -0
  44. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/database/db/__init__.py +0 -0
  45. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/database/db/artifacts/__init__.py +0 -0
  46. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/database/db/artifacts/load.py +0 -0
  47. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/database/db/artifacts/save.py +0 -0
  48. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/database/db/artifacts/save_or_create.py +0 -0
  49. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/database/db/artifacts/utils.py +0 -0
  50. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/database/db/codeInfo/__init__.py +0 -0
  51. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/database/db/codeInfo/copy.py +0 -0
  52. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/database/db/codeInfo/load.py +0 -0
  53. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/database/db/codeInfo/save.py +0 -0
  54. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/database/db/codeInfo/utils.py +0 -0
  55. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/database/db/evRefs/__init__.py +0 -0
  56. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/database/db/evRefs/load.py +0 -0
  57. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/database/db/evRefs/save.py +0 -0
  58. {setta-0.0.16.dev1/backend/setta/database/db/projects → setta-0.0.18/backend/setta/database/db/notifications}/__init__.py +0 -0
  59. {setta-0.0.16.dev1/backend/setta/database/db/sectionVariants → setta-0.0.18/backend/setta/database/db/projects}/__init__.py +0 -0
  60. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/database/db/projects/copy.py +0 -0
  61. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/database/db/projects/delete.py +0 -0
  62. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/database/db/projects/load.py +0 -0
  63. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/database/db/projects/save.py +0 -0
  64. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/database/db/projects/saveAs.py +0 -0
  65. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/database/db/projects/utils.py +0 -0
  66. {setta-0.0.16.dev1/backend/setta/database/db/sections → setta-0.0.18/backend/setta/database/db/sectionVariants}/__init__.py +0 -0
  67. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/database/db/sectionVariants/copy.py +0 -0
  68. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/database/db/sectionVariants/load.py +0 -0
  69. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/database/db/sectionVariants/save.py +0 -0
  70. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/database/db/sectionVariants/utils.py +0 -0
  71. {setta-0.0.16.dev1/backend/setta/database/db/uiTypes → setta-0.0.18/backend/setta/database/db/sections}/__init__.py +0 -0
  72. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/database/db/sections/copy.py +0 -0
  73. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/database/db/sections/jsonSource.py +0 -0
  74. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/database/db/sections/load.py +0 -0
  75. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/database/db/sections/save.py +0 -0
  76. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/database/db/sections/utils.py +0 -0
  77. {setta-0.0.16.dev1/backend/setta/database/export_db → setta-0.0.18/backend/setta/database/db/uiTypes}/__init__.py +0 -0
  78. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/database/db/uiTypes/copy.py +0 -0
  79. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/database/db/uiTypes/load.py +0 -0
  80. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/database/db/uiTypes/save.py +0 -0
  81. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/database/db/uiTypes/utils.py +0 -0
  82. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/database/db_init.py +0 -0
  83. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/database/db_objs.py +0 -0
  84. {setta-0.0.16.dev1/backend/setta/lsp → setta-0.0.18/backend/setta/database/export_db}/__init__.py +0 -0
  85. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/database/export_db/export_db.py +0 -0
  86. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/database/export_db/export_raw.py +0 -0
  87. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/database/export_db/export_readable.py +0 -0
  88. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/database/export_db/utils.py +0 -0
  89. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/database/import_db.py +0 -0
  90. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/database/seed.py +0 -0
  91. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/database/settings_file.py +0 -0
  92. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/database/utils.py +0 -0
  93. {setta-0.0.16.dev1/backend/setta/lsp/reader_fns → setta-0.0.18/backend/setta/lsp}/__init__.py +0 -0
  94. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/lsp/file_watcher.py +0 -0
  95. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/lsp/reader.py +0 -0
  96. {setta-0.0.16.dev1/backend/setta/tasks → setta-0.0.18/backend/setta/lsp/reader_fns}/__init__.py +0 -0
  97. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/lsp/reader_fns/completion.py +0 -0
  98. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/lsp/reader_fns/definition.py +0 -0
  99. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/lsp/reader_fns/diagnostics.py +0 -0
  100. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/lsp/reader_fns/documentHighlight.py +0 -0
  101. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/lsp/reader_fns/references.py +0 -0
  102. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/lsp/reader_fns/signatureHelp.py +0 -0
  103. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/lsp/server.py +0 -0
  104. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/lsp/specific_file_watcher.py +0 -0
  105. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/lsp/utils.py +0 -0
  106. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/lsp/writer.py +0 -0
  107. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/routers/__init__.py +0 -0
  108. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/routers/artifact.py +0 -0
  109. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/routers/code_info.py +0 -0
  110. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/routers/dependencies.py +0 -0
  111. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/routers/in_memory_fn_stdout_websocket.py +0 -0
  112. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/routers/lsp.py +0 -0
  113. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/routers/reference_renaming.py +0 -0
  114. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/routers/sections.py +0 -0
  115. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/routers/terminals.py +0 -0
  116. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/routers/websocket.py +0 -0
  117. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/server.py +0 -0
  118. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/start.py +0 -0
  119. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/constants/BaseUITypes.json +0 -0
  120. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/constants/defaultValues.json +0 -0
  121. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/constants/settingsProject.json +0 -0
  122. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/android-chrome-192x192.png +0 -0
  123. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/android-chrome-512x512.png +0 -0
  124. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/apple-touch-icon.png +0 -0
  125. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
  126. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
  127. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
  128. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
  129. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
  130. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
  131. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
  132. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
  133. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
  134. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
  135. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
  136. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
  137. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
  138. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
  139. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
  140. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
  141. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
  142. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
  143. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
  144. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
  145. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
  146. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
  147. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
  148. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
  149. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
  150. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
  151. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
  152. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
  153. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
  154. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
  155. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
  156. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
  157. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
  158. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
  159. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
  160. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
  161. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
  162. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
  163. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
  164. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
  165. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
  166. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
  167. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
  168. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
  169. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
  170. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
  171. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
  172. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
  173. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
  174. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
  175. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
  176. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
  177. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
  178. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
  179. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
  180. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
  181. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
  182. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
  183. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
  184. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/cormorant-garamond-all-700-italic-D-4m7eF5.woff +0 -0
  185. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/cormorant-garamond-cyrillic-700-italic-C21vCyEA.woff2 +0 -0
  186. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/cormorant-garamond-cyrillic-ext-700-italic-gsr366qd.woff2 +0 -0
  187. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/cormorant-garamond-latin-700-italic-BQbwEFjx.woff2 +0 -0
  188. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/cormorant-garamond-latin-ext-700-italic-DnnS5iSC.woff2 +0 -0
  189. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/cormorant-garamond-vietnamese-700-italic-2_nTgjbG.woff2 +0 -0
  190. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/inter-all-400-normal-ByZ5TkcW.woff +0 -0
  191. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/inter-all-600-normal-BQl_S1BW.woff +0 -0
  192. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/inter-all-800-normal-BdAoPad8.woff +0 -0
  193. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/inter-cyrillic-400-normal-BdCE3qi6.woff2 +0 -0
  194. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/inter-cyrillic-600-normal-7XOpjHIA.woff2 +0 -0
  195. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/inter-cyrillic-800-normal-DGhuWe7d.woff2 +0 -0
  196. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/inter-cyrillic-ext-400-normal-BWPw_Wqo.woff2 +0 -0
  197. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/inter-cyrillic-ext-600-normal-ejcnWb4M.woff2 +0 -0
  198. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/inter-cyrillic-ext-800-normal-DBv1a6vS.woff2 +0 -0
  199. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/inter-greek-400-normal-B1y6FevT.woff2 +0 -0
  200. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/inter-greek-600-normal-C2fO7_LG.woff2 +0 -0
  201. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/inter-greek-800-normal-Cmzsyk9X.woff2 +0 -0
  202. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/inter-greek-ext-400-normal-CDYjSWzV.woff2 +0 -0
  203. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/inter-greek-ext-600-normal-aFl-DVOe.woff2 +0 -0
  204. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/inter-greek-ext-800-normal-BDfRYppl.woff2 +0 -0
  205. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/inter-latin-400-normal-C0b7ZYuD.woff2 +0 -0
  206. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/inter-latin-600-normal-Do_HpvrI.woff2 +0 -0
  207. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/inter-latin-800-normal-4xo3UuPr.woff2 +0 -0
  208. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/inter-latin-ext-400-normal-CoAAiu5e.woff2 +0 -0
  209. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/inter-latin-ext-600-normal-Dc00Iig3.woff2 +0 -0
  210. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/inter-latin-ext-800-normal-MtSFSlwC.woff2 +0 -0
  211. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/logo/logo.svg +0 -0
  212. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/source-code-pro-all-500-normal-r3XLtphf.woff +0 -0
  213. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/source-code-pro-cyrillic-500-normal-CY1ydVwz.woff2 +0 -0
  214. {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
  215. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/source-code-pro-greek-500-normal-CAXYj0Fh.woff2 +0 -0
  216. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/source-code-pro-latin-500-normal-D9gpC5Cq.woff2 +0 -0
  217. {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
  218. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/work-sans-all-400-normal-DjvUmtn7.woff +0 -0
  219. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/work-sans-all-500-normal-xIKbAjND.woff +0 -0
  220. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/work-sans-all-600-normal-G3qI_FYS.woff +0 -0
  221. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/work-sans-all-700-normal-DDAKfh8R.woff +0 -0
  222. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/work-sans-latin-400-normal-DiMJuv0g.woff2 +0 -0
  223. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/work-sans-latin-500-normal-Bj5Gxvqh.woff2 +0 -0
  224. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/work-sans-latin-600-normal-DqkZaPuW.woff2 +0 -0
  225. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/work-sans-latin-700-normal-DrOaUiEE.woff2 +0 -0
  226. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/work-sans-latin-ext-400-normal-DVtzt6WA.woff2 +0 -0
  227. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/work-sans-latin-ext-500-normal-Ci3LVpiW.woff2 +0 -0
  228. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/work-sans-latin-ext-600-normal-BROvLH43.woff2 +0 -0
  229. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/assets/work-sans-latin-ext-700-normal-qcgZR4tS.woff2 +0 -0
  230. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/browserconfig.xml +0 -0
  231. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/favicon-16x16.png +0 -0
  232. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/favicon-32x32.png +0 -0
  233. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/favicon.ico +0 -0
  234. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/manifest.json +0 -0
  235. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/mstile-144x144.png +0 -0
  236. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/mstile-150x150.png +0 -0
  237. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/mstile-310x150.png +0 -0
  238. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/mstile-310x310.png +0 -0
  239. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/mstile-70x70.png +0 -0
  240. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/robots.txt +0 -0
  241. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/safari-pinned-tab.svg +0 -0
  242. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/frontend/site.webmanifest +0 -0
  243. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/seed/.DS_Store +0 -0
  244. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/static/seed/examples/.DS_Store +0 -0
  245. {setta-0.0.16.dev1/backend/setta/terminals → setta-0.0.18/backend/setta/tasks}/__init__.py +0 -0
  246. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/tasks/fns/__init__.py +0 -0
  247. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/tasks/fns/codeAreaAutocomplete.py +0 -0
  248. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/tasks/fns/codeAreaFindTemplateVars.py +0 -0
  249. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/tasks/fns/codeAreaInitializeCode.py +0 -0
  250. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/tasks/fns/findEVRefs.py +0 -0
  251. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/tasks/fns/parametersRequest.py +0 -0
  252. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/tasks/fns/textFieldAutocomplete.py +0 -0
  253. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/tasks/fns/textFieldInitializeCode.py +0 -0
  254. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/tasks/fns/typeCheck.py +0 -0
  255. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/tasks/fns/utils.py +0 -0
  256. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/tasks/task_runner.py +0 -0
  257. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/tasks/utils.py +0 -0
  258. {setta-0.0.16.dev1/backend/setta/utils → setta-0.0.18/backend/setta/terminals}/__init__.py +0 -0
  259. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/terminals/terminals.py +0 -0
  260. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/terminals/utils.py +0 -0
  261. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/utils/constants.py +0 -0
  262. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/utils/generate_memorable_string.py +0 -0
  263. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/utils/generate_new_filename.py +0 -0
  264. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/utils/section_contents.py +0 -0
  265. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/utils/utils.py +0 -0
  266. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta/utils/websocket_manager.py +0 -0
  267. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta.egg-info/dependency_links.txt +0 -0
  268. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta.egg-info/entry_points.txt +0 -0
  269. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta.egg-info/requires.txt +0 -0
  270. {setta-0.0.16.dev1 → setta-0.0.18}/backend/setta.egg-info/top_level.txt +0 -0
  271. {setta-0.0.16.dev1 → setta-0.0.18}/pyproject.toml +0 -0
  272. {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.16.dev1
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(tasks=Depends(get_tasks)):
155
- tasks.kill_in_memory_subprocesses()
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
- maybe_create_backup(db.path)
124
- save_project_details(db, x.project)
125
- maybe_export_database(db, db.path)
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
- return settings_file.save_settings_project(x.settingsProject)
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)
@@ -13,6 +13,7 @@
13
13
  "loadShortcut": "Mod + L",
14
14
  "searchShortcut": "Mod + K",
15
15
  "advancedSearchShortcut": "Mod + P",
16
+ "commandPaletteShortcut": "Mod + Shift + P",
16
17
  "resetZoomShortcut": "Mod + Comma",
17
18
  "copyShortcut": "Mod + C",
18
19
  "pasteShortcut": "Mod + V",
@@ -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