diff --git a/pagure/default_config.py b/pagure/default_config.py index c3e6ee3..220ce52 100644 --- a/pagure/default_config.py +++ b/pagure/default_config.py @@ -48,6 +48,7 @@ MAX_CONTENT_LENGTH = 4 * 1024 * 1024 # 4 megabytes IP_ALLOWED_INTERNAL = ['127.0.0.1', 'localhost', '::1'] # Redis configuration +REDIS_EVENTSOURCE = True REDIS_HOST = 'localhost' REDIS_PORT = 6379 REDIS_DB = 0 diff --git a/pagure/templates/issue.html b/pagure/templates/issue.html index 7d4bd1a..a674602 100644 --- a/pagure/templates/issue.html +++ b/pagure/templates/issue.html @@ -328,7 +328,7 @@ $(function() { }); }); - +{% if config['REDIS_EVENTSOURCE'] %} var source = null; if (!!window.EventSource) { source = new EventSource('{{ @@ -496,6 +496,7 @@ source.addEventListener('message', function(e) { } }, false); +{% endif %} diff --git a/pagure/ui/issues.py b/pagure/ui/issues.py index d9fb3bd..3ffc688 100644 --- a/pagure/ui/issues.py +++ b/pagure/ui/issues.py @@ -506,40 +506,41 @@ def view_issue(repo, issueid, username=None): ) -@APP.route('//issue//stream') -@APP.route('/fork///issue//stream') -def stream_issue(repo, issueid, username=None): - """ Streams the changes made to an issue live - """ +if APP.config['REDIS_EVENTSOURCE']: + @APP.route('//issue//stream') + @APP.route('/fork///issue//stream') + def stream_issue(repo, issueid, username=None): + """ Streams the changes made to an issue live + """ - repo = pagure.lib.get_project(SESSION, repo, user=username) + repo = pagure.lib.get_project(SESSION, repo, user=username) - if repo is None: - flask.abort(404, 'Project not found') + if repo is None: + flask.abort(404, 'Project not found') - if not repo.settings.get('issue_tracker', True): - flask.abort(404, 'No issue tracker found for this project') + if not repo.settings.get('issue_tracker', True): + flask.abort(404, 'No issue tracker found for this project') - issue = pagure.lib.search_issues(SESSION, repo, issueid=issueid) + issue = pagure.lib.search_issues(SESSION, repo, issueid=issueid) - if issue is None or issue.project != repo: - flask.abort(404, 'Issue not found') + if issue is None or issue.project != repo: + flask.abort(404, 'Issue not found') - if issue.private and not is_repo_admin(repo) \ - and (not authenticated() or - not issue.user.user == flask.g.fas_user.username): - flask.abort( - 403, 'This issue is private and you are not allowed to view it') + if issue.private and not is_repo_admin(repo) \ + and (not authenticated() or + not issue.user.user == flask.g.fas_user.username): + flask.abort( + 403, 'This issue is private and you are not allowed to view it') - pubsub = REDIS.pubsub() - pubsub.subscribe(issue.uid) - def event_stream(pubsub): - for message in pubsub.listen(): - yield 'data: %s\n\n' % message['data'] + pubsub = REDIS.pubsub() + pubsub.subscribe(issue.uid) + def event_stream(pubsub): + for message in pubsub.listen(): + yield 'data: %s\n\n' % message['data'] - return flask.Response( - event_stream(pubsub), - mimetype="text/event-stream") + return flask.Response( + event_stream(pubsub), + mimetype="text/event-stream") @APP.route('//issue//drop', methods=['POST'])