Open iheredia opened 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,
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
Mmmm ya no me acuerdo con qué seguiría esa frase, pero me parece que lo importante está dicho :-)
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 claseDataCleaner
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 ondadata_cleaner/rules/*.py
) Creo que tambien ayudaria a #12 si la separación se encara en conjunto.