У меня есть 2 основных варианта использования с zeep:
- Сборка клиента из WSDL в виде файла на диске, добавление новой службы с правильным URL-адресом конечной точки (у меня их много) и выполнение SOAP методы в моем коде
- Позвольте бизнес-логике c (многим другим субъектам) создавать свои собственные клиенты из WSDL, полученной из URL, возможно, добавьте несколько пользовательских плагинов и выполните SOAP методы
Я хотел бы использовать HistoryPlugin в обоих случаях для достижения чего-то подобного:
try:
res = client.service.Method(args)
except zeep.exceptions.Fault as e:
raise MyOwnException(history.last_send.envelope, history.last_received.envelope)
Так, чтобы из моего кода и во всех местах, где бизнес-логика c требовался клиент SOAP было бы возможно захватить, что именно было отправлено и получено.
В настоящее время единственный способ, которым я вижу, что это может быть сделано, - это подготовить клиента, собрать все OperationProxy из его ServiceProxy и обернуть их все моим кодом, чтобы что мои клиенты будут вызывать не client.service.Method, а custom_client.Method. И внутри этого кода проверьте исключение.
Проблема в том, что все API в ServiceProxy и OperationProxy являются частными, и я закончу с репликацией их части. Возможно, кто-нибудь знает лучший способ достичь того же или любого другого опыта здесь?