Agregado el directorio delight_step con los cambios realizados #392
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
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 banderascalc_dispersionocalc_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_dispersioncalcula la dispersión de las coordenadas dadas,calculate_galaxy_sizecalcula el tamaño de la galaxia, yget_galaxy_coordinatesobtiene las coordenadas de la galaxia.Database_sql
Importaciones: El script importa varios módulos necesarios, incluidos
contextlib,typing,create_engine,select,and_,sessionmaker,Sessionde SQLAlchemy, así como modelos específicos de una base de datos SQL y el móduloProbability.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, comoGenericStep,dummy_processingdedelight_step.clients,PSQLConnection,get_sql_probabilyyonly_unique_oid_parserdedelight_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 llamadadummy_processingpara 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
ospara 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
unittestpara realizar las pruebas ymockpara simular objetos o funciones en las pruebas.Importación de la función a probar: Importa la función
delight_processingdesde el módulodummy_clientdedelight_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 deunittest.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óndelight_processingdurante la prueba.Método de prueba
test_delight_processing: Este método prueba la funcióndelight_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
unittestpara realizar pruebas ymockpara 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 deunittest.TestCase. Esta clase contiene varios métodos de prueba para probar diferentes aspectos de la claseDelightStep.Método
set_up_step: Un método para configurar una instancia deDelightStepcon 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ónget_sql_probabily.Método de prueba
test_step: Un método de prueba que verifica el comportamiento deDelightStep.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 atest_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 atest_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.