Как использовать библиотеку asyncio внутри Zeep Plugin - PullRequest
0 голосов
/ 19 декабря 2018

Как использовать библиотеку asyncio внутри Zeep Plugin

Перед отправкой SOAP-запроса на сервер мне нужно добавить несколько тегов к нему с помощью внешней программы.Я написал плагин для библиотеки Zeep:

class ZeepSignPlugin(Plugin):
    def egress(self, envelope, http_headers, operation, binding_options):
        tmp_filename = 'tmp_filename.xml'
        tmp_signed_filename = 'tmp_signed_filename.xml'

        et = etree.ElementTree(envelope)

        et.write(tmp_filename, pretty_print=True)

        proc = subprocess.Popen([
            Config.exe_path,
            'sign',
            '-f' + tmp_filename,
            '-o' + tmp_signed_filename,
            '-v',
        ], stdout=subprocess.PIPE)
        output = proc.stdout.read()
        print(output.decode('CP866'))

        newenvelope = etree.parse(tmp_signed_filename)

        os.remove(tmp_filename)
        os.remove(tmp_signed_filename)

        return newenvelope, http_headers

Я пробовал код, подобный этому:

loop = asyncio.get_running_loop()
proc = loop.subprocess_exec(
    Config.exe_path,
    'sign',
    '-f' + tmp_filename,
    '-o' + tmp_signed_filename,
    '-v',
stdout=asyncio.subprocess.PIPE)

loop.run_until_complete(proc)

, но он возвращает ошибку:

RuntimeError: Thisцикл обработки уже запущен

Как использовать библиотеку asyncio внутри плагина Zeep?

...