Date: Friday, August 5, 2016 @ 10:44:07 Author: arojas Revision: 185266
Port away from deprecated Flask API Added: sage-notebook/trunk/sagenb-flask-0.11.patch Modified: sage-notebook/trunk/PKGBUILD -------------------------+ PKGBUILD | 18 -- sagenb-flask-0.11.patch | 342 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 347 insertions(+), 13 deletions(-) Modified: PKGBUILD =================================================================== --- PKGBUILD 2016-08-05 10:40:40 UTC (rev 185265) +++ PKGBUILD 2016-08-05 10:44:07 UTC (rev 185266) @@ -4,7 +4,7 @@ pkgname=sage-notebook pkgver=0.13 -pkgrel=2 +pkgrel=3 pkgdesc='Browser-based notebook interface for SageMath' arch=(any) url='http://www.sagemath.org' @@ -12,12 +12,11 @@ depends=(sagemath python2-twisted python2-flask-oldsessions python2-flask-openid python2-flask-autoindex python2-flask-babel mathjax) optdepends=('python2-pyopenssl: to use the notebook in secure mode') makedepends=(gendesk) -source=($pkgname-$pkgver::"https://github.com/sagemath/sagenb/archive/$pkgver.tar.gz" 'sage.service' 'jmol.patch' - "https://pypi.io/packages/source/F/Flask/Flask-0.10.1.tar.gz") +source=($pkgname-$pkgver::"https://github.com/sagemath/sagenb/archive/$pkgver.tar.gz" sage.service jmol.patch sagenb-flask-0.11.patch) md5sums=('f72cd81add5373f74b459957a64074ce' '61620179a7ecd85401d8e5a6ece3ea41' 'b29760c97a5328faa179a46008391bf0' - '378670fe456957eb3c27ddaef60b2b24') + 'a63fe71bfd4b36384ef5b802f592e319') prepare() { # create *.desktop file @@ -42,14 +41,13 @@ # fix displaying 3D plots patch -p0 -i "$srcdir"/jmol.patch +# port away from deprecated Flask API + patch -p0 -i "$srcdir"/sagenb-flask-0.11.patch } build() { cd sagenb-$pkgver python2 setup.py build - - cd "$srcdir"/Flask-0.10.1 - python2 setup.py build } package() { @@ -67,10 +65,4 @@ install -Dm644 "${srcdir}/sage-notebook.desktop" "$pkgdir/usr/share/applications/sage-notebook.desktop" install -Dm644 "$pkgdir/usr/lib/python2.7/site-packages/sagenb/data/sage/images/icon48x48.png" \ "$pkgdir/usr/share/pixmaps/sage-notebook.png" - -# Install flask 0.10 - cd "$srcdir"/Flask-0.10.1 - python2 setup.py install --root "$pkgdir" --optimize=1 - install -d "$pkgdir"/usr/lib/sage/site-packages - mv "$pkgdir"/usr/lib/python2.7/site-packages/{f,F}lask* "$pkgdir"/usr/lib/sage/site-packages } Added: sagenb-flask-0.11.patch =================================================================== --- sagenb-flask-0.11.patch (rev 0) +++ sagenb-flask-0.11.patch 2016-08-05 10:44:07 UTC (rev 185266) @@ -0,0 +1,342 @@ +diff -ur sagenb.orig/flask_version/admin.py sagenb/flask_version/admin.py +--- sagenb.orig/flask_version/admin.py 2016-08-05 12:37:25.543124604 +0200 ++++ sagenb/flask_version/admin.py 2016-08-05 12:36:19.142795085 +0200 +@@ -1,10 +1,10 @@ + import os +-from flask import Module, url_for, render_template, request, session, redirect, g, current_app ++from flask import Blueprint, url_for, render_template, request, session, redirect, g, current_app + from decorators import login_required, admin_required, with_lock +-from flask.ext.babel import Babel, gettext, ngettext, lazy_gettext ++from flask_babel import Babel, gettext, ngettext, lazy_gettext + _ = gettext + +-admin = Module('sagenb.flask_version.admin') ++admin = Blueprint('sagenb.flask_version.admin', __name__) + + @admin.route('/users') + @admin.route('/users/reset/<reset>') +diff -ur sagenb.orig/flask_version/authentication.py sagenb/flask_version/authentication.py +--- sagenb.orig/flask_version/authentication.py 2016-08-05 12:37:25.543124604 +0200 ++++ sagenb/flask_version/authentication.py 2016-08-05 12:36:19.146128435 +0200 +@@ -1,11 +1,11 @@ + import os + import random +-from flask import Module, url_for, render_template, request, session, redirect, g, current_app ++from flask import Blueprint, url_for, render_template, request, session, redirect, g, current_app + from decorators import with_lock +-from flask.ext.babel import gettext, ngettext, lazy_gettext ++from flask_babel import gettext, ngettext, lazy_gettext + _ = gettext + +-authentication = Module('sagenb.flask_version.authentication') ++authentication = Blueprint('sagenb.flask_version.authentication', __name__) + + ################## + # Authentication # +@@ -65,7 +65,7 @@ + #Valid user, everything is okay + session['username'] = username + session.modified = True +- return redirect(request.values.get('next', url_for('base.index'))) ++ return redirect(request.values.get('next', url_for('sagenb.flask_version.base.index'))) + else: + template_dict['password_error'] = True + +diff -ur sagenb.orig/flask_version/base.py sagenb/flask_version/base.py +--- sagenb.orig/flask_version/base.py 2016-08-05 12:37:25.543124604 +0200 ++++ sagenb/flask_version/base.py 2016-08-05 12:36:19.146128435 +0200 +@@ -1,17 +1,17 @@ + #!/usr/bin/env python2 + import os, time, re + from functools import partial +-from flask import Flask, Module, url_for, request, session, redirect, g, make_response, current_app, render_template ++from flask import Flask, Blueprint, url_for, request, session, redirect, g, make_response, current_app, render_template + from decorators import login_required, guest_or_login_required, with_lock + from decorators import global_lock + # Make flask use the old session foo from <=flask-0.9 + from flask_oldsessions import OldSecureCookieSessionInterface + +-from flask.ext.autoindex import AutoIndex ++from flask_autoindex import AutoIndex + from sage.env import SAGE_SRC, SAGE_DOC + SRC = os.path.join(SAGE_SRC, 'sage') +-from flask.ext.openid import OpenID +-from flask.ext.babel import Babel, gettext, ngettext, lazy_gettext, get_locale ++from flask_openid import OpenID ++from flask_babel import Babel, gettext, ngettext, lazy_gettext, get_locale + from sagenb.misc.misc import SAGENB_ROOT, DATA, translations_path, N_, nN_, unicode_str + from json import dumps + from sagenb.notebook.cell import number_of_rows +@@ -83,7 +83,7 @@ + return render_template(os.path.join('html', 'error_message.html'), + **template_dict) + +-base = Module('sagenb.flask_version.base') ++base = Blueprint('sagenb.flask_version.base', __name__) + + ############# + # Main Page # +@@ -95,7 +95,7 @@ + if 'next' in request.args: + response = redirect(request.values.get('next', '')) + return response +- response = redirect(url_for('worksheet_listing.home', username=session['username'])) ++ response = redirect(url_for('sagenb.flask_version.worksheet_listing.home', username=session['username'])) + if 'remember' in request.args: + response.set_cookie('nb_session_%s'%g.notebook.port, + expires=(time.time() + 60 * 60 * 24 * 14)) +diff -ur sagenb.orig/flask_version/decorators.py sagenb/flask_version/decorators.py +--- sagenb.orig/flask_version/decorators.py 2016-08-05 12:37:25.543124604 +0200 ++++ sagenb/flask_version/decorators.py 2016-08-05 12:36:19.142795085 +0200 +@@ -1,6 +1,6 @@ + from functools import wraps + from flask import Flask, url_for, render_template, request, session, redirect, g, current_app +-from flask.ext.babel import Babel, gettext, ngettext, lazy_gettext ++from flask_babel import Babel, gettext, ngettext, lazy_gettext + _ = gettext + + from threading import Lock +@@ -16,7 +16,7 @@ + g.username = 'guest' + return f(*args, **kwds) + else: +- return redirect(url_for('base.index', next=request.url)) ++ return redirect(url_for('sagenb.flask_version.base.index', next=request.url)) + else: + g.username = session['username'] + return f(*args, **kwds) +diff -ur sagenb.orig/flask_version/doc.py sagenb/flask_version/doc.py +--- sagenb.orig/flask_version/doc.py 2016-08-05 12:37:25.543124604 +0200 ++++ sagenb/flask_version/doc.py 2016-08-05 12:36:19.142795085 +0200 +@@ -14,13 +14,13 @@ + + """ + import os +-from flask import Module, url_for, render_template, request, session, redirect, g, current_app ++from flask import Blueprint, url_for, render_template, request, session, redirect, g, current_app + from decorators import login_required, guest_or_login_required + +-from flask.ext.babel import gettext, ngettext, lazy_gettext ++from flask_babel import gettext, ngettext, lazy_gettext + _ = gettext + +-doc = Module('sagenb.flask_version.doc') ++doc = Blueprint('sagenb.flask_version.doc', __name__) + + from sage.env import SAGE_DOC + DOC = os.path.join(SAGE_DOC, 'html', 'en') +diff -ur sagenb.orig/flask_version/settings.py sagenb/flask_version/settings.py +--- sagenb.orig/flask_version/settings.py 2016-08-05 12:37:25.543124604 +0200 ++++ sagenb/flask_version/settings.py 2016-08-05 12:36:19.146128435 +0200 +@@ -1,12 +1,12 @@ + import os + import random +-from flask import Module, url_for, render_template, request, session, redirect, g, current_app ++from flask import Blueprint, url_for, render_template, request, session, redirect, g, current_app + from decorators import login_required, with_lock +-from flask.ext.babel import gettext, ngettext, lazy_gettext ++from flask_babel import gettext, ngettext, lazy_gettext + _ = gettext + + +-settings = Module('sagenb.flask_version.settings') ++settings = Blueprint('sagenb.flask_version.settings', __name__) + + @settings.route('/settings', methods = ['GET','POST']) + @login_required +diff -ur sagenb.orig/flask_version/worksheet_listing.py sagenb/flask_version/worksheet_listing.py +--- sagenb.orig/flask_version/worksheet_listing.py 2016-08-05 12:37:25.543124604 +0200 ++++ sagenb/flask_version/worksheet_listing.py 2016-08-05 12:36:19.146128435 +0200 +@@ -2,12 +2,12 @@ + """ + import os + import urllib, urlparse +-from flask import Module, url_for, render_template, request, session, redirect, g, current_app ++from flask import Blueprint, url_for, render_template, request, session, redirect, g, current_app + from decorators import login_required, guest_or_login_required, with_lock +-from flask.ext.babel import Babel, gettext, ngettext, lazy_gettext ++from flask_babel import Babel, gettext, ngettext, lazy_gettext + _ = gettext + +-worksheet_listing = Module('sagenb.flask_version.worksheet_listing') ++worksheet_listing = Blueprint('sagenb.flask_version.worksheet_listing', __name__) + + def render_worksheet_list(args, pub, username): + """ +@@ -69,7 +69,7 @@ + @worksheet_listing.route('/home/') + @login_required + def bare_home(): +- return redirect(url_for('home', username=g.username)) ++ return redirect(url_for('sagenb.flask_version.home', username=g.username)) + + ########### + # Folders # +diff -ur sagenb.orig/flask_version/worksheet.py sagenb/flask_version/worksheet.py +--- sagenb.orig/flask_version/worksheet.py 2016-08-05 12:37:25.543124604 +0200 ++++ sagenb/flask_version/worksheet.py 2016-08-05 12:36:19.146128435 +0200 +@@ -1,17 +1,17 @@ + import re + import os, threading, collections + from functools import wraps +-from flask import Module, make_response, url_for, render_template, request, session, redirect, g, current_app ++from flask import Blueprint, make_response, url_for, render_template, request, session, redirect, g, current_app + from decorators import login_required, with_lock + from collections import defaultdict + from werkzeug.utils import secure_filename +-from flask.ext.babel import Babel, gettext, ngettext, lazy_gettext ++from flask_babel import Babel, gettext, ngettext, lazy_gettext + _ = gettext + + from sagenb.notebook.interact import INTERACT_UPDATE_PREFIX + from sagenb.notebook.misc import encode_response + +-ws = Module('sagenb.flask_version.worksheet') ++ws = Blueprint('sagenb.flask_version.worksheet', __name__) + worksheet_locks = defaultdict(threading.Lock) + + def worksheet_view(f): +@@ -53,7 +53,7 @@ + """ + Returns the url for a given worksheet. + """ +- return url_for('worksheet.worksheet', username=worksheet.owner(), ++ return url_for('sagenb.flask_version.worksheet.worksheet', username=worksheet.owner(), + id=worksheet.filename_without_owner()) + + +@@ -76,7 +76,7 @@ + @login_required + def new_worksheet(): + if g.notebook.readonly_user(g.username): +- return current_app.message(_("Account is in read-only mode"), cont=url_for('worksheet_listing.home', username=g.username)) ++ return current_app.message(_("Account is in read-only mode"), cont=url_for('sagenb.flask_version.worksheet_listing.home', username=g.username)) + + W = g.notebook.create_new_worksheet(gettext("Untitled"), g.username) + return redirect(url_for_worksheet(W)) +@@ -126,7 +126,7 @@ + raise NotImplementedError("User _sage_ can not access URL %s"%target) + if g.notebook.readonly_user(g.username): + if target.split('/')[0] not in readonly_commands_allowed: +- return current_app.message(_("Account is in read-only mode"), cont=url_for('worksheet_listing.home', username=g.username)) ++ return current_app.message(_("Account is in read-only mode"), cont=url_for('sagenb.flask_version.worksheet_listing.home', username=g.username)) + + #Make worksheet a non-keyword argument appearing before the + #other non-keyword arguments. +diff -ur sagenb.orig/notebook/challenge.py sagenb/notebook/challenge.py +--- sagenb.orig/notebook/challenge.py 2016-08-05 12:37:25.546457953 +0200 ++++ sagenb/notebook/challenge.py 2016-08-05 12:36:19.169461885 +0200 +@@ -27,7 +27,7 @@ + import os, random, re, urllib2, urllib + + from sagenb.notebook.template import template +-from flask.ext.babel import gettext, lazy_gettext ++from flask_babel import gettext, lazy_gettext + _ = lazy_gettext + + class ChallengeResponse(object): +diff -ur sagenb.orig/notebook/conf.py sagenb/notebook/conf.py +--- sagenb.orig/notebook/conf.py 2016-08-05 12:37:25.546457953 +0200 ++++ sagenb/notebook/conf.py 2016-08-05 12:36:19.169461885 +0200 +@@ -9,7 +9,7 @@ + # The full text of the GPL is available at: + # http://www.gnu.org/licenses/ + ############################################################################# +-from flask.ext.babel import gettext, lazy_gettext ++from flask_babel import gettext, lazy_gettext + + POS = 'pos' + DESC = 'desc' +diff -ur sagenb.orig/notebook/notebook.py sagenb/notebook/notebook.py +--- sagenb.orig/notebook/notebook.py 2016-08-05 12:37:25.546457953 +0200 ++++ sagenb/notebook/notebook.py 2016-08-05 12:36:19.169461885 +0200 +@@ -45,7 +45,7 @@ + from . import user_conf # user configuration + from . import user # users + from template import template, prettify_time_ago +-from flask.ext.babel import gettext, lazy_gettext ++from flask_babel import gettext, lazy_gettext + + try: + # sage is installed +diff -ur sagenb.orig/notebook/register.py sagenb/notebook/register.py +--- sagenb.orig/notebook/register.py 2016-08-05 12:37:25.546457953 +0200 ++++ sagenb/notebook/register.py 2016-08-05 12:36:19.169461885 +0200 +@@ -12,7 +12,7 @@ + """ + Helper functions dealing with the verification of user + """ +-from flask.ext.babel import gettext as _ ++from flask_babel import gettext as _ + + def build_msg(key, username, addr, port, secure): + url_prefix = "https" if secure else "http" +diff -ur sagenb.orig/notebook/server_conf.py sagenb/notebook/server_conf.py +--- sagenb.orig/notebook/server_conf.py 2016-08-05 12:37:25.546457953 +0200 ++++ sagenb/notebook/server_conf.py 2016-08-05 12:36:19.169461885 +0200 +@@ -8,7 +8,7 @@ + from conf import (POS, DESC, GROUP, TYPE, CHOICES, T_BOOL, T_INTEGER, + T_CHOICE, T_REAL, T_COLOR, T_STRING, T_LIST, T_INFO) + from sagenb.misc.misc import get_languages, N_ +-from flask.ext.babel import gettext, lazy_gettext ++from flask_babel import gettext, lazy_gettext + _ = lazy_gettext + + defaults = {'word_wrap_cols':72, +diff -ur sagenb.orig/notebook/template.py sagenb/notebook/template.py +--- sagenb.orig/notebook/template.py 2016-08-05 12:37:25.546457953 +0200 ++++ sagenb/notebook/template.py 2016-08-05 12:36:19.169461885 +0200 +@@ -20,7 +20,7 @@ + import os, re, sys + + from sagenb.misc.misc import SAGE_VERSION, DATA +-from flask.ext.babel import gettext, ngettext, lazy_gettext ++from flask_babel import gettext, ngettext, lazy_gettext + from flask import current_app as app + + if os.environ.has_key('SAGENB_TEMPLATE_PATH'): +diff -ur sagenb.orig/notebook/tutorial.py sagenb/notebook/tutorial.py +--- sagenb.orig/notebook/tutorial.py 2016-08-05 12:37:25.546457953 +0200 ++++ sagenb/notebook/tutorial.py 2016-08-05 12:36:19.169461885 +0200 +@@ -348,7 +348,7 @@ + + ##################################### + +-from flask.ext.babel import lazy_gettext as _ ++from flask_babel import lazy_gettext as _ + + notebook_help = [ + (_('Find Help and Documentation'), +diff -ur sagenb.orig/notebook/user_conf.py sagenb/notebook/user_conf.py +--- sagenb.orig/notebook/user_conf.py 2016-08-05 12:37:25.546457953 +0200 ++++ sagenb/notebook/user_conf.py 2016-08-05 12:36:19.216128785 +0200 +@@ -7,7 +7,7 @@ + from conf import (Configuration, POS, DESC, GROUP, TYPE, CHOICES, T_BOOL, + T_INTEGER, T_CHOICE, T_REAL, T_COLOR, T_STRING, T_LIST) + from sagenb.misc.misc import SAGENB_ROOT, get_languages +-from flask.ext.babel import lazy_gettext ++from flask_babel import lazy_gettext + + defaults = {'max_history_length':1000, + 'default_system':'sage', +diff -ur sagenb.orig/notebook/worksheet.py sagenb/notebook/worksheet.py +--- sagenb.orig/notebook/worksheet.py 2016-08-05 12:37:25.546457953 +0200 ++++ sagenb/notebook/worksheet.py 2016-08-05 12:36:19.172795235 +0200 +@@ -56,7 +56,7 @@ + # Imports specifically relevant to the sage notebook + from cell import Cell, TextCell + from template import template, clean_name, prettify_time_ago +-from flask.ext.babel import gettext, lazy_gettext ++from flask_babel import gettext, lazy_gettext + _ = gettext + + # Set some constants that will be used for regular expressions below. +@@ -4405,7 +4405,7 @@ + Converts ``t`` (in Unix time) to a locale-specific string + describing the time and date. + """ +- from flask.ext.babel import format_datetime ++ from flask_babel import format_datetime + import datetime, time + try: + return format_datetime(datetime.datetime.fromtimestamp(float(t)))
