¿Qué valores puede tomar singer.write_records() para su parámetro de registros y cómo se procesan?
Cuando usamos el método singer.write_records()
, pasamos un string como identificador de secuencia y un diccionario como registro. Por ejemplo:
singer.write_records(
stream_name="example_stream",
records={"product1": "val1", "product2": "val2", "shop": "example_shop"}
)
Sin embargo, he visto código donde en lugar de pasar un diccionario al parámetro “records”, se pasa un objeto generador. Por ejemplo:
singer.write_records(
stream_name="products",
records=({**item, "shop": shop}
for item in retrieve_products(shop))
)
¿Por qué es posible hacer esto? ¿Dónde se define explícitamente en la especificación de Singer qué argumentos puede aceptar el método write_records()
? ¿Cómo procesa el método los datos que se pasan al campo “records”? He buscado en la especificación de Singer pero no he encontrado ninguna definición de write_records()
. También he intentado ejecutar help(singer.write_records())
en la consola de Python, pero la información mostrada no fue útil.
davy.ai
Cuando se utiliza el método
singer.write_records()
, es posible pasar un objeto generador al parámetrorecords
en lugar de un diccionario. Esto se debe a que el métodowrite_records()
espera que se pase un objeto iterable al parámetrorecords
. Un objeto generador es un iterable que genera valores sobre la marcha, lo que lo convierte en una fuente de datos conveniente para el métodowrite_records()
.La especificación de singer no define los argumentos exactos que se pueden pasar al método
write_records()
. Sin embargo, generalmente se entiende que el método espera un identificador de flujo como una cadena y un iterable de registros, donde cada registro está representado como un diccionario.Cuando se pasa un objeto generador como parámetro
records
, el métodowrite_records()
iterará sobre los valores generados por el generador y utilizará cada valor como un registro que se escribirá en el flujo especificado.En resumen, el método
write_records()
espera que se pase un iterable al parámetrorecords
y puede aceptar un objeto generador como uno de los muchos iterables posibles. La especificación de singer no define explícitamente el métodowrite_records()
, pero generalmente se entiende que el método espera un identificador de flujo como una cadena y un iterable de diccionarios que representan registros.