hades.config package

class hades.config.CeleryOption[source]

Bases: Option

abstract = True
default: Any
class hades.config.Check[source]

Bases: OptionDescriptor

Base class for descriptors, that check the value of options

class hades.config.Compute[source]

Bases: OptionDescriptor

Base class for descriptors, that compute the value of options.

class hades.config.Config(config: AttributeAccessibleDict, *, runtime_checks: bool = True)[source]

Bases: Mapping

Config object that allows dict-style and attribute-style access to an underlying dictionary and optionally verifies the options that are accessed.

items() a set-like object providing a view on D's items[source]
keys() a set-like object providing a view on D's keys[source]
of_type(option_cls: OptionMeta)[source]
values() an object providing a view on D's values[source]
exception hades.config.ConfigError(*a, **kw)[source]

Bases: SetupError

Base class for all config related errors.

exit_code = 78
exception hades.config.ConfigOptionError(*args, option: str, **kwargs)[source]

Bases: ConfigError

Base class for errors related to processing a specific option

report_error(fallback_logger: Logger) None[source]

Emit helpful log messages about this error.

class hades.config.FlaskOption[source]

Bases: Option

abstract = True
default: Any
class hades.config.HadesOption[source]

Bases: Option

abstract = True
default: Any
exception hades.config.MissingOptionError(*args, option: str, **kwargs)[source]

Bases: ConfigOptionError

Indicates that a required option is missing

class hades.config.Option[source]

Bases: object

abstract = True
default: Any
has_default = False
required = False
runtime_check: Any = None
static_check: Any = None
type: Optional[Type] = None
exception hades.config.OptionCheckError(*args, option: str, **kwargs)[source]

Bases: ConfigOptionError

Indicates that an option check failed

class hades.config.OptionMeta(name, bases, attributes, abstract=False)[source]

Bases: type

Metaclass for options.

Classes with this metaclass, which are named not declared abstract by setting the abstract keyword argument are added to the options dictionary.

abstract: bool
classmethod check_config(config, runtime_checks=False)[source]
check_option(config, value, runtime_checks=False)[source]
default: Callable
classmethod get_defaults()[source]
has_default: bool
option_cls

alias of Option

