from __future__ import annotations import csv import io from datetime import datetime, timezone from aiogram.types import BufferedInputFile from bot.database.models import UserModel async def convert_users_to_csv(users: list[UserModel]) -> BufferedInputFile: """Export all users in csv file.""" columns = UserModel.__table__.columns data = [[getattr(user, column.name) for column in columns] for user in users] s = io.StringIO() csv.writer(s).writerow(columns) csv.writer(s).writerows(data) s.seek(0) return BufferedInputFile( file=s.getvalue().encode("utf-8"), filename=f"users_{datetime.now(timezone.utc).strftime('%Y.%m.%d_%H.%M')}.csv", )