Cristina Cochior
6 years ago
32 changed files with 419 additions and 2 deletions
@ -1,2 +1,2 @@ |
|||||
# Pushing Scores |
# Pushing Scores |
||||
|
## Initial experiments for the Pushing Scores project |
||||
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -0,0 +1,4 @@ |
|||||
|
import os |
||||
|
|
||||
|
class Config(object): |
||||
|
SECRET_KEY = os.environ.get('SECRET_KEY') or 'you-will-never-guess' |
@ -0,0 +1,124 @@ |
|||||
|
from flask import Flask, url_for, render_template, Markup, redirect, request, flash |
||||
|
from flask import session as login_session |
||||
|
from flask_wtf import FlaskForm |
||||
|
from wtforms.validators import DataRequired |
||||
|
from wtforms import Form, TextField, TextAreaField, BooleanField, validators, StringField, SubmitField |
||||
|
from forms import ReusableForm |
||||
|
from config import Config |
||||
|
import json |
||||
|
import os |
||||
|
from time import gmtime, strftime |
||||
|
from pprint import pprint |
||||
|
|
||||
|
|
||||
|
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) |
||||
|
|
||||
|
|
||||
|
#### THE CHECKBOX RESULT DOESNT GET RECORDED TO THE JSON FILE |
||||
|
#### FULL LOOP WITH FILE AND RELOADING THE FORM WITH NEXT FILE IN THE ARRAY HAS TO BE MADE |
||||
|
#### OPTIONS TO SWITCH BETWEEN FILES NEED TO BE AVAILABLE |
||||
|
#### MAYBE CONFIRMATION BEFORE JSON IS RECORDED TO FORCE PEOPLE TO DOUBLE THINK |
||||
|
|
||||
|
|
||||
|
# setting variables for holding paths, folder names and the one file for description |
||||
|
path = "static/files/" |
||||
|
listingfiles= [] #fullpaths |
||||
|
listingdirectories = [] #paths |
||||
|
jsonfiles = [] #json files |
||||
|
thefile = None #selected file for description |
||||
|
now = strftime("%Y-%m-%d_%H:%M:%S", gmtime()) #description time |
||||
|
positioninarray = 2 #counter |
||||
|
|
||||
|
listofdicts=[] #to be able to import and use json content |
||||
|
|
||||
|
#listing paths and files, not in order but well... |
||||
|
for path, subdirs, files in os.walk(path): |
||||
|
for name in files: |
||||
|
#excluding json files from listing :-) |
||||
|
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/ |
||||
|
# print (path) |
||||
|
# print (name) |
||||
|
# print (os.path.join(path, name)) |
||||
|
if name.endswith(".json"): |
||||
|
fullpath = os.path.join(path, name) |
||||
|
jsonfiles.append(fullpath[7:]) |
||||
|
# print(name) |
||||
|
for line in open(fullpath, 'r'): |
||||
|
listofdicts.append(json.loads(line)) |
||||
|
|
||||
|
# print(listofdicts[0]["name"]) #test |
||||
|
|
||||
|
|
||||
|
dict = {} #dict for the form entries |
||||
|
|
||||
|
@app.route("/") |
||||
|
def home(): |
||||
|
return render_template('home.html') |
||||
|
|
||||
|
@app.route('/about/') |
||||
|
def about(): |
||||
|
return render_template('about.html') |
||||
|
|
||||
|
@app.route('/all/') |
||||
|
def all(): |
||||
|
thefile = listingfiles[positioninarray] |
||||
|
print(listingfiles) |
||||
|
# print(dict) |
||||
|
counter2=0 |
||||
|
return render_template('all.html', file=thefile, listingfiles=listingfiles, jsonfiles=jsonfiles, listofdicts=listofdicts, counter2=counter2) |
||||
|
|
||||
|
|
||||
|
@app.route('/description', methods=['GET', 'POST']) |
||||
|
def description(): |
||||
|
form = ReusableForm(request.form) |
||||
|
#pick a file but that will be done an other way later |
||||
|
thefile = listingfiles[positioninarray] #select one file from fullpath minus static/ |
||||
|
|
||||
|
# assigning html tag on the basis of extension, to be finished when all the files have been sent |
||||
|
if thefile.lower().endswith(('.png', '.jpg', '.jpeg')): |
||||
|
thefile = Markup('<img src="'+thefile+'" />') |
||||
|
|
||||
|
#if sound |
||||
|
elif thefile.lower().endswith(('.mp3')): |
||||
|
thefile = Markup('''<audio controls> |
||||
|
<source src="'''+thefile+'''" type="audio/mpeg"> |
||||
|
Your browser does not support the audio tag. |
||||
|
</audio>''') |
||||
|
#ifvid to be added |
||||
|
elif thefile.lower().endswith(('.mp4')): |
||||
|
thefile = Markup(''' <video width="320" height="240" controls> |
||||
|
<source src="'''+thefile+'''" type="video/mp4"> |
||||
|
Your browser does not support the video tag. |
||||
|
</video> ''') |
||||
|
|
||||
|
print (form.errors) |
||||
|
if request.method == 'POST' and form.validate(): |
||||
|
return 'Success!' |
||||
|
# return render_template('description.html', form=form, file=thefile, listingdirectories=listingdirectories, listingfiles=listingfiles) |
||||
|
return render_template('description.html', form=form, file=thefile) |
||||
|
|
||||
|
|
||||
|
@app.route('/get-data', methods=['GET', 'POST']) |
||||
|
def savepost(): |
||||
|
if request.method=='POST': |
||||
|
dict={'id':listingdirectories[positioninarray][13:],'name':request.form['name'],'email':request.form['email'],'friend':request.form['friend'],'content':request.form['content']} |
||||
|
# open with "a" if the file should concatenate content |
||||
|
|
||||
|
#json file naming gone unique by adding time and date of submission |
||||
|
|
||||
|
with open(listingdirectories[positioninarray]+"/"+now+"_data_file.json", "w") as write_file: |
||||
|
json.dump(dict, write_file) |
||||
|
return "The JSON file is ready." |
||||
|
#throw description and next item, wee need to iterate through the files |
||||
|
|
||||
|
else: |
||||
|
return "Error" |
||||
|
|
||||
|
|
||||
|
if __name__ == '__main__': |
||||
|
app.run(debug=True) |
@ -0,0 +1,45 @@ |
|||||
|
from flask import Flask, url_for, render_template, Markup, redirect, request, flash |
||||
|
from flask import session as login_session |
||||
|
from flask_wtf import FlaskForm |
||||
|
from wtforms.validators import DataRequired |
||||
|
from wtforms import Form, TextField, TextAreaField, BooleanField, validators, StringField, SubmitField |
||||
|
from forms import ReusableForm |
||||
|
from config import Config |
||||
|
import json |
||||
|
|
||||
|
app = Flask(__name__, static_url_path='', static_folder="static", template_folder="templates") |
||||
|
app.config.from_object(Config) |
||||
|
|
||||
|
@app.route("/") |
||||
|
def home(): |
||||
|
return render_template('home.html') |
||||
|
|
||||
|
@app.route('/about/') |
||||
|
def about(): |
||||
|
return render_template('about.html') |
||||
|
|
||||
|
@app.route('/description', methods=['GET', 'POST']) |
||||
|
def description(): |
||||
|
form = ReusableForm(request.form) |
||||
|
print (form.errors) |
||||
|
if request.method == 'POST' and form.validate(): |
||||
|
return 'Success!' |
||||
|
return render_template('description.html', form=form) |
||||
|
|
||||
|
|
||||
|
dict={} |
||||
|
|
||||
|
@app.route('/get-data', methods=['GET', 'POST']) |
||||
|
def savepost(): |
||||
|
if request.method=='POST': |
||||
|
dict={'name':request.form['name'],'email':request.form['email'],'friend':request.form['friend'],'content':request.form['content']} |
||||
|
# open with "a" if the file should concatenate content |
||||
|
with open("data_file.json", "w") as write_file: |
||||
|
json.dump(dict, write_file) |
||||
|
return "The JSON file is ready." |
||||
|
else: |
||||
|
return "Error" |
||||
|
|
||||
|
|
||||
|
if __name__ == '__main__': |
||||
|
app.run(debug=True) |
@ -0,0 +1 @@ |
|||||
|
{"name": "as", "email": "asd", "friend": "Y", "content": "asd"} |
@ -0,0 +1,12 @@ |
|||||
|
from flask_wtf import Form |
||||
|
from wtforms import TextField, IntegerField, TextAreaField, SubmitField, RadioField, SelectField, StringField |
||||
|
|
||||
|
from wtforms import validators, ValidationError |
||||
|
|
||||
|
class ReusableForm(Form): |
||||
|
name = TextField('Name:', [validators.Required('Please enter your name.')]) |
||||
|
email = TextField('Email:',[validators.Required('Please enter your email address.'), validators.Email('Please enter your email address.')]) |
||||
|
friend = RadioField('Are you a friend of De Player?', choices = [('Y','Yes'),('NY','Not Yet')]) |
||||
|
content = StringField('Description:',[validators.Required('Please enter a description.')]) |
||||
|
submit = SubmitField('Send') |
||||
|
|
@ -0,0 +1,38 @@ |
|||||
|
import json |
||||
|
|
||||
|
|
||||
|
# # to iterate through existing json file and find the correct json file |
||||
|
# def find_json(id): |
||||
|
# get path/to/file |
||||
|
|
||||
|
# return file |
||||
|
|
||||
|
# # |
||||
|
# def save_json(id, name, email, friend, content): |
||||
|
# file |
||||
|
# data = {"id": "path/to/file", "name":,"email":,"friend":,"content":} |
||||
|
|
||||
|
# with open('file.json', 'w') as f: |
||||
|
# json.dump(data, f) |
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
# def jaction(original, id, name, email, friend, content): |
||||
|
# f = find_json_file(id) |
||||
|
# data = make_dict(f) |
||||
|
|
||||
|
# updated = update_dict(data, name, email, friend, content) |
||||
|
# save_json_file(f, updated) |
||||
|
|
||||
|
# # to find the file with the correct id |
||||
|
# def find_json_file(): |
||||
|
# f = open('file.json', 'w') |
||||
|
# iterate files to find id |
||||
|
# return f |
||||
|
|
||||
|
# # saving the json file |
||||
|
# def save_json_file(name, email, friend, content): |
||||
|
# dict= request.args.get( |
||||
|
# write(file, json.dump(data)) |
||||
|
|
@ -0,0 +1,34 @@ |
|||||
|
from wtforms import Form, TextField, BooleanField, StringField, SubmitField, validators |
||||
|
from flask import Flask, url_for, render_template, Markup, redirect, request, flash |
||||
|
from flask import session as login_session |
||||
|
from forms import ReusableForm |
||||
|
from config import Config |
||||
|
# import json_actions |
||||
|
import json |
||||
|
|
||||
|
app = Flask(__name__, static_url_path='', static_folder="static", template_folder="templates") |
||||
|
app.config.from_object(Config) |
||||
|
|
||||
|
|
||||
|
@app.route('/', methods=['GET', 'POST']) |
||||
|
def description(): |
||||
|
form = ReusableForm(request.form) |
||||
|
print (form.errors) |
||||
|
if request.method == 'POST' and form.validate(): |
||||
|
return 'Success!' |
||||
|
return render_template('description-prev.html', form=form) |
||||
|
if __name__ == '__main__': |
||||
|
app.run(debug = True) |
||||
|
|
||||
|
dict={} |
||||
|
|
||||
|
@app.route('/get-data', methods=['GET', 'POST']) |
||||
|
def savepost(): |
||||
|
if request.method=='POST': |
||||
|
dict={'name':request.form['name'],'email':request.form['email'],'friend':request.form['friend'],'content':request.form['content']} |
||||
|
# open with "a" if the file should concatenate content |
||||
|
with open("data_file.json", "w") as write_file: |
||||
|
json.dump(dict, write_file) |
||||
|
return "The JSON file is ready." |
||||
|
else: |
||||
|
return "Error" |
Binary file not shown.
@ -0,0 +1,4 @@ |
|||||
|
body{ |
||||
|
background: lavender; |
||||
|
color:blue; |
||||
|
} |
Binary file not shown.
Binary file not shown.
@ -0,0 +1 @@ |
|||||
|
{"id":"001","name": "Canonimouse", "email": "yes@mail.com", "friend": "Y", "content": "The contestants are embracing."} |
After Width: | Height: | Size: 81 KiB |
Binary file not shown.
@ -0,0 +1 @@ |
|||||
|
{"id":"002","name": "XYZ", "email": "yesihave@one.com", "friend": "Y", "content": "Sure"} |
@ -0,0 +1 @@ |
|||||
|
{"id":"002","name": "Anonymousse", "email": "bettermail@mail.com", "friend": "Y", "content": "A beach in an Arab-speaking place."} |
Binary file not shown.
Binary file not shown.
@ -0,0 +1 @@ |
|||||
|
{"id": "003", "name": "Yes", "email": "sure@whynot.com", "friend": "Y", "content": "A sound file."} |
Binary file not shown.
Binary file not shown.
@ -0,0 +1,7 @@ |
|||||
|
{% extends "layout.html" %} |
||||
|
{% block content %} |
||||
|
<div class="about"> |
||||
|
<h1>About me</h1> |
||||
|
<p>This is a portfolio site about anything that can be put in a portfolio.</p> |
||||
|
</div> |
||||
|
{% endblock %} |
@ -0,0 +1,75 @@ |
|||||
|
|
||||
|
{% extends "layout.html" %} |
||||
|
{% block content %} |
||||
|
<div class="all"> |
||||
|
<h1>These are all the files</h1> |
||||
|
{{ listingfiles }} <br> |
||||
|
{{ jsonfiles }} <br> |
||||
|
{{ listofdicts }} <br> |
||||
|
<div class="col-lg-3 col-md-4 col-xs-6 thumb"> |
||||
|
{% for filename in listingfiles %} |
||||
|
{% if filename.lower().endswith(('.png', '.jpg', '.jpeg')) %} |
||||
|
<img class="img-responsive" src=" ../{{ filename }}"> |
||||
|
{% for jsonfile in jsonfiles %} |
||||
|
{% if filename[0:9] == jsonfile[0:9] %} |
||||
|
<div class="descrip"> |
||||
|
{{ jsonfile }} |
||||
|
{% for dict in listofdicts %} |
||||
|
{% if jsonfile[6:9]==dict["id"] %} |
||||
|
<p>{% for key, value in dict.items() %} |
||||
|
{{key}}: {{value}}<br> |
||||
|
{% endfor %}</p> |
||||
|
{% endif %} |
||||
|
{% endfor %} |
||||
|
</div> |
||||
|
{% break %} |
||||
|
{% endif %} |
||||
|
{% endfor %} |
||||
|
|
||||
|
{% elif filename.lower().endswith(('.mp4')) %} |
||||
|
<video width="320" height="240" controls><source src="../{{filename}}" type="video/mp4"> |
||||
|
Your browser does not support the video tag. |
||||
|
</video> |
||||
|
{% for jsonfile in jsonfiles %} |
||||
|
{% if filename[0:9] == jsonfile[0:9] %} |
||||
|
<div class="descrip"> |
||||
|
{{ jsonfile }} |
||||
|
{% for dict in listofdicts %} |
||||
|
{% if jsonfile[6:9]==dict["id"] %} |
||||
|
<p>{% for key, value in dict.items() %} |
||||
|
{{key}}: {{value}}<br> |
||||
|
{% endfor %}</p> |
||||
|
{% endif %} |
||||
|
{% endfor %} |
||||
|
</div> |
||||
|
{% break %} |
||||
|
{% endif %} |
||||
|
{% endfor %} |
||||
|
|
||||
|
{% elif filename.lower().endswith(('.mp3')) %} |
||||
|
<audio controls><source src="../{{filename}}" type="audio/mpeg"> |
||||
|
Your browser does not support the audio tag. |
||||
|
</audio> |
||||
|
{% for jsonfile in jsonfiles %} |
||||
|
{% if filename[0:9] == jsonfile[0:9]%} |
||||
|
<div class="descrip"> |
||||
|
{{ jsonfile }} |
||||
|
{% for dict in listofdicts %} |
||||
|
{% if jsonfile[6:9]==dict["id"] %} |
||||
|
<p>{% for key, value in dict.items() %} |
||||
|
{{key}}: {{value}}<br> |
||||
|
{% endfor %}</p> |
||||
|
{% endif %} |
||||
|
{% endfor %} |
||||
|
</div> |
||||
|
{% break %} |
||||
|
{% endif %} |
||||
|
{% endfor %} |
||||
|
{% endif %} |
||||
|
|
||||
|
{% endfor %} |
||||
|
</div> |
||||
|
</div> |
||||
|
{% endblock %} |
||||
|
|
||||
|
|
@ -0,0 +1,35 @@ |
|||||
|
{% extends "layout.html" %} |
||||
|
{% block content %} |
||||
|
<div class="description"> |
||||
|
<h2 style = "text-align: center;">Write something very interesting here.</h2> |
||||
|
|
||||
|
<!--passing files--> |
||||
|
<p>{{ file }}</p> |
||||
|
|
||||
|
<!-- <img src="{{ url_for('static', filename='/files/001/DwySYC4X4AESeRh.jpg') }}"> |
||||
|
--> |
||||
|
<!--passing an array--> |
||||
|
<!-- {% for v in listingdirectories %} |
||||
|
<div>{{ v }}</div> |
||||
|
{% endfor %} |
||||
|
{% for f in listingfiles %} |
||||
|
<div>{{ f }}</div> |
||||
|
{% endfor %} |
||||
|
--> |
||||
|
|
||||
|
{% for message in form.name.errors %} |
||||
|
<div>{{ message }}</div> |
||||
|
{% endfor %} |
||||
|
|
||||
|
<form method="POST" action="/get-data"> |
||||
|
<fieldset> |
||||
|
{{ form.hidden_tag() }} |
||||
|
<div>{{ form.name.label }} {{ form.name }}</div> |
||||
|
<div>{{ form.email.label }} {{ form.email }}</div> |
||||
|
<div>{{ form.friend.label }} {{ form.friend }}</div> |
||||
|
<div>{{ form.content.label }} {{ form.content }}</div> |
||||
|
<div>{{ form.submit }}</div> |
||||
|
</fieldset> |
||||
|
</form> |
||||
|
</div> |
||||
|
{% endblock %} |
@ -0,0 +1,7 @@ |
|||||
|
{% extends "layout.html" %} |
||||
|
{% block content %} |
||||
|
<div class="home"> |
||||
|
<h1>THIS IS THE HOME PAGE</h1> |
||||
|
<p>This website was built with Python via the Flask framework.</p> |
||||
|
</div> |
||||
|
{% endblock %} |
@ -0,0 +1,27 @@ |
|||||
|
<!DOCTYPE html> |
||||
|
<html> |
||||
|
<head> |
||||
|
<meta charset="UTF-8"> |
||||
|
<title>PARTOUT TITRE PARTOUT</title> |
||||
|
<link rel="stylesheet" href="{{ url_for('static', filename='css/main.css') }}"> |
||||
|
</head> |
||||
|
<body> |
||||
|
<header> |
||||
|
<div class="container"> |
||||
|
<h1 class="logo">SUPERB</h1> |
||||
|
<strong><nav> |
||||
|
<ul class="menu"> |
||||
|
<li><a href="{{ url_for('home') }}">Home</a></li> |
||||
|
<li><a href="{{ url_for('about') }}">About</a></li> |
||||
|
<li><a href="{{ url_for('description') }}">Form</a></li> |
||||
|
<li><a href="{{ url_for('all') }}">All files</a></li> |
||||
|
</ul> |
||||
|
</nav></strong> |
||||
|
</div> |
||||
|
</header> |
||||
|
<div class="container"> |
||||
|
{% block content %} |
||||
|
{% endblock %} |
||||
|
</div> |
||||
|
</body> |
||||
|
</html> |
Loading…
Reference in new issue