fprime-gds 4.0.0a3__tar.gz → 4.0.0a5__tar.gz

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 (326) hide show
  1. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/PKG-INFO +1 -1
  2. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/common/communication/adapters/ip.py +14 -9
  3. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/common/communication/ccsds/space_packet.py +0 -1
  4. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/common/distributor/distributor.py +2 -1
  5. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/common/loaders/pkt_json_loader.py +4 -0
  6. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/common/pipeline/dictionaries.py +9 -1
  7. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/common/testing_fw/api.py +110 -5
  8. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/common/testing_fw/pytest_integration.py +12 -1
  9. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/executables/data_product_writer.py +121 -158
  10. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds.egg-info/PKG-INFO +1 -1
  11. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/test/fprime_gds/executables/dp_writer_data/dictionary.json +233 -0
  12. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  13. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/.github/actions/codeql/security-pack.yml +0 -0
  14. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/.github/actions/spelling/excludes.txt +0 -0
  15. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/.github/actions/spelling/expect.txt +0 -0
  16. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/.github/actions/spelling/patterns.txt +0 -0
  17. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/.github/pull_request_template.md +0 -0
  18. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/.github/resources/RefTopologyAppDictionary.xml +0 -0
  19. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/.github/workflows/codeql-security-scan.yml +0 -0
  20. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/.github/workflows/fprime-gds-tests.yml +0 -0
  21. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/.github/workflows/gds-cli-tests.yml +0 -0
  22. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/.github/workflows/publish.yml +0 -0
  23. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/.github/workflows/spelling.yml +0 -0
  24. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/.gitignore +0 -0
  25. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/Doxyfile +0 -0
  26. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/LICENSE.txt +0 -0
  27. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/NOTICE.txt +0 -0
  28. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/README.md +0 -0
  29. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/configs/__init__.py +0 -0
  30. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/docs/README.md +0 -0
  31. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/docs/_static/css/rtd_width.css +0 -0
  32. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/docs/conf.py +0 -0
  33. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/docs/gendoc.bash +0 -0
  34. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/docs/index.rst +0 -0
  35. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/examples/simple_sequence.bin +0 -0
  36. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/examples/simple_sequence.seq +0 -0
  37. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/pyproject.toml +0 -0
  38. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/setup.cfg +0 -0
  39. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/setup.py +0 -0
  40. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fastentrypoints.py +0 -0
  41. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/__init__.py +0 -0
  42. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/common/__init__.py +0 -0
  43. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/common/communication/__init__.py +0 -0
  44. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/common/communication/adapters/__init__.py +0 -0
  45. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/common/communication/adapters/base.py +0 -0
  46. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/common/communication/adapters/uart.py +0 -0
  47. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/common/communication/ccsds/__init__.py +0 -0
  48. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/common/communication/ccsds/apid.py +0 -0
  49. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/common/communication/ccsds/chain.py +0 -0
  50. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/common/communication/ccsds/space_data_link.py +0 -0
  51. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/common/communication/checksum.py +0 -0
  52. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/common/communication/framing.py +0 -0
  53. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/common/communication/ground.py +0 -0
  54. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/common/communication/updown.py +0 -0
  55. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/common/controllers/__init__.py +0 -0
  56. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/common/data_types/__init__.py +0 -0
  57. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/common/data_types/ch_data.py +0 -0
  58. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/common/data_types/cmd_data.py +0 -0
  59. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/common/data_types/event_data.py +0 -0
  60. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/common/data_types/exceptions.py +0 -0
  61. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/common/data_types/file_data.py +0 -0
  62. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/common/data_types/pkt_data.py +0 -0
  63. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/common/data_types/sys_data.py +0 -0
  64. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/common/decoders/__init__.py +0 -0
  65. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/common/decoders/ch_decoder.py +0 -0
  66. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/common/decoders/decoder.py +0 -0
  67. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/common/decoders/event_decoder.py +0 -0
  68. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/common/decoders/file_decoder.py +0 -0
  69. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/common/decoders/pkt_decoder.py +0 -0
  70. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/common/distributor/__init__.py +0 -0
  71. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/common/encoders/__init__.py +0 -0
  72. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/common/encoders/ch_encoder.py +0 -0
  73. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/common/encoders/cmd_encoder.py +0 -0
  74. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/common/encoders/encoder.py +0 -0
  75. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/common/encoders/event_encoder.py +0 -0
  76. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/common/encoders/file_encoder.py +0 -0
  77. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/common/encoders/pkt_encoder.py +0 -0
  78. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/common/encoders/seq_writer.py +0 -0
  79. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/common/files/File Decoder Documentation.txt +0 -0
  80. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/common/files/__init__.py +0 -0
  81. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/common/files/downlinker.py +0 -0
  82. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/common/files/helpers.py +0 -0
  83. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/common/files/uplinker.py +0 -0
  84. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/common/fpy/__init__.py +0 -0
  85. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/common/fpy/serialize_bytecode.py +0 -0
  86. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/common/fpy/types.py +0 -0
  87. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/common/gds_cli/__init__.py +0 -0
  88. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/common/gds_cli/base_commands.py +0 -0
  89. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/common/gds_cli/channels.py +0 -0
  90. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/common/gds_cli/command_send.py +0 -0
  91. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/common/gds_cli/events.py +0 -0
  92. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/common/gds_cli/filtering_utils.py +0 -0
  93. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/common/gds_cli/test_api_utils.py +0 -0
  94. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/common/handlers.py +0 -0
  95. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/common/history/__init__.py +0 -0
  96. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/common/history/chrono.py +0 -0
  97. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/common/history/history.py +0 -0
  98. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/common/history/ram.py +0 -0
  99. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/common/history/test.py +0 -0
  100. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/common/loaders/__init__.py +0 -0
  101. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/common/loaders/ch_json_loader.py +0 -0
  102. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/common/loaders/ch_xml_loader.py +0 -0
  103. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/common/loaders/cmd_json_loader.py +0 -0
  104. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/common/loaders/cmd_xml_loader.py +0 -0
  105. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/common/loaders/dict_loader.py +0 -0
  106. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/common/loaders/event_json_loader.py +0 -0
  107. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/common/loaders/event_xml_loader.py +0 -0
  108. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/common/loaders/fw_type_json_loader.py +0 -0
  109. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/common/loaders/json_loader.py +0 -0
  110. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/common/loaders/pkt_xml_loader.py +0 -0
  111. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/common/loaders/prm_json_loader.py +0 -0
  112. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/common/loaders/xml_loader.py +0 -0
  113. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/common/logger/__init__.py +0 -0
  114. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/common/logger/data_logger.py +0 -0
  115. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/common/logger/test_logger.py +0 -0
  116. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/common/models/__init__.py +0 -0
  117. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/common/models/common/__init__.py +0 -0
  118. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/common/models/common/channel_telemetry.py +0 -0
  119. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/common/models/common/command.py +0 -0
  120. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/common/models/common/event.py +0 -0
  121. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/common/parsers/__init__.py +0 -0
  122. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/common/parsers/seq_file_parser.py +0 -0
  123. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/common/pipeline/__init__.py +0 -0
  124. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/common/pipeline/encoding.py +0 -0
  125. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/common/pipeline/files.py +0 -0
  126. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/common/pipeline/histories.py +0 -0
  127. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/common/pipeline/router.py +0 -0
  128. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/common/pipeline/standard.py +0 -0
  129. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/common/templates/__init__.py +0 -0
  130. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/common/templates/ch_template.py +0 -0
  131. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/common/templates/cmd_template.py +0 -0
  132. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/common/templates/data_template.py +0 -0
  133. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/common/templates/event_template.py +0 -0
  134. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/common/templates/pkt_template.py +0 -0
  135. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/common/templates/prm_template.py +0 -0
  136. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/common/testing_fw/__init__.py +0 -0
  137. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/common/testing_fw/predicates.py +0 -0
  138. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/common/tools/README.md +0 -0
  139. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/common/tools/__init__.py +0 -0
  140. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/common/tools/params.py +0 -0
  141. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/common/tools/seqgen.py +0 -0
  142. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/common/transport.py +0 -0
  143. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/common/utils/__init__.py +0 -0
  144. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/common/utils/config_manager.py +0 -0
  145. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/common/utils/data_desc_type.py +0 -0
  146. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/common/utils/event_severity.py +0 -0
  147. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/common/utils/string_util.py +0 -0
  148. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/common/zmq_transport.py +0 -0
  149. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/executables/__init__.py +0 -0
  150. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/executables/apps.py +0 -0
  151. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/executables/cli.py +0 -0
  152. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/executables/comm.py +0 -0
  153. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/executables/fprime_cli.py +0 -0
  154. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/executables/run_deployment.py +0 -0
  155. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/executables/tcpserver.py +0 -0
  156. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/executables/utils.py +0 -0
  157. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/flask/__init__.py +0 -0
  158. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/flask/app.py +0 -0
  159. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/flask/channels.py +0 -0
  160. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/flask/commands.py +0 -0
  161. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/flask/components.py +0 -0
  162. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/flask/default_settings.py +0 -0
  163. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/flask/errors.py +0 -0
  164. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/flask/events.py +0 -0
  165. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/flask/json.py +0 -0
  166. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/flask/logs.py +0 -0
  167. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/flask/requirements.txt +0 -0
  168. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/flask/resource.py +0 -0
  169. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/flask/sequence.py +0 -0
  170. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/flask/static/.idea/.gitignore +0 -0
  171. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/flask/static/.idea/misc.xml +0 -0
  172. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/flask/static/.idea/modules.xml +0 -0
  173. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/flask/static/.idea/static.iml +0 -0
  174. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/flask/static/.idea/vcs.xml +0 -0
  175. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/flask/static/addons/advanced-settings/addon-templates.js +0 -0
  176. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/flask/static/addons/advanced-settings/addon.js +0 -0
  177. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/flask/static/addons/channel-render/addon.js +0 -0
  178. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/flask/static/addons/channel-render/channel-render-template.js +0 -0
  179. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/flask/static/addons/channel-render/channel-render.js +0 -0
  180. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/flask/static/addons/chart-display/addon-templates.js +0 -0
  181. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/flask/static/addons/chart-display/addon.js +0 -0
  182. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/flask/static/addons/chart-display/config.js +0 -0
  183. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/flask/static/addons/chart-display/modified-vendor/chartjs-plugin-streaming.js +0 -0
  184. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/flask/static/addons/chart-display/modified-vendor/chartjs-plugin-zoom.js +0 -0
  185. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/flask/static/addons/chart-display/modified-vendor/flat.js +0 -0
  186. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/flask/static/addons/chart-display/sibling.js +0 -0
  187. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/flask/static/addons/chart-display/vendor/chart.js +0 -0
  188. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/flask/static/addons/chart-display/vendor/chartjs-adapter-luxon.min.js +0 -0
  189. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/flask/static/addons/chart-display/vendor/hammer.min.js +0 -0
  190. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/flask/static/addons/commanding/addon.js +0 -0
  191. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/flask/static/addons/commanding/argument-templates.js +0 -0
  192. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/flask/static/addons/commanding/arguments.js +0 -0
  193. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/flask/static/addons/commanding/command-history-template.js +0 -0
  194. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/flask/static/addons/commanding/command-history.js +0 -0
  195. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/flask/static/addons/commanding/command-input-template.js +0 -0
  196. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/flask/static/addons/commanding/command-input.js +0 -0
  197. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/flask/static/addons/commanding/command-string-template.js +0 -0
  198. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/flask/static/addons/commanding/command-string.js +0 -0
  199. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/flask/static/addons/dictionary/addon-templates.js +0 -0
  200. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/flask/static/addons/dictionary/addon.js +0 -0
  201. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/flask/static/addons/enabled.js +0 -0
  202. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/flask/static/addons/image-display/addon.js +0 -0
  203. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/flask/static/addons/image-display/dashboard.xml +0 -0
  204. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/flask/static/addons/sequencer/README.md +0 -0
  205. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/flask/static/addons/sequencer/addon-templates.js +0 -0
  206. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/flask/static/addons/sequencer/addon.js +0 -0
  207. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/flask/static/addons/sequencer/autocomplete.js +0 -0
  208. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/flask/static/addons/sequencer/lint.js +0 -0
  209. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/flask/static/addons/sequencer/third/code-mirror.es.js +0 -0
  210. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/flask/static/addons/sequencer/third/rollup/.gitignore +0 -0
  211. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/flask/static/addons/sequencer/third/rollup/index.js +0 -0
  212. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/flask/static/addons/sequencer/third/rollup/language.grammer +0 -0
  213. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/flask/static/addons/sequencer/third/rollup/package.json +0 -0
  214. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/flask/static/addons/sequencer/third/rollup/rollup.config.js +0 -0
  215. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/flask/static/css/fprime.css +0 -0
  216. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/flask/static/css/fpstyle.css +0 -0
  217. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/flask/static/favicon.ico +0 -0
  218. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/flask/static/img/error.svg +0 -0
  219. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/flask/static/img/logo.svg +0 -0
  220. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/flask/static/img/success.svg +0 -0
  221. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/flask/static/index.html +0 -0
  222. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/flask/static/js/config.js +0 -0
  223. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/flask/static/js/datastore.js +0 -0
  224. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/flask/static/js/gds.js +0 -0
  225. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/flask/static/js/json.js +0 -0
  226. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/flask/static/js/loader.js +0 -0
  227. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/flask/static/js/performance.js +0 -0
  228. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/flask/static/js/settings.js +0 -0
  229. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/flask/static/js/uploader.js +0 -0
  230. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/flask/static/js/validate.js +0 -0
  231. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/flask/static/js/vue-support/channel.js +0 -0
  232. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/flask/static/js/vue-support/dashboard-box.js +0 -0
  233. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/flask/static/js/vue-support/dashboard-row.js +0 -0
  234. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/flask/static/js/vue-support/dashboard.js +0 -0
  235. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/flask/static/js/vue-support/downlink.js +0 -0
  236. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/flask/static/js/vue-support/event.js +0 -0
  237. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/flask/static/js/vue-support/fp-row.js +0 -0
  238. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/flask/static/js/vue-support/fptable.js +0 -0
  239. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/flask/static/js/vue-support/log.js +0 -0
  240. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/flask/static/js/vue-support/tabetc.js +0 -0
  241. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/flask/static/js/vue-support/uplink.js +0 -0
  242. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/flask/static/js/vue-support/utils.js +0 -0
  243. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/flask/static/third-party/css/all.min.css +0 -0
  244. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/flask/static/third-party/css/bootstrap.min.css +0 -0
  245. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/flask/static/third-party/css/vue-select.css +0 -0
  246. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/flask/static/third-party/js/luxon.min.js +0 -0
  247. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/flask/static/third-party/js/sorttable.js +0 -0
  248. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/flask/static/third-party/js/v-runtime-template.js +0 -0
  249. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/flask/static/third-party/js/vue-select.js +0 -0
  250. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/flask/static/third-party/js/vue.min.js +0 -0
  251. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/flask/static/third-party/webfonts/fa-brands-400.eot +0 -0
  252. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/flask/static/third-party/webfonts/fa-brands-400.svg +0 -0
  253. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/flask/static/third-party/webfonts/fa-brands-400.ttf +0 -0
  254. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/flask/static/third-party/webfonts/fa-brands-400.woff +0 -0
  255. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/flask/static/third-party/webfonts/fa-brands-400.woff2 +0 -0
  256. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/flask/static/third-party/webfonts/fa-regular-400.eot +0 -0
  257. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/flask/static/third-party/webfonts/fa-regular-400.svg +0 -0
  258. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/flask/static/third-party/webfonts/fa-regular-400.ttf +0 -0
  259. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/flask/static/third-party/webfonts/fa-regular-400.woff +0 -0
  260. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/flask/static/third-party/webfonts/fa-regular-400.woff2 +0 -0
  261. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/flask/static/third-party/webfonts/fa-solid-900.eot +0 -0
  262. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/flask/static/third-party/webfonts/fa-solid-900.svg +0 -0
  263. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/flask/static/third-party/webfonts/fa-solid-900.ttf +0 -0
  264. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/flask/static/third-party/webfonts/fa-solid-900.woff +0 -0
  265. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/flask/static/third-party/webfonts/fa-solid-900.woff2 +0 -0
  266. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/flask/stats.py +0 -0
  267. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/flask/updown.py +0 -0
  268. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/plugin/__init__.py +0 -0
  269. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/plugin/definitions.py +0 -0
  270. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/plugin/system.py +0 -0
  271. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds/version.py +0 -0
  272. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds.egg-info/SOURCES.txt +0 -0
  273. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds.egg-info/dependency_links.txt +0 -0
  274. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds.egg-info/entry_points.txt +0 -0
  275. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds.egg-info/requires.txt +0 -0
  276. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/src/fprime_gds.egg-info/top_level.txt +0 -0
  277. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/test/fprime_gds/common/communication/ccsds/test_space_data_link.py +0 -0
  278. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/test/fprime_gds/common/communication/ccsds/test_space_packet.py +0 -0
  279. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/test/fprime_gds/common/data_types/test_cmd_data.py +0 -0
  280. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/test/fprime_gds/common/distributor/test_distributor.py +0 -0
  281. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/test/fprime_gds/common/encoders/test_ch_encoder.py +0 -0
  282. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/test/fprime_gds/common/encoders/test_event_encoder.py +0 -0
  283. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/test/fprime_gds/common/encoders/test_pkt_encoder.py +0 -0
  284. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/test/fprime_gds/common/fpy/integrated_tests.py +0 -0
  285. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/test/fprime_gds/common/gds_cli/filtering_utils_test.py +0 -0
  286. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/test/fprime_gds/common/gds_cli/utils_test.py +0 -0
  287. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/test/fprime_gds/common/history/chronohistory_unit_test.py +0 -0
  288. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/test/fprime_gds/common/history/testhistory_unit_test.py +0 -0
  289. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/test/fprime_gds/common/loaders/resources/RefTopologyDictionary.json +0 -0
  290. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/test/fprime_gds/common/loaders/test_json_loader.py +0 -0
  291. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/test/fprime_gds/common/testing_fw/UnitTestDictionary.xml +0 -0
  292. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/test/fprime_gds/common/testing_fw/api_unit_test.py +0 -0
  293. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/test/fprime_gds/common/testing_fw/logs/.gitignore +0 -0
  294. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/test/fprime_gds/common/testing_fw/predicate_unit_test.py +0 -0
  295. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/test/fprime_gds/common/tools/expected/simple_expected.bin +0 -0
  296. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/test/fprime_gds/common/tools/expected/simple_paramdb.dat +0 -0
  297. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/test/fprime_gds/common/tools/input/simple_bad_paramdb.json +0 -0
  298. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/test/fprime_gds/common/tools/input/simple_bad_sequence.seq +0 -0
  299. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/test/fprime_gds/common/tools/input/simple_paramdb.json +0 -0
  300. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/test/fprime_gds/common/tools/input/simple_sequence.seq +0 -0
  301. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/test/fprime_gds/common/tools/resources/simple_dictionary.json +0 -0
  302. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/test/fprime_gds/common/tools/resources/simple_dictionary.xml +0 -0
  303. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/test/fprime_gds/common/tools/seqgen_unit_test.py +0 -0
  304. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/test/fprime_gds/common/tools/test_paramdb_gen.py +0 -0
  305. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/test/fprime_gds/common/utils/test_string_util.py +0 -0
  306. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/test/fprime_gds/executables/.gitignore +0 -0
  307. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/test/fprime_gds/executables/dp_writer_data/makeBool.bin +0 -0
  308. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/test/fprime_gds/executables/dp_writer_data/makeComplex.bin +0 -0
  309. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/test/fprime_gds/executables/dp_writer_data/makeDataArray.bin +0 -0
  310. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/test/fprime_gds/executables/dp_writer_data/makeEnum.bin +0 -0
  311. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/test/fprime_gds/executables/dp_writer_data/makeF32.bin +0 -0
  312. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/test/fprime_gds/executables/dp_writer_data/makeF64.bin +0 -0
  313. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/test/fprime_gds/executables/dp_writer_data/makeFppArray.bin +0 -0
  314. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/test/fprime_gds/executables/dp_writer_data/makeI16.bin +0 -0
  315. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/test/fprime_gds/executables/dp_writer_data/makeI32.bin +0 -0
  316. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/test/fprime_gds/executables/dp_writer_data/makeI64.bin +0 -0
  317. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/test/fprime_gds/executables/dp_writer_data/makeI8.bin +0 -0
  318. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/test/fprime_gds/executables/dp_writer_data/makeU32.bin +0 -0
  319. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/test/fprime_gds/executables/dp_writer_data/makeU32Array.bin +0 -0
  320. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/test/fprime_gds/executables/dp_writer_data/makeU8Array.bin +0 -0
  321. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/test/fprime_gds/executables/test_data_product_writer.py +0 -0
  322. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/test/fprime_gds/executables/test_run_deployment.py +0 -0
  323. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/test/fprime_gds/executables/test_utils.py +0 -0
  324. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/test/fprime_gds/sample/dictionary.xml +0 -0
  325. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/test/fprime_gds/test_plugins.py +0 -0
  326. {fprime_gds-4.0.0a3 → fprime_gds-4.0.0a5}/test/gui/GUI_Test_Procedure.md +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fprime-gds
