def METHOD_NAME(cls, target, func):
    """
    Adds a parser function for the config tree.
    :param target: A string identifier for the first set of child
        nodes of this tree (e.g. 'resolvers', 'realms', etc)
        Multiple parsers for the same string identifier can
        exist.
    :param func: A parser function that asks for the composite
        key of the config entry and the value and returns a
        tuple (object_id, attr_updates) where object_id is a
        unique identifier inside the target scope (such as a
        resolver name) and attr_updates is a dictionary
        consisting of key-value-pairs where each keys is
        an attribute name and each value its value.
    .. warning:: The order in which the parsers are added
        is relevant. Later parsers have a higher priority
    """
    # the following is a hack.
    # we are facing the problem, that we need information
    # from different modules (such as the list of available
    # resolver types) in order to define the parsing function
    # for the module. we can't simply import this data in here
    # because it produces circular dependencies (most of the
    # modules use functions from the config module).
    # because of this, with this commit, we change this method
    # into a class method and delegate the calls to add_parser
    # to the different modules. add_parser will now be called
    # in the respective modules with the parser function defined
    # there as well.
    # however, we have 2 basic config types ('globals' and 'deprecated'),
    # that have no distinction criteria to the other config entries and
    # rely on the other parsers being processed first
    # because we cannot possibly control import order (at least not
    # at our current stage of insanity) we need to make sure that
    # the parsers for 'globals' and 'deprecated' always come last.
    # this problem is 'solved' by adding both 'globals' and
    # 'deprecated' parsers at the class level (see above) and
    # by PREPENDING every other parser that gets added from
    # outside, effectively reversing the order of priority.
    # (from later ^= lower_prio to later ^= higher prio)
    cls._parsers.insert(0, (target, func))