azils3's picture
Upload 63 files
16bfc87 verified
raw
history blame contribute delete
845 Bytes
import io
import csv
from datetime import datetime
from django.db.models import QuerySet
from typing import Dict
def _get_csv_from_qs_values(queryset: QuerySet[Dict], filename: str = 'users'):
keys = queryset[0].keys()
# csv module can write data in io.StringIO buffer only
s = io.StringIO()
dict_writer = csv.DictWriter(s, fieldnames=keys)
dict_writer.writeheader()
dict_writer.writerows(queryset)
s.seek(0)
# python-telegram-bot library can send files only from io.BytesIO buffer
# we need to convert StringIO to BytesIO
buf = io.BytesIO()
# extract csv-string, convert it to bytes and write to buffer
buf.write(s.getvalue().encode())
buf.seek(0)
# set a filename with file's extension
buf.name = f"{filename}__{datetime.now().strftime('%Y.%m.%d.%H.%M')}.csv"
return buf