from datetime import date from sqlalchemy import select, func, literal, text, cast, CTE from sqlalchemy.dialects.postgresql import TIMESTAMP def generate_date_range(date_from: date, date_to: date, additional_columns: list[str]) -> CTE: cols = [literal(0).label(col_label) for col_label in additional_columns] return select( cast( func.generate_series( date_from, date_to, text("'1 day'") ), TIMESTAMP(timezone=False) ).label("date"), *cols, ).cte()