20 lines
572 B
Python
20 lines
572 B
Python
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()
|