You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
111 lines
3.6 KiB
111 lines
3.6 KiB
MODELO
|
|
======
|
|
|
|
Modelo das entidades e como elas se relacionam.
|
|
|
|
Nenhum dos campos deve permitir acentos e/ou cedilhas.
|
|
|
|
Todas as entidades devem referenciar uma Fonte de Dados, de forma a evitar
|
|
redundancia de dados (com o objetivo de melhorar o desempenho e possibilitar
|
|
o uso de cache de persistencia de dados serializados).
|
|
|
|
>>> from pynfe.entidades import FonteDados
|
|
>>> fonte_dados = FonteDados()
|
|
|
|
Nao eh da funcao do PyNFe efetuar a persistencia dos objetos, mas a classe
|
|
FonteDados deve facilitar esse processo ao software que for implementa-la.
|
|
|
|
>>> hasattr(FonteDados, 'carregar_objetos')
|
|
True
|
|
|
|
>>> from pynfe.entidades import Emitente
|
|
|
|
Populando fonte de dados com objetos
|
|
|
|
>>> bool(Emitente(cnpj='12.345.678/0001-90', _fonte_dados=fonte_dados))
|
|
True
|
|
|
|
>>> bool(Emitente(razao_social='JKL Calcados Ltda.', _fonte_dados=fonte_dados))
|
|
True
|
|
|
|
>>> bool(Emitente(razao_social='JKL Calcados Ltda.', _fonte_dados=fonte_dados))
|
|
True
|
|
|
|
O metodo carregar_objetos pode ser sobrecarregado para alterar o carregamento de
|
|
objetos da memoria para forcar mocking ou para carregar de camada persistente.
|
|
Ele sempre retorna uma lista de objetos, independente se vazia ou com qualquer
|
|
quantidade de objetos.
|
|
|
|
>>> def carregar_objetos(self, **kwargs):
|
|
... if kwargs.get('cnpj', None) == 'xxx':
|
|
... return ['encontrado!']
|
|
...
|
|
... return self.antigo_carregar_objetos(**kwargs)
|
|
|
|
Substituindo metodo 'carregar_objetos'
|
|
|
|
>>> fonte_dados.antigo_carregar_objetos = fonte_dados.carregar_objetos
|
|
|
|
>>> import new
|
|
>>> fonte_dados.carregar_objetos = new.instancemethod(carregar_objetos, fonte_dados, FonteDados)
|
|
|
|
>>> fonte_dados.obter_objeto(cnpj='xxx')
|
|
'encontrado!'
|
|
|
|
O metodo 'obter_objeto' retorna um unico objeto que atende aos atributos informados.
|
|
O argumento especial '_classe' eh utilizado para indicar que a classe da entidade eh
|
|
a atribuida a esse argumento.
|
|
|
|
>>> emitente = fonte_dados.obter_objeto(cnpj='12.345.678/0001-90', _classe=Emitente)
|
|
|
|
>>> isinstance(emitente, Emitente)
|
|
True
|
|
|
|
Caso nenhum objeto seja encontrado, uma excecao deve ser levantada.
|
|
|
|
>>> from pynfe.excecoes import NenhumObjetoEncontrado
|
|
|
|
>>> try:
|
|
... fonte_dados.obter_objeto(cnpj='98.765.432/0001-10', _classe=Emitente)
|
|
... except NenhumObjetoEncontrado, e:
|
|
... print e.message
|
|
Nenhum objeto foi encontrado!
|
|
|
|
Caso mais de um objeto sejam encontrados, uma excecao deve ser levantada tambem.
|
|
|
|
>>> from pynfe.excecoes import MuitosObjetosEncontrados
|
|
|
|
>>> try:
|
|
... fonte_dados.obter_objeto(razao_social='JKL Calcados Ltda.', _classe=Emitente)
|
|
... except MuitosObjetosEncontrados, e:
|
|
... print e.message
|
|
Muitos objetos foram encontrados!
|
|
|
|
O metodo 'obter_lista' retorna uma lista de objetos, mesmo que vazia.
|
|
|
|
>>> len(fonte_dados.obter_lista(razao_social='JKL Calcados Ltda.'))
|
|
2
|
|
|
|
>>> len(fonte_dados.obter_lista(razao_social='Inexistente S/A'))
|
|
0
|
|
|
|
Qualquer entidade que for instanciada deve ser acrescentada automaticamente a lista de
|
|
objetos da Fonte de Dados, atraves de um metodo especifico pra isso
|
|
|
|
>>> conta_antes = fonte_dados.contar_objetos()
|
|
>>> emitente = Emitente(razao_social='Emitente Novo', _fonte_dados=fonte_dados)
|
|
>>> fonte_dados.contar_objetos() - conta_antes
|
|
1
|
|
|
|
O contador de objetos retorna a quantidade de instancias que casem com os argumentos passados
|
|
|
|
>>> fonte_dados.contar_objetos(_classe=Emitente, razao_social='Emitente Novo')
|
|
1
|
|
|
|
>>> fonte_dados._objetos
|
|
|
|
Permitir tambem remover objetos (que por padrao remove apenas da lista da memoria e nao
|
|
eh persistente.
|
|
|
|
>>> fonte_dados.remover_objeto(emitente)
|
|
|