synapse 2.161.0__tar.gz → 2.163.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.

Potentially problematic release.


This version of synapse might be problematic. Click here for more details.

Files changed (569) hide show
  1. {synapse-2.161.0/synapse.egg-info → synapse-2.163.0}/PKG-INFO +3 -1
  2. {synapse-2.161.0 → synapse-2.163.0}/pyproject.toml +3 -1
  3. {synapse-2.161.0 → synapse-2.163.0}/synapse/axon.py +48 -40
  4. {synapse-2.161.0 → synapse-2.163.0}/synapse/cortex.py +4 -0
  5. {synapse-2.161.0 → synapse-2.163.0}/synapse/daemon.py +7 -2
  6. {synapse-2.161.0 → synapse-2.163.0}/synapse/lib/cell.py +70 -3
  7. {synapse-2.161.0 → synapse-2.163.0}/synapse/lib/layer.py +20 -1
  8. {synapse-2.161.0 → synapse-2.163.0}/synapse/lib/oauth.py +1 -7
  9. {synapse-2.161.0 → synapse-2.163.0}/synapse/lib/rstorm.py +16 -0
  10. {synapse-2.161.0 → synapse-2.163.0}/synapse/lib/schemas.py +10 -0
  11. {synapse-2.161.0 → synapse-2.163.0}/synapse/lib/storm.py +17 -1
  12. {synapse-2.161.0 → synapse-2.163.0}/synapse/lib/stormhttp.py +52 -28
  13. {synapse-2.161.0 → synapse-2.163.0}/synapse/lib/stormlib/stix.py +6 -3
  14. {synapse-2.161.0 → synapse-2.163.0}/synapse/lib/stormtypes.py +336 -26
  15. {synapse-2.161.0 → synapse-2.163.0}/synapse/lib/version.py +2 -2
  16. {synapse-2.161.0 → synapse-2.163.0}/synapse/lib/view.py +15 -2
  17. {synapse-2.161.0 → synapse-2.163.0}/synapse/models/inet.py +9 -0
  18. {synapse-2.161.0 → synapse-2.163.0}/synapse/models/infotech.py +28 -26
  19. {synapse-2.161.0 → synapse-2.163.0}/synapse/models/orgs.py +3 -0
  20. {synapse-2.161.0 → synapse-2.163.0}/synapse/models/proj.py +9 -2
  21. {synapse-2.161.0 → synapse-2.163.0}/synapse/models/risk.py +32 -0
  22. {synapse-2.161.0 → synapse-2.163.0}/synapse/telepath.py +2 -0
  23. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/files/rstorm/testsvc.py +8 -1
  24. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/files/stormpkg/testpkg.yaml +4 -0
  25. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_axon.py +4 -4
  26. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_cortex.py +8 -8
  27. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_daemon.py +19 -0
  28. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_lib_ast.py +17 -17
  29. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_lib_grammar.py +4 -4
  30. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_lib_rstorm.py +38 -2
  31. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_lib_storm.py +15 -15
  32. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_lib_stormhttp.py +182 -19
  33. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_lib_stormlib_auth.py +3 -3
  34. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_lib_stormlib_cell.py +1 -1
  35. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_lib_stormlib_cortex.py +50 -2
  36. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_lib_stormlib_json.py +2 -2
  37. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_lib_stormlib_macro.py +1 -1
  38. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_lib_stormlib_modelext.py +37 -37
  39. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_lib_stormlib_oauth.py +20 -20
  40. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_lib_stormlib_stix.py +3 -1
  41. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_lib_stormtypes.py +159 -52
  42. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_lib_stormwhois.py +1 -1
  43. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_lib_trigger.py +11 -11
  44. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_lib_view.py +23 -1
  45. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_model_crypto.py +1 -1
  46. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_model_inet.py +6 -0
  47. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_model_orgs.py +2 -1
  48. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_model_proj.py +6 -0
  49. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_model_risk.py +10 -0
  50. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_tools_storm.py +1 -1
  51. {synapse-2.161.0 → synapse-2.163.0/synapse.egg-info}/PKG-INFO +3 -1
  52. {synapse-2.161.0 → synapse-2.163.0}/LICENSE +0 -0
  53. {synapse-2.161.0 → synapse-2.163.0}/README.rst +0 -0
  54. {synapse-2.161.0 → synapse-2.163.0}/setup.cfg +0 -0
  55. {synapse-2.161.0 → synapse-2.163.0}/synapse/__init__.py +0 -0
  56. {synapse-2.161.0 → synapse-2.163.0}/synapse/cells.py +0 -0
  57. {synapse-2.161.0 → synapse-2.163.0}/synapse/cmds/__init__.py +0 -0
  58. {synapse-2.161.0 → synapse-2.163.0}/synapse/cmds/boss.py +0 -0
  59. {synapse-2.161.0 → synapse-2.163.0}/synapse/cmds/cortex.py +0 -0
  60. {synapse-2.161.0 → synapse-2.163.0}/synapse/cmds/hive.py +0 -0
  61. {synapse-2.161.0 → synapse-2.163.0}/synapse/common.py +0 -0
  62. {synapse-2.161.0 → synapse-2.163.0}/synapse/cryotank.py +0 -0
  63. {synapse-2.161.0 → synapse-2.163.0}/synapse/data/__init__.py +0 -0
  64. {synapse-2.161.0 → synapse-2.163.0}/synapse/data/attack-flow/LICENSE.txt +0 -0
  65. {synapse-2.161.0 → synapse-2.163.0}/synapse/data/attack-flow/README.md +0 -0
  66. {synapse-2.161.0 → synapse-2.163.0}/synapse/data/attack-flow/attack-flow-schema-2.0.0.json +0 -0
  67. {synapse-2.161.0 → synapse-2.163.0}/synapse/data/certs/cas/The Vertex Project Intermediate CA 00.crt +0 -0
  68. {synapse-2.161.0 → synapse-2.163.0}/synapse/data/certs/cas/The Vertex Project ROOT CA.crt +0 -0
  69. {synapse-2.161.0 → synapse-2.163.0}/synapse/data/certs/crls/The Vertex Project Intermediate CA 00.crl +0 -0
  70. {synapse-2.161.0 → synapse-2.163.0}/synapse/data/certs/crls/The Vertex Project ROOT CA.crl +0 -0
  71. {synapse-2.161.0 → synapse-2.163.0}/synapse/data/iana.tlds.mpk +0 -0
  72. {synapse-2.161.0 → synapse-2.163.0}/synapse/data/jsonschemas/README.md +0 -0
  73. {synapse-2.161.0 → synapse-2.163.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/LICENSE.txt +0 -0
  74. {synapse-2.161.0 → synapse-2.163.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/common/binary.json +0 -0
  75. {synapse-2.161.0 → synapse-2.163.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/common/bundle.json +0 -0
  76. {synapse-2.161.0 → synapse-2.163.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/common/core.json +0 -0
  77. {synapse-2.161.0 → synapse-2.163.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/common/cyber-observable-core.json +0 -0
  78. {synapse-2.161.0 → synapse-2.163.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/common/dictionary.json +0 -0
  79. {synapse-2.161.0 → synapse-2.163.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/common/extension-definition.json +0 -0
  80. {synapse-2.161.0 → synapse-2.163.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/common/extension.json +0 -0
  81. {synapse-2.161.0 → synapse-2.163.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/common/external-reference.json +0 -0
  82. {synapse-2.161.0 → synapse-2.163.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/common/granular-marking.json +0 -0
  83. {synapse-2.161.0 → synapse-2.163.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/common/hashes-type.json +0 -0
  84. {synapse-2.161.0 → synapse-2.163.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/common/hex.json +0 -0
  85. {synapse-2.161.0 → synapse-2.163.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/common/identifier.json +0 -0
  86. {synapse-2.161.0 → synapse-2.163.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/common/kill-chain-phase.json +0 -0
  87. {synapse-2.161.0 → synapse-2.163.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/common/language-content.json +0 -0
  88. {synapse-2.161.0 → synapse-2.163.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/common/marking-definition.json +0 -0
  89. {synapse-2.161.0 → synapse-2.163.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/common/properties.json +0 -0
  90. {synapse-2.161.0 → synapse-2.163.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/common/timestamp.json +0 -0
  91. {synapse-2.161.0 → synapse-2.163.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/common/url-regex.json +0 -0
  92. {synapse-2.161.0 → synapse-2.163.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/observables/artifact.json +0 -0
  93. {synapse-2.161.0 → synapse-2.163.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/observables/autonomous-system.json +0 -0
  94. {synapse-2.161.0 → synapse-2.163.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/observables/directory.json +0 -0
  95. {synapse-2.161.0 → synapse-2.163.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/observables/domain-name.json +0 -0
  96. {synapse-2.161.0 → synapse-2.163.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/observables/email-addr.json +0 -0
  97. {synapse-2.161.0 → synapse-2.163.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/observables/email-message.json +0 -0
  98. {synapse-2.161.0 → synapse-2.163.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/observables/file.json +0 -0
  99. {synapse-2.161.0 → synapse-2.163.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/observables/ipv4-addr.json +0 -0
  100. {synapse-2.161.0 → synapse-2.163.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/observables/ipv6-addr.json +0 -0
  101. {synapse-2.161.0 → synapse-2.163.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/observables/mac-addr.json +0 -0
  102. {synapse-2.161.0 → synapse-2.163.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/observables/mutex.json +0 -0
  103. {synapse-2.161.0 → synapse-2.163.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/observables/network-traffic.json +0 -0
  104. {synapse-2.161.0 → synapse-2.163.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/observables/process.json +0 -0
  105. {synapse-2.161.0 → synapse-2.163.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/observables/software.json +0 -0
  106. {synapse-2.161.0 → synapse-2.163.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/observables/url.json +0 -0
  107. {synapse-2.161.0 → synapse-2.163.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/observables/user-account.json +0 -0
  108. {synapse-2.161.0 → synapse-2.163.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/observables/windows-registry-key.json +0 -0
  109. {synapse-2.161.0 → synapse-2.163.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/observables/x509-certificate.json +0 -0
  110. {synapse-2.161.0 → synapse-2.163.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/sdos/attack-pattern.json +0 -0
  111. {synapse-2.161.0 → synapse-2.163.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/sdos/campaign.json +0 -0
  112. {synapse-2.161.0 → synapse-2.163.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/sdos/course-of-action.json +0 -0
  113. {synapse-2.161.0 → synapse-2.163.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/sdos/grouping.json +0 -0
  114. {synapse-2.161.0 → synapse-2.163.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/sdos/identity.json +0 -0
  115. {synapse-2.161.0 → synapse-2.163.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/sdos/incident.json +0 -0
  116. {synapse-2.161.0 → synapse-2.163.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/sdos/indicator.json +0 -0
  117. {synapse-2.161.0 → synapse-2.163.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/sdos/infrastructure.json +0 -0
  118. {synapse-2.161.0 → synapse-2.163.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/sdos/intrusion-set.json +0 -0
  119. {synapse-2.161.0 → synapse-2.163.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/sdos/location.json +0 -0
  120. {synapse-2.161.0 → synapse-2.163.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/sdos/malware-analysis.json +0 -0
  121. {synapse-2.161.0 → synapse-2.163.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/sdos/malware.json +0 -0
  122. {synapse-2.161.0 → synapse-2.163.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/sdos/note.json +0 -0
  123. {synapse-2.161.0 → synapse-2.163.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/sdos/observed-data.json +0 -0
  124. {synapse-2.161.0 → synapse-2.163.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/sdos/opinion.json +0 -0
  125. {synapse-2.161.0 → synapse-2.163.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/sdos/report.json +0 -0
  126. {synapse-2.161.0 → synapse-2.163.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/sdos/threat-actor.json +0 -0
  127. {synapse-2.161.0 → synapse-2.163.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/sdos/tool.json +0 -0
  128. {synapse-2.161.0 → synapse-2.163.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/sdos/vulnerability.json +0 -0
  129. {synapse-2.161.0 → synapse-2.163.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/sros/relationship.json +0 -0
  130. {synapse-2.161.0 → synapse-2.163.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/sros/sighting.json +0 -0
  131. {synapse-2.161.0 → synapse-2.163.0}/synapse/datamodel.py +0 -0
  132. {synapse-2.161.0 → synapse-2.163.0}/synapse/exc.py +0 -0
  133. {synapse-2.161.0 → synapse-2.163.0}/synapse/glob.py +0 -0
  134. {synapse-2.161.0 → synapse-2.163.0}/synapse/lib/__init__.py +0 -0
  135. {synapse-2.161.0 → synapse-2.163.0}/synapse/lib/agenda.py +0 -0
  136. {synapse-2.161.0 → synapse-2.163.0}/synapse/lib/aha.py +0 -0
  137. {synapse-2.161.0 → synapse-2.163.0}/synapse/lib/ast.py +0 -0
  138. {synapse-2.161.0 → synapse-2.163.0}/synapse/lib/autodoc.py +0 -0
  139. {synapse-2.161.0 → synapse-2.163.0}/synapse/lib/base.py +0 -0
  140. {synapse-2.161.0 → synapse-2.163.0}/synapse/lib/boss.py +0 -0
  141. {synapse-2.161.0 → synapse-2.163.0}/synapse/lib/cache.py +0 -0
  142. {synapse-2.161.0 → synapse-2.163.0}/synapse/lib/certdir.py +0 -0
  143. {synapse-2.161.0 → synapse-2.163.0}/synapse/lib/chop.py +0 -0
  144. {synapse-2.161.0 → synapse-2.163.0}/synapse/lib/cli.py +0 -0
  145. {synapse-2.161.0 → synapse-2.163.0}/synapse/lib/cmd.py +0 -0
  146. {synapse-2.161.0 → synapse-2.163.0}/synapse/lib/cmdr.py +0 -0
  147. {synapse-2.161.0 → synapse-2.163.0}/synapse/lib/config.py +0 -0
  148. {synapse-2.161.0 → synapse-2.163.0}/synapse/lib/const.py +0 -0
  149. {synapse-2.161.0 → synapse-2.163.0}/synapse/lib/coro.py +0 -0
  150. {synapse-2.161.0 → synapse-2.163.0}/synapse/lib/crypto/__init__.py +0 -0
  151. {synapse-2.161.0 → synapse-2.163.0}/synapse/lib/crypto/coin.py +0 -0
  152. {synapse-2.161.0 → synapse-2.163.0}/synapse/lib/crypto/ecc.py +0 -0
  153. {synapse-2.161.0 → synapse-2.163.0}/synapse/lib/crypto/passwd.py +0 -0
  154. {synapse-2.161.0 → synapse-2.163.0}/synapse/lib/crypto/rsa.py +0 -0
  155. {synapse-2.161.0 → synapse-2.163.0}/synapse/lib/crypto/tinfoil.py +0 -0
  156. {synapse-2.161.0 → synapse-2.163.0}/synapse/lib/datfile.py +0 -0
  157. {synapse-2.161.0 → synapse-2.163.0}/synapse/lib/dyndeps.py +0 -0
  158. {synapse-2.161.0 → synapse-2.163.0}/synapse/lib/encoding.py +0 -0
  159. {synapse-2.161.0 → synapse-2.163.0}/synapse/lib/gis.py +0 -0
  160. {synapse-2.161.0 → synapse-2.163.0}/synapse/lib/grammar.py +0 -0
  161. {synapse-2.161.0 → synapse-2.163.0}/synapse/lib/hashitem.py +0 -0
  162. {synapse-2.161.0 → synapse-2.163.0}/synapse/lib/hashset.py +0 -0
  163. {synapse-2.161.0 → synapse-2.163.0}/synapse/lib/health.py +0 -0
  164. {synapse-2.161.0 → synapse-2.163.0}/synapse/lib/hive.py +0 -0
  165. {synapse-2.161.0 → synapse-2.163.0}/synapse/lib/hiveauth.py +0 -0
  166. {synapse-2.161.0 → synapse-2.163.0}/synapse/lib/httpapi.py +0 -0
  167. {synapse-2.161.0 → synapse-2.163.0}/synapse/lib/ingest.py +0 -0
  168. {synapse-2.161.0 → synapse-2.163.0}/synapse/lib/interval.py +0 -0
  169. {synapse-2.161.0 → synapse-2.163.0}/synapse/lib/jsonstor.py +0 -0
  170. {synapse-2.161.0 → synapse-2.163.0}/synapse/lib/jupyter.py +0 -0
  171. {synapse-2.161.0 → synapse-2.163.0}/synapse/lib/link.py +0 -0
  172. {synapse-2.161.0 → synapse-2.163.0}/synapse/lib/lmdbslab.py +0 -0
  173. {synapse-2.161.0 → synapse-2.163.0}/synapse/lib/modelrev.py +0 -0
  174. {synapse-2.161.0 → synapse-2.163.0}/synapse/lib/module.py +0 -0
  175. {synapse-2.161.0 → synapse-2.163.0}/synapse/lib/modules.py +0 -0
  176. {synapse-2.161.0 → synapse-2.163.0}/synapse/lib/msgpack.py +0 -0
  177. {synapse-2.161.0 → synapse-2.163.0}/synapse/lib/multislabseqn.py +0 -0
  178. {synapse-2.161.0 → synapse-2.163.0}/synapse/lib/nexus.py +0 -0
  179. {synapse-2.161.0 → synapse-2.163.0}/synapse/lib/node.py +0 -0
  180. {synapse-2.161.0 → synapse-2.163.0}/synapse/lib/output.py +0 -0
  181. {synapse-2.161.0 → synapse-2.163.0}/synapse/lib/parser.py +0 -0
  182. {synapse-2.161.0 → synapse-2.163.0}/synapse/lib/platforms/__init__.py +0 -0
  183. {synapse-2.161.0 → synapse-2.163.0}/synapse/lib/platforms/common.py +0 -0
  184. {synapse-2.161.0 → synapse-2.163.0}/synapse/lib/platforms/darwin.py +0 -0
  185. {synapse-2.161.0 → synapse-2.163.0}/synapse/lib/platforms/freebsd.py +0 -0
  186. {synapse-2.161.0 → synapse-2.163.0}/synapse/lib/platforms/linux.py +0 -0
  187. {synapse-2.161.0 → synapse-2.163.0}/synapse/lib/platforms/windows.py +0 -0
  188. {synapse-2.161.0 → synapse-2.163.0}/synapse/lib/provenance.py +0 -0
  189. {synapse-2.161.0 → synapse-2.163.0}/synapse/lib/queue.py +0 -0
  190. {synapse-2.161.0 → synapse-2.163.0}/synapse/lib/ratelimit.py +0 -0
  191. {synapse-2.161.0 → synapse-2.163.0}/synapse/lib/reflect.py +0 -0
  192. {synapse-2.161.0 → synapse-2.163.0}/synapse/lib/scope.py +0 -0
  193. {synapse-2.161.0 → synapse-2.163.0}/synapse/lib/scrape.py +0 -0
  194. {synapse-2.161.0 → synapse-2.163.0}/synapse/lib/share.py +0 -0
  195. {synapse-2.161.0 → synapse-2.163.0}/synapse/lib/slaboffs.py +0 -0
  196. {synapse-2.161.0 → synapse-2.163.0}/synapse/lib/slabseqn.py +0 -0
  197. {synapse-2.161.0 → synapse-2.163.0}/synapse/lib/snap.py +0 -0
  198. {synapse-2.161.0 → synapse-2.163.0}/synapse/lib/spooled.py +0 -0
  199. {synapse-2.161.0 → synapse-2.163.0}/synapse/lib/storm.lark +0 -0
  200. {synapse-2.161.0 → synapse-2.163.0}/synapse/lib/storm_format.py +0 -0
  201. {synapse-2.161.0 → synapse-2.163.0}/synapse/lib/stormctrl.py +0 -0
  202. {synapse-2.161.0 → synapse-2.163.0}/synapse/lib/stormlib/__init__.py +0 -0
  203. {synapse-2.161.0 → synapse-2.163.0}/synapse/lib/stormlib/aha.py +0 -0
  204. {synapse-2.161.0 → synapse-2.163.0}/synapse/lib/stormlib/auth.py +0 -0
  205. {synapse-2.161.0 → synapse-2.163.0}/synapse/lib/stormlib/backup.py +0 -0
  206. {synapse-2.161.0 → synapse-2.163.0}/synapse/lib/stormlib/basex.py +0 -0
  207. {synapse-2.161.0 → synapse-2.163.0}/synapse/lib/stormlib/cell.py +0 -0
  208. {synapse-2.161.0 → synapse-2.163.0}/synapse/lib/stormlib/compression.py +0 -0
  209. {synapse-2.161.0 → synapse-2.163.0}/synapse/lib/stormlib/cortex.py +0 -0
  210. {synapse-2.161.0 → synapse-2.163.0}/synapse/lib/stormlib/easyperm.py +0 -0
  211. {synapse-2.161.0 → synapse-2.163.0}/synapse/lib/stormlib/ethereum.py +0 -0
  212. {synapse-2.161.0 → synapse-2.163.0}/synapse/lib/stormlib/gen.py +0 -0
  213. {synapse-2.161.0 → synapse-2.163.0}/synapse/lib/stormlib/gis.py +0 -0
  214. {synapse-2.161.0 → synapse-2.163.0}/synapse/lib/stormlib/graph.py +0 -0
  215. {synapse-2.161.0 → synapse-2.163.0}/synapse/lib/stormlib/hashes.py +0 -0
  216. {synapse-2.161.0 → synapse-2.163.0}/synapse/lib/stormlib/hex.py +0 -0
  217. {synapse-2.161.0 → synapse-2.163.0}/synapse/lib/stormlib/imap.py +0 -0
  218. {synapse-2.161.0 → synapse-2.163.0}/synapse/lib/stormlib/infosec.py +0 -0
  219. {synapse-2.161.0 → synapse-2.163.0}/synapse/lib/stormlib/ipv6.py +0 -0
  220. {synapse-2.161.0 → synapse-2.163.0}/synapse/lib/stormlib/iters.py +0 -0
  221. {synapse-2.161.0 → synapse-2.163.0}/synapse/lib/stormlib/json.py +0 -0
  222. {synapse-2.161.0 → synapse-2.163.0}/synapse/lib/stormlib/log.py +0 -0
  223. {synapse-2.161.0 → synapse-2.163.0}/synapse/lib/stormlib/macro.py +0 -0
  224. {synapse-2.161.0 → synapse-2.163.0}/synapse/lib/stormlib/math.py +0 -0
  225. {synapse-2.161.0 → synapse-2.163.0}/synapse/lib/stormlib/mime.py +0 -0
  226. {synapse-2.161.0 → synapse-2.163.0}/synapse/lib/stormlib/model.py +0 -0
  227. {synapse-2.161.0 → synapse-2.163.0}/synapse/lib/stormlib/modelext.py +0 -0
  228. {synapse-2.161.0 → synapse-2.163.0}/synapse/lib/stormlib/notifications.py +0 -0
  229. {synapse-2.161.0 → synapse-2.163.0}/synapse/lib/stormlib/oauth.py +0 -0
  230. {synapse-2.161.0 → synapse-2.163.0}/synapse/lib/stormlib/pack.py +0 -0
  231. {synapse-2.161.0 → synapse-2.163.0}/synapse/lib/stormlib/project.py +0 -0
  232. {synapse-2.161.0 → synapse-2.163.0}/synapse/lib/stormlib/random.py +0 -0
  233. {synapse-2.161.0 → synapse-2.163.0}/synapse/lib/stormlib/scrape.py +0 -0
  234. {synapse-2.161.0 → synapse-2.163.0}/synapse/lib/stormlib/smtp.py +0 -0
  235. {synapse-2.161.0 → synapse-2.163.0}/synapse/lib/stormlib/stats.py +0 -0
  236. {synapse-2.161.0 → synapse-2.163.0}/synapse/lib/stormlib/storm.py +0 -0
  237. {synapse-2.161.0 → synapse-2.163.0}/synapse/lib/stormlib/vault.py +0 -0
  238. {synapse-2.161.0 → synapse-2.163.0}/synapse/lib/stormlib/version.py +0 -0
  239. {synapse-2.161.0 → synapse-2.163.0}/synapse/lib/stormlib/xml.py +0 -0
  240. {synapse-2.161.0 → synapse-2.163.0}/synapse/lib/stormlib/yaml.py +0 -0
  241. {synapse-2.161.0 → synapse-2.163.0}/synapse/lib/stormsvc.py +0 -0
  242. {synapse-2.161.0 → synapse-2.163.0}/synapse/lib/stormwhois.py +0 -0
  243. {synapse-2.161.0 → synapse-2.163.0}/synapse/lib/structlog.py +0 -0
  244. {synapse-2.161.0 → synapse-2.163.0}/synapse/lib/task.py +0 -0
  245. {synapse-2.161.0 → synapse-2.163.0}/synapse/lib/thishost.py +0 -0
  246. {synapse-2.161.0 → synapse-2.163.0}/synapse/lib/thisplat.py +0 -0
  247. {synapse-2.161.0 → synapse-2.163.0}/synapse/lib/threads.py +0 -0
  248. {synapse-2.161.0 → synapse-2.163.0}/synapse/lib/time.py +0 -0
  249. {synapse-2.161.0 → synapse-2.163.0}/synapse/lib/trigger.py +0 -0
  250. {synapse-2.161.0 → synapse-2.163.0}/synapse/lib/types.py +0 -0
  251. {synapse-2.161.0 → synapse-2.163.0}/synapse/lib/urlhelp.py +0 -0
  252. {synapse-2.161.0 → synapse-2.163.0}/synapse/lookup/__init__.py +0 -0
  253. {synapse-2.161.0 → synapse-2.163.0}/synapse/lookup/cvss.py +0 -0
  254. {synapse-2.161.0 → synapse-2.163.0}/synapse/lookup/iana.py +0 -0
  255. {synapse-2.161.0 → synapse-2.163.0}/synapse/lookup/iso3166.py +0 -0
  256. {synapse-2.161.0 → synapse-2.163.0}/synapse/lookup/macho.py +0 -0
  257. {synapse-2.161.0 → synapse-2.163.0}/synapse/lookup/pe.py +0 -0
  258. {synapse-2.161.0 → synapse-2.163.0}/synapse/lookup/phonenum.py +0 -0
  259. {synapse-2.161.0 → synapse-2.163.0}/synapse/lookup/timezones.py +0 -0
  260. {synapse-2.161.0 → synapse-2.163.0}/synapse/mindmeld.py +0 -0
  261. {synapse-2.161.0 → synapse-2.163.0}/synapse/models/__init__.py +0 -0
  262. {synapse-2.161.0 → synapse-2.163.0}/synapse/models/auth.py +0 -0
  263. {synapse-2.161.0 → synapse-2.163.0}/synapse/models/base.py +0 -0
  264. {synapse-2.161.0 → synapse-2.163.0}/synapse/models/belief.py +0 -0
  265. {synapse-2.161.0 → synapse-2.163.0}/synapse/models/biz.py +0 -0
  266. {synapse-2.161.0 → synapse-2.163.0}/synapse/models/crypto.py +0 -0
  267. {synapse-2.161.0 → synapse-2.163.0}/synapse/models/dns.py +0 -0
  268. {synapse-2.161.0 → synapse-2.163.0}/synapse/models/economic.py +0 -0
  269. {synapse-2.161.0 → synapse-2.163.0}/synapse/models/files.py +0 -0
  270. {synapse-2.161.0 → synapse-2.163.0}/synapse/models/geopol.py +0 -0
  271. {synapse-2.161.0 → synapse-2.163.0}/synapse/models/geospace.py +0 -0
  272. {synapse-2.161.0 → synapse-2.163.0}/synapse/models/gov/__init__.py +0 -0
  273. {synapse-2.161.0 → synapse-2.163.0}/synapse/models/gov/cn.py +0 -0
  274. {synapse-2.161.0 → synapse-2.163.0}/synapse/models/gov/intl.py +0 -0
  275. {synapse-2.161.0 → synapse-2.163.0}/synapse/models/gov/us.py +0 -0
  276. {synapse-2.161.0 → synapse-2.163.0}/synapse/models/language.py +0 -0
  277. {synapse-2.161.0 → synapse-2.163.0}/synapse/models/material.py +0 -0
  278. {synapse-2.161.0 → synapse-2.163.0}/synapse/models/media.py +0 -0
  279. {synapse-2.161.0 → synapse-2.163.0}/synapse/models/person.py +0 -0
  280. {synapse-2.161.0 → synapse-2.163.0}/synapse/models/syn.py +0 -0
  281. {synapse-2.161.0 → synapse-2.163.0}/synapse/models/telco.py +0 -0
  282. {synapse-2.161.0 → synapse-2.163.0}/synapse/models/transport.py +0 -0
  283. {synapse-2.161.0 → synapse-2.163.0}/synapse/servers/__init__.py +0 -0
  284. {synapse-2.161.0 → synapse-2.163.0}/synapse/servers/aha.py +0 -0
  285. {synapse-2.161.0 → synapse-2.163.0}/synapse/servers/axon.py +0 -0
  286. {synapse-2.161.0 → synapse-2.163.0}/synapse/servers/cell.py +0 -0
  287. {synapse-2.161.0 → synapse-2.163.0}/synapse/servers/cortex.py +0 -0
  288. {synapse-2.161.0 → synapse-2.163.0}/synapse/servers/cryotank.py +0 -0
  289. {synapse-2.161.0 → synapse-2.163.0}/synapse/servers/jsonstor.py +0 -0
  290. {synapse-2.161.0 → synapse-2.163.0}/synapse/servers/stemcell.py +0 -0
  291. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/__init__.py +0 -0
  292. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/files/TestUtilsGetrefs.test_basics.yaml +0 -0
  293. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/files/__init__.py +0 -0
  294. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/files/attack_flow/CISA AA22-138B VMWare Workspace (Alt).json +0 -0
  295. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/files/attack_flow/CISA_Iranian_APT.json +0 -0
  296. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/files/certdir/cas/ca.crt +0 -0
  297. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/files/certdir/cas/ca.key +0 -0
  298. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/files/certdir/hosts/localhost.crt +0 -0
  299. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/files/certdir/hosts/localhost.key +0 -0
  300. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/files/certdir/users/root.crt +0 -0
  301. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/files/certdir/users/root.key +0 -0
  302. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/files/certdir/users/user.crt +0 -0
  303. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/files/certdir/users/user.key +0 -0
  304. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/files/rstorm/httpresp1.json +0 -0
  305. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/files/rstorm/httpresp2.json +0 -0
  306. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/files/rstorm/httpresp3.json +0 -0
  307. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/files/rstorm/httprespmulti.yaml +0 -0
  308. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/files/stix_export/basic.json +0 -0
  309. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/files/stix_export/custom0.json +0 -0
  310. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/files/stix_export/risk0.json +0 -0
  311. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/files/stix_import/apt1.json +0 -0
  312. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/files/stix_import/oasis-example-00.json +0 -0
  313. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/files/stormcov/argvquery.storm +0 -0
  314. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/files/stormcov/dupesubs.storm +0 -0
  315. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/files/stormcov/lookup.storm +0 -0
  316. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/files/stormcov/pivot.storm +0 -0
  317. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/files/stormcov/spin.storm +0 -0
  318. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/files/stormcov/stormctrl.storm +0 -0
  319. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/files/stormmod/common +0 -0
  320. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/files/stormpkg/badapidef.yaml +0 -0
  321. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/files/stormpkg/badcmdname.yaml +0 -0
  322. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/files/stormpkg/badjsonpkg.yaml +0 -0
  323. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/files/stormpkg/docs/foobar.md +0 -0
  324. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/files/stormpkg/docs/foobar.svg +0 -0
  325. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/files/stormpkg/dotstorm/dotstorm.yaml +0 -0
  326. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/files/stormpkg/dotstorm/storm/commands/dotstorm.bar.storm +0 -0
  327. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/files/stormpkg/dotstorm/storm/modules/dotstorm.foo.storm +0 -0
  328. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/files/stormpkg/nocontent.yaml +0 -0
  329. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/files/stormpkg/nomime.yaml +0 -0
  330. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/files/stormpkg/nopath.yaml +0 -0
  331. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/files/stormpkg/nosuchfile.yaml +0 -0
  332. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/files/stormpkg/notitle.yaml +0 -0
  333. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/files/stormpkg/optic/index.html +0 -0
  334. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/files/stormpkg/storm/commands/invalidCMD +0 -0
  335. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/files/stormpkg/storm/commands/testpkg.baz +0 -0
  336. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/files/stormpkg/storm/commands/testpkgcmd +0 -0
  337. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/files/stormpkg/storm/modules/apimod +0 -0
  338. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/files/stormpkg/storm/modules/testmod +0 -0
  339. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/files/stormpkg/workflows/testpkg-bam.newp +0 -0
  340. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/files/stormpkg/workflows/testpkg-baz.yaml +0 -0
  341. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/files/stormpkg/workflows/testpkg-foo.yaml +0 -0
  342. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/files/test.dat +0 -0
  343. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/files/testcore/cell.yaml +0 -0
  344. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/nopmod.py +0 -0
  345. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_cmds_boss.py +0 -0
  346. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_cmds_cortex.py +0 -0
  347. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_cmds_hive.py +0 -0
  348. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_common.py +0 -0
  349. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_cryotank.py +0 -0
  350. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_data.py +0 -0
  351. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_datamodel.py +0 -0
  352. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_exc.py +0 -0
  353. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_glob.py +0 -0
  354. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_init.py +0 -0
  355. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_lib_agenda.py +0 -0
  356. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_lib_aha.py +0 -0
  357. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_lib_autodoc.py +0 -0
  358. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_lib_base.py +0 -0
  359. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_lib_boss.py +0 -0
  360. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_lib_cache.py +0 -0
  361. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_lib_cell.py +0 -0
  362. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_lib_certdir.py +0 -0
  363. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_lib_chop.py +0 -0
  364. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_lib_cli.py +0 -0
  365. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_lib_config.py +0 -0
  366. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_lib_const.py +0 -0
  367. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_lib_coro.py +0 -0
  368. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_lib_crypto_coin.py +0 -0
  369. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_lib_crypto_ecc.py +0 -0
  370. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_lib_crypto_passwd.py +0 -0
  371. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_lib_crypto_tinfoil.py +0 -0
  372. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_lib_datfile.py +0 -0
  373. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_lib_dyndeps.py +0 -0
  374. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_lib_encoding.py +0 -0
  375. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_lib_gis.py +0 -0
  376. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_lib_hashitem.py +0 -0
  377. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_lib_hashset.py +0 -0
  378. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_lib_health.py +0 -0
  379. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_lib_hive.py +0 -0
  380. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_lib_hiveauth.py +0 -0
  381. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_lib_httpapi.py +0 -0
  382. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_lib_interval.py +0 -0
  383. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_lib_jsonstor.py +0 -0
  384. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_lib_jupyter.py +0 -0
  385. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_lib_layer.py +0 -0
  386. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_lib_link.py +0 -0
  387. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_lib_lmdbslab.py +0 -0
  388. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_lib_modelrev.py +0 -0
  389. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_lib_module.py +0 -0
  390. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_lib_msgpack.py +0 -0
  391. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_lib_multislabseqn.py +0 -0
  392. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_lib_nexus.py +0 -0
  393. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_lib_node.py +0 -0
  394. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_lib_output.py +0 -0
  395. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_lib_platforms_linux.py +0 -0
  396. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_lib_provenance.py +0 -0
  397. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_lib_queue.py +0 -0
  398. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_lib_ratelimit.py +0 -0
  399. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_lib_reflect.py +0 -0
  400. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_lib_scope.py +0 -0
  401. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_lib_scrape.py +0 -0
  402. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_lib_slaboffs.py +0 -0
  403. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_lib_slabseqn.py +0 -0
  404. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_lib_snap.py +0 -0
  405. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_lib_spooled.py +0 -0
  406. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_lib_storm_format.py +0 -0
  407. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_lib_stormlib_backup.py +0 -0
  408. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_lib_stormlib_basex.py +0 -0
  409. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_lib_stormlib_compression.py +0 -0
  410. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_lib_stormlib_easyperm.py +0 -0
  411. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_lib_stormlib_ethereum.py +0 -0
  412. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_lib_stormlib_gen.py +0 -0
  413. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_lib_stormlib_gis.py +0 -0
  414. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_lib_stormlib_hashes.py +0 -0
  415. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_lib_stormlib_hex.py +0 -0
  416. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_lib_stormlib_imap.py +0 -0
  417. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_lib_stormlib_infosec.py +0 -0
  418. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_lib_stormlib_ipv6.py +0 -0
  419. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_lib_stormlib_iters.py +0 -0
  420. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_lib_stormlib_log.py +0 -0
  421. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_lib_stormlib_mime.py +0 -0
  422. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_lib_stormlib_model.py +0 -0
  423. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_lib_stormlib_pack.py +0 -0
  424. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_lib_stormlib_random.py +0 -0
  425. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_lib_stormlib_scrape.py +0 -0
  426. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_lib_stormlib_smtp.py +0 -0
  427. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_lib_stormlib_stats.py +0 -0
  428. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_lib_stormlib_storm.py +0 -0
  429. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_lib_stormlib_vault.py +0 -0
  430. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_lib_stormlib_xml.py +0 -0
  431. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_lib_stormlib_yaml.py +0 -0
  432. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_lib_stormsvc.py +0 -0
  433. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_lib_structlog.py +0 -0
  434. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_lib_task.py +0 -0
  435. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_lib_thishost.py +0 -0
  436. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_lib_time.py +0 -0
  437. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_lib_types.py +0 -0
  438. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_lib_urlhelp.py +0 -0
  439. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_lib_version.py +0 -0
  440. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_lookup_iso3166.py +0 -0
  441. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_lookup_phonenum.py +0 -0
  442. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_mindmeld.py +0 -0
  443. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_model_auth.py +0 -0
  444. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_model_base.py +0 -0
  445. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_model_belief.py +0 -0
  446. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_model_biz.py +0 -0
  447. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_model_dns.py +0 -0
  448. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_model_economic.py +0 -0
  449. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_model_files.py +0 -0
  450. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_model_geopol.py +0 -0
  451. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_model_geospace.py +0 -0
  452. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_model_gov_cn.py +0 -0
  453. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_model_gov_intl.py +0 -0
  454. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_model_gov_us.py +0 -0
  455. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_model_infotech.py +0 -0
  456. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_model_language.py +0 -0
  457. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_model_material.py +0 -0
  458. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_model_media.py +0 -0
  459. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_model_person.py +0 -0
  460. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_model_syn.py +0 -0
  461. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_model_telco.py +0 -0
  462. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_model_transport.py +0 -0
  463. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_servers_axon.py +0 -0
  464. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_servers_cortex.py +0 -0
  465. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_servers_cryotank.py +0 -0
  466. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_servers_stemcell.py +0 -0
  467. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_servers_univ.py +0 -0
  468. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_telepath.py +0 -0
  469. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_tools_aha.py +0 -0
  470. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_tools_autodoc.py +0 -0
  471. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_tools_axon2axon.py +0 -0
  472. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_tools_backup.py +0 -0
  473. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_tools_cellauth.py +0 -0
  474. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_tools_cryo_cat.py +0 -0
  475. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_tools_cryo_list.py +0 -0
  476. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_tools_csvtool.py +0 -0
  477. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_tools_docker_validate.py +0 -0
  478. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_tools_easycert.py +0 -0
  479. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_tools_feed.py +0 -0
  480. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_tools_genpkg.py +0 -0
  481. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_tools_guid.py +0 -0
  482. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_tools_healthcheck.py +0 -0
  483. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_tools_hiveload.py +0 -0
  484. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_tools_hivesave.py +0 -0
  485. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_tools_json2mpk.py +0 -0
  486. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_tools_livebackup.py +0 -0
  487. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_tools_modrole.py +0 -0
  488. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_tools_moduser.py +0 -0
  489. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_tools_pullfile.py +0 -0
  490. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_tools_pushfile.py +0 -0
  491. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_tools_reload.py +0 -0
  492. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_tools_rstorm.py +0 -0
  493. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_utils.py +0 -0
  494. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_utils_getrefs.py +0 -0
  495. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/test_utils_stormcov.py +0 -0
  496. {synapse-2.161.0 → synapse-2.163.0}/synapse/tests/utils.py +0 -0
  497. {synapse-2.161.0 → synapse-2.163.0}/synapse/tools/__init__.py +0 -0
  498. {synapse-2.161.0 → synapse-2.163.0}/synapse/tools/aha/__init__.py +0 -0
  499. {synapse-2.161.0 → synapse-2.163.0}/synapse/tools/aha/easycert.py +0 -0
  500. {synapse-2.161.0 → synapse-2.163.0}/synapse/tools/aha/enroll.py +0 -0
  501. {synapse-2.161.0 → synapse-2.163.0}/synapse/tools/aha/list.py +0 -0
  502. {synapse-2.161.0 → synapse-2.163.0}/synapse/tools/aha/provision/__init__.py +0 -0
  503. {synapse-2.161.0 → synapse-2.163.0}/synapse/tools/aha/provision/service.py +0 -0
  504. {synapse-2.161.0 → synapse-2.163.0}/synapse/tools/aha/provision/user.py +0 -0
  505. {synapse-2.161.0 → synapse-2.163.0}/synapse/tools/autodoc.py +0 -0
  506. {synapse-2.161.0 → synapse-2.163.0}/synapse/tools/axon2axon.py +0 -0
  507. {synapse-2.161.0 → synapse-2.163.0}/synapse/tools/backup.py +0 -0
  508. {synapse-2.161.0 → synapse-2.163.0}/synapse/tools/cellauth.py +0 -0
  509. {synapse-2.161.0 → synapse-2.163.0}/synapse/tools/cmdr.py +0 -0
  510. {synapse-2.161.0 → synapse-2.163.0}/synapse/tools/cryo/__init__.py +0 -0
  511. {synapse-2.161.0 → synapse-2.163.0}/synapse/tools/cryo/cat.py +0 -0
  512. {synapse-2.161.0 → synapse-2.163.0}/synapse/tools/cryo/list.py +0 -0
  513. {synapse-2.161.0 → synapse-2.163.0}/synapse/tools/csvtool.py +0 -0
  514. {synapse-2.161.0 → synapse-2.163.0}/synapse/tools/docker/__init__.py +0 -0
  515. {synapse-2.161.0 → synapse-2.163.0}/synapse/tools/docker/validate.py +0 -0
  516. {synapse-2.161.0 → synapse-2.163.0}/synapse/tools/easycert.py +0 -0
  517. {synapse-2.161.0 → synapse-2.163.0}/synapse/tools/feed.py +0 -0
  518. {synapse-2.161.0 → synapse-2.163.0}/synapse/tools/genpkg.py +0 -0
  519. {synapse-2.161.0 → synapse-2.163.0}/synapse/tools/guid.py +0 -0
  520. {synapse-2.161.0 → synapse-2.163.0}/synapse/tools/healthcheck.py +0 -0
  521. {synapse-2.161.0 → synapse-2.163.0}/synapse/tools/hive/__init__.py +0 -0
  522. {synapse-2.161.0 → synapse-2.163.0}/synapse/tools/hive/load.py +0 -0
  523. {synapse-2.161.0 → synapse-2.163.0}/synapse/tools/hive/save.py +0 -0
  524. {synapse-2.161.0 → synapse-2.163.0}/synapse/tools/json2mpk.py +0 -0
  525. {synapse-2.161.0 → synapse-2.163.0}/synapse/tools/livebackup.py +0 -0
  526. {synapse-2.161.0 → synapse-2.163.0}/synapse/tools/modrole.py +0 -0
  527. {synapse-2.161.0 → synapse-2.163.0}/synapse/tools/moduser.py +0 -0
  528. {synapse-2.161.0 → synapse-2.163.0}/synapse/tools/promote.py +0 -0
  529. {synapse-2.161.0 → synapse-2.163.0}/synapse/tools/pullfile.py +0 -0
  530. {synapse-2.161.0 → synapse-2.163.0}/synapse/tools/pushfile.py +0 -0
  531. {synapse-2.161.0 → synapse-2.163.0}/synapse/tools/reload.py +0 -0
  532. {synapse-2.161.0 → synapse-2.163.0}/synapse/tools/rstorm.py +0 -0
  533. {synapse-2.161.0 → synapse-2.163.0}/synapse/tools/storm.py +0 -0
  534. {synapse-2.161.0 → synapse-2.163.0}/synapse/utils/__init__.py +0 -0
  535. {synapse-2.161.0 → synapse-2.163.0}/synapse/utils/getrefs.py +0 -0
  536. {synapse-2.161.0 → synapse-2.163.0}/synapse/utils/stormcov/__init__.py +0 -0
  537. {synapse-2.161.0 → synapse-2.163.0}/synapse/utils/stormcov/plugin.py +0 -0
  538. {synapse-2.161.0 → synapse-2.163.0}/synapse/vendor/__init__.py +0 -0
  539. {synapse-2.161.0 → synapse-2.163.0}/synapse/vendor/cashaddress/LICENSE +0 -0
  540. {synapse-2.161.0 → synapse-2.163.0}/synapse/vendor/cashaddress/__init__.py +0 -0
  541. {synapse-2.161.0 → synapse-2.163.0}/synapse/vendor/cashaddress/base58.py +0 -0
  542. {synapse-2.161.0 → synapse-2.163.0}/synapse/vendor/cashaddress/convert.py +0 -0
  543. {synapse-2.161.0 → synapse-2.163.0}/synapse/vendor/cashaddress/crypto.py +0 -0
  544. {synapse-2.161.0 → synapse-2.163.0}/synapse/vendor/cashaddress/tests/__init__.py +0 -0
  545. {synapse-2.161.0 → synapse-2.163.0}/synapse/vendor/cashaddress/tests/test_cashaddress.py +0 -0
  546. {synapse-2.161.0 → synapse-2.163.0}/synapse/vendor/substrateinterface/LICENSE +0 -0
  547. {synapse-2.161.0 → synapse-2.163.0}/synapse/vendor/substrateinterface/__init__.py +0 -0
  548. {synapse-2.161.0 → synapse-2.163.0}/synapse/vendor/substrateinterface/tests/__init__.py +0 -0
  549. {synapse-2.161.0 → synapse-2.163.0}/synapse/vendor/substrateinterface/tests/test_ss58.py +0 -0
  550. {synapse-2.161.0 → synapse-2.163.0}/synapse/vendor/substrateinterface/utils/__init__.py +0 -0
  551. {synapse-2.161.0 → synapse-2.163.0}/synapse/vendor/substrateinterface/utils/ss58.py +0 -0
  552. {synapse-2.161.0 → synapse-2.163.0}/synapse/vendor/utils.py +0 -0
  553. {synapse-2.161.0 → synapse-2.163.0}/synapse/vendor/xrpl/LICENSE +0 -0
  554. {synapse-2.161.0 → synapse-2.163.0}/synapse/vendor/xrpl/__init__.py +0 -0
  555. {synapse-2.161.0 → synapse-2.163.0}/synapse/vendor/xrpl/constants.py +0 -0
  556. {synapse-2.161.0 → synapse-2.163.0}/synapse/vendor/xrpl/core/__init__.py +0 -0
  557. {synapse-2.161.0 → synapse-2.163.0}/synapse/vendor/xrpl/core/addresscodec/__init__.py +0 -0
  558. {synapse-2.161.0 → synapse-2.163.0}/synapse/vendor/xrpl/core/addresscodec/codec.py +0 -0
  559. {synapse-2.161.0 → synapse-2.163.0}/synapse/vendor/xrpl/core/addresscodec/exceptions.py +0 -0
  560. {synapse-2.161.0 → synapse-2.163.0}/synapse/vendor/xrpl/core/addresscodec/main.py +0 -0
  561. {synapse-2.161.0 → synapse-2.163.0}/synapse/vendor/xrpl/core/addresscodec/utils.py +0 -0
  562. {synapse-2.161.0 → synapse-2.163.0}/synapse/vendor/xrpl/tests/__init__.py +0 -0
  563. {synapse-2.161.0 → synapse-2.163.0}/synapse/vendor/xrpl/tests/test_codec.py +0 -0
  564. {synapse-2.161.0 → synapse-2.163.0}/synapse/vendor/xrpl/tests/test_main.py +0 -0
  565. {synapse-2.161.0 → synapse-2.163.0}/synapse/vendor/xrpl/tests/test_main_test_cases.py +0 -0
  566. {synapse-2.161.0 → synapse-2.163.0}/synapse.egg-info/SOURCES.txt +0 -0
  567. {synapse-2.161.0 → synapse-2.163.0}/synapse.egg-info/dependency_links.txt +0 -0
  568. {synapse-2.161.0 → synapse-2.163.0}/synapse.egg-info/requires.txt +0 -0
  569. {synapse-2.161.0 → synapse-2.163.0}/synapse.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: synapse
3
- Version: 2.161.0
3
+ Version: 2.163.0
4
4
  Summary: Synapse Intelligence Analysis Framework
5
5
  Author-email: The Vertex Project LLC <root@vertex.link>
6
6
  License: Apache License 2.0
@@ -10,10 +10,12 @@ Project-URL: Repository, https://github.com/vertexproject/synapse
10
10
  Project-URL: Changelog, https://synapse.docs.vertex.link/en/latest/synapse/changelog.html
11
11
  Classifier: Development Status :: 5 - Production/Stable
12
12
  Classifier: License :: OSI Approved :: Apache Software License
13
+ Classifier: Topic :: Database :: Database Engines/Servers
13
14
  Classifier: Topic :: System :: Clustering
14
15
  Classifier: Topic :: System :: Distributed Computing
15
16
  Classifier: Topic :: System :: Software Distribution
16
17
  Classifier: Programming Language :: Python :: 3.11
18
+ Classifier: Operating System :: POSIX :: Linux
17
19
  Requires-Python: >=3.11
18
20
  Description-Content-Type: text/x-rst
19
21
  License-File: LICENSE
@@ -4,7 +4,7 @@ build-backend = 'setuptools.build_meta'
4
4
 
5
5
  [project]
6
6
  name = 'synapse'
7
- version = '2.161.0'
7
+ version = '2.163.0'
8
8
  authors = [
9
9
  { name = 'The Vertex Project LLC', email = 'root@vertex.link'},
10
10
  ]
@@ -15,10 +15,12 @@ license = { text = 'Apache License 2.0' }
15
15
  classifiers = [
16
16
  'Development Status :: 5 - Production/Stable',
17
17
  'License :: OSI Approved :: Apache Software License',
18
+ 'Topic :: Database :: Database Engines/Servers',
18
19
  'Topic :: System :: Clustering',
19
20
  'Topic :: System :: Distributed Computing',
20
21
  'Topic :: System :: Software Distribution',
21
22
  'Programming Language :: Python :: 3.11',
23
+ 'Operating System :: POSIX :: Linux',
22
24
  ]
23
25
  dependencies = [
24
26
  'pyOpenSSL>=23.0.0,<23.3.0',
@@ -593,7 +593,8 @@ class AxonApi(s_cell.CellApi, s_share.Share): # type: ignore
593
593
  await self._reqUserAllowed(('axon', 'del'))
594
594
  return await self.cell.dels(sha256s)
595
595
 
596
- async def wget(self, url, params=None, headers=None, json=None, body=None, method='GET', ssl=True, timeout=None, proxy=None):
596
+ async def wget(self, url, params=None, headers=None, json=None, body=None, method='GET',
597
+ ssl=True, timeout=None, proxy=None, ssl_opts=None):
597
598
  '''
598
599
  Stream a file download directly into the Axon.
599
600
 
@@ -606,11 +607,20 @@ class AxonApi(s_cell.CellApi, s_share.Share): # type: ignore
606
607
  method (str): The HTTP method to use.
607
608
  ssl (bool): Perform SSL verification.
608
609
  timeout (int): The timeout of the request, in seconds.
610
+ ssl_opts (dict): Additional SSL/TLS options.
609
611
 
610
612
  Notes:
611
613
  The response body will be stored, regardless of the response code. The ``ok`` value in the reponse does not
612
614
  reflect that a status code, such as a 404, was encountered when retrieving the URL.
613
615
 
616
+ The ssl_opts dictionary may contain the following values::
617
+
618
+ {
619
+ 'verify': <bool> - Perform SSL/TLS verification. Is overridden by the ssl argument.
620
+ 'client_cert': <str> - PEM encoded full chain certificate for use in mTLS.
621
+ 'client_key': <str> - PEM encoded key for use in mTLS. Alternatively, can be included in client_cert.
622
+ }
623
+
614
624
  The dictionary returned by this may contain the following values::
615
625
 
616
626
  {
@@ -640,18 +650,20 @@ class AxonApi(s_cell.CellApi, s_share.Share): # type: ignore
640
650
  dict: An information dictionary containing the results of the request.
641
651
  '''
642
652
  await self._reqUserAllowed(('axon', 'wget'))
643
- return await self.cell.wget(url, params=params, headers=headers, json=json, body=body, method=method, ssl=ssl,
644
- timeout=timeout, proxy=proxy)
653
+ return await self.cell.wget(url, params=params, headers=headers, json=json, body=body, method=method,
654
+ ssl=ssl, timeout=timeout, proxy=proxy, ssl_opts=ssl_opts)
645
655
 
646
- async def postfiles(self, fields, url, params=None, headers=None, method='POST', ssl=True, timeout=None, proxy=None):
656
+ async def postfiles(self, fields, url, params=None, headers=None, method='POST',
657
+ ssl=True, timeout=None, proxy=None, ssl_opts=None):
647
658
  await self._reqUserAllowed(('axon', 'wput'))
648
- return await self.cell.postfiles(fields, url, params=params, headers=headers,
649
- method=method, ssl=ssl, timeout=timeout, proxy=proxy)
659
+ return await self.cell.postfiles(fields, url, params=params, headers=headers, method=method,
660
+ ssl=ssl, timeout=timeout, proxy=proxy, ssl_opts=ssl_opts)
650
661
 
651
- async def wput(self, sha256, url, params=None, headers=None, method='PUT', ssl=True, timeout=None, proxy=None):
662
+ async def wput(self, sha256, url, params=None, headers=None, method='PUT',
663
+ ssl=True, timeout=None, proxy=None, ssl_opts=None):
652
664
  await self._reqUserAllowed(('axon', 'wput'))
653
- return await self.cell.wput(sha256, url, params=params, headers=headers, method=method, ssl=ssl,
654
- timeout=timeout, proxy=proxy)
665
+ return await self.cell.wput(sha256, url, params=params, headers=headers, method=method,
666
+ ssl=ssl, timeout=timeout, proxy=proxy, ssl_opts=ssl_opts)
655
667
 
656
668
  async def metrics(self):
657
669
  '''
@@ -1434,7 +1446,8 @@ class Axon(s_cell.Cell):
1434
1446
  raise s_exc.BadJsonText(mesg=f'Bad json line encountered while processing {sha256}, ({e})',
1435
1447
  sha256=sha256) from None
1436
1448
 
1437
- async def postfiles(self, fields, url, params=None, headers=None, method='POST', ssl=True, timeout=None, proxy=None):
1449
+ async def postfiles(self, fields, url, params=None, headers=None, method='POST',
1450
+ ssl=True, timeout=None, proxy=None, ssl_opts=None):
1438
1451
  '''
1439
1452
  Send files from the axon as fields in a multipart/form-data HTTP request.
1440
1453
 
@@ -1447,6 +1460,7 @@ class Axon(s_cell.Cell):
1447
1460
  ssl (bool): Perform SSL verification.
1448
1461
  timeout (int): The timeout of the request, in seconds.
1449
1462
  proxy (bool|str|null): Use a specific proxy or disable proxy use.
1463
+ ssl_opts (dict): Additional SSL/TLS options.
1450
1464
 
1451
1465
  Notes:
1452
1466
  The dictionaries in the fields list may contain the following values::
@@ -1460,6 +1474,14 @@ class Axon(s_cell.Cell):
1460
1474
  'content_transfer_encoding': <str> - Optional content-transfer-encoding header for the field.
1461
1475
  }
1462
1476
 
1477
+ The ssl_opts dictionary may contain the following values::
1478
+
1479
+ {
1480
+ 'verify': <bool> - Perform SSL/TLS verification. Is overridden by the ssl argument.
1481
+ 'client_cert': <str> - PEM encoded full chain certificate for use in mTLS.
1482
+ 'client_key': <str> - PEM encoded key for use in mTLS. Alternatively, can be included in client_cert.
1483
+ }
1484
+
1463
1485
  The dictionary returned by this may contain the following values::
1464
1486
 
1465
1487
  {
@@ -1478,20 +1500,12 @@ class Axon(s_cell.Cell):
1478
1500
  if proxy is None:
1479
1501
  proxy = self.conf.get('http:proxy')
1480
1502
 
1481
- cadir = self.conf.get('tls:ca:dir')
1503
+ ssl = self.getCachedSslCtx(opts=ssl_opts, verify=ssl)
1482
1504
 
1483
1505
  connector = None
1484
1506
  if proxy:
1485
1507
  connector = aiohttp_socks.ProxyConnector.from_url(proxy)
1486
1508
 
1487
- if ssl is False:
1488
- pass
1489
- elif cadir:
1490
- ssl = s_common.getSslCtx(cadir)
1491
- else:
1492
- # default aiohttp behavior
1493
- ssl = None
1494
-
1495
1509
  atimeout = aiohttp.ClientTimeout(total=timeout)
1496
1510
 
1497
1511
  async with aiohttp.ClientSession(connector=connector, timeout=atimeout) as sess:
@@ -1556,27 +1570,19 @@ class Axon(s_cell.Cell):
1556
1570
  }
1557
1571
 
1558
1572
  async def wput(self, sha256, url, params=None, headers=None, method='PUT', ssl=True, timeout=None,
1559
- filename=None, filemime=None, proxy=None):
1573
+ filename=None, filemime=None, proxy=None, ssl_opts=None):
1560
1574
  '''
1561
1575
  Stream a blob from the axon as the body of an HTTP request.
1562
1576
  '''
1563
1577
  if proxy is None:
1564
- prox = self.conf.get('http:proxy')
1578
+ proxy = self.conf.get('http:proxy')
1565
1579
 
1566
- cadir = self.conf.get('tls:ca:dir')
1580
+ ssl = self.getCachedSslCtx(opts=ssl_opts, verify=ssl)
1567
1581
 
1568
1582
  connector = None
1569
1583
  if proxy:
1570
1584
  connector = aiohttp_socks.ProxyConnector.from_url(proxy)
1571
1585
 
1572
- if ssl is False:
1573
- pass
1574
- elif cadir:
1575
- ssl = s_common.getSslCtx(cadir)
1576
- else:
1577
- # default aiohttp behavior
1578
- ssl = None
1579
-
1580
1586
  atimeout = aiohttp.ClientTimeout(total=timeout)
1581
1587
 
1582
1588
  async with aiohttp.ClientSession(connector=connector, timeout=atimeout) as sess:
@@ -1638,7 +1644,8 @@ class Axon(s_cell.Cell):
1638
1644
 
1639
1645
  return info
1640
1646
 
1641
- async def wget(self, url, params=None, headers=None, json=None, body=None, method='GET', ssl=True, timeout=None, proxy=None):
1647
+ async def wget(self, url, params=None, headers=None, json=None, body=None, method='GET',
1648
+ ssl=True, timeout=None, proxy=None, ssl_opts=None):
1642
1649
  '''
1643
1650
  Stream a file download directly into the Axon.
1644
1651
 
@@ -1652,11 +1659,20 @@ class Axon(s_cell.Cell):
1652
1659
  ssl (bool): Perform SSL verification.
1653
1660
  timeout (int): The timeout of the request, in seconds.
1654
1661
  proxy (bool|str|null): Use a specific proxy or disable proxy use.
1662
+ ssl_opts (dict): Additional SSL/TLS options.
1655
1663
 
1656
1664
  Notes:
1657
1665
  The response body will be stored, regardless of the response code. The ``ok`` value in the reponse does not
1658
1666
  reflect that a status code, such as a 404, was encountered when retrieving the URL.
1659
1667
 
1668
+ The ssl_opts dictionary may contain the following values::
1669
+
1670
+ {
1671
+ 'verify': <bool> - Perform SSL/TLS verification. Is overridden by the ssl argument.
1672
+ 'client_cert': <str> - PEM encoded full chain certificate for use in mTLS.
1673
+ 'client_key': <str> - PEM encoded key for use in mTLS. Alternatively, can be included in client_cert.
1674
+ }
1675
+
1660
1676
  The dictionary returned by this may contain the following values::
1661
1677
 
1662
1678
  {
@@ -1690,7 +1706,7 @@ class Axon(s_cell.Cell):
1690
1706
  if proxy is None:
1691
1707
  proxy = self.conf.get('http:proxy')
1692
1708
 
1693
- cadir = self.conf.get('tls:ca:dir')
1709
+ ssl = self.getCachedSslCtx(opts=ssl_opts, verify=ssl)
1694
1710
 
1695
1711
  connector = None
1696
1712
  if proxy:
@@ -1698,14 +1714,6 @@ class Axon(s_cell.Cell):
1698
1714
 
1699
1715
  atimeout = aiohttp.ClientTimeout(total=timeout)
1700
1716
 
1701
- if ssl is False:
1702
- pass
1703
- elif cadir:
1704
- ssl = s_common.getSslCtx(cadir)
1705
- else:
1706
- # default aiohttp behavior
1707
- ssl = None
1708
-
1709
1717
  async with aiohttp.ClientSession(connector=connector, timeout=atimeout) as sess:
1710
1718
 
1711
1719
  try:
@@ -3879,6 +3879,10 @@ class Cortex(s_oauth.OAuthMixin, s_cell.Cell): # type: ignore
3879
3879
  if proxyurl is not None:
3880
3880
  conf['http:proxy'] = proxyurl
3881
3881
 
3882
+ cadir = self.conf.get('tls:ca:dir')
3883
+ if cadir is not None:
3884
+ conf['tls:ca:dir'] = cadir
3885
+
3882
3886
  self.axon = await s_axon.Axon.anit(path, conf=conf, parent=self)
3883
3887
  self.axoninfo = await self.axon.getCellInfo()
3884
3888
  self.axon.onfini(self.axready.clear)
@@ -218,7 +218,7 @@ async def t2call(link, meth, args, kwargs):
218
218
 
219
219
  class Daemon(s_base.Base):
220
220
 
221
- async def __anit__(self, certdir=None):
221
+ async def __anit__(self, certdir=None, ahainfo=None):
222
222
 
223
223
  await s_base.Base.__anit__(self)
224
224
 
@@ -227,6 +227,8 @@ class Daemon(s_base.Base):
227
227
  if certdir is None:
228
228
  certdir = s_certdir.getCertDir()
229
229
 
230
+ self.ahainfo = ahainfo
231
+
230
232
  self.certdir = certdir
231
233
  self.televers = s_telepath.televers
232
234
 
@@ -414,13 +416,16 @@ class Daemon(s_base.Base):
414
416
  async def _getSharedItem(self, name):
415
417
  return self.shared.get(name)
416
418
 
417
- async def _onTeleSyn(self, link, mesg):
419
+ async def _onTeleSyn(self, link: s_link.Link, mesg):
418
420
 
419
421
  reply = ('tele:syn', {
420
422
  'vers': self.televers,
421
423
  'retn': (True, None),
422
424
  })
423
425
 
426
+ if self.ahainfo is not None:
427
+ reply[1]['ahainfo'] = self.ahainfo
428
+
424
429
  try:
425
430
 
426
431
  vers = mesg[1].get('vers')
@@ -1,5 +1,6 @@
1
1
  import gc
2
2
  import os
3
+ import ssl
3
4
  import copy
4
5
  import time
5
6
  import fcntl
@@ -12,6 +13,7 @@ import tarfile
12
13
  import argparse
13
14
  import datetime
14
15
  import platform
16
+ import tempfile
15
17
  import functools
16
18
  import contextlib
17
19
  import multiprocessing
@@ -32,6 +34,7 @@ import synapse.lib.boss as s_boss
32
34
  import synapse.lib.coro as s_coro
33
35
  import synapse.lib.hive as s_hive
34
36
  import synapse.lib.link as s_link
37
+ import synapse.lib.cache as s_cache
35
38
  import synapse.lib.const as s_const
36
39
  import synapse.lib.nexus as s_nexus
37
40
  import synapse.lib.queue as s_queue
@@ -58,6 +61,7 @@ import synapse.tools.backup as s_t_backup
58
61
  logger = logging.getLogger(__name__)
59
62
 
60
63
  SLAB_MAP_SIZE = 128 * s_const.mebibyte
64
+ SSLCTX_CACHE_SIZE = 64
61
65
 
62
66
  '''
63
67
  Base classes for the synapse "cell" microservice architecture.
@@ -1151,6 +1155,8 @@ class Cell(s_nexus.Pusher, s_telepath.Aware):
1151
1155
  self.usermetadb = self.slab.initdb('user:meta') # useriden + <valu> -> dict valu
1152
1156
  self.rolemetadb = self.slab.initdb('role:meta') # roleiden + <valu> -> dict valu
1153
1157
 
1158
+ self._sslctx_cache = s_cache.FixedCache(self._makeCachedSslCtx, size=SSLCTX_CACHE_SIZE)
1159
+
1154
1160
  self.hive = await self._initCellHive()
1155
1161
 
1156
1162
  # self.cellinfo, a HiveDict for general purpose persistent storage
@@ -2647,8 +2653,8 @@ class Cell(s_nexus.Pusher, s_telepath.Aware):
2647
2653
  for name, valu in vals.items():
2648
2654
  self.sessstor.set(iden, name, valu)
2649
2655
  sess = self.sessions.get(iden)
2650
- for name, valu in vals.items():
2651
- sess.info[name] = valu
2656
+ if sess is not None:
2657
+ sess.info.update(vals)
2652
2658
 
2653
2659
  @contextlib.contextmanager
2654
2660
  def getTempDir(self):
@@ -2840,7 +2846,11 @@ class Cell(s_nexus.Pusher, s_telepath.Aware):
2840
2846
 
2841
2847
  async def _initCellDmon(self):
2842
2848
 
2843
- self.dmon = await s_daemon.Daemon.anit()
2849
+ ahainfo = {
2850
+ 'name': self.ahasvcname
2851
+ }
2852
+
2853
+ self.dmon = await s_daemon.Daemon.anit(ahainfo=ahainfo)
2844
2854
  self.dmon.share('*', self)
2845
2855
 
2846
2856
  self.onfini(self.dmon.fini)
@@ -4338,3 +4348,60 @@ class Cell(s_nexus.Pusher, s_telepath.Aware):
4338
4348
  self.slab.delete(key_iden, db=self.apikeydb)
4339
4349
  self.slab.delete(lkey, db=self.usermetadb)
4340
4350
  await asyncio.sleep(0)
4351
+
4352
+ def _makeCachedSslCtx(self, opts):
4353
+
4354
+ opts = dict(opts)
4355
+
4356
+ cadir = self.conf.get('tls:ca:dir')
4357
+
4358
+ if cadir is not None:
4359
+ sslctx = s_common.getSslCtx(cadir, purpose=ssl.Purpose.SERVER_AUTH)
4360
+ else:
4361
+ sslctx = ssl.create_default_context(purpose=ssl.Purpose.SERVER_AUTH)
4362
+
4363
+ if not opts['verify']:
4364
+ sslctx.check_hostname = False
4365
+ sslctx.verify_mode = ssl.CERT_NONE
4366
+
4367
+ if not opts['client_cert']:
4368
+ return sslctx
4369
+
4370
+ client_cert = opts['client_cert'].encode()
4371
+
4372
+ if opts['client_key']:
4373
+ client_key = opts['client_key'].encode()
4374
+ else:
4375
+ client_key = None
4376
+ client_key_path = None
4377
+
4378
+ with self.getTempDir() as tmpdir:
4379
+
4380
+ with tempfile.NamedTemporaryFile(dir=tmpdir, mode='wb', delete=False) as fh:
4381
+ fh.write(client_cert)
4382
+ client_cert_path = fh.name
4383
+
4384
+ if client_key:
4385
+ with tempfile.NamedTemporaryFile(dir=tmpdir, mode='wb', delete=False) as fh:
4386
+ fh.write(client_key)
4387
+ client_key_path = fh.name
4388
+
4389
+ try:
4390
+ sslctx.load_cert_chain(client_cert_path, keyfile=client_key_path)
4391
+ except ssl.SSLError as e:
4392
+ raise s_exc.BadArg(mesg=f'Error loading client cert: {str(e)}') from None
4393
+
4394
+ return sslctx
4395
+
4396
+ def getCachedSslCtx(self, opts=None, verify=None):
4397
+
4398
+ if opts is None:
4399
+ opts = {}
4400
+
4401
+ if verify is not None:
4402
+ opts['verify'] = verify
4403
+
4404
+ opts = s_schemas.reqValidSslCtxOpts(opts)
4405
+
4406
+ key = tuple(sorted(opts.items()))
4407
+ return self._sslctx_cache.get(key)
@@ -1529,12 +1529,14 @@ class Layer(s_nexus.Pusher):
1529
1529
 
1530
1530
  mirror = self.layrinfo.get('mirror')
1531
1531
  if mirror is not None:
1532
+ s_common.deprecated('mirror layer configuration option', curv='2.162.0')
1532
1533
  conf = {'retrysleep': 2}
1533
1534
  self.leader = await s_telepath.Client.anit(mirror, conf=conf)
1534
1535
  self.leadtask = self.schedCoro(self._runMirrorLoop())
1535
1536
 
1536
1537
  uplayr = self.layrinfo.get('upstream')
1537
1538
  if uplayr is not None:
1539
+ s_common.deprecated('upstream layer configuration option', curv='2.162.0')
1538
1540
  if isinstance(uplayr, (tuple, list)):
1539
1541
  for layr in uplayr:
1540
1542
  await self.initUpstreamSync(layr)
@@ -4382,9 +4384,14 @@ def getNodeEditPerms(nodeedits):
4382
4384
  '''
4383
4385
  Yields (offs, perm) tuples that can be used in user.allowed()
4384
4386
  '''
4387
+ tags = []
4388
+ tagadds = []
4385
4389
 
4386
4390
  for nodeoffs, (buid, form, edits) in enumerate(nodeedits):
4387
4391
 
4392
+ tags.clear()
4393
+ tagadds.clear()
4394
+
4388
4395
  for editoffs, (edit, info, _) in enumerate(edits):
4389
4396
 
4390
4397
  permoffs = (nodeoffs, editoffs)
@@ -4406,7 +4413,11 @@ def getNodeEditPerms(nodeedits):
4406
4413
  continue
4407
4414
 
4408
4415
  if edit == EDIT_TAG_SET:
4409
- yield (permoffs, ('node', 'tag', 'add', *info[0].split('.')))
4416
+ if info[1] != (None, None):
4417
+ tagadds.append(info[0])
4418
+ yield (permoffs, ('node', 'tag', 'add', *info[0].split('.')))
4419
+ else:
4420
+ tags.append((len(info[0]), editoffs, info[0]))
4410
4421
  continue
4411
4422
 
4412
4423
  if edit == EDIT_TAG_DEL:
@@ -4436,3 +4447,11 @@ def getNodeEditPerms(nodeedits):
4436
4447
  if edit == EDIT_EDGE_DEL:
4437
4448
  yield (permoffs, ('node', 'edge', 'del', info[0]))
4438
4449
  continue
4450
+
4451
+ for _, editoffs, tag in sorted(tags, reverse=True):
4452
+ look = tag + '.'
4453
+ if any([tagadd.startswith(look) for tagadd in tagadds]):
4454
+ continue
4455
+
4456
+ yield ((nodeoffs, editoffs), ('node', 'tag', 'add', *tag.split('.')))
4457
+ tagadds.append(tag)
@@ -230,13 +230,7 @@ class OAuthMixin(s_nexus.Pusher):
230
230
 
231
231
  timeout = aiohttp.ClientTimeout(total=DEFAULT_TIMEOUT)
232
232
 
233
- cadir = self.conf.get('tls:ca:dir')
234
- if ssl_verify is False:
235
- ssl = False
236
- elif cadir:
237
- ssl = s_common.getSslCtx(cadir)
238
- else:
239
- ssl = None
233
+ ssl = self.getCachedSslCtx(verify=ssl_verify)
240
234
 
241
235
  async with aiohttp.ClientSession(timeout=timeout) as sess:
242
236
 
@@ -29,6 +29,7 @@ re_directive = regex.compile(r'^\.\.\s(storm.*|[^:])::(?:\s(.*)$|$)')
29
29
 
30
30
  logger = logging.getLogger(__name__)
31
31
 
32
+ ONLOAD_TIMEOUT = int(os.getenv('SYNDEV_PKG_LOAD_TIMEOUT', 30)) # seconds
32
33
 
33
34
  class OutPutRst(s_output.OutPutStr):
34
35
  '''
@@ -413,8 +414,17 @@ class StormRst(s_base.Base):
413
414
  core = self._reqCore()
414
415
 
415
416
  pkg = s_genpkg.loadPkgProto(text)
417
+
418
+ if pkg.get('onload') is not None:
419
+ waiter = core.waiter(1, 'core:pkg:onload:complete')
420
+ else:
421
+ waiter = None
422
+
416
423
  await core.addStormPkg(pkg)
417
424
 
425
+ if waiter is not None and not await waiter.wait(timeout=ONLOAD_TIMEOUT):
426
+ raise s_exc.SynErr(mesg=f'Package onload failed to run for {pkg.get("name")}')
427
+
418
428
  async def _handleStormPre(self, text):
419
429
  '''
420
430
  Run a Storm query to prepare the Cortex without output.
@@ -453,6 +463,9 @@ class StormRst(s_base.Base):
453
463
 
454
464
  svc = await self._getCell(ctor, conf=svcconf)
455
465
 
466
+ onloadcnt = len([p for p in svc.cellapi._storm_svc_pkgs if p.get('onload') is not None])
467
+ waiter = core.waiter(onloadcnt, 'core:pkg:onload:complete') if onloadcnt else None
468
+
456
469
  svc.dmon.share('svc', svc)
457
470
  root = await svc.auth.getUserByName('root')
458
471
  await root.setPasswd('root')
@@ -463,6 +476,9 @@ class StormRst(s_base.Base):
463
476
  await core.nodes(f'service.add {svcname} {surl}')
464
477
  await core.nodes(f'$lib.service.wait({svcname})')
465
478
 
479
+ if waiter is not None and not await waiter.wait(timeout=ONLOAD_TIMEOUT):
480
+ raise s_exc.SynErr(mesg=f'Package onload failed to run for service {svcname}')
481
+
466
482
  async def _handleStormFail(self, text):
467
483
  valu = json.loads(text)
468
484
  assert valu in (True, False), f'storm-fail must be a boolean: {text}'
@@ -263,3 +263,13 @@ _cellUserApiKeySchema = {
263
263
  ],
264
264
  }
265
265
  reqValidUserApiKeyDef = s_config.getJsValidator(_cellUserApiKeySchema)
266
+
267
+ reqValidSslCtxOpts = s_config.getJsValidator({
268
+ 'type': 'object',
269
+ 'properties': {
270
+ 'verify': {'type': 'boolean', 'default': True},
271
+ 'client_cert': {'type': ['string', 'null'], 'default': None},
272
+ 'client_key': {'type': ['string', 'null'], 'default': None},
273
+ },
274
+ 'additionalProperties': False,
275
+ })
@@ -181,7 +181,7 @@ wgetdescr = '''Retrieve bytes from a URL and store them in the axon. Yields inet
181
181
  Examples:
182
182
 
183
183
  # Specify custom headers and parameters
184
- inet:url=https://vertex.link/foo.bar.txt | wget --headers $lib.dict("User-Agent"="Foo/Bar") --params $lib.dict("clientid"="42")
184
+ inet:url=https://vertex.link/foo.bar.txt | wget --headers ({"User-Agent": "Foo/Bar"}) --params ({"clientid": "42"})
185
185
 
186
186
  # Download multiple URL targets without inbound nodes
187
187
  wget https://vertex.link https://vtx.lk
@@ -3787,7 +3787,23 @@ class MergeCmd(Cmd):
3787
3787
  runt.confirmPropDel(prop, layriden=layr0)
3788
3788
  runt.confirmPropSet(prop, layriden=layr1)
3789
3789
 
3790
+ tags = []
3791
+ tagadds = []
3790
3792
  for tag, valu in sode.get('tags', {}).items():
3793
+ if valu != (None, None):
3794
+ tagadds.append(tag)
3795
+ tagperm = tuple(tag.split('.'))
3796
+ runt.confirm(('node', 'tag', 'del') + tagperm, gateiden=layr0)
3797
+ runt.confirm(('node', 'tag', 'add') + tagperm, gateiden=layr1)
3798
+ else:
3799
+ tags.append((len(tag), tag))
3800
+
3801
+ for _, tag in sorted(tags, reverse=True):
3802
+ look = tag + '.'
3803
+ if any([tagadd.startswith(look) for tagadd in tagadds]):
3804
+ continue
3805
+
3806
+ tagadds.append(tag)
3791
3807
  tagperm = tuple(tag.split('.'))
3792
3808
  runt.confirm(('node', 'tag', 'del') + tagperm, gateiden=layr0)
3793
3809
  runt.confirm(('node', 'tag', 'add') + tagperm, gateiden=layr1)