fprime-gds 3.6.1__py3-none-any.whl → 4.0.0a1__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 (52) hide show
  1. fprime_gds/common/decoders/ch_decoder.py +1 -1
  2. fprime_gds/common/decoders/event_decoder.py +2 -1
  3. fprime_gds/common/decoders/pkt_decoder.py +1 -1
  4. fprime_gds/common/distributor/distributor.py +2 -2
  5. fprime_gds/common/encoders/ch_encoder.py +2 -2
  6. fprime_gds/common/encoders/cmd_encoder.py +2 -2
  7. fprime_gds/common/encoders/event_encoder.py +2 -2
  8. fprime_gds/common/encoders/pkt_encoder.py +2 -2
  9. fprime_gds/common/encoders/seq_writer.py +2 -2
  10. fprime_gds/common/fpy/__init__.py +0 -0
  11. fprime_gds/common/fpy/serialize_bytecode.py +229 -0
  12. fprime_gds/common/fpy/types.py +203 -0
  13. fprime_gds/common/gds_cli/base_commands.py +1 -1
  14. fprime_gds/common/handlers.py +39 -0
  15. fprime_gds/common/loaders/fw_type_json_loader.py +54 -0
  16. fprime_gds/common/loaders/json_loader.py +15 -0
  17. fprime_gds/common/loaders/pkt_json_loader.py +121 -0
  18. fprime_gds/common/loaders/prm_json_loader.py +85 -0
  19. fprime_gds/common/pipeline/dictionaries.py +53 -43
  20. fprime_gds/common/pipeline/encoding.py +19 -0
  21. fprime_gds/common/pipeline/histories.py +4 -0
  22. fprime_gds/common/pipeline/standard.py +16 -2
  23. fprime_gds/common/templates/prm_template.py +81 -0
  24. fprime_gds/common/testing_fw/api.py +42 -0
  25. fprime_gds/common/testing_fw/pytest_integration.py +25 -2
  26. fprime_gds/common/tools/README.md +34 -0
  27. fprime_gds/common/tools/params.py +246 -0
  28. fprime_gds/common/utils/config_manager.py +6 -6
  29. fprime_gds/executables/apps.py +184 -11
  30. fprime_gds/executables/cli.py +280 -122
  31. fprime_gds/executables/comm.py +5 -2
  32. fprime_gds/executables/fprime_cli.py +3 -3
  33. fprime_gds/executables/run_deployment.py +10 -3
  34. fprime_gds/flask/app.py +3 -0
  35. fprime_gds/flask/resource.py +5 -2
  36. fprime_gds/flask/static/addons/chart-display/addon.js +8 -3
  37. fprime_gds/flask/static/js/datastore.js +1 -0
  38. fprime_gds/flask/static/js/vue-support/channel.js +1 -1
  39. fprime_gds/flask/static/js/vue-support/event.js +1 -1
  40. fprime_gds/plugin/definitions.py +86 -8
  41. fprime_gds/plugin/system.py +171 -58
  42. {fprime_gds-3.6.1.dist-info → fprime_gds-4.0.0a1.dist-info}/METADATA +17 -19
  43. {fprime_gds-3.6.1.dist-info → fprime_gds-4.0.0a1.dist-info}/RECORD +48 -43
  44. {fprime_gds-3.6.1.dist-info → fprime_gds-4.0.0a1.dist-info}/WHEEL +1 -1
  45. {fprime_gds-3.6.1.dist-info → fprime_gds-4.0.0a1.dist-info}/entry_points.txt +2 -0
  46. fprime_gds/common/loaders/ch_py_loader.py +0 -79
  47. fprime_gds/common/loaders/cmd_py_loader.py +0 -66
  48. fprime_gds/common/loaders/event_py_loader.py +0 -75
  49. fprime_gds/common/loaders/python_loader.py +0 -132
  50. {fprime_gds-3.6.1.dist-info → fprime_gds-4.0.0a1.dist-info/licenses}/LICENSE.txt +0 -0
  51. {fprime_gds-3.6.1.dist-info → fprime_gds-4.0.0a1.dist-info/licenses}/NOTICE.txt +0 -0
  52. {fprime_gds-3.6.1.dist-info → fprime_gds-4.0.0a1.dist-info}/top_level.txt +0 -0
