activitypub/activitypub/manager/flaskman.py

85 wiersze
2.6 KiB
Python

try:
from flask import (Flask, Response, abort,
jsonify as flask_jsonify,
redirect, render_template,
request, session, url_for)
from flask_wtf.csrf import CSRFProtect
from flask import jsonify
except:
pass # flask not available
from .base import Manager, wrap_function, app
class FlaskManager(Manager):
"""
"""
def render_json(self, obj):
return jsonify(obj) # has correct header type set
def get_argument(self, name, default_value=None):
return request.args.get(name, default_value)
def render_template(self, template_name, **kwargs):
values = {}
for f in app.get_context_processors():
values.update(f(self))
values.update(kwargs)
return render_template(template_name, **values)
def error(self, error_number):
return self.render_template("%s.html" % error_number), error_number
def redirect(self, url):
return redirect(url)
def url_for(self, name):
return url_for(name)
@property
def request(self):
return request
def run(self):
self.app = Flask(__name__,
template_folder=self.get_template_folder(),
static_folder=self.get_static_folder())
self.app.config.update(WTF_CSRF_CHECK_DEFAULT=False)
self.app.config["CSS"] = self.CSS
self.app.config.update(self.config)
self.csrf = CSRFProtect(self.app)
## Add routes:
for path, methods, f, kwargs in app._data.routes:
## Add the route:
self.app.route(path, methods=methods, **kwargs)(wrap_function(self, f))
## Add filters:
for f in app._data.filters:
## Add the template filter function:
self.app.template_filter()(wrap_function(self, f))
self.app.run(debug=1, port=self.port)
def load_secret_key(self, name):
key = self._load_secret_key(name)
self.app.secret_key = key
def after_request(self, f):
"""
Decorator
"""
return self.app.after_request(f)
def template_filter(self):
"""
Decorator
"""
def decorator(f):
self.app.template_filter()(f)
return decorator
def login_required(self, f):
@wraps(f)
def decorated_function(*args, **kwargs):
if not session.get("logged_in"):
return redirect(url_for("login", next=request.url))
return f(*args, **kwargs)
return decorated_function