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

Melhora da API #8

Open
iurisilvio opened this issue Apr 27, 2014 · 3 comments
Open

Melhora da API #8

iurisilvio opened this issue Apr 27, 2014 · 3 comments

Comments

@iurisilvio
Copy link
Contributor

A API atual é confusa, fácil de trocar postmon.Endereco e postmon.endereco.

Uma opção é deixar só a classe, adicionando um kwarg lazy para identificar se é pra buscar já na inicialização da classe. Talvez fazer a busca automaticamente quando uma propriedade não carregada for buscada.

>>> postmon.Endereco('11111-111')
>>> postmon.Endereco('11111-111', lazy=False)

O comportamento padrão seria carregar só quando acessar alguma propriedade (ou quando chamar o buscar), já que hoje o comportamento é semelhante.

O SQLAlchemy tem solução parecida para a busca de relações. O relationship tem um argumento lazy.

http://docs.sqlalchemy.org/en/rel_0_7/orm/relationships.html#sqlalchemy.orm.relationship

Preciso de um nome pt-br equivalente pra lazy ou de outras alternativas para a API.

@iurisilvio
Copy link
Contributor Author

No caso em que o usuário quer saber os erros do request, a solução continua sendo usar o buscar().

Fica difícil de tratar os erros no lazyload.

>>> e = postmon.Endereco('11111-111')
>>> e.logradouro
None

Deu erro ou o CEP não tem logradouro? Não dá pra saber, então volta pro problema de ter que saber o resultado do carregamento.

>>> e1.postmon.Endereco('11111-111', lazy=False)
>>> if e2._ok:
...     # objeto carregado
>>> e1.postmon.Endereco('11111-111')
>>> if e2.buscar():
...     # objeto carregado

Outra opção é usar um classmethod para fazer o carregamento ao invés de uma função externa, mas aí complica o caso de uso mais comum:

>>> e = postmon.Endereco.buscar('11111-111')

A solução mais simples talvez seja só renomear as funções do módulo e continuar com os comportamentos atuais:

>>> e = postmon.buscar_endereco('11111-111')

Se alguém ler isso e quiser dar opinião, agradeço. Escrevi para documentar minha cabeça, não defini as mudanças. Qualquer quebra de compatibilidade só vai acontecer na versão 1.0.

@aleborba
Copy link
Member

Eu usei no PostmonGo o nome BuscarCep("cep") para tratar o mesmo comportamento da sua classe Endereco("cep").

Inicialmente eu tinha, também, colocado Endereco, mas ai achei estranho e fiz uma busca interna (eu comigo e eu mesmo, rsrs) e perguntei a algumas pessoas aleatórias: O que você faz quando precisa saber o endereço de um cep? e as respostas foram sempre as mesmas, Eu busco o cep no site :) Ai fiz a ligação e preferi usar o BuscarCep.

Enfim, meus 2 cents :P

@iurisilvio
Copy link
Contributor Author

O BuscarCep do PostmonGo é o meu postmon.endereco. Inicialmente, eu tinha usado buscar_cep também, mas achei estranho essa função retornar um objeto Endereco.

Fiquei com medo de ficar tudo buscar_*, buscar_endereco, buscar_cidade, buscar_estado, mas talvez sejam os nomes corretos e evitem a confusão entre uma função e uma classe com mesmo nome.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants