synapse 2.175.0__tar.gz → 2.176.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of synapse might be problematic. Click here for more details.
- {synapse-2.175.0/synapse.egg-info → synapse-2.176.0}/PKG-INFO +1 -1
- {synapse-2.175.0 → synapse-2.176.0}/pyproject.toml +1 -1
- {synapse-2.175.0 → synapse-2.176.0}/synapse/cortex.py +1 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/lib/ast.py +6 -5
- {synapse-2.175.0 → synapse-2.176.0}/synapse/lib/storm.py +9 -4
- synapse-2.176.0/synapse/lib/stormlib/storm.py +178 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/lib/version.py +2 -2
- {synapse-2.175.0 → synapse-2.176.0}/synapse/models/inet.py +23 -0
- synapse-2.176.0/synapse/tests/test_lib_stormlib_storm.py +144 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_model_inet.py +31 -0
- {synapse-2.175.0 → synapse-2.176.0/synapse.egg-info}/PKG-INFO +1 -1
- synapse-2.175.0/synapse/lib/stormlib/storm.py +0 -66
- synapse-2.175.0/synapse/tests/test_lib_stormlib_storm.py +0 -63
- {synapse-2.175.0 → synapse-2.176.0}/LICENSE +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/README.rst +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/setup.cfg +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/__init__.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/axon.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/cells.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/cmds/__init__.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/cmds/boss.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/cmds/cortex.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/cmds/hive.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/common.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/cryotank.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/daemon.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/data/__init__.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/data/attack-flow/LICENSE.txt +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/data/attack-flow/README.md +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/data/attack-flow/attack-flow-schema-2.0.0.json +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/data/certs/cas/The Vertex Project Intermediate CA 00.crt +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/data/certs/cas/The Vertex Project ROOT CA.crt +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/data/certs/crls/The Vertex Project Intermediate CA 00.crl +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/data/certs/crls/The Vertex Project ROOT CA.crl +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/data/iana.tlds.mpk +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/data/jsonschemas/README.md +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/LICENSE.txt +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/common/binary.json +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/common/bundle.json +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/common/core.json +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/common/cyber-observable-core.json +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/common/dictionary.json +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/common/extension-definition.json +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/common/extension.json +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/common/external-reference.json +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/common/granular-marking.json +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/common/hashes-type.json +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/common/hex.json +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/common/identifier.json +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/common/kill-chain-phase.json +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/common/language-content.json +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/common/marking-definition.json +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/common/properties.json +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/common/timestamp.json +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/common/url-regex.json +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/observables/artifact.json +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/observables/autonomous-system.json +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/observables/directory.json +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/observables/domain-name.json +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/observables/email-addr.json +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/observables/email-message.json +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/observables/file.json +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/observables/ipv4-addr.json +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/observables/ipv6-addr.json +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/observables/mac-addr.json +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/observables/mutex.json +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/observables/network-traffic.json +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/observables/process.json +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/observables/software.json +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/observables/url.json +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/observables/user-account.json +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/observables/windows-registry-key.json +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/observables/x509-certificate.json +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/sdos/attack-pattern.json +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/sdos/campaign.json +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/sdos/course-of-action.json +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/sdos/grouping.json +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/sdos/identity.json +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/sdos/incident.json +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/sdos/indicator.json +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/sdos/infrastructure.json +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/sdos/intrusion-set.json +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/sdos/location.json +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/sdos/malware-analysis.json +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/sdos/malware.json +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/sdos/note.json +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/sdos/observed-data.json +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/sdos/opinion.json +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/sdos/report.json +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/sdos/threat-actor.json +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/sdos/tool.json +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/sdos/vulnerability.json +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/sros/relationship.json +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/sros/sighting.json +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/datamodel.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/exc.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/glob.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/lib/__init__.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/lib/agenda.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/lib/aha.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/lib/autodoc.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/lib/base.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/lib/boss.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/lib/cache.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/lib/cell.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/lib/certdir.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/lib/chop.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/lib/cli.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/lib/cmd.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/lib/cmdr.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/lib/config.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/lib/const.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/lib/coro.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/lib/crypto/__init__.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/lib/crypto/coin.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/lib/crypto/ecc.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/lib/crypto/passwd.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/lib/crypto/rsa.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/lib/crypto/tinfoil.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/lib/datfile.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/lib/dyndeps.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/lib/encoding.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/lib/gis.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/lib/grammar.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/lib/hashitem.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/lib/hashset.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/lib/health.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/lib/hive.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/lib/hiveauth.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/lib/httpapi.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/lib/ingest.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/lib/interval.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/lib/jsonstor.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/lib/jupyter.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/lib/layer.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/lib/link.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/lib/lmdbslab.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/lib/modelrev.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/lib/module.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/lib/modules.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/lib/msgpack.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/lib/multislabseqn.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/lib/nexus.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/lib/node.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/lib/oauth.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/lib/output.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/lib/parser.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/lib/platforms/__init__.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/lib/platforms/common.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/lib/platforms/darwin.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/lib/platforms/freebsd.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/lib/platforms/linux.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/lib/platforms/windows.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/lib/queue.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/lib/ratelimit.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/lib/reflect.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/lib/rstorm.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/lib/schemas.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/lib/scope.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/lib/scrape.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/lib/share.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/lib/slaboffs.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/lib/slabseqn.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/lib/snap.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/lib/spooled.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/lib/storm.lark +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/lib/storm_format.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/lib/stormctrl.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/lib/stormhttp.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/lib/stormlib/__init__.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/lib/stormlib/aha.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/lib/stormlib/auth.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/lib/stormlib/backup.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/lib/stormlib/basex.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/lib/stormlib/cache.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/lib/stormlib/cell.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/lib/stormlib/compression.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/lib/stormlib/cortex.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/lib/stormlib/easyperm.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/lib/stormlib/env.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/lib/stormlib/ethereum.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/lib/stormlib/gen.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/lib/stormlib/gis.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/lib/stormlib/graph.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/lib/stormlib/hashes.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/lib/stormlib/hex.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/lib/stormlib/imap.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/lib/stormlib/infosec.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/lib/stormlib/ipv6.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/lib/stormlib/iters.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/lib/stormlib/json.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/lib/stormlib/log.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/lib/stormlib/macro.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/lib/stormlib/math.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/lib/stormlib/mime.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/lib/stormlib/model.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/lib/stormlib/modelext.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/lib/stormlib/notifications.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/lib/stormlib/oauth.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/lib/stormlib/pack.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/lib/stormlib/project.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/lib/stormlib/random.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/lib/stormlib/scrape.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/lib/stormlib/smtp.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/lib/stormlib/spooled.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/lib/stormlib/stats.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/lib/stormlib/stix.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/lib/stormlib/vault.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/lib/stormlib/version.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/lib/stormlib/xml.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/lib/stormlib/yaml.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/lib/stormsvc.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/lib/stormtypes.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/lib/stormwhois.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/lib/structlog.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/lib/task.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/lib/thishost.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/lib/thisplat.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/lib/threads.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/lib/time.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/lib/trigger.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/lib/types.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/lib/urlhelp.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/lib/view.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/lookup/__init__.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/lookup/cvss.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/lookup/iana.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/lookup/iso3166.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/lookup/macho.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/lookup/pe.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/lookup/phonenum.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/lookup/timezones.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/mindmeld.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/models/__init__.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/models/auth.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/models/base.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/models/belief.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/models/biz.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/models/crypto.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/models/dns.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/models/economic.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/models/entity.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/models/files.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/models/geopol.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/models/geospace.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/models/gov/__init__.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/models/gov/cn.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/models/gov/intl.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/models/gov/us.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/models/infotech.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/models/language.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/models/material.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/models/media.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/models/orgs.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/models/person.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/models/planning.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/models/proj.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/models/risk.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/models/science.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/models/syn.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/models/telco.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/models/transport.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/servers/__init__.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/servers/aha.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/servers/axon.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/servers/cell.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/servers/cortex.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/servers/cryotank.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/servers/jsonstor.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/servers/stemcell.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/telepath.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/__init__.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/files/TestUtilsGetrefs.test_basics.yaml +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/files/__init__.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/files/attack_flow/CISA AA22-138B VMWare Workspace (Alt).json +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/files/attack_flow/CISA_Iranian_APT.json +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/files/certdir/cas/ca.crt +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/files/certdir/cas/ca.key +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/files/certdir/hosts/localhost.crt +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/files/certdir/hosts/localhost.key +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/files/certdir/users/root.crt +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/files/certdir/users/root.key +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/files/certdir/users/user.crt +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/files/certdir/users/user.key +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/files/cpedata.json +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/files/rstorm/httpresp1.json +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/files/rstorm/httpresp2.json +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/files/rstorm/httpresp3.json +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/files/rstorm/httprespmulti.yaml +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/files/rstorm/testsvc.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/files/stix_export/basic.json +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/files/stix_export/custom0.json +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/files/stix_export/risk0.json +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/files/stix_import/apt1.json +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/files/stix_import/oasis-example-00.json +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/files/stormcov/argvquery.storm +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/files/stormcov/dupesubs.storm +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/files/stormcov/lookup.storm +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/files/stormcov/pivot.storm +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/files/stormcov/spin.storm +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/files/stormcov/stormctrl.storm +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/files/stormmod/common +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/files/stormpkg/badapidef.yaml +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/files/stormpkg/badcmdname.yaml +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/files/stormpkg/badjsonpkg.yaml +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/files/stormpkg/docs/foobar.md +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/files/stormpkg/docs/foobar.svg +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/files/stormpkg/dotstorm/dotstorm.yaml +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/files/stormpkg/dotstorm/storm/commands/dotstorm.bar.storm +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/files/stormpkg/dotstorm/storm/modules/dotstorm.foo.storm +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/files/stormpkg/nocontent.yaml +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/files/stormpkg/nomime.yaml +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/files/stormpkg/nopath.yaml +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/files/stormpkg/nosuchfile.yaml +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/files/stormpkg/notitle.yaml +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/files/stormpkg/optic/index.html +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/files/stormpkg/storm/commands/invalidCMD +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/files/stormpkg/storm/commands/testpkg.baz +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/files/stormpkg/storm/commands/testpkgcmd +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/files/stormpkg/storm/modules/apimod +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/files/stormpkg/storm/modules/testmod +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/files/stormpkg/testpkg.yaml +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/files/stormpkg/workflows/testpkg-bam.newp +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/files/stormpkg/workflows/testpkg-baz.yaml +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/files/stormpkg/workflows/testpkg-foo.yaml +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/files/test.dat +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/files/testcore/cell.yaml +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/nopmod.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_axon.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_cmds_boss.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_cmds_cortex.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_cmds_hive.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_common.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_cortex.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_cryotank.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_daemon.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_data.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_datamodel.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_exc.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_glob.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_init.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_lib_agenda.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_lib_aha.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_lib_ast.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_lib_autodoc.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_lib_base.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_lib_boss.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_lib_cache.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_lib_cell.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_lib_certdir.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_lib_chop.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_lib_cli.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_lib_config.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_lib_const.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_lib_coro.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_lib_crypto_coin.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_lib_crypto_ecc.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_lib_crypto_passwd.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_lib_crypto_tinfoil.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_lib_datfile.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_lib_dyndeps.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_lib_encoding.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_lib_gis.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_lib_grammar.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_lib_hashitem.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_lib_hashset.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_lib_health.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_lib_hive.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_lib_hiveauth.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_lib_httpapi.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_lib_interval.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_lib_jsonstor.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_lib_jupyter.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_lib_layer.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_lib_link.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_lib_lmdbslab.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_lib_modelrev.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_lib_module.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_lib_msgpack.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_lib_multislabseqn.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_lib_nexus.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_lib_node.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_lib_output.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_lib_platforms_linux.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_lib_queue.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_lib_ratelimit.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_lib_reflect.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_lib_rstorm.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_lib_scope.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_lib_scrape.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_lib_slaboffs.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_lib_slabseqn.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_lib_snap.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_lib_spooled.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_lib_storm.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_lib_storm_format.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_lib_stormhttp.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_lib_stormlib_aha.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_lib_stormlib_auth.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_lib_stormlib_backup.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_lib_stormlib_basex.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_lib_stormlib_cache.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_lib_stormlib_cell.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_lib_stormlib_compression.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_lib_stormlib_cortex.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_lib_stormlib_easyperm.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_lib_stormlib_env.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_lib_stormlib_ethereum.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_lib_stormlib_gen.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_lib_stormlib_gis.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_lib_stormlib_hashes.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_lib_stormlib_hex.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_lib_stormlib_imap.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_lib_stormlib_infosec.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_lib_stormlib_ipv6.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_lib_stormlib_iters.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_lib_stormlib_json.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_lib_stormlib_log.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_lib_stormlib_macro.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_lib_stormlib_mime.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_lib_stormlib_model.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_lib_stormlib_modelext.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_lib_stormlib_oauth.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_lib_stormlib_pack.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_lib_stormlib_random.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_lib_stormlib_scrape.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_lib_stormlib_smtp.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_lib_stormlib_spooled.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_lib_stormlib_stats.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_lib_stormlib_stix.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_lib_stormlib_vault.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_lib_stormlib_xml.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_lib_stormlib_yaml.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_lib_stormsvc.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_lib_stormtypes.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_lib_stormwhois.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_lib_structlog.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_lib_task.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_lib_thishost.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_lib_time.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_lib_trigger.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_lib_types.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_lib_urlhelp.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_lib_version.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_lib_view.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_lookup_iso3166.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_lookup_phonenum.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_mindmeld.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_model_auth.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_model_base.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_model_belief.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_model_biz.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_model_crypto.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_model_dns.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_model_economic.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_model_files.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_model_geopol.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_model_geospace.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_model_gov_cn.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_model_gov_intl.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_model_gov_us.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_model_infotech.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_model_language.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_model_material.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_model_media.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_model_orgs.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_model_person.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_model_planning.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_model_proj.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_model_risk.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_model_science.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_model_syn.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_model_telco.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_model_transport.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_servers_axon.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_servers_cortex.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_servers_cryotank.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_servers_stemcell.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_servers_univ.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_telepath.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_tools_aha.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_tools_autodoc.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_tools_axon2axon.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_tools_backup.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_tools_cellauth.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_tools_cryo_cat.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_tools_cryo_list.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_tools_csvtool.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_tools_docker_validate.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_tools_easycert.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_tools_feed.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_tools_genpkg.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_tools_guid.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_tools_healthcheck.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_tools_hiveload.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_tools_hivesave.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_tools_json2mpk.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_tools_livebackup.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_tools_modrole.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_tools_moduser.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_tools_pullfile.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_tools_pushfile.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_tools_reload.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_tools_rstorm.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_tools_storm.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_utils.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_utils_getrefs.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/test_utils_stormcov.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tests/utils.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tools/__init__.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tools/aha/__init__.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tools/aha/easycert.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tools/aha/enroll.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tools/aha/list.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tools/aha/provision/__init__.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tools/aha/provision/service.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tools/aha/provision/user.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tools/autodoc.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tools/axon2axon.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tools/backup.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tools/cellauth.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tools/changelog.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tools/cmdr.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tools/cryo/__init__.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tools/cryo/cat.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tools/cryo/list.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tools/csvtool.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tools/docker/__init__.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tools/docker/validate.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tools/easycert.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tools/feed.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tools/genpkg.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tools/guid.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tools/healthcheck.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tools/hive/__init__.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tools/hive/load.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tools/hive/save.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tools/json2mpk.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tools/livebackup.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tools/modrole.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tools/moduser.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tools/promote.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tools/pullfile.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tools/pushfile.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tools/reload.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tools/rstorm.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/tools/storm.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/utils/__init__.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/utils/getrefs.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/utils/stormcov/__init__.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/utils/stormcov/plugin.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/vendor/__init__.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/vendor/cashaddress/LICENSE +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/vendor/cashaddress/__init__.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/vendor/cashaddress/base58.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/vendor/cashaddress/convert.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/vendor/cashaddress/crypto.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/vendor/cashaddress/tests/__init__.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/vendor/cashaddress/tests/test_cashaddress.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/vendor/substrateinterface/LICENSE +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/vendor/substrateinterface/__init__.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/vendor/substrateinterface/tests/__init__.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/vendor/substrateinterface/tests/test_ss58.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/vendor/substrateinterface/utils/__init__.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/vendor/substrateinterface/utils/ss58.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/vendor/utils.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/vendor/xrpl/LICENSE +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/vendor/xrpl/__init__.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/vendor/xrpl/constants.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/vendor/xrpl/core/__init__.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/vendor/xrpl/core/addresscodec/__init__.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/vendor/xrpl/core/addresscodec/codec.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/vendor/xrpl/core/addresscodec/exceptions.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/vendor/xrpl/core/addresscodec/main.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/vendor/xrpl/core/addresscodec/utils.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/vendor/xrpl/tests/__init__.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/vendor/xrpl/tests/test_codec.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/vendor/xrpl/tests/test_main.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse/vendor/xrpl/tests/test_main_test_cases.py +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse.egg-info/SOURCES.txt +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse.egg-info/dependency_links.txt +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse.egg-info/requires.txt +0 -0
- {synapse-2.175.0 → synapse-2.176.0}/synapse.egg-info/top_level.txt +0 -0
|
@@ -4027,6 +4027,7 @@ class Cortex(s_oauth.OAuthMixin, s_cell.Cell): # type: ignore
|
|
|
4027
4027
|
self.addStormCmd(s_storm.MoveNodesCmd)
|
|
4028
4028
|
self.addStormCmd(s_storm.BackgroundCmd)
|
|
4029
4029
|
self.addStormCmd(s_stormlib_macro.MacroExecCmd)
|
|
4030
|
+
self.addStormCmd(s_stormlib_storm.StormExecCmd)
|
|
4030
4031
|
self.addStormCmd(s_stormlib_stats.StatsCountByCmd)
|
|
4031
4032
|
self.addStormCmd(s_stormlib_cortex.StormPoolDelCmd)
|
|
4032
4033
|
self.addStormCmd(s_stormlib_cortex.StormPoolGetCmd)
|
|
@@ -284,7 +284,7 @@ class Search(Query):
|
|
|
284
284
|
view = runt.snap.view
|
|
285
285
|
|
|
286
286
|
if not view.core.stormiface_search:
|
|
287
|
-
await runt.snap.warn('Storm search interface is not enabled!')
|
|
287
|
+
await runt.snap.warn('Storm search interface is not enabled!', log=False)
|
|
288
288
|
return
|
|
289
289
|
|
|
290
290
|
async def searchgenr():
|
|
@@ -2389,7 +2389,7 @@ class FormPivot(PivotOper):
|
|
|
2389
2389
|
items = e.items()
|
|
2390
2390
|
mesg = items.pop('mesg', '')
|
|
2391
2391
|
mesg = ': '.join((f'{e.__class__.__qualname__} [{repr(node.ndef[1])}] during pivot', mesg))
|
|
2392
|
-
await runt.snap.warn(mesg, **items)
|
|
2392
|
+
await runt.snap.warn(mesg, log=False, **items)
|
|
2393
2393
|
|
|
2394
2394
|
class PropPivotOut(PivotOper):
|
|
2395
2395
|
'''
|
|
@@ -2428,7 +2428,7 @@ class PropPivotOut(PivotOper):
|
|
|
2428
2428
|
if runt.model.forms.get(fname) is None:
|
|
2429
2429
|
if not warned:
|
|
2430
2430
|
mesg = f'The source property "{name}" array type "{fname}" is not a form. Cannot pivot.'
|
|
2431
|
-
await runt.snap.warn(mesg)
|
|
2431
|
+
await runt.snap.warn(mesg, log=False)
|
|
2432
2432
|
warned = True
|
|
2433
2433
|
continue
|
|
2434
2434
|
|
|
@@ -2452,7 +2452,8 @@ class PropPivotOut(PivotOper):
|
|
|
2452
2452
|
fname = prop.type.name
|
|
2453
2453
|
if prop.modl.form(fname) is None:
|
|
2454
2454
|
if warned is False:
|
|
2455
|
-
await runt.snap.warn(f'The source property "{name}" type "{fname}" is not a form. Cannot pivot.'
|
|
2455
|
+
await runt.snap.warn(f'The source property "{name}" type "{fname}" is not a form. Cannot pivot.',
|
|
2456
|
+
log=False)
|
|
2456
2457
|
warned = True
|
|
2457
2458
|
continue
|
|
2458
2459
|
|
|
@@ -2574,7 +2575,7 @@ class PropPivot(PivotOper):
|
|
|
2574
2575
|
items = e.items()
|
|
2575
2576
|
mesg = items.pop('mesg', '')
|
|
2576
2577
|
mesg = ': '.join((f'{e.__class__.__qualname__} [{repr(valu)}] during pivot', mesg))
|
|
2577
|
-
await runt.snap.warn(mesg, **items)
|
|
2578
|
+
await runt.snap.warn(mesg, log=False, **items)
|
|
2578
2579
|
|
|
2579
2580
|
class Value(AstNode):
|
|
2580
2581
|
'''
|
|
@@ -1874,6 +1874,14 @@ class Runtime(s_base.Base):
|
|
|
1874
1874
|
valu.incref()
|
|
1875
1875
|
self.vars.update(varz)
|
|
1876
1876
|
|
|
1877
|
+
self._initRuntVars(query)
|
|
1878
|
+
|
|
1879
|
+
self.proxies = {}
|
|
1880
|
+
|
|
1881
|
+
self.onfini(self._onRuntFini)
|
|
1882
|
+
|
|
1883
|
+
def _initRuntVars(self, query):
|
|
1884
|
+
|
|
1877
1885
|
# declare path builtins as non-runtsafe
|
|
1878
1886
|
self.runtvars = {
|
|
1879
1887
|
'node': False,
|
|
@@ -1882,17 +1890,14 @@ class Runtime(s_base.Base):
|
|
|
1882
1890
|
|
|
1883
1891
|
# inherit runtsafe vars from our root
|
|
1884
1892
|
if self.root is not None:
|
|
1885
|
-
self.runtvars.update(root.runtvars)
|
|
1893
|
+
self.runtvars.update(self.root.runtvars)
|
|
1886
1894
|
self.runtvars.update({k: True for k in self.root.getScopeVars().keys()})
|
|
1887
1895
|
|
|
1888
1896
|
# all vars/ctors are de-facto runtsafe
|
|
1889
1897
|
self.runtvars.update({k: True for k in self.vars.keys()})
|
|
1890
1898
|
self.runtvars.update({k: True for k in self.ctors.keys()})
|
|
1891
1899
|
|
|
1892
|
-
self.proxies = {}
|
|
1893
|
-
|
|
1894
1900
|
self._loadRuntVars(query)
|
|
1895
|
-
self.onfini(self._onRuntFini)
|
|
1896
1901
|
|
|
1897
1902
|
def getScopeVars(self):
|
|
1898
1903
|
'''
|
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
import logging
|
|
2
|
+
|
|
3
|
+
import synapse.exc as s_exc
|
|
4
|
+
import synapse.common as s_common
|
|
5
|
+
|
|
6
|
+
import synapse.lib.storm as s_storm
|
|
7
|
+
import synapse.lib.stormtypes as s_stormtypes
|
|
8
|
+
|
|
9
|
+
evaldesc = '''\
|
|
10
|
+
Evaluate a Storm runtime value and optionally cast/coerce it.
|
|
11
|
+
|
|
12
|
+
Note:
|
|
13
|
+
If Storm logging is enabled, the expression being evaluated will be logged
|
|
14
|
+
separately.
|
|
15
|
+
'''
|
|
16
|
+
|
|
17
|
+
rundesc = '''
|
|
18
|
+
Run a Storm query and yield the messages output by the Storm interpreter.
|
|
19
|
+
|
|
20
|
+
Note:
|
|
21
|
+
If Storm logging is enabled, the query being run will be logged separately.
|
|
22
|
+
'''
|
|
23
|
+
|
|
24
|
+
stormlogger = logging.getLogger('synapse.storm')
|
|
25
|
+
|
|
26
|
+
class StormExecCmd(s_storm.Cmd):
|
|
27
|
+
'''
|
|
28
|
+
Execute text or an embedded query object as Storm in the current pipeline.
|
|
29
|
+
|
|
30
|
+
NOTE: It is recommended to avoid using this where possible to avoid potential
|
|
31
|
+
query injection risks. If you must use this, take care to ensure any values
|
|
32
|
+
being executed have been properly sanitized.
|
|
33
|
+
|
|
34
|
+
Examples:
|
|
35
|
+
|
|
36
|
+
// Add nodes using text in a variable
|
|
37
|
+
$query = '[ inet:fqdn=foo.com inet:fqdn=bar.net ]'
|
|
38
|
+
storm.exec $query
|
|
39
|
+
|
|
40
|
+
// Filter nodes in the pipeline using text in a variable
|
|
41
|
+
$filter = '-:asn=10'
|
|
42
|
+
inet:ipv4:asn
|
|
43
|
+
storm.exec $filter
|
|
44
|
+
|
|
45
|
+
// Pivot using an embedded query
|
|
46
|
+
$pivot = ${ -> inet:asn }
|
|
47
|
+
inet:ipv4:asn
|
|
48
|
+
storm.exec $pivot
|
|
49
|
+
'''
|
|
50
|
+
name = 'storm.exec'
|
|
51
|
+
def getArgParser(self):
|
|
52
|
+
pars = s_storm.Cmd.getArgParser(self)
|
|
53
|
+
pars.add_argument('query', help='The Storm to execute.')
|
|
54
|
+
return pars
|
|
55
|
+
|
|
56
|
+
async def execStormCmd(self, runt, genr):
|
|
57
|
+
|
|
58
|
+
if self.runtsafe:
|
|
59
|
+
|
|
60
|
+
text = await s_stormtypes.tostr(self.opts.query)
|
|
61
|
+
query = await runt.getStormQuery(text)
|
|
62
|
+
|
|
63
|
+
extra = await self.runt.snap.core.getLogExtra(text=text, view=self.runt.snap.view.iden)
|
|
64
|
+
stormlogger.info(f'Executing storm query via storm.exec {{{text}}} as [{self.runt.user.name}]', extra=extra)
|
|
65
|
+
|
|
66
|
+
async with runt.getSubRuntime(query) as subr:
|
|
67
|
+
async for subp in subr.execute(genr=genr):
|
|
68
|
+
yield subp
|
|
69
|
+
|
|
70
|
+
else:
|
|
71
|
+
|
|
72
|
+
item = None
|
|
73
|
+
async for item in genr:
|
|
74
|
+
break
|
|
75
|
+
|
|
76
|
+
text = await s_stormtypes.tostr(self.opts.query)
|
|
77
|
+
query = await runt.getStormQuery(text)
|
|
78
|
+
|
|
79
|
+
extra = await self.runt.snap.core.getLogExtra(text=text, view=self.runt.snap.view.iden)
|
|
80
|
+
stormlogger.info(f'Executing storm query via storm.exec {{{text}}} as [{self.runt.user.name}]', extra=extra)
|
|
81
|
+
|
|
82
|
+
async with runt.getSubRuntime(query) as subr:
|
|
83
|
+
async for subp in subr.execute(genr=s_common.agen(item)):
|
|
84
|
+
yield subp
|
|
85
|
+
|
|
86
|
+
async for item in genr:
|
|
87
|
+
text = await s_stormtypes.tostr(self.opts.query)
|
|
88
|
+
query = await runt.getStormQuery(text)
|
|
89
|
+
|
|
90
|
+
subr.runtvars.clear()
|
|
91
|
+
subr.query = query
|
|
92
|
+
subr._initRuntVars(query)
|
|
93
|
+
|
|
94
|
+
extra = await self.runt.snap.core.getLogExtra(text=text, view=self.runt.snap.view.iden)
|
|
95
|
+
stormlogger.info(f'Executing storm query via storm.exec {{{text}}} as [{self.runt.user.name}]', extra=extra)
|
|
96
|
+
|
|
97
|
+
async for subp in subr.execute(genr=s_common.agen(item)):
|
|
98
|
+
yield subp
|
|
99
|
+
|
|
100
|
+
@s_stormtypes.registry.registerLib
|
|
101
|
+
class LibStorm(s_stormtypes.Lib):
|
|
102
|
+
'''
|
|
103
|
+
A Storm library for evaluating dynamic storm expressions.
|
|
104
|
+
'''
|
|
105
|
+
_storm_locals = (
|
|
106
|
+
{'name': 'eval', 'desc': evaldesc,
|
|
107
|
+
'type': {'type': 'function', '_funcname': '_evalStorm',
|
|
108
|
+
'args': (
|
|
109
|
+
{'name': 'text', 'type': 'str', 'desc': 'A storm expression string.'},
|
|
110
|
+
{'name': 'cast', 'type': 'str', 'desc': 'A type to cast the result to.', 'default': None},
|
|
111
|
+
),
|
|
112
|
+
'returns': {'type': 'any', 'desc': 'The value of the expression and optional cast.'}}},
|
|
113
|
+
{'name': 'run', 'desc': rundesc,
|
|
114
|
+
'type': {'type': 'function', '_funcname': '_runStorm',
|
|
115
|
+
'args': (
|
|
116
|
+
{'name': 'query', 'type': 'str', 'desc': 'A Storm query string.'},
|
|
117
|
+
{'name': 'opts', 'type': 'dict', 'desc': 'Storm options dictionary.', 'default': None},
|
|
118
|
+
),
|
|
119
|
+
'returns': {'name': 'yields', 'type': 'list', 'desc': 'The output messages from the Storm runtime.'}}},
|
|
120
|
+
)
|
|
121
|
+
_storm_lib_path = ('storm',)
|
|
122
|
+
|
|
123
|
+
def getObjLocals(self):
|
|
124
|
+
return {
|
|
125
|
+
'run': self._runStorm,
|
|
126
|
+
'eval': self._evalStorm,
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
async def _runStorm(self, query, opts=None):
|
|
130
|
+
|
|
131
|
+
opts = await s_stormtypes.toprim(opts)
|
|
132
|
+
query = await s_stormtypes.tostr(query)
|
|
133
|
+
|
|
134
|
+
if opts is None:
|
|
135
|
+
opts = {}
|
|
136
|
+
|
|
137
|
+
user = opts.get('user')
|
|
138
|
+
if user is None:
|
|
139
|
+
user = opts['user'] = self.runt.user.iden
|
|
140
|
+
|
|
141
|
+
if user != self.runt.user.iden:
|
|
142
|
+
self.runt.confirm(('impersonate',))
|
|
143
|
+
|
|
144
|
+
opts.setdefault('view', self.runt.snap.view.iden)
|
|
145
|
+
|
|
146
|
+
async for mesg in self.runt.snap.view.core.storm(query, opts=opts):
|
|
147
|
+
yield mesg
|
|
148
|
+
|
|
149
|
+
@s_stormtypes.stormfunc(readonly=True)
|
|
150
|
+
async def _evalStorm(self, text, cast=None):
|
|
151
|
+
|
|
152
|
+
text = await s_stormtypes.tostr(text)
|
|
153
|
+
cast = await s_stormtypes.tostr(cast, noneok=True)
|
|
154
|
+
|
|
155
|
+
if self.runt.snap.core.stormlog:
|
|
156
|
+
extra = await self.runt.snap.core.getLogExtra(text=text, view=self.runt.snap.view.iden)
|
|
157
|
+
stormlogger.info(f'Executing storm query via $lib.storm.eval() {{{text}}} as [{self.runt.user.name}]', extra=extra)
|
|
158
|
+
|
|
159
|
+
casttype = None
|
|
160
|
+
if cast:
|
|
161
|
+
|
|
162
|
+
casttype = self.runt.model.type(cast)
|
|
163
|
+
if casttype is None:
|
|
164
|
+
castprop = self.runt.model.prop(cast)
|
|
165
|
+
if castprop is not None:
|
|
166
|
+
casttype = castprop.type
|
|
167
|
+
|
|
168
|
+
if casttype is None:
|
|
169
|
+
mesg = f'No type or property found for name: {cast}'
|
|
170
|
+
raise s_exc.NoSuchType(mesg=mesg)
|
|
171
|
+
|
|
172
|
+
asteval = await self.runt.snap.core._getStormEval(text)
|
|
173
|
+
valu = await asteval.compute(self.runt, None)
|
|
174
|
+
|
|
175
|
+
if casttype:
|
|
176
|
+
valu, _ = casttype.norm(valu)
|
|
177
|
+
|
|
178
|
+
return valu
|
|
@@ -223,6 +223,6 @@ def reqVersion(valu, reqver,
|
|
|
223
223
|
##############################################################################
|
|
224
224
|
# The following are touched during the release process by bumpversion.
|
|
225
225
|
# Do not modify these directly.
|
|
226
|
-
version = (2,
|
|
226
|
+
version = (2, 176, 0)
|
|
227
227
|
verstring = '.'.join([str(x) for x in version])
|
|
228
|
-
commit = '
|
|
228
|
+
commit = '16ee721a6b7221344eaf946c3ab4602dda546b1a'
|
|
@@ -1519,6 +1519,7 @@ class InetModule(s_module.CoreModule):
|
|
|
1519
1519
|
'doc': 'An object status enumeration.'}),
|
|
1520
1520
|
|
|
1521
1521
|
('inet:service:account', ('guid', {}), {
|
|
1522
|
+
'interfaces': ('inet:service:object',),
|
|
1522
1523
|
'doc': 'An account within a service platform. Accounts may be instance specific.'}),
|
|
1523
1524
|
|
|
1524
1525
|
('inet:service:permission:type:taxonomy', ('taxonomy', {}), {
|
|
@@ -1557,6 +1558,10 @@ class InetModule(s_module.CoreModule):
|
|
|
1557
1558
|
'interfaces': ('inet:service:object',),
|
|
1558
1559
|
'doc': 'A channel used to distribute messages.'}),
|
|
1559
1560
|
|
|
1561
|
+
('inet:service:thread', ('guid', {}), {
|
|
1562
|
+
'interfaces': ('inet:service:object',),
|
|
1563
|
+
'doc': 'A message thread.'}),
|
|
1564
|
+
|
|
1560
1565
|
('inet:service:channel:member', ('guid', {}), {
|
|
1561
1566
|
'interfaces': ('inet:service:object',),
|
|
1562
1567
|
'doc': 'Represents a service account being a member of a channel.'}),
|
|
@@ -3657,9 +3662,15 @@ class InetModule(s_module.CoreModule):
|
|
|
3657
3662
|
('channel', ('inet:service:channel', {}), {
|
|
3658
3663
|
'doc': 'The channel that the message was sent to.'}),
|
|
3659
3664
|
|
|
3665
|
+
('thread', ('inet:service:thread', {}), {
|
|
3666
|
+
'doc': 'The thread which contains the message.'}),
|
|
3667
|
+
|
|
3660
3668
|
('public', ('bool', {}), {
|
|
3661
3669
|
'doc': 'Set to true if the message is publicly visible.'}),
|
|
3662
3670
|
|
|
3671
|
+
('title', ('str', {'lower': True, 'onespace': True}), {
|
|
3672
|
+
'doc': 'The message title.'}),
|
|
3673
|
+
|
|
3663
3674
|
('text', ('str', {}), {
|
|
3664
3675
|
'disp': {'hint': 'text'},
|
|
3665
3676
|
'doc': 'The text body of the message.'}),
|
|
@@ -3725,6 +3736,18 @@ class InetModule(s_module.CoreModule):
|
|
|
3725
3736
|
'doc': 'The time period where the channel was available.'}),
|
|
3726
3737
|
)),
|
|
3727
3738
|
|
|
3739
|
+
('inet:service:thread', {}, (
|
|
3740
|
+
|
|
3741
|
+
('title', ('str', {'lower': True, 'onespace': True}), {
|
|
3742
|
+
'doc': 'The title of the thread.'}),
|
|
3743
|
+
|
|
3744
|
+
('channel', ('inet:service:channel', {}), {
|
|
3745
|
+
'doc': 'The channel that contains the thread.'}),
|
|
3746
|
+
|
|
3747
|
+
('message', ('inet:service:message', {}), {
|
|
3748
|
+
'doc': 'The message which initiated the thread.'}),
|
|
3749
|
+
)),
|
|
3750
|
+
|
|
3728
3751
|
('inet:service:channel:member', {}, (
|
|
3729
3752
|
|
|
3730
3753
|
('channel', ('inet:service:channel', {}), {
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
import synapse.exc as s_exc
|
|
2
|
+
import synapse.lib.parser as s_parser
|
|
3
|
+
|
|
4
|
+
import synapse.tests.utils as s_test
|
|
5
|
+
|
|
6
|
+
class LibStormTest(s_test.SynTest):
|
|
7
|
+
|
|
8
|
+
async def test_lib_stormlib_storm_eval(self):
|
|
9
|
+
async with self.getTestCore() as core:
|
|
10
|
+
|
|
11
|
+
opts = {'vars': {'text': '(10)'}}
|
|
12
|
+
self.eq(10, await core.callStorm('return($lib.storm.eval($text))', opts=opts))
|
|
13
|
+
|
|
14
|
+
opts = {'vars': {'text': '10'}}
|
|
15
|
+
self.eq('10', await core.callStorm('return($lib.storm.eval($text))', opts=opts))
|
|
16
|
+
|
|
17
|
+
opts = {'vars': {'text': '10'}}
|
|
18
|
+
self.eq(10, await core.callStorm('return($lib.storm.eval($text, cast=int))', opts=opts))
|
|
19
|
+
|
|
20
|
+
opts = {'vars': {'text': 'WOOT.COM'}}
|
|
21
|
+
self.eq('woot.com', await core.callStorm('return($lib.storm.eval($text, cast=inet:dns:a:fqdn))', opts=opts))
|
|
22
|
+
|
|
23
|
+
opts = {'vars': {'text': '(10 + 20)', 'cast': 'inet:port'}}
|
|
24
|
+
self.eq(30, await core.callStorm('return($lib.storm.eval($text, cast=$cast))', opts=opts))
|
|
25
|
+
|
|
26
|
+
with self.raises(s_exc.NoSuchType):
|
|
27
|
+
await core.callStorm('return($lib.storm.eval(foo, cast=newp))')
|
|
28
|
+
|
|
29
|
+
# for coverage of forked call...
|
|
30
|
+
self.nn(s_parser.parseEval('woot'))
|
|
31
|
+
|
|
32
|
+
# Readonly functionality is sane
|
|
33
|
+
msgs = await core.stormlist('$lib.print($lib.storm.eval( "{$lib.print(wow)}" ))')
|
|
34
|
+
self.stormIsInPrint('wow', msgs)
|
|
35
|
+
self.stormIsInPrint('$lib.null', msgs)
|
|
36
|
+
|
|
37
|
+
with self.raises(s_exc.IsReadOnly):
|
|
38
|
+
await core.callStorm('$lib.storm.eval( "{$lib.auth.users.add(readonly)}" )', opts={'readonly': True})
|
|
39
|
+
|
|
40
|
+
with self.getLoggerStream('synapse.storm') as stream:
|
|
41
|
+
q = '''{
|
|
42
|
+
$lib.log.info(hehe)
|
|
43
|
+
[test:str=omg]
|
|
44
|
+
$lib.log.info($node)
|
|
45
|
+
fini { return(wow) }
|
|
46
|
+
}
|
|
47
|
+
'''
|
|
48
|
+
|
|
49
|
+
core.stormlog = True
|
|
50
|
+
opts = {'vars': {'q': q}}
|
|
51
|
+
ret = await core.callStorm('return( $lib.storm.eval($q) )', opts=opts)
|
|
52
|
+
self.eq(ret, 'wow')
|
|
53
|
+
self.len(1, await core.nodes('test:str=omg'))
|
|
54
|
+
|
|
55
|
+
# Check that we saw the logs
|
|
56
|
+
stream.seek(0)
|
|
57
|
+
data = stream.read()
|
|
58
|
+
|
|
59
|
+
mesg = 'Executing storm query {return( $lib.storm.eval($q) )} as [root]'
|
|
60
|
+
self.isin(mesg, data)
|
|
61
|
+
|
|
62
|
+
mesg = f'Executing storm query via $lib.storm.eval() {{{q}}} as [root]'
|
|
63
|
+
self.isin(mesg, data)
|
|
64
|
+
|
|
65
|
+
async def test_lib_stormlib_storm(self):
|
|
66
|
+
|
|
67
|
+
async with self.getTestCore() as core:
|
|
68
|
+
|
|
69
|
+
q = '''
|
|
70
|
+
$query = '[ inet:fqdn=foo.com inet:fqdn=bar.com ]'
|
|
71
|
+
storm.exec $query
|
|
72
|
+
'''
|
|
73
|
+
self.len(2, await core.nodes(q))
|
|
74
|
+
|
|
75
|
+
q = '''[
|
|
76
|
+
(inet:ipv4=1.2.3.4 :asn=4)
|
|
77
|
+
(inet:ipv4=1.2.3.5 :asn=5)
|
|
78
|
+
(inet:ipv4=1.2.3.6 :asn=10)
|
|
79
|
+
]'''
|
|
80
|
+
await core.nodes(q)
|
|
81
|
+
|
|
82
|
+
q = '''
|
|
83
|
+
$filter = '-:asn=10'
|
|
84
|
+
inet:ipv4:asn
|
|
85
|
+
storm.exec $filter
|
|
86
|
+
'''
|
|
87
|
+
nodes = await core.nodes(q)
|
|
88
|
+
self.len(2, nodes)
|
|
89
|
+
for node in nodes:
|
|
90
|
+
self.ne(node.get('asn'), 10)
|
|
91
|
+
|
|
92
|
+
q = '''
|
|
93
|
+
$pivot = ${ -> inet:asn }
|
|
94
|
+
inet:ipv4:asn
|
|
95
|
+
storm.exec $pivot
|
|
96
|
+
'''
|
|
97
|
+
nodes = await core.nodes(q)
|
|
98
|
+
self.len(3, nodes)
|
|
99
|
+
for node in nodes:
|
|
100
|
+
self.eq(node.form.name, 'inet:asn')
|
|
101
|
+
|
|
102
|
+
# Exec a non-runtsafe query
|
|
103
|
+
q = '''
|
|
104
|
+
inet:ipv4:asn
|
|
105
|
+
$filter = `+:asn={$node.repr().split('.').'-1'}`
|
|
106
|
+
storm.exec $filter
|
|
107
|
+
'''
|
|
108
|
+
nodes = await core.nodes(q)
|
|
109
|
+
self.len(2, nodes)
|
|
110
|
+
for node in nodes:
|
|
111
|
+
self.ne(node.get('asn'), 10)
|
|
112
|
+
|
|
113
|
+
iden = await core.callStorm('return($lib.view.get().fork().iden)')
|
|
114
|
+
msgs = await core.stormlist('''
|
|
115
|
+
$query = "[inet:fqdn=vertex.link +#haha] $lib.print(woot)"
|
|
116
|
+
$opts = ({"view": $view})
|
|
117
|
+
for $mesg in $lib.storm.run($query, opts=$opts) {
|
|
118
|
+
if ($mesg.0 = "print") { $lib.print($mesg.1.mesg) }
|
|
119
|
+
}
|
|
120
|
+
''', opts={'vars': {'view': iden}})
|
|
121
|
+
self.stormIsInPrint('woot', msgs)
|
|
122
|
+
self.len(1, await core.nodes('inet:fqdn#haha', opts={'view': iden}))
|
|
123
|
+
|
|
124
|
+
visi = await core.auth.addUser('visi')
|
|
125
|
+
msgs = await core.stormlist('''
|
|
126
|
+
$opts=({"user": $lib.auth.users.byname(root).iden})
|
|
127
|
+
for $mesg in $lib.storm.run("$lib.print(lolz)", opts=$opts) {
|
|
128
|
+
if ($mesg.0 = "err") { $lib.print($mesg) }
|
|
129
|
+
if ($mesg.0 = "print") { $lib.print($mesg) }
|
|
130
|
+
}
|
|
131
|
+
''', opts={'user': visi.iden})
|
|
132
|
+
self.stormIsInErr('must have permission impersonate', msgs)
|
|
133
|
+
self.stormNotInPrint('lolz', msgs)
|
|
134
|
+
|
|
135
|
+
# no opts provided
|
|
136
|
+
msgs = await core.stormlist('''
|
|
137
|
+
$q = ${ $lib.print('hello') }
|
|
138
|
+
for $mesg in $lib.storm.run($q) {
|
|
139
|
+
if ( $mesg.0 = 'print' ) {
|
|
140
|
+
$lib.print(`mesg={$mesg.1.mesg}`)
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
''')
|
|
144
|
+
self.stormIsInPrint('mesg=hello', msgs)
|
|
@@ -3300,3 +3300,34 @@ class InetModelTest(s_t_utils.SynTest):
|
|
|
3300
3300
|
self.eq(nodes[0].get('resource'), resource.ndef[1])
|
|
3301
3301
|
self.true(nodes[0].get('success'))
|
|
3302
3302
|
self.eq(nodes[0].get('time'), 1715856900000)
|
|
3303
|
+
|
|
3304
|
+
q = '''
|
|
3305
|
+
[ inet:service:message=(visi, says, relax)
|
|
3306
|
+
:title="Hehe Haha"
|
|
3307
|
+
:thread={[
|
|
3308
|
+
inet:service:thread=*
|
|
3309
|
+
:title="Woot Woot"
|
|
3310
|
+
:message=(visi, says, hello)
|
|
3311
|
+
:channel={[
|
|
3312
|
+
inet:service:channel=(synapse, subreddit)
|
|
3313
|
+
:name="/r/synapse"
|
|
3314
|
+
]}
|
|
3315
|
+
]}
|
|
3316
|
+
]
|
|
3317
|
+
'''
|
|
3318
|
+
nodes = await core.nodes(q)
|
|
3319
|
+
self.len(1, nodes)
|
|
3320
|
+
self.len(1, await core.nodes('inet:service:message=(visi, says, hello) -> inet:service:thread:message'))
|
|
3321
|
+
self.len(1, await core.nodes('''
|
|
3322
|
+
inet:service:message:title="hehe haha"
|
|
3323
|
+
:thread -> inet:service:thread
|
|
3324
|
+
+:title="woot woot"
|
|
3325
|
+
'''))
|
|
3326
|
+
self.len(2, await core.nodes('inet:service:thread -> inet:service:message'))
|
|
3327
|
+
|
|
3328
|
+
self.len(1, await core.nodes('''
|
|
3329
|
+
inet:service:message:title="hehe haha"
|
|
3330
|
+
:thread -> inet:service:thread
|
|
3331
|
+
:channel -> inet:service:channel
|
|
3332
|
+
+:name="/r/synapse"
|
|
3333
|
+
'''))
|
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
import logging
|
|
2
|
-
|
|
3
|
-
import synapse.exc as s_exc
|
|
4
|
-
|
|
5
|
-
import synapse.lib.stormtypes as s_stormtypes
|
|
6
|
-
|
|
7
|
-
evaldesc = '''\
|
|
8
|
-
Evaluate a storm runtime value and optionally cast/coerce it.
|
|
9
|
-
|
|
10
|
-
NOTE: If storm logging is enabled, the expression being evaluated will be logged
|
|
11
|
-
separately.
|
|
12
|
-
'''
|
|
13
|
-
|
|
14
|
-
stormlogger = logging.getLogger('synapse.storm')
|
|
15
|
-
|
|
16
|
-
@s_stormtypes.registry.registerLib
|
|
17
|
-
class LibStorm(s_stormtypes.Lib):
|
|
18
|
-
'''
|
|
19
|
-
A Storm library for evaluating dynamic storm expressions.
|
|
20
|
-
'''
|
|
21
|
-
_storm_locals = (
|
|
22
|
-
{'name': 'eval', 'desc': evaldesc,
|
|
23
|
-
'type': {'type': 'function', '_funcname': '_evalStorm',
|
|
24
|
-
'args': (
|
|
25
|
-
{'name': 'text', 'type': 'str', 'desc': 'A storm expression string.'},
|
|
26
|
-
{'name': 'cast', 'type': 'str', 'desc': 'A type to cast the result to.', 'default': None},
|
|
27
|
-
),
|
|
28
|
-
'returns': {'type': 'any', 'desc': 'The value of the expression and optional cast.', }}},
|
|
29
|
-
)
|
|
30
|
-
_storm_lib_path = ('storm',)
|
|
31
|
-
|
|
32
|
-
def getObjLocals(self):
|
|
33
|
-
return {
|
|
34
|
-
'eval': self._evalStorm,
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
@s_stormtypes.stormfunc(readonly=True)
|
|
38
|
-
async def _evalStorm(self, text, cast=None):
|
|
39
|
-
|
|
40
|
-
text = await s_stormtypes.tostr(text)
|
|
41
|
-
cast = await s_stormtypes.tostr(cast, noneok=True)
|
|
42
|
-
|
|
43
|
-
if self.runt.snap.core.stormlog:
|
|
44
|
-
extra = await self.runt.snap.core.getLogExtra(text=text)
|
|
45
|
-
stormlogger.info(f'Executing storm query via $lib.storm.eval() {{{text}}} as [{self.runt.user.name}]', extra=extra)
|
|
46
|
-
|
|
47
|
-
casttype = None
|
|
48
|
-
if cast:
|
|
49
|
-
|
|
50
|
-
casttype = self.runt.model.type(cast)
|
|
51
|
-
if casttype is None:
|
|
52
|
-
castprop = self.runt.model.prop(cast)
|
|
53
|
-
if castprop is not None:
|
|
54
|
-
casttype = castprop.type
|
|
55
|
-
|
|
56
|
-
if casttype is None:
|
|
57
|
-
mesg = f'No type or property found for name: {cast}'
|
|
58
|
-
raise s_exc.NoSuchType(mesg=mesg)
|
|
59
|
-
|
|
60
|
-
asteval = await self.runt.snap.core._getStormEval(text)
|
|
61
|
-
valu = await asteval.compute(self.runt, None)
|
|
62
|
-
|
|
63
|
-
if casttype:
|
|
64
|
-
valu, _ = casttype.norm(valu)
|
|
65
|
-
|
|
66
|
-
return valu
|
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
import synapse.exc as s_exc
|
|
2
|
-
import synapse.lib.parser as s_parser
|
|
3
|
-
|
|
4
|
-
import synapse.tests.utils as s_test
|
|
5
|
-
|
|
6
|
-
class LibStormTest(s_test.SynTest):
|
|
7
|
-
|
|
8
|
-
async def test_lib_stormlib_storm(self):
|
|
9
|
-
async with self.getTestCore() as core:
|
|
10
|
-
|
|
11
|
-
opts = {'vars': {'text': '(10)'}}
|
|
12
|
-
self.eq(10, await core.callStorm('return($lib.storm.eval($text))', opts=opts))
|
|
13
|
-
|
|
14
|
-
opts = {'vars': {'text': '10'}}
|
|
15
|
-
self.eq('10', await core.callStorm('return($lib.storm.eval($text))', opts=opts))
|
|
16
|
-
|
|
17
|
-
opts = {'vars': {'text': '10'}}
|
|
18
|
-
self.eq(10, await core.callStorm('return($lib.storm.eval($text, cast=int))', opts=opts))
|
|
19
|
-
|
|
20
|
-
opts = {'vars': {'text': 'WOOT.COM'}}
|
|
21
|
-
self.eq('woot.com', await core.callStorm('return($lib.storm.eval($text, cast=inet:dns:a:fqdn))', opts=opts))
|
|
22
|
-
|
|
23
|
-
opts = {'vars': {'text': '(10 + 20)', 'cast': 'inet:port'}}
|
|
24
|
-
self.eq(30, await core.callStorm('return($lib.storm.eval($text, cast=$cast))', opts=opts))
|
|
25
|
-
|
|
26
|
-
with self.raises(s_exc.NoSuchType):
|
|
27
|
-
await core.callStorm('return($lib.storm.eval(foo, cast=newp))')
|
|
28
|
-
|
|
29
|
-
# for coverage of forked call...
|
|
30
|
-
self.nn(s_parser.parseEval('woot'))
|
|
31
|
-
|
|
32
|
-
# Readonly functionality is sane
|
|
33
|
-
msgs = await core.stormlist('$lib.print($lib.storm.eval( "{$lib.print(wow)}" ))')
|
|
34
|
-
self.stormIsInPrint('wow', msgs)
|
|
35
|
-
self.stormIsInPrint('$lib.null', msgs)
|
|
36
|
-
|
|
37
|
-
with self.raises(s_exc.IsReadOnly):
|
|
38
|
-
await core.callStorm('$lib.storm.eval( "{$lib.auth.users.add(readonly)}" )', opts={'readonly': True})
|
|
39
|
-
|
|
40
|
-
with self.getLoggerStream('synapse.storm') as stream:
|
|
41
|
-
q = '''{
|
|
42
|
-
$lib.log.info(hehe)
|
|
43
|
-
[test:str=omg]
|
|
44
|
-
$lib.log.info($node)
|
|
45
|
-
fini { return(wow) }
|
|
46
|
-
}
|
|
47
|
-
'''
|
|
48
|
-
|
|
49
|
-
core.stormlog = True
|
|
50
|
-
opts = {'vars': {'q': q}}
|
|
51
|
-
ret = await core.callStorm('return( $lib.storm.eval($q) )', opts=opts)
|
|
52
|
-
self.eq(ret, 'wow')
|
|
53
|
-
self.len(1, await core.nodes('test:str=omg'))
|
|
54
|
-
|
|
55
|
-
# Check that we saw the logs
|
|
56
|
-
stream.seek(0)
|
|
57
|
-
data = stream.read()
|
|
58
|
-
|
|
59
|
-
mesg = 'Executing storm query {return( $lib.storm.eval($q) )} as [root]'
|
|
60
|
-
self.isin(mesg, data)
|
|
61
|
-
|
|
62
|
-
mesg = f'Executing storm query via $lib.storm.eval() {{{q}}} as [root]'
|
|
63
|
-
self.isin(mesg, data)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|