[Grok-dev] Exemplo de uso de interfaces fora do Zope
Luciano Ramalho
luciano at ramalho.org
Tue Aug 7 00:35:23 EDT 2007
Hoje eu terminei de implementar um protótipo do kirbifetch, o buscador
de metadados de livros.
O código está aqui:
http://svn.zope.org/Sandbox/luciano/kirbi/kirbifetch/src/kirbifetch/
Vejam bem: ainda é um protótipo. Funciona mas está cheio de arames e
silver tape.
Os módulos que interessam são apenas dois:
fetch.py
Este é o daemon que usa o Twisted para perguntar ao Kirbi que
livros devem ser buscados, e depois buscá-lo na(s) fonte(s) de
metadados, juntamente com as figuras das capas, se existirem
amazonsource.py
Este módulo define uma classe que implementa a interface
IMetadataSource, que define métodos para construir URLs de busca e um
método para fazer parse de resultados.
Atualmente a interface IMetadataSource serve apenas como documentação
(me ajudou a pensar na separação de responsabilidades entre fetch e
amazonsource), e não tem nenhuma função no kirbifetch.
Porém a idéia é que existam várias fontes de dados, e aí seria bacana
se o fetch.py usasse o mecanismo de interfaces para poder enfileirar
vários provedores de IMetadataSource para acioná-los sucessivamente ou
alternativamente. Por exemplo, teríamos várias cadeias de Sources, que
seriam selecionadas conforme o prefixo do ISBN:
- 0|1 (mercado anglófonos): AmazonSource -> AlibrisSource ->
LibraryOfCongressSource -> BritishLibrarySource
- 85 (mercado brasileiro): TempoRealSource -> SubmarinoSource ->
UnibibliWebSource -> BibliotecaNacionalSource
Esta é a idéia em linhas gerais. É uma arquitetura sofisticada e por
hora além das minhas capacidades de implementação. Estou colocando
estas idéias aqui para a gente ir conversando...
O interessante deste caso de uso de interfaces é que ele não tem nada
a ver com o Zope. O kirbifetch foi feito para dialogar com qualquer
servidor XML-RPC que implemente dois métodos: dumpIncomplete (devolve
uma lista de ISBNs a serem buscados) e updateBooks (recebe uma lista
de dicionários com dados bibliográficos). No diretório testes existe
um dummy_server.py que implementa isso em poucas linhas.
[ ]s
Luciano
PS. Outro desafio para este kirbifetch é escrever testes... testes de
operações assíncronas... mais um tema para estudar.
More information about the Grok-dev
mailing list