exporting csv and video working

This commit is contained in:
Jan Dickmann 2024-06-25 14:51:04 +02:00
parent d5bfe8f360
commit 5d27caf107
8 changed files with 65 additions and 21 deletions

View File

@ -2,7 +2,7 @@ import sys
import json
import random
import base64
from flask import Flask, redirect, url_for, request, session, make_response, jsonify, send_from_directory
from flask import Flask, redirect, url_for, request, session, make_response, jsonify, send_file
from flask import render_template
from flask_sqlalchemy import SQLAlchemy
from sqlalchemy import Integer, String, Column, Float
@ -14,6 +14,7 @@ from sqlalchemy.orm import DeclarativeBase
from flask_wtf.csrf import CSRFProtect
import os
import csv
from zipfile import ZipFile
random_order = True
# activate environment: cd C:\Users\Jan\Google Drive\Master Stuff\Code\SLAEForms Testing\.venv\Scripts\
@ -388,13 +389,50 @@ def update_session():
# Database stuff------------------------------------------------------------------------------
def create_csv(model, filename):
def zipdir(path, ziph):
# ziph is zipfile handle
for root, dirs, files in os.walk(path):
for file in files:
ziph.write(os.path.join(root, file),
os.path.relpath(os.path.join(root, file),
os.path.join(path, '..')))
#create all csvs
def create_all_csvs():
meta = db.metadata
tables = meta.tables.keys()
for table_name in tables:
create_csv(meta.tables[table_name], table_name)
# export CSV
@app.route("/export_all_tables")
def export_all_tables():
create_all_csvs()
with ZipFile('zip_exports/all_tables.zip', 'w') as zipf: #no compression, need to add zipfile.ZIP_DEFLATED for compression
zipdir('exports/', zipf)
return send_file("zip_exports/all_tables.zip", as_attachment=False, download_name="all_tables.zip")
# export CSV
@app.route("/export_all_videos")
def export_all_videos():
with ZipFile('zip_exports/all_videos.zip', 'w') as zipf: #no compression, need to add zipfile.ZIP_DEFLATED for compression
zipdir('uploads/', zipf)
return send_file("zip_exports/all_videos.zip", as_attachment=False, download_name="all_tables.zip")
def create_csv(table, filename):
filename = filename + ".csv"
# Query all data from the table
data = db.session.query(model).all()
data = db.session.query(table).all()
# Get the column names from the model
column_names = [column.name for column in model.__table__.columns]
column_names = [column.name for column in table.columns]
# Open a CSV file and write data
path = os.path.join(EXPORT_FOLDER, filename)
@ -406,25 +444,15 @@ def create_csv(model, filename):
# export CSV
@app.route("/export_csv")
def export_csv():
@app.route("/export_csv/<table_name>")
def export_csv(table_name):
create_csv(User, "usertable")
"""
meta = db.metadata
tables = meta.tables.keys()
print("tables: ",tables)
print("testquerys:")
qtable = meta.tables["default_demographic_test"]
query1 = select(qtable).where(qtable.c.alter == 78)
print("Query 1: ", query1)
print("Query 1 result: ")
result = db.session.execute(query1)
print("Columns: ", result.columns)
for row in result:
print(row)
"""
try:
create_csv(meta.tables[table_name], table_name)
except Exception as e:
return f'Error occurred: {str(e)}', 500
return redirect("/")

View File

@ -5,6 +5,10 @@ https://jamesalvarez.co.uk/blog/how-to-make-responsive-likert-scales-in-css-(lik
# Rootpage that shows all defined routes
https://stackoverflow.com/questions/13317536/get-list-of-all-routes-defined-in-the-flask-app
# Zip file of whole directory
https://stackoverflow.com/questions/1855095/how-to-create-a-zip-archive-of-a-directory
Licenses:

View File

