synapse 3.1.0__tar.gz → 3.2.0__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 (690) hide show
  1. {synapse-3.1.0/synapse.egg-info → synapse-3.2.0}/PKG-INFO +8 -8
  2. {synapse-3.1.0 → synapse-3.2.0}/README.md +5 -5
  3. {synapse-3.1.0 → synapse-3.2.0}/pyproject.toml +3 -3
  4. {synapse-3.1.0 → synapse-3.2.0}/synapse/axon.py +8 -5
  5. {synapse-3.1.0 → synapse-3.2.0}/synapse/common.py +8 -8
  6. {synapse-3.1.0 → synapse-3.2.0}/synapse/cortex.py +77 -2
  7. {synapse-3.1.0 → synapse-3.2.0}/synapse/daemon.py +2 -2
  8. {synapse-3.1.0 → synapse-3.2.0}/synapse/data/lark/storm.lark +10 -3
  9. {synapse-3.1.0 → synapse-3.2.0}/synapse/data/skills/storm/SKILL.md +50 -0
  10. {synapse-3.1.0 → synapse-3.2.0}/synapse/datamodel.py +51 -4
  11. {synapse-3.1.0 → synapse-3.2.0}/synapse/exc.py +1 -1
  12. {synapse-3.1.0 → synapse-3.2.0}/synapse/lib/aha.py +13 -10
  13. {synapse-3.1.0 → synapse-3.2.0}/synapse/lib/ast.py +311 -12
  14. {synapse-3.1.0 → synapse-3.2.0}/synapse/lib/autodoc.py +222 -380
  15. {synapse-3.1.0 → synapse-3.2.0}/synapse/lib/base.py +2 -2
  16. {synapse-3.1.0 → synapse-3.2.0}/synapse/lib/boss.py +3 -3
  17. {synapse-3.1.0 → synapse-3.2.0}/synapse/lib/cell.py +121 -60
  18. {synapse-3.1.0 → synapse-3.2.0}/synapse/lib/certdir.py +2 -2
  19. {synapse-3.1.0 → synapse-3.2.0}/synapse/lib/cluster.py +22 -22
  20. {synapse-3.1.0 → synapse-3.2.0}/synapse/lib/config.py +7 -7
  21. {synapse-3.1.0 → synapse-3.2.0}/synapse/lib/coro.py +3 -3
  22. {synapse-3.1.0 → synapse-3.2.0}/synapse/lib/crypto/utils.py +1 -1
  23. {synapse-3.1.0 → synapse-3.2.0}/synapse/lib/editor.py +20 -23
  24. {synapse-3.1.0 → synapse-3.2.0}/synapse/lib/httpapi.py +6 -6
  25. synapse-3.2.0/synapse/lib/httpclient.py +73 -0
  26. {synapse-3.1.0 → synapse-3.2.0}/synapse/lib/json.py +2 -2
  27. {synapse-3.1.0 → synapse-3.2.0}/synapse/lib/jsrpc.py +14 -14
  28. {synapse-3.1.0 → synapse-3.2.0}/synapse/lib/layer.py +12 -4
  29. {synapse-3.1.0 → synapse-3.2.0}/synapse/lib/link.py +1 -1
  30. {synapse-3.1.0 → synapse-3.2.0}/synapse/lib/mcp.py +32 -32
  31. {synapse-3.1.0 → synapse-3.2.0}/synapse/lib/mddocs.py +644 -24
  32. {synapse-3.1.0 → synapse-3.2.0}/synapse/lib/mdstorm.py +102 -28
  33. {synapse-3.1.0 → synapse-3.2.0}/synapse/lib/multislabseqn.py +2 -2
  34. {synapse-3.1.0 → synapse-3.2.0}/synapse/lib/nexus.py +72 -12
  35. {synapse-3.1.0 → synapse-3.2.0}/synapse/lib/node.py +19 -19
  36. synapse-3.2.0/synapse/lib/nodefuse.py +1545 -0
  37. {synapse-3.1.0 → synapse-3.2.0}/synapse/lib/oauth.py +2 -1
  38. {synapse-3.1.0 → synapse-3.2.0}/synapse/lib/parser.py +5 -0
  39. {synapse-3.1.0 → synapse-3.2.0}/synapse/lib/platforms/linux.py +1 -1
  40. {synapse-3.1.0 → synapse-3.2.0}/synapse/lib/process.py +3 -3
  41. {synapse-3.1.0 → synapse-3.2.0}/synapse/lib/processpool.py +2 -2
  42. {synapse-3.1.0 → synapse-3.2.0}/synapse/lib/reflect.py +1 -1
  43. {synapse-3.1.0 → synapse-3.2.0}/synapse/lib/schemas.py +3 -0
  44. {synapse-3.1.0 → synapse-3.2.0}/synapse/lib/scope.py +1 -1
  45. {synapse-3.1.0 → synapse-3.2.0}/synapse/lib/scrape.py +8 -8
  46. {synapse-3.1.0 → synapse-3.2.0}/synapse/lib/storm.py +138 -152
  47. {synapse-3.1.0 → synapse-3.2.0}/synapse/lib/storm_format.py +2 -0
  48. {synapse-3.1.0 → synapse-3.2.0}/synapse/lib/stormhttp.py +36 -3
  49. {synapse-3.1.0 → synapse-3.2.0}/synapse/lib/stormlib/aha.py +1 -1
  50. {synapse-3.1.0 → synapse-3.2.0}/synapse/lib/stormlib/auth.py +14 -14
  51. {synapse-3.1.0 → synapse-3.2.0}/synapse/lib/stormlib/cache.py +3 -3
  52. {synapse-3.1.0 → synapse-3.2.0}/synapse/lib/stormlib/cortex.py +7 -7
  53. {synapse-3.1.0 → synapse-3.2.0}/synapse/lib/stormlib/cryptoutils.py +2 -2
  54. {synapse-3.1.0 → synapse-3.2.0}/synapse/lib/stormlib/ecc.py +4 -4
  55. {synapse-3.1.0 → synapse-3.2.0}/synapse/lib/stormlib/imap.py +5 -5
  56. {synapse-3.1.0 → synapse-3.2.0}/synapse/lib/stormlib/jwt.py +21 -20
  57. {synapse-3.1.0 → synapse-3.2.0}/synapse/lib/stormlib/log.py +5 -5
  58. {synapse-3.1.0 → synapse-3.2.0}/synapse/lib/stormlib/macro.py +4 -4
  59. {synapse-3.1.0 → synapse-3.2.0}/synapse/lib/stormlib/model.py +232 -11
  60. {synapse-3.1.0 → synapse-3.2.0}/synapse/lib/stormlib/oauth.py +3 -3
  61. {synapse-3.1.0 → synapse-3.2.0}/synapse/lib/stormlib/pkg.py +1 -1
  62. {synapse-3.1.0 → synapse-3.2.0}/synapse/lib/stormlib/rsa.py +4 -4
  63. {synapse-3.1.0 → synapse-3.2.0}/synapse/lib/stormlib/scrape.py +3 -3
  64. {synapse-3.1.0 → synapse-3.2.0}/synapse/lib/stormlib/stix.py +7 -7
  65. {synapse-3.1.0 → synapse-3.2.0}/synapse/lib/stormlib/storm.py +2 -2
  66. {synapse-3.1.0 → synapse-3.2.0}/synapse/lib/stormlib/vault.py +6 -6
  67. {synapse-3.1.0 → synapse-3.2.0}/synapse/lib/stormlib/vertex.py +5 -5
  68. {synapse-3.1.0 → synapse-3.2.0}/synapse/lib/stormlib/xml.py +2 -2
  69. {synapse-3.1.0 → synapse-3.2.0}/synapse/lib/stormtypes.py +178 -82
  70. {synapse-3.1.0 → synapse-3.2.0}/synapse/lib/time.py +4 -4
  71. {synapse-3.1.0 → synapse-3.2.0}/synapse/lib/types.py +29 -16
  72. {synapse-3.1.0 → synapse-3.2.0}/synapse/lib/urlhelp.py +1 -1
  73. {synapse-3.1.0 → synapse-3.2.0}/synapse/lib/version.py +4 -4
  74. {synapse-3.1.0 → synapse-3.2.0}/synapse/lib/view.py +43 -6
  75. {synapse-3.1.0 → synapse-3.2.0}/synapse/models/biz.py +1 -3
  76. {synapse-3.1.0 → synapse-3.2.0}/synapse/models/economic.py +1 -0
  77. {synapse-3.1.0 → synapse-3.2.0}/synapse/models/entity.py +3 -0
  78. {synapse-3.1.0 → synapse-3.2.0}/synapse/models/inet.py +4 -0
  79. {synapse-3.1.0 → synapse-3.2.0}/synapse/models/infotech.py +29 -0
  80. {synapse-3.1.0 → synapse-3.2.0}/synapse/models/syn.py +3 -2
  81. {synapse-3.1.0 → synapse-3.2.0}/synapse/models/telco.py +1 -0
  82. {synapse-3.1.0 → synapse-3.2.0}/synapse/telepath.py +1 -1
  83. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/files/stormpkg/testpkg.yaml +1 -1
  84. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/files/testpkg_build_docs/testpkg.yaml +1 -1
  85. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_axon.py +220 -1
  86. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_cortex.py +26 -3
  87. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_datamodel.py +31 -0
  88. synapse-3.2.0/synapse/tests/test_docs_stormref.py +84 -0
  89. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_lib_aha.py +61 -21
  90. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_lib_ast.py +438 -7
  91. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_lib_autodoc.py +226 -45
  92. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_lib_cell.py +81 -5
  93. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_lib_grammar.py +8 -0
  94. synapse-3.2.0/synapse/tests/test_lib_httpclient.py +54 -0
  95. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_lib_layer.py +55 -0
  96. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_lib_mddocs.py +724 -1
  97. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_lib_mdstorm.py +136 -0
  98. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_lib_nexus.py +68 -0
  99. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_lib_scrape.py +23 -0
  100. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_lib_storm.py +34 -9
  101. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_lib_stormhttp.py +221 -0
  102. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_lib_stormlib_aha.py +5 -5
  103. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_lib_stormlib_jwt.py +78 -0
  104. synapse-3.2.0/synapse/tests/test_lib_stormlib_model.py +1918 -0
  105. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_lib_stormlib_oauth.py +10 -0
  106. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_lib_stormtypes.py +156 -0
  107. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_lib_view.py +225 -0
  108. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_model_biz.py +5 -0
  109. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_model_economic.py +10 -0
  110. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_model_entity.py +7 -0
  111. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_model_inet.py +9 -3
  112. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_model_infotech.py +89 -0
  113. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_model_syn.py +5 -0
  114. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_model_telco.py +7 -0
  115. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_tools_cortex_layer.py +222 -0
  116. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_tools_storm_cli.py +36 -8
  117. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_utils.py +242 -0
  118. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/utils.py +315 -0
  119. {synapse-3.1.0 → synapse-3.2.0}/synapse/tools/cortex/docmodel.py +1 -1
  120. {synapse-3.1.0 → synapse-3.2.0}/synapse/tools/cortex/layer/dump.py +3 -5
  121. {synapse-3.1.0 → synapse-3.2.0}/synapse/tools/service/backup.py +4 -4
  122. {synapse-3.1.0 → synapse-3.2.0}/synapse/tools/storm/pkg/gen.py +1 -1
  123. {synapse-3.1.0 → synapse-3.2.0/synapse.egg-info}/PKG-INFO +8 -8
  124. {synapse-3.1.0 → synapse-3.2.0}/synapse.egg-info/SOURCES.txt +4 -0
  125. synapse-3.1.0/synapse/tests/test_lib_stormlib_model.py +0 -323
  126. {synapse-3.1.0 → synapse-3.2.0}/LICENSE +0 -0
  127. {synapse-3.1.0 → synapse-3.2.0}/setup.cfg +0 -0
  128. {synapse-3.1.0 → synapse-3.2.0}/synapse/__init__.py +0 -0
  129. {synapse-3.1.0 → synapse-3.2.0}/synapse/assets/__init__.py +0 -0
  130. {synapse-3.1.0 → synapse-3.2.0}/synapse/cells.py +0 -0
  131. {synapse-3.1.0 → synapse-3.2.0}/synapse/data/__init__.py +0 -0
  132. {synapse-3.1.0 → synapse-3.2.0}/synapse/data/attack-flow/LICENSE.txt +0 -0
  133. {synapse-3.1.0 → synapse-3.2.0}/synapse/data/attack-flow/README.md +0 -0
  134. {synapse-3.1.0 → synapse-3.2.0}/synapse/data/attack-flow/attack-flow-schema-2.0.0.json +0 -0
  135. {synapse-3.1.0 → synapse-3.2.0}/synapse/data/certs/cas/The Vertex Project Intermediate CA (2026).crt +0 -0
  136. {synapse-3.1.0 → synapse-3.2.0}/synapse/data/certs/cas/The Vertex Project ROOT CA (2026).crt +0 -0
  137. {synapse-3.1.0 → synapse-3.2.0}/synapse/data/certs/crls/The Vertex Project Intermediate CA (2026).crl +0 -0
  138. {synapse-3.1.0 → synapse-3.2.0}/synapse/data/certs/crls/The Vertex Project ROOT CA (2026).crl +0 -0
  139. {synapse-3.1.0 → synapse-3.2.0}/synapse/data/iana.tlds.mpk +0 -0
  140. {synapse-3.1.0 → synapse-3.2.0}/synapse/data/iana.uris.mpk +0 -0
  141. {synapse-3.1.0 → synapse-3.2.0}/synapse/data/jsonschemas/README.md +0 -0
  142. {synapse-3.1.0 → synapse-3.2.0}/synapse/data/jsonschemas/json-schema.org/draft-07/schema +0 -0
  143. {synapse-3.1.0 → synapse-3.2.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/LICENSE.txt +0 -0
  144. {synapse-3.1.0 → synapse-3.2.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/common/binary.json +0 -0
  145. {synapse-3.1.0 → synapse-3.2.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/common/bundle.json +0 -0
  146. {synapse-3.1.0 → synapse-3.2.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/common/core.json +0 -0
  147. {synapse-3.1.0 → synapse-3.2.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/common/cyber-observable-core.json +0 -0
  148. {synapse-3.1.0 → synapse-3.2.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/common/dictionary.json +0 -0
  149. {synapse-3.1.0 → synapse-3.2.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/common/extension-definition.json +0 -0
  150. {synapse-3.1.0 → synapse-3.2.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/common/extension.json +0 -0
  151. {synapse-3.1.0 → synapse-3.2.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/common/external-reference.json +0 -0
  152. {synapse-3.1.0 → synapse-3.2.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/common/granular-marking.json +0 -0
  153. {synapse-3.1.0 → synapse-3.2.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/common/hashes-type.json +0 -0
  154. {synapse-3.1.0 → synapse-3.2.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/common/hex.json +0 -0
  155. {synapse-3.1.0 → synapse-3.2.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/common/identifier.json +0 -0
  156. {synapse-3.1.0 → synapse-3.2.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/common/kill-chain-phase.json +0 -0
  157. {synapse-3.1.0 → synapse-3.2.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/common/language-content.json +0 -0
  158. {synapse-3.1.0 → synapse-3.2.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/common/marking-definition.json +0 -0
  159. {synapse-3.1.0 → synapse-3.2.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/common/properties.json +0 -0
  160. {synapse-3.1.0 → synapse-3.2.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/common/timestamp.json +0 -0
  161. {synapse-3.1.0 → synapse-3.2.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/common/url-regex.json +0 -0
  162. {synapse-3.1.0 → synapse-3.2.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/observables/artifact.json +0 -0
  163. {synapse-3.1.0 → synapse-3.2.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/observables/autonomous-system.json +0 -0
  164. {synapse-3.1.0 → synapse-3.2.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/observables/directory.json +0 -0
  165. {synapse-3.1.0 → synapse-3.2.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/observables/domain-name.json +0 -0
  166. {synapse-3.1.0 → synapse-3.2.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/observables/email-addr.json +0 -0
  167. {synapse-3.1.0 → synapse-3.2.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/observables/email-message.json +0 -0
  168. {synapse-3.1.0 → synapse-3.2.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/observables/file.json +0 -0
  169. {synapse-3.1.0 → synapse-3.2.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/observables/ipv4-addr.json +0 -0
  170. {synapse-3.1.0 → synapse-3.2.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/observables/ipv6-addr.json +0 -0
  171. {synapse-3.1.0 → synapse-3.2.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/observables/mac-addr.json +0 -0
  172. {synapse-3.1.0 → synapse-3.2.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/observables/mutex.json +0 -0
  173. {synapse-3.1.0 → synapse-3.2.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/observables/network-traffic.json +0 -0
  174. {synapse-3.1.0 → synapse-3.2.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/observables/process.json +0 -0
  175. {synapse-3.1.0 → synapse-3.2.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/observables/software.json +0 -0
  176. {synapse-3.1.0 → synapse-3.2.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/observables/url.json +0 -0
  177. {synapse-3.1.0 → synapse-3.2.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/observables/user-account.json +0 -0
  178. {synapse-3.1.0 → synapse-3.2.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/observables/windows-registry-key.json +0 -0
  179. {synapse-3.1.0 → synapse-3.2.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/observables/x509-certificate.json +0 -0
  180. {synapse-3.1.0 → synapse-3.2.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/sdos/attack-pattern.json +0 -0
  181. {synapse-3.1.0 → synapse-3.2.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/sdos/campaign.json +0 -0
  182. {synapse-3.1.0 → synapse-3.2.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/sdos/course-of-action.json +0 -0
  183. {synapse-3.1.0 → synapse-3.2.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/sdos/grouping.json +0 -0
  184. {synapse-3.1.0 → synapse-3.2.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/sdos/identity.json +0 -0
  185. {synapse-3.1.0 → synapse-3.2.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/sdos/incident.json +0 -0
  186. {synapse-3.1.0 → synapse-3.2.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/sdos/indicator.json +0 -0
  187. {synapse-3.1.0 → synapse-3.2.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/sdos/infrastructure.json +0 -0
  188. {synapse-3.1.0 → synapse-3.2.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/sdos/intrusion-set.json +0 -0
  189. {synapse-3.1.0 → synapse-3.2.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/sdos/location.json +0 -0
  190. {synapse-3.1.0 → synapse-3.2.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/sdos/malware-analysis.json +0 -0
  191. {synapse-3.1.0 → synapse-3.2.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/sdos/malware.json +0 -0
  192. {synapse-3.1.0 → synapse-3.2.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/sdos/note.json +0 -0
  193. {synapse-3.1.0 → synapse-3.2.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/sdos/observed-data.json +0 -0
  194. {synapse-3.1.0 → synapse-3.2.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/sdos/opinion.json +0 -0
  195. {synapse-3.1.0 → synapse-3.2.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/sdos/report.json +0 -0
  196. {synapse-3.1.0 → synapse-3.2.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/sdos/threat-actor.json +0 -0
  197. {synapse-3.1.0 → synapse-3.2.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/sdos/tool.json +0 -0
  198. {synapse-3.1.0 → synapse-3.2.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/sdos/vulnerability.json +0 -0
  199. {synapse-3.1.0 → synapse-3.2.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/sros/relationship.json +0 -0
  200. {synapse-3.1.0 → synapse-3.2.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/sros/sighting.json +0 -0
  201. {synapse-3.1.0 → synapse-3.2.0}/synapse/data/lark/__init__.py +0 -0
  202. {synapse-3.1.0 → synapse-3.2.0}/synapse/data/lark/imap.lark +0 -0
  203. {synapse-3.1.0 → synapse-3.2.0}/synapse/data/v2modelmap.yaml +0 -0
  204. {synapse-3.1.0 → synapse-3.2.0}/synapse/glob.py +0 -0
  205. {synapse-3.1.0 → synapse-3.2.0}/synapse/lib/__init__.py +0 -0
  206. {synapse-3.1.0 → synapse-3.2.0}/synapse/lib/agenda.py +0 -0
  207. {synapse-3.1.0 → synapse-3.2.0}/synapse/lib/auth.py +0 -0
  208. {synapse-3.1.0 → synapse-3.2.0}/synapse/lib/cache.py +0 -0
  209. {synapse-3.1.0 → synapse-3.2.0}/synapse/lib/chop.py +0 -0
  210. {synapse-3.1.0 → synapse-3.2.0}/synapse/lib/cli.py +0 -0
  211. {synapse-3.1.0 → synapse-3.2.0}/synapse/lib/cmd.py +0 -0
  212. {synapse-3.1.0 → synapse-3.2.0}/synapse/lib/const.py +0 -0
  213. {synapse-3.1.0 → synapse-3.2.0}/synapse/lib/crypto/__init__.py +0 -0
  214. {synapse-3.1.0 → synapse-3.2.0}/synapse/lib/crypto/coin.py +0 -0
  215. {synapse-3.1.0 → synapse-3.2.0}/synapse/lib/crypto/ecc.py +0 -0
  216. {synapse-3.1.0 → synapse-3.2.0}/synapse/lib/crypto/jwk.py +0 -0
  217. {synapse-3.1.0 → synapse-3.2.0}/synapse/lib/crypto/passwd.py +0 -0
  218. {synapse-3.1.0 → synapse-3.2.0}/synapse/lib/crypto/rsa.py +0 -0
  219. {synapse-3.1.0 → synapse-3.2.0}/synapse/lib/crypto/tinfoil.py +0 -0
  220. {synapse-3.1.0 → synapse-3.2.0}/synapse/lib/datfile.py +0 -0
  221. {synapse-3.1.0 → synapse-3.2.0}/synapse/lib/drive.py +0 -0
  222. {synapse-3.1.0 → synapse-3.2.0}/synapse/lib/dyndeps.py +0 -0
  223. {synapse-3.1.0 → synapse-3.2.0}/synapse/lib/gis.py +0 -0
  224. {synapse-3.1.0 → synapse-3.2.0}/synapse/lib/grammar.py +0 -0
  225. {synapse-3.1.0 → synapse-3.2.0}/synapse/lib/hashitem.py +0 -0
  226. {synapse-3.1.0 → synapse-3.2.0}/synapse/lib/hashset.py +0 -0
  227. {synapse-3.1.0 → synapse-3.2.0}/synapse/lib/health.py +0 -0
  228. {synapse-3.1.0 → synapse-3.2.0}/synapse/lib/jsonstor.py +0 -0
  229. {synapse-3.1.0 → synapse-3.2.0}/synapse/lib/lmdbslab.py +0 -0
  230. {synapse-3.1.0 → synapse-3.2.0}/synapse/lib/logging.py +0 -0
  231. {synapse-3.1.0 → synapse-3.2.0}/synapse/lib/modelrev.py +0 -0
  232. {synapse-3.1.0 → synapse-3.2.0}/synapse/lib/msgpack.py +0 -0
  233. {synapse-3.1.0 → synapse-3.2.0}/synapse/lib/output.py +0 -0
  234. {synapse-3.1.0 → synapse-3.2.0}/synapse/lib/platforms/__init__.py +0 -0
  235. {synapse-3.1.0 → synapse-3.2.0}/synapse/lib/platforms/common.py +0 -0
  236. {synapse-3.1.0 → synapse-3.2.0}/synapse/lib/platforms/darwin.py +0 -0
  237. {synapse-3.1.0 → synapse-3.2.0}/synapse/lib/platforms/freebsd.py +0 -0
  238. {synapse-3.1.0 → synapse-3.2.0}/synapse/lib/platforms/windows.py +0 -0
  239. {synapse-3.1.0 → synapse-3.2.0}/synapse/lib/provision.py +0 -0
  240. {synapse-3.1.0 → synapse-3.2.0}/synapse/lib/queue.py +0 -0
  241. {synapse-3.1.0 → synapse-3.2.0}/synapse/lib/share.py +0 -0
  242. {synapse-3.1.0 → synapse-3.2.0}/synapse/lib/slabseqn.py +0 -0
  243. {synapse-3.1.0 → synapse-3.2.0}/synapse/lib/spawner.py +0 -0
  244. {synapse-3.1.0 → synapse-3.2.0}/synapse/lib/spooled.py +0 -0
  245. {synapse-3.1.0 → synapse-3.2.0}/synapse/lib/stormctrl.py +0 -0
  246. {synapse-3.1.0 → synapse-3.2.0}/synapse/lib/stormlib/__init__.py +0 -0
  247. {synapse-3.1.0 → synapse-3.2.0}/synapse/lib/stormlib/basex.py +0 -0
  248. {synapse-3.1.0 → synapse-3.2.0}/synapse/lib/stormlib/bytes.py +0 -0
  249. {synapse-3.1.0 → synapse-3.2.0}/synapse/lib/stormlib/cell.py +0 -0
  250. {synapse-3.1.0 → synapse-3.2.0}/synapse/lib/stormlib/compression.py +0 -0
  251. {synapse-3.1.0 → synapse-3.2.0}/synapse/lib/stormlib/easyperm.py +0 -0
  252. {synapse-3.1.0 → synapse-3.2.0}/synapse/lib/stormlib/ethereum.py +0 -0
  253. {synapse-3.1.0 → synapse-3.2.0}/synapse/lib/stormlib/file.py +0 -0
  254. {synapse-3.1.0 → synapse-3.2.0}/synapse/lib/stormlib/gen.py +0 -0
  255. {synapse-3.1.0 → synapse-3.2.0}/synapse/lib/stormlib/gis.py +0 -0
  256. {synapse-3.1.0 → synapse-3.2.0}/synapse/lib/stormlib/graph.py +0 -0
  257. {synapse-3.1.0 → synapse-3.2.0}/synapse/lib/stormlib/hashes.py +0 -0
  258. {synapse-3.1.0 → synapse-3.2.0}/synapse/lib/stormlib/hex.py +0 -0
  259. {synapse-3.1.0 → synapse-3.2.0}/synapse/lib/stormlib/index.py +0 -0
  260. {synapse-3.1.0 → synapse-3.2.0}/synapse/lib/stormlib/infosec.py +0 -0
  261. {synapse-3.1.0 → synapse-3.2.0}/synapse/lib/stormlib/ipv6.py +0 -0
  262. {synapse-3.1.0 → synapse-3.2.0}/synapse/lib/stormlib/iters.py +0 -0
  263. {synapse-3.1.0 → synapse-3.2.0}/synapse/lib/stormlib/json.py +0 -0
  264. {synapse-3.1.0 → synapse-3.2.0}/synapse/lib/stormlib/math.py +0 -0
  265. {synapse-3.1.0 → synapse-3.2.0}/synapse/lib/stormlib/mime.py +0 -0
  266. {synapse-3.1.0 → synapse-3.2.0}/synapse/lib/stormlib/modelext.py +0 -0
  267. {synapse-3.1.0 → synapse-3.2.0}/synapse/lib/stormlib/pack.py +0 -0
  268. {synapse-3.1.0 → synapse-3.2.0}/synapse/lib/stormlib/quorum.py +0 -0
  269. {synapse-3.1.0 → synapse-3.2.0}/synapse/lib/stormlib/random.py +0 -0
  270. {synapse-3.1.0 → synapse-3.2.0}/synapse/lib/stormlib/smtp.py +0 -0
  271. {synapse-3.1.0 → synapse-3.2.0}/synapse/lib/stormlib/spooled.py +0 -0
  272. {synapse-3.1.0 → synapse-3.2.0}/synapse/lib/stormlib/stats.py +0 -0
  273. {synapse-3.1.0 → synapse-3.2.0}/synapse/lib/stormlib/tabular.py +0 -0
  274. {synapse-3.1.0 → synapse-3.2.0}/synapse/lib/stormlib/task.py +0 -0
  275. {synapse-3.1.0 → synapse-3.2.0}/synapse/lib/stormlib/utils.py +0 -0
  276. {synapse-3.1.0 → synapse-3.2.0}/synapse/lib/stormlib/version.py +0 -0
  277. {synapse-3.1.0 → synapse-3.2.0}/synapse/lib/stormlib/yaml.py +0 -0
  278. {synapse-3.1.0 → synapse-3.2.0}/synapse/lib/stormsvc.py +0 -0
  279. {synapse-3.1.0 → synapse-3.2.0}/synapse/lib/task.py +0 -0
  280. {synapse-3.1.0 → synapse-3.2.0}/synapse/lib/thishost.py +0 -0
  281. {synapse-3.1.0 → synapse-3.2.0}/synapse/lib/thisplat.py +0 -0
  282. {synapse-3.1.0 → synapse-3.2.0}/synapse/lib/threads.py +0 -0
  283. {synapse-3.1.0 → synapse-3.2.0}/synapse/lib/trigger.py +0 -0
  284. {synapse-3.1.0 → synapse-3.2.0}/synapse/lookup/__init__.py +0 -0
  285. {synapse-3.1.0 → synapse-3.2.0}/synapse/lookup/cvss.py +0 -0
  286. {synapse-3.1.0 → synapse-3.2.0}/synapse/lookup/iana.py +0 -0
  287. {synapse-3.1.0 → synapse-3.2.0}/synapse/lookup/macho.py +0 -0
  288. {synapse-3.1.0 → synapse-3.2.0}/synapse/lookup/pe.py +0 -0
  289. {synapse-3.1.0 → synapse-3.2.0}/synapse/lookup/phonenum.py +0 -0
  290. {synapse-3.1.0 → synapse-3.2.0}/synapse/lookup/timezones.py +0 -0
  291. {synapse-3.1.0 → synapse-3.2.0}/synapse/models/__init__.py +0 -0
  292. {synapse-3.1.0 → synapse-3.2.0}/synapse/models/auth.py +0 -0
  293. {synapse-3.1.0 → synapse-3.2.0}/synapse/models/base.py +0 -0
  294. {synapse-3.1.0 → synapse-3.2.0}/synapse/models/belief.py +0 -0
  295. {synapse-3.1.0 → synapse-3.2.0}/synapse/models/crypto.py +0 -0
  296. {synapse-3.1.0 → synapse-3.2.0}/synapse/models/dns.py +0 -0
  297. {synapse-3.1.0 → synapse-3.2.0}/synapse/models/doc.py +0 -0
  298. {synapse-3.1.0 → synapse-3.2.0}/synapse/models/files.py +0 -0
  299. {synapse-3.1.0 → synapse-3.2.0}/synapse/models/geopol.py +0 -0
  300. {synapse-3.1.0 → synapse-3.2.0}/synapse/models/geospace.py +0 -0
  301. {synapse-3.1.0 → synapse-3.2.0}/synapse/models/gov.py +0 -0
  302. {synapse-3.1.0 → synapse-3.2.0}/synapse/models/ind.py +0 -0
  303. {synapse-3.1.0 → synapse-3.2.0}/synapse/models/language.py +0 -0
  304. {synapse-3.1.0 → synapse-3.2.0}/synapse/models/material.py +0 -0
  305. {synapse-3.1.0 → synapse-3.2.0}/synapse/models/orgs.py +0 -0
  306. {synapse-3.1.0 → synapse-3.2.0}/synapse/models/person.py +0 -0
  307. {synapse-3.1.0 → synapse-3.2.0}/synapse/models/planning.py +0 -0
  308. {synapse-3.1.0 → synapse-3.2.0}/synapse/models/proj.py +0 -0
  309. {synapse-3.1.0 → synapse-3.2.0}/synapse/models/risk.py +0 -0
  310. {synapse-3.1.0 → synapse-3.2.0}/synapse/models/science.py +0 -0
  311. {synapse-3.1.0 → synapse-3.2.0}/synapse/models/transport.py +0 -0
  312. {synapse-3.1.0 → synapse-3.2.0}/synapse/servers/__init__.py +0 -0
  313. {synapse-3.1.0 → synapse-3.2.0}/synapse/servers/aha.py +0 -0
  314. {synapse-3.1.0 → synapse-3.2.0}/synapse/servers/axon.py +0 -0
  315. {synapse-3.1.0 → synapse-3.2.0}/synapse/servers/cell.py +0 -0
  316. {synapse-3.1.0 → synapse-3.2.0}/synapse/servers/cortex.py +0 -0
  317. {synapse-3.1.0 → synapse-3.2.0}/synapse/servers/jsonstor.py +0 -0
  318. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/__init__.py +0 -0
  319. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/files/TestUtilsGetrefs.test_basics.yaml +0 -0
  320. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/files/__init__.py +0 -0
  321. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/files/aha/certs/cas/synapse.crt.tinfoil +0 -0
  322. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/files/aha/certs/cas/synapse.key.tinfoil +0 -0
  323. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/files/aha/certs/hosts/00.aha.loop.vertex.link.crt.tinfoil +0 -0
  324. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/files/aha/certs/hosts/00.aha.loop.vertex.link.key.tinfoil +0 -0
  325. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/files/aha/certs/users/root@synapse.crt.tinfoil +0 -0
  326. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/files/aha/certs/users/root@synapse.key.tinfoil +0 -0
  327. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/files/attack_flow/CISA AA22-138B VMWare Workspace (Alt).json +0 -0
  328. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/files/attack_flow/CISA_Iranian_APT.json +0 -0
  329. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/files/certdir/cas/ca.crt.tinfoil +0 -0
  330. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/files/certdir/cas/ca.key.tinfoil +0 -0
  331. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/files/certdir/hosts/localhost.crt.tinfoil +0 -0
  332. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/files/certdir/hosts/localhost.key.tinfoil +0 -0
  333. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/files/certdir/users/root.crt.tinfoil +0 -0
  334. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/files/certdir/users/root.key.tinfoil +0 -0
  335. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/files/certdir/users/user.crt.tinfoil +0 -0
  336. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/files/certdir/users/user.key.tinfoil +0 -0
  337. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/files/cpedata.json +0 -0
  338. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/files/mdstorm/httprespmulti.yaml +0 -0
  339. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/files/mdstorm/testsvc.py +0 -0
  340. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/files/stix_export/basic.json +0 -0
  341. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/files/stix_export/custom0.json +0 -0
  342. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/files/stix_export/risk0.json +0 -0
  343. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/files/stix_import/apt1.json +0 -0
  344. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/files/stix_import/oasis-example-00.json +0 -0
  345. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/files/stix_import/scos.json +0 -0
  346. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/files/stormcov/argvquery.storm +0 -0
  347. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/files/stormcov/argvquery2.storm +0 -0
  348. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/files/stormcov/argvquery3.storm +0 -0
  349. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/files/stormcov/argvquery4.storm +0 -0
  350. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/files/stormcov/argvquery5.storm +0 -0
  351. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/files/stormcov/badstorm.storm +0 -0
  352. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/files/stormcov/continueloop.storm +0 -0
  353. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/files/stormcov/dupesubs.storm +0 -0
  354. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/files/stormcov/dupewarn.storm +0 -0
  355. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/files/stormcov/dupfunc.storm +0 -0
  356. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/files/stormcov/embedquery.storm +0 -0
  357. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/files/stormcov/embedquery2.storm +0 -0
  358. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/files/stormcov/embedquery3.storm +0 -0
  359. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/files/stormcov/embedquery4.storm +0 -0
  360. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/files/stormcov/embedquery5.storm +0 -0
  361. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/files/stormcov/emptybody.storm +0 -0
  362. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/files/stormcov/exprdict.storm +0 -0
  363. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/files/stormcov/forloop.storm +0 -0
  364. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/files/stormcov/ifelif.storm +0 -0
  365. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/files/stormcov/ifelse.storm +0 -0
  366. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/files/stormcov/lookup.storm +0 -0
  367. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/files/stormcov/pivot.storm +0 -0
  368. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/files/stormcov/pragma-nocov.storm +0 -0
  369. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/files/stormcov/runtsafety.storm +0 -0
  370. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/files/stormcov/spin.storm +0 -0
  371. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/files/stormcov/stopreturn.storm +0 -0
  372. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/files/stormcov/stormctrl.storm +0 -0
  373. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/files/stormcov/switch.storm +0 -0
  374. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/files/stormcov/switchnodefault.storm +0 -0
  375. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/files/stormcov/trycatch.storm +0 -0
  376. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/files/stormcov/whilebackedge.storm +0 -0
  377. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/files/stormcov/whilecontinue.storm +0 -0
  378. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/files/stormcov/whileloop.storm +0 -0
  379. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/files/stormcov/whilewithnode.storm +0 -0
  380. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/files/stormmod/common +0 -0
  381. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/files/stormpkg/badapidef.yaml +0 -0
  382. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/files/stormpkg/badcmdname.yaml +0 -0
  383. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/files/stormpkg/badendpoints.yaml +0 -0
  384. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/files/stormpkg/badinits.yaml +0 -0
  385. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/files/stormpkg/badjsonpkg.yaml +0 -0
  386. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/files/stormpkg/badvaultskeys.yaml +0 -0
  387. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/files/stormpkg/badvaultsschema.yaml +0 -0
  388. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/files/stormpkg/declaredfiles.yaml +0 -0
  389. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/files/stormpkg/docs/foobar.md +0 -0
  390. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/files/stormpkg/docs/foobar.svg +0 -0
  391. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/files/stormpkg/docs/index.md +0 -0
  392. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/files/stormpkg/dotstorm/dotstorm.yaml +0 -0
  393. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/files/stormpkg/dotstorm_noevents/dotstorm.yaml +0 -0
  394. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/files/stormpkg/dotstorm_noevents/storm/commands/dotstorm.bar.storm +0 -0
  395. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/files/stormpkg/dotstorm_noevents/storm/modules/dotstorm.foo.storm +0 -0
  396. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/files/stormpkg/files/data.dat +0 -0
  397. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/files/stormpkg/files/sub/nested.dat +0 -0
  398. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/files/stormpkg/nomime.yaml +0 -0
  399. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/files/stormpkg/nopath.yaml +0 -0
  400. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/files/stormpkg/nosuchfile.yaml +0 -0
  401. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/files/stormpkg/optic/index.html +0 -0
  402. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/files/stormpkg/storm/commands/invalidCMD.storm +0 -0
  403. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/files/stormpkg/storm/commands/testpkg.baz.storm +0 -0
  404. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/files/stormpkg/storm/commands/testpkgcmd.storm +0 -0
  405. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/files/stormpkg/storm/modules/apimod.storm +0 -0
  406. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/files/stormpkg/storm/modules/testmod.storm +0 -0
  407. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/files/stormpkg/workflows/testpkg-bam.newp +0 -0
  408. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/files/stormpkg/workflows/testpkg-baz.yaml +0 -0
  409. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/files/stormpkg/workflows/testpkg-foo.yaml +0 -0
  410. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/files/test.dat +0 -0
  411. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/files/testpkg_build_docs/docs/index.md +0 -0
  412. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/files/testpkg_build_docs/docs/mocks/cassette.yaml +0 -0
  413. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/files/testpkg_build_docs/docs/stormpackage.md +0 -0
  414. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/files/testpkg_build_docs/docs/sub/image.svg +0 -0
  415. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/files/testpkg_build_docs/docs/sub/nested.md +0 -0
  416. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/files/testpkg_build_docs/docs/userguide.md +0 -0
  417. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/files/testpkg_build_docs/storm/commands/testcmd.storm +0 -0
  418. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/files/testpkg_build_docs/storm/modules/apimod.storm +0 -0
  419. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/files/testpkg_build_docs/storm/modules/testmod.storm +0 -0
  420. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/files/testpkg_build_docs/storm/testcmd.storm +0 -0
  421. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/files/testpkg_build_docs_no_h1/docs/index.md +0 -0
  422. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/files/testpkg_build_docs_no_h1/docs/noh1.md +0 -0
  423. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/files/testpkg_build_docs_no_h1/testpkg.yaml +0 -0
  424. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/nopmod.py +0 -0
  425. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_assets.py +0 -0
  426. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_common.py +0 -0
  427. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_daemon.py +0 -0
  428. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_data.py +0 -0
  429. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_exc.py +0 -0
  430. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_glob.py +0 -0
  431. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_lib_agenda.py +0 -0
  432. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_lib_auth.py +0 -0
  433. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_lib_base.py +0 -0
  434. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_lib_boss.py +0 -0
  435. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_lib_cache.py +0 -0
  436. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_lib_certdir.py +0 -0
  437. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_lib_chop.py +0 -0
  438. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_lib_cli.py +0 -0
  439. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_lib_cluster.py +0 -0
  440. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_lib_config.py +0 -0
  441. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_lib_const.py +0 -0
  442. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_lib_coro.py +0 -0
  443. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_lib_crypto_coin.py +0 -0
  444. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_lib_crypto_ecc.py +0 -0
  445. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_lib_crypto_jwk.py +0 -0
  446. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_lib_crypto_passwd.py +0 -0
  447. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_lib_crypto_rsa.py +0 -0
  448. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_lib_crypto_tinfoil.py +0 -0
  449. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_lib_datfile.py +0 -0
  450. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_lib_drive.py +0 -0
  451. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_lib_dyndeps.py +0 -0
  452. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_lib_gis.py +0 -0
  453. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_lib_hashitem.py +0 -0
  454. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_lib_hashset.py +0 -0
  455. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_lib_health.py +0 -0
  456. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_lib_httpapi.py +0 -0
  457. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_lib_json.py +0 -0
  458. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_lib_jsonstor.py +0 -0
  459. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_lib_jsrpc.py +0 -0
  460. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_lib_link.py +0 -0
  461. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_lib_lmdbslab.py +0 -0
  462. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_lib_logging.py +0 -0
  463. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_lib_mcp.py +0 -0
  464. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_lib_modelrev.py +0 -0
  465. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_lib_msgpack.py +0 -0
  466. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_lib_multislabseqn.py +0 -0
  467. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_lib_node.py +0 -0
  468. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_lib_output.py +0 -0
  469. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_lib_platforms_linux.py +0 -0
  470. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_lib_process.py +0 -0
  471. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_lib_processpool.py +0 -0
  472. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_lib_provision.py +0 -0
  473. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_lib_queue.py +0 -0
  474. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_lib_reflect.py +0 -0
  475. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_lib_scope.py +0 -0
  476. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_lib_slabseqn.py +0 -0
  477. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_lib_spawner.py +0 -0
  478. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_lib_spooled.py +0 -0
  479. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_lib_storm_format.py +0 -0
  480. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_lib_stormctrl.py +0 -0
  481. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_lib_stormlib_auth.py +0 -0
  482. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_lib_stormlib_basex.py +0 -0
  483. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_lib_stormlib_cache.py +0 -0
  484. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_lib_stormlib_cell.py +0 -0
  485. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_lib_stormlib_compression.py +0 -0
  486. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_lib_stormlib_cortex.py +0 -0
  487. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_lib_stormlib_easyperm.py +0 -0
  488. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_lib_stormlib_ecc.py +0 -0
  489. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_lib_stormlib_env.py +0 -0
  490. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_lib_stormlib_ethereum.py +0 -0
  491. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_lib_stormlib_file.py +0 -0
  492. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_lib_stormlib_gen.py +0 -0
  493. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_lib_stormlib_gis.py +0 -0
  494. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_lib_stormlib_hashes.py +0 -0
  495. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_lib_stormlib_hex.py +0 -0
  496. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_lib_stormlib_imap.py +0 -0
  497. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_lib_stormlib_index.py +0 -0
  498. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_lib_stormlib_infosec.py +0 -0
  499. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_lib_stormlib_ipv6.py +0 -0
  500. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_lib_stormlib_iters.py +0 -0
  501. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_lib_stormlib_json.py +0 -0
  502. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_lib_stormlib_log.py +0 -0
  503. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_lib_stormlib_macro.py +0 -0
  504. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_lib_stormlib_mime.py +0 -0
  505. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_lib_stormlib_modelext.py +0 -0
  506. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_lib_stormlib_pack.py +0 -0
  507. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_lib_stormlib_pkg.py +0 -0
  508. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_lib_stormlib_quorum.py +0 -0
  509. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_lib_stormlib_random.py +0 -0
  510. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_lib_stormlib_rsa.py +0 -0
  511. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_lib_stormlib_scrape.py +0 -0
  512. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_lib_stormlib_smtp.py +0 -0
  513. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_lib_stormlib_spooled.py +0 -0
  514. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_lib_stormlib_stats.py +0 -0
  515. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_lib_stormlib_stix.py +0 -0
  516. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_lib_stormlib_storm.py +0 -0
  517. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_lib_stormlib_tabular.py +0 -0
  518. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_lib_stormlib_task.py +0 -0
  519. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_lib_stormlib_utils.py +0 -0
  520. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_lib_stormlib_vault.py +0 -0
  521. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_lib_stormlib_vertex.py +0 -0
  522. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_lib_stormlib_xml.py +0 -0
  523. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_lib_stormlib_yaml.py +0 -0
  524. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_lib_stormsvc.py +0 -0
  525. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_lib_task.py +0 -0
  526. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_lib_thishost.py +0 -0
  527. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_lib_time.py +0 -0
  528. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_lib_trigger.py +0 -0
  529. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_lib_types.py +0 -0
  530. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_lib_urlhelp.py +0 -0
  531. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_lib_version.py +0 -0
  532. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_lookup_phonenum.py +0 -0
  533. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_model_auth.py +0 -0
  534. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_model_base.py +0 -0
  535. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_model_belief.py +0 -0
  536. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_model_crypto.py +0 -0
  537. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_model_dns.py +0 -0
  538. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_model_doc.py +0 -0
  539. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_model_files.py +0 -0
  540. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_model_geopol.py +0 -0
  541. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_model_geospace.py +0 -0
  542. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_model_gov.py +0 -0
  543. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_model_gov_cn.py +0 -0
  544. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_model_gov_intl.py +0 -0
  545. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_model_gov_us.py +0 -0
  546. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_model_language.py +0 -0
  547. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_model_material.py +0 -0
  548. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_model_orgs.py +0 -0
  549. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_model_person.py +0 -0
  550. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_model_planning.py +0 -0
  551. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_model_proj.py +0 -0
  552. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_model_risk.py +0 -0
  553. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_model_science.py +0 -0
  554. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_model_transport.py +0 -0
  555. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_servers_axon.py +0 -0
  556. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_servers_cortex.py +0 -0
  557. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_servers_univ.py +0 -0
  558. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_telepath.py +0 -0
  559. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_tools_aha.py +0 -0
  560. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_tools_axon_copy.py +0 -0
  561. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_tools_axon_dump_load.py +0 -0
  562. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_tools_axon_get.py +0 -0
  563. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_tools_axon_put.py +0 -0
  564. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_tools_cortex_csv.py +0 -0
  565. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_tools_cortex_docmodel.py +0 -0
  566. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_tools_cortex_feed.py +0 -0
  567. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_tools_docker_validate.py +0 -0
  568. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_tools_service_apikey.py +0 -0
  569. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_tools_service_backup.py +0 -0
  570. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_tools_service_demote.py +0 -0
  571. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_tools_service_healthcheck.py +0 -0
  572. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_tools_service_modrole.py +0 -0
  573. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_tools_service_moduser.py +0 -0
  574. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_tools_service_promote.py +0 -0
  575. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_tools_service_reload.py +0 -0
  576. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_tools_service_shutdown.py +0 -0
  577. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_tools_service_snapshot.py +0 -0
  578. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_tools_storm_pkg_doc.py +0 -0
  579. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_tools_storm_pkg_gen.py +0 -0
  580. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_tools_storm_pkg_publish.py +0 -0
  581. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_tools_storm_printer.py +0 -0
  582. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_tools_storm_tester.py +0 -0
  583. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_tools_storm_validate.py +0 -0
  584. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_tools_utils_doc.py +0 -0
  585. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_tools_utils_easycert.py +0 -0
  586. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_tools_utils_guid.py +0 -0
  587. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_tools_utils_json2mpk.py +0 -0
  588. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_tools_utils_mdstorm.py +0 -0
  589. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_utils_getrefs.py +0 -0
  590. {synapse-3.1.0 → synapse-3.2.0}/synapse/tests/test_utils_stormcov.py +0 -0
  591. {synapse-3.1.0 → synapse-3.2.0}/synapse/tools/__init__.py +0 -0
  592. {synapse-3.1.0 → synapse-3.2.0}/synapse/tools/aha/__init__.py +0 -0
  593. {synapse-3.1.0 → synapse-3.2.0}/synapse/tools/aha/clone.py +0 -0
  594. {synapse-3.1.0 → synapse-3.2.0}/synapse/tools/aha/del.py +0 -0
  595. {synapse-3.1.0 → synapse-3.2.0}/synapse/tools/aha/easycert.py +0 -0
  596. {synapse-3.1.0 → synapse-3.2.0}/synapse/tools/aha/enroll.py +0 -0
  597. {synapse-3.1.0 → synapse-3.2.0}/synapse/tools/aha/list.py +0 -0
  598. {synapse-3.1.0 → synapse-3.2.0}/synapse/tools/aha/mirror.py +0 -0
  599. {synapse-3.1.0 → synapse-3.2.0}/synapse/tools/aha/provision/__init__.py +0 -0
  600. {synapse-3.1.0 → synapse-3.2.0}/synapse/tools/aha/provision/service.py +0 -0
  601. {synapse-3.1.0 → synapse-3.2.0}/synapse/tools/aha/provision/user.py +0 -0
  602. {synapse-3.1.0 → synapse-3.2.0}/synapse/tools/axon/__init__.py +0 -0
  603. {synapse-3.1.0 → synapse-3.2.0}/synapse/tools/axon/copy.py +0 -0
  604. {synapse-3.1.0 → synapse-3.2.0}/synapse/tools/axon/dump.py +0 -0
  605. {synapse-3.1.0 → synapse-3.2.0}/synapse/tools/axon/get.py +0 -0
  606. {synapse-3.1.0 → synapse-3.2.0}/synapse/tools/axon/load.py +0 -0
  607. {synapse-3.1.0 → synapse-3.2.0}/synapse/tools/axon/put.py +0 -0
  608. {synapse-3.1.0 → synapse-3.2.0}/synapse/tools/cortex/__init__.py +0 -0
  609. {synapse-3.1.0 → synapse-3.2.0}/synapse/tools/cortex/csv.py +0 -0
  610. {synapse-3.1.0 → synapse-3.2.0}/synapse/tools/cortex/feed.py +0 -0
  611. {synapse-3.1.0 → synapse-3.2.0}/synapse/tools/cortex/layer/__init__.py +0 -0
  612. {synapse-3.1.0 → synapse-3.2.0}/synapse/tools/cortex/layer/load.py +0 -0
  613. {synapse-3.1.0 → synapse-3.2.0}/synapse/tools/docker/__init__.py +0 -0
  614. {synapse-3.1.0 → synapse-3.2.0}/synapse/tools/docker/validate.py +0 -0
  615. {synapse-3.1.0 → synapse-3.2.0}/synapse/tools/service/__init__.py +0 -0
  616. {synapse-3.1.0 → synapse-3.2.0}/synapse/tools/service/apikey.py +0 -0
  617. {synapse-3.1.0 → synapse-3.2.0}/synapse/tools/service/demote.py +0 -0
  618. {synapse-3.1.0 → synapse-3.2.0}/synapse/tools/service/healthcheck.py +0 -0
  619. {synapse-3.1.0 → synapse-3.2.0}/synapse/tools/service/modrole.py +0 -0
  620. {synapse-3.1.0 → synapse-3.2.0}/synapse/tools/service/moduser.py +0 -0
  621. {synapse-3.1.0 → synapse-3.2.0}/synapse/tools/service/promote.py +0 -0
  622. {synapse-3.1.0 → synapse-3.2.0}/synapse/tools/service/reload.py +0 -0
  623. {synapse-3.1.0 → synapse-3.2.0}/synapse/tools/service/shutdown.py +0 -0
  624. {synapse-3.1.0 → synapse-3.2.0}/synapse/tools/service/snapshot.py +0 -0
  625. {synapse-3.1.0 → synapse-3.2.0}/synapse/tools/storm/__init__.py +0 -0
  626. {synapse-3.1.0 → synapse-3.2.0}/synapse/tools/storm/__main__.py +0 -0
  627. {synapse-3.1.0 → synapse-3.2.0}/synapse/tools/storm/_cli.py +0 -0
  628. {synapse-3.1.0 → synapse-3.2.0}/synapse/tools/storm/_http.py +0 -0
  629. {synapse-3.1.0 → synapse-3.2.0}/synapse/tools/storm/_printer.py +0 -0
  630. {synapse-3.1.0 → synapse-3.2.0}/synapse/tools/storm/pkg/__init__.py +0 -0
  631. {synapse-3.1.0 → synapse-3.2.0}/synapse/tools/storm/pkg/doc.py +0 -0
  632. {synapse-3.1.0 → synapse-3.2.0}/synapse/tools/storm/pkg/publish.py +0 -0
  633. {synapse-3.1.0 → synapse-3.2.0}/synapse/tools/storm/tester.py +0 -0
  634. {synapse-3.1.0 → synapse-3.2.0}/synapse/tools/storm/validate.py +0 -0
  635. {synapse-3.1.0 → synapse-3.2.0}/synapse/tools/utils/__init__.py +0 -0
  636. {synapse-3.1.0 → synapse-3.2.0}/synapse/tools/utils/doc.py +0 -0
  637. {synapse-3.1.0 → synapse-3.2.0}/synapse/tools/utils/easycert.py +0 -0
  638. {synapse-3.1.0 → synapse-3.2.0}/synapse/tools/utils/guid.py +0 -0
  639. {synapse-3.1.0 → synapse-3.2.0}/synapse/tools/utils/json2mpk.py +0 -0
  640. {synapse-3.1.0 → synapse-3.2.0}/synapse/tools/utils/mdstorm.py +0 -0
  641. {synapse-3.1.0 → synapse-3.2.0}/synapse/utils/__init__.py +0 -0
  642. {synapse-3.1.0 → synapse-3.2.0}/synapse/utils/getrefs.py +0 -0
  643. {synapse-3.1.0 → synapse-3.2.0}/synapse/utils/stormcov.py +0 -0
  644. {synapse-3.1.0 → synapse-3.2.0}/synapse/vendor/__init__.py +0 -0
  645. {synapse-3.1.0 → synapse-3.2.0}/synapse/vendor/cashaddress/LICENSE +0 -0
  646. {synapse-3.1.0 → synapse-3.2.0}/synapse/vendor/cashaddress/__init__.py +0 -0
  647. {synapse-3.1.0 → synapse-3.2.0}/synapse/vendor/cashaddress/base58.py +0 -0
  648. {synapse-3.1.0 → synapse-3.2.0}/synapse/vendor/cashaddress/convert.py +0 -0
  649. {synapse-3.1.0 → synapse-3.2.0}/synapse/vendor/cashaddress/crypto.py +0 -0
  650. {synapse-3.1.0 → synapse-3.2.0}/synapse/vendor/cashaddress/tests/__init__.py +0 -0
  651. {synapse-3.1.0 → synapse-3.2.0}/synapse/vendor/cashaddress/tests/test_cashaddress.py +0 -0
  652. {synapse-3.1.0 → synapse-3.2.0}/synapse/vendor/cpython/LICENSE +0 -0
  653. {synapse-3.1.0 → synapse-3.2.0}/synapse/vendor/cpython/__init__.py +0 -0
  654. {synapse-3.1.0 → synapse-3.2.0}/synapse/vendor/cpython/lib/__init__.py +0 -0
  655. {synapse-3.1.0 → synapse-3.2.0}/synapse/vendor/cpython/lib/email/__init__.py +0 -0
  656. {synapse-3.1.0 → synapse-3.2.0}/synapse/vendor/cpython/lib/email/_parseaddr.py +0 -0
  657. {synapse-3.1.0 → synapse-3.2.0}/synapse/vendor/cpython/lib/email/utils.py +0 -0
  658. {synapse-3.1.0 → synapse-3.2.0}/synapse/vendor/cpython/lib/ipaddress.py +0 -0
  659. {synapse-3.1.0 → synapse-3.2.0}/synapse/vendor/cpython/lib/json.py +0 -0
  660. {synapse-3.1.0 → synapse-3.2.0}/synapse/vendor/cpython/lib/test/__init__.py +0 -0
  661. {synapse-3.1.0 → synapse-3.2.0}/synapse/vendor/cpython/lib/test/support/__init__.py +0 -0
  662. {synapse-3.1.0 → synapse-3.2.0}/synapse/vendor/cpython/lib/test/test_email/__init__.py +0 -0
  663. {synapse-3.1.0 → synapse-3.2.0}/synapse/vendor/cpython/lib/test/test_email/test_email.py +0 -0
  664. {synapse-3.1.0 → synapse-3.2.0}/synapse/vendor/cpython/lib/test/test_email/test_parseaddr.py +0 -0
  665. {synapse-3.1.0 → synapse-3.2.0}/synapse/vendor/cpython/lib/test/test_email/test_utils.py +0 -0
  666. {synapse-3.1.0 → synapse-3.2.0}/synapse/vendor/cpython/lib/test/test_ipaddress.py +0 -0
  667. {synapse-3.1.0 → synapse-3.2.0}/synapse/vendor/cpython/lib/test/test_json.py +0 -0
  668. {synapse-3.1.0 → synapse-3.2.0}/synapse/vendor/substrateinterface/LICENSE +0 -0
  669. {synapse-3.1.0 → synapse-3.2.0}/synapse/vendor/substrateinterface/__init__.py +0 -0
  670. {synapse-3.1.0 → synapse-3.2.0}/synapse/vendor/substrateinterface/tests/__init__.py +0 -0
  671. {synapse-3.1.0 → synapse-3.2.0}/synapse/vendor/substrateinterface/tests/test_ss58.py +0 -0
  672. {synapse-3.1.0 → synapse-3.2.0}/synapse/vendor/substrateinterface/utils/__init__.py +0 -0
  673. {synapse-3.1.0 → synapse-3.2.0}/synapse/vendor/substrateinterface/utils/ss58.py +0 -0
  674. {synapse-3.1.0 → synapse-3.2.0}/synapse/vendor/utils.py +0 -0
  675. {synapse-3.1.0 → synapse-3.2.0}/synapse/vendor/xrpl/LICENSE +0 -0
  676. {synapse-3.1.0 → synapse-3.2.0}/synapse/vendor/xrpl/__init__.py +0 -0
  677. {synapse-3.1.0 → synapse-3.2.0}/synapse/vendor/xrpl/constants.py +0 -0
  678. {synapse-3.1.0 → synapse-3.2.0}/synapse/vendor/xrpl/core/__init__.py +0 -0
  679. {synapse-3.1.0 → synapse-3.2.0}/synapse/vendor/xrpl/core/addresscodec/__init__.py +0 -0
  680. {synapse-3.1.0 → synapse-3.2.0}/synapse/vendor/xrpl/core/addresscodec/codec.py +0 -0
  681. {synapse-3.1.0 → synapse-3.2.0}/synapse/vendor/xrpl/core/addresscodec/exceptions.py +0 -0
  682. {synapse-3.1.0 → synapse-3.2.0}/synapse/vendor/xrpl/core/addresscodec/main.py +0 -0
  683. {synapse-3.1.0 → synapse-3.2.0}/synapse/vendor/xrpl/core/addresscodec/utils.py +0 -0
  684. {synapse-3.1.0 → synapse-3.2.0}/synapse/vendor/xrpl/tests/__init__.py +0 -0
  685. {synapse-3.1.0 → synapse-3.2.0}/synapse/vendor/xrpl/tests/test_codec.py +0 -0
  686. {synapse-3.1.0 → synapse-3.2.0}/synapse/vendor/xrpl/tests/test_main.py +0 -0
  687. {synapse-3.1.0 → synapse-3.2.0}/synapse/vendor/xrpl/tests/test_main_test_cases.py +0 -0
  688. {synapse-3.1.0 → synapse-3.2.0}/synapse.egg-info/dependency_links.txt +0 -0
  689. {synapse-3.1.0 → synapse-3.2.0}/synapse.egg-info/requires.txt +0 -0
  690. {synapse-3.1.0 → synapse-3.2.0}/synapse.egg-info/top_level.txt +0 -0
@@ -1,13 +1,13 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: synapse
3
- Version: 3.1.0
3
+ Version: 3.2.0
4
4
  Summary: Synapse Intelligence Analysis Framework
5
5
  Author-email: The Vertex Project LLC <root@vertex.link>
6
6
  License-Expression: Apache-2.0
7
7
  Project-URL: Homepage, https://vertex.link
8
- Project-URL: Documentation, https://docs.vertex.link
8
+ Project-URL: Documentation, https://hub.vertex.link/docs
9
9
  Project-URL: Repository, https://github.com/vertexproject/synapse
10
- Project-URL: Changelog, https://docs.vertex.link/docs/synapse/latest/changelog.html
10
+ Project-URL: Changelog, https://hub.vertex.link/docs/synapse/latest/changelog.md
11
11
  Classifier: Development Status :: 5 - Production/Stable
12
12
  Classifier: Topic :: Database :: Database Engines/Servers
13
13
  Classifier: Topic :: System :: Clustering
@@ -68,7 +68,7 @@ Dynamic: license-file
68
68
 
69
69
  Synapse is a versatile central intelligence system created to support analyst teams in every stage of the intelligence life cycle.
70
70
 
71
- [![codecov](https://codecov.io/gh/vertexproject/synapse/branch/master/graph/badge.svg?branch=master)](https://v.vtx.lk/synapse-codecov) [![circleci](https://circleci.com/gh/vertexproject/synapse/tree/master.svg?style=svg)](https://v.vtx.lk/synapse-circleci) [![rtd](https://readthedocs.com/projects/vertex-synapse/badge/?version=latest)](https://v.vtx.lk/synapse-docs)
71
+ [![codecov](https://codecov.io/gh/vertexproject/synapse/branch/master/graph/badge.svg?branch=master)](https://v.vtx.lk/synapse-codecov) [![circleci](https://circleci.com/gh/vertexproject/synapse/tree/master.svg?style=svg)](https://v.vtx.lk/synapse-circleci)
72
72
 
73
73
  ## Learn More About Synapse
74
74
 
@@ -77,10 +77,10 @@ Synapse is a versatile central intelligence system created to support analyst te
77
77
 
78
78
  ## Installation & Documentation
79
79
 
80
- - Synapse is available as a Python Package on [pypi](https://v.vtx.lk/synapse-pypi) and as a Docker image on [dockerhub](https://v.vtx.lk/synapse-dockerhub).
81
- - The Getting Started [guide](https://docs.vertex.link/docs/synapse/latest/quickstart.html) will help get you up and running!
82
- - You can also use [synapse_quickstart](https://github.com/vertexproject/synapse-quickstart) to get up and running quickly on Windows, Mac, or Linux and start using Synapse!
83
- - User Guides and API Documentation can be found [here](https://v.vtx.lk/synapse-docs).
80
+ - Synapse is available as a Python Package on [pypi](https://v.vtx.lk/synapse-pypi) and as a Docker image on [dockerhub](https://v.vtx.lk/synapse-dockerhub) and
81
+ [Vertex Hub](https://hub.vertex.link/hub).
82
+ - The Getting Started [guide](https://hub.vertex.link/docs/synapse/latest/getting_started.md#syn-quick) will help get you up and running!
83
+ - User Guides and API Documentation can be found on the [Vertex Hub](https://hub.vertex.link/docs).
84
84
 
85
85
  ## Connect With Us
86
86
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  Synapse is a versatile central intelligence system created to support analyst teams in every stage of the intelligence life cycle.
4
4
 
5
- [![codecov](https://codecov.io/gh/vertexproject/synapse/branch/master/graph/badge.svg?branch=master)](https://v.vtx.lk/synapse-codecov) [![circleci](https://circleci.com/gh/vertexproject/synapse/tree/master.svg?style=svg)](https://v.vtx.lk/synapse-circleci) [![rtd](https://readthedocs.com/projects/vertex-synapse/badge/?version=latest)](https://v.vtx.lk/synapse-docs)
5
+ [![codecov](https://codecov.io/gh/vertexproject/synapse/branch/master/graph/badge.svg?branch=master)](https://v.vtx.lk/synapse-codecov) [![circleci](https://circleci.com/gh/vertexproject/synapse/tree/master.svg?style=svg)](https://v.vtx.lk/synapse-circleci)
6
6
 
7
7
  ## Learn More About Synapse
8
8
 
@@ -11,10 +11,10 @@ Synapse is a versatile central intelligence system created to support analyst te
11
11
 
12
12
  ## Installation & Documentation
13
13
 
14
- - Synapse is available as a Python Package on [pypi](https://v.vtx.lk/synapse-pypi) and as a Docker image on [dockerhub](https://v.vtx.lk/synapse-dockerhub).
15
- - The Getting Started [guide](https://docs.vertex.link/docs/synapse/latest/quickstart.html) will help get you up and running!
16
- - You can also use [synapse_quickstart](https://github.com/vertexproject/synapse-quickstart) to get up and running quickly on Windows, Mac, or Linux and start using Synapse!
17
- - User Guides and API Documentation can be found [here](https://v.vtx.lk/synapse-docs).
14
+ - Synapse is available as a Python Package on [pypi](https://v.vtx.lk/synapse-pypi) and as a Docker image on [dockerhub](https://v.vtx.lk/synapse-dockerhub) and
15
+ [Vertex Hub](https://hub.vertex.link/hub).
16
+ - The Getting Started [guide](https://hub.vertex.link/docs/synapse/latest/getting_started.md#syn-quick) will help get you up and running!
17
+ - User Guides and API Documentation can be found on the [Vertex Hub](https://hub.vertex.link/docs).
18
18
 
19
19
  ## Connect With Us
20
20
 
@@ -4,7 +4,7 @@ build-backend = 'setuptools.build_meta'
4
4
 
5
5
  [project]
6
6
  name = 'synapse'
7
- version = '3.1.0'
7
+ version = '3.2.0'
8
8
  authors = [
9
9
  { name = 'The Vertex Project LLC', email = 'root@vertex.link'},
10
10
  ]
@@ -76,9 +76,9 @@ build = [
76
76
 
77
77
  [project.urls]
78
78
  Homepage = 'https://vertex.link'
79
- Documentation = 'https://docs.vertex.link'
79
+ Documentation = 'https://hub.vertex.link/docs'
80
80
  Repository = 'https://github.com/vertexproject/synapse'
81
- Changelog = 'https://docs.vertex.link/docs/synapse/latest/changelog.html'
81
+ Changelog = 'https://hub.vertex.link/docs/synapse/latest/changelog.md'
82
82
 
83
83
  [tool.setuptools]
84
84
  include-package-data = true
@@ -616,7 +616,7 @@ class AxonApi(s_cell.CellApi, s_share.Share): # type: ignore
616
616
  proxy (str|bool): The proxy value.
617
617
 
618
618
  Notes:
619
- The response body will be stored, regardless of the response code. The ``ok`` value in the response does not
619
+ The response body will be stored, regardless of the response code. The `ok` value in the response does not
620
620
  reflect that a status code, such as a 404, was encountered when retrieving the URL.
621
621
 
622
622
  The ssl dictionary may contain the following values::
@@ -1664,7 +1664,8 @@ class Axon(s_cell.Cell):
1664
1664
 
1665
1665
  atimeout = aiohttp.ClientTimeout(total=timeout)
1666
1666
 
1667
- async with aiohttp.ClientSession(connector=connector, timeout=atimeout) as sess:
1667
+ sesshdrs = {'User-Agent': self.getUserAgent()}
1668
+ async with aiohttp.ClientSession(connector=connector, timeout=atimeout, headers=sesshdrs) as sess:
1668
1669
  try:
1669
1670
  data = aiohttp.FormData()
1670
1671
  data._is_multipart = True
@@ -1737,7 +1738,8 @@ class Axon(s_cell.Cell):
1737
1738
 
1738
1739
  atimeout = aiohttp.ClientTimeout(total=timeout)
1739
1740
 
1740
- async with aiohttp.ClientSession(connector=connector, timeout=atimeout) as sess:
1741
+ sesshdrs = {'User-Agent': self.getUserAgent()}
1742
+ async with aiohttp.ClientSession(connector=connector, timeout=atimeout, headers=sesshdrs) as sess:
1741
1743
  try:
1742
1744
  await self._reqHas(sha256)
1743
1745
  async with sess.request(method, url, headers=headers, params=params, ssl=ssl,
@@ -1811,7 +1813,7 @@ class Axon(s_cell.Cell):
1811
1813
  proxy (str|bool): The proxy value.
1812
1814
 
1813
1815
  Notes:
1814
- The response body will be stored, regardless of the response code. The ``ok`` value in the response does not
1816
+ The response body will be stored, regardless of the response code. The `ok` value in the response does not
1815
1817
  reflect that a status code, such as a 404, was encountered when retrieving the URL.
1816
1818
 
1817
1819
  The ssl dictionary may contain the following values::
@@ -1866,7 +1868,8 @@ class Axon(s_cell.Cell):
1866
1868
 
1867
1869
  atimeout = aiohttp.ClientTimeout(total=timeout)
1868
1870
 
1869
- async with aiohttp.ClientSession(connector=connector, timeout=atimeout) as sess:
1871
+ sesshdrs = {'User-Agent': self.getUserAgent()}
1872
+ async with aiohttp.ClientSession(connector=connector, timeout=atimeout, headers=sesshdrs) as sess:
1870
1873
 
1871
1874
  try:
1872
1875
  async with sess.request(method, url, headers=headers, params=params, json=json, data=body, ssl=ssl,
@@ -277,7 +277,7 @@ def genpath(*paths):
277
277
  '''
278
278
  Return an absolute path of the joining of the arguments as path elements
279
279
 
280
- Performs home directory(``~``) and environment variable expansion on the joined path
280
+ Performs home directory(`~`) and environment variable expansion on the joined path
281
281
 
282
282
  Args:
283
283
  *paths ([str,...]): A list of path elements
@@ -371,12 +371,12 @@ def genfile(*paths):
371
371
  *paths: A list of paths to join together to make the file.
372
372
 
373
373
  Notes:
374
- If the file already exists, the fd returned is opened in ``r+b`` mode.
375
- Otherwise, the fd is opened in ``w+b`` mode.
374
+ If the file already exists, the fd returned is opened in `r+b` mode.
375
+ Otherwise, the fd is opened in `w+b` mode.
376
376
 
377
377
  The file position is set to the start of the file. The user is
378
- responsible for truncating (``fd.truncate()``) if the existing file
379
- contents are not desired, or seeking to the end (``fd.seek(0, 2)``)
378
+ responsible for truncating (`fd.truncate()`) if the existing file
379
+ contents are not desired, or seeking to the end (`fd.seek(0, 2)`)
380
380
  to append.
381
381
 
382
382
  Returns:
@@ -461,7 +461,7 @@ def getDirSize(*paths):
461
461
 
462
462
  Returns:
463
463
  tuple: Tuple of total real and total apparent size of all normal files and directories underneath
464
- ``*paths`` plus ``*paths`` itself.
464
+ `*paths` plus `*paths` itself.
465
465
  '''
466
466
  def getsize(path):
467
467
  try:
@@ -659,8 +659,8 @@ def spin(genr):
659
659
  genr: Any generator or iterable valu.
660
660
 
661
661
  Notes:
662
- This generator is exhausted via the ``collections.dequeue()``
663
- constructor with a ``maxlen=0``, which will quickly exhaust an
662
+ This generator is exhausted via the `collections.dequeue()`
663
+ constructor with a `maxlen=0`, which will quickly exhaust an
664
664
  iterator staying in C code as much as possible.
665
665
 
666
666
  Returns:
@@ -46,6 +46,7 @@ import synapse.lib.version as s_version
46
46
  import synapse.lib.hashitem as s_hashitem
47
47
  import synapse.lib.jsonstor as s_jsonstor
48
48
  import synapse.lib.modelrev as s_modelrev
49
+ import synapse.lib.nodefuse as s_nodefuse
49
50
  import synapse.lib.stormsvc as s_stormsvc
50
51
  import synapse.lib.lmdbslab as s_lmdbslab
51
52
 
@@ -1116,6 +1117,8 @@ class Cortex(s_oauth.OAuthMixin, s_axon.HasAxon, s_jsonstor.HasJsonStor, s_cell.
1116
1117
  'desc': 'Controls the ability to check if the Axon contains a file.'},
1117
1118
  {'perm': ('axon', 'del'), 'gate': 'cortex',
1118
1119
  'desc': 'Controls the ability to remove a file from the Axon.'},
1120
+ {'perm': ('axon', 'wput'), 'gate': 'cortex',
1121
+ 'desc': 'Controls the ability to push a file from the Axon to a URL.'},
1119
1122
 
1120
1123
  {'perm': ('layer',), 'gate': 'cortex',
1121
1124
  'desc': 'Controls all layer permissions.'},
@@ -2062,6 +2065,7 @@ class Cortex(s_oauth.OAuthMixin, s_axon.HasAxon, s_jsonstor.HasJsonStor, s_cell.
2062
2065
  ctor.pkgname = pkgdef.get('name')
2063
2066
 
2064
2067
  ctor.deprecated = cdef.get('deprecated')
2068
+ ctor._cortex_edition = cdef.get('_edition')
2065
2069
 
2066
2070
  def getRuntPode(model):
2067
2071
  props = {
@@ -2071,6 +2075,9 @@ class Cortex(s_oauth.OAuthMixin, s_axon.HasAxon, s_jsonstor.HasJsonStor, s_cell.
2071
2075
  if ctor.pkgname:
2072
2076
  props['package'] = ctor.pkgname
2073
2077
 
2078
+ if ctor._cortex_edition is not None:
2079
+ props['edition'] = ctor._cortex_edition
2080
+
2074
2081
  if ctor.deprecated:
2075
2082
  props['deprecated'] = True
2076
2083
 
@@ -2573,6 +2580,9 @@ class Cortex(s_oauth.OAuthMixin, s_axon.HasAxon, s_jsonstor.HasJsonStor, s_cell.
2573
2580
  self._initEasyPerm(gdef)
2574
2581
  self.pkggraphs[gdef['iden']] = gdef
2575
2582
 
2583
+ extra = self.getLogExtra(pkg=name, vers=pkgvers)
2584
+ logger.info(f'Loaded Storm package: {name}@{pkgvers}.', extra=extra)
2585
+
2576
2586
  def _runStormPkgOnload(self, pkgdef):
2577
2587
  name = pkgdef.get('name')
2578
2588
  inits = pkgdef.get('inits')
@@ -2689,6 +2699,7 @@ class Cortex(s_oauth.OAuthMixin, s_axon.HasAxon, s_jsonstor.HasJsonStor, s_cell.
2689
2699
  self._popStormCmd(name)
2690
2700
 
2691
2701
  pkgname = pkgdef.get('name')
2702
+ pkgvers = pkgdef.get('version')
2692
2703
 
2693
2704
  # match on the provenance we derived at load time rather than re-deriving
2694
2705
  # the idens, so this stays correct regardless of the package def contents.
@@ -2697,6 +2708,9 @@ class Cortex(s_oauth.OAuthMixin, s_axon.HasAxon, s_jsonstor.HasJsonStor, s_cell.
2697
2708
 
2698
2709
  self.stormpkgs.pop(pkgname, None)
2699
2710
 
2711
+ extra = self.getLogExtra(pkg=pkgname, vers=pkgvers)
2712
+ logger.info(f'Unloaded Storm package: {pkgname}@{pkgvers}.', extra=extra)
2713
+
2700
2714
  def getStormSvc(self, name):
2701
2715
  return self.svcs.get(name)
2702
2716
 
@@ -3051,7 +3065,7 @@ class Cortex(s_oauth.OAuthMixin, s_axon.HasAxon, s_jsonstor.HasJsonStor, s_cell.
3051
3065
  '''
3052
3066
  While active, discover storm services registered with AHA and add
3053
3067
  previously unknown ones to the cortex automatically. Uses the initial
3054
- AHA service listing and tracks ``svc:add`` topology updates.
3068
+ AHA service listing and tracks `svc:add` topology updates.
3055
3069
  '''
3056
3070
  async with await s_base.Base.anit() as base:
3057
3071
 
@@ -5898,7 +5912,7 @@ class Cortex(s_oauth.OAuthMixin, s_axon.HasAxon, s_jsonstor.HasJsonStor, s_cell.
5898
5912
 
5899
5913
  async def _reqDecEncryption(self, encryption):
5900
5914
  '''
5901
- Return an encryption dict whose ``seed`` is the plaintext pbkdf2 seed. A
5915
+ Return an encryption dict whose `seed` is the plaintext pbkdf2 seed. A
5902
5916
  per-deployment package stores its seed RSA-encrypted to our deployment key,
5903
5917
  so decrypt it (cached) with the deployment private key.
5904
5918
  '''
@@ -6112,6 +6126,9 @@ class Cortex(s_oauth.OAuthMixin, s_axon.HasAxon, s_jsonstor.HasJsonStor, s_cell.
6112
6126
  if cmd.pkgname:
6113
6127
  entry['package'] = cmd.pkgname
6114
6128
 
6129
+ if (edition := cmd._cortex_edition) is not None:
6130
+ entry['edition'] = edition
6131
+
6115
6132
  cmds.append(entry)
6116
6133
 
6117
6134
  ret = {
@@ -6469,6 +6486,64 @@ class Cortex(s_oauth.OAuthMixin, s_axon.HasAxon, s_jsonstor.HasJsonStor, s_cell.
6469
6486
  yield
6470
6487
  self.migration = False
6471
6488
 
6489
+ async def fuseNodes(self, srcndef, dstndef, useriden):
6490
+ '''
6491
+ Fuse the src node into the dst node across every layer in the Cortex.
6492
+
6493
+ Node fusion writes to arbitrary layers rather than a single view's write layer, and
6494
+ the edits it makes depend on the state it reads. The edits are computed here, before
6495
+ any of them are applied, and are then handed to each layer with
6496
+ Layer.saveNodeEdits(). That layer resolves them against its own current state and
6497
+ puts the resolved edits in the nexus log, so a mirror applies exactly the edits which
6498
+ were computed here rather than recomputing them from its own state.
6499
+
6500
+ A fuse of a heavily referenced node can need a very large number of edits, so each
6501
+ layer's edits are applied in chunks of one nexus operation each rather than all at
6502
+ once. A fuse is therefore not transactional, and an interruption can leave part of it
6503
+ applied. See NodeFuser._iterNodeEdits() for the ordering which makes that recoverable.
6504
+
6505
+ The reads are not serialized against other writes, so a write to src which lands after
6506
+ the edits are computed is not accounted for and is not detected. Running a fuse during
6507
+ a maintenance window, as recommended in the Storm API docs, avoids this. Executing the
6508
+ fuse as requested is this method's responsibility; a concurrent edit landing on src is
6509
+ outside that scope.
6510
+
6511
+ Args:
6512
+ srcndef (tuple): The (form, valu) of the node to fuse from. It will be deleted.
6513
+ dstndef (tuple): The (form, valu) of the node to fuse into. It will be kept.
6514
+ useriden (str): The iden of the user running the fuse.
6515
+
6516
+ Returns:
6517
+ dict: The warnings to emit and the layers which failed.
6518
+ '''
6519
+ # tick is sampled once and carried in the nodeedit meta, so that the leader and every
6520
+ # mirror record the same time in the layer node edit logs.
6521
+ meta = {'time': s_common.now(), 'user': useriden}
6522
+
6523
+ # A fuse is a global admin operation which rewrites data across every layer in the
6524
+ # Cortex and is not transactional, so both ends are logged: an interruption leaves a
6525
+ # start line with no completion line, which is what says a re-run may be needed.
6526
+ logger.info(f'fuseNodes() starting fuse of {srcndef[0]}={srcndef[1]!r} into '
6527
+ f'{dstndef[0]}={dstndef[1]!r}')
6528
+
6529
+ # the fuser owns the spooled state the edits are accumulated in, so it stays open
6530
+ # until they have all been applied
6531
+ async with await s_nodefuse.NodeFuser.anit(self, useriden) as fuser:
6532
+
6533
+ await fuser.getLayerEdits(srcndef, dstndef)
6534
+
6535
+ await fuser.applyLayerEdits(meta)
6536
+
6537
+ # returned even with nothing to apply, since discovery may have produced
6538
+ # warnings of its own which the caller still needs to emit
6539
+ result = fuser.getResult()
6540
+
6541
+ logger.info(f'fuseNodes() completed fuse of {srcndef[0]}={srcndef[1]!r} into '
6542
+ f'{dstndef[0]}={dstndef[1]!r} '
6543
+ f'(renames: {len(fuser.ndefmap)}, failed layers: {len(result["failed"])})')
6544
+
6545
+ return result
6546
+
6472
6547
  async def iterFormRows(self, layriden, form, stortype=None, startvalu=None):
6473
6548
  '''
6474
6549
  Yields nid, valu tuples of nodes of a single form, optionally (re)starting at startvalu.
@@ -48,10 +48,10 @@ class Sess(s_base.Base):
48
48
 
49
49
  async def t2call(link, meth, args, kwargs, first=True):
50
50
  '''
51
- Call the given ``meth(*args, **kwargs)`` and handle the response to provide
51
+ Call the given `meth(*args, **kwargs)` and handle the response to provide
52
52
  telepath task v2 events to the given link.
53
53
 
54
- The ``first`` argument may be set to ``False`` to skip sending an initial ``t2:genr``
54
+ The `first` argument may be set to `False` to skip sending an initial `t2:genr`
55
55
  message when using a using a link which has already been initialized (such as when sending
56
56
  a link to a spawned process).
57
57
  '''
@@ -47,7 +47,8 @@ _editblock: "[" _editoper* "]"
47
47
  // A single edit operation
48
48
  _editoper: editnodeadd
49
49
  | editpropset | edittagpropset | edittagadd | editcondpropset
50
- | editvirtpropset | edittagvirtset | edittagpropvirtset
50
+ | editvirtpropset | editvirtcondpropset | edittagvirtset | edittagvirtcondset
51
+ | edittagpropvirtset
51
52
  | editpropsetmulti | editpropdel | edittagpropdel | edittagdel
52
53
  | editparens | edgeaddn1 | edgedeln1 | edgeaddn2 | edgedeln2
53
54
 
@@ -59,10 +60,14 @@ edittagadd: "+" tagname [(EQSPACE | EQNOSPACE | TRYSET) _valu]
59
60
  edittagvirtset: "+" tagnamevirt virtprop (EQSPACE | EQNOSPACE | TRYSET) _valu
60
61
  | "+" "?" tagnamevirt virtprop (EQSPACE | EQNOSPACE | TRYSET) _valu -> edittagvirttryset
61
62
 
63
+ edittagvirtcondset: "+" tagnamevirt virtprop condsetoper _valu
64
+ | "+" "?" tagnamevirt virtprop condsetoper _valu -> edittagvirtcondtryset
65
+
62
66
  edittagdel: EXPRMINUS tagname
63
67
  editpropset: relprop (EQSPACE | EQNOSPACE | MODSET | TRYSET | TRYMODSET) _valu
64
68
  editcondpropset: relprop condsetoper _valu
65
69
  editvirtpropset: relprop virtprop (EQSPACE | EQNOSPACE | MODSET | TRYSET | TRYMODSET) _valu
70
+ editvirtcondpropset: relprop virtprop condsetoper _valu
66
71
  editpropsetmulti: relprop (MODSETMULTI | TRYMODSETMULTI) _valu
67
72
  editpropdel: EXPRMINUS relprop
68
73
  editnodeadd: formname (EQSPACE | EQNOSPACE | MODSET | TRYSET | TRYMODSET) _valu
@@ -77,9 +82,11 @@ MODSETMULTI.5: "++=" | "--="
77
82
  TRYMODSETMULTI.1: "?++=" | "?--="
78
83
  TRYSET.1: "?="
79
84
 
80
- condsetoper: ("*" UNSET | _DEREF "$" _condvarvaluatom) "="
81
- | ("*" UNSET | _DEREF "$" _condvarvaluatom) "?=" -> condtrysetoper
85
+ condsetoper: ("*" (UNSET | CONDMIN | CONDMAX) | _DEREF "$" _condvarvaluatom) "="
86
+ | ("*" (UNSET | CONDMIN | CONDMAX) | _DEREF "$" _condvarvaluatom) "?=" -> condtrysetoper
82
87
  UNSET: "unset"
88
+ CONDMIN: "min"
89
+ CONDMAX: "max"
83
90
  _condvarvaluatom: condvarvalue | condvarderef | condfunccall
84
91
  condvarvalue: VARTOKN -> varvalue
85
92
 
@@ -171,6 +171,10 @@ Comparison operators: `=`, `!=`, `<`, `>`, `<=`, `>=`, `~=` (regex), `^=` (prefi
171
171
  [ -:asn ] // delete property
172
172
  [ :prop ?= value ] // try-set (ignore type errors)
173
173
  [ :prop*unset= value ] // set only if unset (conditional)
174
+ [ :prop*min= value ] // keep the lesser of the current and given value
175
+ [ :prop*max= value ] // keep the greater (widens rather than overwrites)
176
+ [ :seen.min*min?= $first ] // conditional set on a virt, with the try oper
177
+ [ +?#(tag.name).max*max= $updated ] // and on a tag timestamp (tag name parenthesized)
174
178
  [ :prop={ foo:bar } ] // assign from a subquery (yields a node; its value is assigned)
175
179
  [ :prop={[ foo:bar=baz ]} ] // the subquery may create the node to assign
176
180
 
@@ -197,6 +201,45 @@ Comparison operators: `=`, `!=`, `<`, `>`, `<=`, `>=`, `~=` (regex), `^=` (prefi
197
201
  )]
198
202
  ```
199
203
 
204
+ **Setting an array property** distinguishes "absent" from "present but empty", so pick the
205
+ form deliberately:
206
+
207
+ ```storm
208
+ [ :cookies = $vals ] // a list; an EMPTY list stores an empty array (), NOT unset
209
+ [ :cookies={ ... } ] // a subquery yielding nothing also stores ()
210
+ [ :cookies ?= (null) ] // ?= with (null) skips the set, leaving the prop unset
211
+ [ :cookies = (null) ] // plain = with (null) raises BadTypeValu
212
+ [ :cookies = "a=1; b=2" ] // WRONG: a delimited string is not split; the set fails
213
+ ```
214
+
215
+ Set the **empty array** when the source data carried the field but none of its values were
216
+ usable -- it is a positive statement that nothing valid was there -- and leave the property
217
+ **unset** when the field was absent entirely.
218
+
219
+ An array property's `size` virt keeps both cases cheap to lift, so an always-set property
220
+ does not cost you the "which nodes actually have values?" query (`=`, `<`, `>`, `<=`, `>=`
221
+ and `range=` are all supported):
222
+
223
+ ```storm
224
+ inet:http:response:cookies // set at all, empty array included
225
+ inet:http:response:cookies.size>0 // has at least one value
226
+ inet:http:response:cookies.size=0 // present, but nothing valid was there
227
+ inet:http:response +:cookies.size>0 // same, as a filter
228
+ ```
229
+
230
+ A type that splits one delimited string into several values (e.g. `inet:http:cookie` on
231
+ `;`) only does so while **constructing nodes**, never while norming an array property
232
+ value. So build the values in a subquery, or pass a list:
233
+
234
+ ```storm
235
+ [ :cookies={[ inet:http:cookie="a=1; b=2" ]} ] // two cookie nodes, both assigned
236
+ [ :cookies = ("a=1", "b=2") ] // equivalent, as a list
237
+ ```
238
+
239
+ An element the type rejects is skipped when the values come from node construction, but one
240
+ bad element fails the whole set when they come from a list -- `?=` guards the property, not
241
+ the individual items.
242
+
200
243
  ### Variables & Expressions
201
244
 
202
245
  ```storm
@@ -416,6 +459,13 @@ else { ... }
416
459
  for $item in $list { ... }
417
460
  for ($key, $val) in $dict { ... }
418
461
 
462
+ // CAREFUL: with a node inbound, a loop yields that node on EVERY iteration, so the
463
+ // statements after the loop start running before the loop has finished. Usually the fix
464
+ // is to run the loop in a subquery, whose output is discarded:
465
+ { for $item in $list { ... } }
466
+ // Alternatively build the variable up on an empty pipeline (before any `yield`), or
467
+ // defer whatever follows with `fini { }`.
468
+
419
469
  // While loop
420
470
  while $condition { ... }
421
471
 
@@ -126,6 +126,10 @@ class Prop:
126
126
  self.locked = False
127
127
  self.deprecated = self.info.get('deprecated', False)
128
128
 
129
+ # typedef has already been poly converted by Model.processPropdefs(), so self.type is
130
+ # a Poly for a non-array prop and an Array whose arraytype is a Poly for an array
131
+ # one. self.type.ispoly is False for an array prop - the poly is on the element type,
132
+ # not on the Array. See processPropdefs().
129
133
  self.type = self.modl.getPropTypeClone(typedef, self.info)
130
134
  self.typehash = self.type.typehash
131
135
 
@@ -1244,6 +1248,20 @@ class Model:
1244
1248
  return polyinfo
1245
1249
 
1246
1250
  def convertTypedef(self, typedef):
1251
+ '''
1252
+ Return the given prop typedef in poly form.
1253
+
1254
+ Everything comes back as a ('poly', {...}) typedef: a tuple of constituents is
1255
+ converted, and anything else is wrapped as a single member poly. A typedef which
1256
+ already names a Poly or an Array type is the one case returned as it stands, since it
1257
+ is in that form already.
1258
+
1259
+ Note that converting a typedef here does not make the resulting Prop.type a Poly. An
1260
+ array prop declares its *element* type here and its container opts under the 'array'
1261
+ prop info key, so getPropTypeClone() wraps what this returns in an Array - leaving
1262
+ Prop.type an Array with ispoly False and the poly on Prop.type.arraytype. See
1263
+ processPropdefs().
1264
+ '''
1247
1265
  typename = typedef[0]
1248
1266
 
1249
1267
  if not isinstance(typename, tuple):
@@ -1268,14 +1286,14 @@ class Model:
1268
1286
  '''
1269
1287
  Enforce where inline type opts may be declared on a prop.
1270
1288
 
1271
- A prop type is declared ``(typename, opts)`` and must reference a named type with empty
1289
+ A prop type is declared `(typename, opts)` and must reference a named type with empty
1272
1290
  opts (or, for a poly prop, a tuple of named constituents). A prop that needs custom
1273
- normalization opts (``regex``, ``enums``, ``names``, ``precision``, ...) must be declared
1291
+ normalization opts (`regex`, `enums`, `names`, `precision`, ...) must be declared
1274
1292
  once as a named type and referenced by name.
1275
1293
 
1276
1294
  An array prop declares its element type in the typedef slot and its container opts
1277
- (``uniq``/``sorted``/``split``) under the ``array`` prop info key. The legacy
1278
- ``('array', {...})`` container typedef is no longer supported.
1295
+ (`uniq`/`sorted`/`split`) under the `array` prop info key. The legacy
1296
+ `('array', {...})` container typedef is no longer supported.
1279
1297
  '''
1280
1298
  prefix = f'{formname}:{propname}' if formname is not None else propname
1281
1299
 
@@ -1324,7 +1342,36 @@ class Model:
1324
1342
  raise s_exc.BadPropDef(mesg=mesg, name=propname)
1325
1343
 
1326
1344
  def processPropdefs(self, propdefs, formname=None):
1345
+ '''
1346
+ Validate and poly convert a sequence of prop definitions.
1347
+
1348
+ Every prop typedef is converted to poly form here via convertTypedef(), whatever it
1349
+ was declared as - so by the time Prop.__init__() calls getPropTypeClone(), the
1350
+ declared typedef is always ('poly', {...}). Two consequences are worth stating
1351
+ outright, because the conversion sits two indirections away from where a reader
1352
+ looking at Prop.__init__() or at a Type subclass would find it:
1353
+
1354
+ * Every property's *value* type is a Poly, but for an array prop that Poly is
1355
+ Prop.type.arraytype rather than Prop.type itself. getPropTypeClone() wraps the
1356
+ converted element type in an Array, and Array.postTypeInit() clones the poly onto
1357
+ arraytype, so Prop.type is a Poly for a non-array prop and an Array for an array
1358
+ one. Prop.type.ispoly is therefore True for exactly the non-array props and False
1359
+ for every array prop - `if not prop.type.ispoly` is a live test which selects the
1360
+ array props (see getTypeForms() and getStepForms()), not a dead branch. Code
1361
+ reaching for a property's member type wants `prop.type.arraytype if
1362
+ prop.type.isarray else prop.type`.
1363
+
1364
+ * A stored property value is always a typed value - a (typename, valu) tuple - and
1365
+ not a bare one, including each element of an array. Re-normalizing a stored value
1366
+ goes through Type.normFromTypedValu() rather than Type.norm().
1327
1367
 
1368
+ Args:
1369
+ propdefs (list): The (name, typedef, propinfo) triples to process.
1370
+ formname (str): The name of the form these props belong to, if any.
1371
+
1372
+ Returns:
1373
+ tuple: The processed (name, typedef, propinfo) triples.
1374
+ '''
1328
1375
  realdefs = []
1329
1376
 
1330
1377
  for pname, typedef, propinfo in propdefs:
@@ -253,7 +253,7 @@ class JsonRpcError(SynErr):
253
253
  '''
254
254
  A JSON-RPC error carrying an application-defined code (and optional data).
255
255
 
256
- This should contain a numeric ``code`` and a ``mesg``. An optional ``data`` value
256
+ This should contain a numeric `code` and a `mesg`. An optional `data` value
257
257
  may be provided to convey additional structured information to the caller.
258
258
  '''
259
259
  @classmethod
@@ -1277,7 +1277,7 @@ class AhaCell(s_cell.Cell):
1277
1277
  return await self._push('aha:svc:add', name, info)
1278
1278
 
1279
1279
  def _reqSvcType(self, info):
1280
- # implementers must override the service type. the base ``cell`` type
1280
+ # implementers must override the service type. the base `cell` type
1281
1281
  # is not a deployable service and may not register with AHA.
1282
1282
  if info.get('type') == 'cell':
1283
1283
  mesg = 'AHA service type cell may not register; implementers must override the service type.'
@@ -1442,14 +1442,14 @@ class AhaCell(s_cell.Cell):
1442
1442
 
1443
1443
  # compare-and-set: only clear online if it still matches linkiden.
1444
1444
  svcentry = self._getSvcEntry(name)
1445
- if svcentry is not None:
1446
1445
 
1447
- if self._getSvcSess(name) == linkiden:
1448
- self.slab.delete(name.encode(), db='svc:sess')
1449
- svcentry['online'] = False
1450
- svcentry['info']['ready'] = False
1451
- await self._setSvcEntry(svcentry)
1452
- await self._fireTopoMod(svcentry)
1446
+ isdown = svcentry is not None and self._getSvcSess(name) == linkiden
1447
+ if isdown:
1448
+ self.slab.delete(name.encode(), db='svc:sess')
1449
+ svcentry['online'] = False
1450
+ svcentry['info']['ready'] = False
1451
+ await self._setSvcEntry(svcentry)
1452
+ await self._fireTopoMod(svcentry)
1453
1453
 
1454
1454
  # Check if we have any links which may need to be removed
1455
1455
  current_sessions = {s_common.guid(iden): sess for iden, sess in self.dmon.sessions.items()}
@@ -1458,6 +1458,9 @@ class AhaCell(s_cell.Cell):
1458
1458
  for link in [lnk for lnk in self.dmon.links if lnk.get('sess') is sess]:
1459
1459
  await link.fini()
1460
1460
 
1461
+ if not isdown:
1462
+ return
1463
+
1461
1464
  await self.fire('aha:svc:down', name=name)
1462
1465
 
1463
1466
  logger.info(f'Set [{name}] offline.', extra=self.getLogExtra(name=name))
@@ -1636,7 +1639,7 @@ class AhaCell(s_cell.Cell):
1636
1639
  # at the lowest service nexus offset, or None. A schism can only occur
1637
1640
  # when the caller *led* its own last acknowledged term ( otherwise it was
1638
1641
  # only ever a follower and never wrote divergent changes ). The history is
1639
- # keyed by AHA's monotonic nexus offset ( stored as the term ``id`` ), so
1642
+ # keyed by AHA's monotonic nexus offset ( stored as the term `id` ), so
1640
1643
  # the caller's own id bounds a scan of only the terms created after it. We
1641
1644
  # consider every such later term rather than only the immediately
1642
1645
  # following one, because a lagging peer force-promoted at a low service
@@ -1678,7 +1681,7 @@ class AhaCell(s_cell.Cell):
1678
1681
  await self.slab.put(svctype.encode(), s_msgpack.en(term), db='aha:lead:term')
1679
1682
 
1680
1683
  # key the history by our own ( monotonic ) AHA nexus transaction offset,
1681
- # also stored as the term ``id``, so scans walk the terms in the order
1684
+ # also stored as the term `id`, so scans walk the terms in the order
1682
1685
  # they were created and a caller can anchor a bounded scan at its own
1683
1686
  # term. the service nexus offset stored in the term ( nexsoffs ) is a
1684
1687
  # different value which is not monotonic across leadership changes.