3
- Version: 4.0.0a3
3
+ Version: 4.0.0a5
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:
@@ -50,13 +50,11 @@ class IpAdapter(fprime_gds.common.communication.adapters.base.BaseAdapter):
50
50
  both. This data is concatenated and returned up the stack for processing.
51
51
  """
52
52
 
53
- # Interval to send a KEEPALIVE packet. None will turn off KEEPALIVE.
54
- KEEPALIVE_INTERVAL = 0.500
55
53
  # Data to send out as part of the KEEPALIVE packet. Should not be null nor empty.
56
54
  KEEPALIVE_DATA = b"sitting well"
57
55
  MAXIMUM_DATA_SIZE = 4096
58
56
 
59
- def __init__(self, address, port, server=True):
57
+ def __init__(self, address, port, server=True, keepalive_interval=0.5):
60
58
  """
61
59
  Initialize this adapter by creating a handler for UDP and TCP. A thread for the KEEPALIVE application packets
62
60
  will be created, if the interval is not none. Handlers are servers unless server=False.
@@ -64,7 +62,8 @@ class IpAdapter(fprime_gds.common.communication.adapters.base.BaseAdapter):
64
62
  self.address = address
65
63
  self.port = port
66
64
  self.stop = False
67
- self.keepalive = None
65
+ self.keepalive_thread = None
66
+ self.keepalive_interval = keepalive_interval
68
67
  self.tcp = TcpHandler(address, port, server=server)
