synapse 2.169.0__tar.gz → 2.171.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 (578) hide show
  1. {synapse-2.169.0/synapse.egg-info → synapse-2.171.0}/PKG-INFO +1 -1
  2. {synapse-2.169.0 → synapse-2.171.0}/pyproject.toml +1 -1
  3. {synapse-2.169.0 → synapse-2.171.0}/synapse/cortex.py +99 -3
  4. {synapse-2.169.0 → synapse-2.171.0}/synapse/datamodel.py +5 -0
  5. {synapse-2.169.0 → synapse-2.171.0}/synapse/lib/ast.py +70 -12
  6. {synapse-2.169.0 → synapse-2.171.0}/synapse/lib/cell.py +76 -7
  7. {synapse-2.169.0 → synapse-2.171.0}/synapse/lib/layer.py +75 -6
  8. {synapse-2.169.0 → synapse-2.171.0}/synapse/lib/lmdbslab.py +17 -0
  9. {synapse-2.169.0 → synapse-2.171.0}/synapse/lib/node.py +7 -0
  10. {synapse-2.169.0 → synapse-2.171.0}/synapse/lib/snap.py +22 -4
  11. {synapse-2.169.0 → synapse-2.171.0}/synapse/lib/storm.py +1 -1
  12. {synapse-2.169.0 → synapse-2.171.0}/synapse/lib/stormlib/cortex.py +1 -1
  13. {synapse-2.169.0 → synapse-2.171.0}/synapse/lib/stormlib/model.py +339 -40
  14. {synapse-2.169.0 → synapse-2.171.0}/synapse/lib/stormtypes.py +58 -1
  15. {synapse-2.169.0 → synapse-2.171.0}/synapse/lib/types.py +36 -1
  16. {synapse-2.169.0 → synapse-2.171.0}/synapse/lib/version.py +2 -2
  17. {synapse-2.169.0 → synapse-2.171.0}/synapse/lib/view.py +94 -15
  18. {synapse-2.169.0 → synapse-2.171.0}/synapse/models/files.py +40 -0
  19. {synapse-2.169.0 → synapse-2.171.0}/synapse/models/inet.py +8 -4
  20. {synapse-2.169.0 → synapse-2.171.0}/synapse/models/infotech.py +355 -17
  21. synapse-2.171.0/synapse/tests/files/cpedata.json +525034 -0
  22. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_cortex.py +108 -0
  23. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_lib_ast.py +66 -0
  24. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_lib_cell.py +112 -0
  25. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_lib_layer.py +52 -1
  26. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_lib_lmdbslab.py +36 -0
  27. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_lib_scrape.py +72 -71
  28. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_lib_snap.py +16 -1
  29. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_lib_storm.py +118 -0
  30. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_lib_stormlib_cortex.py +15 -0
  31. synapse-2.171.0/synapse/tests/test_lib_stormlib_model.py +829 -0
  32. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_lib_stormtypes.py +147 -15
  33. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_lib_types.py +21 -0
  34. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_lib_view.py +77 -0
  35. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_model_files.py +52 -0
  36. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_model_inet.py +63 -1
  37. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_model_infotech.py +187 -26
  38. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/utils.py +42 -9
  39. {synapse-2.169.0 → synapse-2.171.0/synapse.egg-info}/PKG-INFO +1 -1
  40. {synapse-2.169.0 → synapse-2.171.0}/synapse.egg-info/SOURCES.txt +1 -0
  41. synapse-2.169.0/synapse/tests/test_lib_stormlib_model.py +0 -402
  42. {synapse-2.169.0 → synapse-2.171.0}/LICENSE +0 -0
  43. {synapse-2.169.0 → synapse-2.171.0}/README.rst +0 -0
  44. {synapse-2.169.0 → synapse-2.171.0}/setup.cfg +0 -0
  45. {synapse-2.169.0 → synapse-2.171.0}/synapse/__init__.py +0 -0
  46. {synapse-2.169.0 → synapse-2.171.0}/synapse/axon.py +0 -0
  47. {synapse-2.169.0 → synapse-2.171.0}/synapse/cells.py +0 -0
  48. {synapse-2.169.0 → synapse-2.171.0}/synapse/cmds/__init__.py +0 -0
  49. {synapse-2.169.0 → synapse-2.171.0}/synapse/cmds/boss.py +0 -0
  50. {synapse-2.169.0 → synapse-2.171.0}/synapse/cmds/cortex.py +0 -0
  51. {synapse-2.169.0 → synapse-2.171.0}/synapse/cmds/hive.py +0 -0
  52. {synapse-2.169.0 → synapse-2.171.0}/synapse/common.py +0 -0
  53. {synapse-2.169.0 → synapse-2.171.0}/synapse/cryotank.py +0 -0
  54. {synapse-2.169.0 → synapse-2.171.0}/synapse/daemon.py +0 -0
  55. {synapse-2.169.0 → synapse-2.171.0}/synapse/data/__init__.py +0 -0
  56. {synapse-2.169.0 → synapse-2.171.0}/synapse/data/attack-flow/LICENSE.txt +0 -0
  57. {synapse-2.169.0 → synapse-2.171.0}/synapse/data/attack-flow/README.md +0 -0
  58. {synapse-2.169.0 → synapse-2.171.0}/synapse/data/attack-flow/attack-flow-schema-2.0.0.json +0 -0
  59. {synapse-2.169.0 → synapse-2.171.0}/synapse/data/certs/cas/The Vertex Project Intermediate CA 00.crt +0 -0
  60. {synapse-2.169.0 → synapse-2.171.0}/synapse/data/certs/cas/The Vertex Project ROOT CA.crt +0 -0
  61. {synapse-2.169.0 → synapse-2.171.0}/synapse/data/certs/crls/The Vertex Project Intermediate CA 00.crl +0 -0
  62. {synapse-2.169.0 → synapse-2.171.0}/synapse/data/certs/crls/The Vertex Project ROOT CA.crl +0 -0
  63. {synapse-2.169.0 → synapse-2.171.0}/synapse/data/iana.tlds.mpk +0 -0
  64. {synapse-2.169.0 → synapse-2.171.0}/synapse/data/jsonschemas/README.md +0 -0
  65. {synapse-2.169.0 → synapse-2.171.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/LICENSE.txt +0 -0
  66. {synapse-2.169.0 → synapse-2.171.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/common/binary.json +0 -0
  67. {synapse-2.169.0 → synapse-2.171.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/common/bundle.json +0 -0
  68. {synapse-2.169.0 → synapse-2.171.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/common/core.json +0 -0
  69. {synapse-2.169.0 → synapse-2.171.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/common/cyber-observable-core.json +0 -0
  70. {synapse-2.169.0 → synapse-2.171.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/common/dictionary.json +0 -0
  71. {synapse-2.169.0 → synapse-2.171.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/common/extension-definition.json +0 -0
  72. {synapse-2.169.0 → synapse-2.171.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/common/extension.json +0 -0
  73. {synapse-2.169.0 → synapse-2.171.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/common/external-reference.json +0 -0
  74. {synapse-2.169.0 → synapse-2.171.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/common/granular-marking.json +0 -0
  75. {synapse-2.169.0 → synapse-2.171.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/common/hashes-type.json +0 -0
  76. {synapse-2.169.0 → synapse-2.171.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/common/hex.json +0 -0
  77. {synapse-2.169.0 → synapse-2.171.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/common/identifier.json +0 -0
  78. {synapse-2.169.0 → synapse-2.171.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/common/kill-chain-phase.json +0 -0
  79. {synapse-2.169.0 → synapse-2.171.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/common/language-content.json +0 -0
  80. {synapse-2.169.0 → synapse-2.171.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/common/marking-definition.json +0 -0
  81. {synapse-2.169.0 → synapse-2.171.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/common/properties.json +0 -0
  82. {synapse-2.169.0 → synapse-2.171.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/common/timestamp.json +0 -0
  83. {synapse-2.169.0 → synapse-2.171.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/common/url-regex.json +0 -0
  84. {synapse-2.169.0 → synapse-2.171.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/observables/artifact.json +0 -0
  85. {synapse-2.169.0 → synapse-2.171.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/observables/autonomous-system.json +0 -0
  86. {synapse-2.169.0 → synapse-2.171.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/observables/directory.json +0 -0
  87. {synapse-2.169.0 → synapse-2.171.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/observables/domain-name.json +0 -0
  88. {synapse-2.169.0 → synapse-2.171.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/observables/email-addr.json +0 -0
  89. {synapse-2.169.0 → synapse-2.171.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/observables/email-message.json +0 -0
  90. {synapse-2.169.0 → synapse-2.171.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/observables/file.json +0 -0
  91. {synapse-2.169.0 → synapse-2.171.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/observables/ipv4-addr.json +0 -0
  92. {synapse-2.169.0 → synapse-2.171.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/observables/ipv6-addr.json +0 -0
  93. {synapse-2.169.0 → synapse-2.171.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/observables/mac-addr.json +0 -0
  94. {synapse-2.169.0 → synapse-2.171.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/observables/mutex.json +0 -0
  95. {synapse-2.169.0 → synapse-2.171.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/observables/network-traffic.json +0 -0
  96. {synapse-2.169.0 → synapse-2.171.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/observables/process.json +0 -0
  97. {synapse-2.169.0 → synapse-2.171.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/observables/software.json +0 -0
  98. {synapse-2.169.0 → synapse-2.171.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/observables/url.json +0 -0
  99. {synapse-2.169.0 → synapse-2.171.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/observables/user-account.json +0 -0
  100. {synapse-2.169.0 → synapse-2.171.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/observables/windows-registry-key.json +0 -0
  101. {synapse-2.169.0 → synapse-2.171.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/observables/x509-certificate.json +0 -0
  102. {synapse-2.169.0 → synapse-2.171.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/sdos/attack-pattern.json +0 -0
  103. {synapse-2.169.0 → synapse-2.171.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/sdos/campaign.json +0 -0
  104. {synapse-2.169.0 → synapse-2.171.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/sdos/course-of-action.json +0 -0
  105. {synapse-2.169.0 → synapse-2.171.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/sdos/grouping.json +0 -0
  106. {synapse-2.169.0 → synapse-2.171.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/sdos/identity.json +0 -0
  107. {synapse-2.169.0 → synapse-2.171.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/sdos/incident.json +0 -0
  108. {synapse-2.169.0 → synapse-2.171.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/sdos/indicator.json +0 -0
  109. {synapse-2.169.0 → synapse-2.171.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/sdos/infrastructure.json +0 -0
  110. {synapse-2.169.0 → synapse-2.171.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/sdos/intrusion-set.json +0 -0
  111. {synapse-2.169.0 → synapse-2.171.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/sdos/location.json +0 -0
  112. {synapse-2.169.0 → synapse-2.171.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/sdos/malware-analysis.json +0 -0
  113. {synapse-2.169.0 → synapse-2.171.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/sdos/malware.json +0 -0
  114. {synapse-2.169.0 → synapse-2.171.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/sdos/note.json +0 -0
  115. {synapse-2.169.0 → synapse-2.171.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/sdos/observed-data.json +0 -0
  116. {synapse-2.169.0 → synapse-2.171.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/sdos/opinion.json +0 -0
  117. {synapse-2.169.0 → synapse-2.171.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/sdos/report.json +0 -0
  118. {synapse-2.169.0 → synapse-2.171.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/sdos/threat-actor.json +0 -0
  119. {synapse-2.169.0 → synapse-2.171.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/sdos/tool.json +0 -0
  120. {synapse-2.169.0 → synapse-2.171.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/sdos/vulnerability.json +0 -0
  121. {synapse-2.169.0 → synapse-2.171.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/sros/relationship.json +0 -0
  122. {synapse-2.169.0 → synapse-2.171.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/sros/sighting.json +0 -0
  123. {synapse-2.169.0 → synapse-2.171.0}/synapse/exc.py +0 -0
  124. {synapse-2.169.0 → synapse-2.171.0}/synapse/glob.py +0 -0
  125. {synapse-2.169.0 → synapse-2.171.0}/synapse/lib/__init__.py +0 -0
  126. {synapse-2.169.0 → synapse-2.171.0}/synapse/lib/agenda.py +0 -0
  127. {synapse-2.169.0 → synapse-2.171.0}/synapse/lib/aha.py +0 -0
  128. {synapse-2.169.0 → synapse-2.171.0}/synapse/lib/autodoc.py +0 -0
  129. {synapse-2.169.0 → synapse-2.171.0}/synapse/lib/base.py +0 -0
  130. {synapse-2.169.0 → synapse-2.171.0}/synapse/lib/boss.py +0 -0
  131. {synapse-2.169.0 → synapse-2.171.0}/synapse/lib/cache.py +0 -0
  132. {synapse-2.169.0 → synapse-2.171.0}/synapse/lib/certdir.py +0 -0
  133. {synapse-2.169.0 → synapse-2.171.0}/synapse/lib/chop.py +0 -0
  134. {synapse-2.169.0 → synapse-2.171.0}/synapse/lib/cli.py +0 -0
  135. {synapse-2.169.0 → synapse-2.171.0}/synapse/lib/cmd.py +0 -0
  136. {synapse-2.169.0 → synapse-2.171.0}/synapse/lib/cmdr.py +0 -0
  137. {synapse-2.169.0 → synapse-2.171.0}/synapse/lib/config.py +0 -0
  138. {synapse-2.169.0 → synapse-2.171.0}/synapse/lib/const.py +0 -0
  139. {synapse-2.169.0 → synapse-2.171.0}/synapse/lib/coro.py +0 -0
  140. {synapse-2.169.0 → synapse-2.171.0}/synapse/lib/crypto/__init__.py +0 -0
  141. {synapse-2.169.0 → synapse-2.171.0}/synapse/lib/crypto/coin.py +0 -0
  142. {synapse-2.169.0 → synapse-2.171.0}/synapse/lib/crypto/ecc.py +0 -0
  143. {synapse-2.169.0 → synapse-2.171.0}/synapse/lib/crypto/passwd.py +0 -0
  144. {synapse-2.169.0 → synapse-2.171.0}/synapse/lib/crypto/rsa.py +0 -0
  145. {synapse-2.169.0 → synapse-2.171.0}/synapse/lib/crypto/tinfoil.py +0 -0
  146. {synapse-2.169.0 → synapse-2.171.0}/synapse/lib/datfile.py +0 -0
  147. {synapse-2.169.0 → synapse-2.171.0}/synapse/lib/dyndeps.py +0 -0
  148. {synapse-2.169.0 → synapse-2.171.0}/synapse/lib/encoding.py +0 -0
  149. {synapse-2.169.0 → synapse-2.171.0}/synapse/lib/gis.py +0 -0
  150. {synapse-2.169.0 → synapse-2.171.0}/synapse/lib/grammar.py +0 -0
  151. {synapse-2.169.0 → synapse-2.171.0}/synapse/lib/hashitem.py +0 -0
  152. {synapse-2.169.0 → synapse-2.171.0}/synapse/lib/hashset.py +0 -0
  153. {synapse-2.169.0 → synapse-2.171.0}/synapse/lib/health.py +0 -0
  154. {synapse-2.169.0 → synapse-2.171.0}/synapse/lib/hive.py +0 -0
  155. {synapse-2.169.0 → synapse-2.171.0}/synapse/lib/hiveauth.py +0 -0
  156. {synapse-2.169.0 → synapse-2.171.0}/synapse/lib/httpapi.py +0 -0
  157. {synapse-2.169.0 → synapse-2.171.0}/synapse/lib/ingest.py +0 -0
  158. {synapse-2.169.0 → synapse-2.171.0}/synapse/lib/interval.py +0 -0
  159. {synapse-2.169.0 → synapse-2.171.0}/synapse/lib/jsonstor.py +0 -0
  160. {synapse-2.169.0 → synapse-2.171.0}/synapse/lib/jupyter.py +0 -0
  161. {synapse-2.169.0 → synapse-2.171.0}/synapse/lib/link.py +0 -0
  162. {synapse-2.169.0 → synapse-2.171.0}/synapse/lib/modelrev.py +0 -0
  163. {synapse-2.169.0 → synapse-2.171.0}/synapse/lib/module.py +0 -0
  164. {synapse-2.169.0 → synapse-2.171.0}/synapse/lib/modules.py +0 -0
  165. {synapse-2.169.0 → synapse-2.171.0}/synapse/lib/msgpack.py +0 -0
  166. {synapse-2.169.0 → synapse-2.171.0}/synapse/lib/multislabseqn.py +0 -0
  167. {synapse-2.169.0 → synapse-2.171.0}/synapse/lib/nexus.py +0 -0
  168. {synapse-2.169.0 → synapse-2.171.0}/synapse/lib/oauth.py +0 -0
  169. {synapse-2.169.0 → synapse-2.171.0}/synapse/lib/output.py +0 -0
  170. {synapse-2.169.0 → synapse-2.171.0}/synapse/lib/parser.py +0 -0
  171. {synapse-2.169.0 → synapse-2.171.0}/synapse/lib/platforms/__init__.py +0 -0
  172. {synapse-2.169.0 → synapse-2.171.0}/synapse/lib/platforms/common.py +0 -0
  173. {synapse-2.169.0 → synapse-2.171.0}/synapse/lib/platforms/darwin.py +0 -0
  174. {synapse-2.169.0 → synapse-2.171.0}/synapse/lib/platforms/freebsd.py +0 -0
  175. {synapse-2.169.0 → synapse-2.171.0}/synapse/lib/platforms/linux.py +0 -0
  176. {synapse-2.169.0 → synapse-2.171.0}/synapse/lib/platforms/windows.py +0 -0
  177. {synapse-2.169.0 → synapse-2.171.0}/synapse/lib/queue.py +0 -0
  178. {synapse-2.169.0 → synapse-2.171.0}/synapse/lib/ratelimit.py +0 -0
  179. {synapse-2.169.0 → synapse-2.171.0}/synapse/lib/reflect.py +0 -0
  180. {synapse-2.169.0 → synapse-2.171.0}/synapse/lib/rstorm.py +0 -0
  181. {synapse-2.169.0 → synapse-2.171.0}/synapse/lib/schemas.py +0 -0
  182. {synapse-2.169.0 → synapse-2.171.0}/synapse/lib/scope.py +0 -0
  183. {synapse-2.169.0 → synapse-2.171.0}/synapse/lib/scrape.py +0 -0
  184. {synapse-2.169.0 → synapse-2.171.0}/synapse/lib/share.py +0 -0
  185. {synapse-2.169.0 → synapse-2.171.0}/synapse/lib/slaboffs.py +0 -0
  186. {synapse-2.169.0 → synapse-2.171.0}/synapse/lib/slabseqn.py +0 -0
  187. {synapse-2.169.0 → synapse-2.171.0}/synapse/lib/spooled.py +0 -0
  188. {synapse-2.169.0 → synapse-2.171.0}/synapse/lib/storm.lark +0 -0
  189. {synapse-2.169.0 → synapse-2.171.0}/synapse/lib/storm_format.py +0 -0
  190. {synapse-2.169.0 → synapse-2.171.0}/synapse/lib/stormctrl.py +0 -0
  191. {synapse-2.169.0 → synapse-2.171.0}/synapse/lib/stormhttp.py +0 -0
  192. {synapse-2.169.0 → synapse-2.171.0}/synapse/lib/stormlib/__init__.py +0 -0
  193. {synapse-2.169.0 → synapse-2.171.0}/synapse/lib/stormlib/aha.py +0 -0
  194. {synapse-2.169.0 → synapse-2.171.0}/synapse/lib/stormlib/auth.py +0 -0
  195. {synapse-2.169.0 → synapse-2.171.0}/synapse/lib/stormlib/backup.py +0 -0
  196. {synapse-2.169.0 → synapse-2.171.0}/synapse/lib/stormlib/basex.py +0 -0
  197. {synapse-2.169.0 → synapse-2.171.0}/synapse/lib/stormlib/cache.py +0 -0
  198. {synapse-2.169.0 → synapse-2.171.0}/synapse/lib/stormlib/cell.py +0 -0
  199. {synapse-2.169.0 → synapse-2.171.0}/synapse/lib/stormlib/compression.py +0 -0
  200. {synapse-2.169.0 → synapse-2.171.0}/synapse/lib/stormlib/easyperm.py +0 -0
  201. {synapse-2.169.0 → synapse-2.171.0}/synapse/lib/stormlib/ethereum.py +0 -0
  202. {synapse-2.169.0 → synapse-2.171.0}/synapse/lib/stormlib/gen.py +0 -0
  203. {synapse-2.169.0 → synapse-2.171.0}/synapse/lib/stormlib/gis.py +0 -0
  204. {synapse-2.169.0 → synapse-2.171.0}/synapse/lib/stormlib/graph.py +0 -0
  205. {synapse-2.169.0 → synapse-2.171.0}/synapse/lib/stormlib/hashes.py +0 -0
  206. {synapse-2.169.0 → synapse-2.171.0}/synapse/lib/stormlib/hex.py +0 -0
  207. {synapse-2.169.0 → synapse-2.171.0}/synapse/lib/stormlib/imap.py +0 -0
  208. {synapse-2.169.0 → synapse-2.171.0}/synapse/lib/stormlib/infosec.py +0 -0
  209. {synapse-2.169.0 → synapse-2.171.0}/synapse/lib/stormlib/ipv6.py +0 -0
  210. {synapse-2.169.0 → synapse-2.171.0}/synapse/lib/stormlib/iters.py +0 -0
  211. {synapse-2.169.0 → synapse-2.171.0}/synapse/lib/stormlib/json.py +0 -0
  212. {synapse-2.169.0 → synapse-2.171.0}/synapse/lib/stormlib/log.py +0 -0
  213. {synapse-2.169.0 → synapse-2.171.0}/synapse/lib/stormlib/macro.py +0 -0
  214. {synapse-2.169.0 → synapse-2.171.0}/synapse/lib/stormlib/math.py +0 -0
  215. {synapse-2.169.0 → synapse-2.171.0}/synapse/lib/stormlib/mime.py +0 -0
  216. {synapse-2.169.0 → synapse-2.171.0}/synapse/lib/stormlib/modelext.py +0 -0
  217. {synapse-2.169.0 → synapse-2.171.0}/synapse/lib/stormlib/notifications.py +0 -0
  218. {synapse-2.169.0 → synapse-2.171.0}/synapse/lib/stormlib/oauth.py +0 -0
  219. {synapse-2.169.0 → synapse-2.171.0}/synapse/lib/stormlib/pack.py +0 -0
  220. {synapse-2.169.0 → synapse-2.171.0}/synapse/lib/stormlib/project.py +0 -0
  221. {synapse-2.169.0 → synapse-2.171.0}/synapse/lib/stormlib/random.py +0 -0
  222. {synapse-2.169.0 → synapse-2.171.0}/synapse/lib/stormlib/scrape.py +0 -0
  223. {synapse-2.169.0 → synapse-2.171.0}/synapse/lib/stormlib/smtp.py +0 -0
  224. {synapse-2.169.0 → synapse-2.171.0}/synapse/lib/stormlib/spooled.py +0 -0
  225. {synapse-2.169.0 → synapse-2.171.0}/synapse/lib/stormlib/stats.py +0 -0
  226. {synapse-2.169.0 → synapse-2.171.0}/synapse/lib/stormlib/stix.py +0 -0
  227. {synapse-2.169.0 → synapse-2.171.0}/synapse/lib/stormlib/storm.py +0 -0
  228. {synapse-2.169.0 → synapse-2.171.0}/synapse/lib/stormlib/vault.py +0 -0
  229. {synapse-2.169.0 → synapse-2.171.0}/synapse/lib/stormlib/version.py +0 -0
  230. {synapse-2.169.0 → synapse-2.171.0}/synapse/lib/stormlib/xml.py +0 -0
  231. {synapse-2.169.0 → synapse-2.171.0}/synapse/lib/stormlib/yaml.py +0 -0
  232. {synapse-2.169.0 → synapse-2.171.0}/synapse/lib/stormsvc.py +0 -0
  233. {synapse-2.169.0 → synapse-2.171.0}/synapse/lib/stormwhois.py +0 -0
  234. {synapse-2.169.0 → synapse-2.171.0}/synapse/lib/structlog.py +0 -0
  235. {synapse-2.169.0 → synapse-2.171.0}/synapse/lib/task.py +0 -0
  236. {synapse-2.169.0 → synapse-2.171.0}/synapse/lib/thishost.py +0 -0
  237. {synapse-2.169.0 → synapse-2.171.0}/synapse/lib/thisplat.py +0 -0
  238. {synapse-2.169.0 → synapse-2.171.0}/synapse/lib/threads.py +0 -0
  239. {synapse-2.169.0 → synapse-2.171.0}/synapse/lib/time.py +0 -0
  240. {synapse-2.169.0 → synapse-2.171.0}/synapse/lib/trigger.py +0 -0
  241. {synapse-2.169.0 → synapse-2.171.0}/synapse/lib/urlhelp.py +0 -0
  242. {synapse-2.169.0 → synapse-2.171.0}/synapse/lookup/__init__.py +0 -0
  243. {synapse-2.169.0 → synapse-2.171.0}/synapse/lookup/cvss.py +0 -0
  244. {synapse-2.169.0 → synapse-2.171.0}/synapse/lookup/iana.py +0 -0
  245. {synapse-2.169.0 → synapse-2.171.0}/synapse/lookup/iso3166.py +0 -0
  246. {synapse-2.169.0 → synapse-2.171.0}/synapse/lookup/macho.py +0 -0
  247. {synapse-2.169.0 → synapse-2.171.0}/synapse/lookup/pe.py +0 -0
  248. {synapse-2.169.0 → synapse-2.171.0}/synapse/lookup/phonenum.py +0 -0
  249. {synapse-2.169.0 → synapse-2.171.0}/synapse/lookup/timezones.py +0 -0
  250. {synapse-2.169.0 → synapse-2.171.0}/synapse/mindmeld.py +0 -0
  251. {synapse-2.169.0 → synapse-2.171.0}/synapse/models/__init__.py +0 -0
  252. {synapse-2.169.0 → synapse-2.171.0}/synapse/models/auth.py +0 -0
  253. {synapse-2.169.0 → synapse-2.171.0}/synapse/models/base.py +0 -0
  254. {synapse-2.169.0 → synapse-2.171.0}/synapse/models/belief.py +0 -0
  255. {synapse-2.169.0 → synapse-2.171.0}/synapse/models/biz.py +0 -0
  256. {synapse-2.169.0 → synapse-2.171.0}/synapse/models/crypto.py +0 -0
  257. {synapse-2.169.0 → synapse-2.171.0}/synapse/models/dns.py +0 -0
  258. {synapse-2.169.0 → synapse-2.171.0}/synapse/models/economic.py +0 -0
  259. {synapse-2.169.0 → synapse-2.171.0}/synapse/models/geopol.py +0 -0
  260. {synapse-2.169.0 → synapse-2.171.0}/synapse/models/geospace.py +0 -0
  261. {synapse-2.169.0 → synapse-2.171.0}/synapse/models/gov/__init__.py +0 -0
  262. {synapse-2.169.0 → synapse-2.171.0}/synapse/models/gov/cn.py +0 -0
  263. {synapse-2.169.0 → synapse-2.171.0}/synapse/models/gov/intl.py +0 -0
  264. {synapse-2.169.0 → synapse-2.171.0}/synapse/models/gov/us.py +0 -0
  265. {synapse-2.169.0 → synapse-2.171.0}/synapse/models/language.py +0 -0
  266. {synapse-2.169.0 → synapse-2.171.0}/synapse/models/material.py +0 -0
  267. {synapse-2.169.0 → synapse-2.171.0}/synapse/models/media.py +0 -0
  268. {synapse-2.169.0 → synapse-2.171.0}/synapse/models/orgs.py +0 -0
  269. {synapse-2.169.0 → synapse-2.171.0}/synapse/models/person.py +0 -0
  270. {synapse-2.169.0 → synapse-2.171.0}/synapse/models/planning.py +0 -0
  271. {synapse-2.169.0 → synapse-2.171.0}/synapse/models/proj.py +0 -0
  272. {synapse-2.169.0 → synapse-2.171.0}/synapse/models/risk.py +0 -0
  273. {synapse-2.169.0 → synapse-2.171.0}/synapse/models/science.py +0 -0
  274. {synapse-2.169.0 → synapse-2.171.0}/synapse/models/syn.py +0 -0
  275. {synapse-2.169.0 → synapse-2.171.0}/synapse/models/telco.py +0 -0
  276. {synapse-2.169.0 → synapse-2.171.0}/synapse/models/transport.py +0 -0
  277. {synapse-2.169.0 → synapse-2.171.0}/synapse/servers/__init__.py +0 -0
  278. {synapse-2.169.0 → synapse-2.171.0}/synapse/servers/aha.py +0 -0
  279. {synapse-2.169.0 → synapse-2.171.0}/synapse/servers/axon.py +0 -0
  280. {synapse-2.169.0 → synapse-2.171.0}/synapse/servers/cell.py +0 -0
  281. {synapse-2.169.0 → synapse-2.171.0}/synapse/servers/cortex.py +0 -0
  282. {synapse-2.169.0 → synapse-2.171.0}/synapse/servers/cryotank.py +0 -0
  283. {synapse-2.169.0 → synapse-2.171.0}/synapse/servers/jsonstor.py +0 -0
  284. {synapse-2.169.0 → synapse-2.171.0}/synapse/servers/stemcell.py +0 -0
  285. {synapse-2.169.0 → synapse-2.171.0}/synapse/telepath.py +0 -0
  286. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/__init__.py +0 -0
  287. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/files/TestUtilsGetrefs.test_basics.yaml +0 -0
  288. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/files/__init__.py +0 -0
  289. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/files/attack_flow/CISA AA22-138B VMWare Workspace (Alt).json +0 -0
  290. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/files/attack_flow/CISA_Iranian_APT.json +0 -0
  291. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/files/certdir/cas/ca.crt +0 -0
  292. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/files/certdir/cas/ca.key +0 -0
  293. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/files/certdir/hosts/localhost.crt +0 -0
  294. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/files/certdir/hosts/localhost.key +0 -0
  295. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/files/certdir/users/root.crt +0 -0
  296. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/files/certdir/users/root.key +0 -0
  297. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/files/certdir/users/user.crt +0 -0
  298. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/files/certdir/users/user.key +0 -0
  299. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/files/rstorm/httpresp1.json +0 -0
  300. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/files/rstorm/httpresp2.json +0 -0
  301. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/files/rstorm/httpresp3.json +0 -0
  302. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/files/rstorm/httprespmulti.yaml +0 -0
  303. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/files/rstorm/testsvc.py +0 -0
  304. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/files/stix_export/basic.json +0 -0
  305. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/files/stix_export/custom0.json +0 -0
  306. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/files/stix_export/risk0.json +0 -0
  307. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/files/stix_import/apt1.json +0 -0
  308. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/files/stix_import/oasis-example-00.json +0 -0
  309. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/files/stormcov/argvquery.storm +0 -0
  310. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/files/stormcov/dupesubs.storm +0 -0
  311. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/files/stormcov/lookup.storm +0 -0
  312. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/files/stormcov/pivot.storm +0 -0
  313. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/files/stormcov/spin.storm +0 -0
  314. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/files/stormcov/stormctrl.storm +0 -0
  315. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/files/stormmod/common +0 -0
  316. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/files/stormpkg/badapidef.yaml +0 -0
  317. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/files/stormpkg/badcmdname.yaml +0 -0
  318. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/files/stormpkg/badjsonpkg.yaml +0 -0
  319. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/files/stormpkg/docs/foobar.md +0 -0
  320. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/files/stormpkg/docs/foobar.svg +0 -0
  321. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/files/stormpkg/dotstorm/dotstorm.yaml +0 -0
  322. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/files/stormpkg/dotstorm/storm/commands/dotstorm.bar.storm +0 -0
  323. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/files/stormpkg/dotstorm/storm/modules/dotstorm.foo.storm +0 -0
  324. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/files/stormpkg/nocontent.yaml +0 -0
  325. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/files/stormpkg/nomime.yaml +0 -0
  326. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/files/stormpkg/nopath.yaml +0 -0
  327. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/files/stormpkg/nosuchfile.yaml +0 -0
  328. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/files/stormpkg/notitle.yaml +0 -0
  329. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/files/stormpkg/optic/index.html +0 -0
  330. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/files/stormpkg/storm/commands/invalidCMD +0 -0
  331. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/files/stormpkg/storm/commands/testpkg.baz +0 -0
  332. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/files/stormpkg/storm/commands/testpkgcmd +0 -0
  333. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/files/stormpkg/storm/modules/apimod +0 -0
  334. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/files/stormpkg/storm/modules/testmod +0 -0
  335. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/files/stormpkg/testpkg.yaml +0 -0
  336. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/files/stormpkg/workflows/testpkg-bam.newp +0 -0
  337. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/files/stormpkg/workflows/testpkg-baz.yaml +0 -0
  338. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/files/stormpkg/workflows/testpkg-foo.yaml +0 -0
  339. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/files/test.dat +0 -0
  340. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/files/testcore/cell.yaml +0 -0
  341. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/nopmod.py +0 -0
  342. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_axon.py +0 -0
  343. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_cmds_boss.py +0 -0
  344. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_cmds_cortex.py +0 -0
  345. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_cmds_hive.py +0 -0
  346. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_common.py +0 -0
  347. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_cryotank.py +0 -0
  348. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_daemon.py +0 -0
  349. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_data.py +0 -0
  350. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_datamodel.py +0 -0
  351. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_exc.py +0 -0
  352. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_glob.py +0 -0
  353. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_init.py +0 -0
  354. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_lib_agenda.py +0 -0
  355. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_lib_aha.py +0 -0
  356. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_lib_autodoc.py +0 -0
  357. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_lib_base.py +0 -0
  358. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_lib_boss.py +0 -0
  359. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_lib_cache.py +0 -0
  360. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_lib_certdir.py +0 -0
  361. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_lib_chop.py +0 -0
  362. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_lib_cli.py +0 -0
  363. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_lib_config.py +0 -0
  364. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_lib_const.py +0 -0
  365. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_lib_coro.py +0 -0
  366. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_lib_crypto_coin.py +0 -0
  367. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_lib_crypto_ecc.py +0 -0
  368. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_lib_crypto_passwd.py +0 -0
  369. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_lib_crypto_tinfoil.py +0 -0
  370. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_lib_datfile.py +0 -0
  371. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_lib_dyndeps.py +0 -0
  372. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_lib_encoding.py +0 -0
  373. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_lib_gis.py +0 -0
  374. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_lib_grammar.py +0 -0
  375. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_lib_hashitem.py +0 -0
  376. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_lib_hashset.py +0 -0
  377. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_lib_health.py +0 -0
  378. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_lib_hive.py +0 -0
  379. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_lib_hiveauth.py +0 -0
  380. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_lib_httpapi.py +0 -0
  381. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_lib_interval.py +0 -0
  382. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_lib_jsonstor.py +0 -0
  383. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_lib_jupyter.py +0 -0
  384. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_lib_link.py +0 -0
  385. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_lib_modelrev.py +0 -0
  386. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_lib_module.py +0 -0
  387. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_lib_msgpack.py +0 -0
  388. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_lib_multislabseqn.py +0 -0
  389. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_lib_nexus.py +0 -0
  390. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_lib_node.py +0 -0
  391. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_lib_output.py +0 -0
  392. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_lib_platforms_linux.py +0 -0
  393. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_lib_queue.py +0 -0
  394. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_lib_ratelimit.py +0 -0
  395. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_lib_reflect.py +0 -0
  396. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_lib_rstorm.py +0 -0
  397. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_lib_scope.py +0 -0
  398. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_lib_slaboffs.py +0 -0
  399. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_lib_slabseqn.py +0 -0
  400. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_lib_spooled.py +0 -0
  401. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_lib_storm_format.py +0 -0
  402. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_lib_stormhttp.py +0 -0
  403. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_lib_stormlib_aha.py +0 -0
  404. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_lib_stormlib_auth.py +0 -0
  405. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_lib_stormlib_backup.py +0 -0
  406. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_lib_stormlib_basex.py +0 -0
  407. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_lib_stormlib_cache.py +0 -0
  408. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_lib_stormlib_cell.py +0 -0
  409. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_lib_stormlib_compression.py +0 -0
  410. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_lib_stormlib_easyperm.py +0 -0
  411. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_lib_stormlib_ethereum.py +0 -0
  412. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_lib_stormlib_gen.py +0 -0
  413. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_lib_stormlib_gis.py +0 -0
  414. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_lib_stormlib_hashes.py +0 -0
  415. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_lib_stormlib_hex.py +0 -0
  416. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_lib_stormlib_imap.py +0 -0
  417. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_lib_stormlib_infosec.py +0 -0
  418. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_lib_stormlib_ipv6.py +0 -0
  419. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_lib_stormlib_iters.py +0 -0
  420. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_lib_stormlib_json.py +0 -0
  421. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_lib_stormlib_log.py +0 -0
  422. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_lib_stormlib_macro.py +0 -0
  423. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_lib_stormlib_mime.py +0 -0
  424. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_lib_stormlib_modelext.py +0 -0
  425. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_lib_stormlib_oauth.py +0 -0
  426. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_lib_stormlib_pack.py +0 -0
  427. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_lib_stormlib_random.py +0 -0
  428. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_lib_stormlib_scrape.py +0 -0
  429. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_lib_stormlib_smtp.py +0 -0
  430. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_lib_stormlib_spooled.py +0 -0
  431. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_lib_stormlib_stats.py +0 -0
  432. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_lib_stormlib_stix.py +0 -0
  433. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_lib_stormlib_storm.py +0 -0
  434. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_lib_stormlib_vault.py +0 -0
  435. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_lib_stormlib_xml.py +0 -0
  436. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_lib_stormlib_yaml.py +0 -0
  437. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_lib_stormsvc.py +0 -0
  438. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_lib_stormwhois.py +0 -0
  439. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_lib_structlog.py +0 -0
  440. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_lib_task.py +0 -0
  441. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_lib_thishost.py +0 -0
  442. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_lib_time.py +0 -0
  443. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_lib_trigger.py +0 -0
  444. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_lib_urlhelp.py +0 -0
  445. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_lib_version.py +0 -0
  446. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_lookup_iso3166.py +0 -0
  447. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_lookup_phonenum.py +0 -0
  448. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_mindmeld.py +0 -0
  449. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_model_auth.py +0 -0
  450. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_model_base.py +0 -0
  451. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_model_belief.py +0 -0
  452. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_model_biz.py +0 -0
  453. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_model_crypto.py +0 -0
  454. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_model_dns.py +0 -0
  455. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_model_economic.py +0 -0
  456. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_model_geopol.py +0 -0
  457. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_model_geospace.py +0 -0
  458. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_model_gov_cn.py +0 -0
  459. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_model_gov_intl.py +0 -0
  460. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_model_gov_us.py +0 -0
  461. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_model_language.py +0 -0
  462. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_model_material.py +0 -0
  463. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_model_media.py +0 -0
  464. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_model_orgs.py +0 -0
  465. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_model_person.py +0 -0
  466. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_model_planning.py +0 -0
  467. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_model_proj.py +0 -0
  468. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_model_risk.py +0 -0
  469. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_model_science.py +0 -0
  470. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_model_syn.py +0 -0
  471. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_model_telco.py +0 -0
  472. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_model_transport.py +0 -0
  473. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_servers_axon.py +0 -0
  474. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_servers_cortex.py +0 -0
  475. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_servers_cryotank.py +0 -0
  476. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_servers_stemcell.py +0 -0
  477. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_servers_univ.py +0 -0
  478. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_telepath.py +0 -0
  479. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_tools_aha.py +0 -0
  480. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_tools_autodoc.py +0 -0
  481. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_tools_axon2axon.py +0 -0
  482. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_tools_backup.py +0 -0
  483. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_tools_cellauth.py +0 -0
  484. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_tools_cryo_cat.py +0 -0
  485. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_tools_cryo_list.py +0 -0
  486. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_tools_csvtool.py +0 -0
  487. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_tools_docker_validate.py +0 -0
  488. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_tools_easycert.py +0 -0
  489. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_tools_feed.py +0 -0
  490. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_tools_genpkg.py +0 -0
  491. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_tools_guid.py +0 -0
  492. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_tools_healthcheck.py +0 -0
  493. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_tools_hiveload.py +0 -0
  494. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_tools_hivesave.py +0 -0
  495. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_tools_json2mpk.py +0 -0
  496. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_tools_livebackup.py +0 -0
  497. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_tools_modrole.py +0 -0
  498. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_tools_moduser.py +0 -0
  499. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_tools_pullfile.py +0 -0
  500. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_tools_pushfile.py +0 -0
  501. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_tools_reload.py +0 -0
  502. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_tools_rstorm.py +0 -0
  503. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_tools_storm.py +0 -0
  504. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_utils.py +0 -0
  505. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_utils_getrefs.py +0 -0
  506. {synapse-2.169.0 → synapse-2.171.0}/synapse/tests/test_utils_stormcov.py +0 -0
  507. {synapse-2.169.0 → synapse-2.171.0}/synapse/tools/__init__.py +0 -0
  508. {synapse-2.169.0 → synapse-2.171.0}/synapse/tools/aha/__init__.py +0 -0
  509. {synapse-2.169.0 → synapse-2.171.0}/synapse/tools/aha/easycert.py +0 -0
  510. {synapse-2.169.0 → synapse-2.171.0}/synapse/tools/aha/enroll.py +0 -0
  511. {synapse-2.169.0 → synapse-2.171.0}/synapse/tools/aha/list.py +0 -0
  512. {synapse-2.169.0 → synapse-2.171.0}/synapse/tools/aha/provision/__init__.py +0 -0
  513. {synapse-2.169.0 → synapse-2.171.0}/synapse/tools/aha/provision/service.py +0 -0
  514. {synapse-2.169.0 → synapse-2.171.0}/synapse/tools/aha/provision/user.py +0 -0
  515. {synapse-2.169.0 → synapse-2.171.0}/synapse/tools/autodoc.py +0 -0
  516. {synapse-2.169.0 → synapse-2.171.0}/synapse/tools/axon2axon.py +0 -0
  517. {synapse-2.169.0 → synapse-2.171.0}/synapse/tools/backup.py +0 -0
  518. {synapse-2.169.0 → synapse-2.171.0}/synapse/tools/cellauth.py +0 -0
  519. {synapse-2.169.0 → synapse-2.171.0}/synapse/tools/cmdr.py +0 -0
  520. {synapse-2.169.0 → synapse-2.171.0}/synapse/tools/cryo/__init__.py +0 -0
  521. {synapse-2.169.0 → synapse-2.171.0}/synapse/tools/cryo/cat.py +0 -0
  522. {synapse-2.169.0 → synapse-2.171.0}/synapse/tools/cryo/list.py +0 -0
  523. {synapse-2.169.0 → synapse-2.171.0}/synapse/tools/csvtool.py +0 -0
  524. {synapse-2.169.0 → synapse-2.171.0}/synapse/tools/docker/__init__.py +0 -0
  525. {synapse-2.169.0 → synapse-2.171.0}/synapse/tools/docker/validate.py +0 -0
  526. {synapse-2.169.0 → synapse-2.171.0}/synapse/tools/easycert.py +0 -0
  527. {synapse-2.169.0 → synapse-2.171.0}/synapse/tools/feed.py +0 -0
  528. {synapse-2.169.0 → synapse-2.171.0}/synapse/tools/genpkg.py +0 -0
  529. {synapse-2.169.0 → synapse-2.171.0}/synapse/tools/guid.py +0 -0
  530. {synapse-2.169.0 → synapse-2.171.0}/synapse/tools/healthcheck.py +0 -0
  531. {synapse-2.169.0 → synapse-2.171.0}/synapse/tools/hive/__init__.py +0 -0
  532. {synapse-2.169.0 → synapse-2.171.0}/synapse/tools/hive/load.py +0 -0
  533. {synapse-2.169.0 → synapse-2.171.0}/synapse/tools/hive/save.py +0 -0
  534. {synapse-2.169.0 → synapse-2.171.0}/synapse/tools/json2mpk.py +0 -0
  535. {synapse-2.169.0 → synapse-2.171.0}/synapse/tools/livebackup.py +0 -0
  536. {synapse-2.169.0 → synapse-2.171.0}/synapse/tools/modrole.py +0 -0
  537. {synapse-2.169.0 → synapse-2.171.0}/synapse/tools/moduser.py +0 -0
  538. {synapse-2.169.0 → synapse-2.171.0}/synapse/tools/promote.py +0 -0
  539. {synapse-2.169.0 → synapse-2.171.0}/synapse/tools/pullfile.py +0 -0
  540. {synapse-2.169.0 → synapse-2.171.0}/synapse/tools/pushfile.py +0 -0
  541. {synapse-2.169.0 → synapse-2.171.0}/synapse/tools/reload.py +0 -0
  542. {synapse-2.169.0 → synapse-2.171.0}/synapse/tools/rstorm.py +0 -0
  543. {synapse-2.169.0 → synapse-2.171.0}/synapse/tools/storm.py +0 -0
  544. {synapse-2.169.0 → synapse-2.171.0}/synapse/utils/__init__.py +0 -0
  545. {synapse-2.169.0 → synapse-2.171.0}/synapse/utils/getrefs.py +0 -0
  546. {synapse-2.169.0 → synapse-2.171.0}/synapse/utils/stormcov/__init__.py +0 -0
  547. {synapse-2.169.0 → synapse-2.171.0}/synapse/utils/stormcov/plugin.py +0 -0
  548. {synapse-2.169.0 → synapse-2.171.0}/synapse/vendor/__init__.py +0 -0
  549. {synapse-2.169.0 → synapse-2.171.0}/synapse/vendor/cashaddress/LICENSE +0 -0
  550. {synapse-2.169.0 → synapse-2.171.0}/synapse/vendor/cashaddress/__init__.py +0 -0
  551. {synapse-2.169.0 → synapse-2.171.0}/synapse/vendor/cashaddress/base58.py +0 -0
  552. {synapse-2.169.0 → synapse-2.171.0}/synapse/vendor/cashaddress/convert.py +0 -0
  553. {synapse-2.169.0 → synapse-2.171.0}/synapse/vendor/cashaddress/crypto.py +0 -0
  554. {synapse-2.169.0 → synapse-2.171.0}/synapse/vendor/cashaddress/tests/__init__.py +0 -0
  555. {synapse-2.169.0 → synapse-2.171.0}/synapse/vendor/cashaddress/tests/test_cashaddress.py +0 -0
  556. {synapse-2.169.0 → synapse-2.171.0}/synapse/vendor/substrateinterface/LICENSE +0 -0
  557. {synapse-2.169.0 → synapse-2.171.0}/synapse/vendor/substrateinterface/__init__.py +0 -0
  558. {synapse-2.169.0 → synapse-2.171.0}/synapse/vendor/substrateinterface/tests/__init__.py +0 -0
  559. {synapse-2.169.0 → synapse-2.171.0}/synapse/vendor/substrateinterface/tests/test_ss58.py +0 -0
  560. {synapse-2.169.0 → synapse-2.171.0}/synapse/vendor/substrateinterface/utils/__init__.py +0 -0
  561. {synapse-2.169.0 → synapse-2.171.0}/synapse/vendor/substrateinterface/utils/ss58.py +0 -0
  562. {synapse-2.169.0 → synapse-2.171.0}/synapse/vendor/utils.py +0 -0
  563. {synapse-2.169.0 → synapse-2.171.0}/synapse/vendor/xrpl/LICENSE +0 -0
  564. {synapse-2.169.0 → synapse-2.171.0}/synapse/vendor/xrpl/__init__.py +0 -0
  565. {synapse-2.169.0 → synapse-2.171.0}/synapse/vendor/xrpl/constants.py +0 -0
  566. {synapse-2.169.0 → synapse-2.171.0}/synapse/vendor/xrpl/core/__init__.py +0 -0
  567. {synapse-2.169.0 → synapse-2.171.0}/synapse/vendor/xrpl/core/addresscodec/__init__.py +0 -0
  568. {synapse-2.169.0 → synapse-2.171.0}/synapse/vendor/xrpl/core/addresscodec/codec.py +0 -0
  569. {synapse-2.169.0 → synapse-2.171.0}/synapse/vendor/xrpl/core/addresscodec/exceptions.py +0 -0
  570. {synapse-2.169.0 → synapse-2.171.0}/synapse/vendor/xrpl/core/addresscodec/main.py +0 -0
  571. {synapse-2.169.0 → synapse-2.171.0}/synapse/vendor/xrpl/core/addresscodec/utils.py +0 -0
  572. {synapse-2.169.0 → synapse-2.171.0}/synapse/vendor/xrpl/tests/__init__.py +0 -0
  573. {synapse-2.169.0 → synapse-2.171.0}/synapse/vendor/xrpl/tests/test_codec.py +0 -0
  574. {synapse-2.169.0 → synapse-2.171.0}/synapse/vendor/xrpl/tests/test_main.py +0 -0
  575. {synapse-2.169.0 → synapse-2.171.0}/synapse/vendor/xrpl/tests/test_main_test_cases.py +0 -0
  576. {synapse-2.169.0 → synapse-2.171.0}/synapse.egg-info/dependency_links.txt +0 -0
  577. {synapse-2.169.0 → synapse-2.171.0}/synapse.egg-info/requires.txt +0 -0
  578. {synapse-2.169.0 → synapse-2.171.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.169.0
3
+ Version: 2.171.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
@@ -4,7 +4,7 @@ build-backend = 'setuptools.build_meta'
4
4
 
5
5
  [project]
6
6
  name = 'synapse'
7
- version = '2.169.0'
7
+ version = '2.171.0'
8
8
  authors = [
9
9
  { name = 'The Vertex Project LLC', email = 'root@vertex.link'},
10
10
  ]
@@ -3866,7 +3866,8 @@ class Cortex(s_oauth.OAuthMixin, s_cell.Cell): # type: ignore
3866
3866
  with open(idenpath, 'w') as fd:
3867
3867
  fd.write(jsoniden)
3868
3868
 
3869
- conf = {'cell:guid': jsoniden}
3869
+ # Disable sysctl checks for embedded jsonstor server
3870
+ conf = {'cell:guid': jsoniden, 'health:sysctl:checks': False}
3870
3871
  self.jsonstor = await s_jsonstor.JsonStorCell.anit(path, conf=conf, parent=self)
3871
3872
 
3872
3873
  self.onfini(self.jsonstor)
@@ -3943,7 +3944,8 @@ class Cortex(s_oauth.OAuthMixin, s_cell.Cell): # type: ignore
3943
3944
  turl = self.conf.get('axon')
3944
3945
  if turl is None:
3945
3946
  path = os.path.join(self.dirn, 'axon')
3946
- conf = {}
3947
+ # Disable sysctl checks for embedded axon server
3948
+ conf = {'health:sysctl:checks': False}
3947
3949
 
3948
3950
  proxyurl = self.conf.get('http:proxy')
3949
3951
  if proxyurl is not None:
@@ -4494,6 +4496,94 @@ class Cortex(s_oauth.OAuthMixin, s_cell.Cell): # type: ignore
4494
4496
  await self.feedBeholder('view:add', pack, gates=[iden])
4495
4497
  return pack
4496
4498
 
4499
+ async def delViewWithLayer(self, iden):
4500
+ '''
4501
+ Delete a Cortex View and its write Layer if not in use by other View stacks.
4502
+
4503
+ Note:
4504
+ Any children of the View will have their parent View updated to
4505
+ the deleted View's parent (if present). The deleted View's write Layer
4506
+ will also be removed from any child Views which contain it in their
4507
+ Layer stack. If the Layer is used in Views which are not children of
4508
+ the deleted View, the Layer will be preserved, otherwise it will be
4509
+ deleted as well.
4510
+ '''
4511
+ view = self.views.get(iden)
4512
+ if view is None:
4513
+ raise s_exc.NoSuchView(mesg=f'No such view {iden=}', iden=iden)
4514
+
4515
+ if view.info.get('protected'):
4516
+ mesg = f'Cannot delete view ({iden}) that has protected set.'
4517
+ raise s_exc.CantDelView(mesg=mesg)
4518
+
4519
+ layriden = view.layers[0].iden
4520
+ pareiden = None
4521
+ if view.parent is not None:
4522
+ pareiden = view.parent.iden
4523
+
4524
+ return await self._push('view:delwithlayer', iden, layriden, newparent=pareiden)
4525
+
4526
+ @s_nexus.Pusher.onPush('view:delwithlayer', passitem=True)
4527
+ async def _delViewWithLayer(self, viewiden, layriden, nexsitem, newparent=None):
4528
+
4529
+ if viewiden == self.view.iden:
4530
+ raise s_exc.SynErr(mesg='Cannot delete the main view')
4531
+
4532
+ if (view := self.views.get(viewiden)) is not None:
4533
+
4534
+ await self.hive.pop(('cortex', 'views', viewiden))
4535
+ await view.delete()
4536
+
4537
+ self._calcViewsByLayer()
4538
+ await self.feedBeholder('view:del', {'iden': viewiden}, gates=[viewiden])
4539
+ await self.auth.delAuthGate(viewiden)
4540
+
4541
+ if newparent is not None:
4542
+ newview = self.views.get(newparent)
4543
+
4544
+ layrinuse = False
4545
+ for view in self.viewsbylayer[layriden]:
4546
+ if not view.isForkOf(viewiden):
4547
+ layrinuse = True
4548
+ continue
4549
+
4550
+ view.layers = [lyr for lyr in view.layers if lyr.iden != layriden]
4551
+ layridens = [lyr.iden for lyr in view.layers]
4552
+ await view.info.set('layers', layridens)
4553
+
4554
+ mesg = {'iden': view.iden, 'layers': layridens}
4555
+ await self.feedBeholder('view:setlayers', mesg, gates=[view.iden, layridens[0]])
4556
+
4557
+ if view.parent.iden == viewiden:
4558
+ if newparent is None:
4559
+ view.parent = None
4560
+ await view.info.pop('parent')
4561
+ else:
4562
+ view.parent = newview
4563
+ await view.info.set('parent', newparent)
4564
+
4565
+ mesg = {'iden': view.iden, 'name': 'parent', 'valu': newparent}
4566
+ await self.feedBeholder('view:set', mesg, gates=[view.iden, layridens[0]])
4567
+
4568
+ if not layrinuse and (layr := self.layers.get(layriden)) is not None:
4569
+ del self.layers[layriden]
4570
+
4571
+ for pdef in layr.layrinfo.get('pushs', {}).values():
4572
+ await self.delActiveCoro(pdef.get('iden'))
4573
+
4574
+ for pdef in layr.layrinfo.get('pulls', {}).values():
4575
+ await self.delActiveCoro(pdef.get('iden'))
4576
+
4577
+ await self.feedBeholder('layer:del', {'iden': layriden}, gates=[layriden])
4578
+ await self.auth.delAuthGate(layriden)
4579
+ self.dynitems.pop(layriden)
4580
+
4581
+ await self.hive.pop(('cortex', 'layers', layriden))
4582
+
4583
+ await layr.delete()
4584
+
4585
+ layr.deloffs = nexsitem[0]
4586
+
4497
4587
  async def delView(self, iden):
4498
4588
  view = self.views.get(iden)
4499
4589
  if view is None:
@@ -5156,12 +5246,15 @@ class Cortex(s_oauth.OAuthMixin, s_cell.Cell): # type: ignore
5156
5246
 
5157
5247
  return dmon
5158
5248
 
5249
+ @s_cell.from_leader
5159
5250
  async def getStormDmon(self, iden):
5160
5251
  return self.stormdmons.getDmonDef(iden)
5161
5252
 
5253
+ @s_cell.from_leader
5162
5254
  async def getStormDmons(self):
5163
5255
  return self.stormdmons.getDmonDefs()
5164
5256
 
5257
+ @s_cell.from_leader
5165
5258
  async def getStormDmonLog(self, iden):
5166
5259
  return self.stormdmons.getDmonRunlog(iden)
5167
5260
 
@@ -6836,7 +6929,10 @@ async def getTempCortex(mods=None):
6836
6929
  '''
6837
6930
  with s_common.getTempDir() as dirn:
6838
6931
  logger.debug(f'Creating temporary cortex as {dirn}')
6839
- async with await Cortex.anit(dirn) as core:
6932
+ conf = {
6933
+ 'health:sysctl:checks': False,
6934
+ }
6935
+ async with await Cortex.anit(dirn, conf=conf) as core:
6840
6936
  if mods:
6841
6937
  for mod in mods:
6842
6938
  await core.loadCoreModule(mod)
@@ -330,11 +330,16 @@ class Form:
330
330
  'prop': [],
331
331
  'ndef': [],
332
332
  'array': [],
333
+ 'ndefarray': [],
333
334
  }
334
335
 
335
336
  for name, prop in self.props.items():
336
337
 
337
338
  if isinstance(prop.type, s_types.Array):
339
+ if isinstance(prop.type.arraytype, s_types.Ndef):
340
+ self.refsout['ndefarray'].append(name)
341
+ continue
342
+
338
343
  typename = prop.type.arraytype.name
339
344
  if self.modl.forms.get(typename) is not None:
340
345
  self.refsout['array'].append((name, typename))
@@ -1943,6 +1943,12 @@ class PivotOut(PivotOper):
1943
1943
  continue
1944
1944
 
1945
1945
  if isinstance(prop.type, s_types.Array):
1946
+ if isinstance(prop.type.arraytype, s_types.Ndef):
1947
+ for item in valu:
1948
+ if (pivo := await runt.snap.getNodeByNdef(item)) is not None:
1949
+ yield pivo, path.fork(pivo)
1950
+ continue
1951
+
1946
1952
  typename = prop.type.opts.get('type')
1947
1953
  if runt.model.forms.get(typename) is not None:
1948
1954
  for item in valu:
@@ -2177,13 +2183,13 @@ class FormPivot(PivotOper):
2177
2183
 
2178
2184
  # plain old pivot...
2179
2185
  async def pgenr(node, strict=True):
2180
-
2181
- valu = node.ndef[1]
2182
-
2183
2186
  if isarray:
2184
- ngenr = runt.snap.nodesByPropArray(prop.full, '=', valu)
2187
+ if isinstance(prop.type.arraytype, s_types.Ndef):
2188
+ ngenr = runt.snap.nodesByPropArray(prop.full, '=', node.ndef)
2189
+ else:
2190
+ ngenr = runt.snap.nodesByPropArray(prop.full, '=', node.ndef[1])
2185
2191
  else:
2186
- ngenr = runt.snap.nodesByPropValu(prop.full, '=', valu)
2192
+ ngenr = runt.snap.nodesByPropValu(prop.full, '=', node.ndef[1])
2187
2193
 
2188
2194
  # TODO cache/bypass normalization in loop!
2189
2195
  async for pivo in ngenr:
@@ -2266,6 +2272,16 @@ class FormPivot(PivotOper):
2266
2272
  if pivo is not None:
2267
2273
  yield pivo
2268
2274
 
2275
+ for refsname in refs.get('ndefarray'):
2276
+
2277
+ found = True
2278
+
2279
+ if (refsvalu := node.get(refsname)) is not None:
2280
+ for aval in refsvalu:
2281
+ if aval[0] == destform.name:
2282
+ if (pivo := await runt.snap.getNodeByNdef(aval)) is not None:
2283
+ yield pivo
2284
+
2269
2285
  #########################################################################
2270
2286
  # reverse "-> form" pivots (ie inet:fqdn -> inet:dns:a)
2271
2287
  refs = destform.getRefsOut()
@@ -2303,6 +2319,14 @@ class FormPivot(PivotOper):
2303
2319
  async for pivo in runt.snap.nodesByPropValu(refsprop.full, '=', node.ndef):
2304
2320
  yield pivo
2305
2321
 
2322
+ for refsname in refs.get('ndefarray'):
2323
+
2324
+ found = True
2325
+
2326
+ refsprop = destform.props.get(refsname)
2327
+ async for pivo in runt.snap.nodesByPropArray(refsprop.full, '=', node.ndef):
2328
+ yield pivo
2329
+
2306
2330
  if strict and not found:
2307
2331
  mesg = f'No pivot found for {node.form.name} -> {destform.name}.'
2308
2332
  raise self.addExcInfo(s_exc.NoSuchPivot(n1=node.form.name, n2=destform.name, mesg=mesg))
@@ -2389,6 +2413,12 @@ class PropPivotOut(PivotOper):
2389
2413
  continue
2390
2414
 
2391
2415
  if prop.type.isarray:
2416
+ if isinstance(prop.type.arraytype, s_types.Ndef):
2417
+ for item in valu:
2418
+ if (pivo := await runt.snap.getNodeByNdef(item)) is not None:
2419
+ yield pivo, path.fork(pivo)
2420
+ continue
2421
+
2392
2422
  fname = prop.type.arraytype.name
2393
2423
  if runt.model.forms.get(fname) is None:
2394
2424
  if not warned:
@@ -2442,6 +2472,14 @@ class PropPivot(PivotOper):
2442
2472
 
2443
2473
  # pivoting from an array prop to a non-array prop needs an extra loop
2444
2474
  if srcprop.type.isarray and not prop.type.isarray:
2475
+ if isinstance(srcprop.type.arraytype, s_types.Ndef) and prop.isform:
2476
+ for aval in valu:
2477
+ if aval[0] != prop.form.name:
2478
+ continue
2479
+
2480
+ if (pivo := await runt.snap.getNodeByNdef(aval)) is not None:
2481
+ yield pivo
2482
+ return
2445
2483
 
2446
2484
  for arrayval in valu:
2447
2485
  async for pivo in runt.snap.nodesByPropValu(prop.full, '=', arrayval):
@@ -2449,6 +2487,18 @@ class PropPivot(PivotOper):
2449
2487
 
2450
2488
  return
2451
2489
 
2490
+ if isinstance(srcprop.type, s_types.Ndef) and prop.isform:
2491
+ if valu[0] != prop.form.name:
2492
+ return
2493
+
2494
+ pivo = await runt.snap.getNodeByNdef(valu)
2495
+ if pivo is None:
2496
+ await runt.snap.warn(f'Missing node corresponding to ndef {valu}', log=False, ndef=valu)
2497
+ return
2498
+ yield pivo
2499
+
2500
+ return
2501
+
2452
2502
  if prop.type.isarray and not srcprop.type.isarray:
2453
2503
  genr = runt.snap.nodesByPropArray(prop.full, '=', valu)
2454
2504
  else:
@@ -2463,7 +2513,6 @@ class PropPivot(PivotOper):
2463
2513
 
2464
2514
  if isinstance(name, list) or (prop := runt.model.props.get(name)) is None:
2465
2515
 
2466
- proplist = None
2467
2516
  if isinstance(name, list):
2468
2517
  proplist = name
2469
2518
  else:
@@ -2485,7 +2534,7 @@ class PropPivot(PivotOper):
2485
2534
  async for pivo in pgenr(node, srcprop, valu, strict=False):
2486
2535
  yield pivo
2487
2536
 
2488
- return(listpivot)
2537
+ return listpivot
2489
2538
 
2490
2539
  return self.pivogenr(runt, prop)
2491
2540
 
@@ -2771,15 +2820,24 @@ class TagCond(Cond):
2771
2820
  kid = self.kids[0]
2772
2821
 
2773
2822
  if not isinstance(kid, TagMatch):
2774
- # TODO: we might hint based on variable value
2775
2823
  return []
2776
2824
 
2777
- if not kid.isconst or kid.hasglob():
2825
+ if kid.hasglob():
2778
2826
  return []
2779
2827
 
2780
- return (
2781
- ('tag', {'name': await kid.compute(None, None)}),
2782
- )
2828
+ if kid.isconst:
2829
+ return (
2830
+ ('tag', {'name': await kid.compute(None, None)}),
2831
+ )
2832
+
2833
+ if kid.isRuntSafe(runt):
2834
+ name = await kid.compute(runt, path)
2835
+ if name and '*' not in name:
2836
+ return (
2837
+ ('tag', {'name': name}),
2838
+ )
2839
+
2840
+ return []
2783
2841
 
2784
2842
  async def getCondEval(self, runt):
2785
2843
 
@@ -109,6 +109,25 @@ def adminapi(log=False):
109
109
 
110
110
  return decrfunc
111
111
 
112
+ def from_leader(func):
113
+ '''
114
+ Decorator used to indicate that the decorated method must call up to the
115
+ leader to perform it's work.
116
+
117
+ This only works on Cell classes and subclasses. The decorated method name
118
+ MUST be the same as the telepath API name.
119
+ '''
120
+ @functools.wraps(func)
121
+ async def wrapper(self, *args, **kwargs):
122
+ if not self.isactive:
123
+ proxy = await self.nexsroot.client.proxy()
124
+ api = getattr(proxy, func.__name__)
125
+ return await api(*args, **kwargs)
126
+
127
+ return await func(self, *args, **kwargs)
128
+
129
+ return wrapper
130
+
112
131
  async def _doIterBackup(path, chunksize=1024):
113
132
  '''
114
133
  Create tarball and stream bytes.
@@ -924,6 +943,11 @@ class Cell(s_nexus.Pusher, s_telepath.Aware):
924
943
  'minimum': 0,
925
944
  'maximum': 100,
926
945
  },
946
+ 'health:sysctl:checks': {
947
+ 'default': True,
948
+ 'description': 'Enable sysctl parameter checks and warn if values are not optimal.',
949
+ 'type': 'boolean',
950
+ },
927
951
  'aha:name': {
928
952
  'description': 'The name of the cell service in the aha service registry.',
929
953
  'type': 'string',
@@ -1049,6 +1073,12 @@ class Cell(s_nexus.Pusher, s_telepath.Aware):
1049
1073
  VERSION = s_version.version
1050
1074
  VERSTRING = s_version.verstring
1051
1075
 
1076
+ SYSCTL_VALS = {
1077
+ 'vm.dirty_expire_centisecs': 20,
1078
+ 'vm.dirty_writeback_centisecs': 20,
1079
+ }
1080
+ SYSCTL_CHECK_FREQ = 60.0
1081
+
1052
1082
  async def __anit__(self, dirn, conf=None, readonly=False, parent=None):
1053
1083
 
1054
1084
  # phase 1
@@ -1177,16 +1207,24 @@ class Cell(s_nexus.Pusher, s_telepath.Aware):
1177
1207
  self.cellinfo = await node.dict()
1178
1208
  self.onfini(node)
1179
1209
 
1180
- node = await self.hive.open(('cellvers',))
1181
- self.cellvers = await node.dict(nexs=True)
1210
+ # Check the cell version didn't regress
1211
+ if (lastver := self.cellinfo.get('cell:version')) is not None and self.VERSION < lastver:
1212
+ mesg = f'Cell version regression ({self.getCellType()}) is not allowed! Stored version: {lastver}, current version: {self.VERSION}.'
1213
+ logger.error(mesg)
1214
+ raise s_exc.BadVersion(mesg=mesg, currver=self.VERSION, lastver=lastver)
1182
1215
 
1183
- if self.inaugural:
1184
- await self.cellinfo.set('synapse:version', s_version.version)
1216
+ await self.cellinfo.set('cell:version', self.VERSION)
1217
+
1218
+ # Check the synapse version didn't regress
1219
+ if (lastver := self.cellinfo.get('synapse:version')) is not None and s_version.version < lastver:
1220
+ mesg = f'Synapse version regression ({self.getCellType()}) is not allowed! Stored version: {lastver}, current version: {s_version.version}.'
1221
+ logger.error(mesg)
1222
+ raise s_exc.BadVersion(mesg=mesg, currver=s_version.version, lastver=lastver)
1185
1223
 
1186
- synvers = self.cellinfo.get('synapse:version')
1224
+ await self.cellinfo.set('synapse:version', s_version.version)
1187
1225
 
1188
- if synvers is None or synvers < s_version.version:
1189
- await self.cellinfo.set('synapse:version', s_version.version)
1226
+ node = await self.hive.open(('cellvers',))
1227
+ self.cellvers = await node.dict(nexs=True)
1190
1228
 
1191
1229
  self.auth = await self._initCellAuth()
1192
1230
 
@@ -1217,6 +1255,9 @@ class Cell(s_nexus.Pusher, s_telepath.Aware):
1217
1255
  self._health_funcs = []
1218
1256
  self.addHealthFunc(self._cellHealth)
1219
1257
 
1258
+ if self.conf.get('health:sysctl:checks'):
1259
+ self.schedCoro(self._runSysctlLoop())
1260
+
1220
1261
  # initialize network backend infrastructure
1221
1262
  await self._initAhaRegistry()
1222
1263
 
@@ -1420,6 +1461,30 @@ class Cell(s_nexus.Pusher, s_telepath.Aware):
1420
1461
 
1421
1462
  await self._checkspace.timewait(timeout=self.FREE_SPACE_CHECK_FREQ)
1422
1463
 
1464
+ async def _runSysctlLoop(self):
1465
+ while not self.isfini:
1466
+ fixvals = []
1467
+ sysctls = s_thisplat.getSysctls()
1468
+
1469
+ for name, valu in self.SYSCTL_VALS.items():
1470
+ if (sysval := sysctls.get(name)) != valu:
1471
+ fixvals.append({'name': name, 'expected': valu, 'actual': sysval})
1472
+
1473
+ if not fixvals:
1474
+ # All sysctl parameters have been set to recommended values, no
1475
+ # need to keep checking.
1476
+ break
1477
+
1478
+ fixnames = [k['name'] for k in fixvals]
1479
+ mesg = f'Sysctl values different than expected: {", ".join(fixnames)}. '
1480
+ mesg += 'See https://synapse.docs.vertex.link/en/latest/synapse/devopsguide.html#performance-tuning '
1481
+ mesg += 'for information about these sysctl parameters.'
1482
+
1483
+ extra = await self.getLogExtra(sysctls=fixvals)
1484
+ logger.warning(mesg, extra=extra)
1485
+
1486
+ await self.waitfini(self.SYSCTL_CHECK_FREQ)
1487
+
1423
1488
  def _getAhaAdmin(self):
1424
1489
  name = self.conf.get('aha:admin')
1425
1490
  if name is not None:
@@ -3724,6 +3789,10 @@ class Cell(s_nexus.Pusher, s_telepath.Aware):
3724
3789
  logconf = s_common.setlogging(logger, defval=opts.log_level,
3725
3790
  structlog=opts.structured_logging)
3726
3791
 
3792
+ logger.info(f'Starting {cls.getCellType()} version {cls.VERSTRING}, Synapse version: {s_version.verstring}',
3793
+ extra={'synapse': {'svc_type': cls.getCellType(), 'svc_version': cls.VERSTRING,
3794
+ 'synapse_version': s_version.verstring}})
3795
+
3727
3796
  await cls._initBootRestore(opts.dirn)
3728
3797
 
3729
3798
  try:
@@ -107,6 +107,7 @@ reqValidLdef = s_config.getJsValidator({
107
107
  })
108
108
 
109
109
  WINDOW_MAXSIZE = 10_000
110
+ MIGR_COMMIT_SIZE = 1_000
110
111
 
111
112
  class LayerApi(s_cell.CellApi):
112
113
 
@@ -2612,7 +2613,7 @@ class Layer(s_nexus.Pusher):
2612
2613
  venc = lkey[32:]
2613
2614
 
2614
2615
  putkeys.append((n1buid + n2buid, venc))
2615
- if len(putkeys) > 1000:
2616
+ if len(putkeys) > MIGR_COMMIT_SIZE:
2616
2617
  commit()
2617
2618
 
2618
2619
  if len(putkeys):
@@ -2623,6 +2624,33 @@ class Layer(s_nexus.Pusher):
2623
2624
 
2624
2625
  logger.warning(f'...complete!')
2625
2626
 
2627
+ async def _layrV10toV11(self):
2628
+
2629
+ logger.warning(f'Adding byform index to layer {self.iden}')
2630
+
2631
+ def commit():
2632
+ self.layrslab.putmulti(putkeys, db=self.byform)
2633
+ putkeys.clear()
2634
+
2635
+ putkeys = []
2636
+ async for buid, sode in self.getStorNodes():
2637
+ if not (form := sode.get('form')):
2638
+ continue
2639
+
2640
+ abrv = self.setPropAbrv(form, None)
2641
+ putkeys.append((abrv, buid))
2642
+
2643
+ if len(putkeys) > MIGR_COMMIT_SIZE:
2644
+ commit()
2645
+
2646
+ if putkeys:
2647
+ commit()
2648
+
2649
+ self.meta.set('version', 11)
2650
+ self.layrvers = 11
2651
+
2652
+ logger.warning('...complete!')
2653
+
2626
2654
  async def _initSlabs(self, slabopts):
2627
2655
 
2628
2656
  otherslabopts = {
@@ -2659,6 +2687,7 @@ class Layer(s_nexus.Pusher):
2659
2687
  self.edgesn1n2 = self.layrslab.initdb('edgesn1n2', dupsort=True)
2660
2688
 
2661
2689
  self.bytag = self.layrslab.initdb('bytag', dupsort=True)
2690
+ self.byform = self.layrslab.initdb('byform', dupsort=True)
2662
2691
  self.byprop = self.layrslab.initdb('byprop', dupsort=True)
2663
2692
  self.byarray = self.layrslab.initdb('byarray', dupsort=True)
2664
2693
  self.bytagprop = self.layrslab.initdb('bytagprop', dupsort=True)
@@ -2684,7 +2713,7 @@ class Layer(s_nexus.Pusher):
2684
2713
  await self._initSlabs(slabopts)
2685
2714
 
2686
2715
  if self.fresh:
2687
- self.meta.set('version', 10)
2716
+ self.meta.set('version', 11)
2688
2717
 
2689
2718
  self.layrslab.addResizeCallback(self.core.checkFreeSpace)
2690
2719
  self.dataslab.addResizeCallback(self.core.checkFreeSpace)
@@ -2719,8 +2748,11 @@ class Layer(s_nexus.Pusher):
2719
2748
  if self.layrvers < 10:
2720
2749
  await self._layrV9toV10()
2721
2750
 
2722
- if self.layrvers != 10:
2723
- mesg = f'Got layer version {self.layrvers}. Expected 10. Accidental downgrade?'
2751
+ if self.layrvers < 11:
2752
+ await self._layrV10toV11()
2753
+
2754
+ if self.layrvers != 11:
2755
+ mesg = f'Got layer version {self.layrvers}. Expected 11. Accidental downgrade?'
2724
2756
  raise s_exc.BadStorageVersion(mesg=mesg)
2725
2757
 
2726
2758
  async def getLayerSize(self):
@@ -3323,6 +3355,11 @@ class Layer(s_nexus.Pusher):
3323
3355
  return
3324
3356
 
3325
3357
  # no more refs in this layer. time to pop it...
3358
+ try:
3359
+ abrv = self.getPropAbrv(sode.get('form'), None)
3360
+ self.layrslab.delete(abrv, val=buid, db=self.byform)
3361
+ except s_exc.NoSuchAbrv:
3362
+ pass
3326
3363
  self.dirty.pop(buid, None)
3327
3364
  self.buidcache.pop(buid, None)
3328
3365
  self.layrslab.delete(buid, db=self.bybuidv3)
@@ -3343,11 +3380,14 @@ class Layer(s_nexus.Pusher):
3343
3380
  if sode.get('valu') == valt:
3344
3381
  return ()
3345
3382
 
3383
+ abrv = self.setPropAbrv(form, None)
3384
+
3385
+ if sode.get('form') is None:
3386
+ self.layrslab.put(abrv, buid, db=self.byform)
3387
+
3346
3388
  sode['valu'] = valt
3347
3389
  self.setSodeDirty(buid, sode, form)
3348
3390
 
3349
- abrv = self.setPropAbrv(form, None)
3350
-
3351
3391
  if stortype & STOR_FLAG_ARRAY:
3352
3392
 
3353
3393
  for indx in self.getStorIndx(stortype, valu):
@@ -3467,6 +3507,10 @@ class Layer(s_nexus.Pusher):
3467
3507
  if univabrv is not None:
3468
3508
  self.layrslab.delete(univabrv + oldi, buid, db=self.byprop)
3469
3509
 
3510
+ if sode.get('form') is None:
3511
+ formabrv = self.setPropAbrv(form, None)
3512
+ self.layrslab.put(formabrv, buid, db=self.byform)
3513
+
3470
3514
  sode['props'][prop] = (valu, stortype)
3471
3515
  self.setSodeDirty(buid, sode, form)
3472
3516
 
@@ -3561,6 +3605,9 @@ class Layer(s_nexus.Pusher):
3561
3605
  if oldv == valu:
3562
3606
  return ()
3563
3607
 
3608
+ if sode.get('form') is None:
3609
+ self.layrslab.put(formabrv, buid, db=self.byform)
3610
+
3564
3611
  sode['tags'][tag] = valu
3565
3612
  self.setSodeDirty(buid, sode, form)
3566
3613
 
@@ -3624,6 +3671,10 @@ class Layer(s_nexus.Pusher):
3624
3671
  self.layrslab.delete(tp_abrv + oldi, buid, db=self.bytagprop)
3625
3672
  self.layrslab.delete(ftp_abrv + oldi, buid, db=self.bytagprop)
3626
3673
 
3674
+ if sode.get('form') is None:
3675
+ formabrv = self.setPropAbrv(form, None)
3676
+ self.layrslab.put(formabrv, buid, db=self.byform)
3677
+
3627
3678
  if tag not in sode['tagprops']:
3628
3679
  sode['tagprops'][tag] = {}
3629
3680
  sode['tagprops'][tag][prop] = (valu, stortype)
@@ -3682,6 +3733,8 @@ class Layer(s_nexus.Pusher):
3682
3733
  # a bit of special case...
3683
3734
  if sode.get('form') is None:
3684
3735
  self.setSodeDirty(buid, sode, form)
3736
+ formabrv = self.setPropAbrv(form, None)
3737
+ self.layrslab.put(formabrv, buid, db=self.byform)
3685
3738
 
3686
3739
  if oldb is not None:
3687
3740
  oldv = s_msgpack.un(oldb)
@@ -3729,6 +3782,8 @@ class Layer(s_nexus.Pusher):
3729
3782
  # a bit of special case...
3730
3783
  if sode.get('form') is None:
3731
3784
  self.setSodeDirty(buid, sode, form)
3785
+ formabrv = self.setPropAbrv(form, None)
3786
+ self.layrslab.put(formabrv, buid, db=self.byform)
3732
3787
 
3733
3788
  self.layrslab.put(venc, buid + n2buid, db=self.byverb)
3734
3789
  self.layrslab.put(n1key, n2buid, db=self.edgesn1)
@@ -4208,6 +4263,20 @@ class Layer(s_nexus.Pusher):
4208
4263
  yield buid, s_msgpack.un(byts)
4209
4264
  await asyncio.sleep(0)
4210
4265
 
4266
+ async def getStorNodesByForm(self, form):
4267
+ '''
4268
+ Yield (buid, sode) tuples for nodes of a given form with props/tags/tagprops/edges/nodedata in this layer.
4269
+ '''
4270
+ try:
4271
+ abrv = self.getPropAbrv(form, None)
4272
+ except s_exc.NoSuchAbrv:
4273
+ return
4274
+
4275
+ for _, buid in self.layrslab.scanByDups(abrv, db=self.byform):
4276
+ sode = await self.getStorNode(buid)
4277
+ yield buid, sode
4278
+ await asyncio.sleep(0)
4279
+
4211
4280
  async def iterNodeEditLog(self, offs=0):
4212
4281
  '''
4213
4282
  Iterate the node edit log and yield (offs, edits, meta) tuples.
@@ -1367,6 +1367,10 @@ class Slab(s_base.Base):
1367
1367
  if not scan.set_range(nextbyts):
1368
1368
  return
1369
1369
 
1370
+ if scan.atitem[0] == nextbyts:
1371
+ if not scan.next_key():
1372
+ return
1373
+
1370
1374
  except OverflowError:
1371
1375
  if not scan.first():
1372
1376
  return
@@ -1810,6 +1814,19 @@ class ScanBack(Scan):
1810
1814
  self.atitem = next(self.genr)
1811
1815
  return True
1812
1816
 
1817
+ def next_key(self):
1818
+
1819
+ if not self.curs.prev_nodup():
1820
+ return False
1821
+
1822
+ if self.dupsort:
1823
+ self.curs.last_dup()
1824
+
1825
+ self.genr = self.iterfunc()
1826
+ self.atitem = next(self.genr)
1827
+
1828
+ return True
1829
+
1813
1830
  def set_range(self, lkey):
1814
1831
 
1815
1832
  if not self.curs.set_range(lkey):