Como hacer un módulo para Visuse

Post on 18-Dec-2014

1.093 views 6 download

description

Más información sobre el proyecto en: http://visuse.wordpress.com

Transcript of Como hacer un módulo para Visuse

Desarrollar un módulo para Visuse

José Luis López Pino

http://visuse.wordpress.com

¿Qué necesitamos para trabajar?

Un editor para Python. Por ejemplo, Geany. Subversion: sistema de control de versiones. Python ~2.6.2. Elegir un buscador.

Empezamos

Instalamos Python Ubuntu: sudo apt-get install python2.6 Windows: descargar de python.org la 2.6.4.

Alta en la forja de rediris. Descargamos el proyecto:

svn checkout https://forja.rediris.es/svn/cusl4-visuse

Los módulos los tenemos en trunk/visuse/modulos Añadimos la clase a classes.py Escribimos el módulo en Modulo_Nombre.py

Lo que hace un módulo:

Obtenemos los datos del buscador (usando XML, JSON o lo que corresponda).

Creamos una instancia de la clase por cada resultado.

Creamos una lista de resultados. Mostramos la lista en pantalla para comprobar

que no hay problemas.

Creando el módulo

Creamos Modulo_NombreBuscador.py Contendrá la definición de dos clases:

Clase NombreBuscador Heredará de Result y posiblemente de otro tipo

(como ImageResult) Habrá una instancia por cada resultado. Almacena los atributos relevantes del resultado.

SearchNombreBuscador Heredará de SearchModule. Realiza todo el proceso de búsqueda.

La configuración se mantiene en config.py

Clase NombreBuscador (I)

Hereda de Result y posiblemente también de ImageResult:

class Result():def __init__(self, name, url):

self.name = nameself.url = url

def __str__(self):return self.name + "\n" + self.url + "\n"

class ImageResult():def __init__(self, name, url, thumbnail):

Result.__init__(self, name, url)self.thumbnail = thumbnail

def __str__(self):return "%s\n%s\n%s\n" % (self.name, self.url, self.thumbnail)

Clase NombreBuscador (II)

Únicamente tiene un ”constructor”, que inicializa los parámetros necesarios:

class Wikicommons(Result, ImageResult):def __init__(self, name, url, thumbnail):

ImageResult.__init__(self, name, url, thumbnail)

Clase SearchNombreBuscador (I)

Hereda de SearchModule:class SearchModule():

def __init__(self):self.resultList = []

def __str__(self):str = ""for n in range(0, len(self.resultList)):

str += "===== %d =====\n" % nstr += "%s" % self.resultList[n]

return str

def search(self, search_terms):return self.resultList

def add(self, entry):pass

Clase SearchNombreBuscador (II)

Obligatoriamente debe incluir un ”constructor”. En un principio basta con que éste llame al

”constructor” de la clase de la que hereda (ModuleSearch):

def __init__(self):SearchModule.__init__(self)

SearchNombreBuscador (III)

El método search se comunica con el buscador en el protocolo que corresponda (Json, XML, etc.) y obtiene el listado de resultados.

def search(self, search_terms):gd_client = gdata.photos.service.PhotosService()

photos = gd_client.SearchCommunityPhotos(search_terms, limit=config.picasa_limit)

for iterador in photos.entry:print "kkk"self.add(iterador)

return self.resultList

SearchNombreBuscador (IV)

El método add trata cada uno de los resultados llamando al constructor de la clase que creamos anteriormente:

def add(self, entry):

self.resultList.append(Picasa( \ entry.title.text, \

entry.content.src, \entry.media.thumbnail[-1].url \

))

Probando el módulo

En el diccionario modules_dictionary del fichero config.py debemos añadir un nuevo elemento para nuestro módulo.

Se puede ejecutar un simple test mediante: python manage.py test

Para probarlo visualmente, en el template inicial2.html añadimos la key del diccionario anterior al vector searchEngineList Acceder a http://127.0.0.1:8000/prueba/rock