fprime-gds 4.0.2a2__py3-none-any.whl → 4.0.2a4__py3-none-any.whl

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 (31) hide show
  1. fprime_gds/common/distributor/distributor.py +9 -6
  2. fprime_gds/common/fpy/README.md +190 -42
  3. fprime_gds/common/fpy/SPEC.md +153 -39
  4. fprime_gds/common/fpy/bytecode/assembler.py +62 -0
  5. fprime_gds/common/fpy/bytecode/directives.py +620 -294
  6. fprime_gds/common/fpy/codegen.py +687 -910
  7. fprime_gds/common/fpy/grammar.lark +44 -9
  8. fprime_gds/common/fpy/main.py +27 -4
  9. fprime_gds/common/fpy/model.py +799 -0
  10. fprime_gds/common/fpy/parser.py +29 -34
  11. fprime_gds/common/fpy/test_helpers.py +119 -0
  12. fprime_gds/common/fpy/types.py +563 -0
  13. fprime_gds/common/models/dictionaries.py +23 -0
  14. fprime_gds/common/pipeline/standard.py +5 -0
  15. fprime_gds/common/testing_fw/api.py +8 -1
  16. fprime_gds/executables/cli.py +9 -0
  17. fprime_gds/executables/run_deployment.py +2 -0
  18. fprime_gds/flask/app.py +17 -2
  19. fprime_gds/flask/default_settings.py +1 -0
  20. fprime_gds/flask/static/index.html +7 -4
  21. fprime_gds/flask/static/js/config.js +9 -1
  22. fprime_gds/flask/static/js/vue-support/channel.js +16 -0
  23. fprime_gds/flask/static/js/vue-support/event.js +1 -0
  24. fprime_gds/flask/static/js/vue-support/fp-row.js +25 -1
  25. {fprime_gds-4.0.2a2.dist-info → fprime_gds-4.0.2a4.dist-info}/METADATA +1 -1
  26. {fprime_gds-4.0.2a2.dist-info → fprime_gds-4.0.2a4.dist-info}/RECORD +31 -27
  27. {fprime_gds-4.0.2a2.dist-info → fprime_gds-4.0.2a4.dist-info}/entry_points.txt +2 -1
  28. {fprime_gds-4.0.2a2.dist-info → fprime_gds-4.0.2a4.dist-info}/WHEEL +0 -0
  29. {fprime_gds-4.0.2a2.dist-info → fprime_gds-4.0.2a4.dist-info}/licenses/LICENSE.txt +0 -0
  30. {fprime_gds-4.0.2a2.dist-info → fprime_gds-4.0.2a4.dist-info}/licenses/NOTICE.txt +0 -0
  31. {fprime_gds-4.0.2a2.dist-info → fprime_gds-4.0.2a4.dist-info}/top_level.txt +0 -0
fprime_gds/flask/app.py CHANGED
@@ -29,7 +29,7 @@ import fprime_gds.flask.logs
29
29
  import fprime_gds.flask.sequence
30
30
  import fprime_gds.flask.stats
31
31
  import fprime_gds.flask.updown
32
- from fprime_gds.executables.cli import ParserBase, StandardPipelineParser
32
+ from fprime_gds.executables.cli import ParserBase, StandardPipelineParser, ConfigDrivenParser
33
33
 
34
34
  from . import components
35
35
 
@@ -59,6 +59,7 @@ def construct_app():
59
59
  compress.init_app(app)
60
60
 
61
61
  app.config.from_object("fprime_gds.flask.default_settings")
62
+
62
63
  # Override defaults from python files specified in 'FP_FLASK_SETTINGS'
63
64
  if "FP_FLASK_SETTINGS" in os.environ:
64
65
  app.config.from_envvar("FP_FLASK_SETTINGS")
@@ -69,10 +70,15 @@ def construct_app():
69
70
  # Standard pipeline creation
70
71
  input_arguments = app.config["STANDARD_PIPELINE_ARGUMENTS"]
71
72
  args_ns, _ = ParserBase.parse_args(
72
- [StandardPipelineParser], "n/a", input_arguments, client=True
73
+ [StandardPipelineParser, ConfigDrivenParser], "n/a", input_arguments, client=True
73
74
  )
75
+ # Load app configuration from file
76
+ for key, value in args_ns.config_values.get("flask", {}).items():
77
+ app.config[key] = value
78
+
74
79
  pipeline = components.setup_pipelined_components(app.debug, args_ns)
75
80
 
81
+
76
82
  # Restful API registration
77
83
  api = fprime_gds.flask.errors.setup_error_handling(app)
78
84
 
@@ -194,6 +200,15 @@ def handle_unexpected_error(error):
194
200
  return flask.jsonify(response), status_code
