Parte 1 – Prueba tus modelos de Datastore con la Consola Interactiva de Google Cloud Platform

Grupodot
Comments Off on Parte 1 – Prueba tus modelos de Datastore con la Consola Interactiva de Google Cloud Platform

Esta es la primera en una serie de cortos artículos que cubrirán una forma de probar los modelos de Datastore de Google, usando la Consola Interactiva presente en el dev-server incluido en Google Cloud SDK. Igualmente veremos una buena manera (aunque sea para nosotros) de crear y subir una gran cantidad de datos obtenidos en las pruebas de los modelos, para que tu puedas trabajar con datasets similares a los que vas a usar en producción. Finalmente, veremos lo fácil que es integrar estas herramientas en una simple aplicación usando Ferris MVC.

Nota: Estoy usando Google Cloud Python SDK versión 1.9.3, en Ubuntu Linux q12.04, de 64 bits. Como quiero que esta pequeña intro crezca a lo largo del tiempo, estare usando el excelente marco de referencia MVC “Ferris” de CloudSherpas desde el comienzo. La IDE que uso es EMACS 23.3.

1. Crear tu primer modelo Datastore “Persona”

1. Crear un proyecto en blanco

Primero, necesitas crear un proyecto vacío para empezar. Lo que debes hacer, es crear una copia de la plantilla new_project incluida en Google Cloud SDK.

 cp -R new_project_template my_new_project   

2. Instalar Ferris MVC

Descarga Ferris MVC desde su página oficial:

 wget -c https://bitbucket.org/cloudsherpas/ferris-framework/get/master.zip  

Descomprime el paquete en tu carpeta “my_new_project” o directorio

 $ unzip cloudsherpas-ferris-framework-*.zip -d .   
 $ cd cloudsherpas-ferris-framework-*   
 $ mv * ../   
 $ rm -fr cloudsherpas-ferris-framework-*  

Edita y guarda en tu carpeta app.yaml file para que sepas que ese es tu proyecto

 #my_new_project/app.yaml  
 application: my-new-app-id  #.appspot.com                                                
 version: 1.0  

Comienza la aplicación por primera vez para confirmar que todo esté bien

Para iniciar tu aplicación por primera vez, simplemente lanza el dev-server de esta manera:

 $ dev_appserver.py my_new_project   

Después abre tu navegador en http://localhost:8080 (URL local de la aplicación) y en http://localhost:8000 (consola local del administrador).

3. Crear el primer modelo de Datastore

Para este artículo, crearemos un simple modelo de dos propiedades del tipo “Persona”. Este modelo incluye el “nombre” de la persona y también un campo de texto de valores múltiples para guardar etiquetas relacionadas con esta persona. Siguiente la estructura del directorio que acabamos de crear al copiar Ferris a nuestro proyecto, necesitamos crear nuestro modelo en la carpeta app/models de la siguiente forma: (puedes usar el editor de texto o IDE de tu elección).

 # app/models/person.py  
 from ferris import BasicModel                                                     
 from google.appengine.ext import ndb   

 class Person(BasicModel):                         
   """   
   NDB Model for Person                                                
   name: StringProperty - Required                                
   skills: StringProperty(repeated=True) - Optional                                            
   """                              
  name = ndb.StringProperty(required=True)        
  tags = ndb.StringProperty(repeated=True)   

Una vez creado el modelo, puedes reiniciar tu servidor de desarrollo (CTRL+C) y dev_appappserver.py my_new_project nuevamente.

Usa tu consola interactiva para probar tu modelo

El SDK de Google Cloud contiene una muy buena aplicación de administración que incluye una consola interactiva para probar tu código o datos con diferentes propósitos. En este caso, usaremos la consola interactiva para probar nuestro modelo simple Persona al crear nuevas entradas y hacer algunas consultas en ella.

Creación masiva de entradas de prueba con datos de muestra

Una de las cosas que encuentro más molestas cuando pruebo una aplicación, es la falta de datos reales o lo más posible a serlo. Muchos de los problemas (piensa en rendimiento, escalabilidad, validación y modelización de datos por nombrar unos pocos) pueden ser rastreados a las primeras etapas del desarrollo si solo se pudiera contar con un conjunto de datos adecuados para trabajar. Incluso para nuestro modelo simple, es bueno contar con un conjunto de datos de un tamaño decente para probar consultas e inserciones en etiquetas o nombres que estén presentes.

Aunque el servidor de desarrollo incluido en el GC SDK aparenta tener capacidades de inserción masiva de datos en el Datastore de Google, no pude encontrar una buena fuente o referencia para ejecutar ese proceso cuando se está usando NDB (el documento oficial, menciona la implementación DB pero no la NDB). En este escenario, recordé el excelente paquete Perl::Marker y decidí buscar uno equivalente para Python. Lo que encontré fue “Faker”, una herramienta bastante simple y poderosa para crear datos de usuarios: nombres, apellidos e información general (lorem ipsum). De esta manera, lo que vamos a hacer en este momento es agregar a Faker en nuestro proyecto y empezar a usar la Consola Interactiva para realizar algunas pruebas.

1. Descarga Faker desde la página oficial de github.

https://github.com/joke2k/faker

2. Descomprime Faker en la carpeta de tu proyecto

 $ cd my_new_project  
 $ unzip faker-master.zip -d .   
 $ mv faker-master faker   

3. Crea información masiva desde la Consola Interactiva

Inicia tu servidor de desarrollo (si no lo has hecho previamente)

 $ dev_appserver.py my_new_project   

Lanza la Consola de administración

Direcciona tu navegador a http://localhost:8000 luego da click en “Consola Interactiva” en el menú de la parte izquierda

Cuando estes ahi, borra el código predeterminado que aparece en el cuadro de texto.
Finalmente, copia y pega el siguiente código de python en el cuadro de texto:

from app.models.person import Person 
from google.appengine.ext import  ndb
from random import randrange
from faker import Faker                                                
                                                                              
# a new instance of Faker                                                                                                                 
fake = Faker()
NENTRIES = 10

# a list wich contains fake tags to randomize over                                                                                        
ftags = (['engineering','custom-making','writing','electrician',
            'interiors-design','dancing','smiling','drifting','drinking'])                                                                                       
ftags_new = []                                                              
                                                                              
for i in range(1,NENTRIES):  
# create a new name                                               
 fname = fake.name()
            
# randomize over tags list size and items to create the person's tags            
# randomize the number of tags
 for j in range(0,randrange(9)):
# randomize tags                                            
  ftags_new.extend([ftags[randrange(9)]])                                   
 print ftags_new                                                            
 person = Person(name=fname, tags=ftags_new)                                
 del ftags_new[:]
# save the new person on datastore everytime                                     
 person.put()

Despues de ejecutar el código anterior, debes ver una lista de todas las etiquetas asignadas al azar a cada entrada:

['interiors-design', 'writing', 'electrician', 'dancing', 'interiors-design', 'drinking', 'smiling', 'interiors-design']
['electrician', 'writing']
['interiors-design']
['interiors-design', 'interiors-design', 'dancing', 'smiling', 'smiling']
['drifting', 'electrician', 'dancing', 'interiors-design', 'dancing', 'drinking']
['electrician', 'writing', 'drifting', 'writing', 'writing', 'drinking', 'interiors-design', 'engineering']
['interiors-design', 'interiors-design']
['writing']
['drinking', 'drinking', 'drinking', 'engineering']

Ahora, puedes it a “Datastore Viewer” en la consola, para ver las entradas que acabas de crear. En este caso, creaste 10 entradas, pero el número puede ser más elevado.

En la siguiente parte, estaremos viendo consultas en Datasore y los atributos repetidos, e igualmente algunas buenas opciones para controlar el tiempo del proceso para la creación de entradas.

Referencias

[1] Documentacion oficial de Google App Engine Official https://developers.google.com/appengine/?csw=1
[2] Ferris MVC – http://ferris-framework.appspot.com
[3] Faker – https://github.com/joke2k/faker