69
68
  self.udp = UdpHandler(address, port, server=server)
70
69
  self.thtcp = None
@@ -91,11 +90,11 @@ class IpAdapter(fprime_gds.common.communication.adapters.base.BaseAdapter):
91
90
  self.thudp.daemon = True
92
91
  self.thudp.start()
93
92
  # Start up a keep-alive ping if desired. This will hit the TCP uplink, and die if the connection is down
94
- if IpAdapter.KEEPALIVE_INTERVAL is not None:
95
- self.keepalive = threading.Thread(
96
- target=self.th_alive, name="KeepCommAliveThread", args=[float(self.KEEPALIVE_INTERVAL)]
93
+ if self.keepalive_interval > 0.0:
94
+ self.keepalive_thread = threading.Thread(
95
+ target=self.th_alive, name="KeepCommAliveThread", args=[self.keepalive_interval]
97
96
  )
98
- self.keepalive.start()
97
+ self.keepalive_thread.start()
99
98
  except (ValueError, TypeError) as exc:
100
99
  LOGGER.error(
101
100
  f"Failed to start keep-alive thread. {type(exc).__name__}: {str(exc)}"
@@ -186,6 +185,12 @@ class IpAdapter(fprime_gds.common.communication.adapters.base.BaseAdapter):
186
185
  "default": True,
187
186
  "help": "Run the IP adapter as the client (connects to FSW running TcpServer)",
188
187
  },
188
+ ("--keepalive-interval",): {
189
+ "dest": "keepalive_interval",
190
+ "type": float,
191
+ "default": 0.5000,
192
+ "help": "Keep alive packet interval. 0.0 = off, default = 0.5",
193
+ },
189
194
  }