@@ -2,7 +2,7 @@ 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
@@ -24,28 +24,31 @@ fprime_gds/common/data_types/file_data.py,sha256=4_G9kf4ThC5NzkxnKa0xNYBdi8UDvZg
24
24
  fprime_gds/common/data_types/pkt_data.py,sha256=cxqUnsPte0ijF1E8F1_uglVKIJFAIQbpoBlmwRjMrJY,3405
25
25
  fprime_gds/common/data_types/sys_data.py,sha256=Xfk5xryFg7zWS3VcGUDx9lQYBTajjWXvwkgFK5EUCG4,2095
26
26
  fprime_gds/common/decoders/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
27
- fprime_gds/common/decoders/ch_decoder.py,sha256=qQOguQ8hlGnq9VxZUMUvNtzOPrvc2mziNWFlK8RQfP4,3842
27
+ fprime_gds/common/decoders/ch_decoder.py,sha256=mx0yfT-DQqQ8TrmRM3dr79eL9_E-c0gsKiKvvsjAu98,3849
28
28
  fprime_gds/common/decoders/decoder.py,sha256=9j7u05_nwXaEjR0etsoB--ATsHuILYCXlhk9m9yajKg,2655
29
- fprime_gds/common/decoders/event_decoder.py,sha256=fudUDyObFcGG3GiIHrPHmIrT4A6iCbbikEo16QW5XQs,4210
29
+ fprime_gds/common/decoders/event_decoder.py,sha256=BH1Q_489ZgBhqMutG-WwMGikpXsqiv-Jd2zZsHZBLnc,4280
30
30
  fprime_gds/common/decoders/file_decoder.py,sha256=Ky2U8bli3YL6GbT9jSSvI73ySOtf0cdZLK4FXTuWjfA,2542
31
- fprime_gds/common/decoders/pkt_decoder.py,sha256=puD3v9cUDrtZxulXo7b4rL3OPWWMygDJQnGJe6AcNLM,3315
31
+ fprime_gds/common/decoders/pkt_decoder.py,sha256=kW8k3OSbMy96w6MzsGWp656lAQvwxrIznWkD3Sbi8Ig,3329
32
32
  fprime_gds/common/distributor/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
33
- fprime_gds/common/distributor/distributor.py,sha256=HY0X8LpweH0EV1hozlFeSHE_Qwm4VuT5fy-abDldVS0,7776
33
+ fprime_gds/common/distributor/distributor.py,sha256=aQ9zAQJJot9MCllEoCuEK4ILTKEsBMYFBufTTzUtca0,7791
34
34
  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
35
+ fprime_gds/common/encoders/ch_encoder.py,sha256=TBrTJ7TK4WwCh6KAspozh63WcPxrMImloB8tz7qeulw,2878
36
+ fprime_gds/common/encoders/cmd_encoder.py,sha256=5wG5854ozmxctnYou3q9MdQNkTQEmpCiT4oBVgNRZdE,3499
37
37
  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
38
+ fprime_gds/common/encoders/event_encoder.py,sha256=aM_3hWWx4OrLKF3-MlhmGSBYnzt-4iktSzMVrcUbfB8,3140
39
39
  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
40
+ fprime_gds/common/encoders/pkt_encoder.py,sha256=6hzwrAEg1tjGw9yGycWMuNgbGCoe87Cd-7eP1rvy2d4,3126
41
+ fprime_gds/common/encoders/seq_writer.py,sha256=rH1I8trAHBKjqxQtNg1isTmLWqAjK3xtZbETTCp6RQI,6882
42
42
  fprime_gds/common/files/File Decoder Documentation.txt,sha256=a-VYHcUMqh7mBGY2fqvMf1nd3gdg3cLdPKwrulNKXjc,5314
43
43
  fprime_gds/common/files/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
44
44
  fprime_gds/common/files/downlinker.py,sha256=CZPfhH0J9-LNqW5Cv_ryicLTuoedLSWK8OPQmmQDZZY,7498
45
45
  fprime_gds/common/files/helpers.py,sha256=sGaxcczXmZ5_soawT7x_eJ_cC2PZ6KOGBfusAV4QC_g,7219
