[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