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