synapse 3.6.0__tar.gz → 3.7.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.6.0/synapse.egg-info → synapse-3.7.0}/PKG-INFO +4 -4
- {synapse-3.6.0 → synapse-3.7.0}/pyproject.toml +4 -4
- {synapse-3.6.0 → synapse-3.7.0}/synapse/cortex.py +319 -18
- {synapse-3.6.0 → synapse-3.7.0}/synapse/data/skills/storm/SKILL.md +12 -1
- {synapse-3.6.0 → synapse-3.7.0}/synapse/data/v2modelmap.yaml +12 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/datamodel.py +1 -1
- {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/cell.py +1 -1
- {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/layer.py +24 -4
- {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/mcp.py +35 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/mddocs.py +98 -11
- {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/mdstorm.py +1 -1
- {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/modelrev.py +83 -2
- {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/schemas.py +25 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/stormlib/auth.py +3 -3
- {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/stormlib/cortex.py +9 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/stormlib/markdown.py +16 -5
- {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/stormlib/model.py +210 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/stormlib/pkg.py +63 -5
- {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/stormlib/task.py +19 -9
- {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/stormlib/vault.py +18 -15
- {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/stormlint.py +255 -20
- {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/types.py +10 -6
- {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/version.py +2 -2
- {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/view.py +7 -5
- {synapse-3.6.0 → synapse-3.7.0}/synapse/models/base.py +9 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/models/doc.py +10 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/models/entity.py +10 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/models/inet.py +2 -2
- {synapse-3.6.0 → synapse-3.7.0}/synapse/models/telco.py +16 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_cortex.py +33 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_datamodel.py +8 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_mcp.py +57 -1
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_mddocs.py +93 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_mdstorm.py +53 -0
- synapse-3.7.0/synapse/tests/test_lib_modelrev.py +207 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_storm.py +27 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_cortex.py +7 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_markdown.py +63 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_model.py +383 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_pkg.py +359 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_task.py +29 -1
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_vault.py +19 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlint.py +123 -1
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_stormtypes.py +26 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_types.py +27 -19
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_model_base.py +3 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_model_doc.py +3 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_model_entity.py +12 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_model_inet.py +35 -19
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_model_infotech.py +4 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_model_syn.py +1 -2
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_model_telco.py +28 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_tools_cortex_docmodel.py +8 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/utils.py +2 -4
- {synapse-3.6.0 → synapse-3.7.0/synapse.egg-info}/PKG-INFO +4 -4
- {synapse-3.6.0 → synapse-3.7.0}/synapse.egg-info/requires.txt +3 -3
- synapse-3.6.0/synapse/tests/test_lib_modelrev.py +0 -57
- {synapse-3.6.0 → synapse-3.7.0}/LICENSE +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/README.md +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/setup.cfg +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/__init__.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/assets/__init__.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/axon.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/cells.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/common.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/daemon.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/data/__init__.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/data/attack-flow/LICENSE.txt +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/data/attack-flow/README.md +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/data/attack-flow/attack-flow-schema-2.0.0.json +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/data/certs/cas/The Vertex Project Intermediate CA (2026).crt +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/data/certs/cas/The Vertex Project ROOT CA (2026).crt +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/data/certs/crls/The Vertex Project Intermediate CA (2026).crl +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/data/certs/crls/The Vertex Project ROOT CA (2026).crl +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/data/iana.tlds.mpk +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/data/iana.uris.mpk +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/data/jsonschemas/README.md +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/data/jsonschemas/json-schema.org/draft-07/schema +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/LICENSE.txt +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/common/binary.json +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/common/bundle.json +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/common/core.json +0 -0
- {synapse-3.6.0 → synapse-3.7.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.6.0 → synapse-3.7.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/common/dictionary.json +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/common/extension-definition.json +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/common/extension.json +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/common/external-reference.json +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/common/granular-marking.json +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/common/hashes-type.json +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/common/hex.json +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/common/identifier.json +0 -0
- {synapse-3.6.0 → synapse-3.7.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.6.0 → synapse-3.7.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/common/language-content.json +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/common/marking-definition.json +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/common/properties.json +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/common/timestamp.json +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/common/url-regex.json +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/observables/artifact.json +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/observables/autonomous-system.json +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/observables/directory.json +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/observables/domain-name.json +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/observables/email-addr.json +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/observables/email-message.json +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/observables/file.json +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/observables/ipv4-addr.json +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/observables/ipv6-addr.json +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/observables/mac-addr.json +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/observables/mutex.json +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/observables/network-traffic.json +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/observables/process.json +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/observables/software.json +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/observables/url.json +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/observables/user-account.json +0 -0
- {synapse-3.6.0 → synapse-3.7.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.6.0 → synapse-3.7.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/observables/x509-certificate.json +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/sdos/attack-pattern.json +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/sdos/campaign.json +0 -0
- {synapse-3.6.0 → synapse-3.7.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.6.0 → synapse-3.7.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/sdos/grouping.json +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/sdos/identity.json +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/sdos/incident.json +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/sdos/indicator.json +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/sdos/infrastructure.json +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/sdos/intrusion-set.json +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/sdos/location.json +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/sdos/malware-analysis.json +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/sdos/malware.json +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/sdos/note.json +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/sdos/observed-data.json +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/sdos/opinion.json +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/sdos/report.json +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/sdos/threat-actor.json +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/sdos/tool.json +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/sdos/vulnerability.json +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/sros/relationship.json +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/sros/sighting.json +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/data/lark/__init__.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/data/lark/imap.lark +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/data/lark/storm.lark +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/exc.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/glob.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/__init__.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/_http.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/agenda.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/aha.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/ast.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/auth.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/autodoc.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/base.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/boss.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/cache.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/certdir.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/chop.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/cli.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/cluster.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/cmd.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/config.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/const.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/coro.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/crypto/__init__.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/crypto/coin.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/crypto/ecc.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/crypto/jwk.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/crypto/passwd.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/crypto/rsa.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/crypto/tinfoil.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/crypto/utils.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/datfile.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/drive.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/dyndeps.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/editor.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/gis.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/grammar.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/hashitem.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/hashset.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/health.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/httpapi.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/httpclient.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/json.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/jsonstor.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/jsrpc.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/link.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/lmdbslab.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/logging.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/mdparse.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/msgpack.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/multislabseqn.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/nexus.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/node.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/nodefuse.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/oauth.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/output.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/parser.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/platforms/__init__.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/platforms/common.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/platforms/darwin.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/platforms/freebsd.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/platforms/linux.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/platforms/windows.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/process.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/processpool.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/provision.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/queue.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/reflect.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/scope.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/scrape.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/share.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/slabseqn.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/spawner.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/spooled.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/storm.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/storm_format.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/stormctrl.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/stormhttp.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/stormlib/__init__.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/stormlib/aha.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/stormlib/basex.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/stormlib/bytes.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/stormlib/cache.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/stormlib/cell.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/stormlib/compression.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/stormlib/cryptoutils.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/stormlib/easyperm.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/stormlib/ecc.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/stormlib/ethereum.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/stormlib/file.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/stormlib/gen.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/stormlib/gis.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/stormlib/graph.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/stormlib/hashes.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/stormlib/hex.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/stormlib/imap.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/stormlib/index.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/stormlib/infosec.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/stormlib/ipv6.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/stormlib/iters.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/stormlib/json.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/stormlib/jwt.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/stormlib/log.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/stormlib/macro.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/stormlib/math.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/stormlib/mime.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/stormlib/modelext.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/stormlib/oauth.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/stormlib/pack.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/stormlib/quorum.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/stormlib/random.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/stormlib/rsa.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/stormlib/scrape.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/stormlib/smtp.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/stormlib/spooled.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/stormlib/stats.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/stormlib/stix.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/stormlib/storm.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/stormlib/tabular.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/stormlib/utils.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/stormlib/version.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/stormlib/vertex.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/stormlib/xml.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/stormlib/yaml.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/stormsvc.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/stormtypes.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/task.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/thishost.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/thisplat.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/threads.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/time.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/trigger.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/urlhelp.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/lookup/__init__.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/lookup/cvss.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/lookup/iana.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/lookup/macho.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/lookup/pe.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/lookup/phonenum.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/lookup/timezones.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/models/__init__.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/models/auth.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/models/belief.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/models/biz.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/models/crypto.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/models/dns.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/models/economic.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/models/files.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/models/geopol.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/models/geospace.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/models/gov.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/models/ind.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/models/infotech.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/models/language.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/models/material.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/models/orgs.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/models/person.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/models/planning.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/models/proj.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/models/risk.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/models/science.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/models/syn.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/models/transport.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/servers/__init__.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/servers/aha.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/servers/axon.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/servers/cell.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/servers/cortex.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/servers/jsonstor.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/telepath.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/__init__.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/TestUtilsGetrefs.test_basics.yaml +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/__init__.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/aha/certs/cas/synapse.crt.tinfoil +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/aha/certs/cas/synapse.key.tinfoil +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/aha/certs/hosts/00.aha.loop.vertex.link.crt.tinfoil +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/aha/certs/hosts/00.aha.loop.vertex.link.key.tinfoil +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/aha/certs/users/root@synapse.crt.tinfoil +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/aha/certs/users/root@synapse.key.tinfoil +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/attack_flow/CISA AA22-138B VMWare Workspace (Alt).json +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/attack_flow/CISA_Iranian_APT.json +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/certdir/cas/ca.crt.tinfoil +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/certdir/cas/ca.key.tinfoil +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/certdir/code/codesign.crt.tinfoil +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/certdir/code/codesign.key.tinfoil +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/certdir/code/untrusted.crt.tinfoil +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/certdir/code/untrusted.key.tinfoil +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/certdir/hosts/localhost.crt.tinfoil +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/certdir/hosts/localhost.key.tinfoil +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/certdir/users/root.crt.tinfoil +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/certdir/users/root.key.tinfoil +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/certdir/users/user.crt.tinfoil +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/certdir/users/user.key.tinfoil +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/cpedata.json +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/markdown/column-names.json +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/mdstorm/httprespmulti.yaml +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/mdstorm/testsvc.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/stix_export/basic.json +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/stix_export/custom0.json +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/stix_export/risk0.json +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/stix_import/apt1.json +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/stix_import/oasis-example-00.json +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/stix_import/scos.json +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/stormcov/argvquery.storm +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/stormcov/argvquery2.storm +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/stormcov/argvquery3.storm +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/stormcov/argvquery4.storm +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/stormcov/argvquery5.storm +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/stormcov/badstorm.storm +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/stormcov/continueloop.storm +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/stormcov/dupesubs.storm +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/stormcov/dupewarn.storm +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/stormcov/dupfunc.storm +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/stormcov/embed/embed.json +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/stormcov/embed/embed.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/stormcov/embed/embed.ts +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/stormcov/embed/embed.yaml +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/stormcov/embedquery.storm +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/stormcov/embedquery2.storm +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/stormcov/embedquery3.storm +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/stormcov/embedquery4.storm +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/stormcov/embedquery5.storm +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/stormcov/emptybody.storm +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/stormcov/exprdict.storm +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/stormcov/forloop.storm +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/stormcov/ifelif.storm +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/stormcov/ifelse.storm +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/stormcov/lookup.storm +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/stormcov/pivot.storm +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/stormcov/pragma-nocov.storm +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/stormcov/runtsafety.storm +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/stormcov/spin.storm +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/stormcov/stopreturn.storm +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/stormcov/stormctrl.storm +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/stormcov/switch.storm +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/stormcov/switchnodefault.storm +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/stormcov/trycatch.storm +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/stormcov/whilebackedge.storm +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/stormcov/whilecontinue.storm +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/stormcov/whileloop.storm +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/stormcov/whilewithnode.storm +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/stormmod/common +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/stormpkg/badapidef.yaml +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/stormpkg/badcmdname.yaml +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/stormpkg/badendpoints.yaml +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/stormpkg/badinits.yaml +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/stormpkg/badjsonpkg.yaml +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/stormpkg/badvaultskeys.yaml +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/stormpkg/badvaultsschema.yaml +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/stormpkg/declaredfiles.yaml +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/stormpkg/docs/foobar.md +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/stormpkg/docs/foobar.svg +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/stormpkg/docs/index.md +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/stormpkg/dotstorm/dotstorm.yaml +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/stormpkg/dotstorm_noevents/dotstorm.yaml +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/stormpkg/dotstorm_noevents/storm/commands/dotstorm.bar.storm +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/stormpkg/dotstorm_noevents/storm/modules/dotstorm.foo.storm +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/stormpkg/files/data.dat +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/stormpkg/files/sub/nested.dat +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/stormpkg/nomime.yaml +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/stormpkg/nopath.yaml +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/stormpkg/nosuchfile.yaml +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/stormpkg/optic/index.html +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/stormpkg/storm/commands/invalidCMD.storm +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/stormpkg/storm/commands/testpkg.baz.storm +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/stormpkg/storm/commands/testpkgcmd.storm +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/stormpkg/storm/modules/apimod.storm +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/stormpkg/storm/modules/testmod.storm +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/stormpkg/testpkg.yaml +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/stormpkg/workflows/testpkg-bam.newp +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/stormpkg/workflows/testpkg-baz.yaml +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/stormpkg/workflows/testpkg-foo.yaml +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/test.dat +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/testpkg_build_docs/docs/index.md +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/testpkg_build_docs/docs/mocks/cassette.yaml +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/testpkg_build_docs/docs/stormpackage.md +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/testpkg_build_docs/docs/sub/image.svg +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/testpkg_build_docs/docs/sub/nested.md +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/testpkg_build_docs/docs/userguide.md +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/testpkg_build_docs/storm/commands/testcmd.storm +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/testpkg_build_docs/storm/modules/apimod.storm +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/testpkg_build_docs/storm/modules/testmod.storm +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/testpkg_build_docs/storm/testcmd.storm +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/testpkg_build_docs/testpkg.yaml +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/testpkg_build_docs_no_h1/docs/index.md +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/testpkg_build_docs_no_h1/docs/noh1.md +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/testpkg_build_docs_no_h1/testpkg.yaml +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/nopmod.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_assets.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_axon.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_common.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_daemon.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_data.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_docs_stormref.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_exc.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_glob.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_agenda.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_aha.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_ast.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_auth.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_autodoc.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_base.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_boss.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_cache.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_cell.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_certdir.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_chop.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_cli.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_cluster.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_cmd.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_config.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_const.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_coro.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_crypto_coin.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_crypto_ecc.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_crypto_jwk.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_crypto_passwd.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_crypto_rsa.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_crypto_tinfoil.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_datfile.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_drive.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_dyndeps.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_gis.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_grammar.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_hashitem.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_hashset.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_health.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_http.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_httpapi.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_httpclient.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_json.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_jsonstor.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_jsrpc.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_layer.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_link.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_lmdbslab.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_logging.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_mdparse.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_msgpack.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_multislabseqn.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_nexus.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_node.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_output.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_platforms_linux.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_process.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_processpool.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_provision.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_queue.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_reflect.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_scope.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_scrape.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_slabseqn.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_spawner.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_spooled.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_storm_format.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_stormctrl.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_stormhttp.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_aha.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_auth.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_basex.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_cache.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_cell.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_compression.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_easyperm.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_ecc.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_env.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_ethereum.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_file.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_gen.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_gis.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_hashes.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_hex.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_imap.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_index.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_infosec.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_ipv6.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_iters.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_json.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_jwt.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_log.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_macro.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_mime.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_modelext.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_oauth.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_pack.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_quorum.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_random.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_rsa.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_scrape.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_smtp.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_spooled.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_stats.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_stix.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_storm.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_tabular.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_utils.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_vertex.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_xml.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_yaml.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_stormsvc.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_task.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_thishost.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_time.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_trigger.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_urlhelp.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_version.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_view.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lookup_phonenum.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_model_auth.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_model_belief.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_model_biz.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_model_crypto.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_model_dns.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_model_economic.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_model_files.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_model_geopol.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_model_geospace.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_model_gov.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_model_gov_cn.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_model_gov_intl.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_model_gov_us.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_model_language.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_model_material.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_model_orgs.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_model_person.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_model_planning.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_model_proj.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_model_risk.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_model_science.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_model_transport.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_servers_axon.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_servers_cortex.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_servers_univ.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_telepath.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_tools_aha.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_tools_axon_copy.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_tools_axon_dump_load.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_tools_axon_get.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_tools_axon_put.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_tools_cortex_csv.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_tools_cortex_feed.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_tools_cortex_layer.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_tools_docker_validate.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_tools_service_apikey.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_tools_service_backup.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_tools_service_demote.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_tools_service_healthcheck.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_tools_service_modrole.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_tools_service_moduser.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_tools_service_promote.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_tools_service_reload.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_tools_service_shutdown.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_tools_service_snapshot.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_tools_storm_cli.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_tools_storm_lint.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_tools_storm_pkg_doc.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_tools_storm_pkg_gen.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_tools_storm_pkg_publish.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_tools_storm_printer.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_tools_storm_tester.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_tools_storm_validate.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_tools_utils_doc.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_tools_utils_docmanifest.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_tools_utils_easycert.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_tools_utils_guid.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_tools_utils_json2mpk.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_tools_utils_mdstorm.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_tools_utils_optimize.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_utils.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_utils_getrefs.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_utils_stormcov.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tools/__init__.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tools/aha/__init__.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tools/aha/clone.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tools/aha/del.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tools/aha/easycert.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tools/aha/enroll.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tools/aha/list.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tools/aha/mirror.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tools/aha/provision/__init__.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tools/aha/provision/service.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tools/aha/provision/user.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tools/axon/__init__.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tools/axon/copy.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tools/axon/dump.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tools/axon/get.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tools/axon/load.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tools/axon/put.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tools/cortex/__init__.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tools/cortex/csv.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tools/cortex/docmodel.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tools/cortex/feed.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tools/cortex/layer/__init__.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tools/cortex/layer/dump.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tools/cortex/layer/load.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tools/docker/__init__.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tools/docker/validate.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tools/service/__init__.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tools/service/apikey.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tools/service/backup.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tools/service/demote.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tools/service/healthcheck.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tools/service/modrole.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tools/service/moduser.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tools/service/promote.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tools/service/reload.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tools/service/shutdown.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tools/service/snapshot.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tools/storm/__init__.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tools/storm/__main__.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tools/storm/_cli.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tools/storm/_printer.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tools/storm/lint.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tools/storm/pkg/__init__.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tools/storm/pkg/doc.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tools/storm/pkg/gen.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tools/storm/pkg/publish.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tools/storm/tester.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tools/storm/validate.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tools/utils/__init__.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tools/utils/doc.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tools/utils/docmanifest.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tools/utils/easycert.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tools/utils/guid.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tools/utils/json2mpk.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tools/utils/mdstorm.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/tools/utils/optimize.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/utils/__init__.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/utils/getrefs.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/utils/stormcov.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/vendor/__init__.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/vendor/cashaddress/LICENSE +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/vendor/cashaddress/__init__.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/vendor/cashaddress/base58.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/vendor/cashaddress/convert.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/vendor/cashaddress/crypto.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/vendor/cashaddress/tests/__init__.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/vendor/cashaddress/tests/test_cashaddress.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/vendor/cpython/LICENSE +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/vendor/cpython/__init__.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/vendor/cpython/lib/__init__.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/vendor/cpython/lib/email/__init__.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/vendor/cpython/lib/email/_parseaddr.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/vendor/cpython/lib/email/utils.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/vendor/cpython/lib/ipaddress.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/vendor/cpython/lib/json.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/vendor/cpython/lib/test/__init__.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/vendor/cpython/lib/test/support/__init__.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/vendor/cpython/lib/test/test_email/__init__.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/vendor/cpython/lib/test/test_email/test_email.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/vendor/cpython/lib/test/test_email/test_parseaddr.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/vendor/cpython/lib/test/test_email/test_utils.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/vendor/cpython/lib/test/test_ipaddress.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/vendor/cpython/lib/test/test_json.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/vendor/substrateinterface/LICENSE +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/vendor/substrateinterface/__init__.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/vendor/substrateinterface/tests/__init__.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/vendor/substrateinterface/tests/test_ss58.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/vendor/substrateinterface/utils/__init__.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/vendor/substrateinterface/utils/ss58.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/vendor/utils.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/vendor/xrpl/LICENSE +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/vendor/xrpl/__init__.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/vendor/xrpl/constants.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/vendor/xrpl/core/__init__.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/vendor/xrpl/core/addresscodec/__init__.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/vendor/xrpl/core/addresscodec/codec.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/vendor/xrpl/core/addresscodec/exceptions.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/vendor/xrpl/core/addresscodec/main.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/vendor/xrpl/core/addresscodec/utils.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/vendor/xrpl/tests/__init__.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/vendor/xrpl/tests/test_codec.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/vendor/xrpl/tests/test_main.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse/vendor/xrpl/tests/test_main_test_cases.py +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse.egg-info/SOURCES.txt +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse.egg-info/dependency_links.txt +0 -0
- {synapse-3.6.0 → synapse-3.7.0}/synapse.egg-info/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: synapse
|
|
3
|
-
Version: 3.
|
|
3
|
+
Version: 3.7.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
|
|
@@ -20,18 +20,18 @@ Description-Content-Type: text/markdown
|
|
|
20
20
|
License-File: LICENSE
|
|
21
21
|
Requires-Dist: cryptography<51.0.0,>=46.0.7
|
|
22
22
|
Requires-Dist: msgpack<1.3.0,>=1.2.1
|
|
23
|
-
Requires-Dist: xxhash<
|
|
23
|
+
Requires-Dist: xxhash<4.1.0,>=1.4.4
|
|
24
24
|
Requires-Dist: lmdb<1.8.0,>=1.7.0
|
|
25
25
|
Requires-Dist: tornado<7.0.0,>=6.2.0
|
|
26
26
|
Requires-Dist: regex>=2022.9.11
|
|
27
27
|
Requires-Dist: PyYAML<6.1.0,>=5.4
|
|
28
28
|
Requires-Dist: aiohttp<3.15.0,>=3.14.1
|
|
29
|
-
Requires-Dist: aiohttp-socks<0.
|
|
29
|
+
Requires-Dist: aiohttp-socks<0.13.0,>=0.12.0
|
|
30
30
|
Requires-Dist: aiosmtplib<6.0.0,>=5.1.2
|
|
31
31
|
Requires-Dist: prompt_toolkit<3.1.0,>=3.0.29
|
|
32
32
|
Requires-Dist: lark==1.3.1
|
|
33
33
|
Requires-Dist: mistletoe<2.0.0,>=1.6.0
|
|
34
|
-
Requires-Dist: Pygments<2.
|
|
34
|
+
Requires-Dist: Pygments<2.22.0,>=2.7.4
|
|
35
35
|
Requires-Dist: packaging<27.0,>=20.0
|
|
36
36
|
Requires-Dist: fastjsonschema<2.22.0,>=2.20.0
|
|
37
37
|
Requires-Dist: stix2-validator<3.3.0,>=3.2.0
|
|
@@ -4,7 +4,7 @@ build-backend = 'setuptools.build_meta'
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = 'synapse'
|
|
7
|
-
version = '3.
|
|
7
|
+
version = '3.7.0'
|
|
8
8
|
authors = [
|
|
9
9
|
{ name = 'The Vertex Project LLC', email = 'root@vertex.link'},
|
|
10
10
|
]
|
|
@@ -24,18 +24,18 @@ classifiers = [
|
|
|
24
24
|
dependencies = [
|
|
25
25
|
'cryptography>=46.0.7,<51.0.0',
|
|
26
26
|
'msgpack>=1.2.1,<1.3.0',
|
|
27
|
-
'xxhash>=1.4.4,<
|
|
27
|
+
'xxhash>=1.4.4,<4.1.0',
|
|
28
28
|
'lmdb>=1.7.0,<1.8.0',
|
|
29
29
|
'tornado>=6.2.0,<7.0.0',
|
|
30
30
|
'regex>=2022.9.11',
|
|
31
31
|
'PyYAML>=5.4,<6.1.0',
|
|
32
32
|
'aiohttp>=3.14.1,<3.15.0',
|
|
33
|
-
'aiohttp-socks>=0.
|
|
33
|
+
'aiohttp-socks>=0.12.0,<0.13.0',
|
|
34
34
|
'aiosmtplib>=5.1.2,<6.0.0',
|
|
35
35
|
'prompt_toolkit>=3.0.29,<3.1.0',
|
|
36
36
|
'lark==1.3.1',
|
|
37
37
|
'mistletoe>=1.6.0,<2.0.0',
|
|
38
|
-
'Pygments>=2.7.4,<2.
|
|
38
|
+
'Pygments>=2.7.4,<2.22.0',
|
|
39
39
|
'packaging>=20.0,<27.0',
|
|
40
40
|
'fastjsonschema>=2.20.0,<2.22.0',
|
|
41
41
|
'stix2-validator>=3.2.0,<3.3.0',
|
|
@@ -459,9 +459,13 @@ class CoreApi(s_cell.CellApi):
|
|
|
459
459
|
self.user.confirm(('pkg', 'add'))
|
|
460
460
|
return await self.cell.addStormPkg(pkgdef, verify=verify)
|
|
461
461
|
|
|
462
|
-
async def delStormPkg(self, iden):
|
|
462
|
+
async def delStormPkg(self, iden, *, uninstall=False, keep=()):
|
|
463
463
|
self.user.confirm(('pkg', 'del'))
|
|
464
|
-
return await self.cell.delStormPkg(iden)
|
|
464
|
+
return await self.cell.delStormPkg(iden, uninstall=uninstall, keep=keep)
|
|
465
|
+
|
|
466
|
+
@s_cell.adminapi()
|
|
467
|
+
async def getStormPkgStatus(self, name):
|
|
468
|
+
return self.cell.getStormPkgStatus(name)
|
|
465
469
|
|
|
466
470
|
@s_cell.adminapi()
|
|
467
471
|
async def getStormPkgs(self):
|
|
@@ -755,6 +759,11 @@ class Cortex(s_oauth.OAuthMixin, s_axon.HasAxon, s_jsonstor.HasJsonStor, s_cell.
|
|
|
755
759
|
self.stormpkgvars = {} # type: Dict[str, s_lmdbslab.SafeKeyVal]
|
|
756
760
|
self.stormpkgstate = {} # type: Dict[str, s_lmdbslab.SafeKeyVal]
|
|
757
761
|
|
|
762
|
+
# name: running onload / uninstall task for a package. Only populated while
|
|
763
|
+
# the cortex is active.
|
|
764
|
+
self.stormpkgonload = {}
|
|
765
|
+
self.stormpkguninsttask = {}
|
|
766
|
+
|
|
758
767
|
# storm services, keyed by the cell type name of the service. a service
|
|
759
768
|
# is unique by cell type for a deployment, so no separate iden is needed.
|
|
760
769
|
self.svcs = {}
|
|
@@ -873,6 +882,7 @@ class Cortex(s_oauth.OAuthMixin, s_axon.HasAxon, s_jsonstor.HasJsonStor, s_cell.
|
|
|
873
882
|
self.tagmeta = self.cortexdata.getSubKeyVal('tagmeta:')
|
|
874
883
|
self.cmddefs = self.cortexdata.getSubKeyVal('storm:cmds:')
|
|
875
884
|
self.pkgdefs = self.cortexdata.getSubKeyVal('storm:packages:')
|
|
885
|
+
self.pkguninst = self.cortexdata.getSubKeyVal('storm:pkg:uninstall:')
|
|
876
886
|
self.svcdefs = self.cortexdata.getSubKeyVal('storm:services:')
|
|
877
887
|
self.quedefs = self.cortexdata.getSubKeyVal('storm:queues:')
|
|
878
888
|
|
|
@@ -1218,7 +1228,7 @@ class Cortex(s_oauth.OAuthMixin, s_axon.HasAxon, s_jsonstor.HasJsonStor, s_cell.
|
|
|
1218
1228
|
{'perm': ('pkg', 'add'), 'gate': 'cortex',
|
|
1219
1229
|
'desc': 'Controls access to adding storm packages.'},
|
|
1220
1230
|
{'perm': ('pkg', 'del'), 'gate': 'cortex',
|
|
1221
|
-
'desc': 'Controls access to deleting storm packages.'},
|
|
1231
|
+
'desc': 'Controls access to deleting storm packages, including uninstalling them and removing their vaults.'},
|
|
1222
1232
|
|
|
1223
1233
|
{'perm': ('storm',), 'gate': 'cortex',
|
|
1224
1234
|
'desc': 'Controls all Storm permissions.'},
|
|
@@ -1333,7 +1343,14 @@ class Cortex(s_oauth.OAuthMixin, s_axon.HasAxon, s_jsonstor.HasJsonStor, s_cell.
|
|
|
1333
1343
|
await view.initMergeTask()
|
|
1334
1344
|
|
|
1335
1345
|
for pkgdef in list(self.stormpkgs.values()):
|
|
1336
|
-
|
|
1346
|
+
pkgname = pkgdef.get('name')
|
|
1347
|
+
|
|
1348
|
+
# a package which is being uninstalled resumes its uninstall, and one
|
|
1349
|
+
# whose uninstall failed stays quiet until it is retried or deleted.
|
|
1350
|
+
if (status := self.pkguninst.get(pkgname)) is None:
|
|
1351
|
+
self._runStormPkgOnload(pkgdef)
|
|
1352
|
+
elif status.get('status') == 'uninstalling':
|
|
1353
|
+
self._initStormPkgUninstall(pkgname)
|
|
1337
1354
|
|
|
1338
1355
|
# a passive cortex does not register storm service packages, so reconcile
|
|
1339
1356
|
# them now that we are the leader. the service may have changed the
|
|
@@ -2189,18 +2206,38 @@ class Cortex(s_oauth.OAuthMixin, s_axon.HasAxon, s_jsonstor.HasJsonStor, s_cell.
|
|
|
2189
2206
|
self._reqStormPkgSigned(pkgdef)
|
|
2190
2207
|
|
|
2191
2208
|
await self._normStormPkg(pkgdef)
|
|
2209
|
+
|
|
2210
|
+
name = pkgdef.get('name')
|
|
2211
|
+
if self._isStormPkgUninstalling(name):
|
|
2212
|
+
mesg = f'Storm package {name} is currently being uninstalled.'
|
|
2213
|
+
raise s_exc.BadArg(mesg=mesg, name=name)
|
|
2214
|
+
|
|
2192
2215
|
return await self._push('pkg:add', pkgdef)
|
|
2193
2216
|
|
|
2194
2217
|
@s_nexus.Pusher.onPush('pkg:add')
|
|
2195
2218
|
async def _addStormPkg(self, pkgdef):
|
|
2196
2219
|
name = pkgdef.get('name')
|
|
2197
2220
|
|
|
2221
|
+
# a readonly cortex reads the status through to the leader's current value, which
|
|
2222
|
+
# may be ahead of the event being replayed, so only a writer consults it.
|
|
2223
|
+
reinstall = False
|
|
2224
|
+
if not self.readonly:
|
|
2225
|
+
|
|
2226
|
+
# an add which raced a leader side check must not disturb a running uninstall
|
|
2227
|
+
if self._isStormPkgUninstalling(name):
|
|
2228
|
+
return
|
|
2229
|
+
|
|
2230
|
+
# adding a package whose uninstall failed abandons the uninstall and
|
|
2231
|
+
# reinstalls it, even if the definition is unchanged.
|
|
2232
|
+
if self.pkguninst.pop(name, None) is not None:
|
|
2233
|
+
reinstall = True
|
|
2234
|
+
|
|
2198
2235
|
if not self.readonly:
|
|
2199
2236
|
# pkgdefs holds the last-loaded def, so bounce an identical re-add
|
|
2200
2237
|
# and drop the old def on a changed re-add.
|
|
2201
2238
|
olddef = self.pkgdefs.get(name, None)
|
|
2202
2239
|
if olddef is not None:
|
|
2203
|
-
if s_hashitem.hashitem(pkgdef) != s_hashitem.hashitem(olddef):
|
|
2240
|
+
if reinstall or s_hashitem.hashitem(pkgdef) != s_hashitem.hashitem(olddef):
|
|
2204
2241
|
self._dropStormPkg(olddef)
|
|
2205
2242
|
else:
|
|
2206
2243
|
return
|
|
@@ -2229,21 +2266,86 @@ class Cortex(s_oauth.OAuthMixin, s_axon.HasAxon, s_jsonstor.HasJsonStor, s_cell.
|
|
|
2229
2266
|
if self._reqAddableVaultType(vtdef):
|
|
2230
2267
|
await self._addVaultType(vtdef)
|
|
2231
2268
|
|
|
2269
|
+
gates, perms = self._getStormPkgBeholdPerms(pkgdef)
|
|
2270
|
+
await self.feedBeholder('pkg:add', pkgdef, gates=gates, perms=perms)
|
|
2271
|
+
|
|
2272
|
+
def _getStormPkgBeholdPerms(self, pkgdef):
|
|
2232
2273
|
gates = []
|
|
2233
2274
|
perms = []
|
|
2234
2275
|
pkgperms = pkgdef.get('perms')
|
|
2235
2276
|
if pkgperms:
|
|
2236
2277
|
gates = [p['gate'] for p in pkgperms if p.get('gate') is not None]
|
|
2237
2278
|
perms = [p['perm'] for p in pkgperms if p.get('perm') is not None]
|
|
2238
|
-
|
|
2279
|
+
return gates, perms
|
|
2280
|
+
|
|
2281
|
+
def getStormPkgStatus(self, name):
|
|
2282
|
+
'''
|
|
2283
|
+
Get the uninstall status of a Storm package.
|
|
2239
2284
|
|
|
2240
|
-
|
|
2285
|
+
Args:
|
|
2286
|
+
name (str): The name of the package.
|
|
2287
|
+
|
|
2288
|
+
Returns:
|
|
2289
|
+
(dict|None): A dict with the `status` ( "uninstalling" or "failed" ), the `keep` items,
|
|
2290
|
+
the `time` the status last changed and, for a failed uninstall, the failure `mesg`. None
|
|
2291
|
+
if the package is not being uninstalled.
|
|
2292
|
+
'''
|
|
2293
|
+
return self.pkguninst.get(name)
|
|
2294
|
+
|
|
2295
|
+
def _isStormPkgUninstalling(self, name):
|
|
2296
|
+
status = self.pkguninst.get(name)
|
|
2297
|
+
return status is not None and status.get('status') == 'uninstalling'
|
|
2298
|
+
|
|
2299
|
+
def _reqStormPkgKeep(self, pkgdef, keep):
|
|
2300
|
+
'''
|
|
2301
|
+
Validate the items to keep when uninstalling a package.
|
|
2302
|
+
'''
|
|
2303
|
+
valid = {kdef['name'] for kdef in pkgdef.get('uninstall', {}).get('keep', ())}
|
|
2304
|
+
if pkgdef.get('vaults'):
|
|
2305
|
+
valid.add('vaults')
|
|
2306
|
+
|
|
2307
|
+
if isinstance(keep, str) or not isinstance(keep, (list, tuple)):
|
|
2308
|
+
mesg = 'Uninstall keep items must be a list of strings.'
|
|
2309
|
+
raise s_exc.BadArg(mesg=mesg)
|
|
2310
|
+
|
|
2311
|
+
for item in keep:
|
|
2312
|
+
if not isinstance(item, str) or item not in valid:
|
|
2313
|
+
mesg = f'Invalid uninstall keep item: {item}'
|
|
2314
|
+
raise s_exc.BadArg(mesg=mesg, valid=sorted(valid))
|
|
2315
|
+
|
|
2316
|
+
return list(dict.fromkeys(keep))
|
|
2317
|
+
|
|
2318
|
+
async def delStormPkg(self, name, *, uninstall=False, keep=()):
|
|
2319
|
+
'''
|
|
2320
|
+
Delete a Storm package.
|
|
2321
|
+
|
|
2322
|
+
Args:
|
|
2323
|
+
name (str): The name of the package.
|
|
2324
|
+
uninstall (bool): Run the package uninstall routine, which removes the package
|
|
2325
|
+
configuration, state, queues and vaults as well as the package itself. The
|
|
2326
|
+
uninstall runs in the background and survives a restart.
|
|
2327
|
+
keep (list): Items to keep when uninstalling. These must be declared by the
|
|
2328
|
+
package, or be `vaults` for a package which declares vault types.
|
|
2329
|
+
'''
|
|
2241
2330
|
pkgdef = self.pkgdefs.get(name)
|
|
2242
2331
|
if pkgdef is None:
|
|
2243
2332
|
mesg = f'No storm package: {name}.'
|
|
2244
2333
|
raise s_exc.NoSuchPkg(mesg=mesg)
|
|
2245
2334
|
|
|
2246
|
-
|
|
2335
|
+
if not uninstall:
|
|
2336
|
+
if keep:
|
|
2337
|
+
mesg = 'Uninstall keep items require an uninstall.'
|
|
2338
|
+
raise s_exc.BadArg(mesg=mesg)
|
|
2339
|
+
|
|
2340
|
+
return await self._push('pkg:del', name)
|
|
2341
|
+
|
|
2342
|
+
if self._isStormPkgUninstalling(name):
|
|
2343
|
+
mesg = f'Storm package {name} is already being uninstalled.'
|
|
2344
|
+
raise s_exc.BadArg(mesg=mesg, name=name)
|
|
2345
|
+
|
|
2346
|
+
keep = self._reqStormPkgKeep(pkgdef, keep)
|
|
2347
|
+
|
|
2348
|
+
return await self._push('pkg:uninstall', name, keep, s_common.now())
|
|
2247
2349
|
|
|
2248
2350
|
@s_nexus.Pusher.onPush('pkg:del')
|
|
2249
2351
|
async def _delStormPkg(self, name):
|
|
@@ -2257,20 +2359,179 @@ class Cortex(s_oauth.OAuthMixin, s_axon.HasAxon, s_jsonstor.HasJsonStor, s_cell.
|
|
|
2257
2359
|
if pkgdef is None:
|
|
2258
2360
|
return
|
|
2259
2361
|
|
|
2362
|
+
# a deleted package must not leave work running, and deleting is how an
|
|
2363
|
+
# operator abandons an uninstall.
|
|
2364
|
+
self._cancelStormPkgOnload(name)
|
|
2365
|
+
if (task := self.stormpkguninsttask.pop(name, None)) is not None:
|
|
2366
|
+
task.cancel()
|
|
2367
|
+
|
|
2368
|
+
if not self.readonly:
|
|
2369
|
+
self.pkguninst.pop(name, None)
|
|
2370
|
+
|
|
2371
|
+
await self._dropStormPkgDef(name, pkgdef)
|
|
2372
|
+
|
|
2373
|
+
async def _dropStormPkgDef(self, name, pkgdef):
|
|
2374
|
+
|
|
2260
2375
|
if not self.readonly:
|
|
2261
2376
|
self.pkgdefs.pop(name, None)
|
|
2262
2377
|
self._dropStormPkg(pkgdef)
|
|
2263
2378
|
|
|
2264
2379
|
self._clearPermDefs()
|
|
2265
2380
|
|
|
2266
|
-
gates =
|
|
2267
|
-
perms = []
|
|
2268
|
-
pkgperms = pkgdef.get('perms')
|
|
2269
|
-
if pkgperms:
|
|
2270
|
-
gates = [p['gate'] for p in pkgperms if p.get('gate') is not None]
|
|
2271
|
-
perms = [p['perm'] for p in pkgperms if p.get('perm') is not None]
|
|
2381
|
+
gates, perms = self._getStormPkgBeholdPerms(pkgdef)
|
|
2272
2382
|
await self.feedBeholder('pkg:del', {'name': name}, gates=gates, perms=perms)
|
|
2273
2383
|
|
|
2384
|
+
@s_nexus.Pusher.onPush('pkg:uninstall')
|
|
2385
|
+
async def _uninstStormPkg(self, name, keep, time):
|
|
2386
|
+
|
|
2387
|
+
pkgdef = self.stormpkgs.get(name)
|
|
2388
|
+
if pkgdef is None:
|
|
2389
|
+
return
|
|
2390
|
+
|
|
2391
|
+
if not self.readonly:
|
|
2392
|
+
|
|
2393
|
+
# a replay must not restart or re-announce the uninstall
|
|
2394
|
+
if self._isStormPkgUninstalling(name):
|
|
2395
|
+
return
|
|
2396
|
+
|
|
2397
|
+
self.pkguninst.set(name, {'status': 'uninstalling', 'keep': keep, 'time': time})
|
|
2398
|
+
|
|
2399
|
+
gates, perms = self._getStormPkgBeholdPerms(pkgdef)
|
|
2400
|
+
await self.feedBeholder('pkg:uninstall:init', {'name': name, 'keep': keep}, gates=gates, perms=perms)
|
|
2401
|
+
|
|
2402
|
+
if self.isactive:
|
|
2403
|
+
self._initStormPkgUninstall(name)
|
|
2404
|
+
|
|
2405
|
+
def _initStormPkgUninstall(self, name):
|
|
2406
|
+
'''
|
|
2407
|
+
Start the background uninstall task for a package.
|
|
2408
|
+
'''
|
|
2409
|
+
# a finished task may not have been reaped yet, so a retry must not be mistaken for a duplicate
|
|
2410
|
+
if (task := self.stormpkguninsttask.get(name)) is not None and not task.done():
|
|
2411
|
+
return
|
|
2412
|
+
|
|
2413
|
+
async def _uninstall():
|
|
2414
|
+
|
|
2415
|
+
async with await self.boss.promote(f'storm:pkg:uninstall:{name}', self.auth.rootuser,
|
|
2416
|
+
info={'name': name}, background=True, protected=True):
|
|
2417
|
+
|
|
2418
|
+
if self.safemode:
|
|
2419
|
+
await self.fire('core:pkg:uninstall:skipped', pkg=name, reason='safemode')
|
|
2420
|
+
return
|
|
2421
|
+
|
|
2422
|
+
if (task := self._cancelStormPkgOnload(name)) is not None:
|
|
2423
|
+
await asyncio.gather(task, return_exceptions=True)
|
|
2424
|
+
|
|
2425
|
+
pkgdef = self.stormpkgs.get(name)
|
|
2426
|
+
status = self.pkguninst.get(name)
|
|
2427
|
+
|
|
2428
|
+
# the package was deleted or re-added while we were waiting
|
|
2429
|
+
if pkgdef is None or status is None or status.get('status') != 'uninstalling':
|
|
2430
|
+
return
|
|
2431
|
+
|
|
2432
|
+
keep = status.get('keep')
|
|
2433
|
+
logextra = self.getLogExtra(pkg=name, vers=pkgdef.get('version'))
|
|
2434
|
+
|
|
2435
|
+
await self.fire('core:pkg:uninstall:start', pkg=name, keep=keep)
|
|
2436
|
+
|
|
2437
|
+
failed = None
|
|
2438
|
+
|
|
2439
|
+
if (udef := pkgdef.get('uninstall')) is not None:
|
|
2440
|
+
|
|
2441
|
+
try:
|
|
2442
|
+
opts = copy.deepcopy(udef.get('queryopts', {}))
|
|
2443
|
+
opts.setdefault('vars', {})['keep'] = list(keep)
|
|
2444
|
+
|
|
2445
|
+
async for mesg in self.storm(udef['query'], opts=opts):
|
|
2446
|
+
match mesg[0]:
|
|
2447
|
+
case 'print':
|
|
2448
|
+
logger.info(f'{name} uninstall output: {mesg[1].get("mesg")}', extra=logextra)
|
|
2449
|
+
case 'warn':
|
|
2450
|
+
logger.warning(f'{name} uninstall output: {mesg[1].get("mesg")}', extra=logextra)
|
|
2451
|
+
case 'err':
|
|
2452
|
+
logger.error(f'{name} uninstall output: {mesg[1]}', extra=logextra)
|
|
2453
|
+
failed = f'{mesg[1][0]}: {mesg[1][1].get("mesg")}'
|
|
2454
|
+
await asyncio.sleep(0)
|
|
2455
|
+
|
|
2456
|
+
except Exception as exc:
|
|
2457
|
+
logger.warning(f'Uninstall query failed for package: {name}', exc_info=exc, extra=logextra)
|
|
2458
|
+
failed = f'{exc.__class__.__name__}: {exc}'
|
|
2459
|
+
|
|
2460
|
+
if failed is not None:
|
|
2461
|
+
await self._push('pkg:uninstall:fail', name, failed, s_common.now())
|
|
2462
|
+
await self.fire('core:pkg:uninstall:failed', pkg=name, mesg=failed)
|
|
2463
|
+
return
|
|
2464
|
+
|
|
2465
|
+
await self._push('pkg:uninstall:fini', name, keep)
|
|
2466
|
+
await self.fire('core:pkg:uninstall:complete', pkg=name)
|
|
2467
|
+
|
|
2468
|
+
task = self.runActiveTask(_uninstall())
|
|
2469
|
+
|
|
2470
|
+
def _fini(task):
|
|
2471
|
+
if self.stormpkguninsttask.get(name) is task:
|
|
2472
|
+
self.stormpkguninsttask.pop(name, None)
|
|
2473
|
+
|
|
2474
|
+
self.stormpkguninsttask[name] = task
|
|
2475
|
+
task.add_done_callback(_fini)
|
|
2476
|
+
|
|
2477
|
+
@s_nexus.Pusher.onPush('pkg:uninstall:fail')
|
|
2478
|
+
async def _failStormPkgUninstall(self, name, mesg, time):
|
|
2479
|
+
|
|
2480
|
+
pkgdef = self.stormpkgs.get(name)
|
|
2481
|
+
if pkgdef is None:
|
|
2482
|
+
return
|
|
2483
|
+
|
|
2484
|
+
if not self.readonly:
|
|
2485
|
+
|
|
2486
|
+
# a replay, or a failure which raced a delete or re-add, is not a failure of the current uninstall
|
|
2487
|
+
status = self.pkguninst.get(name)
|
|
2488
|
+
if status is None or status.get('status') != 'uninstalling':
|
|
2489
|
+
return
|
|
2490
|
+
|
|
2491
|
+
status.update({'status': 'failed', 'mesg': mesg, 'time': time})
|
|
2492
|
+
self.pkguninst.set(name, status)
|
|
2493
|
+
|
|
2494
|
+
gates, perms = self._getStormPkgBeholdPerms(pkgdef)
|
|
2495
|
+
await self.feedBeholder('pkg:uninstall:fail', {'name': name, 'mesg': mesg}, gates=gates, perms=perms)
|
|
2496
|
+
|
|
2497
|
+
@s_nexus.Pusher.onPush('pkg:uninstall:fini')
|
|
2498
|
+
async def _finiStormPkgUninstall(self, name, keep):
|
|
2499
|
+
'''
|
|
2500
|
+
Remove everything the cortex owns for a package, then the package.
|
|
2501
|
+
'''
|
|
2502
|
+
# source the def from the in-memory registry for the same reason _delStormPkg does
|
|
2503
|
+
pkgdef = self.stormpkgs.get(name)
|
|
2504
|
+
if pkgdef is None:
|
|
2505
|
+
return
|
|
2506
|
+
|
|
2507
|
+
if not self.readonly:
|
|
2508
|
+
|
|
2509
|
+
status = self.pkguninst.get(name)
|
|
2510
|
+
if status is None or status.get('status') != 'uninstalling':
|
|
2511
|
+
return
|
|
2512
|
+
|
|
2513
|
+
if 'vaults' not in keep:
|
|
2514
|
+
for vtype in pkgdef.get('vaults', {}):
|
|
2515
|
+
for vault in [v for v in self._getVaults() if v.get('type') == vtype]:
|
|
2516
|
+
await self._hndldelVault(vault.get('iden'))
|
|
2517
|
+
await self._delVaultType(vtype)
|
|
2518
|
+
|
|
2519
|
+
for qinfo in [q for q in self.stormpkgqueue.list() if q.get('pkgname') == name]:
|
|
2520
|
+
await self._delStormPkgQueue(name, qinfo.get('name'))
|
|
2521
|
+
|
|
2522
|
+
await self._getStormPkgVarKV(name).truncate()
|
|
2523
|
+
await self._getStormPkgStateKV(name).truncate()
|
|
2524
|
+
|
|
2525
|
+
self.stormpkgvars.pop(name, None)
|
|
2526
|
+
self.stormpkgstate.pop(name, None)
|
|
2527
|
+
|
|
2528
|
+
self.pkguninst.pop(name, None)
|
|
2529
|
+
|
|
2530
|
+
await self._dropStormPkgDef(name, pkgdef)
|
|
2531
|
+
|
|
2532
|
+
gates, perms = self._getStormPkgBeholdPerms(pkgdef)
|
|
2533
|
+
await self.feedBeholder('pkg:uninstall:fini', {'name': name, 'keep': keep}, gates=gates, perms=perms)
|
|
2534
|
+
|
|
2274
2535
|
def getStormPkgSvc(self, name):
|
|
2275
2536
|
'''
|
|
2276
2537
|
Return the cell type name of the storm service which delivered a package.
|
|
@@ -2338,6 +2599,9 @@ class Cortex(s_oauth.OAuthMixin, s_axon.HasAxon, s_jsonstor.HasJsonStor, s_cell.
|
|
|
2338
2599
|
name = pkgdef.get('name', '')
|
|
2339
2600
|
logger.exception(f'Error loading pkg: {name}, {str(e)}')
|
|
2340
2601
|
|
|
2602
|
+
def getPkgProvides(self):
|
|
2603
|
+
return {name: self.VERSION for name in self.PKG_PROVIDES}
|
|
2604
|
+
|
|
2341
2605
|
async def _getStormDepPkg(self, pkgname):
|
|
2342
2606
|
'''
|
|
2343
2607
|
Resolve a dependency/conflict name to a currently loaded package def.
|
|
@@ -2525,6 +2789,22 @@ class Cortex(s_oauth.OAuthMixin, s_axon.HasAxon, s_jsonstor.HasJsonStor, s_cell.
|
|
|
2525
2789
|
# Validate package def (post normalization)
|
|
2526
2790
|
s_schemas.reqValidPkgdef(pkgdef)
|
|
2527
2791
|
|
|
2792
|
+
if (uninstall := pkgdef.get('uninstall')) is not None:
|
|
2793
|
+
|
|
2794
|
+
if validstorm:
|
|
2795
|
+
await self.getStormQuery(uninstall.get('query'))
|
|
2796
|
+
|
|
2797
|
+
keepnames = set()
|
|
2798
|
+
for kdef in uninstall.get('keep', ()):
|
|
2799
|
+
kname = kdef.get('name')
|
|
2800
|
+
|
|
2801
|
+
# vaults are kept by the cortex, not the package uninstall query
|
|
2802
|
+
if kname == 'vaults' or kname in keepnames:
|
|
2803
|
+
mesg = f'Uninstall keep name is reserved or duplicated: {kname}'
|
|
2804
|
+
raise s_exc.BadPkgDef(mesg=mesg, name=kname)
|
|
2805
|
+
|
|
2806
|
+
keepnames.add(kname)
|
|
2807
|
+
|
|
2528
2808
|
for configvar in pkgdef.get('configvars', ()):
|
|
2529
2809
|
self._reqStormPkgVarType(pkgname, configvar.get('type'))
|
|
2530
2810
|
|
|
@@ -2691,7 +2971,28 @@ class Cortex(s_oauth.OAuthMixin, s_axon.HasAxon, s_jsonstor.HasJsonStor, s_cell.
|
|
|
2691
2971
|
|
|
2692
2972
|
await self.fire('core:pkg:onload:complete', pkg=name, storvers=curvers)
|
|
2693
2973
|
|
|
2694
|
-
|
|
2974
|
+
# a re-add must not leave the previous onload running alongside the new one
|
|
2975
|
+
self._cancelStormPkgOnload(name)
|
|
2976
|
+
|
|
2977
|
+
task = self.runActiveTask(_onload())
|
|
2978
|
+
|
|
2979
|
+
def _fini(task):
|
|
2980
|
+
if self.stormpkgonload.get(name) is task:
|
|
2981
|
+
self.stormpkgonload.pop(name, None)
|
|
2982
|
+
|
|
2983
|
+
self.stormpkgonload[name] = task
|
|
2984
|
+
task.add_done_callback(_fini)
|
|
2985
|
+
|
|
2986
|
+
def _cancelStormPkgOnload(self, name):
|
|
2987
|
+
'''
|
|
2988
|
+
Cancel the running onload/inits task for a package, if there is one.
|
|
2989
|
+
|
|
2990
|
+
Returns:
|
|
2991
|
+
(asyncio.Task|None): The cancelled task, which the caller may await.
|
|
2992
|
+
'''
|
|
2993
|
+
if (task := self.stormpkgonload.pop(name, None)) is not None:
|
|
2994
|
+
task.cancel()
|
|
2995
|
+
return task
|
|
2695
2996
|
|
|
2696
2997
|
# N.B. This function is intentionally not async in order to prevent possible user race conditions for code
|
|
2697
2998
|
# executing outside of the nexus lock.
|
|
@@ -7373,11 +7674,11 @@ class Cortex(s_oauth.OAuthMixin, s_axon.HasAxon, s_jsonstor.HasJsonStor, s_cell.
|
|
|
7373
7674
|
|
|
7374
7675
|
async def replaceVaultSecrets(self, iden, valu):
|
|
7375
7676
|
'''
|
|
7376
|
-
Replace the entire vault
|
|
7677
|
+
Replace the entire vault secrets.
|
|
7377
7678
|
|
|
7378
7679
|
Args:
|
|
7379
7680
|
iden (str): The iden of the vault to edit.
|
|
7380
|
-
valu (
|
|
7681
|
+
valu (dict): New secrets object to store on the vault.
|
|
7381
7682
|
|
|
7382
7683
|
Raises:
|
|
7383
7684
|
synapse.exc.BadArg: `valu` is not a dictionary.
|
|
@@ -7426,7 +7727,7 @@ class Cortex(s_oauth.OAuthMixin, s_axon.HasAxon, s_jsonstor.HasJsonStor, s_cell.
|
|
|
7426
7727
|
|
|
7427
7728
|
Raises: None
|
|
7428
7729
|
|
|
7429
|
-
Yields:
|
|
7730
|
+
Yields: vault definition dictionaries.
|
|
7430
7731
|
'''
|
|
7431
7732
|
for vault in self._getVaults():
|
|
7432
7733
|
yield vault
|
|
@@ -30,6 +30,16 @@ The `storm_validate` MCP tool validates Storm syntax without executing the query
|
|
|
30
30
|
1. Call `storm_validate` with the query text.
|
|
31
31
|
2. If `valid` is `false`, read `err` / `mesg` (which include line/column info), fix the query, and re-validate before proceeding.
|
|
32
32
|
|
|
33
|
+
### Linting Storm (Required)
|
|
34
|
+
|
|
35
|
+
The `storm_lint` MCP tool lints a query against the Cortex's own data model (including extended forms and properties) without executing it. Lint every query before running it, and fix or consider each finding.
|
|
36
|
+
|
|
37
|
+
- Arguments: `query`, plus optional `select` / `ignore` / `enable` lists of rule codes or code prefixes.
|
|
38
|
+
- Returns `{"findings": [{"rule", "severity", "line", "column", "mesg"}, ...]}`; an empty list means the query is clean.
|
|
39
|
+
- A syntax error is reported as a single `E001` finding with its line and column, so a clean lint also implies valid syntax.
|
|
40
|
+
- Only `storm` mode queries are supported; `lookup` mode text usually returns an `E001` syntax error.
|
|
41
|
+
- Other findings report code which does not run as intended on Synapse 3.x (`R`), pipeline usage which may not do what was intended (`P`), and Storm which could be written more simply (`S`). Suppress a deliberate finding with a trailing `// noqa` or `// noqa: <code>` comment on that line; `E001` cannot be suppressed.
|
|
42
|
+
|
|
33
43
|
### Running Storm Queries
|
|
34
44
|
|
|
35
45
|
The `storm` MCP tool runs a Storm query against the Cortex and returns a **page** of result messages: `{"messages": [(<type>, <info>), ...], "cursor": <str-or-null>}`. Each message is a `(<type>, <info>)` tuple as yielded by the Storm runtime (e.g. `node`, `print`, `warn`, `err`, `fini`).
|
|
@@ -986,7 +996,7 @@ $func("positional", key=1)
|
|
|
986
996
|
|
|
987
997
|
1. **Isolate the failing query** -- extract the minimal Storm snippet that reproduces the error.
|
|
988
998
|
|
|
989
|
-
2. **
|
|
999
|
+
2. **Lint and check the error location** -- run `storm_lint` on the query; its findings (including an `E001` syntax error) and the `storm_validate` result (and `BadSyntax`) provide `line` and `column`. Look at that exact position in the query.
|
|
990
1000
|
|
|
991
1001
|
3. **Build up incrementally and check the output at each step** -- for complex queries, construct the query one pipeline stage at a time, running each stage with the `storm` tool and confirming it yields the expected nodes/output before adding the next operation. This pins down which stage changes the results. The focus here is verifying the expected output at each step; you can also `storm_validate` each stage for syntax, or do both:
|
|
992
1002
|
```storm
|
|
@@ -1011,6 +1021,7 @@ $func("positional", key=1)
|
|
|
1011
1021
|
| Tool / File | Purpose |
|
|
1012
1022
|
|-------------|---------|
|
|
1013
1023
|
| `storm_validate` MCP tool | Validate Storm syntax without executing a query |
|
|
1024
|
+
| `storm_lint` MCP tool | Lint a query against the Cortex data model (syntax errors as `E001`, plus style/performance findings) |
|
|
1014
1025
|
| `storm` / `call_storm` MCP tools | Run Storm queries against the Cortex (page of result messages / return a value) |
|
|
1015
1026
|
| `view_list` / `view_get` MCP tools | List views (for the `view` storm opt) and read the user's default view |
|
|
1016
1027
|
| `view_fork` / `view_del` / `view_merge` MCP tools | Fork, delete, and merge views (use fork+del to safely test ingest) |
|
|
@@ -666,6 +666,18 @@ changes:
|
|
|
666
666
|
src:
|
|
667
667
|
became: :caller:phone
|
|
668
668
|
goals: [renamed]
|
|
669
|
+
tel:txtmesg:
|
|
670
|
+
props:
|
|
671
|
+
from:
|
|
672
|
+
became: :actor:phone
|
|
673
|
+
goals: [renamed]
|
|
674
|
+
svctype:
|
|
675
|
+
goals: [model-refinement]
|
|
676
|
+
reason: The message service type is now recorded with the `:type` taxonomy (for example `sms`, `mms`, or `rcs`).
|
|
677
|
+
to:
|
|
678
|
+
became: :to:phone
|
|
679
|
+
goals: [renamed]
|
|
680
|
+
reason: The inherited `inet:service:message:to` property is the destination account, role, or channel.
|
|
669
681
|
transport:cargo:
|
|
670
682
|
props:
|
|
671
683
|
loaded:
|
|
@@ -279,7 +279,7 @@ class Prop:
|
|
|
279
279
|
'form': self.form.name,
|
|
280
280
|
'relname': self.name,
|
|
281
281
|
'base': self.name.split(':')[-1],
|
|
282
|
-
'computed':
|
|
282
|
+
'computed': bool(self.info.get('computed', False)),
|
|
283
283
|
'extmodel': self.isext,
|
|
284
284
|
}
|
|
285
285
|
|
|
@@ -5327,7 +5327,7 @@ class Cell(s_nexus.Pusher, s_telepath.Aware):
|
|
|
5327
5327
|
# we can ignore the yielded aha names because we embed it in the task
|
|
5328
5328
|
async for (ahasvc, (ok, retn)) in self.callPeerGenr(todo, timeout=timeout):
|
|
5329
5329
|
|
|
5330
|
-
if not ok:
|
|
5330
|
+
if not ok:
|
|
5331
5331
|
logger.warning(f'getTasks() on {ahasvc} failed: {retn}')
|
|
5332
5332
|
continue
|
|
5333
5333
|
|
|
@@ -257,6 +257,22 @@ STOR_TYPE_POLYARRAY = STOR_FLAG_ARRAY | STOR_TYPE_POLY
|
|
|
257
257
|
STOR_MASK_ARRAY = 0x7fff
|
|
258
258
|
STOR_MASK_POLY = 0xbfff
|
|
259
259
|
|
|
260
|
+
def hasBoolDiff(stortype, valu, oldv):
|
|
261
|
+
'''
|
|
262
|
+
Return True if a new value stores a bool where an equal old value stores an int (True == 1).
|
|
263
|
+
'''
|
|
264
|
+
if stortype & STOR_FLAG_ARRAY:
|
|
265
|
+
return any(aval[1].__class__ is bool and oval[1].__class__ is not bool for aval, oval in zip(valu, oldv))
|
|
266
|
+
|
|
267
|
+
if (stortype & STOR_MASK_POLY) != STOR_TYPE_U8:
|
|
268
|
+
return False
|
|
269
|
+
|
|
270
|
+
if stortype & STOR_FLAG_POLY:
|
|
271
|
+
valu = valu[1]
|
|
272
|
+
oldv = oldv[1]
|
|
273
|
+
|
|
274
|
+
return valu.__class__ is bool and oldv.__class__ is not bool
|
|
275
|
+
|
|
260
276
|
# Edit types (etyp)
|
|
261
277
|
|
|
262
278
|
EDIT_NODE_ADD = 0 # (<etyp>, (<valu>, <type>, <virts>))
|
|
@@ -2598,6 +2614,10 @@ class StorTypePoly(StorType):
|
|
|
2598
2614
|
if (valu := self.layr.stortypes[realtype].decodeIndx(bytz[10:])) is s_common.novalu:
|
|
2599
2615
|
return s_common.novalu
|
|
2600
2616
|
|
|
2617
|
+
# bool shares the U8 index with small ints
|
|
2618
|
+
if realtype == STOR_TYPE_U8 and (typ := self.layr.core.model.type(typename)) is not None and 'bool' in typ.types:
|
|
2619
|
+
valu = bool(valu)
|
|
2620
|
+
|
|
2601
2621
|
return (typename, valu)
|
|
2602
2622
|
|
|
2603
2623
|
async def indxByProp(self, form, prop, cmpr, valu, reverse=False, virt=None, stortype=None):
|
|
@@ -4834,7 +4854,7 @@ class Layer(s_nexus.Pusher):
|
|
|
4834
4854
|
|
|
4835
4855
|
oldv, _, oldvirts = props.get(prop, (None, None, None))
|
|
4836
4856
|
|
|
4837
|
-
if valu == oldv and virts == oldvirts:
|
|
4857
|
+
if valu == oldv and virts == oldvirts and (oldv is None or not hasBoolDiff(stortype, valu, oldv)):
|
|
4838
4858
|
return
|
|
4839
4859
|
|
|
4840
4860
|
return edit
|
|
@@ -4913,7 +4933,7 @@ class Layer(s_nexus.Pusher):
|
|
|
4913
4933
|
if sode is not None and (tagprops := sode.get('tagprops')) is not None:
|
|
4914
4934
|
tag, prop, valu, stortype, virts = edit[1]
|
|
4915
4935
|
if (tp_dict := tagprops.get(tag)) is not None:
|
|
4916
|
-
if tp_dict.get(prop) == (valu, stortype, virts):
|
|
4936
|
+
if (curv := tp_dict.get(prop)) == (valu, stortype, virts) and not hasBoolDiff(stortype, valu, curv[0]):
|
|
4917
4937
|
return
|
|
4918
4938
|
|
|
4919
4939
|
return edit
|
|
@@ -5299,7 +5319,7 @@ class Layer(s_nexus.Pusher):
|
|
|
5299
5319
|
|
|
5300
5320
|
oldv, oldt, oldvirts = sode['props'].get(prop, (None, None, None))
|
|
5301
5321
|
|
|
5302
|
-
if valu == oldv:
|
|
5322
|
+
if valu == oldv and (oldv is None or not hasBoolDiff(stortype, valu, oldv)):
|
|
5303
5323
|
if virts != oldvirts:
|
|
5304
5324
|
sode['props'][prop] = (valu, stortype, virts)
|
|
5305
5325
|
self.dirty[nid] = sode
|
|
@@ -5733,7 +5753,7 @@ class Layer(s_nexus.Pusher):
|
|
|
5733
5753
|
|
|
5734
5754
|
(oldv, oldt, oldvirts) = oldv
|
|
5735
5755
|
|
|
5736
|
-
if (valu, stortype) == (oldv, oldt):
|
|
5756
|
+
if (valu, stortype) == (oldv, oldt) and not hasBoolDiff(stortype, valu, oldv):
|
|
5737
5757
|
if virts != oldvirts:
|
|
5738
5758
|
sode['tagprops'][tag][prop] = (valu, stortype, virts)
|
|
5739
5759
|
self.dirty[nid] = sode
|