195
201
 
196
202
 
203
+ @app.route("/js/config.js")
204
+ def config_serve():
205
+ """
206
+ Serve the config.js file
207
+
208
+ :param path: path to the file (in terms of web browser)
209
+ """
210
+ return flask.send_file(app.config["JS_CONFIGURATION_FILE"])
211
+
197
212
  @app.route("/js/<path:path>")
198
213
  def files_serve(path):
199
214
  """
@@ -16,5 +16,6 @@ SERVE_LOGS = os.environ.get("SERVE_LOGS", "YES") == "YES"
16
16
 
17
17
  MAX_CONTENT_LENGTH = 32 * 1024 * 1024 # Max length of request is 32MiB
18
18
 
19
+ JS_CONFIGURATION_FILE = os.path.join(os.path.dirname(__file__), "static", "js", "config.js")
19
20
 
20
21
  # TODO: load real config
@@ -77,7 +77,9 @@ Note: Vue.js annotations are used, as Vue is the data-to-view framework of choic
77
77
  <li v-for="tab in tabs"
78
78
  :class="['nav-item', 'nav-link', 'click-able-item', { active: currentTab == tab[0] }]"
79
79
  :key="tab[0]"
80
- v-on:click="route(tab[0])">
80
+ v-on:click="route(tab[0])"
81
+ v-if="config.enableDashboards || tab[0] != 'Dashboard'"
82
+ >
81
83
  <span class="d-none d-sm-none d-md-none d-lg-block" v-bind:id="tab[0]">{{ tab[0] }}</span>
82
84
  <span class="d-none d-sm-block d-md-block d-lg-none">{{ tab[1] }}</span>
83
85
  </li>
@@ -111,7 +113,7 @@ Note: Vue.js annotations are used, as Vue is the data-to-view framework of choic
111
113
  <dictionary v-show="currentTab == 'Dictionaries'"></dictionary>
112
114
  <logging v-show="currentTab == 'Logs'"></logging>
113
115
  <sequencer v-show="currentTab == 'Sequences'"></sequencer>
114
- <dashboard v-show="currentTab == 'Dashboard'"></dashboard>
116
+ <dashboard v-if="config.enableDashboards" v-show="currentTab == 'Dashboard'"></dashboard>
115
117
  <advanced-settings v-show="currentTab == 'Advanced'"></advanced-settings>
116
118
  <dictionary-version></dictionary-version>
117
119
  </div>
@@ -181,7 +183,7 @@ Note: Vue.js annotations are used, as Vue is the data-to-view framework of choic
181
183
  <div class="fp-flex-header">
182
184
  <h2>Events</h2>
183
185
  </div>
184
- <fp-table :header-columns="['Event Time', 'Event Id', 'Event Name', 'Event Severity', 'Event Description']"
186
+ <fp-table ref="fptable" :header-columns="['Event Time', 'Event Id', 'Event Name', 'Event Severity', 'Event Description']"
185
187
  :items-key="'events'"
186
188
  :item-to-columns="columnify"
187
189
  :row-style="style"
@@ -206,7 +208,7 @@ Note: Vue.js annotations are used, as Vue is the data-to-view framework of choic
206
208
  <div class="fp-flex-header">
207
209
  <h2>Channels</h2>
208
210
  </div>
209
- <fp-table :display-template="'channel-row'"
211
+ <fp-table ref="fptable" :display-template="'channel-row'"
210
212
  :header-columns="['Last Sample Time', 'Channel Id', 'Channel Name', 'Channel Value']"
211
213
  :items-key="'channels'"
212
214
  :item-to-columns="columnify"
@@ -214,6 +216,7 @@ Note: Vue.js annotations are used, as Vue is the data-to-view framework of choic
214
216
  :support-views="true"
215
217
  :item-to-view-name="itemToName"
216
218
  :item-hide="channelHider"
219
+ :clear-rows="clearChannels"
217
220
  :initial-fields="fields"
218
221
  :filter-text="filterText"
219
222
  :initial-views="itemsShown"
@@ -22,5 +22,13 @@ export let config = {
22
22
  default: 1000
23
23
  },
24
24
  // Summary counter fields containing object of field: bootstrap class
25
- summaryFields: {"WARNING_HI": "warning", "FATAL": "danger", "GDS_Errors": "danger"}
25
+ summaryFields: {"WARNING_HI": "warning", "FATAL": "danger", "GDS_Errors": "danger"},
26
+
27
+ // Dashboards are a security vulnerability in that users are uploading artifacts that trigger
28
+ // arbitrary rendering and code execution. This is explained in more detail here:
29
+ // https://v2.vuejs.org/v2/guide/security#Rule-No-1-Never-Use-Non-trusted-Templates
30
+ //
31
+ // Thus dashboards are disabled by default and projects must opt-in thus taking the responsibility
32
+ // to validate and review the safety of the dashboards they use.
33
+ enableDashboards: false
26
34
  };
@@ -120,9 +120,25 @@ Vue.component("channel-table", {
120
120
  * @return {boolean}
121
121
  */
122
122
  channelHider(item) {
123
+ // Never hide channels if all channels are null
124
+ let all_null = Object.values(_datastore.channels).reduce((accumulator, channel) => accumulator && channel.val == null);
125
+ if (all_null && this.itemsShown.length == 0) {
126
+ return false;
127
+ }
123
128
  return item.val == null
124
129
  || item.time == null
125
130
  || listExistsAndItemNameNotInList(this.itemsShown, item);
131
+ },
132
+ /**
133
+ * Function that clears all channels
134
+ */
135
+ clearChannels() {
136
+ let channels = {}
137
+ for (let key in _dictionaries.channels) {
138
+ channels[key] = {id: key, time: null, datetime: null, val: null};
139
+ }
140
+ Object.assign(_datastore.channels, channels);
141
+ this.$refs.fptable.send([]);
126
142
  }
127
143
  }
128
144
  });
@@ -116,6 +116,7 @@ Vue.component("event-list", {
116
116
  */
117
117
  clearEvents() {
118
118
  _datastore.events.splice(0, _datastore.events.length);
119
+ this.$refs.fptable.send([]);
119
120
  },
120
121
  /**
121
122
  * Returns if the given item should be hidden in the data table; by
@@ -10,6 +10,28 @@
10
10
  *
11
11
  * Note: fp-row is broken up such that other row implementations can inherit the base properties.
12
12
  */
13
+
14
+ let headerRegex = new RegExp("&lt;h([1-6])&gt;([^&]*)&lt;/h[1-6]&gt;", "g");
15
+ let spanRegex = new RegExp("&lt;span( title=\"[^\"]*\")?&gt;([^&]*)&lt;/span&gt;", "g");
16
+
17
+ /**
18
+ * Replace strings keeping <h1> - <h6> and <span...> tags.
19
+ * @param {*} item: display item
20
+ * @returns: sanitized display item
21
+ */
22
+ function sanitize(item) {
23
+ if (typeof(item) !== "string") {
24
+ return item;
25
+ }
26
+ // Remove all HTML tags
27
+ item = item.replaceAll("<", "&lt;").replaceAll(">", "&gt;");
28
+ // Put back in h[1-6] and span tags
29
+ item = item.replaceAll(headerRegex, "<h$1>$2</h$1>")
30
+ .replaceAll(spanRegex, "<span $1>$2</span>");
31
+ return item;
32
+ }
33
+
34
+
13
35
  export let fp_row_base_component = {
14
36
  template: "#fp-row-template",
15
37
  props: {
@@ -85,7 +107,9 @@ export let fp_row_base_component = {
85
107
  if (typeof (this.itemToColumns) !== "function") {
86
108
  throw Error("Failed to define required 'itemToColumns' function on fp-table")
87
109
  }
88
- return this.itemToColumns(this.item).filter((item, index) => this.visible == null || this.visible.indexOf(index) !== -1);
110
+ return this.itemToColumns(this.item)
111
+ .map(sanitize)
112
+ .filter((item, index) => this.visible == null || this.visible.indexOf(index) !== -1);
89
113
  },
90
114
  /**
91
115
  * Calculates the style of the row based on a given item. This is optional and will not raise an error if the
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fprime-gds
3
- Version: 4.0.2a2
3
+ Version: 4.0.2a4
4
4
  Summary: F Prime Flight Software Ground Data System layer
5
5
  Author-email: Michael Starch <Michael.D.Starch@jpl.nasa.gov>, Thomas Boyer-Chammard <Thomas.Boyer.Chammard@jpl.nasa.gov>
6
6
  License:
@@ -35,7 +35,7 @@ fprime_gds/common/decoders/event_decoder.py,sha256=tF_mg98RDjR0PppymGhmXybYXA0mF
35
35
  fprime_gds/common/decoders/file_decoder.py,sha256=Ky2U8bli3YL6GbT9jSSvI73ySOtf0cdZLK4FXTuWjfA,2542
36
36
  fprime_gds/common/decoders/pkt_decoder.py,sha256=c1CebqBaD7rAZd9t0AXkGVRTCtvXj0YH9OBN2bJKaTk,3327
37
37
  fprime_gds/common/distributor/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
38
- fprime_gds/common/distributor/distributor.py,sha256=hP0mUknxxpKrQfYkf57dHbMItwgUTzpzmkrc1AOHVCw,8034
38
+ fprime_gds/common/distributor/distributor.py,sha256=6XevwW9c75Un-tT0JXCE_savhvBUya8FWW-cHZNAqdw,8334
39
39
  fprime_gds/common/encoders/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
40
40
  fprime_gds/common/encoders/ch_encoder.py,sha256=TBrTJ7TK4WwCh6KAspozh63WcPxrMImloB8tz7qeulw,2878
41
41
  fprime_gds/common/encoders/cmd_encoder.py,sha256=iFPi6uMlMPlApC47p9YKRjKJxMvz46p15Yy3NnGTyaE,3497
@@ -49,15 +49,19 @@ fprime_gds/common/files/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG
49
49
  fprime_gds/common/files/downlinker.py,sha256=CZPfhH0J9-LNqW5Cv_ryicLTuoedLSWK8OPQmmQDZZY,7498
50
50
  fprime_gds/common/files/helpers.py,sha256=sGaxcczXmZ5_soawT7x_eJ_cC2PZ6KOGBfusAV4QC_g,7219
51
51
  fprime_gds/common/files/uplinker.py,sha256=lgqhlgeipBt3Arx-ohzK8vCdS54fKpv9Rg7SUTocUX8,13244
52
- fprime_gds/common/fpy/README.md,sha256=AJE9KJDarTTW9nsTJBiZ6cKyPYQbWKbKJbFiNz6M8Z4,1414
53
- fprime_gds/common/fpy/SPEC.md,sha256=XTMgr96BIVJheOtjAp6Qgu5l5RE16DxxIkPl0WwXfEs,2248
52
+ fprime_gds/common/fpy/README.md,sha256=3lEAlRhkChCdjqhF1RIaNnRbUJZTtk-2LUHD55Uca2A,7602
53
+ fprime_gds/common/fpy/SPEC.md,sha256=j-V5F4I-syKJFnsW5ySE8va4GoXC50kECXUAr4xZYA8,5864
54
54
  fprime_gds/common/fpy/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
55
- fprime_gds/common/fpy/codegen.py,sha256=5VdV-f6CdU1LPJx4swB_GV5pvPe3Cqh9E3bkS0dBAo4,59828
56
- fprime_gds/common/fpy/grammar.lark,sha256=QIQgmj58pW9ou2u7DzE39c0fz55eGNj3X7ridzAHRFk,2128
57
- fprime_gds/common/fpy/main.py,sha256=U50sQCrwhZgxGzkjKgaJywoQM_cEH78hN9Vy3pDKKMA,1073
58
- fprime_gds/common/fpy/parser.py,sha256=g-l67oZN_vB1JAdZ5S3u9m8APf6PdJ88GZyz0iX66qo,4418
55
+ fprime_gds/common/fpy/codegen.py,sha256=EmTsqkUqVFHH2xuvxw3nNPSgvGumsetRVTnYl5DeW7I,53045
56
+ fprime_gds/common/fpy/grammar.lark,sha256=ZjL9xYK9v1Ko-_hm99mR2IB-Alqx9amGRHX0a7jehdM,2826
57
+ fprime_gds/common/fpy/main.py,sha256=fdo1TLWNvmmygiqwZlszOTlDHN8cXnSG69grxZ6loXQ,1927
58
+ fprime_gds/common/fpy/model.py,sha256=tLKtkDLk52dLKUVrS-p2Dma1r-aE2eqBgahYwB7oecc,27392
59
+ fprime_gds/common/fpy/parser.py,sha256=zbB_vcWi2VybLYP8s7st5RkzZBnPRdP1ilR6DIum1-M,4346
60
+ fprime_gds/common/fpy/test_helpers.py,sha256=19iACidiZZyeOo8LgwP6ir-X2mPPVNrlTpd34Sia5m8,4109
61
+ fprime_gds/common/fpy/types.py,sha256=IplHyCGXsru0EPALvGdjFNXCQRmr437K_dR0_zhYgSo,16916
59
62
  fprime_gds/common/fpy/bytecode/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
60
- fprime_gds/common/fpy/bytecode/directives.py,sha256=tBpPQ2ZnQXA7juB85HhacDdil1vEHUKW8m_AsMf1KdQ,13360
63
+ fprime_gds/common/fpy/bytecode/assembler.py,sha256=8UH7UAWbHP_cEQT4QVB7zV1SGoR5R_euvwWhiHzfwrw,1501
64
+ fprime_gds/common/fpy/bytecode/directives.py,sha256=JBgznGs8rMlBFm_YwXmZiKGAoYnQCjuDse_zbQLVZsA,23225
61
65
  fprime_gds/common/gds_cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
62
66
  fprime_gds/common/gds_cli/base_commands.py,sha256=js4SAXPfDYy_ewIL27066XylExxh9S1A-e4NNChWf9s,9430
63
67
  fprime_gds/common/gds_cli/channels.py,sha256=BvADGBrsJ2G9zcGpSwJlxLRFiY1bUxtQSTfEOlA3UME,2134
@@ -88,7 +92,7 @@ fprime_gds/common/logger/__init__.py,sha256=TLUbrAnkCtckKGsLzh4hXgEshwQfZsWMDaOO
88
92
  fprime_gds/common/logger/data_logger.py,sha256=VjfhTGO1gGw954xNhSc0_zpw8JexCho5f8BlXDEYkL4,2505
89
93
  fprime_gds/common/logger/test_logger.py,sha256=wL8Lq49sVmxGRALgv-ei6AnXFh79qlHFehmKJ1A8X28,6475
90
94
  fprime_gds/common/models/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
91
- fprime_gds/common/models/dictionaries.py,sha256=8HRnSrg6yVOlep17qFWdJzKJ7gZIoNGA-bCabuITyM8,8091
95
+ fprime_gds/common/models/dictionaries.py,sha256=MlHR-KEYPzky0IZjhapGCNuvKz2lTo1wtQMKPBI-nOA,8726
92
96
  fprime_gds/common/models/common/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
93
97
  fprime_gds/common/models/common/command.py,sha256=ASih9dwR_7F94nR1CV7cIuZEJSuaUAzX7JU2_lCAg4g,5476
94
98
  fprime_gds/common/parsers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -99,7 +103,7 @@ fprime_gds/common/pipeline/files.py,sha256=J2zm0sucvImtmSnv0iUp5uTpvUO8nlmz2lUdM
99
103
  fprime_gds/common/pipeline/histories.py,sha256=7KyboNnm9OARQk4meVPSSeYpeqH0G8RWRiy0BLBL1rw,3671
100
104
  fprime_gds/common/pipeline/publishing.py,sha256=A0Hb4RpK7RCBDN9BEiJZr9WQMSrmohYXCFOuzl23mPo,3953
101
105
  fprime_gds/common/pipeline/router.py,sha256=-P1wI0KXEh_snOzDaq8CjEoWuM_zRm8vUMR1T0oY9qQ,2327
102
- fprime_gds/common/pipeline/standard.py,sha256=Gj-TPWoCWN-zp6uI2o_TI9jANJ7I7hmXOujgwJ8PlMo,9126
106
+ fprime_gds/common/pipeline/standard.py,sha256=w6L9kj6phA0twSB-TfEtZIcMWWZwNBm5wzSmz1lyNEA,9239
103
107
  fprime_gds/common/templates/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
104
108
  fprime_gds/common/templates/ch_template.py,sha256=1MoDZsia0dI_CvnIttwyKLhbQhum35OcJnFc50Xohuo,3893
105
109
  fprime_gds/common/templates/cmd_template.py,sha256=n91z4WhFgHwTu6_fQqy7JqpkEObAkllIeEy0AR0DvrQ,5455
@@ -108,7 +112,7 @@ fprime_gds/common/templates/event_template.py,sha256=L0hkWB_kEMhTNodPUqBAev76SMm
108
112
  fprime_gds/common/templates/pkt_template.py,sha256=5Wi6389m5j8w7JITBGfeUnw6CYE1-hjcVJ42NJmLDcE,1794
109
113
  fprime_gds/common/templates/prm_template.py,sha256=qd0UX4ARZuPWvnFbU_DO3HkQY4QgMfqPxNcNhk-dl9A,2303
110
114
  fprime_gds/common/testing_fw/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
111
- fprime_gds/common/testing_fw/api.py,sha256=ATxIUWVMjoVUllTr0zd42--xgHE1g_OJKq4ec0UFd5k,67848
115
+ fprime_gds/common/testing_fw/api.py,sha256=HcstOYK1_TYyzxo2O3TsI3QKtQbm6FBP-kG_7ZT1bDM,68091
112
116
  fprime_gds/common/testing_fw/predicates.py,sha256=CsHsVs_EVXCLQLd2NVOvy8MxmUQVxLMr3i1ouEUqOtQ,18371
113
117
  fprime_gds/common/testing_fw/pytest_integration.py,sha256=CAvuH9_3RuKplKQVB3t_jerPr-LPzwPWoM6z3lMs16g,6203
114
118
  fprime_gds/common/tools/README.md,sha256=WVEciyfsbEVGmb9xR5A6Ioy5pBVnCsWOIJfySLeq9YM,2325
@@ -122,20 +126,20 @@ fprime_gds/common/utils/event_severity.py,sha256=7qPXHrDaM_REJ7sKBUEJTZIE0D4qVnV
122
126
  fprime_gds/common/utils/string_util.py,sha256=u_2iahRG3ROu3lAAt_KVcK226gEByElXqrA8mH8eDpI,3584
123
127
  fprime_gds/executables/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
124
128
  fprime_gds/executables/apps.py,sha256=_OLWxby1XvYmmDcecsOAKu34XGf952_ya5uRWf_8Y3I,15127
125
- fprime_gds/executables/cli.py,sha256=OqcBOpvnj8f8wZjntfbr-pNzCEF3P_-eA58kBqK7iDg,52216
129
+ fprime_gds/executables/cli.py,sha256=OgP0RYrqasTzFXP8r3L1UAlGq0wKGVLb5_Vr6nxFpGc,52643
126
130
  fprime_gds/executables/comm.py,sha256=08rO0o0MJgTRngB7Ygu2IL_gEAWKF7WFvFyro1CqReE,5214
127
131
  fprime_gds/executables/data_product_writer.py,sha256=e1Rp2LT_Cpg08f0Ki8GhirC7Wn6LtYiAef7KLAkZHUY,37773
128
132
  fprime_gds/executables/dictionary_merge.py,sha256=3Zy8LcbEdBwmNX2GLN_Nr1DfbLyWYHg-y4jdjTVCXgY,7966
129
133
  fprime_gds/executables/fprime_cli.py,sha256=9_eNU7AzUOMhz4FLPkD_byA9C13c509wGPZN-kdw9Ok,12429
130
- fprime_gds/executables/run_deployment.py,sha256=4K3isTF7C8FojFvzxLC8vaj1GZpKOuPZQ3CtIYdyhRE,7638
134
+ fprime_gds/executables/run_deployment.py,sha256=XM_--4Pj37cpe7fjv1Jr87Ep1YC-qZpgUXk7v_fZGMY,7744
131
135
  fprime_gds/executables/tcpserver.py,sha256=KspVpu5YIuiWKOk5E6UDMKvqXYrRB1j9aX8CkMxysfw,17555
132
136
  fprime_gds/executables/utils.py,sha256=SbzXRe1p41qMPdifvPap5_4v0T42gZZ_Rs_OYfITd80,7626
133
137
  fprime_gds/flask/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
134
- fprime_gds/flask/app.py,sha256=2LTjx5MFP18ypYz_l80i4ijAWuxv7IVtmzCgCk0fBy8,6852
138
+ fprime_gds/flask/app.py,sha256=vOcZvLekuMsWhc8hrZf60ni8nPPAHlFwgK1yF1nMC58,7255
135
139
  fprime_gds/flask/channels.py,sha256=sOeL-UmWPh2hqYvqj81STpABLlPcjdPgkRwjd3Qx77k,735
136
140
  fprime_gds/flask/commands.py,sha256=62R3b0mnjc3_XpULpqJyUSvAcfOjAyZNifQ3wqHKO7s,3658
137
141
  fprime_gds/flask/components.py,sha256=a-eG8XJfSrqR8MIzIc9StwbNwxcBqkxYMEYq46S2Bmk,4176
138
- fprime_gds/flask/default_settings.py,sha256=SkNfd5R4tv59rcmPiHERIZNIEmzXP3KJcJZektgtZCA,603
142
+ fprime_gds/flask/default_settings.py,sha256=uDYQQUTRWbkeodln9rsS8ccSW_bgQ3u-cS3QkPzK4MQ,696
139
143
  fprime_gds/flask/errors.py,sha256=yN3jDsJd30jL6aOIF-SqbVoesvReHqPvXlIt8qWB87M,2133
140
144
  fprime_gds/flask/events.py,sha256=BO9OUUwNDnRuOz4ZC6nFHMR7sJJ9P2P0xUxDluGd218,732
141
145
  fprime_gds/flask/json.py,sha256=PBljX3afJzyE_04DvZS4OEFOQW_ldVmfWiTYfxPZiGo,5888
@@ -146,7 +150,7 @@ fprime_gds/flask/sequence.py,sha256=1FfOFIUdWFX1qXjONAWm1vklPbyhkBYkuPow8RBt-yk,
146
150
  fprime_gds/flask/stats.py,sha256=i62envu9V6WpNsRD_mlhwzB_2dGUOCTf1XpyC5HApzg,1177
147
151
  fprime_gds/flask/updown.py,sha256=7za_zgOwQKHgm-3W1OBZqBgDLCmj7c0ziFEduhEuqdU,6176
148
152
  fprime_gds/flask/static/favicon.ico,sha256=pwqBRx64V_wyrrXgXsBXPWWUmwqanuWAfesMpFfV1E4,15406
149
- fprime_gds/flask/static/index.html,sha256=7SPp-p3ywyBtElPWEAAjrBuh-PNr8LUtd1JXw6emcVU,26087
153
+ fprime_gds/flask/static/index.html,sha256=mzdnT0aqLntWBkmvJywiOd_spSviSdB4BoExPyJUEQU,26331
150
154
  fprime_gds/flask/static/.idea/.gitignore,sha256=NHNmSnP0xfbzJRKbluJMetE8N_J3-dXL-arvLWCrYTk,38
151
155
  fprime_gds/flask/static/.idea/misc.xml,sha256=jiBUIoLNoO3PVZNHFbeuPqK7i2ghgKEpmbgvBHXqizY,174
152
156
  fprime_gds/flask/static/.idea/modules.xml,sha256=iH0knC0oHsbwsrC7lgoIqoHQUYPiTqHLiAkihGsSoAE,264
@@ -197,7 +201,7 @@ fprime_gds/flask/static/css/fpstyle.css,sha256=9JvcrT8VnLONCrEXY-QNdNPXKAH9U7WUr
197
201
  fprime_gds/flask/static/img/error.svg,sha256=dJOAFEQ_DlLvJg-fBuBGDCBua8rbvSzmY3lqCuw3yc4,1953
198
202
  fprime_gds/flask/static/img/logo.svg,sha256=czqCyVnhqFEw7qsKDMm63w959Pa77nYqY7GyoHVGcZ4,12470
199
203
  fprime_gds/flask/static/img/success.svg,sha256=wCfYG4cPfSCcsZ76JI4SwAJ-y62rahx9rJXyB-2qDIY,1757
200
- fprime_gds/flask/static/js/config.js,sha256=3CNrVmUtUGeiomAuoAE22w34r7wA-X0OtXN3JtLZYJ8,1066
204
+ fprime_gds/flask/static/js/config.js,sha256=QS8riL5Q6LPR6hoCPPS5nRNaoFVJxI2CfOucKlcbsFo,1551
201
205
  fprime_gds/flask/static/js/datastore.js,sha256=AAJKRQbcvQuS-4OScad5zBfYjHljDrjsL5RnTcXx39A,15508
202
206
  fprime_gds/flask/static/js/gds.js,sha256=OeDJrNmNA8hUPi8QIHP-s33MW_IYT3QIccxzL75MsjA,1297
203
207
  fprime_gds/flask/static/js/json.js,sha256=kfwzTqoyLu_Feqcp9WEhDWpZ3lziwHy9LGkOg8PCo6s,12429
@@ -206,13 +210,13 @@ fprime_gds/flask/static/js/performance.js,sha256=fGBbK5anf5UB9iAr6rO4u9sCkrQGlOH
206
210
  fprime_gds/flask/static/js/settings.js,sha256=Cfnn1ybZUOmsp48t_b23TDaHBRctvpD_h2ivBVKz6HM,1101
207
211
  fprime_gds/flask/static/js/uploader.js,sha256=HdFUGwJ-SN_OEMXiXXJw0YblC0j_QiOA1y9yVWyS4SI,2730
208
212
  fprime_gds/flask/static/js/validate.js,sha256=yVY_MlpJeRfBRy3-k_JflWqyk-P_YJU3ot-iJtRJFPM,13046
209
- fprime_gds/flask/static/js/vue-support/channel.js,sha256=d0reMOk2yyyUxV8cvN8VNHkdUI_YHVsVEjj_ZWqyCcY,4577
213
+ fprime_gds/flask/static/js/vue-support/channel.js,sha256=a1ll-y5qqPiWCgSB2LJWmC4718ZFmsr542YPQQKh1rA,5257
210
214
  fprime_gds/flask/static/js/vue-support/dashboard-box.js,sha256=yX6eH9BQRKRLHk2eBDv1AjVjpLbl8PP8t-SXQPmi0sU,739
211
215
  fprime_gds/flask/static/js/vue-support/dashboard-row.js,sha256=vCkLANr_8GAkPLV4K0WAXWJohevOTods0VbjMrA5zC0,297
212
216
  fprime_gds/flask/static/js/vue-support/dashboard.js,sha256=WOdmZoivmtg9KbLe8usPjlXTzEO_uwJQIY9iIgMhW2g,3022
213
217
  fprime_gds/flask/static/js/vue-support/downlink.js,sha256=zY7S4w5ylQDQJ9-ihN-_1CUOxacGCuTyVO7-jeVefQg,1589
214
- fprime_gds/flask/static/js/vue-support/event.js,sha256=p9Kh8Po7pN4cMMfP4lhvx8fnoohRTr07p4cPvWaSheM,5292
215
- fprime_gds/flask/static/js/vue-support/fp-row.js,sha256=BwfWOxmTD7WPKKSBPlwLq3eARYQUg3pan1PPA9VzKy0,3760
218
+ fprime_gds/flask/static/js/vue-support/event.js,sha256=9hrFAtDGBHFRXAmvhhDAN1iuJcn_TyTnn6ymzn8L3Cw,5333
219
+ fprime_gds/flask/static/js/vue-support/fp-row.js,sha256=ujy7T6jl1vnfCx7kf_DLrtLqA79y9SUr4rdVdKYqHUg,4475
216
220
  fprime_gds/flask/static/js/vue-support/fptable.js,sha256=ETGE4LlBeLXQnOv6-NNtZtk3JadDOPus6ad3tBEooUo,18874
217
221
  fprime_gds/flask/static/js/vue-support/log.js,sha256=40dDjFgmEugTFZFsy0Y1xqNJpnuEfUiZ_-M3HGTPMCc,2735
218
222
  fprime_gds/flask/static/js/vue-support/tabetc.js,sha256=_JfTOezwXrxZ-RaSs4jhLdv5e3hTbjxYTnbGwv6NTAc,3865
@@ -244,10 +248,10 @@ fprime_gds/flask/static/third-party/webfonts/fa-solid-900.woff2,sha256=mDS4KtJuK
244
248
  fprime_gds/plugin/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
245
249
  fprime_gds/plugin/definitions.py,sha256=QlxW1gNvoiqGMslSJjh3dTFZuv0igFHawN__3XJ0Wns,5355
246
250
  fprime_gds/plugin/system.py,sha256=M9xb-8jBhCUUx3X1z2uAP8Wx_v6NkL8JeaFgGcMnQqY,13432
247
- fprime_gds-4.0.2a2.dist-info/licenses/LICENSE.txt,sha256=z8d0m5b2O9McPEK1xHG_dWgUBT6EfBDz6wA0F7xSPTA,11358
248
- fprime_gds-4.0.2a2.dist-info/licenses/NOTICE.txt,sha256=vXjA_xRcQhd83Vfk5D_vXg5kOjnnXvLuMi5vFKDEVmg,1612
249
- fprime_gds-4.0.2a2.dist-info/METADATA,sha256=t7Idkx-zA1DrvKJaxm_zVGZoTDFxw_UJtLY35Xje4R4,24576
250
- fprime_gds-4.0.2a2.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
251
- fprime_gds-4.0.2a2.dist-info/entry_points.txt,sha256=16r0xeF-Qn-ducW_QvHiyrFnNjnLK-OOaTbqQIQpd0o,494
252
- fprime_gds-4.0.2a2.dist-info/top_level.txt,sha256=6vzFLIX6ANfavKaXFHDMSLFtS94a6FaAsIWhjgYuSNE,27
253
- fprime_gds-4.0.2a2.dist-info/RECORD,,
251
+ fprime_gds-4.0.2a4.dist-info/licenses/LICENSE.txt,sha256=z8d0m5b2O9McPEK1xHG_dWgUBT6EfBDz6wA0F7xSPTA,11358
252
+ fprime_gds-4.0.2a4.dist-info/licenses/NOTICE.txt,sha256=vXjA_xRcQhd83Vfk5D_vXg5kOjnnXvLuMi5vFKDEVmg,1612
253
+ fprime_gds-4.0.2a4.dist-info/METADATA,sha256=jJXlRA8gO9KhN8WGHJ6J_vx59671yO7OHe_XNNtYLAM,24576
254
+ fprime_gds-4.0.2a4.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
255
+ fprime_gds-4.0.2a4.dist-info/entry_points.txt,sha256=zESAeUBvVYSuzzinWIqNWaewa8nYDDImEX4jBzdyThs,559
256
+ fprime_gds-4.0.2a4.dist-info/top_level.txt,sha256=6vzFLIX6ANfavKaXFHDMSLFtS94a6FaAsIWhjgYuSNE,27
257
+ fprime_gds-4.0.2a4.dist-info/RECORD,,
@@ -1,7 +1,8 @@
1
1
  [console_scripts]
2
2
  fprime-cli = fprime_gds.executables.fprime_cli:main
3
3
  fprime-dp-write = fprime_gds.executables.data_product_writer:main
4
- fprime-fpyc = fprime_gds.common.fpy.main:main
4
+ fprime-fpy-model = fprime_gds.common.fpy.main:model_main
5
+ fprime-fpyc = fprime_gds.common.fpy.main:compile_main
5
6
  fprime-gds = fprime_gds.executables.run_deployment:main
6
7
  fprime-merge-dictionary = fprime_gds.executables.dictionary_merge:main
7
8
  fprime-prm-write = fprime_gds.common.tools.params:main