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)
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.")
#!/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")
@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