Пример #1
0
class SOAP_BGService:
    """
    Описывает WEB-сервис билинга
    """
    def __init__(self, bgserver, package, module):
        self.bgserver = bgserver
        self.package = package
        self.module = module
        self.service = Client(self.wsdl()).service

    def wsdl(self):
        """
        Возвращает URL WSDL-схемы сервера
        """
        return "{bgserver_url:s}/{package:s}/{module:s}?wsdl".format(
            bgserver_url=self.bgserver.url,
            package=self.package,
            module=self.module)

    def __getattr__(self, item):
        """
        Все прочие вызовы проксирует на SOAP-сервис.

        Первым параметром при вызове сервиса должен быть объект BGUser, содержащий параметры
        """
        def f(*args, **kwargs):
            return self.service.__getattr__(item).__call__(
                _soapheaders=[args[0].get_auth_header()], *args[1:], **kwargs)

        return f
Пример #2
0
class ServiceClient(object):
    """
    That is a wrapper over the original zeep.Client
    """
    def __init__(self, wsdl):
        self._client = Client(wsdl).service

    def __getattr__(self, item):
        """
        Returns a converted dict response body instead of xml-based string

        :type item: zeep.client.OperationProxy
        :return: dict
        """
        try:
            operation = self._client.__getattr__(item)

            def wrapper(*args):
                result = operation(*args)
                if isinstance(result, str):
                    parsed = loads(dumps(xmltodict.parse(result)))
                    return parsed
                return result

            return wrapper
        except AttributeError:
            sys.exit("The service does not support the requested operation: %s." % item)