soapbar
A SOAP library for Python — client, server, and WSDL handling.
soapbar implements SOAP 1.1 and 1.2 with all five binding styles, auto-generates WSDL from Python service classes, parses existing WSDL to drive a typed client, and integrates with any ASGI or WSGI framework via thin adapter classes. The XML parser is hardened against XXE attacks using lxml with resolve_entities=False.
Conformance — soapbar ships with an internal conformance suite of 116 tests across 11 spec-mapped classes (
tests/audit/test_compliance.py) covering SOAP 1.1/1.2, WSDL 1.1, and WS-I Basic Profile 1.1. The suite encodes 46 checkpoints derived from F01–F09 original findings, G01–G11 gap findings, I01–I04 informational observations, and S10 (WS-I BSP X.509 token profile); all 46 pass. This is a self-administered test suite, not an independent third-party audit.
Documentation
Full documentation lives at hitoshyamamoto.github.io/soapbar — quick start, client and server guides, WS-Security, MTOM, real-world service clients, architecture, and more.
Installation
pip install soapbar # core + server + WSDL (lxml only)
pip install soapbar[client] # + httpx for the HTTP client
pip install soapbar[security] # + signxml + cryptography (XML Sig/Enc, mutual TLS)
pip install soapbar[all] # everything (client + security)
Or with uv:
uv add soapbar
uv add "soapbar[client]"
uv add "soapbar[security]"
uv add "soapbar[all]"
Optional contrib extras install typed clients for real-world services: soapbar[vies], soapbar[witsml], soapbar[ana], soapbar[nfe] — see Real-world services.
Quick start — server
# app.py
from soapbar import SoapService, soap_operation, SoapApplication, AsgiSoapApp
class CalculatorService(SoapService):
__service_name__ = "Calculator"
__tns__ = "http://example.com/calculator"
@soap_operation()
def add(self, a: int, b: int) -> int:
return a + b
@soap_operation()
def subtract(self, a: int, b: int) -> int:
return a - b
soap_app = SoapApplication(service_url="http://localhost:8000")
soap_app.register(CalculatorService())
app = AsgiSoapApp(soap_app)
# Run: uvicorn app:app --port 8000
# WSDL: GET http://localhost:8000?wsdl
Mounting inside FastAPI/Flask, defining services, binding styles, and the client are covered in the Quick start and Client docs.
Features
- SOAP 1.1 and 1.2 with all 5 WSDL/SOAP binding style combinations; version auto-detected, fault codes auto-translated
- SOAP server for any ASGI or WSGI framework (
AsgiSoapApp/WsgiSoapApp), plus a sync and async WSDL-driven client - Auto-generates WSDL from service classes and parses existing WSDL — no config files needed
- Hardened by default: XXE-safe lxml parser, SSRF guard on
wsdl:import, message size and nesting depth limits, error scrubbing - Continuously assured: CodeQL static analysis, coverage-guided fuzzing (Atheris) and property-based tests (Hypothesis) in CI; holds the OpenSSF Best Practices passing badge
- WS-Security: UsernameToken (PasswordText/PasswordDigest), XML Signature (incl. Id-targeted SEFAZ NF-e profile), AES-256-GCM XML Encryption, WS-I BSP X.509 token profile
- MTOM/XOP binary attachments on both client and server
- Mutual TLS with PKCS#12 helper, session cookies, WS-Addressing 1.0, one-way MEP, opt-in WSDL schema validation
- XSD type registry (27 built-in types), complex types, SOAP arrays, multi-reference encoding
- Optional typed clients for real-world services: EU VIES, WITSML, SEFAZ NF-e, ANA (
soapbar.contrib.*) - Interoperable with zeep and spyne; fully type-annotated (PEP 561); Python 3.10 – 3.14
Links
- Documentation
- Security — hardened parser, WS-Security, XML Signature and Encryption
- Security policy — private vulnerability reporting, supported versions, response times
- Real-world services — VIES, NF-e, WITSML, ANA, IRS MeF
- Comparison with alternatives — zeep, spyne, fastapi-soap
- Stability policy — public surface, SemVer, deprecation process
Sponsoring
soapbar is maintained by a single developer. If your organization depends on it — or on SOAP integrations with services such as VIES, NF-e, CCEE, or ANA — consider sponsoring its maintenance:
- GitHub Sponsors
- The repository publishes a machine-readable funding manifest for the FLOSS/fund directory
License
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file soapbar-0.15.2.tar.gz.
File metadata
- Download URL: soapbar-0.15.2.tar.gz
- Upload date:
- Size: 199.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e1d4a3b8cef1af98433e9087c87cd2989f8b370c3121907b1900ea5b0abf59df
|
|
| MD5 |
2c76e9cf0ae991be5cb579d5fb25f36d
|
|
| BLAKE2b-256 |
3416ada5c55805f26b92fc69f6187d4c0cba97e7e20ed5f6186d12ac732c7704
|
Provenance
The following attestation bundles were made for soapbar-0.15.2.tar.gz:
Publisher:
release.yml on hitoshyamamoto/soapbar
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
soapbar-0.15.2.tar.gz -
Subject digest:
e1d4a3b8cef1af98433e9087c87cd2989f8b370c3121907b1900ea5b0abf59df - Sigstore transparency entry: 2267175062
- Sigstore integration time:
-
Permalink:
hitoshyamamoto/soapbar@e30d2a628ee487e3c21b43de8caa19fda2856c98 -
Branch / Tag:
refs/tags/v0.15.2 - Owner: https://github.com/hitoshyamamoto
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@e30d2a628ee487e3c21b43de8caa19fda2856c98 -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file soapbar-0.15.2-py3-none-any.whl.
File metadata
- Download URL: soapbar-0.15.2-py3-none-any.whl
- Upload date:
- Size: 114.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6b9be814a5a1a5f51f9e0ff464dd4733001a41b3d976b366f6b9b3fa2580a968
|
|
| MD5 |
93a77e600930a500dc9b7db6ee2a39a4
|
|
| BLAKE2b-256 |
dad0613a27d7a8f382907c88457c8312dac4a05d9cd9b92d5a951ce5fbfce5e4
|
Provenance
The following attestation bundles were made for soapbar-0.15.2-py3-none-any.whl:
Publisher:
release.yml on hitoshyamamoto/soapbar
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
soapbar-0.15.2-py3-none-any.whl -
Subject digest:
6b9be814a5a1a5f51f9e0ff464dd4733001a41b3d976b366f6b9b3fa2580a968 - Sigstore transparency entry: 2267175208
- Sigstore integration time:
-
Permalink:
hitoshyamamoto/soapbar@e30d2a628ee487e3c21b43de8caa19fda2856c98 -
Branch / Tag:
refs/tags/v0.15.2 - Owner: https://github.com/hitoshyamamoto
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@e30d2a628ee487e3c21b43de8caa19fda2856c98 -
Trigger Event:
workflow_dispatch
-
Statement type: