datosgobar / data-cleaner

Librería en python para para limpieza de datos, según estándares del Equipo de Datos Argentina.
http://data-cleaner.readthedocs.io/
MIT License
30 stars 12 forks source link

Separar archivo principal data_cleaner.py #67

Open iheredia opened 5 years ago

iheredia commented 5 years ago

Actuamente data_cleaner/data_cleaner.py superó las mil lineas de código. Creo que podria dividirse en varios archivos para mejorar el mantenimiento del repo y la incorporación de nuevas reglas. La clase DataCleaner tiene metodos helpers que pueden extraerse a archivos independientes. Ademas, creo que lo ideal seria tener alguna carpeta de rules con archivos individuales por cada regla (algo onda data_cleaner/rules/*.py) Creo que tambien ayudaria a #12 si la separación se encara en conjunto.

abenassi commented 5 years ago

@iheredia de este lado me parece bien la propuesta de refactor. Es cierto que el proyecto creció mucho ya. Hoy en otros proyectos (pydatajson) usamos bastante el approach de que el método está desarrollado en un módulo aparte y que en el módulo core.py está la clase principal que simplemente los usa.

class DataJson(dict):
    """Objeto que representa un catálogo de activos de datos."""

    # Variables por default
    CATALOG_FIELDS_PATH = os.path.join(ABSOLUTE_PROJECT_DIR, "fields")

    def __init__(self, catalog=None, schema_filename=None, schema_dir=None,
                 default_values=None, catalog_format=None):

        (........)

    # metodos para buscar entidades cuando DataJson tiene catalogo cargado
    get_themes = search.get_themes
    themes = property(get_themes)
    get_datasets = search.get_datasets
    datasets = property(get_datasets)
    get_distributions = search.get_distributions
    distributions = property(get_distributions)
    get_fields = search.get_fields
    fields = property(get_fields)
    get_time_series = search.get_time_series
    time_series = property(get_time_series)
    get_dataset = search.get_dataset
    get_distribution = search.get_distribution
    get_field = search.get_field
    get_theme = search.get_theme
    get_field_location = search.get_field_location
    get_catalog_metadata = search.get_catalog_metadata

    # metodos para realizar operaciones de transformación de metadatos
    generate_distribution_ids = transformation.generate_distribution_ids

    # metodos para guardar el catálogo en otros formatos
    to_xlsx = writers.write_xlsx_catalog
    to_json = writers.write_json_catalog

    # metodos para generar indicadores
    generate_indicators = indicators.generate_indicators

    # metodos para hacer backups
    make_catalog_backup = backup.make_catalog_backup

    # Metodos para interactuar con un portal de CKAN
    push_dataset_to_ckan = federation.push_dataset_to_ckan
    harvest_dataset_to_ckan = federation.harvest_dataset_to_ckan
    restore_dataset_to_ckan = federation.restore_dataset_to_ckan
    harvest_catalog_to_ckan = federation.harvest_catalog_to_ckan
    restore_catalog_to_ckan = federation.restore_catalog_to_ckan
    push_theme_to_ckan = federation.push_theme_to_ckan
    push_new_themes = federation.push_new_themes
    remove_harvested_ds_from_ckan = federation.remove_harvested_ds_from_ckan

Si abrís un nuevo branch y lo encarás,

iheredia commented 5 years ago

Te quedó el comentario por la mitad? Terminó cortado

Nunca me metí dentro de la implementación de pydatajson. Voy a chequearlo para tomar inspiración de ahi

abenassi commented 5 years ago

Mmmm ya no me acuerdo con qué seguiría esa frase, pero me parece que lo importante está dicho :-)