190
195
 
191
196
  @classmethod
@@ -195,7 +200,7 @@ class IpAdapter(fprime_gds.common.communication.adapters.base.BaseAdapter):
195
200
  return cls
196
201
 
197
202
  @classmethod
198
- def check_arguments(cls, address, port, server=True):
203
+ def check_arguments(cls, address, port, server=True, keepalive_interval=0.5):
199
204
  """
200
205
  Code that should check arguments of this adapter. If there is a problem with this code, then a "ValueError"
201
206
  should be raised describing the problem with these arguments.
@@ -15,7 +15,6 @@ from .apid import APID
15
15
  import logging
16
16
 
17
17
  LOGGER = logging.getLogger("framing")
18
- LOGGER.setLevel(logging.DEBUG)
19
18
 
20
19
 
21
20
  @gds_plugin(FramerDeframer)
@@ -199,9 +199,10 @@ class Distributor(DataHandler):
199
199
  (length, data_desc, msg) = self.parse_raw_msg_api(raw_msg)
200
200
 
201
201
  data_desc_key = data_desc_type.DataDescType(data_desc).name
202
-
203
202
  for d in self.__decoders[data_desc_key]:
204
203
  try:
205
204
  d.data_callback(msg)
206
205
  except DecodingException as dexc:
207
206
  LOGGER.warning("Decoding error occurred: %s. Skipping.", dexc)
207
+ else:
208
+ LOGGER.warning("No decoder registered for: %s", data_desc_type.DataDescType(data_desc).name)
@@ -19,6 +19,10 @@ class PktJsonLoader(JsonLoader):
19
19
  SET_NAME = "name"
20
20
  MEMBERS = "members"
21
21
 
22
+ def get_packet_set_names(self, path):
23
+ """ Get the list of packet sets """
24
+ return [packet_set[self.SET_NAME] for packet_set in self.json_dict[self.PACKETS_FIELD]]
25
+
22
26
  def get_id_dict(self, path, packet_set_name: str, ch_name_dict: dict):
23
27
  if path in self.saved_dicts and packet_set_name in self.saved_dicts[path]:
24
28
  (id_dict, name_dict) = self.saved_dicts[path][packet_set_name]
@@ -128,8 +128,16 @@ class Dictionaries:
128
128
  msg = f"[ERROR] Dictionary '{dictionary}' does not exist."
129
129
  raise Exception(msg)
130
130
  # Check for packet specification
131
- if self._metadata["dictionary_type"] == "json" and packet_set_name is not None:
131
+ if self._metadata["dictionary_type"] == "json":
132
132
  packet_loader = fprime_gds.common.loaders.pkt_json_loader.PktJsonLoader(dictionary)
133
+ if packet_set_name is None:
134
+ names = packet_loader.get_packet_set_names(None)
135
+ if len(names) == 0:
136
+ self._packet_dict = None
137
+ return
138
+ elif len(names) > 1:
139
+ raise Exception("[ERROR] Multiple packet sets, must set --packet-set-name")
140
+ packet_set_name = names[0]
133
141
  self._packet_dict = packet_loader.get_id_dict(
134
142
  None, packet_set_name, self._channel_name_dict
135
143
  )
@@ -11,6 +11,7 @@ import signal
11
11
  import time
12
12
  from pathlib import Path
13
13
  import shutil
14
+ import json
14
15
 
15
16
  from fprime.common.models.serialize.time_type import TimeType
16
17
 
@@ -30,15 +31,17 @@ class IntegrationTestAPI(DataHandler):
30
31
 
31
32
  NOW = "NOW"
32
33
 
33
- def __init__(self, pipeline, logpath=None, fsw_order=True):
34
+ def __init__(self, pipeline, deployment_config=None, logpath=None, fsw_order=True):
34
35
  """
35
36
  Initializes API: constructs and registers test histories.
36
37
  Args:
37
38
  pipeline: a pipeline object providing access to basic GDS functionality
39
+ deployment_config: path to deployment configuration file
38
40
  logpath: an optional output destination for the api test log
39
41
  fsw_order: a flag to determine whether the API histories will maintain FSW time order.
40
42
  """
41
43
  self.pipeline = pipeline
44
+ self.deployment_config = deployment_config
42
45
 
43
46
  # these are owned by the GDS and will not be modified by the test API.
44
47
  self.aggregate_command_history = pipeline.histories.commands
@@ -228,11 +231,29 @@ class IntegrationTestAPI(DataHandler):
228
231
 
229
232
  def get_deployment(self):
230
233
  """
231
- Get the deployment of the target using the loaded FSW dictionary path
234
+ Get the deployment of the target using the loaded FSW dictionary.
235
+
232
236
  Returns:
233
- The name of the deployment (str)
234
- """
235
- return Path(self.pipeline.dictionary_path).parent.parent.name
237
+ The name of the deployment (str) or None if not found
238
+ """
239
+ dictionary = str(self.pipeline.dictionary_path)
240
+
241
+ try:
242
+ with open(dictionary, 'r') as file:
243
+ data = json.load(file)
244
+ return data['metadata'].get("deploymentName")
245
+ except FileNotFoundError:
246
+ msg = f"Error: File not found at path: {dictionary}"
247
+ self.__log(msg, TestLogger.YELLOW)
248
+ return None
249
+ except json.JSONDecodeError as e:
250
+ msg = f"Error decoding JSON: {e}"
251
+ self.__log(msg, TestLogger.YELLOW)
252
+ return None
253
+ except Exception as e:
254
+ msg = f"An unexpected error occurred: {e} is an unknown key"
255
+ self.__log(msg, TestLogger.YELLOW)
256
+ return None
236
257
 
