Source code for dhcpkit.ipv6.server.extensions.leasequery.config

"""
Config processing for a handler to echo a LinkLayerIdOption back to the relay
"""

import logging

from ZConfig.datatypes import existing_dirpath
from dhcpkit.common.server.config_datatypes import unsigned_int_16
from dhcpkit.common.server.config_elements import ConfigElementFactory
from dhcpkit.ipv6.option_registry import option_registry
from dhcpkit.ipv6.server.extensions.leasequery import LeasequeryHandler
from dhcpkit.ipv6.server.extensions.leasequery.sqlite import LeasequerySqliteStore
from dhcpkit.ipv6.server.handlers import HandlerFactory

logger = logging.getLogger(__name__)


[docs]def sensitive_option_name(value: str) -> int: """ If the argument is a number then check if it is a 16-bit unsigned integer and return it. Otherwise see if we have an option implementation with the given name, and return its option-type code. :param value: The name or number of a DHCPv6 option :return: The number of the option """ try: return unsigned_int_16(value) except ValueError: try: # Not a valid number, try by name return option_registry.by_name[value].option_type except KeyError: raise ValueError("Option {} is not a valid DHCPv6 option".format(value))
[docs]class LeasequeryHandlerFactory(HandlerFactory): """ Config processing for a handler to echo a LinkLayerIdOption back to the relay """ def __init__(self, section): super().__init__(section)
[docs] def create(self): """ Create a leasequery handler. :return: A leasequery handler """ return LeasequeryHandler(self.store(), self.allow_from, self.sensitive_options)
[docs]class LeasequerySqliteStoreFactory(ConfigElementFactory): """ Factory for LeasequerySqliteStore """ name_datatype = staticmethod(existing_dirpath) def __init__(self, section): super().__init__(section)
[docs] def create(self): """ Create a leasequery store. :return: A leasequery store """ return LeasequerySqliteStore(self.name)