fprime-gds 3.6.1__py3-none-any.whl → 4.0.0__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 (70) hide show
  1. fprime_gds/common/communication/adapters/ip.py +14 -9
  2. fprime_gds/common/communication/adapters/uart.py +34 -25
  3. fprime_gds/common/communication/ccsds/__init__.py +0 -0
  4. fprime_gds/common/communication/ccsds/apid.py +19 -0
  5. fprime_gds/common/communication/ccsds/chain.py +106 -0
  6. fprime_gds/common/communication/ccsds/space_data_link.py +196 -0
  7. fprime_gds/common/communication/ccsds/space_packet.py +129 -0
  8. fprime_gds/common/communication/framing.py +27 -32
  9. fprime_gds/common/decoders/ch_decoder.py +1 -1
  10. fprime_gds/common/decoders/event_decoder.py +9 -2
  11. fprime_gds/common/decoders/pkt_decoder.py +1 -1
  12. fprime_gds/common/distributor/distributor.py +6 -3
  13. fprime_gds/common/encoders/ch_encoder.py +2 -2
  14. fprime_gds/common/encoders/cmd_encoder.py +2 -2
  15. fprime_gds/common/encoders/event_encoder.py +2 -2
  16. fprime_gds/common/encoders/pkt_encoder.py +2 -2
  17. fprime_gds/common/encoders/seq_writer.py +2 -2
  18. fprime_gds/common/fpy/README.md +56 -0
  19. fprime_gds/common/fpy/SPEC.md +69 -0
  20. fprime_gds/common/fpy/__init__.py +0 -0
  21. fprime_gds/common/fpy/bytecode/__init__.py +0 -0
  22. fprime_gds/common/fpy/bytecode/directives.py +490 -0
  23. fprime_gds/common/fpy/codegen.py +1687 -0
  24. fprime_gds/common/fpy/grammar.lark +88 -0
  25. fprime_gds/common/fpy/main.py +40 -0
  26. fprime_gds/common/fpy/parser.py +239 -0
  27. fprime_gds/common/gds_cli/base_commands.py +1 -1
  28. fprime_gds/common/handlers.py +39 -0
  29. fprime_gds/common/loaders/fw_type_json_loader.py +54 -0
  30. fprime_gds/common/loaders/json_loader.py +15 -0
  31. fprime_gds/common/loaders/pkt_json_loader.py +125 -0
  32. fprime_gds/common/loaders/prm_json_loader.py +85 -0
  33. fprime_gds/common/logger/__init__.py +2 -2
  34. fprime_gds/common/pipeline/dictionaries.py +60 -41
  35. fprime_gds/common/pipeline/encoding.py +19 -0
  36. fprime_gds/common/pipeline/histories.py +4 -0
  37. fprime_gds/common/pipeline/standard.py +16 -2
  38. fprime_gds/common/templates/cmd_template.py +8 -0
  39. fprime_gds/common/templates/prm_template.py +81 -0
  40. fprime_gds/common/testing_fw/api.py +148 -1
  41. fprime_gds/common/testing_fw/pytest_integration.py +37 -3
  42. fprime_gds/common/tools/README.md +34 -0
  43. fprime_gds/common/tools/params.py +246 -0
  44. fprime_gds/common/utils/config_manager.py +6 -6
  45. fprime_gds/common/utils/data_desc_type.py +6 -1
  46. fprime_gds/executables/apps.py +189 -11
  47. fprime_gds/executables/cli.py +468 -127
  48. fprime_gds/executables/comm.py +5 -2
  49. fprime_gds/executables/data_product_writer.py +164 -165
  50. fprime_gds/executables/fprime_cli.py +3 -3
  51. fprime_gds/executables/run_deployment.py +13 -5
  52. fprime_gds/flask/app.py +3 -0
  53. fprime_gds/flask/resource.py +5 -2
  54. fprime_gds/flask/static/addons/chart-display/addon.js +8 -3
  55. fprime_gds/flask/static/js/datastore.js +1 -0
  56. fprime_gds/flask/static/js/vue-support/channel.js +1 -1
  57. fprime_gds/flask/static/js/vue-support/event.js +1 -1
  58. fprime_gds/plugin/definitions.py +86 -8
  59. fprime_gds/plugin/system.py +172 -58
  60. {fprime_gds-3.6.1.dist-info → fprime_gds-4.0.0.dist-info}/METADATA +23 -21
  61. {fprime_gds-3.6.1.dist-info → fprime_gds-4.0.0.dist-info}/RECORD +66 -50
  62. {fprime_gds-3.6.1.dist-info → fprime_gds-4.0.0.dist-info}/WHEEL +1 -1
  63. {fprime_gds-3.6.1.dist-info → fprime_gds-4.0.0.dist-info}/entry_points.txt +2 -0
  64. fprime_gds/common/loaders/ch_py_loader.py +0 -79
  65. fprime_gds/common/loaders/cmd_py_loader.py +0 -66
  66. fprime_gds/common/loaders/event_py_loader.py +0 -75
  67. fprime_gds/common/loaders/python_loader.py +0 -132
  68. {fprime_gds-3.6.1.dist-info → fprime_gds-4.0.0.dist-info/licenses}/LICENSE.txt +0 -0
  69. {fprime_gds-3.6.1.dist-info → fprime_gds-4.0.0.dist-info/licenses}/NOTICE.txt +0 -0
  70. {fprime_gds-3.6.1.dist-info → fprime_gds-4.0.0.dist-info}/top_level.txt +0 -0
@@ -2,18 +2,23 @@ fastentrypoints.py,sha256=2HO-tsTTZxpzYNd-BaLK3WDLknzCZKzb_yX2p3Ftqa8,4020
2
2
  fprime_gds/__init__.py,sha256=y2ljhCEHnvyfSDvXIEgBGIk8oHjjjjCWFxfddOGeYFk,115
3
3
  fprime_gds/version.py,sha256=dlUlfOKTsGaqz_L7TjhCVC-Vanx5cK67kdZlqcHCM8M,395
4
4
  fprime_gds/common/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
5
- fprime_gds/common/handlers.py,sha256=t2-st-C3Z486kfcu2cpf-wHJQmpaaHQYj1dyXJEMmSU,2632
5
+ fprime_gds/common/handlers.py,sha256=YyhuF4yg3d7tFgWmbvXfxLDHYgea6Z1hpFd2A27gVZY,4464
6
6
  fprime_gds/common/transport.py,sha256=uYXWkM8TYEYz1vfY4AEn0PF8Gu4tkYmJ5t4w1YY1yW8,10565
7
7
  fprime_gds/common/zmq_transport.py,sha256=E_iBZ5sA4JKB99MWSOM6XnPrO-mbFyRvD9eQp9te6-Y,12397
8
8
  fprime_gds/common/communication/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
9
9
  fprime_gds/common/communication/checksum.py,sha256=f6W0Tr68U-XGnFmysMqsFzoGYZVE8clKf-VIJja_1YM,741