options: Dict[str, Any] = {'BABEL_DEFAULT_LOCALE': <class 'hades.config.options.BABEL_DEFAULT_LOCALE'>, 'BABEL_DEFAULT_TIMEZONE': <class 'hades.config.options.BABEL_DEFAULT_TIMEZONE'>, 'BROKER_CONNECTION_MAX_RETRIES': <class 'hades.config.options.BROKER_CONNECTION_MAX_RETRIES'>, 'BROKER_URL': <class 'hades.config.options.BROKER_URL'>, 'CELERYD_PREFETCH_MULTIPLIER': <class 'hades.config.options.CELERYD_PREFETCH_MULTIPLIER'>, 'CELERY_ACCEPT_CONTENT': <class 'hades.config.options.CELERY_ACCEPT_CONTENT'>, 'CELERY_DEFAULT_DELIVERY_MODE': <class 'hades.config.options.CELERY_DEFAULT_DELIVERY_MODE'>, 'CELERY_DEFAULT_EXCHANGE': <class 'hades.config.options.CELERY_DEFAULT_EXCHANGE'>, 'CELERY_DEFAULT_QUEUE': <class 'hades.config.options.CELERY_DEFAULT_QUEUE'>, 'CELERY_DEFAULT_ROUTING_KEY': <class 'hades.config.options.CELERY_DEFAULT_ROUTING_KEY'>, 'CELERY_ENABLE_UTC': <class 'hades.config.options.CELERY_ENABLE_UTC'>, 'CELERY_EVENT_SERIALIZER': <class 'hades.config.options.CELERY_EVENT_SERIALIZER'>, 'CELERY_IMPORTS': <class 'hades.config.options.CELERY_IMPORTS'>, 'CELERY_QUEUES': <class 'hades.config.options.CELERY_QUEUES'>, 'CELERY_RESULT_BACKEND': <class 'hades.config.options.CELERY_RESULT_BACKEND'>, 'CELERY_RESULT_EXCHANGE': <class 'hades.config.options.CELERY_RESULT_EXCHANGE'>, 'CELERY_RESULT_EXCHANGE_TYPE': <class 'hades.config.options.CELERY_RESULT_EXCHANGE_TYPE'>, 'CELERY_RESULT_PERSISTENT': <class 'hades.config.options.CELERY_RESULT_PERSISTENT'>, 'CELERY_RESULT_SERIALIZER': <class 'hades.config.options.CELERY_RESULT_SERIALIZER'>, 'CELERY_TASK_RESULT_EXPIRES': <class 'hades.config.options.CELERY_TASK_RESULT_EXPIRES'>, 'CELERY_TASK_SERIALIZER': <class 'hades.config.options.CELERY_TASK_SERIALIZER'>, 'CELERY_TIMEZONE': <class 'hades.config.options.CELERY_TIMEZONE'>, 'DEBUG': <class 'hades.config.options.DEBUG'>, 'HADES_AUTH_ALLOWED_TCP_PORTS': <class 'hades.config.options.HADES_AUTH_ALLOWED_TCP_PORTS'>, 'HADES_AUTH_ALLOWED_UDP_PORTS': <class 'hades.config.options.HADES_AUTH_ALLOWED_UDP_PORTS'>, 'HADES_AUTH_BRIDGE': <class 'hades.config.options.HADES_AUTH_BRIDGE'>, 'HADES_AUTH_DHCP_DOMAIN': <class 'hades.config.options.HADES_AUTH_DHCP_DOMAIN'>, 'HADES_AUTH_DHCP_LEASE_LIFETIME': <class 'hades.config.options.HADES_AUTH_DHCP_LEASE_LIFETIME'>, 'HADES_AUTH_DHCP_LEASE_REBIND_TIMER': <class 'hades.config.options.HADES_AUTH_DHCP_LEASE_REBIND_TIMER'>, 'HADES_AUTH_DHCP_LEASE_RENEW_TIMER': <class 'hades.config.options.HADES_AUTH_DHCP_LEASE_RENEW_TIMER'>, 'HADES_AUTH_DNS_ALTERNATIVE_IPSET': <class 'hades.config.options.HADES_AUTH_DNS_ALTERNATIVE_IPSET'>, 'HADES_AUTH_DNS_ALTERNATIVE_ZONES': <class 'hades.config.options.HADES_AUTH_DNS_ALTERNATIVE_ZONES'>, 'HADES_AUTH_INTERFACE': <class 'hades.config.options.HADES_AUTH_INTERFACE'>, 'HADES_AUTH_LISTEN': <class 'hades.config.options.HADES_AUTH_LISTEN'>, 'HADES_AUTH_NEXT_HOP': <class 'hades.config.options.HADES_AUTH_NEXT_HOP'>, 'HADES_BRIDGE_SERVICE_INTERFACES': <class 'hades.config.options.HADES_BRIDGE_SERVICE_INTERFACES'>, 'HADES_CELERY_NODE_QUEUE': <class 'hades.config.options.HADES_CELERY_NODE_QUEUE'>, 'HADES_CELERY_NODE_QUEUE_MAX_LENGTH': <class 'hades.config.options.HADES_CELERY_NODE_QUEUE_MAX_LENGTH'>, 'HADES_CELERY_NODE_QUEUE_TTL': <class 'hades.config.options.HADES_CELERY_NODE_QUEUE_TTL'>, 'HADES_CELERY_NOTIFY_EXCHANGE': <class 'hades.config.options.HADES_CELERY_NOTIFY_EXCHANGE'>, 'HADES_CELERY_NOTIFY_EXCHANGE_TYPE': <class 'hades.config.options.HADES_CELERY_NOTIFY_EXCHANGE_TYPE'>, 'HADES_CELERY_PREFIX': <class 'hades.config.options.HADES_CELERY_PREFIX'>, 'HADES_CELERY_ROUTING_KEY_MASTERS_ALL': <class 'hades.config.options.HADES_CELERY_ROUTING_KEY_MASTERS_ALL'>, 'HADES_CELERY_ROUTING_KEY_MASTERS_SITE': <class 'hades.config.options.HADES_CELERY_ROUTING_KEY_MASTERS_SITE'>, 'HADES_CELERY_ROUTING_KEY_MASTERS_SITE_AUTH': <class 'hades.config.options.HADES_CELERY_ROUTING_KEY_MASTERS_SITE_AUTH'>, 'HADES_CELERY_ROUTING_KEY_MASTERS_SITE_ROOT': <class 'hades.config.options.HADES_CELERY_ROUTING_KEY_MASTERS_SITE_ROOT'>, 'HADES_CELERY_ROUTING_KEY_MASTERS_SITE_UNAUTH': <class 'hades.config.options.HADES_CELERY_ROUTING_KEY_MASTERS_SITE_UNAUTH'>, 'HADES_CELERY_ROUTING_KEY_NODES_ALL': <class 'hades.config.options.HADES_CELERY_ROUTING_KEY_NODES_ALL'>, 'HADES_CELERY_ROUTING_KEY_NODES_SELF': <class 'hades.config.options.HADES_CELERY_ROUTING_KEY_NODES_SELF'>, 'HADES_CELERY_ROUTING_KEY_NODES_SITE': <class 'hades.config.options.HADES_CELERY_ROUTING_KEY_NODES_SITE'>, 'HADES_CELERY_RPC_EXCHANGE': <class 'hades.config.options.HADES_CELERY_RPC_EXCHANGE'>, 'HADES_CELERY_RPC_EXCHANGE_TYPE': <class 'hades.config.options.HADES_CELERY_RPC_EXCHANGE_TYPE'>, 'HADES_CELERY_STATE_DB': <class 'hades.config.options.HADES_CELERY_STATE_DB'>, 'HADES_CELERY_WORKER_HOSTNAME': <class 'hades.config.options.HADES_CELERY_WORKER_HOSTNAME'>, 'HADES_CONTACT_ADDRESSES': <class 'hades.config.options.HADES_CONTACT_ADDRESSES'>, 'HADES_CREATE_DUMMY_INTERFACES': <class 'hades.config.options.HADES_CREATE_DUMMY_INTERFACES'>, 'HADES_CUSTOM_IPTABLES_INPUT_RULES': <class 'hades.config.options.HADES_CUSTOM_IPTABLES_INPUT_RULES'>, 'HADES_GRATUITOUS_ARP_INTERVAL': <class 'hades.config.options.HADES_GRATUITOUS_ARP_INTERVAL'>, 'HADES_INITIAL_MASTER': <class 'hades.config.options.HADES_INITIAL_MASTER'>, 'HADES_LOCAL_MASTER_DATABASE': <class 'hades.config.options.HADES_LOCAL_MASTER_DATABASE'>, 'HADES_MAIL_DESTINATION_ADDRESSES': <class 'hades.config.options.HADES_MAIL_DESTINATION_ADDRESSES'>, 'HADES_MAIL_SENDER_ADDRESS': <class 'hades.config.options.HADES_MAIL_SENDER_ADDRESS'>, 'HADES_MAIL_SMTP_SERVER': <class 'hades.config.options.HADES_MAIL_SMTP_SERVER'>, 'HADES_NETNS_AUTH_LISTEN': <class 'hades.config.options.HADES_NETNS_AUTH_LISTEN'>, 'HADES_NETNS_MAIN_AUTH_LISTEN': <class 'hades.config.options.HADES_NETNS_MAIN_AUTH_LISTEN'>, 'HADES_NETNS_MAIN_UNAUTH_LISTEN': <class 'hades.config.options.HADES_NETNS_MAIN_UNAUTH_LISTEN'>, 'HADES_NETNS_UNAUTH_LISTEN': <class 'hades.config.options.HADES_NETNS_UNAUTH_LISTEN'>, 'HADES_PORTAL_DOMAIN': <class 'hades.config.options.HADES_PORTAL_DOMAIN'>, 'HADES_PORTAL_NGINX_WORKERS': <class 'hades.config.options.HADES_PORTAL_NGINX_WORKERS'>, 'HADES_PORTAL_SSL_CERTIFICATE': <class 'hades.config.options.HADES_PORTAL_SSL_CERTIFICATE'>, 'HADES_PORTAL_SSL_CERTIFICATE_KEY': <class 'hades.config.options.HADES_PORTAL_SSL_CERTIFICATE_KEY'>, 'HADES_PORTAL_URL': <class 'hades.config.options.HADES_PORTAL_URL'>, 'HADES_PORTAL_UWSGI_WORKERS': <class 'hades.config.options.HADES_PORTAL_UWSGI_WORKERS'>, 'HADES_POSTGRESQL_FOREIGN_SERVER_FDW': <class 'hades.config.options.HADES_POSTGRESQL_FOREIGN_SERVER_FDW'>, 'HADES_POSTGRESQL_FOREIGN_SERVER_OPTIONS': <class 'hades.config.options.HADES_POSTGRESQL_FOREIGN_SERVER_OPTIONS'>, 'HADES_POSTGRESQL_FOREIGN_SERVER_TYPE': <class 'hades.config.options.HADES_POSTGRESQL_FOREIGN_SERVER_TYPE'>, 'HADES_POSTGRESQL_FOREIGN_SERVER_VERSION': <class 'hades.config.options.HADES_POSTGRESQL_FOREIGN_SERVER_VERSION'>, 'HADES_POSTGRESQL_FOREIGN_TABLE_ALTERNATIVE_DNS_IPADDRESS_STRING': <class 'hades.config.options.HADES_POSTGRESQL_FOREIGN_TABLE_ALTERNATIVE_DNS_IPADDRESS_STRING'>, 'HADES_POSTGRESQL_FOREIGN_TABLE_ALTERNATIVE_DNS_OPTIONS': <class 'hades.config.options.HADES_POSTGRESQL_FOREIGN_TABLE_ALTERNATIVE_DNS_OPTIONS'>, 'HADES_POSTGRESQL_FOREIGN_TABLE_AUTH_DHCP_HOST_IPADDRESS_STRING': <class 'hades.config.options.HADES_POSTGRESQL_FOREIGN_TABLE_AUTH_DHCP_HOST_IPADDRESS_STRING'>, 'HADES_POSTGRESQL_FOREIGN_TABLE_AUTH_DHCP_HOST_MAC_STRING': <class 'hades.config.options.HADES_POSTGRESQL_FOREIGN_TABLE_AUTH_DHCP_HOST_MAC_STRING'>, 'HADES_POSTGRESQL_FOREIGN_TABLE_AUTH_DHCP_HOST_OPTIONS': <class 'hades.config.options.HADES_POSTGRESQL_FOREIGN_TABLE_AUTH_DHCP_HOST_OPTIONS'>, 'HADES_POSTGRESQL_FOREIGN_TABLE_GLOBAL_OPTIONS': <class 'hades.config.options.HADES_POSTGRESQL_FOREIGN_TABLE_GLOBAL_OPTIONS'>, 'HADES_POSTGRESQL_FOREIGN_TABLE_NAS_OPTIONS': <class 'hades.config.options.HADES_POSTGRESQL_FOREIGN_TABLE_NAS_OPTIONS'>, 'HADES_POSTGRESQL_FOREIGN_TABLE_RADCHECK_NASIPADDRESS_STRING': <class 'hades.config.options.HADES_POSTGRESQL_FOREIGN_TABLE_RADCHECK_NASIPADDRESS_STRING'>, 'HADES_POSTGRESQL_FOREIGN_TABLE_RADCHECK_OPTIONS': <class 'hades.config.options.HADES_POSTGRESQL_FOREIGN_TABLE_RADCHECK_OPTIONS'>, 'HADES_POSTGRESQL_FOREIGN_TABLE_RADGROUPCHECK_OPTIONS': <class 'hades.config.options.HADES_POSTGRESQL_FOREIGN_TABLE_RADGROUPCHECK_OPTIONS'>, 'HADES_POSTGRESQL_FOREIGN_TABLE_RADGROUPREPLY_OPTIONS': <class 'hades.config.options.HADES_POSTGRESQL_FOREIGN_TABLE_RADGROUPREPLY_OPTIONS'>, 'HADES_POSTGRESQL_FOREIGN_TABLE_RADREPLY_NASIPADDRESS_STRING': <class 'hades.config.options.HADES_POSTGRESQL_FOREIGN_TABLE_RADREPLY_NASIPADDRESS_STRING'>, 'HADES_POSTGRESQL_FOREIGN_TABLE_RADREPLY_OPTIONS': <class 'hades.config.options.HADES_POSTGRESQL_FOREIGN_TABLE_RADREPLY_OPTIONS'>, 'HADES_POSTGRESQL_FOREIGN_TABLE_RADUSERGROUP_NASIPADDRESS_STRING': <class 'hades.config.options.HADES_POSTGRESQL_FOREIGN_TABLE_RADUSERGROUP_NASIPADDRESS_STRING'>, 'HADES_POSTGRESQL_FOREIGN_TABLE_RADUSERGROUP_OPTIONS': <class 'hades.config.options.HADES_POSTGRESQL_FOREIGN_TABLE_RADUSERGROUP_OPTIONS'>, 'HADES_POSTGRESQL_LISTEN': <class 'hades.config.options.HADES_POSTGRESQL_LISTEN'>, 'HADES_POSTGRESQL_PORT': <class 'hades.config.options.HADES_POSTGRESQL_PORT'>, 'HADES_POSTGRESQL_USER_MAPPINGS': <class 'hades.config.options.HADES_POSTGRESQL_USER_MAPPINGS'>, 'HADES_PRIORITY': <class 'hades.config.options.HADES_PRIORITY'>, 'HADES_RADIUS_ACCOUNTING_PORT': <class 'hades.config.options.HADES_RADIUS_ACCOUNTING_PORT'>, 'HADES_RADIUS_AUTHENTICATION_PORT': <class 'hades.config.options.HADES_RADIUS_AUTHENTICATION_PORT'>, 'HADES_RADIUS_DATABASE_FAIL_ACCEPT': <class 'hades.config.options.HADES_RADIUS_DATABASE_FAIL_ACCEPT'>, 'HADES_RADIUS_DATABASE_FAIL_REPLY_ATTRIBUTES': <class 'hades.config.options.HADES_RADIUS_DATABASE_FAIL_REPLY_ATTRIBUTES'>, 'HADES_RADIUS_INTERFACE': <class 'hades.config.options.HADES_RADIUS_INTERFACE'>, 'HADES_RADIUS_LISTEN': <class 'hades.config.options.HADES_RADIUS_LISTEN'>, 'HADES_RADIUS_LOCALHOST_SECRET': <class 'hades.config.options.HADES_RADIUS_LOCALHOST_SECRET'>, 'HADES_RADIUS_UNKNOWN_USER': <class 'hades.config.options.HADES_RADIUS_UNKNOWN_USER'>, 'HADES_REAUTHENTICATION_INTERVAL': <class 'hades.config.options.HADES_REAUTHENTICATION_INTERVAL'>, 'HADES_RETENTION_INTERVAL': <class 'hades.config.options.HADES_RETENTION_INTERVAL'>, 'HADES_SITE_NAME': <class 'hades.config.options.HADES_SITE_NAME'>, 'HADES_SITE_NODE_ID': <class 'hades.config.options.HADES_SITE_NODE_ID'>, 'HADES_UNAUTH_ALLOWED_TCP_PORTS': <class 'hades.config.options.HADES_UNAUTH_ALLOWED_TCP_PORTS'>, 'HADES_UNAUTH_ALLOWED_UDP_PORTS': <class 'hades.config.options.HADES_UNAUTH_ALLOWED_UDP_PORTS'>, 'HADES_UNAUTH_BRIDGE': <class 'hades.config.options.HADES_UNAUTH_BRIDGE'>, 'HADES_UNAUTH_CAPTURED_TCP_PORTS': <class 'hades.config.options.HADES_UNAUTH_CAPTURED_TCP_PORTS'>, 'HADES_UNAUTH_CAPTURED_UDP_PORTS': <class 'hades.config.options.HADES_UNAUTH_CAPTURED_UDP_PORTS'>, 'HADES_UNAUTH_DHCP_LEASE_TIME': <class 'hades.config.options.HADES_UNAUTH_DHCP_LEASE_TIME'>, 'HADES_UNAUTH_DHCP_RANGE': <class 'hades.config.options.HADES_UNAUTH_DHCP_RANGE'>, 'HADES_UNAUTH_INTERFACE': <class 'hades.config.options.HADES_UNAUTH_INTERFACE'>, 'HADES_UNAUTH_LISTEN': <class 'hades.config.options.HADES_UNAUTH_LISTEN'>, 'HADES_UNAUTH_WHITELIST_DNS': <class 'hades.config.options.HADES_UNAUTH_WHITELIST_DNS'>, 'HADES_UNAUTH_WHITELIST_IPSET': <class 'hades.config.options.HADES_UNAUTH_WHITELIST_IPSET'>, 'HADES_USER_NETWORKS': <class 'hades.config.options.HADES_USER_NETWORKS'>, 'HADES_VRRP_ADVERTISEMENT_INTERVAL': <class 'hades.config.options.HADES_VRRP_ADVERTISEMENT_INTERVAL'>, 'HADES_VRRP_BRIDGE': <class 'hades.config.options.HADES_VRRP_BRIDGE'>, 'HADES_VRRP_INTERFACE': <class 'hades.config.options.HADES_VRRP_INTERFACE'>, 'HADES_VRRP_LISTEN_AUTH': <class 'hades.config.options.HADES_VRRP_LISTEN_AUTH'>, 'HADES_VRRP_LISTEN_ROOT': <class 'hades.config.options.HADES_VRRP_LISTEN_ROOT'>, 'HADES_VRRP_LISTEN_UNAUTH': <class 'hades.config.options.HADES_VRRP_LISTEN_UNAUTH'>, 'HADES_VRRP_PASSWORD': <class 'hades.config.options.HADES_VRRP_PASSWORD'>, 'HADES_VRRP_PREEMPTION_DELAY': <class 'hades.config.options.HADES_VRRP_PREEMPTION_DELAY'>, 'HADES_VRRP_VIRTUAL_ROUTER_ID_AUTH': <class 'hades.config.options.HADES_VRRP_VIRTUAL_ROUTER_ID_AUTH'>, 'HADES_VRRP_VIRTUAL_ROUTER_ID_ROOT': <class 'hades.config.options.HADES_VRRP_VIRTUAL_ROUTER_ID_ROOT'>, 'HADES_VRRP_VIRTUAL_ROUTER_ID_UNAUTH': <class 'hades.config.options.HADES_VRRP_VIRTUAL_ROUTER_ID_UNAUTH'>, 'SQLALCHEMY_DATABASE_URI': <class 'hades.config.options.SQLALCHEMY_DATABASE_URI'>}
required: bool
runtime_check: Any
static_check: Any
type: Optional[Type]
hades.config.get_config(*, runtime_checks: bool = False, option_cls: Optional[OptionMeta] = None) Config[source]
hades.config.is_config_loaded() bool[source]
hades.config.load_config(filename: Optional[str] = None, *, runtime_checks: bool = False, option_cls: Optional[OptionMeta] = None) Config[source]

Submodules

hades.config.base module

class hades.config.base.Check[source]

Bases: OptionDescriptor

Base class for descriptors, that check the value of options

class hades.config.base.Compute[source]

Bases: OptionDescriptor

Base class for descriptors, that compute the value of options.

exception hades.config.base.ConfigError(*a, **kw)[source]

Bases: SetupError

Base class for all config related errors.

exit_code = 78
exception hades.config.base.ConfigOptionError(*args, option: str, **kwargs)[source]

Bases: ConfigError

Base class for errors related to processing a specific option

report_error(fallback_logger: Logger) None[source]

Emit helpful log messages about this error.

exception hades.config.base.MissingOptionError(*args, option: str, **kwargs)[source]

Bases: ConfigOptionError

Indicates that a required option is missing

class hades.config.base.Option[source]

Bases: object

abstract = True
default: Any
has_default = False
required = False
runtime_check: Any = None
static_check: Any = None
type: Optional[Type] = None
exception hades.config.base.OptionCheckError(*args, option: str, **kwargs)[source]

Bases: ConfigOptionError

Indicates that an option check failed

class hades.config.base.OptionDescriptor[source]

Bases: object

classmethod decorate(f)[source]

Convert regular functions into an OptionDescriptor.

The function will be called with the option as its first argument.

Functions are automatically decorated with classmethod, if they are not already an instance of classmethod or staticmethod.

Parameters:

f -- The function

class hades.config.base.OptionMeta(name, bases, attributes, abstract=False)[source]

Bases: type

Metaclass for options.

Classes with this metaclass, which are named not declared abstract by setting the abstract keyword argument are added to the options dictionary.

abstract: bool
classmethod check_config(config, runtime_checks=False)[source]
check_option(config, value, runtime_checks=False)[source]
default: Callable
classmethod get_defaults()[source]
has_default: bool
option_cls

alias of Option

options: Dict[str, Any] = {'BABEL_DEFAULT_LOCALE': <class 'hades.config.options.BABEL_DEFAULT_LOCALE'>, 'BABEL_DEFAULT_TIMEZONE': <class 'hades.config.options.BABEL_DEFAULT_TIMEZONE'>, 'BROKER_CONNECTION_MAX_RETRIES': <class 'hades.config.options.BROKER_CONNECTION_MAX_RETRIES'>, 'BROKER_URL': <class 'hades.config.options.BROKER_URL'>, 'CELERYD_PREFETCH_MULTIPLIER': <class 'hades.config.options.CELERYD_PREFETCH_MULTIPLIER'>, 'CELERY_ACCEPT_CONTENT': <class 'hades.config.options.CELERY_ACCEPT_CONTENT'>, 'CELERY_DEFAULT_DELIVERY_MODE': <class 'hades.config.options.CELERY_DEFAULT_DELIVERY_MODE'>, 'CELERY_DEFAULT_EXCHANGE': <class 'hades.config.options.CELERY_DEFAULT_EXCHANGE'>, 'CELERY_DEFAULT_QUEUE': <class 'hades.config.options.CELERY_DEFAULT_QUEUE'>, 'CELERY_DEFAULT_ROUTING_KEY': <class 'hades.config.options.CELERY_DEFAULT_ROUTING_KEY'>, 'CELERY_ENABLE_UTC': <class 'hades.config.options.CELERY_ENABLE_UTC'>, 'CELERY_EVENT_SERIALIZER': <class 'hades.config.options.CELERY_EVENT_SERIALIZER'>, 'CELERY_IMPORTS': <class 'hades.config.options.CELERY_IMPORTS'>, 'CELERY_QUEUES': <class 'hades.config.options.CELERY_QUEUES'>, 'CELERY_RESULT_BACKEND': <class 'hades.config.options.CELERY_RESULT_BACKEND'>, 'CELERY_RESULT_EXCHANGE': <class 'hades.config.options.CELERY_RESULT_EXCHANGE'>, 'CELERY_RESULT_EXCHANGE_TYPE': <class 'hades.config.options.CELERY_RESULT_EXCHANGE_TYPE'>, 'CELERY_RESULT_PERSISTENT': <class 'hades.config.options.CELERY_RESULT_PERSISTENT'>, 'CELERY_RESULT_SERIALIZER': <class 'hades.config.options.CELERY_RESULT_SERIALIZER'>, 'CELERY_TASK_RESULT_EXPIRES': <class 'hades.config.options.CELERY_TASK_RESULT_EXPIRES'>, 'CELERY_TASK_SERIALIZER': <class 'hades.config.options.CELERY_TASK_SERIALIZER'>, 'CELERY_TIMEZONE': <class 'hades.config.options.CELERY_TIMEZONE'>, 'DEBUG': <class 'hades.config.options.DEBUG'>, 'HADES_AUTH_ALLOWED_TCP_PORTS': <class 'hades.config.options.HADES_AUTH_ALLOWED_TCP_PORTS'>, 'HADES_AUTH_ALLOWED_UDP_PORTS': <class 'hades.config.options.HADES_AUTH_ALLOWED_UDP_PORTS'>, 'HADES_AUTH_BRIDGE': <class 'hades.config.options.HADES_AUTH_BRIDGE'>, 'HADES_AUTH_DHCP_DOMAIN': <class 'hades.config.options.HADES_AUTH_DHCP_DOMAIN'>, 'HADES_AUTH_DHCP_LEASE_LIFETIME': <class 'hades.config.options.HADES_AUTH_DHCP_LEASE_LIFETIME'>, 'HADES_AUTH_DHCP_LEASE_REBIND_TIMER': <class 'hades.config.options.HADES_AUTH_DHCP_LEASE_REBIND_TIMER'>, 'HADES_AUTH_DHCP_LEASE_RENEW_TIMER': <class 'hades.config.options.HADES_AUTH_DHCP_LEASE_RENEW_TIMER'>, 'HADES_AUTH_DNS_ALTERNATIVE_IPSET': <class 'hades.config.options.HADES_AUTH_DNS_ALTERNATIVE_IPSET'>, 'HADES_AUTH_DNS_ALTERNATIVE_ZONES': <class 'hades.config.options.HADES_AUTH_DNS_ALTERNATIVE_ZONES'>, 'HADES_AUTH_INTERFACE': <class 'hades.config.options.HADES_AUTH_INTERFACE'>, 'HADES_AUTH_LISTEN': <class 'hades.config.options.HADES_AUTH_LISTEN'>, 'HADES_AUTH_NEXT_HOP': <class 'hades.config.options.HADES_AUTH_NEXT_HOP'>, 'HADES_BRIDGE_SERVICE_INTERFACES': <class 'hades.config.options.HADES_BRIDGE_SERVICE_INTERFACES'>, 'HADES_CELERY_NODE_QUEUE': <class 'hades.config.options.HADES_CELERY_NODE_QUEUE'>, 'HADES_CELERY_NODE_QUEUE_MAX_LENGTH': <class 'hades.config.options.HADES_CELERY_NODE_QUEUE_MAX_LENGTH'>, 'HADES_CELERY_NODE_QUEUE_TTL': <class 'hades.config.options.HADES_CELERY_NODE_QUEUE_TTL'>, 'HADES_CELERY_NOTIFY_EXCHANGE': <class 'hades.config.options.HADES_CELERY_NOTIFY_EXCHANGE'>, 'HADES_CELERY_NOTIFY_EXCHANGE_TYPE': <class 'hades.config.options.HADES_CELERY_NOTIFY_EXCHANGE_TYPE'>, 'HADES_CELERY_PREFIX': <class 'hades.config.options.HADES_CELERY_PREFIX'>, 'HADES_CELERY_ROUTING_KEY_MASTERS_ALL': <class 'hades.config.options.HADES_CELERY_ROUTING_KEY_MASTERS_ALL'>, 'HADES_CELERY_ROUTING_KEY_MASTERS_SITE': <class 'hades.config.options.HADES_CELERY_ROUTING_KEY_MASTERS_SITE'>, 'HADES_CELERY_ROUTING_KEY_MASTERS_SITE_AUTH': <class 'hades.config.options.HADES_CELERY_ROUTING_KEY_MASTERS_SITE_AUTH'>, 'HADES_CELERY_ROUTING_KEY_MASTERS_SITE_ROOT': <class 'hades.config.options.HADES_CELERY_ROUTING_KEY_MASTERS_SITE_ROOT'>, 'HADES_CELERY_ROUTING_KEY_MASTERS_SITE_UNAUTH': <class 'hades.config.options.HADES_CELERY_ROUTING_KEY_MASTERS_SITE_UNAUTH'>, 'HADES_CELERY_ROUTING_KEY_NODES_ALL': <class 'hades.config.options.HADES_CELERY_ROUTING_KEY_NODES_ALL'>, 'HADES_CELERY_ROUTING_KEY_NODES_SELF': <class 'hades.config.options.HADES_CELERY_ROUTING_KEY_NODES_SELF'>, 'HADES_CELERY_ROUTING_KEY_NODES_SITE': <class 'hades.config.options.HADES_CELERY_ROUTING_KEY_NODES_SITE'>, 'HADES_CELERY_RPC_EXCHANGE': <class 'hades.config.options.HADES_CELERY_RPC_EXCHANGE'>, 'HADES_CELERY_RPC_EXCHANGE_TYPE': <class 'hades.config.options.HADES_CELERY_RPC_EXCHANGE_TYPE'>, 'HADES_CELERY_STATE_DB': <class 'hades.config.options.HADES_CELERY_STATE_DB'>, 'HADES_CELERY_WORKER_HOSTNAME': <class 'hades.config.options.HADES_CELERY_WORKER_HOSTNAME'>, 'HADES_CONTACT_ADDRESSES': <class 'hades.config.options.HADES_CONTACT_ADDRESSES'>, 'HADES_CREATE_DUMMY_INTERFACES': <class 'hades.config.options.HADES_CREATE_DUMMY_INTERFACES'>, 'HADES_CUSTOM_IPTABLES_INPUT_RULES': <class 'hades.config.options.HADES_CUSTOM_IPTABLES_INPUT_RULES'>, 'HADES_GRATUITOUS_ARP_INTERVAL': <class 'hades.config.options.HADES_GRATUITOUS_ARP_INTERVAL'>, 'HADES_INITIAL_MASTER': <class 'hades.config.options.HADES_INITIAL_MASTER'>, 'HADES_LOCAL_MASTER_DATABASE': <class 'hades.config.options.HADES_LOCAL_MASTER_DATABASE'>, 'HADES_MAIL_DESTINATION_ADDRESSES': <class 'hades.config.options.HADES_MAIL_DESTINATION_ADDRESSES'>, 'HADES_MAIL_SENDER_ADDRESS': <class 'hades.config.options.HADES_MAIL_SENDER_ADDRESS'>, 'HADES_MAIL_SMTP_SERVER': <class 'hades.config.options.HADES_MAIL_SMTP_SERVER'>, 'HADES_NETNS_AUTH_LISTEN': <class 'hades.config.options.HADES_NETNS_AUTH_LISTEN'>, 'HADES_NETNS_MAIN_AUTH_LISTEN': <class 'hades.config.options.HADES_NETNS_MAIN_AUTH_LISTEN'>, 'HADES_NETNS_MAIN_UNAUTH_LISTEN': <class 'hades.config.options.HADES_NETNS_MAIN_UNAUTH_LISTEN'>, 'HADES_NETNS_UNAUTH_LISTEN': <class 'hades.config.options.HADES_NETNS_UNAUTH_LISTEN'>, 'HADES_PORTAL_DOMAIN': <class 'hades.config.options.HADES_PORTAL_DOMAIN'>, 'HADES_PORTAL_NGINX_WORKERS': <class 'hades.config.options.HADES_PORTAL_NGINX_WORKERS'>, 'HADES_PORTAL_SSL_CERTIFICATE': <class 'hades.config.options.HADES_PORTAL_SSL_CERTIFICATE'>, 'HADES_PORTAL_SSL_CERTIFICATE_KEY': <class 'hades.config.options.HADES_PORTAL_SSL_CERTIFICATE_KEY'>, 'HADES_PORTAL_URL': <class 'hades.config.options.HADES_PORTAL_URL'>, 'HADES_PORTAL_UWSGI_WORKERS': <class 'hades.config.options.HADES_PORTAL_UWSGI_WORKERS'>, 'HADES_POSTGRESQL_FOREIGN_SERVER_FDW': <class 'hades.config.options.HADES_POSTGRESQL_FOREIGN_SERVER_FDW'>, 'HADES_POSTGRESQL_FOREIGN_SERVER_OPTIONS': <class 'hades.config.options.HADES_POSTGRESQL_FOREIGN_SERVER_OPTIONS'>, 'HADES_POSTGRESQL_FOREIGN_SERVER_TYPE': <class 'hades.config.options.HADES_POSTGRESQL_FOREIGN_SERVER_TYPE'>, 'HADES_POSTGRESQL_FOREIGN_SERVER_VERSION': <class 'hades.config.options.HADES_POSTGRESQL_FOREIGN_SERVER_VERSION'>, 'HADES_POSTGRESQL_FOREIGN_TABLE_ALTERNATIVE_DNS_IPADDRESS_STRING': <class 'hades.config.options.HADES_POSTGRESQL_FOREIGN_TABLE_ALTERNATIVE_DNS_IPADDRESS_STRING'>, 'HADES_POSTGRESQL_FOREIGN_TABLE_ALTERNATIVE_DNS_OPTIONS': <class 'hades.config.options.HADES_POSTGRESQL_FOREIGN_TABLE_ALTERNATIVE_DNS_OPTIONS'>, 'HADES_POSTGRESQL_FOREIGN_TABLE_AUTH_DHCP_HOST_IPADDRESS_STRING': <class 'hades.config.options.HADES_POSTGRESQL_FOREIGN_TABLE_AUTH_DHCP_HOST_IPADDRESS_STRING'>, 'HADES_POSTGRESQL_FOREIGN_TABLE_AUTH_DHCP_HOST_MAC_STRING': <class 'hades.config.options.HADES_POSTGRESQL_FOREIGN_TABLE_AUTH_DHCP_HOST_MAC_STRING'>, 'HADES_POSTGRESQL_FOREIGN_TABLE_AUTH_DHCP_HOST_OPTIONS': <class 'hades.config.options.HADES_POSTGRESQL_FOREIGN_TABLE_AUTH_DHCP_HOST_OPTIONS'>, 'HADES_POSTGRESQL_FOREIGN_TABLE_GLOBAL_OPTIONS': <class 'hades.config.options.HADES_POSTGRESQL_FOREIGN_TABLE_GLOBAL_OPTIONS'>, 'HADES_POSTGRESQL_FOREIGN_TABLE_NAS_OPTIONS': <class 'hades.config.options.HADES_POSTGRESQL_FOREIGN_TABLE_NAS_OPTIONS'>, 'HADES_POSTGRESQL_FOREIGN_TABLE_RADCHECK_NASIPADDRESS_STRING': <class 'hades.config.options.HADES_POSTGRESQL_FOREIGN_TABLE_RADCHECK_NASIPADDRESS_STRING'>, 'HADES_POSTGRESQL_FOREIGN_TABLE_RADCHECK_OPTIONS': <class 'hades.config.options.HADES_POSTGRESQL_FOREIGN_TABLE_RADCHECK_OPTIONS'>, 'HADES_POSTGRESQL_FOREIGN_TABLE_RADGROUPCHECK_OPTIONS': <class 'hades.config.options.HADES_POSTGRESQL_FOREIGN_TABLE_RADGROUPCHECK_OPTIONS'>, 'HADES_POSTGRESQL_FOREIGN_TABLE_RADGROUPREPLY_OPTIONS': <class 'hades.config.options.HADES_POSTGRESQL_FOREIGN_TABLE_RADGROUPREPLY_OPTIONS'>, 'HADES_POSTGRESQL_FOREIGN_TABLE_RADREPLY_NASIPADDRESS_STRING': <class 'hades.config.options.HADES_POSTGRESQL_FOREIGN_TABLE_RADREPLY_NASIPADDRESS_STRING'>, 'HADES_POSTGRESQL_FOREIGN_TABLE_RADREPLY_OPTIONS': <class 'hades.config.options.HADES_POSTGRESQL_FOREIGN_TABLE_RADREPLY_OPTIONS'>, 'HADES_POSTGRESQL_FOREIGN_TABLE_RADUSERGROUP_NASIPADDRESS_STRING': <class 'hades.config.options.HADES_POSTGRESQL_FOREIGN_TABLE_RADUSERGROUP_NASIPADDRESS_STRING'>, 'HADES_POSTGRESQL_FOREIGN_TABLE_RADUSERGROUP_OPTIONS': <class 'hades.config.options.HADES_POSTGRESQL_FOREIGN_TABLE_RADUSERGROUP_OPTIONS'>, 'HADES_POSTGRESQL_LISTEN': <class 'hades.config.options.HADES_POSTGRESQL_LISTEN'>, 'HADES_POSTGRESQL_PORT': <class 'hades.config.options.HADES_POSTGRESQL_PORT'>, 'HADES_POSTGRESQL_USER_MAPPINGS': <class 'hades.config.options.HADES_POSTGRESQL_USER_MAPPINGS'>, 'HADES_PRIORITY': <class 'hades.config.options.HADES_PRIORITY'>, 'HADES_RADIUS_ACCOUNTING_PORT': <class 'hades.config.options.HADES_RADIUS_ACCOUNTING_PORT'>, 'HADES_RADIUS_AUTHENTICATION_PORT': <class 'hades.config.options.HADES_RADIUS_AUTHENTICATION_PORT'>, 'HADES_RADIUS_DATABASE_FAIL_ACCEPT': <class 'hades.config.options.HADES_RADIUS_DATABASE_FAIL_ACCEPT'>, 'HADES_RADIUS_DATABASE_FAIL_REPLY_ATTRIBUTES': <class 'hades.config.options.HADES_RADIUS_DATABASE_FAIL_REPLY_ATTRIBUTES'>, 'HADES_RADIUS_INTERFACE': <class 'hades.config.options.HADES_RADIUS_INTERFACE'>, 'HADES_RADIUS_LISTEN': <class 'hades.config.options.HADES_RADIUS_LISTEN'>, 'HADES_RADIUS_LOCALHOST_SECRET': <class 'hades.config.options.HADES_RADIUS_LOCALHOST_SECRET'>, 'HADES_RADIUS_UNKNOWN_USER': <class 'hades.config.options.HADES_RADIUS_UNKNOWN_USER'>, 'HADES_REAUTHENTICATION_INTERVAL': <class 'hades.config.options.HADES_REAUTHENTICATION_INTERVAL'>, 'HADES_RETENTION_INTERVAL': <class 'hades.config.options.HADES_RETENTION_INTERVAL'>, 'HADES_SITE_NAME': <class 'hades.config.options.HADES_SITE_NAME'>, 'HADES_SITE_NODE_ID': <class 'hades.config.options.HADES_SITE_NODE_ID'>, 'HADES_UNAUTH_ALLOWED_TCP_PORTS': <class 'hades.config.options.HADES_UNAUTH_ALLOWED_TCP_PORTS'>, 'HADES_UNAUTH_ALLOWED_UDP_PORTS': <class 'hades.config.options.HADES_UNAUTH_ALLOWED_UDP_PORTS'>, 'HADES_UNAUTH_BRIDGE': <class 'hades.config.options.HADES_UNAUTH_BRIDGE'>, 'HADES_UNAUTH_CAPTURED_TCP_PORTS': <class 'hades.config.options.HADES_UNAUTH_CAPTURED_TCP_PORTS'>, 'HADES_UNAUTH_CAPTURED_UDP_PORTS': <class 'hades.config.options.HADES_UNAUTH_CAPTURED_UDP_PORTS'>, 'HADES_UNAUTH_DHCP_LEASE_TIME': <class 'hades.config.options.HADES_UNAUTH_DHCP_LEASE_TIME'>, 'HADES_UNAUTH_DHCP_RANGE': <class 'hades.config.options.HADES_UNAUTH_DHCP_RANGE'>, 'HADES_UNAUTH_INTERFACE': <class 'hades.config.options.HADES_UNAUTH_INTERFACE'>, 'HADES_UNAUTH_LISTEN': <class 'hades.config.options.HADES_UNAUTH_LISTEN'>, 'HADES_UNAUTH_WHITELIST_DNS': <class 'hades.config.options.HADES_UNAUTH_WHITELIST_DNS'>, 'HADES_UNAUTH_WHITELIST_IPSET': <class 'hades.config.options.HADES_UNAUTH_WHITELIST_IPSET'>, 'HADES_USER_NETWORKS': <class 'hades.config.options.HADES_USER_NETWORKS'>, 'HADES_VRRP_ADVERTISEMENT_INTERVAL': <class 'hades.config.options.HADES_VRRP_ADVERTISEMENT_INTERVAL'>, 'HADES_VRRP_BRIDGE': <class 'hades.config.options.HADES_VRRP_BRIDGE'>, 'HADES_VRRP_INTERFACE': <class 'hades.config.options.HADES_VRRP_INTERFACE'>, 'HADES_VRRP_LISTEN_AUTH': <class 'hades.config.options.HADES_VRRP_LISTEN_AUTH'>, 'HADES_VRRP_LISTEN_ROOT': <class 'hades.config.options.HADES_VRRP_LISTEN_ROOT'>, 'HADES_VRRP_LISTEN_UNAUTH': <class 'hades.config.options.HADES_VRRP_LISTEN_UNAUTH'>, 'HADES_VRRP_PASSWORD': <class 'hades.config.options.HADES_VRRP_PASSWORD'>, 'HADES_VRRP_PREEMPTION_DELAY': <class 'hades.config.options.HADES_VRRP_PREEMPTION_DELAY'>, 'HADES_VRRP_VIRTUAL_ROUTER_ID_AUTH': <class 'hades.config.options.HADES_VRRP_VIRTUAL_ROUTER_ID_AUTH'>, 'HADES_VRRP_VIRTUAL_ROUTER_ID_ROOT': <class 'hades.config.options.HADES_VRRP_VIRTUAL_ROUTER_ID_ROOT'>, 'HADES_VRRP_VIRTUAL_ROUTER_ID_UNAUTH': <class 'hades.config.options.HADES_VRRP_VIRTUAL_ROUTER_ID_UNAUTH'>, 'SQLALCHEMY_DATABASE_URI': <class 'hades.config.options.SQLALCHEMY_DATABASE_URI'>}
required: bool
runtime_check: Any
static_check: Any
type: Optional[Type]
hades.config.base.coerce(value: Union[Type[Option], str]) str[source]
hades.config.base.is_option_name(name: str) bool[source]

Check if a given object is a valid option name.

Valid option names are restricted to ASCII, start with an uppercase letter followed by uppercase letters (A-Z), digits (0-9) or the underscore (_).

Parameters:

name -- Name

Returns:

True, if name is string and a valid option name, False otherwise

hades.config.base.option_reference(option: Union[Type[Option], str])[source]

hades.config.check module

Checks for configuration option values

hades.config.check.address_exists(config, value)[source]

IP address must be configured

class hades.config.check.between(low, high)[source]

Bases: Check

hades.config.check.directory_exists(config, value)[source]

Must be an existing directory

hades.config.check.file_creatable(config, value)[source]

Must be a creatable file name

hades.config.check.file_exists(config, value)[source]

Must be an existing file

class hades.config.check.greater_than(threshold)[source]

Bases: Check

hades.config.check.group_exists(config, value)[source]

Must be a valid UNIX group

class hades.config.check.has_keys(*keys: str)[source]

Bases: Check

hades.config.check.interface_exists(config, value)[source]

Network interface must exists

class hades.config.check.ip_range_in_networks(other_option)[source]

Bases: Check

class hades.config.check.mapping(key_check: Optional[Check] = None, value_check: Optional[Check] = None)[source]

Bases: Check

class hades.config.check.match(expr, flags=0)[source]

Bases: Check

hades.config.check.network_ip(config, value)[source]

Must not be network or broadcast address (except if /31)

hades.config.check.not_empty(config, value)[source]

Must not be empty

class hades.config.check.satisfy_all(*checks: Check)[source]

Bases: Check

checks: Sequence[Check]
class hades.config.check.sequence(element_check: Check)[source]

Bases: Check

class hades.config.check.type_is(types: Union[Type, Sequence[Type]])[source]

Bases: Check

hades.config.check.user_exists(config, value)[source]

Must be a valid UNIX user

class hades.config.check.user_mapping_for_user_exists(user_name)[source]

Bases: Check

hades.config.compute module

class hades.config.compute.deferred_format(fmt_string, *a: Union[str, Type[Option]], **kw: Union[str, Type[Option]])[source]

Bases: Compute

Evaluate a format string using values from others config options.

Names of options are given as positional arguments and the corresponding values can be referred to using numbers in the format string. Keywords arguments can be used as well to bind other option values to specific names that are available in the format string.

class hades.config.compute.equal_to(other: Union[str, Type[Option]])[source]

Bases: Compute

hades.config.export module

hades.config.export.escape(value)[source]

Escape a string for shell argument use. shlex.quote breaks unfortunately on certain strings

hades.config.export.export(config, output_format, file)[source]

