Вызов Python API не записывается в файл

#python #xml #api #twinfield

#python #xml #API #twinfield

Вопрос:

В прошлом я использовал редактор Power Query PowerBI для запроса a sessionID , а затем использовал этот запрос для запроса API. Однако эта зависимость не работает со службой PowerBI.

Итак, теперь я пытаюсь выполнить вызов API извне через Python.

Я могу заставить его работать, используя следующий код

 import pandas as pd
import xml.etree.ElementTree as ET
from zeep import Client
import query
import authentication

# implement logging to logfile:

import logging

logger = logging.getLogger()
logging.getLogger('zeep').setLevel(logging.WARNING)
logging.getLogger('urllib3').setLevel(logging.WARNING)
handler = logging.FileHandler('./twinfield.log')
formatter = logging.Formatter(
    '%(asctime)s %(name)-12s %(levelname)-8s %(message)s'
)
handler.setFormatter(formatter)
logger.addHandler(handler)
logger.setLevel(logging.DEBUG)

#setup connection to Twinfields, provide credentials and receive cluster:

sessionlogin = r'https://login.twinfield.com/webservices/session.asmx?wsdl'
login = Client(sessionlogin)

auth = login.service.Logon(authentication.username, authentication.password, authentication.organisation)

auth_header = auth['header']['Header']
cluster = auth['body']['cluster']

#Use cluster to create a session:

url_session = cluster   r'/webservices/session.asmx?wsdl'
session = Client(url_session)

#Select a company for the session:

session.service.SelectCompany('NL001', _soapheaders={'Header': auth_header})

#And then connect to the actual webservice:

proces_url = cluster   r'/webservices/processxml.asmx?wsdl'
proces = Client(proces_url)

#Send the query and get the twinfield server response (XML):

response = proces.service.ProcessXmlString(query.XML_String,  _soapheaders={'Header': auth_header})

logger.debug('response received of %s characters', len(response))

#Write raw response to XML:

xmlfilename = 'twinfield.xml'

f = open(xmlfilename, 'w')
f.write(response)
f.close()

logger.debug('Raw XML file written: %s', xmlfilename)
  

Query.py выглядит примерно так:

 XML_String= r'''<columns code='030_1'>
<column>
    <field>fin.trs.head.office</field>
    <label>Administratie</label>
    <visible>true</visible>
    <ask>false</ask>
    <operator>none</operator>
    <from></from>
</column>
<column>
    <field>fin.trs.head.year</field>
    <label>Jaar</label>
    <visible>true</visible>
    <ask>true</ask>
    <operator>none</operator>
    <from>2020</from>
</column>
<column>
    <field>fin.trs.head.period</field>
    <label>Periode</label>
    <visible>true</visible>
    <ask>true</ask>
    <operator>none</operator>
</column>
<column>
    <field>fin.trs.head.date</field>
    <label>Boekdatum</label>
    <visible>true</visible>
    <ask>false</ask>
    <operator>none</operator>
    <from></from>
    <to></to>
    <finderparam></finderparam>
</column>
<column>
    <field>fin.trs.line.dim1</field>
    <label>Grootboekrek.</label>
    <visible>true</visible>
    <ask>true</ask>
    <operator>between</operator>
    <from></from>
    <to></to>
    <finderparam></finderparam>
</column>
<column>
    <field>fin.trs.line.dim1name</field>
    <label>Grootboekrek.naam</label>
    <visible>true</visible>
    <ask>false</ask>
    <operator>none</operator>
    <from></from>
    <to></to>
    <finderparam></finderparam>
</column>
</columns>'''

  

Код отлично записывается в XML-файл. Однако, когда я начинаю добавлять больше столбцов и запускать код, вместо черного py.exe внезапно по экрану пробегает поток текста. Когда он завершается, файл no-log или XML не записывается.

Это то, что я имею в виду:

1

Комментарии:

1. Для тех, у кого возникла такая же проблема, я исправил ее, установив HugeTree = True в настройках объекта синтаксического анализатора. lxml автоматически устанавливает для него значение False, поэтому любой XML-файл размером более 10 МБ работать не будет

2. Мы создали полный модуль python для запроса Twinfield. Смотрите домашнюю страницу здесь и для установки: pip install twinfield