10
- fprime_gds/common/communication/framing.py,sha256=TPpVn5JfGJxdc9BuKJzm5LXo6OQKtkSqX695UdN-Ezk,12915
10
+ fprime_gds/common/communication/framing.py,sha256=GnEUgHiTc0dEJ3coaVmcA03NXk8ehHfPaywB7hNnoO8,12658
11
11
  fprime_gds/common/communication/ground.py,sha256=9SD3AoyHA43yNE8UYkWnu5nEJt1PgyB3sU3QLDc4eDY,3619
12
12
  fprime_gds/common/communication/updown.py,sha256=UhfCIIA2eM5g2FsIhOGJJH6HzHurUPgcKIJ5fsLb2lE,9888
13
13
  fprime_gds/common/communication/adapters/__init__.py,sha256=ivGtzUTqhBYuve5mhN9VOHITwgZjNMVv7sxuac2Ll3c,470
14
14
  fprime_gds/common/communication/adapters/base.py,sha256=i3mf4HC-4tuf4mNkhdXCKlngRhODyTriia2pw6XBoSQ,3393
15
- fprime_gds/common/communication/adapters/ip.py,sha256=vCDclpsb3rVRXSxKqdt9UfkM2M6oCxnsKdzbzhMc0kM,17074
16
- fprime_gds/common/communication/adapters/uart.py,sha256=6SrN42ShVjwNubFg-1YrO09o1uJtu1rFqeMpLDNWlW4,6647
15
+ fprime_gds/common/communication/adapters/ip.py,sha256=vxSGbxQYNCC4M0Zp0wvA7VTwsDFQ0i6uqRuOHks1ibA,17322
16
+ fprime_gds/common/communication/adapters/uart.py,sha256=5WkA8xpQ8E7nv2DbN168fibz1l-GddJUKnf6Hcd4hvU,7194
17
+ fprime_gds/common/communication/ccsds/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
18
+ fprime_gds/common/communication/ccsds/apid.py,sha256=Y5K_xHLo1bmpxOlkt-TSLulCXbKIQrbYfa3GXhadqEE,686
19
+ fprime_gds/common/communication/ccsds/chain.py,sha256=Rkhls55BUwFU0cMlRMY183hlFpfqidQJ9ZUE1kdfi38,4637
20
+ fprime_gds/common/communication/ccsds/space_data_link.py,sha256=pDi1JpmYBuKGsDgTX80Wp8PU_CDtDPtkzdnX1FXN5eM,7385
21
+ fprime_gds/common/communication/ccsds/space_packet.py,sha256=27phwn8MfBFfdjS5Vl0Lfe38xfss6xSZnxGkJcQa92g,5190
17
22
  fprime_gds/common/controllers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
18
23
  fprime_gds/common/data_types/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
19
24
  fprime_gds/common/data_types/ch_data.py,sha256=RP9zSyzNcH0nJ3MYyW_IATnmnHYZ6d0KmoJUJantdBI,6111
@@ -24,28 +29,37 @@ fprime_gds/common/data_types/file_data.py,sha256=4_G9kf4ThC5NzkxnKa0xNYBdi8UDvZg
24
29
  fprime_gds/common/data_types/pkt_data.py,sha256=cxqUnsPte0ijF1E8F1_uglVKIJFAIQbpoBlmwRjMrJY,3405
25
30
  fprime_gds/common/data_types/sys_data.py,sha256=Xfk5xryFg7zWS3VcGUDx9lQYBTajjWXvwkgFK5EUCG4,2095
26
31
  fprime_gds/common/decoders/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
27
- fprime_gds/common/decoders/ch_decoder.py,sha256=qQOguQ8hlGnq9VxZUMUvNtzOPrvc2mziNWFlK8RQfP4,3842
32
+ fprime_gds/common/decoders/ch_decoder.py,sha256=mx0yfT-DQqQ8TrmRM3dr79eL9_E-c0gsKiKvvsjAu98,3849
28
33
  fprime_gds/common/decoders/decoder.py,sha256=9j7u05_nwXaEjR0etsoB--ATsHuILYCXlhk9m9yajKg,2655
29
- fprime_gds/common/decoders/event_decoder.py,sha256=fudUDyObFcGG3GiIHrPHmIrT4A6iCbbikEo16QW5XQs,4210
34
+ fprime_gds/common/decoders/event_decoder.py,sha256=ib-O18V5Z7bcnUUSDE9R0fU--bAZsfxLwuHXm964rzE,4505
30
35
  fprime_gds/common/decoders/file_decoder.py,sha256=Ky2U8bli3YL6GbT9jSSvI73ySOtf0cdZLK4FXTuWjfA,2542
31
- fprime_gds/common/decoders/pkt_decoder.py,sha256=puD3v9cUDrtZxulXo7b4rL3OPWWMygDJQnGJe6AcNLM,3315
36
+ fprime_gds/common/decoders/pkt_decoder.py,sha256=kW8k3OSbMy96w6MzsGWp656lAQvwxrIznWkD3Sbi8Ig,3329
32
37
  fprime_gds/common/distributor/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
33
- fprime_gds/common/distributor/distributor.py,sha256=HY0X8LpweH0EV1hozlFeSHE_Qwm4VuT5fy-abDldVS0,7776
38
+ fprime_gds/common/distributor/distributor.py,sha256=ay2b-eMuBEGzQwNoSBLK341CXxGnrFHSIcRKErzIQIU,7999
34
39
  fprime_gds/common/encoders/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
35
- fprime_gds/common/encoders/ch_encoder.py,sha256=2g2Xd_7AoqxUPmhaQAV1dfvmXn00ishqM5lNuqqa3o8,2857
36
- fprime_gds/common/encoders/cmd_encoder.py,sha256=fp5qYajKloUX-POYoagAhhppe57mrDLjpZOJzl5sFtc,3480
40
+ fprime_gds/common/encoders/ch_encoder.py,sha256=TBrTJ7TK4WwCh6KAspozh63WcPxrMImloB8tz7qeulw,2878
41
+ fprime_gds/common/encoders/cmd_encoder.py,sha256=5wG5854ozmxctnYou3q9MdQNkTQEmpCiT4oBVgNRZdE,3499
37
42
  fprime_gds/common/encoders/encoder.py,sha256=xgFFCi-qKEKG7T5Qfo-qIadSiY0NSnfDgQUBq21fMhw,2984
38
- fprime_gds/common/encoders/event_encoder.py,sha256=Thpa6aNHK_Q_mO_u3PlGohbR1oiqxCyPsWKdHq6GQVs,3121
43
+ fprime_gds/common/encoders/event_encoder.py,sha256=aM_3hWWx4OrLKF3-MlhmGSBYnzt-4iktSzMVrcUbfB8,3140
39
44
  fprime_gds/common/encoders/file_encoder.py,sha256=G9uUXQP-oD2eW_GJuGNBrN7xPafKFhmgKiNi-zvZz-g,3830
