from flask import Flask , render_template , Markup , jsonify , session , request , send_file
import json
import os
from json import dumps
import collections
import random
import string
from zipfile import ZipFile
app = Flask ( __name__ , static_url_path = ' ' , static_folder = " static " , template_folder = " templates " )
app . jinja_env . add_extension ( ' jinja2.ext.loopcontrols ' )
# SETTING THE VARIABLES
path = " /static/files/ "
max_selected_items = 30
#move this list to Jinja so it can be placed in layout
#give back clicked value
# librarians = ["Alana", "Gentian", "Laurie", "Matias", "Scott", "Stacy", "Max", "Clara_B", "Michelle", "Clara_J_B", "Karen", "Lumsden_Primary_School", "Aaron", "Leo", "Maria", "Laura", "Honey", "Tender_Center", "wdka", "Naomi", "Cristina", "Julie", "ssw", "cyberspace", "Hannah", "Katarina", "Anastasia", "Kimmy", "Marie","Katherine", "Allison", "Mariana", "Viki", "Alice", "Eric", "hks", "cbk", "Sophie", "Antonio", "Jeremiah", "Angela", "Renee", "Marta", "Katherine", "Anna", "Auryn", "Ashley", "Anne", "Denise", "Eva", "Jonnah", "Kitty", "Masha", "Mia", "Cian", "Senke", "Maud", "Jinnie", "Rubin", "Julia", "Alana", "Gentian", "Laurie", "Matias","Scott", "Stacy"]
librarians = [ ]
files_without_folders = [ ]
with open ( ' static/js/mergedjson.json ' , ' r ' , encoding = ' utf8 ' ) as filesandnames :
filetoname_dict = json . load ( filesandnames )
#get full list librarians from json (printed later through global variable)
for file in filetoname_dict :
for name in file [ " librarian " ] :
librarians . append ( str ( name ) )
librarians = list ( dict . fromkeys ( librarians ) )
#this value we should get from template
librarianselected = " Ruben "
#go from librarian name to file
for file in filetoname_dict :
# if librarianselected in file["librarian"]:
thedebris = file [ " debrisname " ]
#apply regex to the debris
thedebris = os . path . basename ( thedebris )
files_without_folders . append ( str ( thedebris ) )
# print(str(librarianselected)+" contributed with the following debris : "+str(thedebris))
#this value we should get from template
fileselected = filetoname_dict [ 1 ] [ " debrisname " ]
#go from file name to librarian name
for file in filetoname_dict :
if fileselected in file [ " debrisname " ] :
thelibrarian = file [ " librarian " ]
print ( " librarians for " + str ( fileselected ) + " are: " + str ( thelibrarian ) )
print ( " --------------------------------------------------- " )
# preparing a index.json file of files
index_dict = { }
@app . route ( " / " , methods = [ ' POST ' , ' GET ' ] )
def home ( ) :
if request . args :
# We have our query string nicely serialized as a Python dictionary
args = request . args
# We'll create a string to display the parameters & values
# serialized = ", ".join(f"{k}: {v}" for k, v in request.args.items())
# Display the query string to the client in a different format
# return f"(Query) {serialized}", 200
urllibrarian = request . args . getlist ( ' librarian ' ) # new
urlmethod = request . args . getlist ( ' method ' ) # new
for a in urllibrarian :
print ( ' urllibrarian is: ' + a )
for b in urlmethod :
print ( ' urlmethod is: ' + b )
#unsure if Im really using that for now I think not
# selected = "textbysomeone"
# selections = collections.deque(session['selection'], maxlen=max_selected_items) #?
# selections.append(selected)
# session['selection'] = list(selections)
return render_template ( ' layout.html ' , urllibrarian = urllibrarian , urlmethod = urlmethod , filetoname_dict = filetoname_dict , librarians = librarians , files_without_folders = files_without_folders ) # new
@app . route ( ' /about/ ' )
def about ( ) :
selectedstuff = session [ ' selection ' ]
return render_template ( ' about.html ' , selectedstuff = selectedstuff )
@app . route ( ' /exchange ' )
def exchange ( ) :
return render_template ( ' exchange.html ' )
@app . route ( ' /test/ ' , methods = [ ' GET ' , ' POST ' ] )
def test ( ) :
print ( " test " )
clicked = None
bundle = " bundle.zip "
zipObj = ZipFile ( bundle , ' w ' )
if request . method == " POST " :
# clicked=request.form['data']
listofselecteddocs = request . get_json ( )
print ( " hallo " )
print ( listofselecteddocs )
print ( " hola " )
# create a ZipFile object
# Add multiple files to the zip
zipObj . write ( ' static/files/ ' + listofselecteddocs [ 0 ] )
zipObj . write ( ' static/files/ ' + listofselecteddocs [ 1 ] )
zipObj . write ( ' static/default-files/hello.txt ' )
# close the Zip File
# return render_template('test.html')
# return send_file(bundle, mimetype='application/zip', as_attachment=True, attachment_filename=bundle)
# TEST
# print("sending file...")
# result = send_file(bundle, as_attachment=True)
# print("file sent, deleting...")
# os.remove(bundle)
# return result
zipObj . close ( )
return send_file ( bundle , mimetype = ' application/zip ' , attachment_filename = " hello.zip " , as_attachment = True )