46
46
  fprime_gds/common/files/uplinker.py,sha256=lgqhlgeipBt3Arx-ohzK8vCdS54fKpv9Rg7SUTocUX8,13244
47
+ fprime_gds/common/fpy/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
48
+ fprime_gds/common/fpy/serialize_bytecode.py,sha256=RbBojtDGUjZyqGqKfqzJDLzU0Z9UBsNGaKMf8y2Qz7o,7283
49
+ fprime_gds/common/fpy/types.py,sha256=XeDG6E_cm57lpG4wEdZuoGgtEJeSO8WmkCsIBbwWoQc,6143
47
50
  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
51
+ fprime_gds/common/gds_cli/base_commands.py,sha256=nHnzHRMXs9haRjiUmq-Ciu1DSo1BXtcVscByk1Ypsxo,9432
49
52
  fprime_gds/common/gds_cli/channels.py,sha256=S8y0Mo2JbBFPvMzeW22HFVJ8p-UC-tzpYM7rXqIGWi4,2136
50
53
  fprime_gds/common/gds_cli/command_send.py,sha256=pMPwCixiuhk3r1mP7IbHLlItxYf_np8ez0hGhH0yTUw,6608
51
54
  fprime_gds/common/gds_cli/events.py,sha256=EpaUfDEaXvPwKu7qutkuU1f8zrFoVNsbyCIGUFUloWI,2123
@@ -58,18 +61,17 @@ fprime_gds/common/history/ram.py,sha256=ELNlyC6SmQJ-ZKD1NRi4H892tt1ppDNfz7R2c0UF
58
61
  fprime_gds/common/history/test.py,sha256=JMOlXPYtS9OTT1xb0GKn2YLI-0ESElbhvhb8usFatz0,5048
59
62
  fprime_gds/common/loaders/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
60
63
  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
64
  fprime_gds/common/loaders/ch_xml_loader.py,sha256=wRXAC3GkUShvKtb89O5tY92BtKWOFYoJ7loOF7aL5v8,4093
63
65
  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
66
  fprime_gds/common/loaders/cmd_xml_loader.py,sha256=X-fCzLt1aCjqsDu-Exy2gSYDnh_TYi5rDnRpYT7tCZQ,2391
66
67
  fprime_gds/common/loaders/dict_loader.py,sha256=TasuICjsRYPWAsgmHGmsioxa8F7xmgAj9_UplzczylA,3990
67
68
  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
69
  fprime_gds/common/loaders/event_xml_loader.py,sha256=Q3Vm7ROTVgolSp5umkNMp0Eh95sir6ZAyAegrSjkiis,2875
70
- fprime_gds/common/loaders/json_loader.py,sha256=nXdu3eDI7_FSVbNmjbldFjReBQTxMLg14BpZlSGIAeM,8750
70
+ fprime_gds/common/loaders/fw_type_json_loader.py,sha256=Ybtfv0jNnzcTrnmFfi6EujAbLlA4Oocj3EMFBVRXlCM,2048
71
+ fprime_gds/common/loaders/json_loader.py,sha256=YTvNkVRbaeDAKDs79J5RV7Z8zeO7x0_a8aIz5KLq9rA,9300
72
+ fprime_gds/common/loaders/pkt_json_loader.py,sha256=ZTNNeZymdA3G3r7XFO4S7sCYzfMnk4-XRyuOeudwNzM,4897
71
73
  fprime_gds/common/loaders/pkt_xml_loader.py,sha256=ZS4qchqQnIBx0Tw69ehP8yqm1g_uYSQzmnijR3FxqJg,4795
72
- fprime_gds/common/loaders/python_loader.py,sha256=FUNQbFy75bpqvss1JDu2UWZBMrtnMpFegM6mcglh42I,4858
74
+ fprime_gds/common/loaders/prm_json_loader.py,sha256=YCSg3PhVsJTD1FgY_h0i8wV3TNikcZSrczHCzrTM6JM,2896
73
75
  fprime_gds/common/loaders/xml_loader.py,sha256=8AlTTHddJbJqUr6St-zJI8CTqoPuCNtNoRBmdwCorcg,14820
74
76
  fprime_gds/common/logger/__init__.py,sha256=YBrr9An0fZbp4kvphRl8nLfolkdBqFAsSGzEZXQiH6g,1448
