Skip to content

Conversation

@Sulimator
Copy link

Sumario de cambios

Este es un nuevo step de la pipeline de ALeRCE que está configurado con un servicio dummy (a ser reemplazado por información de DELIGHT) sobre los objetos que cumplan determinadas restricciones sobre las probabilidades retornadas por un clasificador automático. El nombre del step es delight_step.

El paso a seguir es utilizar el servicio externo de DELIGHT que implementará Diego León para retornar las coordenadas de la galaxia progenitora, tamaño de galaxia y cálculo de dispersión dentro del nuevo step. Por mientras, estos parámetros son utilizados con un placeholder para que funcione el step.

Observaciones generales

Faltan los test de integración

Documentación del nuevo step

Dummy_client

Definición de la estructura de entrada: Se describe la estructura del archivo JSON de entrada. Incluye campos como coordinates, filter, calc_dispertion y calc_galaxy_size.

Función delight_processing: Punto de entrada principal. Toma un diccionario como entrada (input_json) y extrae la información relevante, como las coordenadas y las indicaciones para calcular la dispersión y el tamaño de la galaxia.

Función process_data: Esta función procesa las coordenadas de entrada. Itera sobre cada conjunto de coordenadas, extrayendo el OID (identificador del objeto), la ascensión recta (RA) y la declinación (DEC). Luego, calcula la RA y DEC de la galaxia utilizando la función get_galaxy_coordinates. Además, si se establecen las banderas calc_dispersion o calc_galaxy_size, calcula la dispersión y el tamaño de la galaxia respectivamente. Devuelve una lista de diccionarios con las coordenadas procesadas y los resultados de los cálculos.

Funciones de cálculo (calculate_dispersion, calculate_galaxy_size, get_galaxy_coordinates): Estas funciones realizan cálculos específicos. Por ejemplo, calculate_dispersion calcula la dispersión de las coordenadas dadas, calculate_galaxy_size calcula el tamaño de la galaxia, y get_galaxy_coordinates obtiene las coordenadas de la galaxia.

Database_sql

Importaciones: El script importa varios módulos necesarios, incluidos contextlib, typing, create_engine, select, and_, sessionmaker, Session de SQLAlchemy, así como modelos específicos de una base de datos SQL y el módulo Probability.

Clase PSQLConnection: Esta clase se encarga de establecer la conexión con la base de datos PostgreSQL. Toma un diccionario de configuración que incluye detalles como el nombre de usuario, contraseña, host, puerto y nombre de la base de datos. Utiliza esta información para construir la URL de conexión a la base de datos.

Función default_parser: Esta función es un analizador de datos que devuelve los datos sin modificar.

Función only_unique_oid_parser: Esta función es un analizador de datos que toma una lista de datos y devuelve una lista de OIDs únicos. Utiliza un conjunto para eliminar duplicados y luego convierte el conjunto de nuevo en una lista.

Función get_sql_probabily: Esta función realiza consultas a la base de datos para recuperar probabilidades asociadas con una lista de OIDs. Toma como entrada la lista de OIDs, la conexión a la base de datos, un filtro de probabilidad opcional y un analizador de datos. Dentro del bloque with, utiliza la sesión de la base de datos para ejecutar una consulta SQL utilizando SQLAlchemy. Si no se proporciona ningún filtro de probabilidad, simplemente devuelve la lista de OIDs sin procesar. De lo contrario, ejecuta una consulta para recuperar las probabilidades que coinciden con los criterios del filtro. Luego pasa los resultados al analizador de datos especificado y devuelve el resultado procesado.

Step

Importaciones: El script importa varios tipos de datos (Dict, List, Tuple) y otras clases y funciones necesarias de otros módulos, como GenericStep, dummy_processing de delight_step.clients, PSQLConnection, get_sql_probabily y only_unique_oid_parser de delight_step.database_sql.

Clase DelightStep: Esta clase es la pieza central del script. Toma como argumentos una configuración opcional y un cliente de base de datos opcional. Si no se proporciona ningún cliente de base de datos, crea uno utilizando la configuración proporcionada. También extrae la configuración específica de Delight, como la información del filtro y las indicaciones sobre si calcular el tamaño de la galaxia y la dispersión.

Método execute: Este método se encarga de ejecutar la lógica principal del step. Toma una lista de mensajes como entrada, que contienen información sobre objetos astronómicos. Primero, extrae los OIDs de estos mensajes. Luego, realiza una consulta a la base de datos para filtrar estos OIDs utilizando la función get_sql_probabily. Después, construye una lista de coordenadas utilizando los mensajes filtrados y la información de los OIDs. Luego, crea un diccionario que representa la entrada para el procesamiento de Delight y utiliza una función llamada dummy_processing para procesar estos datos.

