import csv from datetime import datetime import io import os from flask import Blueprint, render_template, request from loguru import logger from app.models.collection import Collection from app.extensions import db collections = Blueprint("collections", __name__, url_prefix="/collections", template_folder="templates") @collections.route('/', methods=["POST"]) def create_collection(): data = request.form name = data.get('collection_name') if not name: return render_template('collections/create_form.j2', collections_error='Введите название базы!') if Collection.exists(name): return render_template('collections/create_form.j2', collections_error='База уже существует!') swap = 'afterbegin' if len(Collection.query.all()) > 0 else 'innerHTML' collection = Collection(name=name) db.session.add(collection) db.session.commit() return f"", 200, {'Hx-Reswap': swap, 'HX-Retarget': '#collection-select'} @collections.route("/", methods=["DELETE"]) def delete_collection(id: int): collection: Collection = Collection.query.get_or_404(id) length = len(Collection.query.all()) - 1 db.session.delete(collection) db.session.commit() if length <= 0: return "Здесь ничего нет", 200 return "", 200 @collections.route("//csv", methods=["GET"]) def export_users_to_csv(id: int): collection: Collection = Collection.query.get_or_404(id) if len(collection.users) <= 0: return "", 204 filename = f"{collection.name} - {datetime.now()}.csv" fieldnames = collection.users[0].to_dict().keys() si = io.StringIO() writer = csv.DictWriter(si, fieldnames) writer.writeheader() writer.writerows(map(lambda user: user.to_dict(), collection.users)) return si, 200, {'Content-Disposition': f'attachment; filename={filename}', 'Content-type': 'text/csv; charset=utf-8'}