75
77
  fprime_gds/common/logger/data_logger.py,sha256=VjfhTGO1gGw954xNhSc0_zpw8JexCho5f8BlXDEYkL4,2505
@@ -82,40 +84,43 @@ fprime_gds/common/models/common/event.py,sha256=gSFrCJT9ZddGJfkf3fGCCqk0aMIQV-SN
82
84
  fprime_gds/common/parsers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
83
85
  fprime_gds/common/parsers/seq_file_parser.py,sha256=6DZrA0jmt8IqsutfK7pdLtYn4oVHO593rWgAOH63yRg,9587
84
86
  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
87
+ fprime_gds/common/pipeline/dictionaries.py,sha256=CfK1umDA3Kg9YEwNu9Tp_iIWjQMdeXqOddpxBfUqXx8,7586
88
+ fprime_gds/common/pipeline/encoding.py,sha256=PttJ8NmXm75mLXyhlmxOJqE8RFt46q1dThaV19PyAr4,7216
87
89
  fprime_gds/common/pipeline/files.py,sha256=J2zm0sucvImtmSnv0iUp5uTpvUO8nlmz2lUdMuMC5aM,2244
88
- fprime_gds/common/pipeline/histories.py,sha256=P1TN6mFOe9f5cZ_a-vCDN9o94vM7ax9n6fQogfUCce0,3548
90
+ fprime_gds/common/pipeline/histories.py,sha256=7KyboNnm9OARQk4meVPSSeYpeqH0G8RWRiy0BLBL1rw,3671
89
91
  fprime_gds/common/pipeline/router.py,sha256=-P1wI0KXEh_snOzDaq8CjEoWuM_zRm8vUMR1T0oY9qQ,2327
90
- fprime_gds/common/pipeline/standard.py,sha256=k0QyPkRxjTMGFC-6O25LDxBQnAa5ibe1hj9cjjEPzOU,9325
92
+ fprime_gds/common/pipeline/standard.py,sha256=fDSPfyhYPMNhev5IQG2j51sCtQxXZ5PrqmulKH8TNjE,9778
91
93
  fprime_gds/common/templates/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
92
94
  fprime_gds/common/templates/ch_template.py,sha256=1MoDZsia0dI_CvnIttwyKLhbQhum35OcJnFc50Xohuo,3893
93
95
  fprime_gds/common/templates/cmd_template.py,sha256=Bdkfgjb9Yqw7zaZyS8fR9ZUebrkFsRofF0g7xpKtkE4,5180
94
96
  fprime_gds/common/templates/data_template.py,sha256=U87d8oC-BDTDuBRZbNnPkXy6rI_Pr-XnChHWZunw5jo,735
95
97
  fprime_gds/common/templates/event_template.py,sha256=L0hkWB_kEMhTNodPUqBAev76SMmWT9EWdcqxaaQX9ZE,4062
96
98
  fprime_gds/common/templates/pkt_template.py,sha256=5Wi6389m5j8w7JITBGfeUnw6CYE1-hjcVJ42NJmLDcE,1794
99
+ fprime_gds/common/templates/prm_template.py,sha256=qd0UX4ARZuPWvnFbU_DO3HkQY4QgMfqPxNcNhk-dl9A,2303
97
100
  fprime_gds/common/testing_fw/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
98
- fprime_gds/common/testing_fw/api.py,sha256=6rdgh6M0NkRVy69EeDh4z343Bjxp2CtBLj0b83U2ka8,60566
101
+ fprime_gds/common/testing_fw/api.py,sha256=mp93lZtAOcFj3sPS5Otk4CCu37680_QgWN8fDIj7jNs,62379
99
102
  fprime_gds/common/testing_fw/predicates.py,sha256=CsHsVs_EVXCLQLd2NVOvy8MxmUQVxLMr3i1ouEUqOtQ,18371
100
- fprime_gds/common/testing_fw/pytest_integration.py,sha256=FjbbsfLyScb9w4zypcQgahmNMgmh4yXwryfy9h2eaBY,4667
103
+ fprime_gds/common/testing_fw/pytest_integration.py,sha256=BqIevoSBDoKvLBy3HIGtxGbbvOit1a7Ea5X1SSBCK8M,5728
104
+ fprime_gds/common/tools/README.md,sha256=WVEciyfsbEVGmb9xR5A6Ioy5pBVnCsWOIJfySLeq9YM,2325
101
105
  fprime_gds/common/tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