40
- fprime_gds/common/encoders/pkt_encoder.py,sha256=JthlbMIumPcaGDoDx7h9vI4rDb8Hvenr9pffTL7XCtU,3098
41
- fprime_gds/common/encoders/seq_writer.py,sha256=Zmj482qe_IQVx3EDmfXlPKKTJcEyDMRCWk28yc4C4-8,6863
45
+ fprime_gds/common/encoders/pkt_encoder.py,sha256=6hzwrAEg1tjGw9yGycWMuNgbGCoe87Cd-7eP1rvy2d4,3126
46
+ fprime_gds/common/encoders/seq_writer.py,sha256=rH1I8trAHBKjqxQtNg1isTmLWqAjK3xtZbETTCp6RQI,6882
42
47
  fprime_gds/common/files/File Decoder Documentation.txt,sha256=a-VYHcUMqh7mBGY2fqvMf1nd3gdg3cLdPKwrulNKXjc,5314
43
48
  fprime_gds/common/files/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
44
49
  fprime_gds/common/files/downlinker.py,sha256=CZPfhH0J9-LNqW5Cv_ryicLTuoedLSWK8OPQmmQDZZY,7498
45
50
  fprime_gds/common/files/helpers.py,sha256=sGaxcczXmZ5_soawT7x_eJ_cC2PZ6KOGBfusAV4QC_g,7219
46
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
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
59
+ fprime_gds/common/fpy/bytecode/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
60
+ fprime_gds/common/fpy/bytecode/directives.py,sha256=tBpPQ2ZnQXA7juB85HhacDdil1vEHUKW8m_AsMf1KdQ,13360
47
61
  fprime_gds/common/gds_cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
48
- fprime_gds/common/gds_cli/base_commands.py,sha256=RTR183kLmWPO-WXdsvPi9x1Zt7y4OJjpCJpy89Uom_Y,9410
62
+ fprime_gds/common/gds_cli/base_commands.py,sha256=nHnzHRMXs9haRjiUmq-Ciu1DSo1BXtcVscByk1Ypsxo,9432
49
63
  fprime_gds/common/gds_cli/channels.py,sha256=S8y0Mo2JbBFPvMzeW22HFVJ8p-UC-tzpYM7rXqIGWi4,2136
50
64
  fprime_gds/common/gds_cli/command_send.py,sha256=pMPwCixiuhk3r1mP7IbHLlItxYf_np8ez0hGhH0yTUw,6608
51
65
  fprime_gds/common/gds_cli/events.py,sha256=EpaUfDEaXvPwKu7qutkuU1f8zrFoVNsbyCIGUFUloWI,2123
@@ -58,20 +72,19 @@ fprime_gds/common/history/ram.py,sha256=ELNlyC6SmQJ-ZKD1NRi4H892tt1ppDNfz7R2c0UF
58
72
  fprime_gds/common/history/test.py,sha256=JMOlXPYtS9OTT1xb0GKn2YLI-0ESElbhvhb8usFatz0,5048
59
73
  fprime_gds/common/loaders/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
60
74
  fprime_gds/common/loaders/ch_json_loader.py,sha256=YF0nkDTlEJVZVTBWnjID8HFj8W9yq-hV2CkiyayCuhE,4079
61
- fprime_gds/common/loaders/ch_py_loader.py,sha256=NKJV03k9jOUB9vELVSXyCorIiUwbGx-MlatwOPsUAP8,2688
62
75
  fprime_gds/common/loaders/ch_xml_loader.py,sha256=wRXAC3GkUShvKtb89O5tY92BtKWOFYoJ7loOF7aL5v8,4093
63
76
  fprime_gds/common/loaders/cmd_json_loader.py,sha256=wcwAaalRHXntAb9m0EvX-fXNCj_ruITzItOvKKhXsGQ,3059
64
- fprime_gds/common/loaders/cmd_py_loader.py,sha256=6d_vMP0Vbpg2fnnV4qUtkC-WzlYkVm5kvTUABH-zp4E,2252
65
77
  fprime_gds/common/loaders/cmd_xml_loader.py,sha256=X-fCzLt1aCjqsDu-Exy2gSYDnh_TYi5rDnRpYT7tCZQ,2391
66
78
  fprime_gds/common/loaders/dict_loader.py,sha256=TasuICjsRYPWAsgmHGmsioxa8F7xmgAj9_UplzczylA,3990
67
79
  fprime_gds/common/loaders/event_json_loader.py,sha256=DPVJQ1wIY3r13rxTWrE9n7i6kSAF5m4jB-XRsxaRaDA,3572
68
- fprime_gds/common/loaders/event_py_loader.py,sha256=m4KlDl0mXn8ZQr-IfpUg0KaGIOJUErZkcIohlW9jNPc,2598
69
80
  fprime_gds/common/loaders/event_xml_loader.py,sha256=Q3Vm7ROTVgolSp5umkNMp0Eh95sir6ZAyAegrSjkiis,2875
70
- fprime_gds/common/loaders/json_loader.py,sha256=nXdu3eDI7_FSVbNmjbldFjReBQTxMLg14BpZlSGIAeM,8750
81
+ fprime_gds/common/loaders/fw_type_json_loader.py,sha256=Ybtfv0jNnzcTrnmFfi6EujAbLlA4Oocj3EMFBVRXlCM,2048
82
+ fprime_gds/common/loaders/json_loader.py,sha256=YTvNkVRbaeDAKDs79J5RV7Z8zeO7x0_a8aIz5KLq9rA,9300
83
+ fprime_gds/common/loaders/pkt_json_loader.py,sha256=OuHYXE0FP33oAh0z6AScUdLgFg9VzXI8rqPJz5pdTdw,5080
71
84
  fprime_gds/common/loaders/pkt_xml_loader.py,sha256=ZS4qchqQnIBx0Tw69ehP8yqm1g_uYSQzmnijR3FxqJg,4795
72
- fprime_gds/common/loaders/python_loader.py,sha256=FUNQbFy75bpqvss1JDu2UWZBMrtnMpFegM6mcglh42I,4858
85
+ fprime_gds/common/loaders/prm_json_loader.py,sha256=YCSg3PhVsJTD1FgY_h0i8wV3TNikcZSrczHCzrTM6JM,2896
73
86
  fprime_gds/common/loaders/xml_loader.py,sha256=8AlTTHddJbJqUr6St-zJI8CTqoPuCNtNoRBmdwCorcg,14820
74
- fprime_gds/common/logger/__init__.py,sha256=YBrr9An0fZbp4kvphRl8nLfolkdBqFAsSGzEZXQiH6g,1448
87
+ fprime_gds/common/logger/__init__.py,sha256=TLUbrAnkCtckKGsLzh4hXgEshwQfZsWMDaOOt369BqU,1463
75
88
  fprime_gds/common/logger/data_logger.py,sha256=VjfhTGO1gGw954xNhSc0_zpw8JexCho5f8BlXDEYkL4,2505
76
89
  fprime_gds/common/logger/test_logger.py,sha256=wL8Lq49sVmxGRALgv-ei6AnXFh79qlHFehmKJ1A8X28,6475
77
90
  fprime_gds/common/models/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -82,40 +95,43 @@ fprime_gds/common/models/common/event.py,sha256=gSFrCJT9ZddGJfkf3fGCCqk0aMIQV-SN
82
95
  fprime_gds/common/parsers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
83
96
  fprime_gds/common/parsers/seq_file_parser.py,sha256=6DZrA0jmt8IqsutfK7pdLtYn4oVHO593rWgAOH63yRg,9587
84
97
  fprime_gds/common/pipeline/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
85
- fprime_gds/common/pipeline/dictionaries.py,sha256=j2vPt6P-jPzjlGOfEPwLrkPfQe-QhbjdjL91q4r_w38,7149
86
- fprime_gds/common/pipeline/encoding.py,sha256=rMCBoZOrnLctl4QNlbMro_QiCQ4sapWjtcoFGfvO-WM,6631
98
+ fprime_gds/common/pipeline/dictionaries.py,sha256=x3QCZAg6YB9bEumZ330PGo0ilJqODGyo_K70RgbQ53M,8009
99
+ fprime_gds/common/pipeline/encoding.py,sha256=PttJ8NmXm75mLXyhlmxOJqE8RFt46q1dThaV19PyAr4,7216
87
100
  fprime_gds/common/pipeline/files.py,sha256=J2zm0sucvImtmSnv0iUp5uTpvUO8nlmz2lUdMuMC5aM,2244
88
- fprime_gds/common/pipeline/histories.py,sha256=P1TN6mFOe9f5cZ_a-vCDN9o94vM7ax9n6fQogfUCce0,3548
101
+ fprime_gds/common/pipeline/histories.py,sha256=7KyboNnm9OARQk4meVPSSeYpeqH0G8RWRiy0BLBL1rw,3671
89
102
  fprime_gds/common/pipeline/router.py,sha256=-P1wI0KXEh_snOzDaq8CjEoWuM_zRm8vUMR1T0oY9qQ,2327
90
- fprime_gds/common/pipeline/standard.py,sha256=k0QyPkRxjTMGFC-6O25LDxBQnAa5ibe1hj9cjjEPzOU,9325
103
+ fprime_gds/common/pipeline/standard.py,sha256=fDSPfyhYPMNhev5IQG2j51sCtQxXZ5PrqmulKH8TNjE,9778
91
104
  fprime_gds/common/templates/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
92
105
  fprime_gds/common/templates/ch_template.py,sha256=1MoDZsia0dI_CvnIttwyKLhbQhum35OcJnFc50Xohuo,3893
93
- fprime_gds/common/templates/cmd_template.py,sha256=Bdkfgjb9Yqw7zaZyS8fR9ZUebrkFsRofF0g7xpKtkE4,5180
106
+ fprime_gds/common/templates/cmd_template.py,sha256=n91z4WhFgHwTu6_fQqy7JqpkEObAkllIeEy0AR0DvrQ,5455
94
107
  fprime_gds/common/templates/data_template.py,sha256=U87d8oC-BDTDuBRZbNnPkXy6rI_Pr-XnChHWZunw5jo,735
95
108
  fprime_gds/common/templates/event_template.py,sha256=L0hkWB_kEMhTNodPUqBAev76SMmWT9EWdcqxaaQX9ZE,4062
96
109
  fprime_gds/common/templates/pkt_template.py,sha256=5Wi6389m5j8w7JITBGfeUnw6CYE1-hjcVJ42NJmLDcE,1794
110
+ fprime_gds/common/templates/prm_template.py,sha256=qd0UX4ARZuPWvnFbU_DO3HkQY4QgMfqPxNcNhk-dl9A,2303
97
111
  fprime_gds/common/testing_fw/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
98
- fprime_gds/common/testing_fw/api.py,sha256=6rdgh6M0NkRVy69EeDh4z343Bjxp2CtBLj0b83U2ka8,60566
112
+ fprime_gds/common/testing_fw/api.py,sha256=lnDiyCrnj8Q8uzrmPeFOewSUPX_BvHRisY2jk-4G3eg,66045
99
113
  fprime_gds/common/testing_fw/predicates.py,sha256=CsHsVs_EVXCLQLd2NVOvy8MxmUQVxLMr3i1ouEUqOtQ,18371
100
- fprime_gds/common/testing_fw/pytest_integration.py,sha256=FjbbsfLyScb9w4zypcQgahmNMgmh4yXwryfy9h2eaBY,4667
114
+ fprime_gds/common/testing_fw/pytest_integration.py,sha256=CAvuH9_3RuKplKQVB3t_jerPr-LPzwPWoM6z3lMs16g,6203
115
+ fprime_gds/common/tools/README.md,sha256=WVEciyfsbEVGmb9xR5A6Ioy5pBVnCsWOIJfySLeq9YM,2325
101
116
  fprime_gds/common/tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
117
+ fprime_gds/common/tools/params.py,sha256=htnMLlUW9HmBo4Qc7kYhnWr1sO6bK2mckdskLt5rDUk,9323
102
118
  fprime_gds/common/tools/seqgen.py,sha256=O57igktjWku5OJhBqezhCjPYUmh4GZM-9qKCChqEW7g,6034
103
119
  fprime_gds/common/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
104
- fprime_gds/common/utils/config_manager.py,sha256=fUduhY8COLU04OtxOco4etRgFs0rMdXyLg6GU4OF6F0,5494
105
- fprime_gds/common/utils/data_desc_type.py,sha256=9GV8hV5q1dDxdfF-1-Wty5MBrFd94EbZ8hpHHkBJKuo,715
120
+ fprime_gds/common/utils/config_manager.py,sha256=EurtNdApA9zpIjAXmGSTgFUen0UaVDryH5g9LwMhu1E,5539
121
+ fprime_gds/common/utils/data_desc_type.py,sha256=0AkEMfEa5refd_moovf1hkgKiNakADRzv4soghvf9a4,883
106
122
  fprime_gds/common/utils/event_severity.py,sha256=7qPXHrDaM_REJ7sKBUEJTZIE0D4qVnVajsPDUuHg7sI,300
107
123
  fprime_gds/common/utils/string_util.py,sha256=u_2iahRG3ROu3lAAt_KVcK226gEByElXqrA8mH8eDpI,3584
108
124
  fprime_gds/executables/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
