bsp uwsgi

This commit is contained in:
www
2020-09-01 20:53:48 +00:00
parent 4c8ef46c6a
commit 49c7387592
8 changed files with 116 additions and 41 deletions

5
.gitignore vendored
View File

@@ -2,4 +2,7 @@ node_modules/
*.yaml *.yaml
*.html *.html
*.png *.png
.env/ .env/
zips/*
flaskapp/build/*
*.pyc

13
bsp.service Normal file
View 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

View File

@@ -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')

0
htpasswd Normal file
View File

1
run
View File

@@ -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
View File

@@ -0,0 +1,7 @@
from flaskapp.token import TokenCollection
tc=TokenCollection("tokens.yaml")
t=tc.create()
print(t)
print(tc.is_valid(t))

0
uwsgi.log Normal file
View File

22
uwsgibsp.ini Normal file
View 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