From 772c9f65106bdc8201d2b872fedc3dc80e01b7f5 Mon Sep 17 00:00:00 2001 From: Cristina Cochior Date: Fri, 12 Jul 2019 17:33:12 +0200 Subject: [PATCH] app adapted to python2 --- contextualise_python2.py | 334 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 334 insertions(+) create mode 100644 contextualise_python2.py diff --git a/contextualise_python2.py b/contextualise_python2.py new file mode 100644 index 0000000..53105e0 --- /dev/null +++ b/contextualise_python2.py @@ -0,0 +1,334 @@ +#!/Users/cristinacochior/venv/deplayer_python2/bin python2.7 +# -*- coding: utf-8 -*- + +from flask import Flask, Response, url_for, render_template, Markup, jsonify, redirect, request, flash, session, make_response +from config import Config +import json +import os +import datetime as dt +from datetime import datetime +from pprint import pprint +import re +from PIL import Image, ImageDraw, ImageFont +import numpy as np +from itertools import izip_longest +import codecs + + +app = Flask(__name__, static_url_path='', static_folder="static", template_folder="templates") +app.jinja_env.add_extension('jinja2.ext.loopcontrols') +app.config.from_object(Config) + +###################################################################################### +# SETTING THE VARIABLES +###################################################################################### + +# setting variables for holding paths, folder names and the one file for description +path = "/static/files/" +jsonfiles = [] #json files +fullpathjsonfiles = [] #fullpath for some situations +listingfiles= [] #fullpaths +listingdirectories = [] #paths +thefile = None #selected file for description +positioninarray = 8 #counter +listofdicts=[] #to be able to import and use json content +datafromjson = [] + +#test getting json file from id +id = "17" +jsonfilefordescription = "files/"+id+"/"+id+".json" + +#arrays with the user path of words and numbers +pathofwords = [] +pathofnumbers = [] + +#VARS FOR THE SESSIONS +app.secret_key = 'your secret' +app.config['SESSION_TYPE'] = 'filesystem' + +session = {} +session['wordpath'] = [] +session['clicktime'] = [] +session['id'] = [] +session['veryfirstnow'] = None + +#VARS FOR THE SCORES +wordpath = [] +idlist = [] +timelist = [] +timelistforoperations = [] + +# preparing the index.json file for the navbar +index_dict = {} + + +###################################################################################### +#SOME JSON AND WALK OS REALTED THINGIES +###################################################################################### + + +#reading wordlist.json +with open('wordlist.json', 'r') as f: + wordlist_dict = json.load(f) + +#listing paths and files, not in order but well... +# for path, subdirs, files in os.walk(path): +# for name in files: +# if not name.endswith(".json") and not name.endswith(".DS_Store"): +# fullpath = os.path.join(path, name) +# listingdirectories.append(path) +# listingfiles.append(fullpath[7:]) #fullpaths minus static/ +# +# if name.endswith(".json"): +# fullpath = os.path.join(path, name) +# jsonfiles.append(fullpath[7:]) + + +#listing the json paths simultaneously generating a new index.json for the navbar +for path, subdirs, files in os.walk('./static/files/'): + for name in files: + if name.endswith(".json"): + fullpath = os.path.join(path, name) + jsonfiles.append(fullpath[8:]) + fullpathjsonfiles.append(fullpath) + with open (fullpath) as f: + temp_dict = json.load(f) + index_dict[temp_dict["id"]] = temp_dict["title"] + + + +# with open("static/"+jsonfiles[4], 'r') as f: +# data_dict = json.load(f) +# datafromjson = data_dict["files"] + +###################################################################################### +#NOW THE REAL DEAL +###################################################################################### + +@app.route("/") +def home(): + sessionid = "current_user.id" + + #add the very first time of connection to the interface + if session['veryfirstnow'] is None : + session['veryfirstnow'] = datetime.now() + + return render_template('home.html', wordlist_dict=wordlist_dict) +def functionsession(): + return(session) + +# THIS IS NOT WORKING YET DUNNO WHY +@app.context_processor +def context_processor(): + functionsession = session['wordpath'] + return dict(functionsession=functionsession) + +@app.route('/about/') +def about(): + if session['veryfirstnow'] is None : + session['veryfirstnow'] = datetime.now() + + return render_template('about.html') + +# @app.route('/all/') +# def all(): +# thefile = listingfiles[positioninarray] +# counter2=0 +# return render_template('all.html', file=thefile, listingfiles=listingfiles, jsonfiles=jsonfiles, listofdicts=listofdicts, counter2=counter2) + +@app.route('/description') +def description(): + if session['veryfirstnow'] is None : + session['veryfirstnow'] = datetime.now() + + idno=request.args.get('id') + jsonfilefordescription = "files/"+idno+"/"+idno+".json" + with open("static/"+jsonfilefordescription, 'r') as f: + data_dict = json.load(f) + datafromjson = data_dict["files"] + + #open json file, list filepaths in array and loop with thefile + textfile="" + textfiles=[] + with open("static/"+jsonfilefordescription, 'r') as f: + data_dict = json.load(f) + datafromjson = data_dict["files"] + itemid = data_dict["id"] + session["id"].append(itemid) + for file in datafromjson: + if file.lower().endswith(('.html')): + with codecs.open("static/"+file,"r", encoding='utf-8') as f: + textfile = f.read() + textfile = Markup(textfile) + textfiles.append(textfile) + return render_template('description.html', datafromjson=datafromjson, itemid=itemid, textfiles=textfiles, idno=idno, index_dict=index_dict) + +@app.route('/diverge', methods=['GET']) +def diverge(): + if session['veryfirstnow'] is None : + session['veryfirstnow'] = datetime.now() + + searchterm=request.args.get('search') + now = datetime.now() #description time + session['wordpath'].append(searchterm) + session['clicktime'].append(now) + return render_template('diverge.html', wordlist_dict=wordlist_dict, searchterm=searchterm, index_dict=index_dict) + +# @app.route('/listofwords') +# def listofwords(): +# # r = jsonify(session) +# r = str(session) +# r0w = session["wordpath"][0] +# r0c = session["clicktime"][0] +# r0id = session["id"][0] +# return render_template('listofwords.html', r=r, r0c=r0c, r0w=r0w, r0id=r0id) + +###################################################################################### +#THE SCORE STUFF +###################################################################################### + +### Add : if score is empty then add some sentence like "your score is empty" +### to be printed to the text document + +@app.route("/get-file") +def get_file(): + if session['veryfirstnow'] is None : + session['veryfirstnow'] = datetime.now() + + fullscore = None + + wordpath = session["wordpath"] + idlist = session["id"] + timelist = session["clicktime"] + veryfirstnow = session['veryfirstnow'] + clickongetfiletime = datetime.now() + + + tadam = None + initialtime = None + + if not (timelist[0] is None): + thetime = timelist[0] + thetime = str(thetime) + thetime = dt.datetime.strptime(thetime, '%Y-%m-%d %H:%M:%S.%f') + initialtime = thetime - veryfirstnow + initialtime = initialtime.total_seconds() + initialtime = int(initialtime) + initialtime = "."*initialtime + + print(initialtime) + + for t in timelist : + t = str(t) + yo = dt.datetime.strptime(t, '%Y-%m-%d %H:%M:%S.%f') + timelistforoperations.append(yo) + + prev = None + wholestringy = None + + # print("veryfirstnow : "+str(veryfirstnow)+"\n") + + print(wordpath) + print(timelistforoperations) + print(idlist) + + + for (word, time) in zip(wordpath,timelistforoperations): + # for (word, time, uniqueid) in zip(wordpath,timelistforoperations, idlist): + # print("word : "+word+"\n") + # print("timeofclick : "+str(time)+"\n") + # print("============") + # print(wordpath) + # print("============") + # filler = int(uniqueid) + upperword = word.upper() + + #get previous time for substraction + if not (prev is None): + difftime = time - prev + difftime = difftime.total_seconds() + difftime = int(difftime) + # print(difftime) + else: + yo = str(veryfirstnow) + yoyo = dt.datetime.strptime(yo, '%Y-%m-%d %H:%M:%S.%f') + + difftime = time - yoyo + difftime = difftime.total_seconds() + difftime = int(difftime) + + test = difftime + + prev = time + + diffpattern = test * '.' + stringy = diffpattern + upperword + + if not (wholestringy is None): + wholestringy = wholestringy+stringy + fullscore = wholestringy + else: + wholestringy = upperword + fullscore = wholestringy + + + # #If fullscore length superior 60 characters, insert linebreak + + # # Defining splitting point + # n = 60 + # # Using list comprehension + # out = [(fullscore[i:i+n]) for i in range(0, len(fullscore), n)] + # #joining the strings with linebreaks + # tadam = '\n'.join(out) + + + if not (fullscore is None): + # outside of the loop calculate seconds from "clickongetfiletime" minus the last "time" from the loop + lastdifftime = clickongetfiletime - prev + lastdifftime = lastdifftime.total_seconds() + lastdifftime = int(lastdifftime) + lastdifftime = lastdifftime * '.' + #the 60 seconds thing + # print(lastdifftime+"\n") + fullscore = initialtime+fullscore+lastdifftime + # Defining splitting point + n = 60 + # Using list comprehension + out = [(fullscore[i:i+n]) for i in range(0, len(fullscore), n)] + #joining the strings with linebreaks + tadam = '\n'.join(out) + +# have a message in file if no nav has been recorded so it's less dull than error page + if tadam is None: + tadam = "This score is Null" + + # print("verylastnow : "+str(clickongetfilefime)+"\n") + + uniquename = str(clickongetfiletime) + + with open('scores/'+uniquename+'.txt', 'a+') as f: + f.write(tadam) + + print(tadam) + + return Response(tadam, + mimetype="text/plain", + headers={"Content-Disposition": + "attachment;filename=yourveryspecialscore.txt"}) + + + + + +###################################################################################### +#INDEX PAGE +###################################################################################### +@app.route("/index") +def index(): + return render_template('theindex.html', wordlist_dict=wordlist_dict, index_dict=index_dict) + + + + +if __name__ == '__main__': + app.run(debug=True)