109
- fprime_gds/executables/apps.py,sha256=h2acqdOyMgv77IMEQUc41QcwAZ-_DToX6sZplCk17Zg,6543
110
- fprime_gds/executables/cli.py,sha256=QYtueh38hhPBGVk6IY2cINZn8MtXGin2MNGj-ilWXwQ,36396
111
- fprime_gds/executables/comm.py,sha256=sRCvj02aKP2jvx9AqgDXDF3nfw9OOCgF1ocvfcEYVN8,5032
112
- fprime_gds/executables/data_product_writer.py,sha256=aXnQ75hQ8bapz-sr21mrPCrXIfqQblfBuB49GGZrFLg,34965
113
- fprime_gds/executables/fprime_cli.py,sha256=GvvuUQuoDGBrqQB867bDjUR3Kn5yPUckAY2rdfTa8jo,12432
114
- fprime_gds/executables/run_deployment.py,sha256=01tI0JVONRkKaPPdfJS0Qt1mWm_7Wgf3N9iknozXmYc,7043
125
+ fprime_gds/executables/apps.py,sha256=u79T_PlgMmNmA4YwWjs7LvPMCJnrjnURr05NMthOYP0,13350
126
+ fprime_gds/executables/cli.py,sha256=Qqq3JQOqTsfDRsbTALw25xnwN7fCEVlpcKDV4jvGopQ,50961
127
+ fprime_gds/executables/comm.py,sha256=08rO0o0MJgTRngB7Ygu2IL_gEAWKF7WFvFyro1CqReE,5214
128
+ fprime_gds/executables/data_product_writer.py,sha256=e1Rp2LT_Cpg08f0Ki8GhirC7Wn6LtYiAef7KLAkZHUY,37773
129
+ fprime_gds/executables/fprime_cli.py,sha256=CMoT7zWNwM8h2mSZW03AR96wl_XnZXoLNiOZN_sDi38,12431
130
+ fprime_gds/executables/run_deployment.py,sha256=Zl0Y9-6i6c8tZhcS7XkAeVQtzn0d9fV-3UJQZ0bnBrc,7237
115
131
  fprime_gds/executables/tcpserver.py,sha256=KspVpu5YIuiWKOk5E6UDMKvqXYrRB1j9aX8CkMxysfw,17555
116
132
  fprime_gds/executables/utils.py,sha256=SbzXRe1p41qMPdifvPap5_4v0T42gZZ_Rs_OYfITd80,7626
117
133
  fprime_gds/flask/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
118
- fprime_gds/flask/app.py,sha256=kJDCziri_BwZWKUszkR7u3RaNG_FWRzDkdCPsVDAtYM,6720
134
+ fprime_gds/flask/app.py,sha256=2LTjx5MFP18ypYz_l80i4ijAWuxv7IVtmzCgCk0fBy8,6852
119
135
  fprime_gds/flask/channels.py,sha256=sOeL-UmWPh2hqYvqj81STpABLlPcjdPgkRwjd3Qx77k,735
120
136
  fprime_gds/flask/commands.py,sha256=62R3b0mnjc3_XpULpqJyUSvAcfOjAyZNifQ3wqHKO7s,3658
121
137
  fprime_gds/flask/components.py,sha256=a-eG8XJfSrqR8MIzIc9StwbNwxcBqkxYMEYq46S2Bmk,4176
@@ -125,7 +141,7 @@ fprime_gds/flask/events.py,sha256=BO9OUUwNDnRuOz4ZC6nFHMR7sJJ9P2P0xUxDluGd218,73
125
141
  fprime_gds/flask/json.py,sha256=PBljX3afJzyE_04DvZS4OEFOQW_ldVmfWiTYfxPZiGo,5888
126
142
  fprime_gds/flask/logs.py,sha256=CzHkXtv7_UG2b1c_z_cGIw-jJT088Sb7DggEB3c9D8U,1571
127
143
  fprime_gds/flask/requirements.txt,sha256=K6y8h0MJ66Zq9Pz2ZIR721wV0EX1mYDfom2gmBobxb4,20
128
- fprime_gds/flask/resource.py,sha256=h_zYGODshaInGQi2EpfU5ScDsQCR1RwqS8f7DzyuIOI,4131
144
+ fprime_gds/flask/resource.py,sha256=1gMu2ITtm1YTTe0fksOQOk2OP4Y9gnyWAdf4B7Sst8A,4291
129
145
  fprime_gds/flask/sequence.py,sha256=1FfOFIUdWFX1qXjONAWm1vklPbyhkBYkuPow8RBt-yk,3554
130
146
  fprime_gds/flask/stats.py,sha256=i62envu9V6WpNsRD_mlhwzB_2dGUOCTf1XpyC5HApzg,1177
131
147
  fprime_gds/flask/updown.py,sha256=7za_zgOwQKHgm-3W1OBZqBgDLCmj7c0ziFEduhEuqdU,6176
@@ -143,7 +159,7 @@ fprime_gds/flask/static/addons/channel-render/addon.js,sha256=zAM8H_cVQp4qwXo_9c
143
159
  fprime_gds/flask/static/addons/channel-render/channel-render-template.js,sha256=wS8JOTUWp3OYwVYkBDTRJQjSiIdWFgmbnoMV4RukYj8,1966
144
160
  fprime_gds/flask/static/addons/channel-render/channel-render.js,sha256=hL0aGcnm8HEkhz0leKS7phxYFiG3vzWRznDX0qU4t6c,5080
145
161
  fprime_gds/flask/static/addons/chart-display/addon-templates.js,sha256=gyKy_uIh47s8Yia_xyeL81F-XQ3KpXT48IUo6Q_PwqI,6549
146
- fprime_gds/flask/static/addons/chart-display/addon.js,sha256=wEorz3UhLIyS6oqysUL6Kbq4m4UJPRzbTp7MZh1yVY8,9185
162
+ fprime_gds/flask/static/addons/chart-display/addon.js,sha256=uYBnpK0VqlpOx1aRVr_Cv5AQ7dzGtjsrXHH1xWZtljo,9582
147
163
  fprime_gds/flask/static/addons/chart-display/config.js,sha256=df1HOg3D4v8623yIAZ0ipyWtj5Ip5tVQGyEjnREqObQ,3893
148
164
  fprime_gds/flask/static/addons/chart-display/sibling.js,sha256=2-k13yGpmF69kyBdAPR0tkO1kALQ1FnP3JmdJ01Lbes,3604
149
165
  fprime_gds/flask/static/addons/chart-display/modified-vendor/chartjs-plugin-streaming.js,sha256=zSynedxrMPIlkFT-tROg3n9EJ8tyf1vaguT-jv15klc,30243
@@ -182,7 +198,7 @@ fprime_gds/flask/static/img/error.svg,sha256=dJOAFEQ_DlLvJg-fBuBGDCBua8rbvSzmY3l
182
198
  fprime_gds/flask/static/img/logo.svg,sha256=czqCyVnhqFEw7qsKDMm63w959Pa77nYqY7GyoHVGcZ4,12470
183
199
  fprime_gds/flask/static/img/success.svg,sha256=wCfYG4cPfSCcsZ76JI4SwAJ-y62rahx9rJXyB-2qDIY,1757
184
200
  fprime_gds/flask/static/js/config.js,sha256=3CNrVmUtUGeiomAuoAE22w34r7wA-X0OtXN3JtLZYJ8,1066
