Import_report error

Good afternoon guys, I’m encountering an error when trying to import a report. When I use the get_report command it brings me the answer, however when passing this return to import_export I get the following error: ValueError: can only parse strings, then I used tostring inside the import_report, now I get the following message: An error occurred Response Error 400. A REPORT element is required, inside the output of get_report there is the tag report that the import_report requests in the documentation.

follow code below:

     from lxml.etree import tostring

     report = gmp.get_report(report_id="id_report_here")
    #pretty_print(report)
  

    # import report
    importar = gmp.import_report(report=tostring(report), task_id="task_id_here")
    pretty_print(importar)

I would like to know how can I import a report. please help me

Hey. You will need to have a valid formatted XML-Report that you have exported on a machine before. This report can than be imported by reading the XML-Report file and passing it to the import_report function.

AFAIK you need the outer <report></report> tag within you string. If you look carefully into an XML report, you can see, that it contains a lot of tags, that are ordered like this:

<report id="..." format_id="a994b278-1f62-11e1-96ac-406186ea4fc5" extension="xml" content_type="text/xml">
    <owner>
        <name>owner</name>
    </owner>
    <name>...</name>
    ...
    <task id="...">
        <name>foo</name>
    </task>
    ...
    <report id="...">
      ...
    </report>
</report>

Everything in this XML needs to be in the string you want to import!

Edit: If you export your report with get_report(), you get additional XML, which you need to get rid of first:

<get_reports_response status="200" status_text="OK">
<report>HERE IS YOUR REPORT YOU WANT!</report>
  <filters id="">
    <term>apply_overrides=0 min_qod=70 first=1 rows=100 sort=name</term>
    <keywords>
      ...
    </keywords>
  </filters>
  <sort>
    <field>name<order>ascending</order></field>
  </sort>
  <reports start="1" max="-2"/>
  <report_count>3333<filtered>1</filtered><page>1</page></report_count>
</get_reports_response>

This can be done with the lxml.etree library. (e.g. with report.find('report') in your case)

1 Like