Esempio n. 1
0
from excepciones import PetsNotFound, EmptyCollection
import estadisticas

sys.path.append("src/mascotas")
sys.path.append("../mascotas")
import mascotas
from mongodb import MongoDB

try:
    """Creamos un objeto de la base de datos donde se almacenan las mascotas."""
    bdMascotas = MongoDB(os.environ.get("MONGODB_URI"), 'PetfinderBD',
                         'mascotas')
    """Creamos un objeto de la clase Mascotas para obtener todas las mascotas de la base
    de datos y así generar las estadísticas, en lugar de conenectarnos con el microservicio
    Celery que descarga los datos. Así desacoplamos la obtención de datos del resto de microservicios."""
    m = mascotas.Mascotas(bdMascotas)
except:
    print("No se ha podido establecer la conexión con la API Petfinder aún.")
"""Creamos un objeto de la clase Estadísticas para acceder a los métodos que generan
los diferentes tipos de infomes"""
bdEstd = MongoDB(os.environ.get("MONGODB_URI"), 'PetfinderBD', 'estadisticas')
estd = estadisticas.Estadisticas(bdEstd)


@periodic_task(run_every=(crontab(minute='*/60')), name="generar_estadisticas")
def generar_estadisticas():
    """Genera los tres informes estadísticos a partir de los datos de las mascotas
        descargados. """
    try:
        mascotasbd = m.obtener_mascotas()
        estd_ninios = estd.generar_estadistica_ninios(mascotasbd)
Esempio n. 2
0
             backend='redis://')
from celery.task.schedules import crontab
from celery.decorators import periodic_task
import mascotas
import sys
sys.path.append("src")
from excepciones import MaxPetfinderRequestsExceeded
from mongodb import MongoDB
"""Creamos un objeto de la clase Mascotas cuyo constructor se encarga de inicializar
la conexión con la API Petfinder.

Este bloque try-except evita que la excepción impida construir el contenedor al
iniciar celery durante su construcción."""
try:
    """Creamos un objeto de la base de datos y lo configuramos."""
    bd = MongoDB(os.environ.get("MONGODB_URI"), 'PetfinderBD', 'mascotas')
    m = mascotas.Mascotas(bd)
except:
    print("No se ha podido establecer la conexión con la API Petfinder aún.")


@periodic_task(run_every=(crontab(minute='*/60')), name="descargar_mascotas")
def descargar_mascotas():
    """Descarga nuevos datos de viente mascotas siempre y cuando se haya realizado
    una conexión correcta con la API Petfinder."""
    try:
        return m.descargar_datos_mascotas()
    except:
        raise MaxPetfinderRequestsExceeded(
            "Celery: número de peticiones máximo excedido.")
Esempio n. 3
0
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Sun Dec  1 11:19:12 2019

@author: Lidia Sánchez Mérida.
"""

from flask import Flask, Response
import mascotas
import json
import os

app = Flask(__name__)
m = mascotas.Mascotas()


@app.route("/")
def index():
    return Response("Microservicio para recopilar datos de mascotas.",
                    status=200)


@app.route("/conectar_petfinder", methods=['GET'])
def conectar_petfinder():
    """Servicio REST para conectar con la API Petfinder. Para ello deberán
    haberse definido, previamente, dos variables de entorno con la api key y
    la api secret.
    Si las credenciales no son válidas devolverá el código 404 BAD REQUEST."""
    api_key = os.environ.get("API_KEY")
    api_secret = os.environ.get("API_SECRET")
Esempio n. 4
0
@author: Lidia Sánchez Mérida
"""

import os
import sys
import pytest
sys.path.append("src/mascotas")
import mascotas 
sys.path.append("src")
from excepciones import WrongPetIndex, MaxPetfinderRequestsExceeded, WrongNumberSearchParameters, WrongSearchParametersValues
sys.path.append("src")
from mongodb import MongoDB
"""Creamos la conexión para la base de datos."""
bd = MongoDB(os.environ.get("MONGODB_URI"), 'PetfinderBD', 'mascotas')
lista_mascotas = mascotas.Mascotas(bd)

def test_comprobar_variable_correcta():
    """Test 1: comprobación del tipo y el valor de una variable."""
    variable = True
    resultado = lista_mascotas.variable_correcta(variable, bool)
    assert resultado == True
    
def test_comprobar_variable_incorrecta():
    """Test 2: comprobación del tipo y el valor de una variable de forma incorrecta.
        El objetivo es comprobar que realmente el método reconoce que la variable
        es de tipo booleano mientras le decimos que es una cadena."""
    variable = True
    resultado = lista_mascotas.variable_correcta(variable, str)
    assert resultado == False