106
+ fprime_gds/common/tools/params.py,sha256=htnMLlUW9HmBo4Qc7kYhnWr1sO6bK2mckdskLt5rDUk,9323
102
107
  fprime_gds/common/tools/seqgen.py,sha256=O57igktjWku5OJhBqezhCjPYUmh4GZM-9qKCChqEW7g,6034
103
108
  fprime_gds/common/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
104
- fprime_gds/common/utils/config_manager.py,sha256=fUduhY8COLU04OtxOco4etRgFs0rMdXyLg6GU4OF6F0,5494
109
+ fprime_gds/common/utils/config_manager.py,sha256=EurtNdApA9zpIjAXmGSTgFUen0UaVDryH5g9LwMhu1E,5539
105
110
  fprime_gds/common/utils/data_desc_type.py,sha256=9GV8hV5q1dDxdfF-1-Wty5MBrFd94EbZ8hpHHkBJKuo,715
106
111
  fprime_gds/common/utils/event_severity.py,sha256=7qPXHrDaM_REJ7sKBUEJTZIE0D4qVnVajsPDUuHg7sI,300
107
112
  fprime_gds/common/utils/string_util.py,sha256=u_2iahRG3ROu3lAAt_KVcK226gEByElXqrA8mH8eDpI,3584
108
113
  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
114
+ fprime_gds/executables/apps.py,sha256=iyHloLaHJOkcZF6O3oXZX6YpoS2SBBZVPilf25l0Q98,13138
115
+ fprime_gds/executables/cli.py,sha256=kdwQ3Wqi7zg0v3QkOyy3YEh3w3T520yGmIMJEk4mAzs,43180
116
+ fprime_gds/executables/comm.py,sha256=08rO0o0MJgTRngB7Ygu2IL_gEAWKF7WFvFyro1CqReE,5214
112
117
  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
118
+ fprime_gds/executables/fprime_cli.py,sha256=CMoT7zWNwM8h2mSZW03AR96wl_XnZXoLNiOZN_sDi38,12431
119
+ fprime_gds/executables/run_deployment.py,sha256=sOtvVcNOSUZMvELc4cDVAXhBNAFIWM3OjxLq_sXf0tc,7177
115
120
  fprime_gds/executables/tcpserver.py,sha256=KspVpu5YIuiWKOk5E6UDMKvqXYrRB1j9aX8CkMxysfw,17555
116
121
  fprime_gds/executables/utils.py,sha256=SbzXRe1p41qMPdifvPap5_4v0T42gZZ_Rs_OYfITd80,7626
117
122
  fprime_gds/flask/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
118
- fprime_gds/flask/app.py,sha256=kJDCziri_BwZWKUszkR7u3RaNG_FWRzDkdCPsVDAtYM,6720
123
+ fprime_gds/flask/app.py,sha256=2LTjx5MFP18ypYz_l80i4ijAWuxv7IVtmzCgCk0fBy8,6852
119
124
  fprime_gds/flask/channels.py,sha256=sOeL-UmWPh2hqYvqj81STpABLlPcjdPgkRwjd3Qx77k,735
120
125
  fprime_gds/flask/commands.py,sha256=62R3b0mnjc3_XpULpqJyUSvAcfOjAyZNifQ3wqHKO7s,3658
121
126
  fprime_gds/flask/components.py,sha256=a-eG8XJfSrqR8MIzIc9StwbNwxcBqkxYMEYq46S2Bmk,4176
@@ -125,7 +130,7 @@ fprime_gds/flask/events.py,sha256=BO9OUUwNDnRuOz4ZC6nFHMR7sJJ9P2P0xUxDluGd218,73
125
130
  fprime_gds/flask/json.py,sha256=PBljX3afJzyE_04DvZS4OEFOQW_ldVmfWiTYfxPZiGo,5888
126
131
  fprime_gds/flask/logs.py,sha256=CzHkXtv7_UG2b1c_z_cGIw-jJT088Sb7DggEB3c9D8U,1571
