WU-63
This commit is contained in:
parent
3470662318
commit
5186c2e54c
194
app.py
194
app.py
@ -1,4 +1,4 @@
|
|||||||
from flask import Flask, render_template, request, json, session, redirect, Blueprint, url_for
|
from flask import Flask, render_template, request, json, session, redirect, Blueprint, url_for, flash, Response, send_from_directory
|
||||||
from flask_wtf import Form
|
from flask_wtf import Form
|
||||||
from wtforms.fields import StringField, SubmitField
|
from wtforms.fields import StringField, SubmitField
|
||||||
from wtforms.validators import Required
|
from wtforms.validators import Required
|
||||||
@ -13,8 +13,12 @@ from flask_socketio import emit, join_room, leave_room
|
|||||||
import smtplib
|
import smtplib
|
||||||
from oauth2client import file, client, tools
|
from oauth2client import file, client, tools
|
||||||
from googleapiclient.discovery import build
|
from googleapiclient.discovery import build
|
||||||
|
from googleapiclient.http import MediaFileUpload
|
||||||
from httplib2 import Http
|
from httplib2 import Http
|
||||||
from oauth2client.service_account import ServiceAccountCredentials
|
from oauth2client.service_account import ServiceAccountCredentials
|
||||||
|
import os
|
||||||
|
from werkzeug.utils import secure_filename
|
||||||
|
from camera import VideoCamera
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -34,7 +38,14 @@ socketio.init_app(app)
|
|||||||
#app.config['MYSQL_DATABASE_HOST'] = 'localhost'
|
#app.config['MYSQL_DATABASE_HOST'] = 'localhost'
|
||||||
#mysql = MySQL()
|
#mysql = MySQL()
|
||||||
#mysql.init_app(app)
|
#mysql.init_app(app)
|
||||||
|
|
||||||
|
UPLOAD_FOLDER = './uploads'
|
||||||
|
ALLOWED_EXTENSIONS = set(['txt', 'pdf', 'png', 'jpg', 'jpeg', 'gif'])
|
||||||
|
app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER
|
||||||
|
|
||||||
|
def allowed_file(filename):
|
||||||
|
return '.' in filename and \
|
||||||
|
filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS
|
||||||
|
|
||||||
@app.route('/groupChat', methods=['GET', 'POST'])
|
@app.route('/groupChat', methods=['GET', 'POST'])
|
||||||
def indexChat():
|
def indexChat():
|
||||||
@ -99,7 +110,10 @@ class LoginForm(Form):
|
|||||||
faces_list = []
|
faces_list = []
|
||||||
testing_face = 0
|
testing_face = 0
|
||||||
service = None
|
service = None
|
||||||
SCOPES = "https://www.googleapis.com/auth/calendar.events"
|
drive_service = None
|
||||||
|
CALENDAR_SCOPES = "https://www.googleapis.com/auth/calendar.events"
|
||||||
|
DRIVE_SCOPES = "https://www.googleapis.com/auth/drive"
|
||||||
|
|
||||||
|
|
||||||
@socketio.on('message')
|
@socketio.on('message')
|
||||||
def handleMessage(msg):
|
def handleMessage(msg):
|
||||||
@ -111,9 +125,15 @@ def main():
|
|||||||
store = file.Storage('token.json')
|
store = file.Storage('token.json')
|
||||||
creds = store.get()
|
creds = store.get()
|
||||||
if not creds or creds.invalid:
|
if not creds or creds.invalid:
|
||||||
flow = client.flow_from_clientsecrets('credentials.json', SCOPES)
|
flow = client.flow_from_clientsecrets('credentials.json', CALENDAR_SCOPES)
|
||||||
creds = tools.run_flow(flow, store)
|
creds = tools.run_flow(flow, store)
|
||||||
service = build('calendar', 'v3', http=creds.authorize(Http()))
|
service = build('calendar', 'v3', http=creds.authorize(Http()))
|
||||||
|
|
||||||
|
if not creds or creds.invalid:
|
||||||
|
flow = client.flow_from_clientsecrets('credentials.json', DRIVE_SCOPES)
|
||||||
|
creds = tools.run_flow(flow, store)
|
||||||
|
drive_service = build('drive', 'v3', http=creds.authorize(Http()))
|
||||||
|
|
||||||
return render_template('index.html', info="Witaj!")
|
return render_template('index.html', info="Witaj!")
|
||||||
|
|
||||||
@app.route("/indexENG")
|
@app.route("/indexENG")
|
||||||
@ -636,13 +656,181 @@ def addEvent():
|
|||||||
service.events().insert(calendarId='primary', body=event).execute()
|
service.events().insert(calendarId='primary', body=event).execute()
|
||||||
return render_template('userHome.html', user=session['user'].split('@')[0], calendar_src="https://calendar.google.com/calendar/embed?src=" + session.get("user"))
|
return render_template('userHome.html', user=session['user'].split('@')[0], calendar_src="https://calendar.google.com/calendar/embed?src=" + session.get("user"))
|
||||||
|
|
||||||
|
@app.route('/streaming')
|
||||||
|
def streaming():
|
||||||
|
return render_template('streaming.html')
|
||||||
|
|
||||||
@app.route('/toAddEvent')
|
@app.route('/toAddEvent')
|
||||||
def toAddEvent():
|
def toAddEvent():
|
||||||
if session.get('user'):
|
if session.get('user'):
|
||||||
return render_template('addEvent.html')
|
return render_template('addEvent.html')
|
||||||
else:
|
else:
|
||||||
return render_template('error.html',error = 'Nieautoryzowany dostęp!')
|
return render_template('error.html',error = 'Nieautoryzowany dostęp!')
|
||||||
|
|
||||||
|
def gen(camera):
|
||||||
|
while True:
|
||||||
|
frame = camera.get_frame()
|
||||||
|
yield (b'--frame\r\n'
|
||||||
|
b'Content-Type: image/jpeg\r\n\r\n' + frame + b'\r\n\r\n')
|
||||||
|
|
||||||
|
@app.route('/stream')
|
||||||
|
def stream():
|
||||||
|
return Response(gen(VideoCamera()),
|
||||||
|
mimetype='multipart/x-mixed-replace; boundary=frame')
|
||||||
|
|
||||||
|
def make_tree(path=app.config['UPLOAD_FOLDER']):
|
||||||
|
tree = dict(name=path, children=[])
|
||||||
|
try: lst = os.listdir(path)
|
||||||
|
except OSError:
|
||||||
|
pass #ignore errors
|
||||||
|
else:
|
||||||
|
for name in lst:
|
||||||
|
fn = os.path.join(path, name)
|
||||||
|
if os.path.isdir(fn):
|
||||||
|
tree['children'].append(make_tree(fn))
|
||||||
|
else:
|
||||||
|
tree['children'].append(dict(name=fn))
|
||||||
|
return tree
|
||||||
|
|
||||||
|
@app.route('/uploads/<filename>')
|
||||||
|
def download_file(filename):
|
||||||
|
return send_from_directory(app.config['UPLOAD_FOLDER'],
|
||||||
|
filename, as_attachment=True)
|
||||||
|
|
||||||
|
@app.route('/toResources')
|
||||||
|
def toResources():
|
||||||
|
if session.get('user'):
|
||||||
|
files = make_tree()
|
||||||
|
# list_of_files = {}
|
||||||
|
# path = app.config['UPLOAD_FOLDER']
|
||||||
|
# for filename in os.listdir(path):
|
||||||
|
# print (filename)
|
||||||
|
# print ()
|
||||||
|
# list_of_files[filename] = filename.file.name
|
||||||
|
print (files)
|
||||||
|
# items_keys = []
|
||||||
|
# for key, value in files.items():
|
||||||
|
# if key == "children":
|
||||||
|
# for k, v in value[0].items():
|
||||||
|
# items_keys.append(v)
|
||||||
|
# items_values = []
|
||||||
|
# for item in items_keys:
|
||||||
|
# items_values.append(item.indexOf("\\"))
|
||||||
|
|
||||||
|
return render_template('resources.html', items=files)
|
||||||
|
else:
|
||||||
|
return render_template('error.html',error = 'Nieautoryzowany dostęp!')
|
||||||
|
|
||||||
|
@app.route('/resources', methods=['POST'])
|
||||||
|
def resources():
|
||||||
|
if request.method == 'POST':
|
||||||
|
# check if the post request has the file part
|
||||||
|
#if 'file' not in request.files:
|
||||||
|
# flash('No file part')
|
||||||
|
# return redirect(request.url)
|
||||||
|
file = request.files['fileToUpload']
|
||||||
|
#file = request.form["fileToUpload"]
|
||||||
|
filename = secure_filename(file.filename)
|
||||||
|
file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))
|
||||||
|
return render_template('userHome.html', user=session['user'].split('@')[0], calendar_src="https://calendar.google.com/calendar/embed?src=" + session.get("user"))
|
||||||
|
|
||||||
|
@app.route('/showResources')
|
||||||
|
def showResources():
|
||||||
|
path = app.config['UPLOAD_FOLDER']
|
||||||
|
for filename in os.listdir(path):
|
||||||
|
list_of_files[filename] = filename
|
||||||
|
#return render_template("")
|
||||||
|
|
||||||
|
|
||||||
|
#input_file = UPLOAD_FOLDER + filename
|
||||||
|
#uploads = []
|
||||||
|
#uploads.append(input_file)
|
||||||
|
#return render_template('resources.html', resources = uploads)
|
||||||
|
# if user does not select file, browser also
|
||||||
|
# submit an empty part without filename
|
||||||
|
#if file.filename == '':
|
||||||
|
# flash('No selected file')
|
||||||
|
# return redirect(request.url)
|
||||||
|
|
||||||
|
#if file and allowed_file(file.filename):
|
||||||
|
#filename = secure_filename(file.filename)
|
||||||
|
#filename = app.config['UPLOAD_FOLDER'] + file.filename
|
||||||
|
#file.save(filename) #os.path.join(app.config['UPLOAD_FOLDER'], file.filename))
|
||||||
|
#return redirect(url_for('uploaded_file', filename=filename))
|
||||||
|
'''if request.method == 'GET':
|
||||||
|
uploads = app.config['UPLOAD_FOLDER'] #os.path.join(current_app.root_path, app.config['UPLOAD_FOLDER'])
|
||||||
|
return render_template('resources.html', resources = os.getcwd() + os.listdir(uploads))
|
||||||
|
|
||||||
|
<!doctype html>
|
||||||
|
<title>Upload new File</title>
|
||||||
|
<h1>Upload new File</h1>
|
||||||
|
<form method=post enctype=multipart/form-data>
|
||||||
|
<input type=file name=file>
|
||||||
|
<input type=submit value=Upload>
|
||||||
|
</form>
|
||||||
|
|
||||||
|
''' '''
|
||||||
|
@app.route('/addResources', methods=['GET', 'POST'])
|
||||||
|
def addResources():
|
||||||
|
if request.method == 'POST':
|
||||||
|
# check if the post request has the file part
|
||||||
|
#if 'file' not in request.files:
|
||||||
|
# flash('No file part')
|
||||||
|
# return redirect(request.url)
|
||||||
|
file = request.files['fileToUpload']
|
||||||
|
file_metadata = {'name': file}
|
||||||
|
path = request.files['fileToUpload'].file.name
|
||||||
|
print (os.path.basename(file.filename))
|
||||||
|
media = MediaFileUpload(path)
|
||||||
|
file = drive_service.files().create(body=file_metadata, media_body=media, fields='id').execute()
|
||||||
|
results = drive_service.files().list(pageSize=10, fields="nextPageToken, files(id, name)").execute()
|
||||||
|
items = results.get('files', [])
|
||||||
|
return render_template('allResources.html', resources = items)
|
||||||
|
# file = request.files['fileToUpload']
|
||||||
|
# file = request.form["fileToUpload"]
|
||||||
|
# filename = secure_filename(file.filename)
|
||||||
|
# file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))
|
||||||
|
# input_file = UPLOAD_FOLDER + filename
|
||||||
|
# uploads = []
|
||||||
|
# uploads.append(input_file)
|
||||||
|
# return render_template('addResources.html', resources = uploads)
|
||||||
|
|
||||||
|
@app.route('/allResources')
|
||||||
|
def allResources():
|
||||||
|
results = drive_service.files().list(pageSize=10, fields="nextPageToken, files(id, name)").execute()
|
||||||
|
items = results.get('files', [])
|
||||||
|
return render_template('allResources.html', resources = items)
|
||||||
|
|
||||||
|
@app.route('/toAllResources')
|
||||||
|
def toAllResources():
|
||||||
|
if session.get('user'):
|
||||||
|
uploads = app.config['UPLOAD_FOLDER'] #os.path.join(current_app.root_path, app.config['UPLOAD_FOLDER'])
|
||||||
|
path = os.getcwd()
|
||||||
|
return render_template('allResources.html', resources = os.path.join(path, uploads))
|
||||||
|
#return render_template('resources.html')
|
||||||
|
else:
|
||||||
|
return render_template('error.html',error = 'Nieautoryzowany dostęp!')
|
||||||
|
|
||||||
|
@app.route('/toAddResources')
|
||||||
|
def toAddResources():
|
||||||
|
if session.get('user'):
|
||||||
|
uploads = app.config['UPLOAD_FOLDER'] #os.path.join(current_app.root_path, app.config['UPLOAD_FOLDER'])
|
||||||
|
path = os.getcwd()
|
||||||
|
return render_template('addResources.html', resources = os.path.join(path, uploads))
|
||||||
|
#return render_template('resources.html')
|
||||||
|
else:
|
||||||
|
return render_template('error.html',error = 'Nieautoryzowany dostęp!')
|
||||||
|
|
||||||
|
@app.route('/downloadResource')
|
||||||
|
def downloadResource():
|
||||||
|
if session.get('user'):
|
||||||
|
file_id = request.files["files"]
|
||||||
|
return render_template('addResources.html', resources = os.path.join(path, uploads))
|
||||||
|
#return render_template('resources.html')
|
||||||
|
else:
|
||||||
|
return render_template('error.html',error = 'Nieautoryzowany dostęp!')
|
||||||
|
'''
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
#app.run(host='0.0.0.0')
|
#app.run(host='0.0.0.0')
|
||||||
# Port: 5000
|
# Port: 5000
|
||||||
|
93
templates/resources.html
Normal file
93
templates/resources.html
Normal file
@ -0,0 +1,93 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<!--<html lang="en">-->
|
||||||
|
<html lang="pl-PL">
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<title>Python Flask App</title>
|
||||||
|
|
||||||
|
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
|
||||||
|
<link rel="stylesheet" type="text/css" href="signup.css">
|
||||||
|
<!-- <link href="http://getbootstrap.com/dist/css/bootstrap.min.css" rel="stylesheet"> -->
|
||||||
|
|
||||||
|
<link href="http://getbootstrap.com/examples/jumbotron-narrow/jumbotron-narrow.css" rel="stylesheet">
|
||||||
|
<link href="../static/css/signup.css" rel="stylesheet">
|
||||||
|
<link rel="stylesheet" href="../static/css/calendar.css">
|
||||||
|
|
||||||
|
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<div class="container">
|
||||||
|
<div class="header">
|
||||||
|
<nav>
|
||||||
|
<ul class="nav nav-pills pull-left">
|
||||||
|
<!--<form><input type="button" value="Back" onClick="history.go(-1);return true;"></form>-->
|
||||||
|
<!--<li role="presentation" class="active"><input type="button" value="Back" onClick="history.go(-1);return true;">
|
||||||
|
</li>-->
|
||||||
|
<!--<li role="presentation" class="active"><form action="http://google.com"><input type="button" value="Wstecz" onClick="history.go(-1);return true;"></form></li>-->
|
||||||
|
<!-- <li role="presentation" class="active"><a href="userHomeENG">ENG</a> -->
|
||||||
|
<!-- </li> -->
|
||||||
|
<li role="presentation" class="active"><a href="userHome">Wróć do strony domowej</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
<ul class="nav nav-pills pull-right">
|
||||||
|
<li role="presentation" class="active"><a href="/logout">Wyloguj</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</nav>
|
||||||
|
<h3 class="text-muted"><center>Python Flask</center></h3>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="jumbotron" style="height: 550px;">
|
||||||
|
<h1>Wszystkie materiały uczelni</h1>
|
||||||
|
<div class="col-xs-6">
|
||||||
|
<h2>Materiały do pobrania:</h2>
|
||||||
|
<!-- <form action="downloadResource" method="get" enctype="multipart/form-data"> -->
|
||||||
|
|
||||||
|
{% for key, value in items.items() %}
|
||||||
|
{% if key == "children" %}
|
||||||
|
{% for val in value %}
|
||||||
|
{% for k, v in val.items() %}
|
||||||
|
<h3><ul><a href="{{ v }}">{{ v[v.index('\\')+1:] }}</a></ul></h3>
|
||||||
|
<!-- <ul>{{ value }}</ul> -->
|
||||||
|
<!-- <h2>Value: {{value}}</h2> -->
|
||||||
|
{% endfor %}
|
||||||
|
{% endfor %}
|
||||||
|
{% endif %}
|
||||||
|
{% endfor %}
|
||||||
|
|
||||||
|
<!-- {% for item in items %} -->
|
||||||
|
<!-- item.children -->
|
||||||
|
<!-- <ul><a href="{{ item.children }}">{{ item.children }}</a></ul> -->
|
||||||
|
<!-- {% endfor %} -->
|
||||||
|
|
||||||
|
<!-- {% for file in files %} -->
|
||||||
|
<!-- file</br> -->
|
||||||
|
<!-- <ol><a href="{{ resource }}" download>Plik</a></ol> -->
|
||||||
|
<!-- {% endfor %} -->
|
||||||
|
<!-- </form> -->
|
||||||
|
</div>
|
||||||
|
<div class="col-xs-6">
|
||||||
|
<h3>Wrzuć materiał</h3>
|
||||||
|
<form action="resources" method="post" enctype="multipart/form-data">
|
||||||
|
<input type="file" name="fileToUpload" id="fileToUpload">
|
||||||
|
<input type="submit" value="Przekaż plik" name="submit">
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<footer class="footer">
|
||||||
|
<p>© UAM 2018</p>
|
||||||
|
</footer>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
@ -139,37 +139,14 @@ body {font-family: Verdana, sans-serif;}
|
|||||||
<!-- <a class="btn btn-lg btn-success" href="#" role="button">Test</a> -->
|
<!-- <a class="btn btn-lg btn-success" href="#" role="button">Test</a> -->
|
||||||
<!-- <a class="btn btn-lg btn-success" href="#" role="button">Wyniki</a> -->
|
<!-- <a class="btn btn-lg btn-success" href="#" role="button">Wyniki</a> -->
|
||||||
<a class="btn btn-lg btn-success" href="toAddEvent" role="button">Dodaj wydarzenie</a>
|
<a class="btn btn-lg btn-success" href="toAddEvent" role="button">Dodaj wydarzenie</a>
|
||||||
<a class="btn btn-lg btn-success" href="chat" role="button" style="margin-top:5px;">Czat grupowy</a>
|
<a class="btn btn-lg btn-success" href="chat" role="button" style="margin-top: 5px;">Czat grupowy</a>
|
||||||
|
<!-- <a class="btn btn-lg btn-success" href="toResources" role="button" style="margin-top: 5px;">Dodaj materiały</a> -->
|
||||||
|
<a class="btn btn-lg btn-success" href="toResources" role="button" style="margin-top: 5px;">Podejrzyj materiały</a>
|
||||||
|
<a class="btn btn-lg btn-success" href="stream" role="button" style="margin-top: 5px;">Uruchom testowy stream</a>
|
||||||
<!-- <form action="ch"> -->
|
<!-- <form action="ch"> -->
|
||||||
<!-- <input type="submit" value="Wejdź na czat grupowy" /> -->
|
<!-- <input type="submit" value="Wejdź na czat grupowy" /> -->
|
||||||
<!-- </form> -->
|
<!-- </form> -->
|
||||||
</p>
|
</p>
|
||||||
<table>
|
|
||||||
<tr>
|
|
||||||
<th>Czas</th>
|
|
||||||
<th>Jaka aktywność</th>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td>8:00</td>
|
|
||||||
<td>brak</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td>9:00</td>
|
|
||||||
<td>brak</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td>10:00</td>
|
|
||||||
<td>brak</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td>11:00</td>
|
|
||||||
<td>brak</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td>12:00</td>
|
|
||||||
<td>brak</td>
|
|
||||||
</tr>
|
|
||||||
</table>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
1
uploads/test.txt
Normal file
1
uploads/test.txt
Normal file
@ -0,0 +1 @@
|
|||||||
|
test uploadu
|
1
uploads/test_2.txt
Normal file
1
uploads/test_2.txt
Normal file
@ -0,0 +1 @@
|
|||||||
|
test downloadu
|
Loading…
Reference in New Issue
Block a user