# Copyright (C) 2011 Yaco Sistemas (http://www.yaco.es)
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#            http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

from django import template

from djangosaml2.conf import config_settings_loader

register = template.Library()


class IdPListNode(template.Node):

    def __init__(self, variable_name):
        self.variable_name = variable_name
        self.conf = config_settings_loader()

    def render(self, context):
        context[self.variable_name] = self.conf.get_available_idps()
        return ''


@register.tag
def idplist(parser, token):
    try:
        tag_name, as_part, variable = token.split_contents()
    except ValueError:
        raise template.TemplateSyntaxError(
            '%r tag requires two arguments' % token.contents.split()[0])
    if not as_part == 'as':
        raise template.TemplateSyntaxError(
            '%r tag first argument must be the literal "as"' % tag_name)

    return IdPListNode(variable)

# Copyright (C) 2011 Yaco Sistemas (http://www.yaco.es)
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#            http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

from django import template

from djangosaml2.conf import config_settings_loader

register = template.Library()


class IdPListNode(template.Node):

    def __init__(self, variable_name):
        self.variable_name = variable_name

    def render(self, context):
        conf = config_settings_loader()
        context[self.variable_name] = conf.get_available_idps()
        return ''


@register.tag
def idplist(parser, token):
    try:
        tag_name, as_part, variable = token.split_contents()
    except ValueError:
        raise template.TemplateSyntaxError(
            '%r tag requires two arguments' % token.contents.split()[0])
    if not as_part == 'as':
        raise template.TemplateSyntaxError(
            '%r tag first argument must be the literal "as"' % tag_name)

    return IdPListNode(variable)

Load the config as late as possible to avoid crashing when the configuration is not ready yet. Also this code is more reentrant
Load the config as late as possible to avoid crashing when the configuration is not ready yet. Also this code is more reentrant
