Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Separar archivo principal data_cleaner.py #67

Open
iheredia opened this issue Apr 3, 2019 · 3 comments
Open

Separar archivo principal data_cleaner.py #67

iheredia opened this issue Apr 3, 2019 · 3 comments

Comments

@iheredia
Copy link
Contributor

iheredia commented Apr 3, 2019

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
Copy link
Collaborator

abenassi commented Apr 3, 2019

@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
Copy link
Contributor Author

iheredia commented Apr 4, 2019

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
Copy link
Collaborator

abenassi commented Apr 5, 2019

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants