-
Notifications
You must be signed in to change notification settings - Fork 59
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
Conversation
There was a problem hiding this 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) |
There was a problem hiding this comment.
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?
There was a problem hiding this comment.
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) |
There was a problem hiding this comment.
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.
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:
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