bsp uwsgi
This commit is contained in:
5
.gitignore
vendored
5
.gitignore
vendored
@@ -2,4 +2,7 @@ node_modules/
|
|||||||
*.yaml
|
*.yaml
|
||||||
*.html
|
*.html
|
||||||
*.png
|
*.png
|
||||||
.env/
|
.env/
|
||||||
|
zips/*
|
||||||
|
flaskapp/build/*
|
||||||
|
*.pyc
|
||||||
13
bsp.service
Normal file
13
bsp.service
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=uWSGI Simple Sample for Flat Page with Index Default
|
||||||
|
After=network.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
#User=www-data
|
||||||
|
#Group=www-data
|
||||||
|
WorkingDirectory=/srv/andis_test/testw3m/
|
||||||
|
Environment="PATH=/srv/andis_test/testw3m/.env/bin"
|
||||||
|
ExecStart=/srv/andis_test/testw3m/.env/bin/uwsgi --ini uwsgi.ini
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
@@ -3,7 +3,7 @@
|
|||||||
"""
|
"""
|
||||||
import logging
|
import logging
|
||||||
import sys
|
import sys
|
||||||
from flask import Flask, Blueprint,render_template, send_from_directory,jsonify, url_for, abort
|
from flask import Flask, Blueprint,render_template, send_from_directory,jsonify,redirect, url_for, abort,flash
|
||||||
from flask_frozen import Freezer
|
from flask_frozen import Freezer
|
||||||
from config import Config
|
from config import Config
|
||||||
import os
|
import os
|
||||||
@@ -15,13 +15,18 @@ from flask_mail import Mail,Message
|
|||||||
from zipfile import ZipFile
|
from zipfile import ZipFile
|
||||||
from .token import TokenCollection
|
from .token import TokenCollection
|
||||||
from flask import request
|
from flask import request
|
||||||
|
from cachetools import TTLCache, cached
|
||||||
|
from werkzeug.utils import secure_filename
|
||||||
# Initialize application
|
# Initialize application
|
||||||
app = Flask(__name__)
|
app = Flask(__name__)
|
||||||
app.config['MAIL_SERVER']= "buran.htu.tuwien.ac.at"
|
app.config['MAIL_SERVER']= "buran.htu.tuwien.ac.at"
|
||||||
app.config['MAIL_DEFAULT_SENDER']="andis@fet.at"
|
app.config['MAIL_DEFAULT_SENDER']="andis@fet.at"
|
||||||
app.config['FREEZER_DESTINATION_IGNORE']=['*.zip',"intern"]
|
app.config['FREEZER_DESTINATION_IGNORE']=['*.zip',"*intern*"]
|
||||||
|
app.config['FREEZER_STATIC_IGNORE']=['*.zip',"*intern*"]
|
||||||
|
|
||||||
mail=Mail(app)
|
mail=Mail(app)
|
||||||
app.config["url_prefix"]=""
|
app.secret_key = b'_5#y2L"F4Q8z\n\xec]/'
|
||||||
|
app.config["url_prefix"]="/bsp"
|
||||||
app.logger.setLevel(logging.DEBUG)
|
app.logger.setLevel(logging.DEBUG)
|
||||||
# Initialize FlatPages Index
|
# Initialize FlatPages Index
|
||||||
tokens = TokenCollection("tokens.yaml")
|
tokens = TokenCollection("tokens.yaml")
|
||||||
@@ -31,41 +36,48 @@ tokens = TokenCollection("tokens.yaml")
|
|||||||
# recipients=["andis@fet.at"])
|
# recipients=["andis@fet.at"])
|
||||||
|
|
||||||
#mail.send(msg)
|
#mail.send(msg)
|
||||||
|
UPLOAD_FOLDER = 'uploads'
|
||||||
|
ALLOWED_EXTENSIONS = {'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
|
||||||
|
|
||||||
|
@cached(cache=TTLCache(maxsize=1024, ttl=3600))
|
||||||
|
def load_lvas_folders_studien():
|
||||||
|
lvas=[]
|
||||||
|
studien={}
|
||||||
|
#search the data directory for yaml files
|
||||||
|
for base,_, files in os.walk("data"):
|
||||||
|
for fn in files:
|
||||||
|
if re.match(".*yaml$", fn):
|
||||||
|
with open(os.path.join("data",fn),"r") as f:
|
||||||
|
data=yaml.load(f.read(),yaml.Loader)
|
||||||
|
studien[fn]=data
|
||||||
|
|
||||||
|
|
||||||
|
with open(os.path.join("test.yaml"),"w") as f:
|
||||||
lvas=[]
|
f.write(yaml.dump(studien))
|
||||||
studien={}
|
|
||||||
#search the data directory for yaml files
|
|
||||||
for base,_, files in os.walk("data"):
|
|
||||||
for fn in files:
|
|
||||||
if re.match(".*yaml$", fn):
|
|
||||||
with open(os.path.join("data",fn),"r") as f:
|
|
||||||
data=yaml.load(f.read(),yaml.Loader)
|
|
||||||
studien[fn]=data
|
|
||||||
|
|
||||||
|
|
||||||
with open(os.path.join("test.yaml"),"w") as f:
|
|
||||||
f.write(yaml.dump(studien))
|
|
||||||
|
|
||||||
# create a lva list from the structure
|
# create a lva list from the structure
|
||||||
for studium, lvaliste in studien.items():
|
for studium, lvaliste in studien.items():
|
||||||
for k,lva in lvaliste.items():
|
for k,lva in lvaliste.items():
|
||||||
if len(lva)>3:
|
if len(lva)>3:
|
||||||
lvas+=[lva]
|
lvas+=[lva]
|
||||||
|
folders={}
|
||||||
|
|
||||||
folders={}
|
with open(os.path.join("testlvaliste.yaml"),"w") as f:
|
||||||
|
|
||||||
with open(os.path.join("testlvaliste.yaml"),"w") as f:
|
|
||||||
f.write(yaml.dump(lvas))
|
f.write(yaml.dump(lvas))
|
||||||
# make folders compact in lva
|
# make folders compact in lva
|
||||||
for lva in lvas:
|
for lva in lvas:
|
||||||
for l in lva["courses"]:
|
for l in lva["courses"]:
|
||||||
if "folders" in l:
|
if "folders" in l:
|
||||||
for folder in l["folders"]:
|
for folder in l["folders"]:
|
||||||
folders[folder["folder"]]= folder["folderpath"]
|
folders[folder["folder"]]= folder["folderpath"]
|
||||||
|
|
||||||
|
|
||||||
|
return lvas, folders, studien
|
||||||
|
|
||||||
app.logger.info('Initialize FET BSP Sammlung')
|
app.logger.info('Initialize FET BSP Sammlung')
|
||||||
|
|
||||||
@@ -92,23 +104,40 @@ def send_a_mail():
|
|||||||
return "Done", 200
|
return "Done", 200
|
||||||
|
|
||||||
#@page_blueprint.route('/<path:name>/',strict_slashes=False)
|
#@page_blueprint.route('/<path:name>/',strict_slashes=False)
|
||||||
@page_blueprint.route('/')
|
@page_blueprint.route('/', methods=['GET', 'POST'])
|
||||||
def index():
|
def index():
|
||||||
|
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['file']
|
||||||
|
# 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)
|
||||||
|
folder=os.path.join(app.config['UPLOAD_FOLDER'],secure_filename(request.form["lva"]))
|
||||||
|
os.makedirs(folder)
|
||||||
|
file.save(os.path.join(folder, filename))
|
||||||
|
flash('Vielen Dank für deinen Upload')
|
||||||
|
return redirect(request.url)
|
||||||
|
lvas,folders,studien=load_lvas_folders_studien()
|
||||||
return render_template("lva_liste.html", lvas=lvas,zip=False)
|
return render_template("lva_liste.html", lvas=lvas,zip=False)
|
||||||
|
|
||||||
@page_blueprint.route('/intern/zips.html')
|
|
||||||
def indexzips():
|
|
||||||
return render_template("lva_liste.html", lvas=lvas,zip=True)
|
|
||||||
|
|
||||||
@page_blueprint.route('intern/createtoken.html')
|
@page_blueprint.route('intern/index.html')
|
||||||
def createtoken():
|
def indexzips():
|
||||||
t=tokens.create()
|
t=tokens.create()
|
||||||
|
lvas,folders,studien=load_lvas_folders_studien()
|
||||||
return render_template("lva_liste.html", lvas=lvas,zip=True, token=t)
|
return render_template("lva_liste.html", lvas=lvas,zip=True, token=t)
|
||||||
|
|
||||||
|
|
||||||
@page_blueprint.route('intern/zips//<name>.zip')
|
@page_blueprint.route('zips//<name>.zip')
|
||||||
def files(name):
|
def files(name):
|
||||||
|
lvas, folders =load_lvas_folders_studien()
|
||||||
token = request.args.get('token')
|
token = request.args.get('token')
|
||||||
# create a ZipFile objec
|
# create a ZipFile objec
|
||||||
if not name in folders:
|
if not name in folders:
|
||||||
@@ -133,7 +162,9 @@ def api_index(name='index'):
|
|||||||
return jsonify(page={}), 200, {'Content-Type': 'application/json; charset=utf-8'}
|
return jsonify(page={}), 200, {'Content-Type': 'application/json; charset=utf-8'}
|
||||||
|
|
||||||
|
|
||||||
|
@freezer.register_generator
|
||||||
|
def url_freeze():
|
||||||
|
yield "/"
|
||||||
|
|
||||||
app.register_blueprint(page_blueprint, url_prefix=app.config["url_prefix"],static_folder='static')
|
app.register_blueprint(page_blueprint, url_prefix=app.config["url_prefix"],static_folder='static')
|
||||||
app.register_blueprint(api_blueprint, url_prefix=app.config["url_prefix"]+"/api/",static_folder='static')
|
app.register_blueprint(api_blueprint, url_prefix=app.config["url_prefix"]+"/api/",static_folder='static')
|
||||||
|
|||||||
1
run
1
run
@@ -1,4 +1,3 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
source .env/bin/activate
|
source .env/bin/activate
|
||||||
node fetch_curricula.js
|
node fetch_curricula.js
|
||||||
python run.py build
|
|
||||||
7
test_tokens.py
Normal file
7
test_tokens.py
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
from flaskapp.token import TokenCollection
|
||||||
|
|
||||||
|
|
||||||
|
tc=TokenCollection("tokens.yaml")
|
||||||
|
t=tc.create()
|
||||||
|
print(t)
|
||||||
|
print(tc.is_valid(t))
|
||||||
22
uwsgibsp.ini
Normal file
22
uwsgibsp.ini
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
[uwsgi]
|
||||||
|
# User and group www-data on debian
|
||||||
|
uid = 33
|
||||||
|
gid = 33
|
||||||
|
master = true
|
||||||
|
# No. of processes can be increased
|
||||||
|
processes = 3
|
||||||
|
chown-socket =www-data:www-data
|
||||||
|
virtualenv = /srv/andis_test/testw3m/.env
|
||||||
|
pythonpath = /srv/andis_test/testw3m/
|
||||||
|
pidfile=/var/run/bsp.pid
|
||||||
|
socket = /var/run/bsp.sock
|
||||||
|
chmod-socket = 666
|
||||||
|
module = flaskapp
|
||||||
|
callable= app
|
||||||
|
wsgi-file = run.py
|
||||||
|
logdate = true
|
||||||
|
logger = file:/srv/andis_test/testw3m/uwsgi.log
|
||||||
|
loglevel = debug
|
||||||
|
gevent = 100
|
||||||
|
vacuum=true
|
||||||
|
#plugins=python3,logfile
|
||||||
Reference in New Issue
Block a user