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