refactor(udm): Switch to univention.admin.modules._get()

raising an exception and lazy loading modules.

Bug #50385
This commit is contained in:
Philipp Hahn 2024-03-06 18:25:14 +01:00
parent b17e18fe29
commit f56259d79f
38 changed files with 107 additions and 108 deletions

View File

@ -3,7 +3,7 @@ release: "5.0"
version: [6]
scope: ucs_5.0-0-errata5.0-6
src: univention-directory-manager-modules
fix: 15.0.25-22
fix: 15.0.25-23
desc: |
This update addresses the following issues:
* The Univention Configuration Registry Policy UDM module now has an

View File

@ -1,3 +1,9 @@
univention-directory-manager-modules (15.0.25-23) unstable; urgency=low
* Bug #50385: Support NS records in DNS reverse zones
-- Philipp Hahn <hahn@univention.de> Wed, 06 Mar 2024 18:23:48 +0100
univention-directory-manager-modules (15.0.25-22) unstable; urgency=low
* Bug #50385: Support NS records in DNS reverse zones

View File

@ -131,6 +131,7 @@ Depends:
${python3:Depends},
Breaks:
python3-univention-directory-manager (<< 15.0.19-1),
ucs-test-framework (<< 10.0.20-49),
Replaces:
python3-univention-directory-manager (<< 15.0.19-1),
Description: UCS - Modules for administration tools

View File

@ -68,7 +68,7 @@ if [ "$1" = "configure" ] && dpkg --compare-versions "$2" lt-nl "15.0.11-29"; th
--append translationLongDescription='"fr_FR" "Définir des drapeaux pour un objet"'
fi
if [ "$1" = "configure" ] && dpkg --compare-versions "$2" lt-nl "15.0.25-22"; then
if [ "$1" = "configure" ] && dpkg --compare-versions "$2" lt-nl "15.0.25-23"; then
deb-systemd-invoke restart univention-directory-listener.service || true
deb-systemd-invoke restart univention-directory-manager-rest.service || true
# restart ucs@school importer service if available

View File

