Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: implement config in XmlParser from_xml #102

Merged
merged 1 commit into from
May 26, 2024

Conversation

ElderVivot
Copy link
Contributor

@ElderVivot ElderVivot commented May 10, 2024

Implementado um config pro XmlParser, afim de que possa passar como argumento as opções desejadas do parser, como por exemplo ParserConfig(fail_on_unknown_properties=False, fail_on_unknown_attributes=False, fail_on_converter_warnings=False) , desta forma caso exista alguma tag que ainda não esteja mapeada no xsd ele não vai dar erro, por não encontrar as propriedades.

Tal processo foi motivado pelo erro que tive com o xml em anexo, onde existe a tag gCred dentro do produto (det/prod), invalidando assim toda a leitura do xml, o que é inviável.

Para comprovar, faça um teste antes e depois executando o seguinte comando:

xmlExample = ''
with open('data/xmls/xml_error.txt', 'r') as f:
    xmlExample = f.read()

NfeProc.from_xml(xmlExample)

Verá que antes da atualização vai dar erro raise ParserError(f"Unknown property {self.meta.qname}:{qname}") xsdata.exceptions.ParserError: Unknown property {http://www.portalfiscal.inf.br/nfe}Prod:{http://www.portalfiscal.inf.br/nfe}gCred
Após atualização, se criar o ParserConfig conforme primeiro parágrafo e passar ele como argumento, será processado com sucesso.

XML Exemplo: xml_error.txt

Copy link
Contributor

@antoniospneto antoniospneto left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Me parece legal,

Também já tive problema parecido em que o governo não respeitou o proprio XSD, mas foi em uma resposta 👍🏻

Interessante saber que existem tags que realmente existem e são usadas mas que não estão mapeadas nos esquemas (XDS).

if config is None:
return XmlParser().from_string(xml)
else:
return XmlParser(config=config).from_string(xml)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

não daria para usar apenas essa última linha sempre mesmo se o config for None? Funciona não?

cc @antoniospneto

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

resposta: temos sim que manter o teste if config is None: proposto porque se a gente não passar parametro config vai ser um novo ParserConfig pelo default_factory aqui https://github.com/tefra/xsdata/blob/d786f2f798d8643ef71c169ef317aeab4d897da2/xsdata/formats/dataclass/parsers/bases.py#L39C50-L39C62 enquanto que se a gente força o None seria None mesmo.

Vou fazer o merge assim então. Valeu @ElderVivot pela contribuição.

if config is None:
return XmlParser().from_string(xml)
else:
return XmlParser(config=config).from_string(xml)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

resposta: temos sim que manter o teste if config is None: proposto porque se a gente não passar parametro config vai ser um novo ParserConfig pelo default_factory aqui https://github.com/tefra/xsdata/blob/d786f2f798d8643ef71c169ef317aeab4d897da2/xsdata/formats/dataclass/parsers/bases.py#L39C50-L39C62 enquanto que se a gente força o None seria None mesmo.

Vou fazer o merge assim então. Valeu @ElderVivot pela contribuição.

@rvalyi rvalyi merged commit 5c34247 into akretion:master May 26, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants