Source code for dhcpkit.common.server.logging.config_datatypes

"""
Datatypes useful for the logging component
"""
import logging
import logging.handlers
import socket

from ZConfig.datatypes import RangeCheckedConversion
from dhcpkit.common.server.logging import DEBUG_HANDLING, DEBUG_PACKETS


[docs]def syslog_facility(value: str) -> int: """ Convert the strings representing syslog facilities to their numerical value :param value: The string representing the syslog facility :return: Numerical syslog facility """ lower_value = value.lower() if lower_value not in logging.handlers.SysLogHandler.facility_names: raise ValueError("'{}' is not a valid syslog facility name".format(value)) return logging.handlers.SysLogHandler.facility_names[lower_value]
[docs]def logging_level(value: str) -> int: """ Convert the strings representing logging levels to their numerical value :param value: The string representing the logging level :return: Numerical logging level """ name_to_level = { 'critical': logging.CRITICAL, 'error': logging.ERROR, 'warn': logging.WARNING, 'warning': logging.WARNING, 'info': logging.INFO, 'debug': logging.DEBUG, 'debug-packets': DEBUG_PACKETS, 'debug-handling': DEBUG_HANDLING, 'notset': logging.NOTSET, } lookup_value = value.lower().replace('_', '-') if lookup_value not in name_to_level: raise ValueError("'{}' is not a valid log level".format(value)) return name_to_level[lookup_value]
[docs]def udp_or_tcp(value: str) -> int: """ Convert the strings "udp" and "tcp" to SOCK_DGRAM and SOCK_STREAM respectively :param value: The string "udp" or "tcp" :return: SOCK_DGRAM or SOCK_STREAM """ lower_value = value.lower() if lower_value in ('udp', 'dgram'): return socket.SOCK_DGRAM elif lower_value in ('tcp', 'stream'): return socket.SOCK_STREAM else: raise ValueError("The protocol must be UDP (or DGRAM) or TCP (or STREAM)")
[docs]def rotation_style(value: str) -> str: """ Determine the rotation style. :param value: String representation of rotation style :return: Normalised rotation style """ lower_value = value.lower() # return 's' if lower_value in ('hour', 'hourly'): return 'h' elif lower_value in ('day', 'daily'): return 'd' elif lower_value in ('week', 'weekly'): return 'w' elif lower_value == 'size': return 'SIZE' else: raise ValueError("Rotation style must be hourly, daily, weekly or size")
rotation_count = RangeCheckedConversion(int, min=1)