v2.0.0
Loading...
Searching...
No Matches
mna_script.cpp
Go to the documentation of this file.
1//=============================================================================================================
34
35//=============================================================================================================
36// INCLUDES
37//=============================================================================================================
38
39#include "mna_script.h"
40
41#include <QJsonArray>
42#include <QCborArray>
43
44//=============================================================================================================
45// USED NAMESPACES
46//=============================================================================================================
47
48using namespace MNALIB;
49
50//=============================================================================================================
51// DEFINE MEMBER METHODS
52//=============================================================================================================
53
54QJsonObject MnaScript::toJson() const
55{
56 QJsonObject json;
57 json[QStringLiteral("language")] = language;
58
59 if (!interpreter.isEmpty()) {
60 json[QStringLiteral("interpreter")] = interpreter;
61 }
62
63 if (!interpreterArgs.isEmpty()) {
64 QJsonArray arr;
65 for (const QString& a : interpreterArgs) {
66 arr.append(a);
67 }
68 json[QStringLiteral("interpreter_args")] = arr;
69 }
70
71 json[QStringLiteral("code")] = code;
72
73 if (!sourceUri.isEmpty()) {
74 json[QStringLiteral("source_uri")] = sourceUri;
75 }
76
77 if (!codeSha256.isEmpty()) {
78 json[QStringLiteral("code_sha256")] = codeSha256;
79 }
80
81 if (keepTempFile) {
82 json[QStringLiteral("keep_temp_file")] = true;
83 }
84
85 return json;
86}
87
88//=============================================================================================================
89
90MnaScript MnaScript::fromJson(const QJsonObject& json)
91{
92 MnaScript s;
93 s.language = json.value(QStringLiteral("language")).toString();
94 s.interpreter = json.value(QStringLiteral("interpreter")).toString();
95 s.code = json.value(QStringLiteral("code")).toString();
96 s.sourceUri = json.value(QStringLiteral("source_uri")).toString();
97 s.codeSha256 = json.value(QStringLiteral("code_sha256")).toString();
98 s.keepTempFile = json.value(QStringLiteral("keep_temp_file")).toBool(false);
99
100 const QJsonArray arr = json.value(QStringLiteral("interpreter_args")).toArray();
101 for (const QJsonValue& v : arr) {
102 s.interpreterArgs.append(v.toString());
103 }
104
105 return s;
106}
107
108//=============================================================================================================
109
110QCborMap MnaScript::toCbor() const
111{
112 QCborMap cbor;
113 cbor.insert(QStringLiteral("language"), language);
114
115 if (!interpreter.isEmpty()) {
116 cbor.insert(QStringLiteral("interpreter"), interpreter);
117 }
118
119 if (!interpreterArgs.isEmpty()) {
120 QCborArray arr;
121 for (const QString& a : interpreterArgs) {
122 arr.append(a);
123 }
124 cbor.insert(QStringLiteral("interpreter_args"), arr);
125 }
126
127 cbor.insert(QStringLiteral("code"), code);
128
129 if (!sourceUri.isEmpty()) {
130 cbor.insert(QStringLiteral("source_uri"), sourceUri);
131 }
132
133 if (!codeSha256.isEmpty()) {
134 cbor.insert(QStringLiteral("code_sha256"), codeSha256);
135 }
136
137 if (keepTempFile) {
138 cbor.insert(QStringLiteral("keep_temp_file"), true);
139 }
140
141 return cbor;
142}
143
144//=============================================================================================================
145
146MnaScript MnaScript::fromCbor(const QCborMap& cbor)
147{
148 MnaScript s;
149 s.language = cbor.value(QStringLiteral("language")).toString();
150 s.interpreter = cbor.value(QStringLiteral("interpreter")).toString();
151 s.code = cbor.value(QStringLiteral("code")).toString();
152 s.sourceUri = cbor.value(QStringLiteral("source_uri")).toString();
153 s.codeSha256 = cbor.value(QStringLiteral("code_sha256")).toString();
154 s.keepTempFile = cbor.value(QStringLiteral("keep_temp_file")).toBool();
155
156 const QCborArray arr = cbor.value(QStringLiteral("interpreter_args")).toArray();
157 for (const QCborValue& v : arr) {
158 s.interpreterArgs.append(v.toString());
159 }
160
161 return s;
162}
MnaScript struct declaration — inline code embedded in a graph node.
MNE Analysis Container Format (mna/mnx).
Inline code for script-type graph nodes.
Definition mna_script.h:69
bool keepTempFile
true → preserve temp script file after execution (debug aid)
Definition mna_script.h:78
QString code
The inline source code (resolved at save-time if sourceUri is set).
Definition mna_script.h:74
static MnaScript fromJson(const QJsonObject &json)
static MnaScript fromCbor(const QCborMap &cbor)
QString codeSha256
SHA-256 of code for integrity verification.
Definition mna_script.h:77
QString interpreter
Definition mna_script.h:71
QString language
"python", "shell", "r", "matlab", "octave", "julia"
Definition mna_script.h:70
QJsonObject toJson() const
QStringList interpreterArgs
Extra args before the script file (e.g. ["-u"] for unbuffered Python).
Definition mna_script.h:73
QCborMap toCbor() const