setta 0.0.1.dev0__py3-none-any.whl → 0.0.2.dev0__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.dev0.dist-info/LICENSE +201 -0
- setta-0.0.2.dev0.dist-info/METADATA +24 -0
- setta-0.0.2.dev0.dist-info/RECORD +263 -0
- {setta-0.0.1.dev0.dist-info → setta-0.0.2.dev0.dist-info}/WHEEL +1 -1
- setta-0.0.2.dev0.dist-info/entry_points.txt +2 -0
- setta-0.0.1.dev0.dist-info/METADATA +0 -18
- setta-0.0.1.dev0.dist-info/RECORD +0 -5
- {setta-0.0.1.dev0.dist-info → setta-0.0.2.dev0.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,184 @@
|
|
1
|
+
import json
|
2
|
+
|
3
|
+
from setta.database.db.evRefs.load import (
|
4
|
+
load_ev_refs_into_data_structures,
|
5
|
+
load_template_vars_into_data_structures,
|
6
|
+
)
|
7
|
+
from setta.database.db.projects.utils import with_project_config_defaults
|
8
|
+
from setta.utils.utils import recursive_dict_merge
|
9
|
+
|
10
|
+
from ..codeInfo.load import load_code_info_cols
|
11
|
+
from ..sections.load import (
|
12
|
+
load_json_sources_into_data_structures,
|
13
|
+
load_section_configs,
|
14
|
+
load_sections,
|
15
|
+
)
|
16
|
+
|
17
|
+
|
18
|
+
class ProjectNotFound(Exception):
|
19
|
+
pass
|
20
|
+
|
21
|
+
|
22
|
+
def load_all_project_config_metadata(db):
|
23
|
+
query = """
|
24
|
+
SELECT
|
25
|
+
pc.id,
|
26
|
+
pc.name,
|
27
|
+
pc.data,
|
28
|
+
pcc.x,
|
29
|
+
pcc.y,
|
30
|
+
pcc.zIndex,
|
31
|
+
pcc.w,
|
32
|
+
pcc.h
|
33
|
+
FROM
|
34
|
+
ProjectConfig pc
|
35
|
+
LEFT JOIN
|
36
|
+
ProjectConfigChildren pcc ON pc.id = pcc.parentId
|
37
|
+
ORDER BY
|
38
|
+
pc.id;
|
39
|
+
"""
|
40
|
+
db.execute(query)
|
41
|
+
output = {}
|
42
|
+
for row in db.fetchall():
|
43
|
+
id = row["id"]
|
44
|
+
if id not in output:
|
45
|
+
output[id] = with_project_config_defaults(
|
46
|
+
id=row["id"],
|
47
|
+
name=row["name"],
|
48
|
+
childrenForPreviewImg=[],
|
49
|
+
**json.loads(row["data"]),
|
50
|
+
)
|
51
|
+
if row["x"]:
|
52
|
+
output[id]["childrenForPreviewImg"].append(
|
53
|
+
{
|
54
|
+
"x": row["x"],
|
55
|
+
"y": row["y"],
|
56
|
+
"zIndex": row["zIndex"],
|
57
|
+
"w": row["w"],
|
58
|
+
"h": row["h"],
|
59
|
+
}
|
60
|
+
)
|
61
|
+
|
62
|
+
default_name = load_default_config_name(db)
|
63
|
+
return list(output.values()), default_name
|
64
|
+
|
65
|
+
|
66
|
+
def load_project_config_metadata(db, config_name):
|
67
|
+
query = """
|
68
|
+
SELECT
|
69
|
+
ProjectConfig.id,
|
70
|
+
ProjectConfig.name,
|
71
|
+
ProjectConfig.data,
|
72
|
+
pcc.childId as childId,
|
73
|
+
pcc.x,
|
74
|
+
pcc.y,
|
75
|
+
pcc.zIndex,
|
76
|
+
pcc.w,
|
77
|
+
pcc.h
|
78
|
+
FROM
|
79
|
+
ProjectConfig
|
80
|
+
LEFT JOIN
|
81
|
+
ProjectConfigChildren pcc
|
82
|
+
ON
|
83
|
+
ProjectConfig.id = pcc.parentId
|
84
|
+
WHERE
|
85
|
+
name = :name
|
86
|
+
"""
|
87
|
+
|
88
|
+
query_params = {"name": config_name}
|
89
|
+
db.execute(query, query_params)
|
90
|
+
output = {}
|
91
|
+
for row in db.fetchall():
|
92
|
+
id = row["id"]
|
93
|
+
if id not in output:
|
94
|
+
output[id] = with_project_config_defaults(
|
95
|
+
id=row["id"],
|
96
|
+
name=row["name"],
|
97
|
+
**json.loads(row["data"]),
|
98
|
+
)
|
99
|
+
if row["childId"]:
|
100
|
+
output[id]["children"][row["childId"]] = {
|
101
|
+
"x": row["x"],
|
102
|
+
"y": row["y"],
|
103
|
+
"zIndex": row["zIndex"],
|
104
|
+
"w": row["w"],
|
105
|
+
"h": row["h"],
|
106
|
+
}
|
107
|
+
|
108
|
+
if len(output) > 1:
|
109
|
+
raise ValueError(f"output should be of length 1 but has length {len(output)}")
|
110
|
+
if len(output) == 0:
|
111
|
+
raise ProjectNotFound(f"{config_name} not found")
|
112
|
+
|
113
|
+
return list(output.values())[0]
|
114
|
+
|
115
|
+
|
116
|
+
def load_project_config(db, project_config_name):
|
117
|
+
projectConfig = load_project_config_metadata(db, project_config_name)
|
118
|
+
sections_data = load_sections(db, list(projectConfig["children"].keys()))
|
119
|
+
sectionConfigs = load_section_configs(db, projectConfig["id"])
|
120
|
+
sections = recursive_dict_merge(
|
121
|
+
sections_data["sections"], sectionConfigs, strict_top_level_keys=True
|
122
|
+
)
|
123
|
+
sectionVariants = sections_data["sectionVariants"]
|
124
|
+
artifactGroups = sections_data["artifactGroups"]
|
125
|
+
uiTypeCols = sections_data["uiTypeCols"]
|
126
|
+
uiTypes = sections_data["nonPresetUITypes"]
|
127
|
+
codeInfo, codeInfoCols = load_code_info_cols(db, sectionVariants)
|
128
|
+
load_ev_refs_into_data_structures(db, sectionVariants, codeInfo)
|
129
|
+
load_template_vars_into_data_structures(db, sectionVariants)
|
130
|
+
load_json_sources_into_data_structures(
|
131
|
+
sections, codeInfo, codeInfoCols, sectionVariants
|
132
|
+
)
|
133
|
+
|
134
|
+
return {
|
135
|
+
"projectConfig": projectConfig,
|
136
|
+
"sections": sections,
|
137
|
+
"sectionVariants": sectionVariants,
|
138
|
+
"artifactGroups": artifactGroups,
|
139
|
+
"uiTypes": uiTypes,
|
140
|
+
"uiTypeCols": uiTypeCols,
|
141
|
+
"codeInfo": codeInfo,
|
142
|
+
"codeInfoCols": codeInfoCols,
|
143
|
+
}
|
144
|
+
|
145
|
+
|
146
|
+
def load_project_config_names(db, excludeProjectConfigName=None):
|
147
|
+
query = """
|
148
|
+
SELECT
|
149
|
+
name
|
150
|
+
FROM
|
151
|
+
ProjectConfig
|
152
|
+
"""
|
153
|
+
|
154
|
+
if excludeProjectConfigName:
|
155
|
+
query += "WHERE name != :excludeProjectConfigName"
|
156
|
+
|
157
|
+
db.execute(query, {"excludeProjectConfigName": excludeProjectConfigName})
|
158
|
+
|
159
|
+
return [r[0] for r in db.fetchall()]
|
160
|
+
|
161
|
+
|
162
|
+
def load_full_project(db, excludeProjectConfigName=None):
|
163
|
+
config_names = load_project_config_names(db, excludeProjectConfigName)
|
164
|
+
configs = []
|
165
|
+
for c in config_names:
|
166
|
+
p = load_project_config(db, c)
|
167
|
+
configs.append(p)
|
168
|
+
|
169
|
+
return configs
|
170
|
+
|
171
|
+
|
172
|
+
def load_default_config_name(db):
|
173
|
+
query = """
|
174
|
+
SELECT pc.name
|
175
|
+
FROM Metadata m
|
176
|
+
JOIN ProjectConfig pc ON m.defaultProject = pc.id
|
177
|
+
WHERE m.id = 1;
|
178
|
+
"""
|
179
|
+
|
180
|
+
db.execute(query)
|
181
|
+
results = db.fetchall()
|
182
|
+
if len(results) > 0:
|
183
|
+
return results[0][0]
|
184
|
+
return None
|
@@ -0,0 +1,267 @@
|
|
1
|
+
import json
|
2
|
+
from collections import defaultdict
|
3
|
+
|
4
|
+
from setta.code_gen.export_selected import get_section_variants
|
5
|
+
from setta.database.db.artifacts.save import save_artifact_groups, save_artifacts
|
6
|
+
from setta.database.db.evRefs.save import save_ev_refs, save_template_vars
|
7
|
+
from setta.database.utils import create_new_id
|
8
|
+
from setta.utils.constants import (
|
9
|
+
DEFAULT_VALUES,
|
10
|
+
PROJECT_CONFIG_TABLE_DATA_JSON_FIELDS,
|
11
|
+
SECTION_CONFIG_TABLE_DATA_JSON_FIELDS,
|
12
|
+
USER_SETTINGS,
|
13
|
+
)
|
14
|
+
from setta.utils.generate_memorable_string import generate_memorable_available_string
|
15
|
+
from setta.utils.utils import filter_dict
|
16
|
+
|
17
|
+
from ..codeInfo.save import save_code_info, save_code_info_col
|
18
|
+
from ..sections.jsonSource import remove_json_source_data, save_json_source_data
|
19
|
+
from ..sections.save import save_sections
|
20
|
+
from ..sectionVariants.save import save_section_variants
|
21
|
+
from ..uiTypes.save import save_ui_type_cols, save_ui_types
|
22
|
+
|
23
|
+
|
24
|
+
def save_project_details(db, p):
|
25
|
+
save_json_source_data(p)
|
26
|
+
remove_json_source_data(p)
|
27
|
+
save_artifacts(db, p["artifacts"])
|
28
|
+
save_artifact_groups(db, p["artifactGroups"])
|
29
|
+
save_code_info(db, p["codeInfo"])
|
30
|
+
save_code_info_col(db, p["codeInfoCols"])
|
31
|
+
save_ui_types(db, p["uiTypes"])
|
32
|
+
save_ui_type_cols(db, p["uiTypeCols"])
|
33
|
+
save_section_variants(db, p["sectionVariants"])
|
34
|
+
save_sections(db, p["sections"], p["sectionVariants"])
|
35
|
+
save_ev_refs(db, p["sectionVariants"], p["codeInfo"])
|
36
|
+
save_template_vars(db, p["sectionVariants"])
|
37
|
+
save_project(db, p["projectConfig"])
|
38
|
+
save_section_configs(db, p["projectConfig"]["id"], p["sections"])
|
39
|
+
update_linked_project_configs(db, p)
|
40
|
+
|
41
|
+
|
42
|
+
def save_project(db, project):
|
43
|
+
query = """
|
44
|
+
INSERT INTO ProjectConfig (id, name, data)
|
45
|
+
VALUES (:id, :name, :data)
|
46
|
+
ON CONFLICT (id)
|
47
|
+
DO UPDATE SET
|
48
|
+
name = :name,
|
49
|
+
data = :data
|
50
|
+
"""
|
51
|
+
|
52
|
+
query_params = {
|
53
|
+
"id": project["id"],
|
54
|
+
"name": project["name"],
|
55
|
+
"data": json.dumps(
|
56
|
+
filter_dict(
|
57
|
+
project,
|
58
|
+
PROJECT_CONFIG_TABLE_DATA_JSON_FIELDS,
|
59
|
+
DEFAULT_VALUES["projectConfig"],
|
60
|
+
)
|
61
|
+
),
|
62
|
+
}
|
63
|
+
db.execute(query, query_params)
|
64
|
+
|
65
|
+
query = """
|
66
|
+
DELETE FROM ProjectConfigChildren
|
67
|
+
WHERE parentId = :parentId
|
68
|
+
"""
|
69
|
+
db.execute(query, {"parentId": project["id"]})
|
70
|
+
|
71
|
+
query = """
|
72
|
+
INSERT INTO ProjectConfigChildren (parentId, childId, x, y, zIndex, w, h)
|
73
|
+
VALUES (:parentId, :childId, :x, :y, :zIndex, :w, :h)
|
74
|
+
"""
|
75
|
+
query_params = []
|
76
|
+
query_params.extend(
|
77
|
+
[
|
78
|
+
{
|
79
|
+
"parentId": project["id"],
|
80
|
+
"childId": childId,
|
81
|
+
"x": details["x"],
|
82
|
+
"y": details["y"],
|
83
|
+
"zIndex": details["zIndex"],
|
84
|
+
"w": details["w"],
|
85
|
+
"h": details["h"],
|
86
|
+
}
|
87
|
+
for childId, details in project["children"].items()
|
88
|
+
]
|
89
|
+
)
|
90
|
+
db.executemany(query, query_params)
|
91
|
+
|
92
|
+
|
93
|
+
def create_project_config(db, name, previewImgColor):
|
94
|
+
query = """
|
95
|
+
SELECT name
|
96
|
+
FROM ProjectConfig
|
97
|
+
"""
|
98
|
+
db.execute(query)
|
99
|
+
taken_names = [row[0] for row in db.fetchall()]
|
100
|
+
|
101
|
+
name = generate_memorable_available_string(taken_names)
|
102
|
+
|
103
|
+
query = """
|
104
|
+
INSERT INTO ProjectConfig (id, name, data)
|
105
|
+
VALUES (:id, :name, :data)
|
106
|
+
"""
|
107
|
+
projectId = create_new_id()
|
108
|
+
query_params = {
|
109
|
+
"id": projectId,
|
110
|
+
"name": name,
|
111
|
+
"data": json.dumps(
|
112
|
+
{
|
113
|
+
"previewImgColor": previewImgColor,
|
114
|
+
"viewport": {
|
115
|
+
"x": 0,
|
116
|
+
"y": 0,
|
117
|
+
"zoom": USER_SETTINGS["gui"]["defaultZoomLevel"],
|
118
|
+
},
|
119
|
+
}
|
120
|
+
),
|
121
|
+
}
|
122
|
+
db.execute(query, query_params)
|
123
|
+
return name
|
124
|
+
|
125
|
+
|
126
|
+
def save_project_config_name(db, curr_name, new_name):
|
127
|
+
query = """
|
128
|
+
UPDATE ProjectConfig
|
129
|
+
SET name = :new_name
|
130
|
+
WHERE name = :curr_name
|
131
|
+
"""
|
132
|
+
query_params = {"curr_name": curr_name, "new_name": new_name}
|
133
|
+
db.execute(query, query_params)
|
134
|
+
|
135
|
+
|
136
|
+
def set_as_default_project(db, projectId):
|
137
|
+
query = """
|
138
|
+
UPDATE Metadata
|
139
|
+
SET defaultProject = :projectId
|
140
|
+
WHERE id = 1;
|
141
|
+
"""
|
142
|
+
db.execute(query, {"projectId": projectId})
|
143
|
+
|
144
|
+
|
145
|
+
def save_section_configs(db, project_config_id, sections):
|
146
|
+
query_params = []
|
147
|
+
for section_id in sections.keys():
|
148
|
+
query_params.extend([project_config_id, section_id])
|
149
|
+
placeholders = ", ".join(["(?, ?)"] * (len(query_params) // 2))
|
150
|
+
query = f"""
|
151
|
+
DELETE FROM SectionConfig
|
152
|
+
WHERE (projectConfigId, sectionId) IN ({placeholders})
|
153
|
+
"""
|
154
|
+
db.execute(query, query_params)
|
155
|
+
|
156
|
+
query = f"""
|
157
|
+
DELETE FROM SectionConfigSelectedVariants
|
158
|
+
WHERE (projectConfigId, sectionId) IN ({placeholders})
|
159
|
+
"""
|
160
|
+
db.execute(query, query_params)
|
161
|
+
|
162
|
+
id_pairs = [(project_config_id, s) for s in sections.keys()]
|
163
|
+
insert_section_configs(db, sections, id_pairs)
|
164
|
+
|
165
|
+
|
166
|
+
def insert_section_configs(db, sections, id_pairs):
|
167
|
+
query = """
|
168
|
+
INSERT INTO SectionConfig (projectConfigId, sectionId, variantId, data)
|
169
|
+
VALUES (:projectConfigId, :sectionId, :variantId, :data)
|
170
|
+
"""
|
171
|
+
|
172
|
+
query_params = [
|
173
|
+
{
|
174
|
+
"projectConfigId": projectConfigId,
|
175
|
+
"sectionId": sections[c]["id"],
|
176
|
+
"variantId": sections[c]["variantId"],
|
177
|
+
"data": json.dumps(
|
178
|
+
filter_dict(
|
179
|
+
sections[c],
|
180
|
+
SECTION_CONFIG_TABLE_DATA_JSON_FIELDS,
|
181
|
+
DEFAULT_VALUES["section"],
|
182
|
+
)
|
183
|
+
),
|
184
|
+
}
|
185
|
+
for projectConfigId, c in id_pairs
|
186
|
+
]
|
187
|
+
|
188
|
+
db.executemany(query, query_params)
|
189
|
+
|
190
|
+
query = """
|
191
|
+
INSERT INTO SectionConfigSelectedVariants (projectConfigId, sectionId, variantId)
|
192
|
+
VALUES (:projectConfigId, :sectionId, :variantId)
|
193
|
+
"""
|
194
|
+
query_params = []
|
195
|
+
for projectConfigId, c in id_pairs:
|
196
|
+
query_params.extend(
|
197
|
+
{
|
198
|
+
"projectConfigId": projectConfigId,
|
199
|
+
"sectionId": sections[c]["id"],
|
200
|
+
"variantId": k,
|
201
|
+
}
|
202
|
+
for k in sections[c]["selectedVariantIds"].keys()
|
203
|
+
)
|
204
|
+
|
205
|
+
db.executemany(query, query_params)
|
206
|
+
|
207
|
+
|
208
|
+
# If multiple project configs share a section,
|
209
|
+
# and that section has children,
|
210
|
+
# then if a new child is added in one of those project configs,
|
211
|
+
# an entry in SectionConfig needs to be added for ALL project configs.
|
212
|
+
# Otherwise when loading those other project configs,
|
213
|
+
# the data for the new child will be missing.
|
214
|
+
def update_linked_project_configs(db, project):
|
215
|
+
query = """
|
216
|
+
SELECT projectConfigId, sectionId
|
217
|
+
FROM SectionConfig
|
218
|
+
WHERE projectConfigId != ?
|
219
|
+
"""
|
220
|
+
project_config = project["projectConfig"]
|
221
|
+
db.execute(query, (project_config["id"],))
|
222
|
+
sections_to_project_configs = defaultdict(set)
|
223
|
+
project_configs_to_sections = defaultdict(set)
|
224
|
+
for row in db.fetchall():
|
225
|
+
sections_to_project_configs[row["sectionId"]].add(row["projectConfigId"])
|
226
|
+
project_configs_to_sections[row["projectConfigId"]].add(row["sectionId"])
|
227
|
+
|
228
|
+
section_configs_to_add = set()
|
229
|
+
children_have_been_visited = set()
|
230
|
+
has_been_visited_as_child = set()
|
231
|
+
# we start with top level sections that are also in other project configs
|
232
|
+
ids = set(
|
233
|
+
k for k in project_config["children"].keys() if k in sections_to_project_configs
|
234
|
+
)
|
235
|
+
while len(ids) > 0:
|
236
|
+
curr = ids.pop()
|
237
|
+
if curr in children_have_been_visited:
|
238
|
+
continue
|
239
|
+
children_have_been_visited.add(curr)
|
240
|
+
for variant in get_section_variants(project, curr):
|
241
|
+
children = variant["children"]
|
242
|
+
for c in children:
|
243
|
+
if c in has_been_visited_as_child:
|
244
|
+
continue
|
245
|
+
has_been_visited_as_child.add(c)
|
246
|
+
c_already_in_at_least_one_other_config = False
|
247
|
+
for other_project_config in sections_to_project_configs[curr]:
|
248
|
+
other_project_section_configs = project_configs_to_sections[
|
249
|
+
other_project_config
|
250
|
+
]
|
251
|
+
# The parent (curr) is in other project configs, but the child is not.
|
252
|
+
# So we need to add the child to the other project configs that it's not in.
|
253
|
+
if c not in other_project_section_configs:
|
254
|
+
section_configs_to_add.add((other_project_config, c))
|
255
|
+
else:
|
256
|
+
c_already_in_at_least_one_other_config = True
|
257
|
+
|
258
|
+
# The child is already in at least one other project config.
|
259
|
+
# So we need to recurse into the child, to see if its children
|
260
|
+
# need to be added.
|
261
|
+
if (
|
262
|
+
c_already_in_at_least_one_other_config
|
263
|
+
and c not in children_have_been_visited
|
264
|
+
):
|
265
|
+
ids.add(c)
|
266
|
+
|
267
|
+
insert_section_configs(db, project["sections"], section_configs_to_add)
|
@@ -0,0 +1,40 @@
|
|
1
|
+
import copy
|
2
|
+
|
3
|
+
from ..sections.jsonSource import remove_json_source_data
|
4
|
+
from .copy import copy_project_config, copy_project_details
|
5
|
+
from .save import save_project_details
|
6
|
+
|
7
|
+
|
8
|
+
def save_as_new_project_config(db, project, new_config_name, with_refs):
|
9
|
+
remove_json_source_data(project)
|
10
|
+
if not with_refs:
|
11
|
+
project_to_save = copy_project_details(
|
12
|
+
project, new_config_name, do_create_new_id=True
|
13
|
+
)
|
14
|
+
else:
|
15
|
+
project_to_save = copy.deepcopy(project)
|
16
|
+
project_to_save["projectConfig"] = copy_project_config(
|
17
|
+
project_to_save["projectConfig"], new_config_name, do_create_new_id=True
|
18
|
+
)
|
19
|
+
save_project_details(db, project_to_save)
|
20
|
+
return project_to_save
|
21
|
+
|
22
|
+
|
23
|
+
def save_as_existing_project_config(db, project, config_name):
|
24
|
+
remove_json_source_data(project)
|
25
|
+
query = """
|
26
|
+
SELECT *
|
27
|
+
FROM ProjectConfig
|
28
|
+
WHERE name = :config_name
|
29
|
+
"""
|
30
|
+
|
31
|
+
db.execute(query, {"config_name": config_name})
|
32
|
+
x = db.fetchone()
|
33
|
+
project["projectConfig"] = {
|
34
|
+
**project["projectConfig"],
|
35
|
+
"id": x["id"],
|
36
|
+
"name": x["name"],
|
37
|
+
}
|
38
|
+
project_to_save = copy_project_details(project)
|
39
|
+
save_project_details(db, project_to_save)
|
40
|
+
return project_to_save
|
@@ -0,0 +1,135 @@
|
|
1
|
+
import copy
|
2
|
+
|
3
|
+
from setta.database.db.artifacts.utils import add_defaults_to_artifacts
|
4
|
+
from setta.database.db.codeInfo.utils import (
|
5
|
+
add_defaults_to_code_info,
|
6
|
+
add_defaults_to_code_info_cols,
|
7
|
+
)
|
8
|
+
from setta.database.db.sections.load import load_json_sources_into_data_structures
|
9
|
+
from setta.database.db.sections.utils import add_defaults_to_sections
|
10
|
+
from setta.database.db.sectionVariants.utils import add_defaults_to_section_variants
|
11
|
+
from setta.database.db.uiTypes.utils import (
|
12
|
+
add_defaults_to_ui_type_cols,
|
13
|
+
add_defaults_to_ui_types,
|
14
|
+
)
|
15
|
+
from setta.utils.constants import DEFAULT_VALUES
|
16
|
+
from setta.utils.utils import filter_dict, recursive_dict_merge
|
17
|
+
|
18
|
+
|
19
|
+
def with_project_config_defaults(**kwargs):
|
20
|
+
return recursive_dict_merge(copy.deepcopy(DEFAULT_VALUES["projectConfig"]), kwargs)
|
21
|
+
|
22
|
+
|
23
|
+
def add_defaults_to_project(p):
|
24
|
+
p["projectConfig"] = with_project_config_defaults(**p["projectConfig"])
|
25
|
+
add_defaults_to_artifacts(p["artifacts"])
|
26
|
+
add_defaults_to_sections(p["sections"])
|
27
|
+
add_defaults_to_section_variants(p["sectionVariants"])
|
28
|
+
add_defaults_to_code_info(p["codeInfo"])
|
29
|
+
add_defaults_to_code_info_cols(p["codeInfoCols"])
|
30
|
+
add_defaults_to_ui_types(p["uiTypes"])
|
31
|
+
add_defaults_to_ui_type_cols(p["uiTypeCols"])
|
32
|
+
|
33
|
+
|
34
|
+
def add_defaults_to_project_and_load_json_sources(p):
|
35
|
+
add_defaults_to_project(p)
|
36
|
+
load_json_sources_into_data_structures(
|
37
|
+
p["sections"], p["codeInfo"], p["codeInfoCols"], p["sectionVariants"]
|
38
|
+
)
|
39
|
+
|
40
|
+
|
41
|
+
def remove_empty(x):
|
42
|
+
return {k: v for k, v in x.items() if len(v) > 0}
|
43
|
+
|
44
|
+
|
45
|
+
def filter_data_for_json_export(p):
|
46
|
+
p["projectConfig"] = filter_dict(
|
47
|
+
p["projectConfig"],
|
48
|
+
DEFAULT_VALUES["projectConfig"].keys(),
|
49
|
+
DEFAULT_VALUES["projectConfig"],
|
50
|
+
)
|
51
|
+
|
52
|
+
for k, v in p["codeInfo"].items():
|
53
|
+
p["codeInfo"][k] = filter_dict(
|
54
|
+
p["codeInfo"][k],
|
55
|
+
DEFAULT_VALUES["codeInfo"].keys(),
|
56
|
+
DEFAULT_VALUES["codeInfo"],
|
57
|
+
)
|
58
|
+
for idx in range(len(v["evRefs"])):
|
59
|
+
v["evRefs"][idx] = filter_dict(
|
60
|
+
v["evRefs"][idx],
|
61
|
+
DEFAULT_VALUES["evRefEntry"].keys(),
|
62
|
+
DEFAULT_VALUES["evRefEntry"],
|
63
|
+
)
|
64
|
+
|
65
|
+
for k, v in p["codeInfoCols"].items():
|
66
|
+
p["codeInfoCols"][k] = filter_dict(
|
67
|
+
p["codeInfoCols"][k],
|
68
|
+
DEFAULT_VALUES["codeInfoCol"].keys(),
|
69
|
+
DEFAULT_VALUES["codeInfoCol"],
|
70
|
+
)
|
71
|
+
p["codeInfoCols"] = remove_empty(p["codeInfoCols"])
|
72
|
+
|
73
|
+
for k, v in p["uiTypes"].items():
|
74
|
+
p["uiTypes"][k] = filter_dict(
|
75
|
+
p["uiTypes"][k], DEFAULT_VALUES["uiType"].keys(), DEFAULT_VALUES["uiType"]
|
76
|
+
)
|
77
|
+
|
78
|
+
for k, v in p["uiTypeCols"].items():
|
79
|
+
for paramId, uiTypeColInfo in v.items():
|
80
|
+
p["uiTypeCols"][k][paramId] = filter_dict(
|
81
|
+
p["uiTypeCols"][k][paramId],
|
82
|
+
DEFAULT_VALUES["uiTypeColEntry"].keys(),
|
83
|
+
DEFAULT_VALUES["uiTypeColEntry"],
|
84
|
+
)
|
85
|
+
|
86
|
+
p["uiTypeCols"][k] = remove_empty(p["uiTypeCols"][k])
|
87
|
+
p["uiTypeCols"] = remove_empty(p["uiTypeCols"])
|
88
|
+
|
89
|
+
for k, v in p["sections"].items():
|
90
|
+
if len(p["uiTypeCols"].get(v["uiTypeColId"], {})) == 0:
|
91
|
+
v["uiTypeColId"] = None
|
92
|
+
|
93
|
+
p["sections"][k] = filter_dict(
|
94
|
+
p["sections"][k],
|
95
|
+
DEFAULT_VALUES["section"].keys(),
|
96
|
+
DEFAULT_VALUES["section"],
|
97
|
+
)
|
98
|
+
|
99
|
+
for k, v in p["sectionVariants"].items():
|
100
|
+
if len(p["codeInfoCols"].get(v["codeInfoColId"], {})) == 0:
|
101
|
+
v["codeInfoColId"] = None
|
102
|
+
|
103
|
+
curr = p["sectionVariants"]
|
104
|
+
curr[k] = filter_dict(
|
105
|
+
curr[k],
|
106
|
+
DEFAULT_VALUES["sectionVariant"].keys(),
|
107
|
+
DEFAULT_VALUES["sectionVariant"],
|
108
|
+
)
|
109
|
+
|
110
|
+
if "evRefs" in curr[k]:
|
111
|
+
evRefs = curr[k]["evRefs"]
|
112
|
+
for idx in range(len(evRefs)):
|
113
|
+
evRefs[idx] = filter_dict(
|
114
|
+
evRefs[idx],
|
115
|
+
DEFAULT_VALUES["evRefEntry"].keys(),
|
116
|
+
DEFAULT_VALUES["evRefEntry"],
|
117
|
+
)
|
118
|
+
|
119
|
+
if "values" in curr[k]:
|
120
|
+
for paramId in curr[k]["values"].keys():
|
121
|
+
evRefs = curr[k]["values"][paramId]["evRefs"]
|
122
|
+
for idx in range(len(evRefs)):
|
123
|
+
evRefs[idx] = filter_dict(
|
124
|
+
evRefs[idx],
|
125
|
+
DEFAULT_VALUES["evRefEntry"].keys(),
|
126
|
+
DEFAULT_VALUES["evRefEntry"],
|
127
|
+
)
|
128
|
+
|
129
|
+
curr[k]["values"][paramId] = filter_dict(
|
130
|
+
curr[k]["values"][paramId],
|
131
|
+
DEFAULT_VALUES["evEntry"].keys(),
|
132
|
+
DEFAULT_VALUES["evEntry"],
|
133
|
+
)
|
134
|
+
|
135
|
+
curr[k]["values"] = remove_empty(curr[k]["values"])
|
File without changes
|
@@ -0,0 +1,28 @@
|
|
1
|
+
from setta.database.utils import remap_ids, rename_keys
|
2
|
+
from setta.utils.generate_memorable_string import generate_memorable_string
|
3
|
+
|
4
|
+
|
5
|
+
def copy_section_variants(section_variants, code_info_id_map, code_info_col_id_map):
|
6
|
+
new_section_variants, section_variant_id_map = remap_ids(section_variants)
|
7
|
+
|
8
|
+
for obj in new_section_variants.values():
|
9
|
+
obj["name"] = generate_memorable_string()
|
10
|
+
obj["values"] = rename_keys(obj["values"], code_info_id_map)
|
11
|
+
if obj["codeInfoColId"]:
|
12
|
+
obj["codeInfoColId"] = code_info_col_id_map[obj["codeInfoColId"]]
|
13
|
+
if obj["selectedItem"]:
|
14
|
+
obj["selectedItem"] = code_info_id_map[obj["selectedItem"]]
|
15
|
+
|
16
|
+
# param sweep
|
17
|
+
for s in obj["sweep"]:
|
18
|
+
if s["selectedItem"]:
|
19
|
+
s["selectedItem"] = code_info_id_map[s["selectedItem"]]
|
20
|
+
for p in s["params"]:
|
21
|
+
p["paramInfoId"] = code_info_id_map[p["paramInfoId"]]
|
22
|
+
|
23
|
+
return new_section_variants, section_variant_id_map
|
24
|
+
|
25
|
+
|
26
|
+
def update_section_variant_children(section_variants, section_id_map):
|
27
|
+
for obj in section_variants.values():
|
28
|
+
obj["children"] = [section_id_map[x] for x in obj["children"]]
|