kopia lustrzana https://github.com/dsblank/activitypub
85 wiersze
2.6 KiB
Python
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
|