Tina4 Python - Built-in SOAP 1.1 / WSDL 1.0 Service#
๐ฅ Hot Tips
- Zero-configuration SOAP with auto-WSDL on
?wsdl. - Supports str, int, float, bool, List[T], Optional[T].
- Document/literal wrapped style; auto ArrayOfX types.
- Respects X-Forwarded-* headers; optional SERVICE_URL override.
- Hooks: onrequest/onresult for custom logic.
Initialization#
Extend WSDL and define methods as operations:
python
from tina4_python.WSDL import WSDL, wsdl_operationfrom typing import List, Optionalโclass Calculator(WSDL): SERVICE_URL = "https://example.com/soap/calculator" # Optional overrideโ @wsdl_operation({"Result": int}) def Add(self, a: int, b: int): return {"Result": a + b}โ @wsdl_operation({ "Numbers": List[int], "Total": int, "Error": Optional[str] }) def SumList(self, Numbers: List[int]): return { "Numbers": Numbers, "Total": sum(Numbers), "Error": None }โ def on_request(self, request): # Optional: Pre-process request passโ def on_result(self, result): # Optional: Post-process result return resultwsdl_operation(schema): Declares response structure; generates complex types.SERVICE_URL: Static override for endpoint (e.g., behind proxy).- Methods: Public, non-underscore; auto-discovered as operations.
Routing#
Register with Tina4 decorator; handles SOAP requests and WSDL:
python
from tina4_python.router import wsdlโ@wsdl("/calculator") # Serves /calculator?wsdl and SOAP POSTsasync def calculator_wsdl(request, response): return response.wsdl(Calculator(request))wsdl(path): Decorator for SOAP endpoint.response.wsdl(instance): Processes request via WSDL.handle().
WSDL Generation#
Access http://localhost:7145/calculator?wsdl for auto-generated XML.
- Includes types, messages, portType, binding, service.
- Registers ArrayOfX for lists; minOccurs=0/nillable for Optional.
SOAP Requests#
POST XML to endpoint; auto-converts params, handles nil.
Example Add request:
xml
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tns="http://tempuri.org/calculator"> <soapenv:Body> <tns:Add> <a>5</a> <b>3</b> </tns:Add> </soapenv:Body></soapenv:Envelope>Response:
xml
<?xml version='1.0' encoding='utf-8'?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tns="http://tempuri.org/calculator"> <soapenv:Body> <AddResponse> <AddResult> <Result>8</Result> </AddResult> </AddResponse> </soapenv:Body></soapenv:Envelope>- Lists: Repeat tags (e.g.,
).- 1
- 2
- Faults: Returns SOAP Fault on errors.
Utilities#
get_operations(): Lists public methods as operations.soap_fault(message): Builds fault XML.