From ac621f63aae3b400e474509f62b742cad6788e65 Mon Sep 17 00:00:00 2001 From: Roberto Alsina Date: Tue, 19 Jul 2022 15:44:48 -0300 Subject: [PATCH] Fixes --- nombres/busqueda/handler.py | 75 ++++++++----------------------------- 1 file changed, 16 insertions(+), 59 deletions(-) diff --git a/nombres/busqueda/handler.py b/nombres/busqueda/handler.py index 87ee6f6..6b3f49c 100644 --- a/nombres/busqueda/handler.py +++ b/nombres/busqueda/handler.py @@ -29,54 +29,8 @@ class Género: def split_por_genero(nombres): - no_clasificados = set() - # Veamos cuales de estos nombres ya están clasificados - for nombre in nombres: - clasificador = remove_accents( - nombre.nombre.split()[0] - ) # genderize no aprecia acentos para AR - genero = Género.get(nombre=clasificador) - if not genero: - # No está clasificado - no_clasificados.add(urllib.parse.quote(clasificador)) - - if no_clasificados: - print(f"Tengo {len(no_clasificados)} sin clasificar") - no_clasificados = list(no_clasificados) - # Averiguar los no clasificados - # Partimos en bloques de a 10 (API de genderize) - for i in range(len(no_clasificados) // 10 + 1): - chunk = no_clasificados[i * 10 : (i + 1) * 10] - url = f'https://api.genderize.io/?name[]={"&name[]=".join(chunk)}&country_id=AR' - clasificados = requests.get(url) - for resultado in clasificados.json(): - if not resultado["name"]: - continue # No me importa - if resultado["gender"] == "male": - masc = resultado["probability"] - elif resultado["gender"] == "female": - masc = 1 - resultado["probability"] - else: - # Probablemente un acento o algo así - print(f"Raro:{resultado}") - masc = None - # Metemos en la base - print(f"Clasificando {resultado}: {masc}") - Género(nombre=resultado["name"], masculinidad=masc) - - nombres_f = [] - nombres_m = [] - for nombre in nombres: - clasificador = remove_accents(nombre.nombre.split()[0]) - genero = Género.get(nombre=clasificador) - if not genero or genero.masculinidad is None: # No clasificado, en ambos - nombres_f.append(nombre) - nombres_m.append(nombre) - elif 0.4 < genero.masculinidad: - nombres_m.append(nombre) - elif 0.6 > genero.masculinidad: - nombres_f.append(nombre) - return {"f": nombres_f, "m": nombres_m} + # TODO: reimplementar usando datos de España de género asignado + return {"f": nombres, "m": nombres} def handle(req): @@ -92,7 +46,6 @@ def handle(req): """ - try: data = loads(req) except Exception as e: @@ -107,11 +60,11 @@ def handle(req): año = None except Exception as e: prefijo = genero = año = None + return f"{req} -- {e}", 400 if prefijo is not None: prefijo = prefijo.strip().lower() - if genero not in ("f", "m"): genero = None @@ -126,7 +79,7 @@ def handle(req): cursor.execute(sql) datos = [(r["total"], r["nombre"]) for r in cursor.fetchall()] - elif prefijo is None and año is not None: # Totales por año + elif prefijo is None and año is not None: # Totales por año with connection.cursor() as cursor: sql = """ SELECT contador, nombre @@ -136,21 +89,21 @@ def handle(req): ORDER BY contador DESC LIMIT 50 """ - cursor.execute(sql, {'anio': año}) + cursor.execute(sql, {"anio": año}) datos = [(r["contador"], r["nombre"]) for r in cursor.fetchall()] elif prefijo is not None and año is None: with connection.cursor() as cursor: sql = """ - SELECT contador, nombre - FROM nombres + SELECT total, nombre + FROM totales WHERE nombre LIKE :nombre - ORDER BY contador DESC + ORDER BY total DESC LIMIT 50 """ - cursor.execute(sql, {"nombre": "{prefijo}%"}) - datos = [(r["contador"], r["nombre"]) for r in cursor.fetchall()] + cursor.execute(sql, {"nombre": f"{prefijo}%"}) + datos = [(r["total"], r["nombre"]) for r in cursor.fetchall()] else: with connection.cursor() as cursor: sql = """ @@ -162,7 +115,7 @@ def handle(req): ORDER BY contador DESC LIMIT 50 """ - cursor.execute(sql, {"anio": año, "nombre": "{prefijo}%"}) + cursor.execute(sql, {"anio": año, "nombre": f"{prefijo}%"}) datos = [(r["contador"], r["nombre"]) for r in cursor.fetchall()] if genero: @@ -180,4 +133,8 @@ def handle(req): chart.title = "¡No esssistís!" chart.add("", [contador for contador, _ in datos[::-1]]) - return chart.render(is_unicode=True), 200, {"Content-Typei": "image/svg+xml"} + return ( + chart.render(is_unicode=True), + 200, + {"Content-Type": "image/svg+xml"}, + )