| 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", | |
| ) | |