import unicodedata import urllib from collections import defaultdict as ddict from dataclasses import dataclass from json import loads import pygal import pyrqlite.dbapi2 as dbapi2 import requests connection = dbapi2.connect( host="10.61.0.1", user="root", port=4001, password="", ) def remove_accents(input_str): nfkd_form = unicodedata.normalize("NFKD", input_str) return "".join([c for c in nfkd_form if not unicodedata.combining(c)]) def handle(req): """handle a request to the function Args: req (str): request body { p: prefijo del nombre, g: genero del nombre, a: año de nacimiento } """ try: nombres = [remove_accents(req.strip().lower()) for x in req.split(",")] except Exception: nombres = ["maria", "juan"] chart = pygal.Line( height=200, fill=True, human_readable=True, show_minor_x_labels=False ) chart.x_labels = range(1922, 2015) for nombre in nombres: datos = ddict(int) with connection.cursor() as cursor: sql = """ SELECT anio, contador, nombre FROM nombres WHERE nombre = :nombre ORDER BY anio """ cursor.execute(sql,{"nombre": nombre}) datos.update({r["anio"]: r["contador"] for r in cursor.fetchall()}) chart.add(nombre.title(), [datos[x] for x in range(1922, 2015)]) chart.x_labels = [str(n) for n in range(1922, 2015)] chart.x_labels_major = [str(n) for n in range(1920, 2020, 10)] # return Response(chart.render(is_unicode=True), mimetype="image/svg+xml") return chart.render(is_unicode=True), 200, {"Content-Type": "image/svg+xml"}