Japle / python-pagseguro

Integração com a API v2 de pagamentos e notificações do Pagseguro utilizando requests.
MIT License
172 stars 69 forks source link

Problemas com clean_none_params() #51

Closed jdcarvalho closed 7 years ago

jdcarvalho commented 7 years ago

Olá pessoal,

recentemente contribui com o projeto com a possibilidade de usar ou não o endereço no checkout através do parâmetro shippingAddressRequired. Estando como False o mesmo não requer endereços para utilizar o checkout para serviços. Encontrei um pequeno problema com o uso deste parâmetro. Debugando o código, conforme prints percebi que o problema está no método clean_none_params(), linha 164 do init.py

O parâmetro é preenchido como False corretamente mas o clean_none_params o remove.

Como isso certamente é uma decisão de projeto pelo uso do clean_none_params, gostaria de saber de vocês como posso implementar um fix para o que o clean_none_params continue fazendo o seu trabalho e possa também aceitar booleanos False.

Pensei em uma checagem de tipo para ignorar a limpeza de booleanos False mas gostaria de partilhar com vocês antes a fim de obter a melhor solução,

Atenciosamente,

João Carvalho

1 2

rochacbruno commented 7 years ago

Esta linha https://github.com/rochacbruno/python-pagseguro/blob/master/pagseguro/__init__.py#L188

deve mudar de

    def clean_none_params(self):
        copy = dict(self.data)
        for k, v in list(copy.items()):
            if not v:
                del self.data[k]

para

    def clean_none_params(self):
        copy = dict(self.data)
        for k, v in list(copy.items()):
            if v is None:
                del self.data[k]

usar is None é a forma correta.

rochacbruno commented 7 years ago

@jdcarvalho na verdade dá para simplificar

In [4]: data
Out[4]: {'1': 'b', '2': False, '4': None}

In [5]: {k: v for k, v in data.items() if v is not None}
Out[5]: {'1': 'b', '2': False}

então

 def clean_none_params(self):
     self.data = {k: v for k, v in self.data.items() if v is not None}
jdcarvalho commented 7 years ago

Perfeito Bruno! Era isso mesmo que tinha em mente. o Segundo snippet ficou bem mais interessante com a compreensão de dicionário. Posso aplicar o fix e solicitar o pull para integração ou você faz isso por ai?

rochacbruno commented 7 years ago

Se puder mandar um PR é melhor :)