127
132
  fprime_gds/flask/requirements.txt,sha256=K6y8h0MJ66Zq9Pz2ZIR721wV0EX1mYDfom2gmBobxb4,20
128
- fprime_gds/flask/resource.py,sha256=h_zYGODshaInGQi2EpfU5ScDsQCR1RwqS8f7DzyuIOI,4131
133
+ fprime_gds/flask/resource.py,sha256=1gMu2ITtm1YTTe0fksOQOk2OP4Y9gnyWAdf4B7Sst8A,4291
129
134
  fprime_gds/flask/sequence.py,sha256=1FfOFIUdWFX1qXjONAWm1vklPbyhkBYkuPow8RBt-yk,3554
130
135
  fprime_gds/flask/stats.py,sha256=i62envu9V6WpNsRD_mlhwzB_2dGUOCTf1XpyC5HApzg,1177
131
136
  fprime_gds/flask/updown.py,sha256=7za_zgOwQKHgm-3W1OBZqBgDLCmj7c0ziFEduhEuqdU,6176
@@ -143,7 +148,7 @@ fprime_gds/flask/static/addons/channel-render/addon.js,sha256=zAM8H_cVQp4qwXo_9c
143
148
  fprime_gds/flask/static/addons/channel-render/channel-render-template.js,sha256=wS8JOTUWp3OYwVYkBDTRJQjSiIdWFgmbnoMV4RukYj8,1966
144
149
  fprime_gds/flask/static/addons/channel-render/channel-render.js,sha256=hL0aGcnm8HEkhz0leKS7phxYFiG3vzWRznDX0qU4t6c,5080
145
150
  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
151
+ fprime_gds/flask/static/addons/chart-display/addon.js,sha256=uYBnpK0VqlpOx1aRVr_Cv5AQ7dzGtjsrXHH1xWZtljo,9582
147
152
  fprime_gds/flask/static/addons/chart-display/config.js,sha256=df1HOg3D4v8623yIAZ0ipyWtj5Ip5tVQGyEjnREqObQ,3893
148
153
  fprime_gds/flask/static/addons/chart-display/sibling.js,sha256=2-k13yGpmF69kyBdAPR0tkO1kALQ1FnP3JmdJ01Lbes,3604
149
154
  fprime_gds/flask/static/addons/chart-display/modified-vendor/chartjs-plugin-streaming.js,sha256=zSynedxrMPIlkFT-tROg3n9EJ8tyf1vaguT-jv15klc,30243
@@ -182,7 +187,7 @@ fprime_gds/flask/static/img/error.svg,sha256=dJOAFEQ_DlLvJg-fBuBGDCBua8rbvSzmY3l
182
187
  fprime_gds/flask/static/img/logo.svg,sha256=czqCyVnhqFEw7qsKDMm63w959Pa77nYqY7GyoHVGcZ4,12470
183
188
  fprime_gds/flask/static/img/success.svg,sha256=wCfYG4cPfSCcsZ76JI4SwAJ-y62rahx9rJXyB-2qDIY,1757
184
189
  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
190
+ fprime_gds/flask/static/js/datastore.js,sha256=AAJKRQbcvQuS-4OScad5zBfYjHljDrjsL5RnTcXx39A,15508
186
191
  fprime_gds/flask/static/js/gds.js,sha256=OeDJrNmNA8hUPi8QIHP-s33MW_IYT3QIccxzL75MsjA,1297
187
192
  fprime_gds/flask/static/js/json.js,sha256=kfwzTqoyLu_Feqcp9WEhDWpZ3lziwHy9LGkOg8PCo6s,12429
188
193
  fprime_gds/flask/static/js/loader.js,sha256=IbuJ7Jh70umyZog0iIupOuRGwc1tO5thT88jTW0XZc4,11414
@@ -190,12 +195,12 @@ fprime_gds/flask/static/js/performance.js,sha256=fGBbK5anf5UB9iAr6rO4u9sCkrQGlOH
190
195
  fprime_gds/flask/static/js/settings.js,sha256=Cfnn1ybZUOmsp48t_b23TDaHBRctvpD_h2ivBVKz6HM,1101
