diff options
author | Cédric Bonhomme <cedric@cedricbonhomme.org> | 2015-11-25 22:45:43 +0100 |
---|---|---|
committer | Cédric Bonhomme <cedric@cedricbonhomme.org> | 2015-11-25 22:45:43 +0100 |
commit | b2618e9404b84cc62d4becb02436233a0d53b375 (patch) | |
tree | a31f2dc76d23967fa0243374cf475923a4b7e451 /web/decorators.py | |
parent | Updated default platform URL (for Heroku...). (diff) | |
download | newspipe-b2618e9404b84cc62d4becb02436233a0d53b375.tar.gz newspipe-b2618e9404b84cc62d4becb02436233a0d53b375.tar.bz2 newspipe-b2618e9404b84cc62d4becb02436233a0d53b375.zip |
Rfactorization. Just a start...
Diffstat (limited to 'web/decorators.py')
-rw-r--r-- | web/decorators.py | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/web/decorators.py b/web/decorators.py new file mode 100644 index 00000000..6572b9f4 --- /dev/null +++ b/web/decorators.py @@ -0,0 +1,50 @@ +#! /usr/bin/env python +# -*- coding: utf-8 -*- + +from threading import Thread +from functools import wraps + +from flask import g, redirect, url_for, flash +from flask.ext.babel import gettext +from flask.ext.login import login_required + +from web.models import Feed + + +def async(f): + """ + This decorator enables to launch a task (for examle sending an email or + indexing the database) in background. + This prevent the server to freeze. + """ + def wrapper(*args, **kwargs): + thr = Thread(target=f, args=args, kwargs=kwargs) + thr.start() + return wrapper + + +def feed_access_required(func): + """ + This decorator enables to check if a user has access to a feed. + The administrator of the platform is able to access to the feeds + of a normal user. + """ + @wraps(func) + def decorated(*args, **kwargs): + if kwargs.get('feed_id', None) is not None: + feed = Feed.query.filter(Feed.id == kwargs.get('feed_id', None)).first() + if feed is not None and (feed.subscriber.id == g.user.id or g.user.is_admin()): + return func(*args, **kwargs) + flash("This feed do not exist.", "danger") + return redirect(url_for('home')) + else: + return func(*args, **kwargs) + return decorated + + +def pyagg_default_decorator(func): + @login_required + @wraps(func) + def wrapper(*args, **kwargs): + return func(*args, **kwargs) + return wrapper |