
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)


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

  
  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):
+         conf = config_settings_loader()
-         context[self.variable_name] = self.conf.get_available_idps()
+         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
## Code Before:

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)

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

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)
