Fixes
This commit is contained in:
parent
a1c2ca7d06
commit
ac621f63aa
@ -29,54 +29,8 @@ class Género:
|
|||||||
|
|
||||||
|
|
||||||
def split_por_genero(nombres):
|
def split_por_genero(nombres):
|
||||||
no_clasificados = set()
|
# TODO: reimplementar usando datos de España de género asignado
|
||||||
# Veamos cuales de estos nombres ya están clasificados
|
return {"f": nombres, "m": nombres}
|
||||||
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}
|
|
||||||
|
|
||||||
|
|
||||||
def handle(req):
|
def handle(req):
|
||||||
@ -92,7 +46,6 @@ def handle(req):
|
|||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
data = loads(req)
|
data = loads(req)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
@ -107,11 +60,11 @@ def handle(req):
|
|||||||
año = None
|
año = None
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
prefijo = genero = año = None
|
prefijo = genero = año = None
|
||||||
|
return f"{req} -- {e}", 400
|
||||||
|
|
||||||
if prefijo is not None:
|
if prefijo is not None:
|
||||||
prefijo = prefijo.strip().lower()
|
prefijo = prefijo.strip().lower()
|
||||||
|
|
||||||
|
|
||||||
if genero not in ("f", "m"):
|
if genero not in ("f", "m"):
|
||||||
genero = None
|
genero = None
|
||||||
|
|
||||||
@ -126,7 +79,7 @@ def handle(req):
|
|||||||
cursor.execute(sql)
|
cursor.execute(sql)
|
||||||
datos = [(r["total"], r["nombre"]) for r in cursor.fetchall()]
|
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:
|
with connection.cursor() as cursor:
|
||||||
sql = """
|
sql = """
|
||||||
SELECT contador, nombre
|
SELECT contador, nombre
|
||||||
@ -136,21 +89,21 @@ def handle(req):
|
|||||||
ORDER BY contador DESC
|
ORDER BY contador DESC
|
||||||
LIMIT 50
|
LIMIT 50
|
||||||
"""
|
"""
|
||||||
cursor.execute(sql, {'anio': año})
|
cursor.execute(sql, {"anio": año})
|
||||||
datos = [(r["contador"], r["nombre"]) for r in cursor.fetchall()]
|
datos = [(r["contador"], r["nombre"]) for r in cursor.fetchall()]
|
||||||
|
|
||||||
elif prefijo is not None and año is None:
|
elif prefijo is not None and año is None:
|
||||||
with connection.cursor() as cursor:
|
with connection.cursor() as cursor:
|
||||||
sql = """
|
sql = """
|
||||||
SELECT contador, nombre
|
SELECT total, nombre
|
||||||
FROM nombres
|
FROM totales
|
||||||
WHERE
|
WHERE
|
||||||
nombre LIKE :nombre
|
nombre LIKE :nombre
|
||||||
ORDER BY contador DESC
|
ORDER BY total DESC
|
||||||
LIMIT 50
|
LIMIT 50
|
||||||
"""
|
"""
|
||||||
cursor.execute(sql, {"nombre": "{prefijo}%"})
|
cursor.execute(sql, {"nombre": f"{prefijo}%"})
|
||||||
datos = [(r["contador"], r["nombre"]) for r in cursor.fetchall()]
|
datos = [(r["total"], r["nombre"]) for r in cursor.fetchall()]
|
||||||
else:
|
else:
|
||||||
with connection.cursor() as cursor:
|
with connection.cursor() as cursor:
|
||||||
sql = """
|
sql = """
|
||||||
@ -162,7 +115,7 @@ def handle(req):
|
|||||||
ORDER BY contador DESC
|
ORDER BY contador DESC
|
||||||
LIMIT 50
|
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()]
|
datos = [(r["contador"], r["nombre"]) for r in cursor.fetchall()]
|
||||||
|
|
||||||
if genero:
|
if genero:
|
||||||
@ -180,4 +133,8 @@ def handle(req):
|
|||||||
chart.title = "¡No esssistís!"
|
chart.title = "¡No esssistís!"
|
||||||
chart.add("", [contador for contador, _ in datos[::-1]])
|
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"},
|
||||||
|
)
|
||||||
|
Loading…
Reference in New Issue
Block a user