237
258
  def wait_for_dataflow(self, count=1, channels=None, start=None, timeout=120):
238
259
  """
@@ -257,6 +278,90 @@ class IntegrationTestAPI(DataHandler):
257
278
  assert False, msg
258
279
  self.remove_telemetry_subhistory(history)
259
280
 
281
+ def get_config_file_path(self):
282
+ """
283
+ Accessor for IntegrationTestAPI's deployment configuration file.
284
+
285
+ Returns:
286
+ path to user-specified deployment configuration file (str) or None if not defined
287
+ """
288
+ if self.deployment_config:
289
+ return self.deployment_config
290
+ else:
291
+ return None
292
+
293
+ def load_config_file(self):
294
+ """
295
+ Load user-specified deployment configuration JSON file.
296
+
297
+ Returns:
298
+ JSON object as a dictionary
299
+ """
300
+ config_file = self.get_config_file_path()
301
+
302
+ try:
303
+ with open(config_file, 'r') as file:
304
+ result = json.load(file)
305
+ return result
306
+ except FileNotFoundError:
307
+ msg = f"Error: File not found at path {config_file}"
308
+ self.__log(msg, TestLogger.RED)
309
+ assert False, msg
310
+ except json.JSONDecodeError as e:
311
+ msg = f"Error decoding JSON: {e}"
312
+ self.__log(msg, TestLogger.RED)
313
+ assert False, msg
314
+ except Exception as e:
315
+ msg = f"An unexpected error occurred: {e}"
316
+ self.__log(msg, TestLogger.RED)
317
+ assert False, msg
318
+
319
+ def get_mnemonic(self, comp=None, name=None):
320
+ """
321
+ Get deployment mnemonic of specified item from user-specified deployment
322
+ configuration file.
323
+
324
+ Args:
325
+ comp: qualified name of the component instance (str), i.e. "<component>.<instance>"
326
+ name: command, channel, or event name (str) [optional]
327
+ Returns:
328
+ deployment mnemonic of specified item (str) or native mnemonic (str) if not found
329
+ """
330
+ data = self.load_config_file()
331
+
332
+ if data:
333
+ try:
334
+ mnemonic = data[comp]
335
+ return f"{mnemonic}.{name}" if name else f"{mnemonic}"
336
+ except KeyError:
337
+ self.__log(f"Error: {comp} not found", TestLogger.YELLOW)
338
+ return f"{comp}.{name}" if name else f"{comp}"
339
+ else:
340
+ return f"{comp}.{name}" if name else f"{comp}"
341
+
342
+ def get_prm_db_path(self) -> str:
343
+ """
344
+ Get file path to parameter db from user-specified deployment configuration file.
345
+
346
+ Returns:
347
+ file path to parameter db (str) or None if not found
348
+ """
349
+ data = self.load_config_file()
350
+
351
+ if data:
352
+ try:
353
+ filepath = data["Svc.PrmDb.filename"]
354
+ if filepath.startswith('/'):
355
+ return filepath
356
+ else:
357
+ msg = f"Error: {filepath} did not start with a forward slash"
358
+ self.__log(msg, TestLogger.RED)
359
+ assert False, msg
360
+ except KeyError:
361
+ return None
362
+ else:
363
+ return None
364
+
260
365
  ######################################################################################
261
366
  # History Functions
262
367
  ######################################################################################
@@ -52,6 +52,12 @@ def pytest_addoption(parser):
52
52
  action="store_true",
53
53
  help="Enable JUnitXML report generation to a specified location"
54
54
  )
55
+ # Add an option to specify a json config file that maps components
56
+ parser.addoption(
57
+ "--deployment-config",
58
+ action="store",
59
+ help="Path to JSON configuration file for mapping deployment components"
60
+ )
55
61
 
56
62
  def pytest_configure(config):
57
63
  """ This is a hook to allow plugins and conftest files to perform initial configuration
@@ -85,6 +91,7 @@ def fprime_test_api_session(request):
85
91
  pipeline_parser = StandardPipelineParser()
86
92
  pipeline = None
87
93
  api = None
94
+ deployment_config = None
88
95
  try:
89
96
  # Parse the command line arguments into a client connection
90
97
  arg_ns = pipeline_parser.handle_arguments(request.config.known_args_namespace, client=True)
@@ -92,8 +99,12 @@ def fprime_test_api_session(request):
92
99
  # Build a new pipeline with the parsed and processed arguments
93
100
  pipeline = pipeline_parser.pipeline_factory(arg_ns, pipeline)
94
101
 
102
+ # Get deployment configuration from command line arguments
103
+ if request.config.option.deployment_config:
104
+ deployment_config = request.config.option.deployment_config
105
+
95
106
  # Build and set up the integration test api
96
- api = IntegrationTestAPI(pipeline, arg_ns.logs)
107
+ api = IntegrationTestAPI(pipeline, deployment_config, arg_ns.logs)
97
108
  api.setup()
98
109
 
99
110
  # Return the API. Note: the second call here-in will begin after the yield and clean-up after the test