setta 0.0.1__py3-none-any.whl → 0.0.2__py3-none-any.whl
Sign up to get free protection for your applications and to get access to all the features.
- setta/__init__.py +1 -1
- setta/cli/__init__.py +1 -0
- setta/cli/connect.py +43 -0
- setta/cli/logger.py +225 -0
- setta/code_gen/__init__.py +0 -0
- setta/code_gen/create_runnable_scripts.py +466 -0
- setta/code_gen/export_selected.py +776 -0
- setta/code_gen/find_placeholders.py +13 -0
- setta/code_gen/python/__init__.py +0 -0
- setta/code_gen/python/ast_utils.py +183 -0
- setta/code_gen/python/check_scope.py +187 -0
- setta/code_gen/python/generate_code.py +280 -0
- setta/code_gen/python/make_parseable.py +97 -0
- setta/code_gen/python/position_line_col.py +33 -0
- setta/code_gen/python/validate_imports.py +87 -0
- setta/code_gen/utils.py +120 -0
- setta/code_gen/yaml/__init__.py +0 -0
- setta/code_gen/yaml/generate_yaml.py +23 -0
- setta/code_gen/yaml/section_dict.py +93 -0
- setta/database/__init__.py +0 -0
- setta/database/backup.py +80 -0
- setta/database/db/__init__.py +0 -0
- setta/database/db/artifacts/__init__.py +0 -0
- setta/database/db/artifacts/load.py +93 -0
- setta/database/db/artifacts/save.py +85 -0
- setta/database/db/artifacts/save_or_create.py +68 -0
- setta/database/db/artifacts/utils.py +13 -0
- setta/database/db/codeInfo/__init__.py +0 -0
- setta/database/db/codeInfo/copy.py +26 -0
- setta/database/db/codeInfo/load.py +65 -0
- setta/database/db/codeInfo/save.py +75 -0
- setta/database/db/codeInfo/utils.py +33 -0
- setta/database/db/evRefs/__init__.py +0 -0
- setta/database/db/evRefs/load.py +45 -0
- setta/database/db/evRefs/save.py +95 -0
- setta/database/db/projects/__init__.py +0 -0
- setta/database/db/projects/copy.py +36 -0
- setta/database/db/projects/delete.py +7 -0
- setta/database/db/projects/load.py +184 -0
- setta/database/db/projects/save.py +267 -0
- setta/database/db/projects/saveAs.py +40 -0
- setta/database/db/projects/utils.py +135 -0
- setta/database/db/sectionVariants/__init__.py +0 -0
- setta/database/db/sectionVariants/copy.py +28 -0
- setta/database/db/sectionVariants/load.py +139 -0
- setta/database/db/sectionVariants/save.py +140 -0
- setta/database/db/sectionVariants/utils.py +44 -0
- setta/database/db/sections/__init__.py +0 -0
- setta/database/db/sections/copy.py +70 -0
- setta/database/db/sections/jsonSource.py +119 -0
- setta/database/db/sections/load.py +350 -0
- setta/database/db/sections/save.py +204 -0
- setta/database/db/sections/utils.py +13 -0
- setta/database/db/uiTypes/__init__.py +0 -0
- setta/database/db/uiTypes/copy.py +33 -0
- setta/database/db/uiTypes/load.py +51 -0
- setta/database/db/uiTypes/save.py +99 -0
- setta/database/db/uiTypes/utils.py +27 -0
- setta/database/db_init.py +36 -0
- setta/database/db_objs.py +102 -0
- setta/database/db_path.py +8 -0
- setta/database/export_db/__init__.py +0 -0
- setta/database/export_db/export_db.py +43 -0
- setta/database/export_db/export_raw.py +53 -0
- setta/database/export_db/export_readable.py +242 -0
- setta/database/export_db/utils.py +16 -0
- setta/database/import_db.py +28 -0
- setta/database/seed.py +41 -0
- setta/database/settings_file.py +118 -0
- setta/database/utils.py +32 -0
- setta/lsp/__init__.py +0 -0
- setta/lsp/file_watcher.py +113 -0
- setta/lsp/reader.py +184 -0
- setta/lsp/reader_fns/__init__.py +0 -0
- setta/lsp/reader_fns/completion.py +84 -0
- setta/lsp/reader_fns/definition.py +2 -0
- setta/lsp/reader_fns/diagnostics.py +99 -0
- setta/lsp/reader_fns/documentHighlight.py +25 -0
- setta/lsp/reader_fns/references.py +34 -0
- setta/lsp/reader_fns/signatureHelp.py +99 -0
- setta/lsp/server.py +150 -0
- setta/lsp/utils.py +60 -0
- setta/lsp/writer.py +306 -0
- setta/routers/__init__.py +11 -0
- setta/routers/artifact.py +105 -0
- setta/routers/code_info.py +32 -0
- setta/routers/dependencies.py +49 -0
- setta/routers/in_memory_fn_stdout_websocket.py +21 -0
- setta/routers/interactive.py +119 -0
- setta/routers/lsp.py +14 -0
- setta/routers/projects.py +188 -0
- setta/routers/reference_renaming.py +111 -0
- setta/routers/sections.py +174 -0
- setta/routers/settings.py +40 -0
- setta/routers/terminals.py +83 -0
- setta/routers/websocket.py +36 -0
- setta/server.py +141 -0
- setta/start.py +112 -0
- setta/static/constants/BaseUITypes.json +153 -0
- setta/static/constants/Settings.json +113 -0
- setta/static/constants/constants.json +117 -0
- setta/static/constants/db_init.sql +249 -0
- setta/static/constants/defaultValues.json +125 -0
- setta/static/constants/settingsProject.json +276 -0
- setta/static/frontend/android-chrome-192x192.png +0 -0
- setta/static/frontend/android-chrome-512x512.png +0 -0
- setta/static/frontend/apple-touch-icon.png +0 -0
- setta/static/frontend/assets/KaTeX_AMS-Regular-0cdd387c.woff2 +0 -0
- setta/static/frontend/assets/KaTeX_AMS-Regular-30da91e8.woff +0 -0
- setta/static/frontend/assets/KaTeX_AMS-Regular-68534840.ttf +0 -0
- setta/static/frontend/assets/KaTeX_Caligraphic-Bold-07d8e303.ttf +0 -0
- setta/static/frontend/assets/KaTeX_Caligraphic-Bold-1ae6bd74.woff +0 -0
- setta/static/frontend/assets/KaTeX_Caligraphic-Bold-de7701e4.woff2 +0 -0
- setta/static/frontend/assets/KaTeX_Caligraphic-Regular-3398dd02.woff +0 -0
- setta/static/frontend/assets/KaTeX_Caligraphic-Regular-5d53e70a.woff2 +0 -0
- setta/static/frontend/assets/KaTeX_Caligraphic-Regular-ed0b7437.ttf +0 -0
- setta/static/frontend/assets/KaTeX_Fraktur-Bold-74444efd.woff2 +0 -0
- setta/static/frontend/assets/KaTeX_Fraktur-Bold-9163df9c.ttf +0 -0
- setta/static/frontend/assets/KaTeX_Fraktur-Bold-9be7ceb8.woff +0 -0
- setta/static/frontend/assets/KaTeX_Fraktur-Regular-1e6f9579.ttf +0 -0
- setta/static/frontend/assets/KaTeX_Fraktur-Regular-51814d27.woff2 +0 -0
- setta/static/frontend/assets/KaTeX_Fraktur-Regular-5e28753b.woff +0 -0
- setta/static/frontend/assets/KaTeX_Main-Bold-0f60d1b8.woff2 +0 -0
- setta/static/frontend/assets/KaTeX_Main-Bold-138ac28d.ttf +0 -0
- setta/static/frontend/assets/KaTeX_Main-Bold-c76c5d69.woff +0 -0
- setta/static/frontend/assets/KaTeX_Main-BoldItalic-70ee1f64.ttf +0 -0
- setta/static/frontend/assets/KaTeX_Main-BoldItalic-99cd42a3.woff2 +0 -0
- setta/static/frontend/assets/KaTeX_Main-BoldItalic-a6f7ec0d.woff +0 -0
- setta/static/frontend/assets/KaTeX_Main-Italic-0d85ae7c.ttf +0 -0
- setta/static/frontend/assets/KaTeX_Main-Italic-97479ca6.woff2 +0 -0
- setta/static/frontend/assets/KaTeX_Main-Italic-f1d6ef86.woff +0 -0
- setta/static/frontend/assets/KaTeX_Main-Regular-c2342cd8.woff2 +0 -0
- setta/static/frontend/assets/KaTeX_Main-Regular-c6368d87.woff +0 -0
- setta/static/frontend/assets/KaTeX_Main-Regular-d0332f52.ttf +0 -0
- setta/static/frontend/assets/KaTeX_Math-BoldItalic-850c0af5.woff +0 -0
- setta/static/frontend/assets/KaTeX_Math-BoldItalic-dc47344d.woff2 +0 -0
- setta/static/frontend/assets/KaTeX_Math-BoldItalic-f9377ab0.ttf +0 -0
- setta/static/frontend/assets/KaTeX_Math-Italic-08ce98e5.ttf +0 -0
- setta/static/frontend/assets/KaTeX_Math-Italic-7af58c5e.woff2 +0 -0
- setta/static/frontend/assets/KaTeX_Math-Italic-8a8d2445.woff +0 -0
- setta/static/frontend/assets/KaTeX_SansSerif-Bold-1ece03f7.ttf +0 -0
- setta/static/frontend/assets/KaTeX_SansSerif-Bold-e99ae511.woff2 +0 -0
- setta/static/frontend/assets/KaTeX_SansSerif-Bold-ece03cfd.woff +0 -0
- setta/static/frontend/assets/KaTeX_SansSerif-Italic-00b26ac8.woff2 +0 -0
- setta/static/frontend/assets/KaTeX_SansSerif-Italic-3931dd81.ttf +0 -0
- setta/static/frontend/assets/KaTeX_SansSerif-Italic-91ee6750.woff +0 -0
- setta/static/frontend/assets/KaTeX_SansSerif-Regular-11e4dc8a.woff +0 -0
- setta/static/frontend/assets/KaTeX_SansSerif-Regular-68e8c73e.woff2 +0 -0
- setta/static/frontend/assets/KaTeX_SansSerif-Regular-f36ea897.ttf +0 -0
- setta/static/frontend/assets/KaTeX_Script-Regular-036d4e95.woff2 +0 -0
- setta/static/frontend/assets/KaTeX_Script-Regular-1c67f068.ttf +0 -0
- setta/static/frontend/assets/KaTeX_Script-Regular-d96cdf2b.woff +0 -0
- setta/static/frontend/assets/KaTeX_Size1-Regular-6b47c401.woff2 +0 -0
- setta/static/frontend/assets/KaTeX_Size1-Regular-95b6d2f1.ttf +0 -0
- setta/static/frontend/assets/KaTeX_Size1-Regular-c943cc98.woff +0 -0
- setta/static/frontend/assets/KaTeX_Size2-Regular-2014c523.woff +0 -0
- setta/static/frontend/assets/KaTeX_Size2-Regular-a6b2099f.ttf +0 -0
- setta/static/frontend/assets/KaTeX_Size2-Regular-d04c5421.woff2 +0 -0
- setta/static/frontend/assets/KaTeX_Size3-Regular-500e04d5.ttf +0 -0
- setta/static/frontend/assets/KaTeX_Size3-Regular-6ab6b62e.woff +0 -0
- setta/static/frontend/assets/KaTeX_Size4-Regular-99f9c675.woff +0 -0
- setta/static/frontend/assets/KaTeX_Size4-Regular-a4af7d41.woff2 +0 -0
- setta/static/frontend/assets/KaTeX_Size4-Regular-c647367d.ttf +0 -0
- setta/static/frontend/assets/KaTeX_Typewriter-Regular-71d517d6.woff2 +0 -0
- setta/static/frontend/assets/KaTeX_Typewriter-Regular-e14fed02.woff +0 -0
- setta/static/frontend/assets/KaTeX_Typewriter-Regular-f01f3e87.ttf +0 -0
- setta/static/frontend/assets/cormorant-garamond-all-700-italic-c9b58582.woff +0 -0
- setta/static/frontend/assets/cormorant-garamond-cyrillic-700-italic-9101ad5f.woff2 +0 -0
- setta/static/frontend/assets/cormorant-garamond-cyrillic-ext-700-italic-950de0d6.woff2 +0 -0
- setta/static/frontend/assets/cormorant-garamond-latin-700-italic-0bc53e12.woff2 +0 -0
- setta/static/frontend/assets/cormorant-garamond-latin-ext-700-italic-525738e0.woff2 +0 -0
- setta/static/frontend/assets/cormorant-garamond-vietnamese-700-italic-99563037.woff2 +0 -0
- setta/static/frontend/assets/erase-5e0448ea.svg +15 -0
- setta/static/frontend/assets/index-1d4b4ecf.css +32 -0
- setta/static/frontend/assets/index-ee99dc72.js +678 -0
- setta/static/frontend/assets/inter-all-400-normal-054f12d0.woff +0 -0
- setta/static/frontend/assets/inter-all-600-normal-c03769e5.woff +0 -0
- setta/static/frontend/assets/inter-all-800-normal-15dc6e4b.woff +0 -0
- setta/static/frontend/assets/inter-cyrillic-400-normal-a4eee61a.woff2 +0 -0
- setta/static/frontend/assets/inter-cyrillic-600-normal-8b14f703.woff2 +0 -0
- setta/static/frontend/assets/inter-cyrillic-800-normal-e706eaaa.woff2 +0 -0
- setta/static/frontend/assets/inter-cyrillic-ext-400-normal-70047a3b.woff2 +0 -0
- setta/static/frontend/assets/inter-cyrillic-ext-600-normal-d4ab9bc4.woff2 +0 -0
- setta/static/frontend/assets/inter-cyrillic-ext-800-normal-eae7515a.woff2 +0 -0
- setta/static/frontend/assets/inter-greek-400-normal-381ea30d.woff2 +0 -0
- setta/static/frontend/assets/inter-greek-600-normal-601f93a2.woff2 +0 -0
- setta/static/frontend/assets/inter-greek-800-normal-7af4fb64.woff2 +0 -0
- setta/static/frontend/assets/inter-greek-ext-400-normal-27027b17.woff2 +0 -0
- setta/static/frontend/assets/inter-greek-ext-600-normal-f2ddf9de.woff2 +0 -0
- setta/static/frontend/assets/inter-greek-ext-800-normal-4cb6189e.woff2 +0 -0
- setta/static/frontend/assets/inter-latin-400-normal-d56fec21.woff2 +0 -0
- setta/static/frontend/assets/inter-latin-600-normal-ff769fa6.woff2 +0 -0
- setta/static/frontend/assets/inter-latin-800-normal-5eea1309.woff2 +0 -0
- setta/static/frontend/assets/inter-latin-ext-400-normal-bb698d85.woff2 +0 -0
- setta/static/frontend/assets/inter-latin-ext-600-normal-ca4808f9.woff2 +0 -0
- setta/static/frontend/assets/inter-latin-ext-800-normal-ebdacc0f.woff2 +0 -0
- setta/static/frontend/assets/logo/logo.svg +8 -0
- setta/static/frontend/assets/pen-455d7d8a.svg +19 -0
- setta/static/frontend/assets/source-code-pro-all-500-normal-6bdaa03b.woff +0 -0
- setta/static/frontend/assets/source-code-pro-cyrillic-500-normal-288a0d68.woff2 +0 -0
- setta/static/frontend/assets/source-code-pro-cyrillic-ext-500-normal-b110a13b.woff2 +0 -0
- setta/static/frontend/assets/source-code-pro-greek-500-normal-04328acb.woff2 +0 -0
- setta/static/frontend/assets/source-code-pro-latin-500-normal-06edef1e.woff2 +0 -0
- setta/static/frontend/assets/source-code-pro-latin-ext-500-normal-6dc60d5e.woff2 +0 -0
- setta/static/frontend/assets/web-vitals-44a8e082.js +1 -0
- setta/static/frontend/assets/work-sans-all-400-normal-38034a3c.woff +0 -0
- setta/static/frontend/assets/work-sans-all-500-normal-550d64e5.woff +0 -0
- setta/static/frontend/assets/work-sans-all-600-normal-ccf14060.woff +0 -0
- setta/static/frontend/assets/work-sans-all-700-normal-494c2971.woff +0 -0
- setta/static/frontend/assets/work-sans-latin-400-normal-36735bc1.woff2 +0 -0
- setta/static/frontend/assets/work-sans-latin-500-normal-3790bfda.woff2 +0 -0
- setta/static/frontend/assets/work-sans-latin-600-normal-5fba494e.woff2 +0 -0
- setta/static/frontend/assets/work-sans-latin-700-normal-a5033d0a.woff2 +0 -0
- setta/static/frontend/assets/work-sans-latin-ext-400-normal-c20f571a.woff2 +0 -0
- setta/static/frontend/assets/work-sans-latin-ext-500-normal-0f5ac96c.woff2 +0 -0
- setta/static/frontend/assets/work-sans-latin-ext-600-normal-97a237d1.woff2 +0 -0
- setta/static/frontend/assets/work-sans-latin-ext-700-normal-103e112c.woff2 +0 -0
- setta/static/frontend/browserconfig.xml +9 -0
- setta/static/frontend/favicon-16x16.png +0 -0
- setta/static/frontend/favicon-32x32.png +0 -0
- setta/static/frontend/favicon.ico +0 -0
- setta/static/frontend/index.html +30 -0
- setta/static/frontend/manifest.json +25 -0
- setta/static/frontend/mstile-144x144.png +0 -0
- setta/static/frontend/mstile-150x150.png +0 -0
- setta/static/frontend/mstile-310x150.png +0 -0
- setta/static/frontend/mstile-310x310.png +0 -0
- setta/static/frontend/mstile-70x70.png +0 -0
- setta/static/frontend/robots.txt +3 -0
- setta/static/frontend/safari-pinned-tab.svg +18 -0
- setta/static/frontend/site.webmanifest +19 -0
- setta/static/seed/.DS_Store +0 -0
- setta/static/seed/examples/.DS_Store +0 -0
- setta/tasks/__init__.py +0 -0
- setta/tasks/fns/__init__.py +9 -0
- setta/tasks/fns/codeAreaAutocomplete.py +209 -0
- setta/tasks/fns/codeAreaFindTemplateVars.py +128 -0
- setta/tasks/fns/codeAreaInitializeCode.py +98 -0
- setta/tasks/fns/findEVRefs.py +236 -0
- setta/tasks/fns/parametersRequest.py +71 -0
- setta/tasks/fns/textFieldAutocomplete.py +210 -0
- setta/tasks/fns/textFieldInitializeCode.py +99 -0
- setta/tasks/fns/typeCheck.py +40 -0
- setta/tasks/fns/utils.py +134 -0
- setta/tasks/task_runner.py +29 -0
- setta/tasks/tasks.py +152 -0
- setta/tasks/utils.py +178 -0
- setta/terminals/__init__.py +0 -0
- setta/terminals/terminals.py +242 -0
- setta/terminals/utils.py +37 -0
- setta/utils/__init__.py +0 -0
- setta/utils/constants.py +148 -0
- setta/utils/generate_memorable_string.py +431 -0
- setta/utils/generate_new_filename.py +80 -0
- setta/utils/section_contents.py +133 -0
- setta/utils/utils.py +271 -0
- setta/utils/websocket_manager.py +91 -0
- setta-0.0.2.dist-info/LICENSE +201 -0
- setta-0.0.2.dist-info/METADATA +24 -0
- setta-0.0.2.dist-info/RECORD +263 -0
- {setta-0.0.1.dist-info → setta-0.0.2.dist-info}/WHEEL +1 -1
- setta-0.0.2.dist-info/entry_points.txt +2 -0
- setta-0.0.1.dist-info/METADATA +0 -18
- setta-0.0.1.dist-info/RECORD +0 -5
- {setta-0.0.1.dist-info → setta-0.0.2.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,139 @@
|
|
1
|
+
import json
|
2
|
+
|
3
|
+
from setta.database.db.sectionVariants.utils import (
|
4
|
+
with_ev_entry_defaults,
|
5
|
+
with_section_variant_defaults,
|
6
|
+
)
|
7
|
+
|
8
|
+
|
9
|
+
def load_section_variants(db, ids):
|
10
|
+
placeholders = ", ".join(["?"] * len(ids))
|
11
|
+
query = f"""
|
12
|
+
SELECT SectionVariantId.id, SectionVariantId.name, SectionVariantId.data, SectionVariantId.selectedItem, SectionVariantId.codeInfoColId, SectionVariantEV.codeInfoId, SectionVariantEV.data as valueData
|
13
|
+
FROM SectionVariantId
|
14
|
+
LEFT JOIN SectionVariantEV
|
15
|
+
ON SectionVariantId.id = SectionVariantEV.idid
|
16
|
+
WHERE SectionVariantId.id in ({placeholders})
|
17
|
+
"""
|
18
|
+
db.execute(query, ids)
|
19
|
+
output = {}
|
20
|
+
for row in db.fetchall():
|
21
|
+
id = row["id"]
|
22
|
+
if id not in output:
|
23
|
+
output[id] = with_section_variant_defaults(
|
24
|
+
name=row["name"],
|
25
|
+
selectedItem=row["selectedItem"],
|
26
|
+
codeInfoColId=row["codeInfoColId"],
|
27
|
+
**json.loads(row["data"]),
|
28
|
+
)
|
29
|
+
if row["valueData"]:
|
30
|
+
output[id]["values"][row["codeInfoId"]] = with_ev_entry_defaults(
|
31
|
+
**json.loads(row["valueData"])
|
32
|
+
)
|
33
|
+
|
34
|
+
query = f"""
|
35
|
+
SELECT SectionVariantId.id, SectionVariantChildren.childId, SectionVariantChildren."order"
|
36
|
+
FROM SectionVariantId
|
37
|
+
JOIN SectionVariantChildren
|
38
|
+
ON SectionVariantId.id = SectionVariantChildren.idid
|
39
|
+
WHERE SectionVariantId.id in ({placeholders})
|
40
|
+
ORDER BY SectionVariantChildren."order"
|
41
|
+
"""
|
42
|
+
db.execute(query, ids)
|
43
|
+
for row in db.fetchall():
|
44
|
+
output[row["id"]]["children"].append(row["childId"])
|
45
|
+
|
46
|
+
query = f"""
|
47
|
+
SELECT SectionVariantId.id, SectionVariantParamSweep.selectedItemGroupNum, SectionVariantParamSweep.paramInfoGroupNum, SectionVariantParamSweep.selectedItem, SectionVariantParamSweep.paramInfoId, SectionVariantParamSweep.value
|
48
|
+
FROM SectionVariantId
|
49
|
+
LEFT JOIN SectionVariantParamSweep
|
50
|
+
ON SectionVariantId.id = SectionVariantParamSweep.idid
|
51
|
+
WHERE SectionVariantId.id in ({placeholders})
|
52
|
+
ORDER BY SectionVariantParamSweep."order"
|
53
|
+
"""
|
54
|
+
db.execute(query, ids)
|
55
|
+
for row in db.fetchall():
|
56
|
+
id = row["id"]
|
57
|
+
if "sweep" not in output[id]:
|
58
|
+
output[id]["sweep"] = []
|
59
|
+
curr = output[id]["sweep"]
|
60
|
+
|
61
|
+
selectedItemGroupNum = row["selectedItemGroupNum"]
|
62
|
+
if selectedItemGroupNum is None:
|
63
|
+
continue
|
64
|
+
if len(curr) <= selectedItemGroupNum:
|
65
|
+
curr.append({"selectedItem": row["selectedItem"], "params": []})
|
66
|
+
curr = curr[selectedItemGroupNum]["params"]
|
67
|
+
|
68
|
+
paramInfoGroupNum = row["paramInfoGroupNum"]
|
69
|
+
if paramInfoGroupNum is None:
|
70
|
+
continue
|
71
|
+
if len(curr) <= paramInfoGroupNum:
|
72
|
+
curr.append({"paramInfoId": row["paramInfoId"], "values": []})
|
73
|
+
curr = curr[paramInfoGroupNum]["values"]
|
74
|
+
|
75
|
+
if row["value"] is not None:
|
76
|
+
curr.append(row["value"])
|
77
|
+
|
78
|
+
query = f"""
|
79
|
+
SELECT
|
80
|
+
SectionVariantId.id,
|
81
|
+
SectionVariantRunGroup.sectionId,
|
82
|
+
SectionVariantRunGroup.parentVariantId,
|
83
|
+
SectionVariantRunGroup.selected,
|
84
|
+
SectionVariantRunGroupVersions.versionId,
|
85
|
+
SectionVariantRunGroupVersions.selected as version_selected,
|
86
|
+
SectionVariantRunGroupParamSweeps.sweepId,
|
87
|
+
SectionVariantRunGroupParamSweeps.selected as sweep_selected
|
88
|
+
FROM SectionVariantId
|
89
|
+
LEFT JOIN SectionVariantRunGroup
|
90
|
+
ON SectionVariantId.id = SectionVariantRunGroup.idid
|
91
|
+
LEFT JOIN SectionVariantRunGroupVersions
|
92
|
+
ON SectionVariantRunGroup.idid = SectionVariantRunGroupVersions.idid
|
93
|
+
AND SectionVariantRunGroup.sectionId = SectionVariantRunGroupVersions.sectionId
|
94
|
+
AND (
|
95
|
+
(SectionVariantRunGroup.parentVariantId IS NULL AND SectionVariantRunGroupVersions.parentVariantId IS NULL)
|
96
|
+
OR SectionVariantRunGroup.parentVariantId = SectionVariantRunGroupVersions.parentVariantId
|
97
|
+
)
|
98
|
+
LEFT JOIN SectionVariantRunGroupParamSweeps
|
99
|
+
ON SectionVariantRunGroup.idid = SectionVariantRunGroupParamSweeps.idid
|
100
|
+
AND SectionVariantRunGroup.sectionId = SectionVariantRunGroupParamSweeps.sectionId
|
101
|
+
AND (
|
102
|
+
(SectionVariantRunGroup.parentVariantId IS NULL AND SectionVariantRunGroupParamSweeps.parentVariantId IS NULL)
|
103
|
+
OR SectionVariantRunGroup.parentVariantId = SectionVariantRunGroupParamSweeps.parentVariantId
|
104
|
+
)
|
105
|
+
WHERE SectionVariantId.id in ({placeholders})
|
106
|
+
"""
|
107
|
+
db.execute(query, ids)
|
108
|
+
for row in db.fetchall():
|
109
|
+
id = row["id"]
|
110
|
+
if "runGroup" not in output[id]:
|
111
|
+
output[id]["runGroup"] = {}
|
112
|
+
curr = output[id]["runGroup"]
|
113
|
+
sectionId = row["sectionId"]
|
114
|
+
|
115
|
+
if not sectionId:
|
116
|
+
continue
|
117
|
+
|
118
|
+
if sectionId not in curr:
|
119
|
+
curr[sectionId] = {}
|
120
|
+
if row["parentVariantId"] not in curr[sectionId]:
|
121
|
+
curr[sectionId][row["parentVariantId"]] = {
|
122
|
+
"selected": bool(row["selected"]),
|
123
|
+
"versions": {},
|
124
|
+
"paramSweeps": {},
|
125
|
+
}
|
126
|
+
|
127
|
+
# Add version data if present
|
128
|
+
if row["versionId"] is not None:
|
129
|
+
curr[sectionId][row["parentVariantId"]]["versions"][
|
130
|
+
row["versionId"]
|
131
|
+
] = bool(row["version_selected"])
|
132
|
+
|
133
|
+
# Add param sweep data if present
|
134
|
+
if row["sweepId"] is not None:
|
135
|
+
curr[sectionId][row["parentVariantId"]]["paramSweeps"][
|
136
|
+
row["sweepId"]
|
137
|
+
] = bool(row["sweep_selected"])
|
138
|
+
|
139
|
+
return output
|
@@ -0,0 +1,140 @@
|
|
1
|
+
import json
|
2
|
+
|
3
|
+
from setta.utils.constants import (
|
4
|
+
DEFAULT_VALUES,
|
5
|
+
SECTION_VARIANT_EV_TABLE_DATA_JSON_FIELDS,
|
6
|
+
SECTION_VARIANT_ID_TABLE_DATA_JSON_FIELDS,
|
7
|
+
)
|
8
|
+
from setta.utils.utils import filter_dict
|
9
|
+
|
10
|
+
|
11
|
+
def save_section_variants(db, section_variants):
|
12
|
+
query = """
|
13
|
+
INSERT INTO SectionVariantId (id, name, data, selectedItem, codeInfoColId)
|
14
|
+
VALUES (:id, :name, :data, :selectedItem, :codeInfoColId)
|
15
|
+
ON CONFLICT (id)
|
16
|
+
DO UPDATE SET
|
17
|
+
name = :name,
|
18
|
+
data = :data,
|
19
|
+
selectedItem = :selectedItem,
|
20
|
+
codeInfoColId = :codeInfoColId
|
21
|
+
"""
|
22
|
+
|
23
|
+
query_params = [
|
24
|
+
{
|
25
|
+
"id": k,
|
26
|
+
"name": v["name"],
|
27
|
+
"selectedItem": v["selectedItem"],
|
28
|
+
"codeInfoColId": v["codeInfoColId"],
|
29
|
+
"data": json.dumps(
|
30
|
+
filter_dict(
|
31
|
+
v,
|
32
|
+
SECTION_VARIANT_ID_TABLE_DATA_JSON_FIELDS,
|
33
|
+
DEFAULT_VALUES["sectionVariant"],
|
34
|
+
)
|
35
|
+
),
|
36
|
+
}
|
37
|
+
for k, v in section_variants.items()
|
38
|
+
]
|
39
|
+
db.executemany(query, query_params)
|
40
|
+
|
41
|
+
# delete entered values
|
42
|
+
placeholders = ", ".join(["?"] * len(section_variants))
|
43
|
+
query = f"""
|
44
|
+
DELETE FROM SectionVariantEV
|
45
|
+
WHERE idid IN ({placeholders})
|
46
|
+
"""
|
47
|
+
query_params = list(section_variants.keys())
|
48
|
+
db.execute(query, query_params)
|
49
|
+
|
50
|
+
# add entered values
|
51
|
+
query = """
|
52
|
+
INSERT INTO SectionVariantEV (idid, codeInfoId, data)
|
53
|
+
VALUES (:idid, :codeInfoId, :data)
|
54
|
+
"""
|
55
|
+
query_params = []
|
56
|
+
for idid, variant in section_variants.items():
|
57
|
+
for code_info_id, value_info in variant["values"].items():
|
58
|
+
query_params.append(
|
59
|
+
{
|
60
|
+
"idid": idid,
|
61
|
+
"codeInfoId": code_info_id,
|
62
|
+
"data": json.dumps(
|
63
|
+
filter_dict(
|
64
|
+
value_info,
|
65
|
+
SECTION_VARIANT_EV_TABLE_DATA_JSON_FIELDS,
|
66
|
+
DEFAULT_VALUES["evEntry"],
|
67
|
+
)
|
68
|
+
),
|
69
|
+
}
|
70
|
+
)
|
71
|
+
db.executemany(query, query_params)
|
72
|
+
|
73
|
+
query = f"""
|
74
|
+
DELETE FROM SectionVariantParamSweep
|
75
|
+
WHERE idid IN ({placeholders})
|
76
|
+
"""
|
77
|
+
query_params = list(section_variants.keys())
|
78
|
+
db.execute(query, query_params)
|
79
|
+
|
80
|
+
query = """
|
81
|
+
INSERT INTO SectionVariantParamSweep (idid, selectedItemGroupNum, paramInfoGroupNum, selectedItem, paramInfoId, "order", value)
|
82
|
+
VALUES (:idid, :selectedItemGroupNum, :paramInfoGroupNum, :selectedItem, :paramInfoId, :order, :value)
|
83
|
+
"""
|
84
|
+
|
85
|
+
query_params = []
|
86
|
+
for id, variant in section_variants.items():
|
87
|
+
order = 0
|
88
|
+
for selectedItemGroupNum, s in enumerate(variant["sweep"]):
|
89
|
+
selected_item = s["selectedItem"]
|
90
|
+
if len(s["params"]) == 0:
|
91
|
+
query_params.append(
|
92
|
+
generate_query_param(
|
93
|
+
id,
|
94
|
+
selectedItemGroupNum,
|
95
|
+
None,
|
96
|
+
selected_item,
|
97
|
+
None,
|
98
|
+
order,
|
99
|
+
None,
|
100
|
+
)
|
101
|
+
)
|
102
|
+
order += 1
|
103
|
+
else:
|
104
|
+
for paramInfoGroupNum, param in enumerate(s["params"]):
|
105
|
+
values = param["values"] or [None]
|
106
|
+
for value in values:
|
107
|
+
query_params.append(
|
108
|
+
generate_query_param(
|
109
|
+
id,
|
110
|
+
selectedItemGroupNum,
|
111
|
+
paramInfoGroupNum,
|
112
|
+
selected_item,
|
113
|
+
param["paramInfoId"],
|
114
|
+
order,
|
115
|
+
value,
|
116
|
+
)
|
117
|
+
)
|
118
|
+
order += 1
|
119
|
+
|
120
|
+
db.executemany(query, query_params)
|
121
|
+
|
122
|
+
|
123
|
+
def generate_query_param(
|
124
|
+
id,
|
125
|
+
selectedItemGroupNum,
|
126
|
+
paramInfoGroupNum,
|
127
|
+
selected_item,
|
128
|
+
param_info_id,
|
129
|
+
order,
|
130
|
+
value,
|
131
|
+
):
|
132
|
+
return {
|
133
|
+
"idid": id,
|
134
|
+
"selectedItemGroupNum": selectedItemGroupNum,
|
135
|
+
"paramInfoGroupNum": paramInfoGroupNum,
|
136
|
+
"selectedItem": selected_item,
|
137
|
+
"paramInfoId": param_info_id,
|
138
|
+
"order": order,
|
139
|
+
"value": value,
|
140
|
+
}
|
@@ -0,0 +1,44 @@
|
|
1
|
+
import copy
|
2
|
+
|
3
|
+
from setta.database.utils import create_new_id
|
4
|
+
from setta.utils.constants import DEFAULT_VALUES
|
5
|
+
from setta.utils.generate_memorable_string import generate_memorable_string
|
6
|
+
from setta.utils.utils import recursive_dict_merge
|
7
|
+
|
8
|
+
|
9
|
+
def new_section_variant(**kwargs):
|
10
|
+
id = kwargs.get("id", create_new_id())
|
11
|
+
kwargs["name"] = kwargs.get("name", generate_memorable_string())
|
12
|
+
obj = with_section_variant_defaults(**kwargs)
|
13
|
+
return id, obj
|
14
|
+
|
15
|
+
|
16
|
+
def with_section_variant_defaults(**kwargs):
|
17
|
+
return recursive_dict_merge(copy.deepcopy(DEFAULT_VALUES["sectionVariant"]), kwargs)
|
18
|
+
|
19
|
+
|
20
|
+
def add_defaults_to_section_variants(section_variants):
|
21
|
+
for k, v in section_variants.items():
|
22
|
+
section_variants[k] = with_section_variant_defaults(**v)
|
23
|
+
|
24
|
+
for paramId, valueInfo in section_variants[k]["values"].items():
|
25
|
+
section_variants[k]["values"][paramId] = with_ev_entry_defaults(**valueInfo)
|
26
|
+
evRefs = section_variants[k]["values"][paramId]["evRefs"]
|
27
|
+
for idx in range(len(evRefs)):
|
28
|
+
evRefs[idx] = with_ev_ref_entry_defaults(**evRefs[idx])
|
29
|
+
|
30
|
+
evRefs = section_variants[k]["evRefs"]
|
31
|
+
for idx in range(len(evRefs)):
|
32
|
+
evRefs[idx] = with_ev_ref_entry_defaults(**evRefs[idx])
|
33
|
+
|
34
|
+
|
35
|
+
def with_ev_entry_defaults(**kwargs):
|
36
|
+
return recursive_dict_merge(copy.deepcopy(DEFAULT_VALUES["evEntry"]), kwargs)
|
37
|
+
|
38
|
+
|
39
|
+
def new_ev_entry(**kwargs):
|
40
|
+
return with_ev_entry_defaults(**kwargs)
|
41
|
+
|
42
|
+
|
43
|
+
def with_ev_ref_entry_defaults(**kwargs):
|
44
|
+
return recursive_dict_merge(copy.deepcopy(DEFAULT_VALUES["evRefEntry"]), kwargs)
|
File without changes
|
@@ -0,0 +1,70 @@
|
|
1
|
+
from setta.database.utils import remap_ids, rename_keys
|
2
|
+
|
3
|
+
from ..codeInfo.copy import copy_code_info, copy_code_info_col
|
4
|
+
from ..sectionVariants.copy import (
|
5
|
+
copy_section_variants,
|
6
|
+
update_section_variant_children,
|
7
|
+
)
|
8
|
+
from ..uiTypes.copy import copy_ui_type_cols, copy_ui_types
|
9
|
+
|
10
|
+
|
11
|
+
def copy_sections(
|
12
|
+
sections,
|
13
|
+
section_variant_id_map,
|
14
|
+
ui_type_id_map,
|
15
|
+
ui_type_col_id_map,
|
16
|
+
):
|
17
|
+
new_sections, section_id_map = remap_ids(sections)
|
18
|
+
for section in new_sections.values():
|
19
|
+
section["id"] = section_id_map[section["id"]]
|
20
|
+
section["variantId"] = section_variant_id_map[section["variantId"]]
|
21
|
+
section["uiTypeId"] = ui_type_id_map[section["uiTypeId"]]
|
22
|
+
if section["uiTypeColId"]:
|
23
|
+
section["uiTypeColId"] = ui_type_col_id_map[section["uiTypeColId"]]
|
24
|
+
section["variantIds"] = [
|
25
|
+
section_variant_id_map[x] for x in section["variantIds"]
|
26
|
+
]
|
27
|
+
section["nonPresetUITypeIds"] = [
|
28
|
+
ui_type_id_map[x] for x in section["nonPresetUITypeIds"]
|
29
|
+
]
|
30
|
+
section["paramSweepSectionId"] = section_id_map.get(
|
31
|
+
section["paramSweepSectionId"], None
|
32
|
+
)
|
33
|
+
section["parentId"] = section_id_map.get(section["parentId"], None)
|
34
|
+
|
35
|
+
return new_sections, section_id_map
|
36
|
+
|
37
|
+
|
38
|
+
def copy_sections_and_other_info(x):
|
39
|
+
new_code_info, code_info_id_map = copy_code_info(x["codeInfo"])
|
40
|
+
new_code_info_cols, code_info_col_id_map = copy_code_info_col(
|
41
|
+
x["codeInfoCols"], code_info_id_map
|
42
|
+
)
|
43
|
+
new_section_variants, section_variant_id_map = copy_section_variants(
|
44
|
+
x["sectionVariants"], code_info_id_map, code_info_col_id_map
|
45
|
+
)
|
46
|
+
new_ui_types, ui_type_id_map = copy_ui_types(x["uiTypes"])
|
47
|
+
new_ui_type_cols, ui_type_col_id_map = copy_ui_type_cols(
|
48
|
+
x["uiTypeCols"], ui_type_id_map, code_info_id_map
|
49
|
+
)
|
50
|
+
new_sections, section_id_map = copy_sections(
|
51
|
+
x["sections"],
|
52
|
+
section_variant_id_map,
|
53
|
+
ui_type_id_map,
|
54
|
+
ui_type_col_id_map,
|
55
|
+
)
|
56
|
+
update_section_variant_children(new_section_variants, section_id_map)
|
57
|
+
|
58
|
+
return {
|
59
|
+
"codeInfo": new_code_info,
|
60
|
+
"codeInfoCols": new_code_info_cols,
|
61
|
+
"sectionVariants": new_section_variants,
|
62
|
+
"uiTypes": new_ui_types,
|
63
|
+
"uiTypeCols": new_ui_type_cols,
|
64
|
+
"sections": new_sections,
|
65
|
+
"section_id_map": section_id_map,
|
66
|
+
}
|
67
|
+
|
68
|
+
|
69
|
+
def copy_relative_positions(relative_positions, section_id_map):
|
70
|
+
return rename_keys(relative_positions, section_id_map)
|
@@ -0,0 +1,119 @@
|
|
1
|
+
import json
|
2
|
+
from collections import defaultdict
|
3
|
+
|
4
|
+
from setta.utils.constants import BASE_UI_TYPE_IDS, C, is_from_json_source
|
5
|
+
from setta.utils.utils import recursive_dict_merge, save_json_to_file, try_json
|
6
|
+
|
7
|
+
|
8
|
+
def save_json_source_data(p, section_ids=None, forking_from=None):
|
9
|
+
sections = {
|
10
|
+
k: v
|
11
|
+
for k, v in p["sections"].items()
|
12
|
+
if v.get("jsonSource", None) and ((not section_ids) or k in section_ids)
|
13
|
+
}
|
14
|
+
|
15
|
+
to_be_saved = defaultdict(dict)
|
16
|
+
|
17
|
+
forking_from_data = {}
|
18
|
+
if forking_from:
|
19
|
+
with open(forking_from, "r") as f:
|
20
|
+
forking_from_data = json.load(f)
|
21
|
+
|
22
|
+
for s in sections.values():
|
23
|
+
for variantId in s["variantIds"]:
|
24
|
+
variant = p["sectionVariants"][variantId]
|
25
|
+
codeInfoCol = p["codeInfoCols"][variant["codeInfoColId"]]
|
26
|
+
filename = variant["name"]
|
27
|
+
for k, children in codeInfoCol["children"].items():
|
28
|
+
if is_from_json_source(k):
|
29
|
+
metadata = json.loads(k.removeprefix(C.JSON_SOURCE_PREFIX))
|
30
|
+
key_path = metadata["key"]
|
31
|
+
value = try_getting_value(variant, k, children)
|
32
|
+
|
33
|
+
current_dict = add_key_path_to_dict(
|
34
|
+
to_be_saved[filename], key_path[:-1]
|
35
|
+
)
|
36
|
+
|
37
|
+
# Set the value at the final position
|
38
|
+
if key_path: # Only set if we have a path
|
39
|
+
current_dict[key_path[-1]] = value
|
40
|
+
|
41
|
+
# Make sure the jsonSourceKeys are present.
|
42
|
+
# (They might not be because they are completely empty)
|
43
|
+
add_key_path_to_dict(to_be_saved[filename], s["jsonSourceKeys"])
|
44
|
+
|
45
|
+
# Save each file
|
46
|
+
for filename, data in to_be_saved.items():
|
47
|
+
data = recursive_dict_merge(forking_from_data, data)
|
48
|
+
save_json_to_file(filename, data)
|
49
|
+
|
50
|
+
return to_be_saved
|
51
|
+
|
52
|
+
|
53
|
+
def try_getting_value(variant, codeInfoId, codeInfoChildren):
|
54
|
+
if len(codeInfoChildren) == 0:
|
55
|
+
if codeInfoId in variant["values"]:
|
56
|
+
return try_json(variant["values"][codeInfoId]["value"])
|
57
|
+
return ""
|
58
|
+
return {}
|
59
|
+
|
60
|
+
|
61
|
+
def add_key_path_to_dict(output, key_path):
|
62
|
+
for path_part in key_path:
|
63
|
+
# Create nested dictionaries if they don't exist
|
64
|
+
if path_part not in output:
|
65
|
+
output[path_part] = {}
|
66
|
+
output = output[path_part]
|
67
|
+
return output
|
68
|
+
|
69
|
+
|
70
|
+
def condition_keep_code_info(k, jsonCodeInfoWithUIType, keepCodeInfoThatHaveUITypes):
|
71
|
+
if keepCodeInfoThatHaveUITypes:
|
72
|
+
return k in jsonCodeInfoWithUIType or not is_from_json_source(k)
|
73
|
+
return not is_from_json_source(k)
|
74
|
+
|
75
|
+
|
76
|
+
def remove_json_source_data(p, keepCodeInfoThatHaveUITypes=True):
|
77
|
+
for variant in p["sectionVariants"].values():
|
78
|
+
variant["values"] = {
|
79
|
+
k: v for k, v in variant["values"].items() if not is_from_json_source(k)
|
80
|
+
}
|
81
|
+
|
82
|
+
jsonCodeInfoWithUIType = set()
|
83
|
+
if keepCodeInfoThatHaveUITypes:
|
84
|
+
for uiTypeCol in p["uiTypeCols"].values():
|
85
|
+
for paramInfoId, uiTypeInfo in uiTypeCol.items():
|
86
|
+
# we want to know which json source params have an associated uiTypeId
|
87
|
+
# only if it's not the base TEXT type, since that's the default
|
88
|
+
if (
|
89
|
+
is_from_json_source(paramInfoId)
|
90
|
+
and uiTypeInfo["uiTypeId"] != BASE_UI_TYPE_IDS[C.TEXT]
|
91
|
+
):
|
92
|
+
jsonCodeInfoWithUIType.add(paramInfoId)
|
93
|
+
|
94
|
+
p["codeInfo"] = {
|
95
|
+
k: v
|
96
|
+
for k, v in p["codeInfo"].items()
|
97
|
+
if condition_keep_code_info(
|
98
|
+
k, jsonCodeInfoWithUIType, keepCodeInfoThatHaveUITypes
|
99
|
+
)
|
100
|
+
}
|
101
|
+
|
102
|
+
for codeInfoColId in p["codeInfoCols"].keys():
|
103
|
+
codeInfoCol = p["codeInfoCols"][codeInfoColId]
|
104
|
+
codeInfoCol["children"] = {
|
105
|
+
k: v
|
106
|
+
for k, v in codeInfoCol["children"].items()
|
107
|
+
if k is None
|
108
|
+
or condition_keep_code_info(
|
109
|
+
k, jsonCodeInfoWithUIType, keepCodeInfoThatHaveUITypes
|
110
|
+
)
|
111
|
+
}
|
112
|
+
for id, children in codeInfoCol["children"].items():
|
113
|
+
codeInfoCol["children"][id] = [
|
114
|
+
c
|
115
|
+
for c in children
|
116
|
+
if condition_keep_code_info(
|
117
|
+
c, jsonCodeInfoWithUIType, keepCodeInfoThatHaveUITypes
|
118
|
+
)
|
119
|
+
]
|