Source code for univention.admin.handlers.dhcp.service

# SPDX-FileCopyrightText: 2004-2025 Univention GmbH
# SPDX-License-Identifier: AGPL-3.0-only

"""|UDM| module for |DHCP| services"""

from __future__ import annotations

import univention.admin.filter
import univention.admin.handlers
import univention.admin.localization
from univention.admin.layout import Group, Tab

from .__common import DHCPBase, add_dhcp_options


translation = univention.admin.localization.translation('univention.admin.handlers.dhcp')
_ = translation.translate

module = 'dhcp/service'
operations = ['add', 'edit', 'remove', 'search']
childs = True
childmodules = ('dhcp/host', 'dhcp/server', 'dhcp/shared', 'dhcp/subnet')
short_description = _('DHCP: Service')
object_name = _('DHCP service')
object_name_plural = _('DHCP services')
long_description = _('The top-level container for a DHCP configuration.')
# fmt: off
options = {
    'default': univention.admin.option(
        short_description=short_description,
        default=True,
        objectClasses=['top', 'univentionDhcpService'],
    ),
}
property_descriptions = {
    'service': univention.admin.property(
        short_description=_('Service name'),
        long_description=_('A unique name for this DHCP service.'),
        syntax=univention.admin.syntax.string,
        include_in_default_search=True,
        required=True,
        may_change=False,
        identifies=True,
    ),
}

layout = [
    Tab(_('General'), _('Basic settings'), layout=[
        Group(_('DHCP service description'), layout=[
            'service',
        ]),
    ]),
]

mapping = univention.admin.mapping.mapping()
mapping.register('service', 'cn', None, univention.admin.mapping.ListToString)
# fmt: on

add_dhcp_options(__name__)


[docs] class object(DHCPBase): module = module def __init__( self, co: None, lo: univention.admin.uldap.access, position: univention.admin.uldap.position | None, dn: str = '', superordinate: univention.admin.handlers.simpleLdap | None = None, attributes: univention.admin.handlers._Attributes | None = None, ) -> None: univention.admin.handlers.simpleLdap.__init__(self, co, lo, position, dn, superordinate, attributes=attributes) if not self.dn and not self.position: raise univention.admin.uexceptions.insufficientInformation(_('Neither DN nor position given.'))
[docs] @staticmethod def unmapped_lookup_filter() -> univention.admin.filter.conjunction: return univention.admin.filter.conjunction('&', [ univention.admin.filter.conjunction('|', [ univention.admin.filter.expression('objectClass', 'dhcpService'), univention.admin.filter.expression('objectClass', 'univentionDhcpService'), ]), ]) # fmt: skip
[docs] def identify(dn: str, attr: univention.admin.handlers._Attributes) -> bool: return b'dhcpService' in attr.get('objectClass', []) or b'univentionDhcpService' in attr.get('objectClass', [])
lookup_filter = object.lookup_filter lookup = object.lookup