Как переопределить метод call_wrapper Spyne в Django 1,9? - PullRequest
1 голос
/ 27 февраля 2020

Я использую Django 1.9 для предоставления SOAP 1.1 API с Spyne версии 2.12.16

Мне нужно реализовать ведение журнала для каждого запроса XML и ответа XML на моей платформе.

Django urls.py is

url(r'^your_data/', DjangoView.as_view(
        name="YourDataService",
        services=[YourDataService],
        tns='http://127.0.0.1:8000/',
        in_protocol=Soap11(validator='lxml'),
        out_protocol=Soap11()))

views.py:

from spyne.decorator import rpc
from spyne.model.primitive import String, AnyDict
from spyne.service import ServiceBase

class YourDataService(ServiceBase):
    @rpc(String, String, String, _returns=AnyDict)
    def call_this_method(self, a, b, c):
        return {'aa': 'OK','bb': 'Great','cc': 'Perfect'}

Я где-то читал, что переопределенный метод call_wrapper класса Spyne ServiceBase может регистрировать запросы и ответы XML данные для этой услуги. Но реализация того же самого привела к странным проблемам с журналированием и c:

class ServiceBaseAbstract(ServiceBase):
    def call_wrapper(cls, ctx):
        try:
            return ctx.service_class.call_wrapper(ctx)
        except Exception as err:
            print err

Выдает ошибку:

No handlers could be found for logger "spyne.application.server"

API работает нормально без переопределения call_wrapper.

Я действительно смущен и не могу найти выход из этого. Ваша помощь будет высоко ценится. Спасибо

1 Ответ

0 голосов
/ 28 февраля 2020

Переопределение call_wrapper - это изменение способа обработки / регистрации исключений Spyne.

Вместо этого необходимо настроить библиотеку журналов python для отображения сообщений уровня DEBUG, а также включить ведение журнала отладки протокола для Spyne.

logging.getLogger('').setLevel(logging.DEBUG)        
logging.getLogger('spyne.protocol.xml').setLevel(logging.DEBUG)
...