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