# Path: tinamit/config.py
# class OpsConfig(object):
# class Config(OpsConfig):
# class Trads(object):
#     def __init__(símismo, pariente, valores=None):
#     def a_dic(símismo):
#     def borrar(símismo, llave):
#     def guardar(símismo):
#     def __contains__(símismo, itema):
#     def __getitem__(símismo, itema):
#     def __setitem__(símismo, llave, valor):
#     def __init__(símismo, archivo, auto=None):
#     def reinic(símismo):
#     def borrar(símismo, llave):
#     def guardar(símismo):
#     def __setitem__(símismo, llave, valor):
#     def __init__(símismo, dir_local):
#     def idioma(símismo):
#     def auxiliares(símismo):
#     def cambiar_idioma(símismo, idioma):
#     def cambiar_aux(símismo, aux):
#     def trad(símismo, texto):
#     def _regen_trads(símismo):
#     AUX = 'aux'
#     PRINC = 'principal'
#     DOMINIO = 'leng'
# 
# Path: tinamit/cositas.py
# def detectar_codif(archivo, máx_líneas=None, cortar=None, cert=0.95, auto='utf-8'):
#     """
#     Detecta la codificación de un fuente. (Necesario porque todavía existen programas dinosaurios que no entienden
#     los milagros de unicódigo.)
# 
#     Parameters
#     ----------
#     archivo : str
#         La dirección del fuente.
#     máx_líneas : int
#         El número máximo de líneas para pasar al detector. Por ejemplo, si únicamente la primera línea de tu documento
#         tiene palabras (por ejemplo, un fuente .csv), no hay razón de seguir analizando las otras líneas.
#     cortar : str
#         Hasta dónde hay que leer cada línea. Es útil si tienes un csv donde únicamente la primera columna
#         contiene texto.
# 
#     Returns
#     -------
#     str
#         La codificación más probable.
# 
#     """
# 
#     detector = UniversalDetector()
#     with open(archivo, 'rb') as d:
#         for í, línea in enumerate(d.readlines()):
# 
#             if cortar is None or cortar.encode() not in línea:
#                 detector.feed(línea)  # Pasar la próxima línea al detector
#             else:
#                 detector.feed(línea.split(cortar.encode())[0])
# 
#             # Parar si alcanzamos el máximo de líneas
#             if máx_líneas is not None and í >= (máx_líneas - 1):
#                 break
# 
#             if detector.done:
#                 break  # Para si el detector ya está seguro
# 
#     detector.close()  # Cerrar el detector
#     if detector.result['confidence'] > cert:
#         return detector.result['encoding']
#     return auto


import csv
import os
from collections import OrderedDict
from tinamit.config import _
from tinamit.cositas import detectar_codif
    Cada fila representa un lugar, con su **nombre** en la columna correspondiendo al nivel de este lugar y
    el **código** del lugar pariente en las otras columnas. Si un nivel no se aplica a un lugar (por ejemplo,
    un departamento no tendrá municipio pariente), se deja vacía la célula.

    Parameters
    ----------
    archivo: str
        El archivo ``.csv``.
    nivel_base: str
        El el nivel más alto. Por ejemplo, si tu csv entero representa un país, sería ``país``.
    nombre: str
        El nombre del lugar correspondiendo al nivel más alto. Por ejemplo, "Guatemala".
    col_cód: str
        El nombre de la columna con los códigos de cada sublugar.

    Returns
    -------
    Lugar
    """
    codif_csv = detectar_codif(archivo)
    nombre = nombre or os.path.splitext(os.path.split(nombre)[1])[0]

    with open(archivo, newline='', encoding=codif_csv) as d:

        lc = csv.DictReader(d)  # El lector de csv

        # Guardar la primera fila como nombres de columnas
        cols = [x.strip() for x in lc.fieldnames]

        if col_cód not in cols:

# Path: tinamit/config.py
# class OpsConfig(object):
# class Config(OpsConfig):
# class Trads(object):
#     def __init__(símismo, pariente, valores=None):
#     def a_dic(símismo):
#     def borrar(símismo, llave):
#     def guardar(símismo):
#     def __contains__(símismo, itema):
#     def __getitem__(símismo, itema):
#     def __setitem__(símismo, llave, valor):
#     def __init__(símismo, archivo, auto=None):
#     def reinic(símismo):
#     def borrar(símismo, llave):
#     def guardar(símismo):
#     def __setitem__(símismo, llave, valor):
#     def __init__(símismo, dir_local):
#     def idioma(símismo):
#     def auxiliares(símismo):
#     def cambiar_idioma(símismo, idioma):
#     def cambiar_aux(símismo, aux):
#     def trad(símismo, texto):
#     def _regen_trads(símismo):
#     AUX = 'aux'
#     PRINC = 'principal'
#     DOMINIO = 'leng'
# 
# Path: tinamit/cositas.py
# def detectar_codif(archivo, máx_líneas=None, cortar=None, cert=0.95, auto='utf-8'):
#     """
#     Detecta la codificación de un fuente. (Necesario porque todavía existen programas dinosaurios que no entienden
#     los milagros de unicódigo.)
# 
#     Parameters
#     ----------
#     archivo : str
#         La dirección del fuente.
#     máx_líneas : int
#         El número máximo de líneas para pasar al detector. Por ejemplo, si únicamente la primera línea de tu documento
#         tiene palabras (por ejemplo, un fuente .csv), no hay razón de seguir analizando las otras líneas.
#     cortar : str
#         Hasta dónde hay que leer cada línea. Es útil si tienes un csv donde únicamente la primera columna
#         contiene texto.
# 
#     Returns
#     -------
#     str
#         La codificación más probable.
# 
#     """
# 
#     detector = UniversalDetector()
#     with open(archivo, 'rb') as d:
#         for í, línea in enumerate(d.readlines()):
# 
#             if cortar is None or cortar.encode() not in línea:
#                 detector.feed(línea)  # Pasar la próxima línea al detector
#             else:
#                 detector.feed(línea.split(cortar.encode())[0])
# 
#             # Parar si alcanzamos el máximo de líneas
#             if máx_líneas is not None and í >= (máx_líneas - 1):
#                 break
# 
#             if detector.done:
#                 break  # Para si el detector ya está seguro
# 
#     detector.close()  # Cerrar el detector
#     if detector.result['confidence'] > cert:
#         return detector.result['encoding']
#     return auto


# Path: tinamit/geog/región.py
import csv
import os
from collections import OrderedDict
from tinamit.config import _
from tinamit.cositas import detectar_codif

    Cada fila representa un lugar, con su **nombre** en la columna correspondiendo al nivel de este lugar y
    el **código** del lugar pariente en las otras columnas. Si un nivel no se aplica a un lugar (por ejemplo,
    un departamento no tendrá municipio pariente), se deja vacía la célula.

    Parameters
    ----------
    archivo: str
        El archivo ``.csv``.
    nivel_base: str
        El el nivel más alto. Por ejemplo, si tu csv entero representa un país, sería ``país``.
    nombre: str
        El nombre del lugar correspondiendo al nivel más alto. Por ejemplo, "Guatemala".
    col_cód: str
        El nombre de la columna con los códigos de cada sublugar.

    Returns
    -------
    Lugar
    """
    codif_csv = detectar_codif(archivo)
    nombre = nombre or os.path.splitext(os.path.split(nombre)[1])[0]

    with open(archivo, newline='', encoding=codif_csv) as d:

        lc = csv.DictReader(d)  # El lector de csv

        # Guardar la primera fila como nombres de columnas
        cols = [x.strip() for x in lc.fieldnames]

        if col_cód not in cols:

            raise ValueError(_(