Export config as shell variables.

Parameters:
  • config -- Configuration to export

  • output_format -- One of systemd, posix, bash, zsh

  • file -- File-like object

hades.config.generate module

class hades.config.generate.ConfigGenerator(template_dirs: Union[str, PurePath, Iterable[Union[str, PurePath]]], config, mode: int = 488, group: Optional[struct_group] = None)[source]

Bases: object

DATETIME_FORMAT = '%Y-%m-%d %H:%M:%S%z'

Format string for producing RFC3339-compatible datetime strings

TEMPLATE_SUFFIX = '.j2'
generate(source: Union[str, PurePath], destination: Optional[Union[str, PurePath]])[source]
generate_directory(source: Union[str, PurePath], destination: Union[str, PurePath])[source]
generate_file(source: Union[str, PurePath], destination: Optional[Union[str, PurePath]])[source]
exception hades.config.generate.GeneratorError[source]

Bases: Exception

class hades.config.generate.OverridableFileSystemLoader(search_paths, encoding='utf-8', template_suffix='.j2')[source]

Bases: BaseLoader

A Jinja2 loader that loads templates with the yield_all_sources() algorithm, if the template name is a relative.

The loader accepts pathlib.PurePath objects in addition to strings to identify templates.

get_source(environment: Environment, template: str)[source]

Get the template source, filename and reload helper for a template. It's passed the environment and template name and has to return a tuple in the form (source, filename, uptodate) or raise a TemplateNotFound error if it can't locate the template.

The source part of the returned tuple must be the source of the template as unicode string or a ASCII bytestring. The filename should be the name of the file on the filesystem if it was loaded from there, otherwise None. The filename is used by python for the tracebacks if no loader extension is used.

The last item in the tuple is the uptodate function. If auto reloading is enabled it's always called to check if the template changed. No arguments are passed so the function must store the old state somewhere (for example in a closure). If it returns False the template will be reloaded.

list_templates()[source]

Iterates over all templates. If the loader does not support that it should raise a TypeError which is the default behavior.

hades.config.generate.do_difference(a, b)[source]
hades.config.generate.do_dirname(a)[source]
hades.config.generate.do_intersection(a, b)[source]
hades.config.generate.do_max(a)[source]
hades.config.generate.do_min(a)[source]
hades.config.generate.do_sorted(env, iterable, *, attribute=None, item=None, reverse=False)[source]
hades.config.generate.do_symmetric_difference(a, b)[source]
hades.config.generate.do_union(a, b)[source]
hades.config.generate.do_unique(a)[source]
hades.config.generate.do_zip(*iterables)[source]
hades.config.generate.do_zip_longest(*iterables, fillvalue=None)[source]
hades.config.generate.template_filter(name)[source]
hades.config.generate.yield_all_sources(*search_path: Path) Iterator[Tuple[Path, Path]][source]

Find all files in the directories on search_path.

The algorithm is similar to systemd's unit search or the shell's PATH search algorithm.

The directories on the search path are recursively walked in parallel. Directories at the beginning of search_path take precedence over later directories, thus for files with the same name, the version in the leftmost directory that contains the file is selected. The content of directories is merged.

Symbolic links are never followed and the path of symbolic link is returned instead of the path of its target.

Symbolic links to /dev/null are handled specially and denote a deletion marker, that indicates that a file or directory should not be included. For directories this means that no directories and their contents to the right of the respective directory in the search path should be included. Version of the directory and their contents that are on the search path to the left of the deletion marker are still included.

The kind of paths that are returned depend on the kind of paths, that are passed as search_path. Relative search path components will yield relative paths and absolute components absolute paths.

Parameters:

search_path -- A list of paths to directories

Returns:

An iterator that yields pairs, where the first element is the component of search_path, where the file was found and the second element is the path of the file.

hades.config.generate.yield_all_versions(name: PurePath, *search_path: Path) Iterator[Tuple[Path, Path]][source]

Find all versions of name on search_path.

The principle behind the search algorithm are the same as yield_all_sources(). This function however will search for a single file or directory named name and return all versions of name that can be found on the search_path. The version with the highest precedence (i.e. from the leftmost component of search_path that contains a version of name) will be returned first.

Parameters:
  • name -- The name of the file or directory

  • search_path -- A list of of paths to directories

Returns:

An iterator that yields pairs, where the first element is the component of search_path, where the file was found and the second element is the path of the file.

hades.config.loader module

class hades.config.loader.AttributeAccessibleDict[source]

Bases: dict

A dictionary whose contents can also be accessed by attribute lookup.

class hades.config.loader.CallableEvaluator(config: Union[Mapping, Iterable[Tuple[Any, Any]]])[source]

Bases: AttributeAccessibleDict

Intercept attribute and dict item access. If the return value would be an instance of Compute, call the compute object with self as the only argument.

Internally a stack of item names, that are looked up, is maintained to detect infinite recursion.

items() a set-like object providing a view on D's items[source]
values() an object providing a view on D's values[source]
class hades.config.loader.Config(config: AttributeAccessibleDict, *, runtime_checks: bool = True)[source]

Bases: Mapping

Config object that allows dict-style and attribute-style access to an underlying dictionary and optionally verifies the options that are accessed.

items() a set-like object providing a view on D's items[source]
keys() a set-like object providing a view on D's keys[source]
of_type(option_cls: OptionMeta)[source]
values() an object providing a view on D's values[source]
exception hades.config.loader.ConfigLoadError(*args, filename)[source]

Bases: ConfigError

Exception class for errors during config file loading.

report_error(fallback_logger: Logger) None[source]

Emit helpful log messages about this error.

hades.config.loader.get_config(*, runtime_checks: bool = False, option_cls: Optional[OptionMeta] = None) Config[source]
hades.config.loader.is_config_loaded() bool[source]
hades.config.loader.load_config(filename: Optional[str] = None, *, runtime_checks: bool = False, option_cls: Optional[OptionMeta] = None) Config[source]

hades.config.sphinx module

Sphinx extension for Hades's options

class hades.config.sphinx.HadesDomain(env: BuildEnvironment)[source]

Bases: Domain

directives: Dict[str, Any] = {'option': <class 'hades.config.sphinx.OptionDirective'>}

directive name -> directive class

label = 'Hades'

domain label: longer, more descriptive (used in messages)

name = 'hades'

domain name: should be short, but unique

object_types: Dict[str, ObjType] = {'option': <sphinx.domains.ObjType object>}

type (usually directive) name -> ObjType instance

roles: Dict[str, Union[RoleFunction, XRefRole]] = {'option': <sphinx.roles.XRefRole object>}

role name -> role callable

class hades.config.sphinx.OptionDirective(name, arguments, options, content, lineno, content_offset, block_text, state, state_machine)[source]

Bases: ObjectDescription[str]

add_target_and_index(name: str, sig: str, signode: desc_signature) None[source]

Add cross-reference IDs and entries to self.indexnode, if applicable.

name is whatever handle_signature() returned.

doc_field_types: List[Field] = [<sphinx.util.docfields.Field object>, <sphinx.util.docfields.Field object>, <sphinx.util.docfields.Field object>, <sphinx.util.docfields.Field object>, <sphinx.util.docfields.GroupedField object>]
handle_signature(sig: str, signode: desc_signature) str[source]

Parse the signature string.

In this case the “signature” just consists of the option name.

Parameters:
  • sig -- The text coming directly after the directive: .. option :: <sig>

  • signode -- The docutils node which has been prepared for us

class hades.config.sphinx.OptionDocumenter(*args: Any)[source]

Bases: ClassDocumenter

add_field(name: str, body: str, sourcename: str)[source]

Add a field list item

Parameters:
  • name -- Name of the field

  • body -- Body of the field, multiple lines will be indented

  • sourcename -- Source name

classmethod can_document_member(member: Any, membername: str, isattr: bool, parent: Any) bool[source]

Called to see if a member can be documented by this Documenter.

domain = 'hades'
generate(more_content=None, real_modname=None, check_module: bool = False, all_members: bool = False)[source]

Generate reST for the object given by self.name, and possibly for its members.

If more_content is given, include that content. If real_modname is given, use that module name to find attribute docs. If check_module is True, only generate if the object is defined in the module name it is imported from. If all_members is True, document all members.

objtype = 'option'

name by which the directive is called (auto...) and the default generated directive name

priority = 10

priority if multiple documenters return True from can_document_member

hades.config.sphinx.setup(app: Sphinx)[source]