This release is a pre-release and may not be stable for production use.
spot-sdk-python
The SDK for writing plugins of SPOT, the Spear-Phishing Overwatching Tool: analyzers, context providers, mail retrievers and responders.
SPOT runs each plugin as a container and calls its /internal/* routes
with the plugin's own token. This package holds what SPOT's core and its
plugins share:
- the contract (Pydantic models): the email view, verdicts and signals, workflow policies, results, and the plugin manifest with its OCI labels;
- the parser core runs on every message at intake
(
spot_sdk.mime.parse), bounded against hostile input, which records what mail clients may read differently as anomalies; - the plugin runtime:
create_plugin_appbuilds the FastAPI app with the routes core calls, token-checked;PluginSettingsreads the token and secrets from/run/secretsand the settings from the environment; - the clients:
SpotClient(ingest, message content, results),KnowledgeClient(the Knowledge Store) andLLMClient(OpenAI-compatible chat models, with the email kept apart from the instructions as untrusted data); - test helpers:
view_from_eml,make_view,FakeSpot,FakeKnowledgeClient,FakeLLMandassert_contract.
Install
pip install spot-sdk-python==2.0.0b6
Python 3.11 to 3.15. Version 2 implements plugin contract 2, for SPOT 2.0.
An analyzer
from spot_sdk import (
AnalyzerVerdict,
AnalyzeRequest,
Egress,
Manifest,
PluginKind,
PluginSettings,
Signal,
VerdictClass,
create_plugin_app,
)
from spot_sdk.signals import AUTH_DMARC_FAIL
MANIFEST = Manifest(
id="analyzer-dmarc",
version="1.0.0",
kinds=[PluginKind.ANALYZER],
egress=Egress.NONE,
)
def analyze(request: AnalyzeRequest, settings: PluginSettings) -> AnalyzerVerdict:
failed = [
result
for result in request.email.authentication
if result.method == "dmarc" and result.result == "fail"
]
if not failed:
return AnalyzerVerdict(verdict=VerdictClass.BENIGN, score=10, confidence=60)
return AnalyzerVerdict(
verdict=VerdictClass.SUSPICIOUS,
score=70,
confidence=80,
signals=[Signal(name=AUTH_DMARC_FAIL, weight=60, evidence="dmarc=fail")],
)
app = create_plugin_app(MANIFEST, PluginSettings, analyze=analyze)
Serve it with uvicorn analyzer_dmarc:app --host 0.0.0.0 --port 8000,
and test it with spot_sdk.testing.assert_contract(app, "tests/phish.eml", token=...).
Documentation
- Documentation: the contract, writing each kind of plugin, the reference.
- Migrating from 1.x: every removed name and its replacement. SDK 2 has no compatibility with contract 1.
- Source and changelog.
License
Apache License 2.0.
Metadata
Release files for spot-sdk-python 2.0.0b6
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| spot_sdk_python-2.0.0b6.tar.gz | 72.6 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| spot_sdk_python-2.0.0b6-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 156.1 kB
Release files / spot_sdk_python-2.0.0b6.tar.gz
| Download URL | spot_sdk_python-2.0.0b6.tar.gz |
|---|---|
| Size | 72.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
61a2677ad43b7ff3051dc87a548d7bbc766de4c6de2cfe652012dffb6e03b66f
|
|
BLAKE2b-256 checksum How to use checksums |
d6a36ef7505c85bf2d7523bd62ec98e1f3c7b5446a436f405f03e384b07dd1ad
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
poetry/2.5.1 CPython/3.11.17 Linux/6.1.0-53-amd64
|
Release files / spot_sdk_python-2.0.0b6-py3-none-any.whl
| Download URL | spot_sdk_python-2.0.0b6-py3-none-any.whl |
|---|---|
| Size | 83.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
3361cdd6d97c0b57deffad9c4455d3719886f505f7f3584637b6671ff4b5d1dc
|
|
BLAKE2b-256 checksum How to use checksums |
4a5115ac9aa14fd493f3644e3b97b8193f4968a399dd41a6b52657919f56bd51
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
poetry/2.5.1 CPython/3.11.17 Linux/6.1.0-53-amd64
|
Security for spot-sdk-python 2.0.0b6
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.