[FIX] dfe: fix DfeClient.send() crash when wrap_response=True#145
[FIX] dfe: fix DfeClient.send() crash when wrap_response=True#145rvalyi merged 3 commits intoakretion:masterfrom
Conversation
wrap_response=True keeps backward compatibility with erpbrasil.edoc
so that consumers migrating to brazil_fiscal_client don't need a
large refactor. In that mode, FiscalClient.send() returns a
WrappedResponse whose parsed SOAP envelope is in .resposta.
DfeClient.send() was accessing response.body directly, which does
not exist on WrappedResponse, causing:
AttributeError: 'WrappedResponse' object has no attribute 'body'
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## master #145 +/- ##
==========================================
+ Coverage 94.02% 94.39% +0.36%
==========================================
Files 10 10
Lines 335 357 +22
Branches 29 30 +1
==========================================
+ Hits 315 337 +22
Misses 10 10
Partials 10 10 ☔ View full report in Codecov by Sentry. 🚀 New features to boost your workflow:
|
|
@rvalyi essa correção é importante pra gente avançar no módulo do DFe Valeu @felipemotter! |
Ensure consultar_distribuicao returns a WrappedResponse with the parsed content in .resposta and HTTP data in .retorno when using the erpbrasil.edoc compatibility mode (wrap_response=True).
|
coloquei um teste para ajudar no codecov |
rvalyi
left a comment
There was a problem hiding this comment.
valeu @felipemotter . Eu tinha bolado o sistema do wrap_response depois da primeira versão do client de DFe e acabei esquecendo isso. Vamos ver ainda se esse API do wrap_response que visa a imitar o API do erpbrasil.edoc possa ser melhorado, mas por enquanto podemos mesclar isso sem problema.
|
@rvalyi Consegue publicar uma nova versão com essas alterações? valeuuu! |
Resumo
Corrige o crash
AttributeError: 'WrappedResponse' object has no attribute 'body'ao usarDfeClient.consultar_distribuicao()comwrap_response=True.Trabalho em desenvolvimento — aberto como draft para discussão.
Como reproduzir
DfeClientcomwrap_response=True(modo de compatibilidade com erpbrasil.edoc)consultar_distribuicao()send()chamasuper().send()que retorna umWrappedResponseresponse.body, que não existe noWrappedResponseAttributeError: 'WrappedResponse' object has no attribute 'body'respostaeretornopreenchidosCausa raiz
FiscalClient.send()(brazil_fiscal_client) retorna tipos diferentes conformewrap_response:False→ SOAP envelope parseado diretamente (tem.body)True→WrappedResponse(tem.respostacom o envelope,.retornocom a resposta HTTP)DfeClient.send()acessavaresponse.bodyincondicionalmente, falhando no modowrap_response=True.Solução
Dois commits:
fix version for nfeDistribuicaoDFe soap envelope (cherry-pick da SOAP support for NFe #133, @antoniospneto) — corrige
versaode"4.00"para"1.01", compatível com o schemadistDFeInt.fix DfeClient.send() crash when wrap_response=True — detecta se o retorno é
WrappedResponse(.resposta) ou envelope direto, mantendo compatibilidade com quem migra de erpbrasil.edoc para brazil_fiscal_client sem precisar de um refactor grande.