@ -94,13 +94,13 @@ def getDefaultContainer(lo, module):
if module == 'dns/':
module = 'dns/dns'
try:
return univention.admin.modules.get(module).object.get_default_containers(lo)[0]
return univention.admin.modules._get(module).object.get_default_containers(lo)[0]
except IndexError:
return None
def getDefaultValue(lo, name, position=None):
# type: (univention.admin.uldap.access, str, univention.admin.uldap.position) -> str | None
# type: (univention.admin.uldap.access, str, univention.admin.uldap.position | None) -> str | None
"""
Return the default value for a UDM module.

View File

@ -240,7 +240,7 @@ class simpleLdap(object):
log.warning('univention.admin.modules.update() was not called')
univention.admin.modules.update()
m = univention.admin.modules.get(self.module)
m = univention.admin.modules._get(self.module)
if not hasattr(self, 'mapping'):
self.mapping = getattr(m, 'mapping', None) # type: univention.admin.mapping.mapping | None
@ -1030,7 +1030,7 @@ class simpleLdap(object):
log.exception("cancel() failed:")
def _falsy_boolean_extended_attributes(self, info): # type: (_Properties) -> _Properties
m = univention.admin.modules.get(self.module)
m = univention.admin.modules._get(self.module)
for prop in getattr(m, 'extended_udm_attributes', []):
if prop.syntax == 'boolean' and not info.get(prop.name):
info[prop.name] = u'0'
@ -1108,8 +1108,7 @@ class simpleLdap(object):
:param dict changes: A list of changes.
:returns: The (modified) list of changes.
"""
m = univention.admin.modules.get(module.module)
assert m is not None
m = univention.admin.modules._get(module.module)
attrs = getattr(m, 'extended_udm_attributes', None)
if attrs:
for prop in attrs:
@ -1334,7 +1333,7 @@ class simpleLdap(object):
log.exception("Post-create: cancel() failed:")
try:
if self._exists: # add succeeded but _ldap_post_create failed!
obj = univention.admin.objects.get(univention.admin.modules.get(self.module), None, self.lo, self.position, self.dn)
obj = univention.admin.objects.get(univention.admin.modules._get(self.module), None, self.lo, self.position, self.dn)
obj.open()
obj.remove()
except Exception:
@ -1348,7 +1347,7 @@ class simpleLdap(object):
def _ldap_object_classes_add(self, al):
# type: (list[tuple[str, Any]]) -> list[tuple[str, Any]]
m = univention.admin.modules.get(self.module)
m = univention.admin.modules._get(self.module)
# evaluate extended attributes
ocs = set() # type: set[str]
for prop in getattr(m, 'extended_udm_attributes', []):
@ -1446,7 +1445,7 @@ class simpleLdap(object):
def _fix_app_options(self): # type: () -> None
# for objects with objectClass=appObject and appObjectActivated=0 we must set appObjectActivated=1
for option, opt in getattr(univention.admin.modules.get(self.module), 'options', {}).items():
for option, opt in getattr(univention.admin.modules._get(self.module), 'options', {}).items():
if not opt.is_app_option or not self.option_toggled(option) or option not in self.options:
continue
for pname, prop in self.descriptions.items():
@ -1455,7 +1454,7 @@ class simpleLdap(object):
def _ldap_object_classes(self, ml): # type: (list[tuple]) -> list[tuple]
"""Detects the attributes changed in the given modlist, calculates the changes of the object class and appends it to the modlist."""
m = univention.admin.modules.get(self.module)
m = univention.admin.modules._get(self.module)
def lowerset(vals):
# type: (Iterable[str]) -> set[str]
@ -1647,7 +1646,7 @@ class simpleLdap(object):
pathlist = []
log.debug("loadPolicyObject: policy_type: %s", policy_type)
policy_module = univention.admin.modules.get(policy_type)
policy_module = univention.admin.modules._get(policy_type)
# overwrite property descriptions
univention.admin.ucr_overwrite_properties(policy_module, self.lo)
@ -1829,8 +1828,8 @@ class simpleLdap(object):
:param univention.admin.uldap.access lo: UDM LDAP access object.
"""
containers = univention.admin.modules.defaultContainers(univention.admin.modules.get_module(cls.module))
settings_directory = univention.admin.modules.get_module('settings/directory')
containers = univention.admin.modules.defaultContainers(univention.admin.modules._get(cls.module))
settings_directory = univention.admin.modules._get('settings/directory')
try:
default_containers = settings_directory.lookup(None, lo, '', required=True)[0]
except univention.admin.uexceptions.noObject:
@ -1908,7 +1907,7 @@ class simpleLdap(object):
filter_p = cls.unmapped_lookup_filter()
# there are instances where the lookup/lookup_filter method of an module handler is called before
# univention.admin.modules.update() was performed. (e.g. management/univention-directory-manager-modules/univention-dnsedit)
module = univention.admin.modules.get_module(cls.module)
module = univention.admin.modules._get(cls.module)
filter_p.append_unmapped_filter_string(filter_s, cls.rewrite_filter, module.mapping)
return filter_p
@ -1958,7 +1957,7 @@ class simpleLdap(object):
return
# management/univention-management-console/src/univention/management/console/acl.py does not call univention.admin.modules.update()
mod = univention.admin.modules.get_module(cls.module)
mod = univention.admin.modules._get(cls.module)
property_ = mod.property_descriptions.get(key)
# map options to corresponding objectClass

View File

@ -85,11 +85,10 @@ def lookup(co, lo, filter_s, base='', superordinate=None, scope='sub', unique=Fa
if not superordinate:
filter_s = ""
base = univention.admin.blocklist.BLOCKLIST_BASE
sup = univention.admin.modules.get(superordinate.module) if superordinate else None
sup = univention.admin.modules._get(superordinate.module) if superordinate else None
res = [] # type: list[univention.admin.handlers.simpleLdap]
for childmodule in (sup.childmodules if sup else childmodules):
mod = univention.admin.modules.get(childmodule)
assert mod is not None
mod = univention.admin.modules._get(childmodule)
res += mod.lookup(co, lo, filter_s, base, superordinate, scope, unique, required, timeout, sizelimit)
return res

View File

@ -358,7 +358,7 @@ class ComputerObject(univention.admin.handlers.simpleComputer, nagios.Support, P
def lookup_filter(cls, filter_s=None, lo=None):
# type: (str | None, univention.admin.uldap.access | None) -> univention.admin.filter.conjunction
lookup_filter_obj = cls.unmapped_lookup_filter()
module = univention.admin.modules.get_module(cls.module)
module = univention.admin.modules._get(cls.module)
# ATTENTION: has its own rewrite function.
lookup_filter_obj.append_unmapped_filter_string(filter_s, functools.partial(cls.rewrite_filter, lo=lo), module.mapping)
return lookup_filter_obj

View File

@ -231,7 +231,7 @@ class object(univention.admin.handlers.simpleLdap):
def _ldap_post_move(self, olddn):
# type: (str) -> None
super(object, self)._ldap_post_move(olddn)
settings_module = univention.admin.modules.get('settings/directory')
settings_module = univention.admin.modules._get('settings/directory')
settings_object = univention.admin.objects.get(settings_module, None, self.lo, position='', dn=self.default_dn)
settings_object.open()
needs_modify = False

View File

@ -242,7 +242,7 @@ class object(univention.admin.handlers.simpleLdap):
def _ldap_post_move(self, olddn):
# type: (str) -> None
super(object, self)._ldap_post_move(olddn)
settings_module = univention.admin.modules.get('settings/directory')
settings_module = univention.admin.modules._get('settings/directory')
settings_object = univention.admin.objects.get(settings_module, None, self.lo, position='', dn=self.default_dn)
settings_object.open()
for attr in ['dns', 'license', 'computers', 'shares', 'groups', 'printers', 'policies', 'dhcp', 'networks', 'users', 'mail']:

View File

@ -89,11 +89,10 @@ class object(univention.admin.handlers.simpleLdap):
def lookup(co, lo, filter_s, base='', superordinate=None, scope='sub', unique=False, required=False, timeout=-1, sizelimit=0):
# type: (None, univention.admin.uldap.access, str, str, univention.admin.handlers.simpleLdap | None, str, bool, bool, int, int) -> list[univention.admin.handlers.simpleLdap]
sup = univention.admin.modules.get(superordinate.module) if superordinate else None
sup = univention.admin.modules._get(superordinate.module) if superordinate else None
res = [] # type: list[univention.admin.handlers.simpleLdap]
for childmodule in (sup.childmodules if sup else childmodules):
mod = univention.admin.modules.get(childmodule)
assert mod is not None
mod = univention.admin.modules._get(childmodule)
res += mod.lookup(co, lo, filter_s, base, superordinate, scope, unique, required, timeout, sizelimit)
return res

View File

@ -101,11 +101,10 @@ MAP_SEARCH = {
def lookup(co, lo, filter_s, base='', superordinate=None, scope='sub', unique=False, required=False, timeout=-1, sizelimit=0):
# type: (None, univention.admin.uldap.access, str, str, univention.admin.handlers.simpleLdap | None, str, bool, bool, int, int) -> list[univention.admin.handlers.simpleLdap]
sup = univention.admin.modules.get(superordinate.module) if superordinate else None
sup = univention.admin.modules._get(superordinate.module) if superordinate else None
res = [] # type: list[univention.admin.handlers.simpleLdap]
for childmodule in (sup.childmodules if sup else childmodules):
mod = univention.admin.modules.get(childmodule)
assert mod is not None
mod = univention.admin.modules._get(childmodule)
try:
attr = MAP_SEARCH[childmodule]
except LookupError:

View File

@ -649,7 +649,7 @@ class object(univention.admin.handlers.simpleLdap):
def _ldap_post_move(self, olddn):
# type: (str) -> None
super(object, self)._ldap_post_move(olddn)
settings_module = univention.admin.modules.get('settings/default')
settings_module = univention.admin.modules._get('settings/default')
settings_object = univention.admin.objects.get(settings_module, None, self.lo, position='', dn='cn=default,cn=univention,%s' % self.lo.base)
settings_object.open()
for attr in ['defaultGroup', 'defaultMemberServerGroup', 'defaultClientGroup', 'defaultDomainControllerMBGroup', 'defaultDomainControllerGroup', 'defaultComputerGroup']:
@ -756,7 +756,7 @@ class object(univention.admin.handlers.simpleLdap):
return
grpdn2childgrpdns = {}
grp_module = univention.admin.modules.get('groups/group')
grp_module = univention.admin.modules._get('groups/group')
cn = self.info.get('name', 'UNKNOWN')

View File

@ -86,8 +86,7 @@ def lookup(co, lo, filter_s, base='', superordinate=None, scope='sub', unique=Fa
# type: (None, univention.admin.uldap.access, str, str, univention.admin.handlers.simpleLdap | None, str, bool, bool, int, int) -> list[univention.admin.handlers.simpleLdap]
res = [] # type: list[univention.admin.handlers.simpleLdap]
for childmodule in childmodules:
mod = univention.admin.modules.get(childmodule)
assert mod is not None
mod = univention.admin.modules._get(childmodule)
res += mod.lookup(co, lo, filter_s, base, superordinate, scope, unique, required, timeout, sizelimit)
return res

View File

@ -87,8 +87,7 @@ def lookup(co, lo, filter_s, base='', superordinate=None, scope='sub', unique=Fa
# type: (None, univention.admin.uldap.access, str, str, univention.admin.handlers.simpleLdap | None, str, bool, bool, int, int) -> list[univention.admin.handlers.simpleLdap]
res = [] # type: list[univention.admin.handlers.simpleLdap]
for childmodule in childmodules:
mod = univention.admin.modules.get(childmodule)
assert mod is not None
mod = univention.admin.modules._get(childmodule)
res += mod.lookup(co, lo, filter_s, base, superordinate, scope, unique, required, timeout, sizelimit)
return res

View File

@ -222,7 +222,7 @@ class object(univention.admin.handlers.simpleLdap):
def _ldap_post_remove(self):
super(object, self)._ldap_post_remove()
filter_ = univention.admin.filter.expression('univentionNetworkLink', self.dn, escape=True)
for computer in univention.admin.modules.get('computers/computer').lookup(None, self.lo, filter_s=filter_):
for computer in univention.admin.modules._get('computers/computer').lookup(None, self.lo, filter_s=filter_):
try:
self.lo.modify(computer.dn, [('univentionNetworkLink', self.dn.encode('UTF-8'), b'')])
except (univention.admin.uexceptions.base, ldap.LDAPError):

View File

@ -336,7 +336,7 @@ class object(univention.admin.handlers.simpleLdap):
try:
compobj = univention.admin.modules.lookup('computers/computer', None, self.lo, scope='base', base=computer)[0]
# initialize module of the computer obj for extended attributes
compmod = univention.admin.modules.get(compobj.module)
compmod = univention.admin.modules._get(compobj.module)
if not compmod.initialized:
univention.admin.modules.init(self.lo, self.position, compmod)
compobj = univention.admin.modules.lookup('computers/computer', None, self.lo, scope='base', base=computer)[0]
@ -352,7 +352,7 @@ class object(univention.admin.handlers.simpleLdap):
try:
compobj = univention.admin.modules.lookup('computers/computer', None, self.lo, scope='base', base=computer)[0]
# initialize module of the computer obj for extended attributes
compmod = univention.admin.modules.get(compobj.module)
compmod = univention.admin.modules._get(compobj.module)
if not compmod.initialized:
univention.admin.modules.init(self.lo, self.position, compmod)
compobj = univention.admin.modules.lookup('computers/computer', None, self.lo, scope='base', base=computer)[0]
@ -371,7 +371,7 @@ class object(univention.admin.handlers.simpleLdap):
if not self.hasChanged('content'):
return
portal_entry_mod = univention.admin.modules.get('settings/portal_entry')
portal_entry_mod = univention.admin.modules._get('settings/portal_entry')
old_content = self.oldinfo.get('content', [])
old_entries = [entry for category, entries in old_content for entry in entries]

View File

@ -78,8 +78,7 @@ def lookup(co, lo, filter_s, base='', superordinate=None, scope='sub', unique=Fa
# type: (None, univention.admin.uldap.access, str, str, univention.admin.handlers.simpleLdap | None, str, bool, bool, int, int) -> list[univention.admin.handlers.simpleLdap]
res = [] # type: list[univention.admin.handlers.simpleLdap]
for child in childmodules:
mod = univention.admin.modules.get(child)
assert mod is not None
mod = univention.admin.modules._get(child)
res += mod.lookup(co, lo, filter_s, base, superordinate, scope, unique, required, timeout, sizelimit)
return res

View File

@ -226,7 +226,7 @@ class object(univention.admin.handlers.simpleLdap):
def _remove_self_from_portal(self, portal_obj):
if isinstance(portal_obj, six.string_types):
try:
portal_mod = univention.admin.modules.get('settings/portal')
portal_mod = univention.admin.modules._get('settings/portal')
portal_obj = univention.admin.objects.get(portal_mod, None, self.lo, position='', dn=portal_obj)
except univention.admin.uexceptions.noObject:
# If a settings/portal objects gets removed it removes itself from the 'portal' property of all
@ -249,7 +249,7 @@ class object(univention.admin.handlers.simpleLdap):
def _add_self_to_portal(self, portal_obj):
if isinstance(portal_obj, six.string_types):
portal_mod = univention.admin.modules.get('settings/portal')
portal_mod = univention.admin.modules._get('settings/portal')
portal_obj = univention.admin.objects.get(portal_mod, None, self.lo, position='', dn=portal_obj)
portal_obj.open()
@ -265,7 +265,7 @@ class object(univention.admin.handlers.simpleLdap):
new_content = [[portal_category_dn, [self.dn]]] + old_content
if new_content != old_content:
try:
portal_category_mod = univention.admin.modules.get('settings/portal_category')
portal_category_mod = univention.admin.modules._get('settings/portal_category')
univention.admin.objects.get(portal_category_mod, None, self.lo, position='', dn=portal_category_dn)
except univention.admin.uexceptions.noObject:
# if the settings/portal_category object for the category string does not exist anymore create it

View File

@ -94,8 +94,7 @@ def lookup(co, lo, filter_s, base='', superordinate=None, scope='sub', unique=Fa
# type: (None, univention.admin.uldap.access,str, str, univention.admin.handlers.simpleLdap | None, str, bool, bool, int, int) -> list[univention.admin.handlers.simpleLdap]
res = [] # type: list[univention.admin.handlers.simpleLdap]
for child in childmodules:
mod = univention.admin.modules.get(child)
assert mod is not None
mod = univention.admin.modules._get(child)
res += mod.lookup(co, lo, filter_s, base, superordinate, scope, unique, required, timeout, sizelimit)
return res

View File

@ -223,7 +223,7 @@ class object(univention.admin.handlers.simpleLdap):
): # type: (...) -> None
# find the printer uris
if not _AVAILABLE_PRINTER_SCHEMAS:
printer_uris = univention.admin.modules.get('settings/printeruri').lookup(co, lo, '')
printer_uris = univention.admin.modules._get('settings/printeruri').lookup(co, lo, '')
for uri in printer_uris:
_AVAILABLE_PRINTER_SCHEMAS.extend(uri['printeruri'])
@ -234,7 +234,7 @@ class object(univention.admin.handlers.simpleLdap):
# find the producer
univention.admin.handlers.simpleLdap.open(self)
if self['model']:
models = univention.admin.modules.get('settings/printermodel').lookup(None, self.lo, filter_format('printerModel="%s*', [self['model']]))
models = univention.admin.modules._get('settings/printermodel').lookup(None, self.lo, filter_format('printerModel="%s*', [self['model']]))
log.debug("printermodel: %s", models)
if not models or len(models) > 1:
self['producer'] = []
@ -280,7 +280,7 @@ class object(univention.admin.handlers.simpleLdap):
if len(member_list['univentionPrinterGroupMember']) < 2:
raise univention.admin.uexceptions.emptyPrinterGroup(_('%(name)s is the last member of the printer group %(group)s. ') % {'name': self.info['name'], 'group': member_list['cn'][0].decode('UTF-8')})
printergroup_module = univention.admin.modules.get('shares/printergroup')
printergroup_module = univention.admin.modules._get('shares/printergroup')
for rm_dn in rm_attrib:
printergroup_object = univention.admin.objects.get(printergroup_module, None, self.lo, position='', dn=rm_dn)
printergroup_object.open()

View File

@ -131,7 +131,7 @@ class object(univention.admin.handlers.simpleLdap):
if len(member_list['univentionPrinterGroupMember']) < 2:
raise univention.admin.uexceptions.emptyPrinterGroup(_('%(name)s is the last member of the printer group %(group)s. ') % {'name': self.info['name'], 'group': member_list['cn'][0].decode('UTF-8')})
printergroup_module = univention.admin.modules.get('shares/printergroup')
printergroup_module = univention.admin.modules._get('shares/printergroup')
for rm_dn in rm_attrib:
printergroup_object = univention.admin.objects.get(printergroup_module, None, self.lo, position='', dn=rm_dn)
printergroup_object.open()

View File

@ -84,7 +84,7 @@ class object(univention.admin.handlers.users.user.object):
if lo:
dn = lo.whoami()
filter_p = univention.admin.filter.parse(filter_format('(&(entryDN=%s))', [dn]))
module = univention.admin.modules.get_module(cls.module)
module = univention.admin.modules._get(cls.module)
filter_p.append_unmapped_filter_string(filter_s, cls.rewrite_filter, module.mapping)
return filter_p
return super(object, cls).lookup_filter(filter_s, lo)

View File

@ -699,7 +699,7 @@ def get_primary_group_dn(lo, gid_number): # type: (univention.admin.uldap.acces
def check_prohibited_username(lo, username): # type: (univention.admin.uldap.access, str) -> None
"""check if the username is allowed"""
module = univention.admin.modules.get('settings/prohibited_username')
module = univention.admin.modules._get('settings/prohibited_username')
for prohibited_object in (module.lookup(None, lo, u'') or []):
if username in prohibited_object['usernames']:
raise univention.admin.uexceptions.prohibitedUsername(username)
@ -1250,7 +1250,7 @@ class object(univention.admin.handlers.simpleLdap, PKIIntegration):
univention.admin.filter.expression('univentionSharePath', u'%s/' % (sharepath.rstrip(u'/')), escape=True),
]),
])
res = univention.admin.modules.lookup(univention.admin.modules.get('shares/share'), None, self.lo, filter=filter_, scope='domain')
res = univention.admin.modules.lookup(univention.admin.modules._get('shares/share'), None, self.lo, filter=filter_, scope='domain')
if len(res) == 1:
self['homeShare'] = res[0].dn
# Py3.9+: self['homeSharePath'] = path.removeprefix(sharepath).lstrip("/")
@ -1353,7 +1353,7 @@ class object(univention.admin.handlers.simpleLdap, PKIIntegration):
for group in new_groups:
self.__rewrite_member_uid(group)
group_mod = univention.admin.modules.get('groups/group')
group_mod = univention.admin.modules._get('groups/group')
log.debug('users/user: check groups in old_groups')
for group in old_groups:
@ -1401,7 +1401,7 @@ class object(univention.admin.handlers.simpleLdap, PKIIntegration):
if configRegistry.is_true("directory/manager/user/primarygroup/update", True):
new_uid = self.info.get('username')
group_mod = univention.admin.modules.get('groups/group')
group_mod = univention.admin.modules._get('groups/group')
grpobj = group_mod.object(None, self.lo, self.position, self['primaryGroup'])
grpobj.fast_member_add([self.dn], [new_uid])
log.debug('users/user: adding to new primaryGroup %s (uid=%s)', self['primaryGroup'], new_uid)
@ -1914,7 +1914,7 @@ class object(univention.admin.handlers.simpleLdap, PKIIntegration):
# type: (list[tuple[str, Any, Any]]) -> list[tuple[str, Any, Any]]
if self.hasChanged('homeShare') or self.hasChanged('homeSharePath'):
if self['homeShare']:
share_mod = univention.admin.modules.get('shares/share')
share_mod = univention.admin.modules._get('shares/share')
try:
share = share_mod.object(None, self.lo, self.position, self['homeShare'])
share.open()
@ -2012,7 +2012,7 @@ class object(univention.admin.handlers.simpleLdap, PKIIntegration):
super(object, self)._ldap_post_remove()
for group in self.oldinfo.get('groups', []):
groupObject = univention.admin.objects.get(univention.admin.modules.get('groups/group'), self.co, self.lo, self.position, group)
groupObject = univention.admin.objects.get(univention.admin.modules._get('groups/group'), self.co, self.lo, self.position, group)
groupObject.fast_member_remove([self.dn], [x.decode('UTF-8') for x in self.oldattr.get('uid', [])], ignore_license=True)
def _move(self, newdn, modify_childs=True, ignore_license=False):

View File

@ -195,32 +195,20 @@ def get(module):
return module # type: ignore[return-value]
@overload
def get_module(module):
# type: (UdmModule) -> UdmModule
pass
@overload
def get_module(module):
# type: (str) -> UdmModule | None
pass
def get_module(module):
# type: (UdmName) -> UdmModule | None
def _get(module):
# type: (UdmModule | str) -> UdmModule
"""
interim function, must only be used by `univention-directory-manager-modules`!
.. deprecated :: UCS 4.4
Internal function to lazy-load and get |UDM| module.
:param module: either the name (str) of a module or the module itself.
:returns: the module or `None` if no module exists with the requested name.
:returns: the module
:raises KeyError: if no module exists with the requested name.
"""
if not modules:
log.warning('univention.admin.modules.update() was not called')
update()
return get(module)
if isinstance(module, str):
return modules[module]
return module
def init(lo, position, module, template_object=None, force_reload=False):
@ -242,7 +230,7 @@ def init(lo, position, module, template_object=None, force_reload=False):
if module.module == 'users/user':
# users/self inherits from users/user leading to errors when not reloading it as well
# TODO: remove when droppng Python2.7 support and all super(object, self) calls have been replaced with super()
reload_module(univention.admin.modules.get('users/self')) # type: ignore
reload_module(univention.admin.modules._get('users/self')) # type: ignore
# reset property descriptions to defaults if possible
if hasattr(module, 'default_property_descriptions'):
module.property_descriptions = copy.deepcopy(module.default_property_descriptions)

View File

@ -73,7 +73,7 @@ def get_superordinate(module, co, lo, dn):
attr = lo.get(dn)
modules = {univention.admin.modules.name(x) for x in univention.admin.modules.identify(dn, attr)} & super_modules
if modules:
super_module = univention.admin.modules.get(list(modules)[0]) # noqa: RUF015
super_module = univention.admin.modules._get(list(modules)[0]) # noqa: RUF015
return get(super_module, co, lo, None, dn)
dn = lo.parentDn(dn)
@ -137,7 +137,7 @@ def default(module, co, lo, position):
:param position: |UDM| position instance.
:returns: An initialized |UDM| object.
"""
module = univention.admin.modules.get(module)
module = univention.admin.modules._get(module)
object = module.object(co, lo, position)
for name, property in module.property_descriptions.items():
default = property.default(object)
@ -290,7 +290,7 @@ def replacePolicyReference(object, policy_type, new_reference):
"""
# FIXME: Move this to handlers.simpleLdap?
module = univention.admin.modules.get(policy_type)
module = univention.admin.modules._get(policy_type)
if not univention.admin.modules.recognize(module, new_reference, object.lo.get(new_reference)):
log.debug('replacePolicyReference: error.')
return
@ -310,8 +310,9 @@ def restorePolicyReference(object, policy_type):
:param policy_type: Name of the |UDM| policy to lookup.
"""
# FIXME: Move this to handlers.simpleLdap?
module = univention.admin.modules.get(policy_type)
if not module:
try:
module = univention.admin.modules._get(policy_type)
except LookupError:
return
removePolicyReference(object, policy_type)
@ -337,7 +338,7 @@ def wantsCleanup(object):
wantsCleanup = False
object_module = module(object)
object_module = univention.admin.modules.get(object_module)
object_module = univention.admin.modules._get(object_module)
if hasattr(object_module, 'docleanup'):
wantsCleanup = object_module.docleanup

View File

@ -853,8 +853,9 @@ class UDM_Objects(ISyntax, _UDMObjectOrAttribute):
return result
for udm_module in cls.udm_modules:
module = univention.admin.modules.get(udm_module)
if not module:
try:
module = univention.admin.modules._get(udm_module)
except LookupError:
continue
filter_s = cls._create_ldap_filter(options, module)
if filter_s is not None:
@ -862,8 +863,9 @@ class UDM_Objects(ISyntax, _UDMObjectOrAttribute):
choices.extend(map_choices(objs))
else:
for udm_module in cls.udm_modules:
module = univention.admin.modules.get(udm_module)
if not module:
try:
module = univention.admin.modules._get(udm_module)
except LookupError:
continue
filter_s = cls._create_ldap_filter(options, module)
if filter_s is not None:
@ -996,8 +998,9 @@ class UDM_Attribute(ISyntax, _UDMObjectOrAttribute):
return _choices
return [(x, x) for x in values]
module = univention.admin.modules.get(cls.udm_module)
if not module:
try:
module = univention.admin.modules._get(cls.udm_module)
except LookupError:
return []
log.debug('Found syntax %s with udm_module property', cls.name)
@ -5873,7 +5876,7 @@ class allModuleOptions(combobox):
return cls.sort_choices([
(key, opt.short_description)
for module in modules
for key, opt in getattr(univention.admin.modules.get(module), 'options', {}).items()
for key, opt in getattr(univention.admin.modules._get(module), 'options', {}).items()
if key != 'default'
])

View File

@ -543,8 +543,9 @@ def _doit(
log.debug("using %s account", binddn)
module = univention.admin.modules.get(module_name)
if not module:
try:
module = univention.admin.modules._get(module_name)
except LookupError:
print("unknown module %s." % module_name, file=stderr)
print("", file=stderr)
list_available_modules(stderr)
@ -569,7 +570,7 @@ def _doit(
# initialise modules
if module_name == 'settings/usertemplate':
univention.admin.modules.init(lo, position, univention.admin.modules.get('users/user'))
univention.admin.modules.init(lo, position, univention.admin.modules._get('users/user'))
univention.admin.modules.init(lo, position, module)
information = module_information(module)
@ -998,8 +999,8 @@ class CLI(object):
print('', file=self.stdout)
if module_name == 'dhcp/host':
subnet_module = univention.admin.modules.get('dhcp/subnet')
# TODO: sharedsubnet_module = univention.admin.modules.get('dhcp/sharedsubnet')
subnet_module = univention.admin.modules._get('dhcp/subnet')
# TODO: sharedsubnet_module = univention.admin.modules._get('dhcp/sharedsubnet')
ips = object['fixedaddress']
for ip in ips:
ip_ = IPv4Address(u"%s" % (ip,))

View File

@ -103,7 +103,7 @@ def doit(arglist):
dn = lo.searchDn(filter=filter_format(u'(&(uid=%s)(|(objectClass=posixAccount)(objectClass=sambaSamAccount)(objectClass=person)))', [user]), base=baseDN, unique=True)
position = univention.admin.uldap.position(baseDN)
module = univention.admin.modules.get('users/user')
module = univention.admin.modules._get('users/user')
univention.admin.modules.init(lo, position, module)
object = univention.admin.objects.get(module, None, lo, position=position, dn=dn[0])
@ -138,7 +138,7 @@ def doit(arglist):
lo = univention.admin.uldap.access(lo=univention.uldap.getRootDnConnection())
dn = lo.searchDn(filter=filter_format(u'(&(uid=%s)(|(objectClass=posixAccount)(objectClass=sambaSamAccount)(objectClass=person)))', [user]), base=baseDN, unique=True)
position = univention.admin.uldap.position(baseDN)
module = univention.admin.modules.get('users/user')
module = univention.admin.modules._get('users/user')
univention.admin.modules.init(lo, position, module)
object = univention.admin.objects.get(module, None, lo, position=position, dn=dn[0])

View File

@ -680,8 +680,9 @@ class GenericModule(with_metaclass(GenericModuleMeta, BaseModule)):
if key not in self._udm_module_cache:
if self.name not in [k[3] for k in self._udm_module_cache.keys()]:
univention.admin.modules.update()
udm_module = univention.admin.modules.get(self.name)
if not udm_module:
try:
udm_module = univention.admin.modules._get(self.name)
except LookupError:
raise UnknownModuleType(
msg='UDM module {!r} does not exist.'.format(self.name),
module_name=self.name,

View File

@ -85,7 +85,7 @@ def lock(userdn, lock_timestamp): # type: (str, str) -> None
except Exception:
lo, pos = univention.admin.uldap.getMachineConnection()
module = univention.admin.modules.get('users/user')
module = univention.admin.modules._get('users/user')
univention.admin.modules.init(lo, pos, module)

View File

@ -60,7 +60,7 @@ def change(username, password): # type: (str, str) -> None
except Exception:
lo, pos = univention.admin.uldap.getMachineConnection()
module = univention.admin.modules.get('users/user')
module = univention.admin.modules._get('users/user')
univention.admin.modules.init(lo, pos, module)

View File

@ -61,10 +61,10 @@ def main():
configRegistry.load()
lo, _position = univention.admin.uldap.getAdminConnection()
forward_module = univention.admin.modules.get('dns/forward_zone')
forward_module = univention.admin.modules._get('dns/forward_zone')
forward_zones = univention.admin.modules.lookup(forward_module, None, lo, scope='sub', superordinate=None, base=configRegistry.get('ldap_base'))
srv_module = univention.admin.modules.get('dns/srv_record')
srv_module = univention.admin.modules._get('dns/srv_record')
for forward_zone in forward_zones:
srv_records = univention.admin.modules.lookup(srv_module, None, lo, scope='sub', superordinate=forward_zone, base=configRegistry.get('ldap_base'))

View File

@ -103,7 +103,7 @@ def main():
univention.admin.modules.update()
lo, position = get_ldap_connection(basedn)
grp_module = univention.admin.modules.get('groups/group')
grp_module = univention.admin.modules._get('groups/group')
univention.admin.modules.init(lo, position, grp_module)
recursionCnt = 0

View File

@ -254,7 +254,7 @@ def test_udm_filter(module, property, udm_filter, expected_filter):
def check_expected_filter(module, property, udm_filter, expected_filter):
expected_filter = BASE_FILTERS[module] % expected_filter
mod = univention.admin.modules.get(module)
mod = univention.admin.modules._get(module)
mod.property_descriptions[property]
actual_filter = mod.lookup_filter(udm_filter, None)
assert expected_filter == str(actual_filter)

View File

@ -1,3 +1,9 @@
ucs-test (10.0.20-49) unstable; urgency=low
* Bug #50385: Rename univention.admin.modules.{get_modules -> _get}
-- Philipp Hahn <hahn@univention.de> Wed, 06 Mar 2024 18:25:11 +0100
ucs-test (10.0.20-48) unstable; urgency=medium
* Bug #57072: Make tests cope with mixed case ldap base in udm group members
@ -10,7 +16,6 @@ ucs-test (10.0.20-47) unstable; urgency=medium
-- Felix Botner <botner@univention.de> Mon, 04 Mar 2024 15:48:19 +0100
ucs-test (10.0.20-46) unstable; urgency=medium
* Bug #56521: test fetchmail listener resync

View File

@ -52,6 +52,7 @@ Depends:
python3-selenium,
python3-typing-extensions,
python3-univention,
python3-univention-directory-manager (>= 15.0.25-23),
python3-yaml,
ucs-test-modules-all | ucs-test-module,
univention-config,

View File

@ -369,7 +369,7 @@ class UCSTestUDM:
def create_with_defaults(self, modulename: str, **kwargs: Any) -> Tuple[str, dict]:
"""Create any object with as maximum as possible prefilled random default values"""
module = univention.admin.modules.get_module(modulename)
module = univention.admin.modules._get(modulename)
# TODO: cache objects
if 'position' not in kwargs and not modulename.startswith('settings/portal'):