Método parse_output: Este método se encarga de analizar y dar formato a los resultados del procesamiento de Delight. Itera sobre los mensajes de entrada y encuentra los datos de Delight correspondientes a cada OID. Luego, construye un diccionario de salida que contiene información sobre el objeto astronómico, incluyendo las propiedades de la galaxia calculadas por Delight.

Settings

Importaciones: El archivo importa el módulo os para interactuar con variables de entorno y obtener rutas de archivos.

Rutas de esquema: Define las rutas a los archivos de esquema utilizados por el sistema. Estas rutas se construyen utilizando la función os.path.join().

Configuración del consumidor: Define la configuración para el consumidor del sistema, incluyendo detalles como el tipo de clase, la ruta del esquema, los parámetros de conexión e implicaciones del consumidor.

Configuración del productor: Define la configuración para el productor del sistema, incluyendo detalles como el tipo de clase, el tema al que el productor enviará mensajes y los parámetros de conexión.

Configuración de Delight: Define la configuración específica de Delight, incluyendo detalles como el filtro a aplicar, si calcular la dispersión y el tamaño de la galaxia.

Configuración del productor de Scribe: Define la configuración para el productor de Scribe, que se utiliza para enviar datos a un sistema de registro.

Configuración de métricas: Define la configuración para la generación de métricas, incluyendo detalles como el tipo de clase, las métricas adicionales a generar y los parámetros de conexión.

Configuración de PostgreSQL: Define la configuración para la conexión a la base de datos PostgreSQL, incluyendo detalles como el tipo de motor, el host, el usuario, la contraseña, el puerto y el nombre de la base de datos.

Configuraciones adicionales: Define configuraciones adicionales basadas en variables de entorno, como configuraciones de seguridad para la autenticación SASL_SSL en Kafka.

Configuración del step: Agrupa todas las configuraciones anteriores en un diccionario llamado STEP_CONFIG.

Test_delight_client

Importaciones: El archivo importa el módulo unittest para realizar las pruebas y mock para simular objetos o funciones en las pruebas.

Importación de la función a probar: Importa la función delight_processing desde el módulo dummy_client de delight_step.clients. Esta es la función que se probará.

Definición de la clase de prueba: Se define una clase de prueba llamada DelightProcessingTest, que hereda de unittest.TestCase. Cada método dentro de esta clase es una prueba individual.

Datos de prueba: Se define un diccionario de ejemplo sample_input_json, que simula la entrada JSON que se proporcionaría a la función delight_processing durante la prueba.

Método de prueba test_delight_processing: Este método prueba la función delight_processing. Primero, llama a la función con los datos de prueba y almacena el resultado. Luego, verifica si el resultado es una lista y si cada elemento en la lista es un diccionario con las claves esperadas (oid, ra, dec, ra_gal, dec_gal, dispersion, galaxy_size). Finalmente, verifica si los valores de dispersión y tamaño de galaxia no son nulos para cada coordenada.

Test_step

Importaciones: El archivo importa los módulos necesarios, incluyendo unittest para realizar pruebas y mock para simular objetos o funciones en las pruebas.

Configuración de consumidor, productor y otros componentes: Define configuraciones de ejemplo para el consumidor, productor, productor de Scribe y métricas.

Clase de prueba DelightStepTestCase: Define una clase de prueba que hereda de unittest.TestCase. Esta clase contiene varios métodos de prueba para probar diferentes aspectos de la clase DelightStep.

Método set_up_step: Un método para configurar una instancia de DelightStep con una configuración dada y un cliente de base de datos simulado.

Método get_step_config: Un método para obtener la configuración del step, que combina las configuraciones predefinidas con la configuración específica de Delight.

Método get_get_sql_probabily_mock: Un método para obtener un cliente de la base de datos simulado con un comportamiento definido para la función get_sql_probabily.

Método de prueba test_step: Un método de prueba que verifica el comportamiento de DelightStep.execute() cuando se da una lista de mensajes de entrada válidos. Se prueba si el resultado tiene la estructura esperada y si las propiedades de la galaxia están presentes para cada mensaje.

Método de prueba test_step_empty: Un método de prueba similar a test_step, pero simula una situación en la que la consulta a la base de datos devuelve una lista vacía de OID. Verifica que las propiedades de la galaxia no estén en el resultado para cada mensaje.

Método de prueba test_step_partial: Un método de prueba similar a test_step, pero simula una situación en la que la consulta a la base de datos devuelve solo una parte de los OID de entrada. Verifica que las propiedades de la galaxia estén presentes solo para los mensajes correspondientes a los OID devueltos.

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

Successfully merging this pull request may close these issues.

1 participant