185
- fprime_gds/flask/static/js/datastore.js,sha256=mx0ZaUq-Nlb2LParYfnhu0WMUH-JGKKKgRQD_nOcZNE,15437
201
+ fprime_gds/flask/static/js/datastore.js,sha256=AAJKRQbcvQuS-4OScad5zBfYjHljDrjsL5RnTcXx39A,15508
186
202
  fprime_gds/flask/static/js/gds.js,sha256=OeDJrNmNA8hUPi8QIHP-s33MW_IYT3QIccxzL75MsjA,1297
187
203
  fprime_gds/flask/static/js/json.js,sha256=kfwzTqoyLu_Feqcp9WEhDWpZ3lziwHy9LGkOg8PCo6s,12429
188
204
  fprime_gds/flask/static/js/loader.js,sha256=IbuJ7Jh70umyZog0iIupOuRGwc1tO5thT88jTW0XZc4,11414
@@ -190,12 +206,12 @@ fprime_gds/flask/static/js/performance.js,sha256=fGBbK5anf5UB9iAr6rO4u9sCkrQGlOH
190
206
  fprime_gds/flask/static/js/settings.js,sha256=Cfnn1ybZUOmsp48t_b23TDaHBRctvpD_h2ivBVKz6HM,1101
191
207
  fprime_gds/flask/static/js/uploader.js,sha256=HdFUGwJ-SN_OEMXiXXJw0YblC0j_QiOA1y9yVWyS4SI,2730
192
208
  fprime_gds/flask/static/js/validate.js,sha256=yVY_MlpJeRfBRy3-k_JflWqyk-P_YJU3ot-iJtRJFPM,13046
193
- fprime_gds/flask/static/js/vue-support/channel.js,sha256=y1pt5gV-sHqxoBe91RCaQ5ze4BDX-rxon6ag_JHreas,4577
209
+ fprime_gds/flask/static/js/vue-support/channel.js,sha256=d0reMOk2yyyUxV8cvN8VNHkdUI_YHVsVEjj_ZWqyCcY,4577
194
210
  fprime_gds/flask/static/js/vue-support/dashboard-box.js,sha256=yX6eH9BQRKRLHk2eBDv1AjVjpLbl8PP8t-SXQPmi0sU,739
195
211
  fprime_gds/flask/static/js/vue-support/dashboard-row.js,sha256=vCkLANr_8GAkPLV4K0WAXWJohevOTods0VbjMrA5zC0,297
196
212
  fprime_gds/flask/static/js/vue-support/dashboard.js,sha256=WOdmZoivmtg9KbLe8usPjlXTzEO_uwJQIY9iIgMhW2g,3022
197
213
  fprime_gds/flask/static/js/vue-support/downlink.js,sha256=zY7S4w5ylQDQJ9-ihN-_1CUOxacGCuTyVO7-jeVefQg,1589
198
- fprime_gds/flask/static/js/vue-support/event.js,sha256=i1I7_HSPmdLFC-vIshdIcJQUH1SQYL_zhhyPbYUHi8Q,5292
214
+ fprime_gds/flask/static/js/vue-support/event.js,sha256=p9Kh8Po7pN4cMMfP4lhvx8fnoohRTr07p4cPvWaSheM,5292
199
215
  fprime_gds/flask/static/js/vue-support/fp-row.js,sha256=BwfWOxmTD7WPKKSBPlwLq3eARYQUg3pan1PPA9VzKy0,3760
200
216
  fprime_gds/flask/static/js/vue-support/fptable.js,sha256=ETGE4LlBeLXQnOv6-NNtZtk3JadDOPus6ad3tBEooUo,18874
201
217
  fprime_gds/flask/static/js/vue-support/log.js,sha256=40dDjFgmEugTFZFsy0Y1xqNJpnuEfUiZ_-M3HGTPMCc,2735
@@ -226,12 +242,12 @@ fprime_gds/flask/static/third-party/webfonts/fa-solid-900.ttf,sha256=r2OXUD_O-9Y
226
242
  fprime_gds/flask/static/third-party/webfonts/fa-solid-900.woff,sha256=P200iM9lN09vZ2wxU0CwrCvoMr1VJAyAlEjjbvm5YyY,101648
227
243
  fprime_gds/flask/static/third-party/webfonts/fa-solid-900.woff2,sha256=mDS4KtJuKjdYPSJnahLdLrD-fIA1aiEU0NsaqLOJlTc,78268
228
244
  fprime_gds/plugin/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
229
- fprime_gds/plugin/definitions.py,sha256=5rHGSOrr62qRNVfX9bZIo4HDAKG62lKteNum9G40y3g,2347
230
- fprime_gds/plugin/system.py,sha256=uWd6DVW90Re0FoNMPNCx0cXXTJUdpgAAO0mtakzRNgk,8564
231
- fprime_gds-3.6.1.dist-info/LICENSE.txt,sha256=z8d0m5b2O9McPEK1xHG_dWgUBT6EfBDz6wA0F7xSPTA,11358
232
- fprime_gds-3.6.1.dist-info/METADATA,sha256=nxDoqKpYEs-Fv2wpXgiNUpmT1D0fjvGHsYgqjqJT7Hs,24770
233
- fprime_gds-3.6.1.dist-info/NOTICE.txt,sha256=vXjA_xRcQhd83Vfk5D_vXg5kOjnnXvLuMi5vFKDEVmg,1612
234
- fprime_gds-3.6.1.dist-info/WHEEL,sha256=nn6H5-ilmfVryoAQl3ZQ2l8SH5imPWFpm1A5FgEuFV4,91
235
- fprime_gds-3.6.1.dist-info/entry_points.txt,sha256=oqUiO3xhJCR943jdU3zcxbqEvSXNeVgshk7dVaf_nGY,322
236
- fprime_gds-3.6.1.dist-info/top_level.txt,sha256=6vzFLIX6ANfavKaXFHDMSLFtS94a6FaAsIWhjgYuSNE,27
237
- fprime_gds-3.6.1.dist-info/RECORD,,
245
+ fprime_gds/plugin/definitions.py,sha256=QlxW1gNvoiqGMslSJjh3dTFZuv0igFHawN__3XJ0Wns,5355
246
+ fprime_gds/plugin/system.py,sha256=M9xb-8jBhCUUx3X1z2uAP8Wx_v6NkL8JeaFgGcMnQqY,13432
247
+ fprime_gds-4.0.0.dist-info/licenses/LICENSE.txt,sha256=z8d0m5b2O9McPEK1xHG_dWgUBT6EfBDz6wA0F7xSPTA,11358
248
+ fprime_gds-4.0.0.dist-info/licenses/NOTICE.txt,sha256=vXjA_xRcQhd83Vfk5D_vXg5kOjnnXvLuMi5vFKDEVmg,1612
249
+ fprime_gds-4.0.0.dist-info/METADATA,sha256=a-Y4yyp1UyFInL-uaxIxyCBXAQPkkjuW6tFhZaU_fZo,24574
250
+ fprime_gds-4.0.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
251
+ fprime_gds-4.0.0.dist-info/entry_points.txt,sha256=V2XMHMUJUGTVx5s3_kK1jLmoxSKE1vvj2XWHH9y49WQ,423
252
+ fprime_gds-4.0.0.dist-info/top_level.txt,sha256=6vzFLIX6ANfavKaXFHDMSLFtS94a6FaAsIWhjgYuSNE,27
253
+ fprime_gds-4.0.0.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (75.8.1)
2
+ Generator: setuptools (80.9.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
@@ -1,7 +1,9 @@
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
5
  fprime-gds = fprime_gds.executables.run_deployment:main
6
+ fprime-prm-write = fprime_gds.common.tools.params:main
5
7
  fprime-seqgen = fprime_gds.common.tools.seqgen:main
6
8
 
7
9
  [pytest11]
@@ -1,79 +0,0 @@
1
- """
2
- @brief Loader class for importing python based channel dictionaries
3
-
4
- @date Created July 11, 2018
5
- @author R. Joseph Paetz
6
-
7
- @bug No known bugs
8
- """
9
-
10
- from fprime_gds.common.templates.ch_template import ChTemplate
11
-
12
- # Custom Python Modules
13
- from .python_loader import PythonLoader
14
-
15
-
16
- class ChPyLoader(PythonLoader):
17
- """Class to load python based telemetry channel dictionaries"""
18
-
19
- # Field names in the python module files (used to construct dictionaries)
20
- ID_FIELD = "ID"
21
- NAME_FIELD = "NAME"
22
- COMP_FIELD = "COMPONENT"
23
- DESC_FIELD = "CHANNEL_DESCRIPTION"
24
- TYPE_FIELD = "TYPE"
25
- FMT_STR_FIELD = "FORMAT_STRING"
26
- LOW_R_FIELD = "LOW_RED"
27
- LOW_O_FIELD = "LOW_ORANGE"
28
- LOW_Y_FIELD = "LOW_YELLOW"
29
- HIGH_Y_FIELD = "HIGH_YELLOW"
30
- HIGH_O_FIELD = "HIGH_ORANGE"
31
- HIGH_R_FIELD = "HIGH_RED"
32
-
33
- def construct_dicts(self, path):
34
- """
35
- Constructs and returns python dictionaries keyed on id and name
36
-
37
- This function should not be called directly, instead, use
38
- get_id_dict(path) and get_name_dict(path)
39
-
40
- Args:
41
- path: Path to the python module file dictionary to convert. This
42
- should be a directory. If using a regular fprime deployment,
43
- this should be a path to the events dictionary in your
44
- generated folder:
45
- ${GENERATED_FOLDER_LOCATION}/generated/${DEPLOYMENT}/channels
46
-
47
- Returns:
48
- A tuple with two channel dictionaries (python type dict):
49
- (id_dict, name_dict). The keys should be the channels' id and
50
- name fields respectively and the values should be ChTemplate
51
- objects.
52
- """
53
- # We do need it sometimes, so if we don't always set it to true, we will need to pass an arg
54
- module_dicts = self.read_dict(path, use_superpkg=True)
55
-
56
- id_dict = {}
57
- name_dict = {}
58
-
59
- for ch_dict in module_dicts:
60
- # Create a channel template object
61
- ch_temp = ChTemplate(
62
- ch_dict[self.ID_FIELD],
63
- ch_dict[self.NAME_FIELD],
64
- ch_dict[self.COMP_FIELD],
65
- ch_dict[self.TYPE_FIELD],
66
- ch_dict[self.FMT_STR_FIELD],
67
- ch_dict[self.DESC_FIELD],
68
- ch_dict[self.LOW_R_FIELD],
69
- ch_dict[self.LOW_O_FIELD],
70
- ch_dict[self.LOW_Y_FIELD],
71
- ch_dict[self.HIGH_Y_FIELD],
72
- ch_dict[self.HIGH_O_FIELD],
73
- ch_dict[self.HIGH_R_FIELD],
74
- )
75
-
76
- id_dict[ch_dict[self.ID_FIELD]] = ch_temp
77
- name_dict[ch_dict[self.NAME_FIELD]] = ch_temp
78
-
79
- return id_dict, name_dict
@@ -1,66 +0,0 @@
1
- """
2
- @brief Loader class for importing python based command dictionaries
3
-
4
- @date Created July 9, 2018
5
- @author R. Joseph Paetz
6
-
7
- @bug No known bugs
8
- """
9
-
10
- from fprime_gds.common.templates import cmd_template
11
-
12
- # Custom Python Modules
13
- from . import python_loader
14
-
15
-
16
- class CmdPyLoader(python_loader.PythonLoader):
17
- """Class to load python based command dictionaries"""
18
-
19
- # Field names in the python module file dictionaries
20
- COMPONENT_FIELD = "COMPONENT"
21
- MNEMONIC_FIELD = "MNEMONIC"
22
- OP_CODE_FIELD = "OP_CODE"
23
- DESC_FIELD = "CMD_DESCRIPTION"
24
- ARGS_FIELD = "ARGUMENTS"
25
-
26
- def construct_dicts(self, path):
27
- """
28
- Constructs and returns python dictionaries keyed on id and name
29
-
30
- This function should not be called directly, instead use
31
- get_id_dict(path) and get_name_dict(path) defined in the base Loader
32
- class. For the command dictionary, the op_code is treated as the ID and
33
- the command mnemonic is treated as the name.
34
-
35
- Args:
36
- path: Path to the python module file dictionary to convert. This
37
- should be a directory. If using a regular fprime deployment,
38
- this should be a path to the events dictionary in your
39
- generated folder:
40
- ${GENERATED_FOLDER_LOCATION}/generated/${DEPLOYMENT}/events
41
-
42
- Returns:
43
- A tuple with two event dictionaries (python type dict):
44
- (id_dict, name_dict). They should have keys of the id and name
45
- fields respectively and the values for both should be event_template
46
- objects.
47
- """
48
- module_dicts = self.read_dict(path, use_superpkg=True)
49
-
50
- id_dict = {}
51
- name_dict = {}
52
-
53
- for cmd_dict in module_dicts:
54
- # Create a cmd template object
55
- cmd_temp = cmd_template.CmdTemplate(
56
- cmd_dict[self.OP_CODE_FIELD],
57
- cmd_dict[self.MNEMONIC_FIELD],
58
- cmd_dict[self.COMPONENT_FIELD],
59
- cmd_dict[self.ARGS_FIELD],
60
- cmd_dict[self.DESC_FIELD],
61
- )
62
-
63
- id_dict[cmd_dict[self.OP_CODE_FIELD]] = cmd_temp
64
- name_dict[cmd_dict[self.MNEMONIC_FIELD]] = cmd_temp
65
-
66
- return id_dict, name_dict
@@ -1,75 +0,0 @@
1
- """
2
- @brief Loader class for importing python based event dictionaries
3
-
4
- @date Created July 3, 2018
5
- @author R. Joseph Paetz
6
-
7
- @bug No known bugs
8
- """
9
-
10
- from fprime.common.models.serialize.type_exceptions import TypeMismatchException
11
-
12
- from fprime_gds.common.templates import event_template
13
- from fprime_gds.common.utils.event_severity import EventSeverity
14
-
15
- # Custom Python Modules
16
- from . import python_loader
17
-
18
-
19
- class EventPyLoader(python_loader.PythonLoader):
20
- """Class to load python based event dictionaries"""
21
-
22
- # Field names in the python module file dictionaries
23
- ID_FIELD = "ID"
24
- NAME_FIELD = "NAME"
25
- COMP_FIELD = "COMPONENT"
26
- SEVERITY_FIELD = "SEVERITY"
27
- FMT_STR_FIELD = "FORMAT_STRING"
28
- DESC_FIELD = "EVENT_DESCRIPTION"
29
- ARGS_FIELD = "ARGUMENTS"
30
-
31
- def construct_dicts(self, path):
32
- """
33
- Constructs and returns python dictionaries keyed on id and name
34
-
35
- This function should not be called directly, instead use
36
- get_id_dict(path) and get_name_dict(path)
37
-
38
- Args:
39
- path: Path to the python module file dictionary to convert. This
40
- should be a directory. If using a regular fprime deployment,
41
- this should be a path to the events dictionary in your
42
- generated folder:
43
- ${GENERATED_FOLDER_LOCATION}/generated/${DEPLOYMENT}/events
44
-
45
- Returns:
46
- A tuple with two event dictionaries (python type dict):
47
- (id_dict, name_dict). The keys should be the events' id and name
48
- fields respectively and the values should be EventTemplate
49
- objects.
50
- """
51
- module_dicts = self.read_dict(path, use_superpkg=True)
52
-
53
- id_dict = {}
54
- name_dict = {}
55
-
56
- for event_dict in module_dicts:
57
-
58
- try:
59
- # Create an event template object
60
- event_temp = event_template.EventTemplate(
61
- event_dict[self.ID_FIELD],
62
- event_dict[self.NAME_FIELD],
63
- event_dict[self.COMP_FIELD],
64
- event_dict[self.ARGS_FIELD],
65
- EventSeverity[event_dict[self.SEVERITY_FIELD]],
66
- event_dict[self.FMT_STR_FIELD],
67
- event_dict[self.DESC_FIELD],
68
- )
69
- id_dict[event_dict[self.ID_FIELD]] = event_temp
70
- name_dict[event_dict[self.NAME_FIELD]] = event_temp
71
- except TypeMismatchException as error:
72
- print(f"Type mismatch: {error.getMsg()}")
73
- raise error
74
-
75
- return id_dict, name_dict
@@ -1,132 +0,0 @@
1
- """
2
- @brief Base class for all loaders that load dictionaries of python fragments
3
-
4
- The PythonLoader class inherits from the DictLoader base class and is intended
5
- to be inherited by all loader classes that read dictionaries in the file system
6
- made up of multiple python file fragments.
7
-
8
- This Class only adds helper functions and thus does not overwrite any methods in
9
- in the base DictLoader class. Because of this, all dictionaries returned from
10
- this class will be empty.
11
-
12
- @date Created July 3, 2018
13
- @author R. Joseph Paetz
14
-
15
- @bug No known bugs
16
- """
17
-
18
- import glob
19
- import importlib
20
- import os
21
- import sys
22
-
23
- from fprime_gds.common.data_types import exceptions
24
-
25
- # Custom Python Modules
26
- from . import dict_loader
27
-
28
-
29
- class PythonLoader(dict_loader.DictLoader):
30
- """Class to help load python file based dictionaries"""
31
-
32
- def read_dict(self, path, use_superpkg=False):
33
- """
34
- Reads all python modules at the given path and constructs a dict list
35
-
36
- This function assumes that path is a directory containing many python
37
- module files. Each module file has several fields with associated
38
- values. This function reads each file and constructs a dictionary using
39
- the fields and their values. These dictionaries are then compiled into
40
- a list that is returned.
41
-
42
- Args:
43
- path: File Path to a folder containing python modules to load
44
- use_superpkg: [Default=False] When true, modules will be imported
45
- using both the package and superpackage qualifiers
46
- (from A.B import C instead of from B import C). This
47
- allows multiple dictionaries with the same package
48
- name to be imported. This is especially important
49
- when trying to import dictionaries from multiple
50
- deployments.
51
-
52
- Returns:
53
- A list of dictionaries. Each dictionary represents one loaded module
54
- and for keys has the names of the fields in the file and for values
55
- has the values of those fields.
56
- """
57
- modules = self.import_modules(path, use_superpkg)
58
-
59
- module_dicts = []
60
- for module in modules:
61
- # Create a dictionary for this module's fields
62
- mod_dict = {
63
- field: getattr(module, field)
64
- for field in dir(module)
65
- if field.find("__") != 0 # Verify it is not a hidden field (doesn't start with "__")
66
- }
67
-
68
- module_dicts.append(mod_dict)
69
-
70
- return module_dicts
71
-
72
- @staticmethod
73
- def import_modules(path, use_superpkg):
74
- """
75
- Imports all modules in the given directory.
76
-
77
- Args:
78
- path: File Path to a folder containing python modules to load
79
- use_superpkg: When true, modules will be imported
80
- using both the package and superpackage qualifiers
81
- (from A.B import C instead of from B import C). This
82
- allows multiple dictionaries with the same package
83
- name to be imported. This is especially important
84
- when trying to import dictionaries from multiple
85
- deployments.
86
-
87
- Returns:
88
- A list of module objects of all the newly imported modules
89
- """
90
- # Verify path is a directory
91
- if not os.path.isdir(path):
92
- raise exceptions.GseControllerUndefinedDirectoryException(path)
93
-
94
- # Compute package and superpackage names
95
- (superpkg_path, pkg) = os.path.split(path)
96
- (rest_of_path, superpkg) = os.path.split(superpkg_path)
97
-
98
- # Make sure the directory we are importing from is in the python path
99
- if use_superpkg:
100
- sys.path.append(rest_of_path)
101
- else:
102
- sys.path.append(superpkg_path)
103
-
104
- # Make sure serializable directory is imported
105
- sys.path.append(superpkg_path + os.sep + "serializable")
106
-
107
- # Compute a list of all files to import
108
- all_files = glob.glob(path + os.sep + "*.py")
109
-
110
- module_files = []
111
- for py_file in all_files:
112
- (file_path, file_name) = os.path.split(py_file)
113
- if file_name != "__init__.py":
114
- module_files.append(file_name)
115
-
116
- # Import modules
117
- module_list = []
118
- for mf in module_files:
119
- # Strip off .py from name by splitting at '.' and taking the first
120
- # string
121
- mod_name = mf.split(".")[0]
122
-
123
- if use_superpkg:
124
- import_name = f"{superpkg}.{pkg}.{mod_name}"
125
- else:
126
- import_name = f"{pkg}.{mod_name}"
127
-
128
- m = importlib.import_module(import_name)
129
-
130
- module_list.append(m)
131
-
132
- return module_list