Univention Bugzilla – Attachment 9970 Details for
Bug 31857
Drop-down list for objectclass and attributes
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
patch
31857.patch (text/plain), 7.38 KB, created by
Florian Best
on 2019-04-15 11:13:49 CEST
(
hide
)
Description:
patch
Filename:
MIME Type:
Creator:
Florian Best
Created:
2019-04-15 11:13:49 CEST
Size:
7.38 KB
patch
obsolete
>commit bcdb451413c04558f03135ad45b8bd2e04f959b6 >Author: Florian Best <best@univention.de> >Date: Wed Apr 3 13:14:12 2019 +0200 > > Bug #31857: show drown down list for object classes and attribute names > >diff --git a/management/univention-directory-manager-modules/modules/univention/admin/handlers/settings/extended_attribute.py b/management/univention-directory-manager-modules/modules/univention/admin/handlers/settings/extended_attribute.py >index 98cd06f6af..17c81721e2 100644 >--- a/management/univention-directory-manager-modules/modules/univention/admin/handlers/settings/extended_attribute.py >+++ b/management/univention-directory-manager-modules/modules/univention/admin/handlers/settings/extended_attribute.py >@@ -263,7 +263,7 @@ > 'ldapMapping': univention.admin.property( > short_description=_('LDAP attribute'), > long_description=_('Univention Corporate Server provides its own LDAP scheme for customer extensions. The LDAP object class univentionFreeAttributes can be used for extended attributes without restrictions. It offers 20 freely usable attributes (univentionFreeAttribute1 to univentionFreeAttribute20) and can be used in connection with any LDAP object (e.g., a user object)'), >- syntax=univention.admin.syntax.string, >+ syntax=univention.admin.syntax.ldapAttribute, > multivalue=False, > options=[], > required=True, >@@ -304,7 +304,7 @@ > 'objectClass': univention.admin.property( > short_description=_('LDAP object class'), > long_description=_('Univention Corporate Server provides its own LDAP scheme for customer extensions. The LDAP object class univentionFreeAttributes can be used for extended attributes without restrictions. It offers 20 freely usable attributes (univentionFreeAttribute1 to univentionFreeAttribute20) and can be used in connection with any LDAP object (e.g., a user object)'), >- syntax=univention.admin.syntax.string, >+ syntax=univention.admin.syntax.ldapObjectClass, > multivalue=False, > options=[], > required=True, >diff --git a/management/univention-directory-manager-modules/modules/univention/admin/handlers/settings/extended_options.py b/management/univention-directory-manager-modules/modules/univention/admin/handlers/settings/extended_options.py >index 8b2950e38c..da3be78b51 100644 >--- a/management/univention-directory-manager-modules/modules/univention/admin/handlers/settings/extended_options.py >+++ b/management/univention-directory-manager-modules/modules/univention/admin/handlers/settings/extended_options.py >@@ -145,7 +145,7 @@ > 'objectClass': univention.admin.property( > short_description=_('LDAP object class'), > long_description=_('Mapping to LDAP objectClasses'), >- syntax=univention.admin.syntax.string, >+ syntax=univention.admin.syntax.ldapObjectClass, > multivalue=True, > options=[], > required=False, >diff --git a/management/univention-directory-manager-modules/modules/univention/admin/policy.py b/management/univention-directory-manager-modules/modules/univention/admin/policy.py >index fc330b4a54..ec9d2905b1 100644 >--- a/management/univention-directory-manager-modules/modules/univention/admin/policy.py >+++ b/management/univention-directory-manager-modules/modules/univention/admin/policy.py >@@ -58,7 +58,7 @@ def requiredObjectClassesProperty(**kwargs): > pargs = dict( > short_description=_('Required object class'), > long_description='', >- syntax=univention.admin.syntax.string, >+ syntax=univention.admin.syntax.ldapObjectClass, > multivalue=True, > options=[], > required=False, >@@ -73,7 +73,7 @@ def prohibitedObjectClassesProperty(**kwargs): > pargs = dict( > short_description=_('Excluded object class'), > long_description='', >- syntax=univention.admin.syntax.string, >+ syntax=univention.admin.syntax.ldapObjectClass, > multivalue=True, > options=[], > required=False, >diff --git a/management/univention-directory-manager-modules/modules/univention/admin/syntax.py b/management/univention-directory-manager-modules/modules/univention/admin/syntax.py >index 738b8fb2dd..91a75a3998 100644 >--- a/management/univention-directory-manager-modules/modules/univention/admin/syntax.py >+++ b/management/univention-directory-manager-modules/modules/univention/admin/syntax.py >@@ -2383,22 +2383,49 @@ def parse(self, text): > raise univention.admin.uexceptions.valueError(_("Not a valid LDAP DN")) > > >-class ldapObjectClass(simple): >+class ldapObjectClass(combobox): > """ > Syntax to enter a |LDAP| objectClass name. > """ >- @classmethod >- def parse(self, text): >- return text >+ choices = (('top', 'top')) > > >-class ldapAttribute(simple): >+class ldapAttribute(combobox): > """ > Syntax to enter a |LDAP| attribute name. > """ >- @classmethod >- def parse(self, text): >- return text >+ >+ >+def _update_schema(): >+ from univention.uldap import getMachineConnection >+ from ldap.schema import ObjectClass, AttributeType >+ try: >+ conn = getMachineConnection() >+ subschema = conn.get_schema() >+ >+ ocs = set() >+ for oid in subschema.listall(ObjectClass): >+ oc = subschema.get_obj(ObjectClass, oid) >+ if oc: >+ ocs |= set(oc.names) >+ ldapObjectClass.choices = [(_oc, _oc) for _oc in sorted(ocs, key=lambda s: s.lower())] >+ >+ attrs = set() >+ for oid in subschema.listall(AttributeType): >+ attr = subschema.get_obj(AttributeType, oid) >+ if attr: >+ attrs |= set(attr.names) >+ ldapAttribute.choices = [(_attr, _attr) for _attr in sorted(attrs, key=lambda s: s.lower())] >+ except ldap.SERVER_DOWN: >+ pass >+ finally: >+ try: >+ conn.unbind() >+ except: >+ pass >+ >+ >+__register_choice_update_function(_update_schema) > > > class ldapFilter(simple): >@@ -4051,24 +4078,19 @@ def parse(self, text): > return text > raise univention.admin.uexceptions.valueInvalidSyntax(_('"%s" is not a Univention Admin Module.') % text) > >-# Unfortunately, Python doesn't seem to support (static) class methods; >-# however, (static) class variables such as "choices" seem to work; >-# so, we'll modify "choices" using this global method >- >- >-def univentionAdminModules_update(): >- """ >- Update internal list of |UDM| modules in :py:class:`univentionAdminModules`. >- """ >- temp = [] >- for name, mod in univention.admin.modules.modules.items(): >- if not univention.admin.modules.virtual(mod): >- temp.append((name, univention.admin.modules.short_description(mod))) >- >- univentionAdminModules.choices = sorted(temp, key=operator.itemgetter(1)) >+ @classmethod >+ def update_choices(cls): >+ """ >+ Update internal list of |UDM| modules in :py:class:`univentionAdminModules`. >+ """ >+ cls.choices = sorted([ >+ (name, univention.admin.modules.short_description(mod)) >+ for name, mod in univention.admin.modules.modules.items() >+ if not univention.admin.modules.virtual(mod) >+ ], key=operator.itemgetter(1)) > > >-__register_choice_update_function(univentionAdminModules_update) >+__register_choice_update_function(univentionAdminModules.update_choices) > > > class UDM_PropertySelect(complex): >diff --git a/management/univention-management-console-module-udm/umc/python/udm/__init__.py b/management/univention-management-console-module-udm/umc/python/udm/__init__.py >index fa134ff10e..22a0bf5280 100644 >--- a/management/univention-management-console-module-udm/umc/python/udm/__init__.py >+++ b/management/univention-management-console-module-udm/umc/python/udm/__init__.py >@@ -178,6 +178,7 @@ def init(self): > # read user settings and initial UDR > self.reports_cfg = udr.Config() > self.modules_with_childs = container_modules() >+ udm_syntax.update_choices() > > def set_locale(self, _locale): > super(Instance, self).set_locale(_locale)
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 31857
:
6969
| 9970