synapse 3.5.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.5.0/synapse.egg-info → synapse-3.7.0}/PKG-INFO +4 -4
- {synapse-3.5.0 → synapse-3.7.0}/pyproject.toml +4 -4
- {synapse-3.5.0 → synapse-3.7.0}/synapse/axon.py +3 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/cortex.py +319 -18
- {synapse-3.5.0 → synapse-3.7.0}/synapse/data/skills/storm/SKILL.md +14 -2
- {synapse-3.5.0 → synapse-3.7.0}/synapse/data/v2modelmap.yaml +12 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/datamodel.py +1 -1
- {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/autodoc.py +25 -12
- {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/cell.py +6 -10
- {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/layer.py +24 -4
- {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/mcp.py +35 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/mddocs.py +107 -14
- {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/mdstorm.py +1 -1
- {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/modelrev.py +83 -2
- {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/schemas.py +102 -25
- {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/stormlib/auth.py +3 -3
- {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/stormlib/cortex.py +9 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/stormlib/markdown.py +16 -5
- {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/stormlib/model.py +210 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/stormlib/pkg.py +63 -5
- {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/stormlib/task.py +19 -9
- {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/stormlib/vault.py +18 -15
- synapse-3.7.0/synapse/lib/stormlint.py +1149 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/types.py +11 -7
- {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/version.py +2 -2
- {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/view.py +7 -5
- {synapse-3.5.0 → synapse-3.7.0}/synapse/models/base.py +20 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/models/doc.py +10 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/models/economic.py +15 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/models/entity.py +21 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/models/inet.py +3 -3
- {synapse-3.5.0 → synapse-3.7.0}/synapse/models/telco.py +16 -0
- synapse-3.7.0/synapse/tests/files/stormcov/embed/embed.json +14 -0
- synapse-3.7.0/synapse/tests/files/stormcov/embed/embed.ts +13 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/stormcov/runtsafety.storm +1 -1
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/stormcov/spin.storm +1 -1
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_axon.py +13 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_cortex.py +33 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_datamodel.py +8 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_autodoc.py +104 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_cell.py +12 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_mcp.py +57 -1
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_mddocs.py +98 -0
- {synapse-3.5.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.5.0 → synapse-3.7.0}/synapse/tests/test_lib_storm.py +27 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_cortex.py +7 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_markdown.py +64 -1
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_model.py +383 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_pkg.py +359 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_task.py +29 -1
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_vault.py +19 -0
- synapse-3.7.0/synapse/tests/test_lib_stormlint.py +671 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_stormtypes.py +26 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_types.py +77 -19
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_model_base.py +8 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_model_doc.py +3 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_model_economic.py +26 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_model_entity.py +48 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_model_inet.py +41 -20
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_model_infotech.py +4 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_model_syn.py +1 -2
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_model_telco.py +28 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_tools_cortex_docmodel.py +8 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_tools_service_demote.py +57 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_tools_service_shutdown.py +19 -4
- synapse-3.7.0/synapse/tests/test_tools_storm_lint.py +300 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_utils_stormcov.py +188 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/utils.py +2 -4
- synapse-3.7.0/synapse/tools/storm/lint.py +238 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/utils/stormcov.py +234 -19
- {synapse-3.5.0 → synapse-3.7.0/synapse.egg-info}/PKG-INFO +4 -4
- {synapse-3.5.0 → synapse-3.7.0}/synapse.egg-info/SOURCES.txt +6 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse.egg-info/requires.txt +3 -3
- synapse-3.5.0/synapse/tests/test_lib_modelrev.py +0 -57
- {synapse-3.5.0 → synapse-3.7.0}/LICENSE +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/README.md +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/setup.cfg +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/__init__.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/assets/__init__.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/cells.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/common.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/daemon.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/data/__init__.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/data/attack-flow/LICENSE.txt +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/data/attack-flow/README.md +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/data/attack-flow/attack-flow-schema-2.0.0.json +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/data/certs/cas/The Vertex Project Intermediate CA (2026).crt +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/data/certs/cas/The Vertex Project ROOT CA (2026).crt +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/data/certs/crls/The Vertex Project Intermediate CA (2026).crl +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/data/certs/crls/The Vertex Project ROOT CA (2026).crl +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/data/iana.tlds.mpk +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/data/iana.uris.mpk +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/data/jsonschemas/README.md +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/data/jsonschemas/json-schema.org/draft-07/schema +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/LICENSE.txt +0 -0
- {synapse-3.5.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.5.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.5.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.5.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.5.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.5.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.5.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.5.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.5.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.5.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.5.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.5.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.5.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.5.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.5.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.5.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.5.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.5.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.5.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.5.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.5.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.5.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.5.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.5.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.5.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.5.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.5.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.5.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.5.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.5.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.5.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.5.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.5.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.5.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.5.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.5.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.5.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.5.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.5.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.5.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.5.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.5.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.5.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.5.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.5.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.5.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.5.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.5.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.5.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.5.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.5.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.5.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.5.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.5.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.5.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.5.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.5.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.5.0 → synapse-3.7.0}/synapse/data/lark/__init__.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/data/lark/imap.lark +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/data/lark/storm.lark +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/exc.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/glob.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/__init__.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/_http.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/agenda.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/aha.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/ast.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/auth.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/base.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/boss.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/cache.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/certdir.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/chop.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/cli.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/cluster.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/cmd.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/config.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/const.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/coro.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/crypto/__init__.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/crypto/coin.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/crypto/ecc.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/crypto/jwk.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/crypto/passwd.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/crypto/rsa.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/crypto/tinfoil.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/crypto/utils.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/datfile.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/drive.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/dyndeps.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/editor.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/gis.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/grammar.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/hashitem.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/hashset.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/health.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/httpapi.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/httpclient.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/json.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/jsonstor.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/jsrpc.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/link.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/lmdbslab.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/logging.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/mdparse.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/msgpack.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/multislabseqn.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/nexus.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/node.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/nodefuse.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/oauth.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/output.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/parser.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/platforms/__init__.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/platforms/common.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/platforms/darwin.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/platforms/freebsd.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/platforms/linux.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/platforms/windows.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/process.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/processpool.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/provision.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/queue.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/reflect.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/scope.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/scrape.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/share.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/slabseqn.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/spawner.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/spooled.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/storm.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/storm_format.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/stormctrl.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/stormhttp.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/stormlib/__init__.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/stormlib/aha.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/stormlib/basex.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/stormlib/bytes.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/stormlib/cache.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/stormlib/cell.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/stormlib/compression.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/stormlib/cryptoutils.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/stormlib/easyperm.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/stormlib/ecc.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/stormlib/ethereum.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/stormlib/file.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/stormlib/gen.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/stormlib/gis.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/stormlib/graph.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/stormlib/hashes.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/stormlib/hex.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/stormlib/imap.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/stormlib/index.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/stormlib/infosec.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/stormlib/ipv6.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/stormlib/iters.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/stormlib/json.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/stormlib/jwt.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/stormlib/log.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/stormlib/macro.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/stormlib/math.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/stormlib/mime.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/stormlib/modelext.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/stormlib/oauth.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/stormlib/pack.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/stormlib/quorum.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/stormlib/random.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/stormlib/rsa.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/stormlib/scrape.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/stormlib/smtp.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/stormlib/spooled.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/stormlib/stats.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/stormlib/stix.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/stormlib/storm.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/stormlib/tabular.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/stormlib/utils.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/stormlib/version.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/stormlib/vertex.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/stormlib/xml.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/stormlib/yaml.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/stormsvc.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/stormtypes.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/task.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/thishost.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/thisplat.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/threads.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/time.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/trigger.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/urlhelp.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/lookup/__init__.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/lookup/cvss.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/lookup/iana.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/lookup/macho.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/lookup/pe.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/lookup/phonenum.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/lookup/timezones.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/models/__init__.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/models/auth.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/models/belief.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/models/biz.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/models/crypto.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/models/dns.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/models/files.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/models/geopol.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/models/geospace.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/models/gov.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/models/ind.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/models/infotech.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/models/language.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/models/material.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/models/orgs.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/models/person.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/models/planning.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/models/proj.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/models/risk.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/models/science.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/models/syn.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/models/transport.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/servers/__init__.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/servers/aha.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/servers/axon.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/servers/cell.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/servers/cortex.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/servers/jsonstor.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/telepath.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/__init__.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/TestUtilsGetrefs.test_basics.yaml +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/__init__.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/aha/certs/cas/synapse.crt.tinfoil +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/aha/certs/cas/synapse.key.tinfoil +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/aha/certs/hosts/00.aha.loop.vertex.link.crt.tinfoil +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/aha/certs/hosts/00.aha.loop.vertex.link.key.tinfoil +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/aha/certs/users/root@synapse.crt.tinfoil +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/aha/certs/users/root@synapse.key.tinfoil +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/attack_flow/CISA AA22-138B VMWare Workspace (Alt).json +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/attack_flow/CISA_Iranian_APT.json +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/certdir/cas/ca.crt.tinfoil +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/certdir/cas/ca.key.tinfoil +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/certdir/code/codesign.crt.tinfoil +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/certdir/code/codesign.key.tinfoil +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/certdir/code/untrusted.crt.tinfoil +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/certdir/code/untrusted.key.tinfoil +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/certdir/hosts/localhost.crt.tinfoil +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/certdir/hosts/localhost.key.tinfoil +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/certdir/users/root.crt.tinfoil +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/certdir/users/root.key.tinfoil +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/certdir/users/user.crt.tinfoil +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/certdir/users/user.key.tinfoil +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/cpedata.json +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/markdown/column-names.json +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/mdstorm/httprespmulti.yaml +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/mdstorm/testsvc.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/stix_export/basic.json +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/stix_export/custom0.json +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/stix_export/risk0.json +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/stix_import/apt1.json +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/stix_import/oasis-example-00.json +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/stix_import/scos.json +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/stormcov/argvquery.storm +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/stormcov/argvquery2.storm +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/stormcov/argvquery3.storm +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/stormcov/argvquery4.storm +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/stormcov/argvquery5.storm +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/stormcov/badstorm.storm +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/stormcov/continueloop.storm +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/stormcov/dupesubs.storm +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/stormcov/dupewarn.storm +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/stormcov/dupfunc.storm +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/stormcov/embed/embed.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/stormcov/embed/embed.yaml +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/stormcov/embedquery.storm +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/stormcov/embedquery2.storm +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/stormcov/embedquery3.storm +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/stormcov/embedquery4.storm +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/stormcov/embedquery5.storm +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/stormcov/emptybody.storm +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/stormcov/exprdict.storm +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/stormcov/forloop.storm +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/stormcov/ifelif.storm +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/stormcov/ifelse.storm +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/stormcov/lookup.storm +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/stormcov/pivot.storm +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/stormcov/pragma-nocov.storm +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/stormcov/stopreturn.storm +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/stormcov/stormctrl.storm +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/stormcov/switch.storm +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/stormcov/switchnodefault.storm +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/stormcov/trycatch.storm +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/stormcov/whilebackedge.storm +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/stormcov/whilecontinue.storm +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/stormcov/whileloop.storm +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/stormcov/whilewithnode.storm +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/stormmod/common +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/stormpkg/badapidef.yaml +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/stormpkg/badcmdname.yaml +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/stormpkg/badendpoints.yaml +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/stormpkg/badinits.yaml +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/stormpkg/badjsonpkg.yaml +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/stormpkg/badvaultskeys.yaml +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/stormpkg/badvaultsschema.yaml +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/stormpkg/declaredfiles.yaml +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/stormpkg/docs/foobar.md +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/stormpkg/docs/foobar.svg +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/stormpkg/docs/index.md +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/stormpkg/dotstorm/dotstorm.yaml +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/stormpkg/dotstorm_noevents/dotstorm.yaml +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/stormpkg/dotstorm_noevents/storm/commands/dotstorm.bar.storm +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/stormpkg/dotstorm_noevents/storm/modules/dotstorm.foo.storm +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/stormpkg/files/data.dat +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/stormpkg/files/sub/nested.dat +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/stormpkg/nomime.yaml +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/stormpkg/nopath.yaml +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/stormpkg/nosuchfile.yaml +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/stormpkg/optic/index.html +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/stormpkg/storm/commands/invalidCMD.storm +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/stormpkg/storm/commands/testpkg.baz.storm +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/stormpkg/storm/commands/testpkgcmd.storm +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/stormpkg/storm/modules/apimod.storm +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/stormpkg/storm/modules/testmod.storm +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/stormpkg/testpkg.yaml +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/stormpkg/workflows/testpkg-bam.newp +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/stormpkg/workflows/testpkg-baz.yaml +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/stormpkg/workflows/testpkg-foo.yaml +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/test.dat +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/testpkg_build_docs/docs/index.md +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/testpkg_build_docs/docs/mocks/cassette.yaml +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/testpkg_build_docs/docs/stormpackage.md +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/testpkg_build_docs/docs/sub/image.svg +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/testpkg_build_docs/docs/sub/nested.md +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/testpkg_build_docs/docs/userguide.md +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/testpkg_build_docs/storm/commands/testcmd.storm +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/testpkg_build_docs/storm/modules/apimod.storm +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/testpkg_build_docs/storm/modules/testmod.storm +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/testpkg_build_docs/storm/testcmd.storm +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/testpkg_build_docs/testpkg.yaml +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/testpkg_build_docs_no_h1/docs/index.md +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/testpkg_build_docs_no_h1/docs/noh1.md +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/testpkg_build_docs_no_h1/testpkg.yaml +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/nopmod.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_assets.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_common.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_daemon.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_data.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_docs_stormref.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_exc.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_glob.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_agenda.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_aha.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_ast.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_auth.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_base.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_boss.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_cache.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_certdir.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_chop.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_cli.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_cluster.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_cmd.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_config.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_const.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_coro.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_crypto_coin.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_crypto_ecc.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_crypto_jwk.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_crypto_passwd.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_crypto_rsa.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_crypto_tinfoil.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_datfile.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_drive.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_dyndeps.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_gis.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_grammar.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_hashitem.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_hashset.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_health.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_http.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_httpapi.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_httpclient.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_json.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_jsonstor.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_jsrpc.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_layer.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_link.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_lmdbslab.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_logging.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_mdparse.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_msgpack.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_multislabseqn.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_nexus.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_node.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_output.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_platforms_linux.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_process.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_processpool.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_provision.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_queue.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_reflect.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_scope.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_scrape.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_slabseqn.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_spawner.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_spooled.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_storm_format.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_stormctrl.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_stormhttp.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_aha.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_auth.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_basex.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_cache.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_cell.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_compression.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_easyperm.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_ecc.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_env.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_ethereum.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_file.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_gen.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_gis.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_hashes.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_hex.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_imap.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_index.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_infosec.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_ipv6.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_iters.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_json.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_jwt.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_log.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_macro.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_mime.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_modelext.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_oauth.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_pack.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_quorum.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_random.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_rsa.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_scrape.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_smtp.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_spooled.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_stats.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_stix.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_storm.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_tabular.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_utils.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_vertex.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_xml.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_yaml.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_stormsvc.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_task.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_thishost.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_time.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_trigger.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_urlhelp.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_version.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_view.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lookup_phonenum.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_model_auth.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_model_belief.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_model_biz.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_model_crypto.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_model_dns.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_model_files.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_model_geopol.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_model_geospace.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_model_gov.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_model_gov_cn.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_model_gov_intl.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_model_gov_us.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_model_language.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_model_material.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_model_orgs.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_model_person.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_model_planning.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_model_proj.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_model_risk.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_model_science.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_model_transport.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_servers_axon.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_servers_cortex.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_servers_univ.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_telepath.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_tools_aha.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_tools_axon_copy.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_tools_axon_dump_load.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_tools_axon_get.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_tools_axon_put.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_tools_cortex_csv.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_tools_cortex_feed.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_tools_cortex_layer.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_tools_docker_validate.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_tools_service_apikey.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_tools_service_backup.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_tools_service_healthcheck.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_tools_service_modrole.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_tools_service_moduser.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_tools_service_promote.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_tools_service_reload.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_tools_service_snapshot.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_tools_storm_cli.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_tools_storm_pkg_doc.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_tools_storm_pkg_gen.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_tools_storm_pkg_publish.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_tools_storm_printer.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_tools_storm_tester.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_tools_storm_validate.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_tools_utils_doc.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_tools_utils_docmanifest.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_tools_utils_easycert.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_tools_utils_guid.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_tools_utils_json2mpk.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_tools_utils_mdstorm.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_tools_utils_optimize.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_utils.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_utils_getrefs.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tools/__init__.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tools/aha/__init__.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tools/aha/clone.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tools/aha/del.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tools/aha/easycert.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tools/aha/enroll.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tools/aha/list.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tools/aha/mirror.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tools/aha/provision/__init__.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tools/aha/provision/service.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tools/aha/provision/user.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tools/axon/__init__.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tools/axon/copy.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tools/axon/dump.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tools/axon/get.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tools/axon/load.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tools/axon/put.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tools/cortex/__init__.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tools/cortex/csv.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tools/cortex/docmodel.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tools/cortex/feed.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tools/cortex/layer/__init__.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tools/cortex/layer/dump.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tools/cortex/layer/load.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tools/docker/__init__.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tools/docker/validate.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tools/service/__init__.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tools/service/apikey.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tools/service/backup.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tools/service/demote.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tools/service/healthcheck.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tools/service/modrole.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tools/service/moduser.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tools/service/promote.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tools/service/reload.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tools/service/shutdown.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tools/service/snapshot.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tools/storm/__init__.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tools/storm/__main__.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tools/storm/_cli.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tools/storm/_printer.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tools/storm/pkg/__init__.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tools/storm/pkg/doc.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tools/storm/pkg/gen.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tools/storm/pkg/publish.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tools/storm/tester.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tools/storm/validate.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tools/utils/__init__.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tools/utils/doc.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tools/utils/docmanifest.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tools/utils/easycert.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tools/utils/guid.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tools/utils/json2mpk.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tools/utils/mdstorm.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/tools/utils/optimize.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/utils/__init__.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/utils/getrefs.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/vendor/__init__.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/vendor/cashaddress/LICENSE +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/vendor/cashaddress/__init__.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/vendor/cashaddress/base58.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/vendor/cashaddress/convert.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/vendor/cashaddress/crypto.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/vendor/cashaddress/tests/__init__.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/vendor/cashaddress/tests/test_cashaddress.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/vendor/cpython/LICENSE +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/vendor/cpython/__init__.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/vendor/cpython/lib/__init__.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/vendor/cpython/lib/email/__init__.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/vendor/cpython/lib/email/_parseaddr.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/vendor/cpython/lib/email/utils.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/vendor/cpython/lib/ipaddress.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/vendor/cpython/lib/json.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/vendor/cpython/lib/test/__init__.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/vendor/cpython/lib/test/support/__init__.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/vendor/cpython/lib/test/test_email/__init__.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/vendor/cpython/lib/test/test_email/test_email.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/vendor/cpython/lib/test/test_email/test_parseaddr.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/vendor/cpython/lib/test/test_email/test_utils.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/vendor/cpython/lib/test/test_ipaddress.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/vendor/cpython/lib/test/test_json.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/vendor/substrateinterface/LICENSE +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/vendor/substrateinterface/__init__.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/vendor/substrateinterface/tests/__init__.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/vendor/substrateinterface/tests/test_ss58.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/vendor/substrateinterface/utils/__init__.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/vendor/substrateinterface/utils/ss58.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/vendor/utils.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/vendor/xrpl/LICENSE +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/vendor/xrpl/__init__.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/vendor/xrpl/constants.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/vendor/xrpl/core/__init__.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/vendor/xrpl/core/addresscodec/__init__.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/vendor/xrpl/core/addresscodec/codec.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/vendor/xrpl/core/addresscodec/exceptions.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/vendor/xrpl/core/addresscodec/main.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/vendor/xrpl/core/addresscodec/utils.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/vendor/xrpl/tests/__init__.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/vendor/xrpl/tests/test_codec.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/vendor/xrpl/tests/test_main.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse/vendor/xrpl/tests/test_main_test_cases.py +0 -0
- {synapse-3.5.0 → synapse-3.7.0}/synapse.egg-info/dependency_links.txt +0 -0
- {synapse-3.5.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`).
|
|
@@ -653,6 +663,7 @@ inet:fqdn { -> inet:dns:a [ +#reviewed ] } // still has inet:fqdn nodes in the p
|
|
|
653
663
|
init { ... } // runs once before any nodes are allowed through the pipeline
|
|
654
664
|
empty { ... } // runs if pipeline is empty
|
|
655
665
|
fini { ... } // runs once after all nodes have passed through the pipeline
|
|
666
|
+
exec { ... } // runs once, discarding the nodes it yields; inbound nodes pass through
|
|
656
667
|
```
|
|
657
668
|
|
|
658
669
|
### Built-in Commands
|
|
@@ -661,7 +672,6 @@ fini { ... } // runs once after all nodes have
|
|
|
661
672
|
limit 10 // limit output count
|
|
662
673
|
count // count nodes
|
|
663
674
|
uniq // deduplicate
|
|
664
|
-
spin // consume without output
|
|
665
675
|
max :prop // keep max by property
|
|
666
676
|
min :prop // keep min by property
|
|
667
677
|
tee { query1 } { query2 } // branch pipeline
|
|
@@ -974,6 +984,7 @@ $func("positional", key=1)
|
|
|
974
984
|
- Double-underscore `__` prefix for module-internal variables and functions: they cannot be accessed from outside the module that defines them (e.g. `function __getJson()`)
|
|
975
985
|
- Module variables at top level: `$setup = $lib.import(...)`, `$srcnode = (null)`
|
|
976
986
|
- Format strings with backticks for interpolation: `` `text {$var}` ``
|
|
987
|
+
- Avoid `spin`: run a query whose nodes are not needed in an `exec { ... }` block, or isolate it in a function, and a query that returns a value uses `return()`, or `fini { return() }` when more than one node can flow
|
|
977
988
|
- Parenthesize values and conditions so Storm evaluates them as typed expressions rather than bare strings or edit syntax: `(true)` / `(false)` / `(null)` (not `$lib.true` / `$lib.false` / `$lib.null`), numbers `(42)`, collections `([])` / `({})`, and comparisons like `if ($a = null)`
|
|
978
989
|
- Use `$lib.raise(ErrName, "message")` for errors, `$lib.exit("message")` for fatal exits
|
|
979
990
|
- Use `return()` with empty parens to return `(null)`
|
|
@@ -985,7 +996,7 @@ $func("positional", key=1)
|
|
|
985
996
|
|
|
986
997
|
1. **Isolate the failing query** -- extract the minimal Storm snippet that reproduces the error.
|
|
987
998
|
|
|
988
|
-
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.
|
|
989
1000
|
|
|
990
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:
|
|
991
1002
|
```storm
|
|
@@ -1010,6 +1021,7 @@ $func("positional", key=1)
|
|
|
1010
1021
|
| Tool / File | Purpose |
|
|
1011
1022
|
|-------------|---------|
|
|
1012
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) |
|
|
1013
1025
|
| `storm` / `call_storm` MCP tools | Run Storm queries against the Cortex (page of result messages / return a value) |
|
|
1014
1026
|
| `view_list` / `view_get` MCP tools | List views (for the `view` storm opt) and read the user's default view |
|
|
1015
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
|
|
|
@@ -1752,22 +1752,35 @@ async def processStormModulesMd(md, pkgname, modules):
|
|
|
1752
1752
|
md.addHead(mname, lvl=2, anchor=anchor)
|
|
1753
1753
|
|
|
1754
1754
|
for apidef in apidefs:
|
|
1755
|
-
|
|
1756
|
-
apiname = apidef['name']
|
|
1757
|
-
apidesc = apidef['desc']
|
|
1758
|
-
apitype = apidef['type']
|
|
1759
|
-
|
|
1760
|
-
callsig = genCallsig(apitype)
|
|
1761
|
-
md.addHead(f'{apiname}{callsig}', lvl=3)
|
|
1762
|
-
if depr := apidef.get('deprecated'):
|
|
1763
|
-
md.addLines(*genDeprecationWarningMd(apiname, depr))
|
|
1764
|
-
md.addLines(*prepareMdLines(apidesc))
|
|
1765
|
-
md.addLines(*getArgLinesMd(apitype))
|
|
1766
|
-
md.addLines(*getReturnLinesMd(apitype))
|
|
1755
|
+
_renderApiDefMd(md, apidef, 3)
|
|
1767
1756
|
|
|
1768
1757
|
if not hasapi:
|
|
1769
1758
|
md.addLines('This package does not export any Storm APIs.', '')
|
|
1770
1759
|
|
|
1760
|
+
def _renderApiDefMd(md, apidef, lvl):
|
|
1761
|
+
'''
|
|
1762
|
+
Render one module apidef: a function, or a class followed by each of its methods one level down.
|
|
1763
|
+
'''
|
|
1764
|
+
apiname = apidef['name']
|
|
1765
|
+
apidesc = apidef['desc']
|
|
1766
|
+
apitype = apidef['type']
|
|
1767
|
+
|
|
1768
|
+
callsig = genCallsig(apitype)
|
|
1769
|
+
md.addHead(f'{apiname}{callsig}', lvl=lvl)
|
|
1770
|
+
if depr := apidef.get('deprecated'):
|
|
1771
|
+
md.addLines(*genDeprecationWarningMd(apiname, depr))
|
|
1772
|
+
|
|
1773
|
+
md.addLines(*prepareMdLines(apidesc))
|
|
1774
|
+
md.addLines(*getArgLinesMd(apitype))
|
|
1775
|
+
|
|
1776
|
+
# a class returns nothing itself: its methods each document their own returns
|
|
1777
|
+
if apitype.get('type') != 'class':
|
|
1778
|
+
md.addLines(*getReturnLinesMd(apitype))
|
|
1779
|
+
return
|
|
1780
|
+
|
|
1781
|
+
for methdef in apitype['methods']:
|
|
1782
|
+
_renderApiDefMd(md, methdef, lvl + 1)
|
|
1783
|
+
|
|
1771
1784
|
def _renderDepsTableMd(rows):
|
|
1772
1785
|
lines = ['| Name | Version | Optional | Description |', '|---|---|---|---|']
|
|
1773
1786
|
for name, vers, optional, desc in rows:
|