191
196
  fprime_gds/flask/static/js/uploader.js,sha256=HdFUGwJ-SN_OEMXiXXJw0YblC0j_QiOA1y9yVWyS4SI,2730
192
197
  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
198
+ fprime_gds/flask/static/js/vue-support/channel.js,sha256=d0reMOk2yyyUxV8cvN8VNHkdUI_YHVsVEjj_ZWqyCcY,4577
194
199
  fprime_gds/flask/static/js/vue-support/dashboard-box.js,sha256=yX6eH9BQRKRLHk2eBDv1AjVjpLbl8PP8t-SXQPmi0sU,739
195
200
  fprime_gds/flask/static/js/vue-support/dashboard-row.js,sha256=vCkLANr_8GAkPLV4K0WAXWJohevOTods0VbjMrA5zC0,297
196
201
  fprime_gds/flask/static/js/vue-support/dashboard.js,sha256=WOdmZoivmtg9KbLe8usPjlXTzEO_uwJQIY9iIgMhW2g,3022
197
202
  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
203
+ fprime_gds/flask/static/js/vue-support/event.js,sha256=p9Kh8Po7pN4cMMfP4lhvx8fnoohRTr07p4cPvWaSheM,5292
199
204
  fprime_gds/flask/static/js/vue-support/fp-row.js,sha256=BwfWOxmTD7WPKKSBPlwLq3eARYQUg3pan1PPA9VzKy0,3760
200
205
  fprime_gds/flask/static/js/vue-support/fptable.js,sha256=ETGE4LlBeLXQnOv6-NNtZtk3JadDOPus6ad3tBEooUo,18874
201
206
  fprime_gds/flask/static/js/vue-support/log.js,sha256=40dDjFgmEugTFZFsy0Y1xqNJpnuEfUiZ_-M3HGTPMCc,2735
@@ -226,12 +231,12 @@ fprime_gds/flask/static/third-party/webfonts/fa-solid-900.ttf,sha256=r2OXUD_O-9Y
226
231
  fprime_gds/flask/static/third-party/webfonts/fa-solid-900.woff,sha256=P200iM9lN09vZ2wxU0CwrCvoMr1VJAyAlEjjbvm5YyY,101648
227
232
  fprime_gds/flask/static/third-party/webfonts/fa-solid-900.woff2,sha256=mDS4KtJuKjdYPSJnahLdLrD-fIA1aiEU0NsaqLOJlTc,78268
228
233
  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,,
234
+ fprime_gds/plugin/definitions.py,sha256=QlxW1gNvoiqGMslSJjh3dTFZuv0igFHawN__3XJ0Wns,5355
235
+ fprime_gds/plugin/system.py,sha256=UiNrUqfi-KJOgRIOR8uyFMKdquSPZh_txpNq8eH35-Y,13285
236
+ fprime_gds-4.0.0a1.dist-info/licenses/LICENSE.txt,sha256=z8d0m5b2O9McPEK1xHG_dWgUBT6EfBDz6wA0F7xSPTA,11358
237
+ fprime_gds-4.0.0a1.dist-info/licenses/NOTICE.txt,sha256=vXjA_xRcQhd83Vfk5D_vXg5kOjnnXvLuMi5vFKDEVmg,1612
238
+ fprime_gds-4.0.0a1.dist-info/METADATA,sha256=BLViE79kzUK1-kjXnrjPrsQ1Syaugyyo4eWgL9EiqVM,24457
239
+ fprime_gds-4.0.0a1.dist-info/WHEEL,sha256=Nw36Djuh_5VDukK0H78QzOX-_FQEo6V37m3nkm96gtU,91
240
+ fprime_gds-4.0.0a1.dist-info/entry_points.txt,sha256=qFBHIR7CZ5CEeSEdZ-ZVQN9ZfUOZfm0PvvDZAAheuLk,445
241
+ fprime_gds-4.0.0a1.dist-info/top_level.txt,sha256=6vzFLIX6ANfavKaXFHDMSLFtS94a6FaAsIWhjgYuSNE,27
242
+ fprime_gds-4.0.0a1.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (75.8.1)
2
+ Generator: setuptools (80.7.1)
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-fpy-bytecode = fprime_gds.common.fpy.serialize_bytecode: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