@ -0,0 +1,4 @@
id,user_id,date_created,stimulus_name,likertscale,text_feedback
e27365db-7e5a-443b-b6e5-996774baf359,662dc5a5-ff08-4270-ad33-444e8dd01514,2024-06-25 12:01:55.709616,"('video_3', 'video_3')",3,
9e880318-bc66-410e-bac8-d70adbf98de6,662dc5a5-ff08-4270-ad33-444e8dd01514,2024-06-25 12:01:59.317487,video_3,2,
d147ad99-d41e-48a2-91ee-d5610438e862,662dc5a5-ff08-4270-ad33-444e8dd01514,2024-06-25 12:02:01.661348,video_2,5,
1 id user_id date_created stimulus_name likertscale text_feedback
2 e27365db-7e5a-443b-b6e5-996774baf359 662dc5a5-ff08-4270-ad33-444e8dd01514 2024-06-25 12:01:55.709616 ('video_3', 'video_3') 3
3 9e880318-bc66-410e-bac8-d70adbf98de6 662dc5a5-ff08-4270-ad33-444e8dd01514 2024-06-25 12:01:59.317487 video_3 2
4 d147ad99-d41e-48a2-91ee-d5610438e862 662dc5a5-ff08-4270-ad33-444e8dd01514 2024-06-25 12:02:01.661348 video_2 5

View File

@ -0,0 +1,2 @@
id,user_id,date_created,stimulus_name,alter,geschlecht,hoerstatus,bevorzugte_kommunikation,gebärdenzeitraum,gebärdensprachkompetenz
024e75ae-c5b7-4594-8095-b9f360df9d0c,662dc5a5-ff08-4270-ad33-444e8dd01514,2024-06-25 12:01:47.038602,"('video_3', 'video_3')",27,Männlich,Hörend,Gesprochene Sprache,4.0,1
1 id user_id date_created stimulus_name alter geschlecht hoerstatus bevorzugte_kommunikation gebärdenzeitraum gebärdensprachkompetenz
2 024e75ae-c5b7-4594-8095-b9f360df9d0c 662dc5a5-ff08-4270-ad33-444e8dd01514 2024-06-25 12:01:47.038602 ('video_3', 'video_3') 27 Männlich Hörend Gesprochene Sprache 4.0 1

View File

@ -0,0 +1,4 @@
id,user_id,date_created,stimulus_name,likertscale
c317333a-e930-4a3a-93e4-5e213df2d2e6,662dc5a5-ff08-4270-ad33-444e8dd01514,2024-06-25 12:01:28.132611,"('video_1', 'video_1')",1
860d97ef-4855-4995-9ff3-88177ab494af,662dc5a5-ff08-4270-ad33-444e8dd01514,2024-06-25 12:01:30.220347,"('video_2', 'video_2')",3
b59c4adb-b730-404a-9d0b-b5630e4f445b,662dc5a5-ff08-4270-ad33-444e8dd01514,2024-06-25 12:01:36.894157,"('video_3', 'video_3')",2
1 id user_id date_created stimulus_name likertscale
2 c317333a-e930-4a3a-93e4-5e213df2d2e6 662dc5a5-ff08-4270-ad33-444e8dd01514 2024-06-25 12:01:28.132611 ('video_1', 'video_1') 1
3 860d97ef-4855-4995-9ff3-88177ab494af 662dc5a5-ff08-4270-ad33-444e8dd01514 2024-06-25 12:01:30.220347 ('video_2', 'video_2') 3
4 b59c4adb-b730-404a-9d0b-b5630e4f445b 662dc5a5-ff08-4270-ad33-444e8dd01514 2024-06-25 12:01:36.894157 ('video_3', 'video_3') 2

View File

@ -0,0 +1,2 @@
user_id,device_id,question_order,date_created
662dc5a5-ff08-4270-ad33-444e8dd01514,50bc84f6-6c55-4277-9651-5c3c98e973f5,"{'Block 0': [('video_1', 'video_1'), ('video_2', 'video_2'), ('video_3', 'video_3')], 'Block 1': ['empty_stimulus'], 'Block 2': ['video_1', 'video_3', 'video_2']}",2024-06-25 12:01:22.516505
1 user_id device_id question_order date_created
2 662dc5a5-ff08-4270-ad33-444e8dd01514 50bc84f6-6c55-4277-9651-5c3c98e973f5 {'Block 0': [('video_1', 'video_1'), ('video_2', 'video_2'), ('video_3', 'video_3')], 'Block 1': ['empty_stimulus'], 'Block 2': ['video_1', 'video_3', 'video_2']} 2024-06-25 12:01:22.516505

Binary file not shown.

Binary file not shown.