diff --git a/uffd/invite/views.py b/uffd/invite/views.py index d6500a70938a9f3f95471a031929cb0f4dc63f54..a0a00e86edf8d6e6dd3f5244ee0529a5dc689430 100644 --- a/uffd/invite/views.py +++ b/uffd/invite/views.py @@ -15,7 +15,6 @@ from uffd.navbar import register_navbar from uffd.ratelimit import host_ratelimit, format_delay from uffd.signup.views import signup_ratelimit -raise ValueError bp = Blueprint('invite', __name__, template_folder='templates', url_prefix='/invite/') diff --git a/uffd/navbar.py b/uffd/navbar.py index dc46b76355f9d0cbfc0b3037a42a1d56b11bed81..f5e244bea0dd6e2eb69c0cbc392dc288025eaec2 100644 --- a/uffd/navbar.py +++ b/uffd/navbar.py @@ -1,9 +1,6 @@ -# pylint: disable=invalid-name -navbarList = [] -# pylint: enable=invalid-name - def setup_navbar(app): - app.jinja_env.globals['getnavbar'] = lambda: [n for n in navbarList if n['visible']()] + app.navbarList = [] + app.jinja_env.globals['getnavbar'] = lambda: [n for n in app.navbarList if n['visible']()] # iconlib can be 'bootstrap' # ( see: http://getbootstrap.com/components/#glyphicons ) @@ -12,22 +9,35 @@ def setup_navbar(app): # visible is a function that returns "True" if this icon should be visible in the calling context def register_navbar(name, iconlib='fa', icon=None, group=None, endpoint=None, blueprint=None, visible=None): def wrapper(func): - urlendpoint = endpoint - if not endpoint: - # pylint: disable=protected-access - if blueprint: - urlendpoint = "{}.{}".format(blueprint.name, func.__name__) - else: - urlendpoint = func.__name_ + def deferred_call(state): + urlendpoint = endpoint + if not endpoint: + # pylint: disable=protected-access + if blueprint: + urlendpoint = "{}.{}".format(blueprint.name, func.__name__) + else: + urlendpoint = func.__name_ # pylint: enable=protected-access - item = {} - item['iconlib'] = iconlib - item['icon'] = icon - item['group'] = group - item['endpoint'] = urlendpoint - item['name'] = name - item['blueprint'] = blueprint - item['visible'] = visible or (lambda: True) - navbarList.append(item) + item = {} + item['iconlib'] = iconlib + item['icon'] = icon + item['group'] = group + item['endpoint'] = urlendpoint + item['name'] = name + item['blueprint'] = blueprint + item['visible'] = visible or (lambda: True) + + state.app.navbarList.append(item) + + if blueprint: + blueprint.record_once(deferred_call) + else: + class StateMock: + def __init__(self, app): + self.app = app + from flask import current_app + deferred_call(StateMock(current_app)) + return func - return wrapper + + return wrapper \ No newline at end of file