Bug 55915 - Make code compatible with Python 3.11 deprecations
Summary: Make code compatible with Python 3.11 deprecations
Status: CLOSED FIXED
Alias: None
Product: UCS
Classification: Unclassified
Component: General
Version: UCS 5.0
Hardware: Other Linux
: P5 normal
Target Milestone: UCS 5.2
Assignee: Mika Westphal
QA Contact: Florian Best
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2023-03-29 14:20 CEST by Florian Best
Modified: 2025-02-05 15:08 CET (History)
2 users (show)

See Also:
What kind of report is it?: Development Internal
What type of bug is this?: ---
Who will be affected by this bug?: ---
How will those affected feel about the bug?: ---
User Pain:
Enterprise Customer affected?:
School Customer affected?:
ISV affected?:
Waiting Support:
Flags outvoted (downgraded) after PO Review:
Ticket number:
Bug group (optional): API change
Customer ID:
Max CVSS v3 score:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Florian Best univentionstaff 2023-03-29 14:20:29 CEST
https://docs.python.org/3/whatsnew/3.11.html

crypt:
management/univention-directory-manager-modules/modules/univention/admin/password.py:    from crypt import crypt as _crypt
management/univention-self-service/unittests/test_verify_user.py:import crypt
test/ucs-test/tests/10_ldap/50ppolicy_account_lockout:  python3 -c "import crypt, univention.uldap; lo = univention.uldap.getMachineConnection(); password = lo.getAttr('${test_userdn}', 'userPassword')[0].decode(
test/ucs-test/tests/10_ldap/56ppolicy_account_lockout_concurrent:               python3 -c "import crypt, univention.uldap; lo = univention.uldap.getMachineConnection(); password = lo.getAttr('${test_userdn}', 'u

cgi:
base/univention-system-activation/src/wsgi.py:import cgi
management/univention-appcenter/conffiles/usr/share/univention-management-console/modules/apps.xml:    from cgi import escape
management/univention-directory-reports/modules/univention/directory/reports/admin.py:    from cgi import escape
management/univention-management-console/univention-management-console-web-server:    from cgi import escape
test/ucs-test/univention/testing/license_client.py:import cgi

imghdr:
management/univention-directory-manager-modules/modules/univention/admin/syntax.py:import imghdr
management/univention-portal/python/univention/portal/extensions/reloader.py:from imghdr import what

pipes:
base/univention-config-registry/python/univention-install-config-registry:    from pipes import quote
base/univention-config-registry/python/univention/config_registry/misc.py:from pipes import quote as escape_value
base/univention-grub/conffiles/etc/default/grub:from pipes import quote
base/univention-home-mounter/univention-mount-homedir:import pipes
base/univention-lib/debian/python3-univention-lib.postinst:import pipes
base/univention-lib/python/admember.py:import pipes
base/univention-lib/python/listenerSharePath.py:import pipes
base/univention-system-setup/umc/python/setup/checks/ldap.py:from pipes import quote
base/univention-system-setup/umc/python/setup/checks/univention_join.py:import pipes
base/univention-updater/umc/python/updater/__init__.py:import pipes
management/univention-appcenter/python/appcenter/actions/get.py:from pipes import quote
management/univention-appcenter/python/appcenter/utils.py:import pipes
management/univention-directory-listener/conffiles/etc/default/univention-directory-listener:from pipes import quote
management/univention-directory-manager-modules/scripts/udm-remap-country-from-st-to-c:import pipes
management/univention-join/dh-univention-join-install:from pipes import quote
management/univention-management-console-module-diagnostic/umc/python/diagnostic/plugins/63_proof_uniqueMembers.py:import pipes
management/univention-management-console-module-diagnostic/umc/python/diagnostic/plugins/66_udm_country_remap_from_st_to_c.py:import pipes
management/univention-management-console/src/univention/management/console/protocol/session.py:import pipes
monitoring/univention-monitoring-client/alerts/check_univention_joinstatus:import pipes
monitoring/univention-monitoring-client/alerts/check_univention_nmbd:import pipes
services/univention-ad-connector/conffiles/ad-certificate.py:import pipes
services/univention-ad-connector/umc/python/adconnector/__init__.py:import pipes
services/univention-printserver/cups-printers.py:import pipes
services/univention-printserver/ppds.py:import pipes
services/univention-squid/conffiles/etc/squid/squid.conf:import pipes
test/ucs-test/tests/59_udm/71_test_udm_settings.py:import pipes
test/ucs-test/tests/99_end/01_var_log_tracebacks.py:import pipes
test/ucs-test/univention/testing/udm.py:import pipes

SafeConfigParser:
test/ucs-gui-tests/installation/conftest.py:config = ConfigParser.SafeConfigParser()

configparser.RawConfigParser.readfp():
management/univention-appcenter/python/appcenter/actions/get.py:            config_parser.readfp(f)
management/univention-appcenter/python/appcenter/actions/get.py:            config_parser.readfp(f)
management/univention-appcenter/python/appcenter/ini_parser.py:            parser.readfp(f)
management/univention-appcenter/python/appcenter/utils.py:            parser.readfp(f)
services/univention-ad-connector/modules/univention/connector/ad/query_config.py:config.readfp(open(configfile))
services/univention-s4-connector/modules/univention/s4connector/s4/query_config.py:config.readfp(open(configfile))

locale.getdefaultlocale
base/univention-lib/python/umc.py:        self._language = language or locale.getdefaultlocale()[0] or ''
management/univention-management-console/scripts/univention-management-console-client:        self.language = (locale.getlocale()[0] or locale.getdefaultlocale()[0] or 'en-US').replace('_', '-')
management/univention-management-console/src/univention/management/console/tools.py:        lang, encoding = locale.getdefaultlocale(locale.LC_MESSAGES)
test/ucs-test/univention/appcenter/testing/_umc.py:        self._language = language or locale.getdefaultlocale()[0] or ''

typing.Text
base/univention-config-registry/python/univention/config_registry/misc.py:    from typing import IO, Dict, List, Text  # noqa: F401
base/univention-lib/python/i18n.py:from typing import Optional, Text  # noqa: F401
base/univention-lib/python/locking.py:from typing import IO, Optional, Text  # noqa: F401
base/univention-updater/conftest.py:    from typing import IO, Any, Dict, List, Sequence, Text, Union  # noqa: F401
management/univention-directory-listener/python/listener.py:    from typing import Any, Callable, List, Optional, Text, Type, TypeVar, Union  # noqa: F401
management/univention-directory-listener/tools/univention-get-ldif-from-master.py:from typing import IO, Text  # noqa: F401
management/univention-directory-manager-modules/modules/univention/admin/handlers/__init__.py:from typing import Any, Dict, Iterable, List, Optional, Set, Text, Tuple, Union  # noqa: F401
management/univention-directory-manager-modules/modules/univention/admin/mapping.py:    from typing import List, Text, Tuple, TypeVar, Union  # noqa: F401
management/univention-directory-manager-modules/modules/univention/admin/modules.py:from typing import Any, Dict, List, Optional, Set, Text, Union  # noqa: F401
management/univention-directory-manager-modules/modules/univention/udm/base.pyi:from typing import Any, Dict, Iterable, Iterator, List, Optional, Text, TypeVar, Union  # noqa: F401
management/univention-directory-manager-modules/modules/univention/udm/binary_props.pyi:from typing import BinaryIO, Optional, Text, Union  # noqa: F401
management/univention-directory-manager-modules/modules/univention/udm/connections.pyi:from typing import Any, Callable, Dict, Optional, Text, Tuple  # noqa: F401
management/univention-directory-manager-modules/modules/univention/udm/encoders.pyi:from typing import Any, Dict, List, Optional, Text, Type, TypeVar  # noqa: F401
management/univention-directory-manager-modules/modules/univention/udm/exceptions.pyi:from typing import Iterable, Optional, Text  # noqa: F401
management/univention-directory-manager-modules/modules/univention/udm/helpers.pyi:from typing import List, Text  # noqa: F401
management/univention-directory-manager-modules/modules/univention/udm/modules/generic.pyi:from typing import Any, Dict, Iterable, Iterator, List, Optional, Text, Tuple, Type, TypeVar, Union  # noqa: F401
management/univention-directory-manager-modules/modules/univention/udm/modules/mail_all.pyi:from typing import Dict, Text  # noqa: F401
management/univention-directory-manager-modules/modules/univention/udm/plugins.pyi:from typing import Any, Dict, Iterable, Text, TypeVar  # noqa: F401
management/univention-directory-manager-modules/modules/univention/udm/udm.pyi:from typing import Any, Dict, List, Optional, Text, Tuple, Type  # noqa: F401
management/univention-directory-manager-modules/modules/univention/udm/utils.pyi:from typing import Any, Text  # noqa: F401
management/univention-directory-manager-rest/src/univention/admin/rest/client/__init__.py:from typing import Any, Callable, Dict, Iterator, List, Mapping, Optional, Text, Type, Union  # noqa: F401
management/univention-management-console/src/univention/management/console/pam.py:    from typing import Any, Dict, Iterator, List, Optional, Pattern, Sequence, Text, Tuple, Union  # noqa: F401
management/univention-management-console/src/univention/management/console/protocol/message.py:    from typing import Any, Dict, List, Optional, Text, Union  # noqa: F401
packaging/univention-debhelper/univention/debhelper.py:    from typing import Dict, List, Optional, Sequence, Text  # noqa: F401
saml/univention-saml/listener/univention-saml-simplesamlphp-configuration.py:from typing import Dict, List, Text, Tuple
test/ucs-test/univention/appcenter/testing/_udm_rest.py:from typing import Any, Callable, Dict, Iterator, List, Mapping, Optional, Text, Type, Union  # noqa: F401
test/ucs-test/univention/testing/connector_common.py:from typing import Text, Union  # noqa: F401
test/ucs-test/univention/testing/ldif.py:from typing import Any, Dict, Iterable, Iterator, List, NoReturn, Set, Text, Tuple  # noqa: F401
test/ucs-test/univention/testing/strings.py:from typing import Iterator, Optional, Text, Tuple  # noqa: F401
test/ucs-test/univention/testing/udm.py:from typing import Any, Dict, Iterable, List, Mapping, Optional, Text, Tuple, Union  # noqa: F401

imp:
base/univention-lib/python/ldap_extension.py:                import imp
base/univention-pam/well-known-sid-name-mapping.py:                    import imp
base/univention-system-setup/umc/python/setup/netconf/modules/__init__.py:import imp
management/univention-portal/unittests/test_config.py:from imp import reload
management/univention-portal/unittests/test_reloader.py:from imp import reload
services/univention-ad-connector/modules/univention/connector/ad/mapping.py:            import imp
services/univention-s4-connector/modules/univention/s4connector/s4/mapping.py:            import imp
test/ucs-test/tests/10_ldap/110_univention_lastbind.py:import imp

inspect.getargspec
management/univention-appcenter/python/appcenter/app.py:from inspect import getargspec
management/univention-appcenter/python/appcenter/app.py:        arguments = getargspec(method).args[1:]  # remove self
management/univention-directory-manager-modules/modules/univention/admin/handlers/__init__.py:getfullargspec = getattr(inspect, 'getfullargspec', inspect.getargspec)
management/univention-directory-manager-modules/modules/univention/admin/mapping.py:getfullargspec = getattr(inspect, 'getfullargspec', inspect.getargspec)
management/univention-directory-manager-modules/modules/univention/udm/modules/generic.py:getfullargspec = getattr(inspect, 'getfullargspec', inspect.getargspec)
management/univention-management-console-module-udm/umc/python/udm/udm_ldap.py:getfullargspec = getattr(inspect, 'getfullargspec', inspect.getargspec)
management/univention-management-console/src/univention/management/console/modules/decorators.py:    getfullargspec = getattr(inspect, 'getfullargspec', inspect.getargspec)
management/univention-portal/univention-portal:            spec = inspect.getargspec(klass.__init__)
test/ucs-test/univention/testing/udm.py:    from inspect import getfullargspec as getargspec
test/ucs-test/univention/testing/udm.py:    from inspect import getargspec  # Python 2
test/ucs-test/univention/testing/udm.py:            if 'prop' in getargspec(func).args:


https://docs.python.org/3/whatsnew/3.10.html

distutils:
base/univention-debug-python/setup.py:from distutils.core import Extension, setup
base/univention-python/setup.py:from distutils.core import setup
base/univention-system-setup/umc/python/setup/checks/univention_join.py:from distutils.version import LooseVersion
base/univention-updater/script/check.sh:from distutils.version import LooseVersion
base/univention-updater/script/check.sh:from distutils.version import LooseVersion
management/univention-appcenter/packaging.py:from distutils.core import setup as orig_setup
management/univention-appcenter/python/appcenter/app.py:from distutils.version import LooseVersion
management/univention-directory-listener/conffiles/etc/default/univention-directory-listener:from distutils.spawn import find_executable
management/univention-directory-listener/setup.py:from distutils.core import setup
management/univention-management-console/setup.py:from distutils import cmd
management/univention-management-console/setup.py:from distutils.command.build import build
management/univention-management-console/setup.py:from distutils.core import setup
management/univention-portal/setup.py:from distutils.core import setup
packaging/univention-debhelper/setup.py:from distutils.core import setup
services/univention-radius/setup.py:from distutils.core import setup
test/ucs-test/tests/00_checks/30_compare_package_versions.py:from distutils.version import StrictVersion
test/ucs-test/univention/testing/coverage.py:import distutils.spawn

threading.Thread.setDaemon => threading.Thread.daemon:
base/univention-system-setup/umc/python/setup/util.py:    stderr_thread.setDaemon(True)

ssl.wrap_socket():
management/univention-appcenter/python/appcenter/utils.py:        self.sock = ssl.wrap_socket(sock, self.key_file, self.cert_file, cert_reqs=ssl.CERT_REQUIRED, ca_certs="/etc/ssl/certs/ca-certificates.crt")
management/univention-appcenter/umc/python/appcenter/util.py:        self.sock = ssl.wrap_socket(sock, self.key_file, self.cert_file, cert_reqs=ssl.CERT_REQUIRED, ca_certs="/etc/ssl/certs/ca-certificates.crt")
test/ucs-test/tests/60_umc/21_request_new_license.py:        httpd.socket = ssl.wrap_socket(

ssl.match_hostname:
test/ucs-test/tests/40_mail/48_check_ssl_sni.py:        ssl.match_hostname(cert, servername)

OP_NO_SSLv2 / OP_NO_SSLv3:
management/univention-management-console/src/univention/management/console/protocol/client.py:            self.__crypto_context.set_options(SSL.OP_NO_SSLv2)
management/univention-management-console/src/univention/management/console/protocol/client.py:            self.__crypto_context.set_options(SSL.OP_NO_SSLv3)
management/univention-management-console/src/univention/management/console/protocol/server.py:            self.crypto_context.set_options(SSL.OP_NO_SSLv2)
management/univention-management-console/src/univention/management/console/protocol/server.py:            self.crypto_context.set_options(SSL.OP_NO_SSLv3)

Using NotImplemented in a boolean context has been deprecated
base/univention-lib/python/ucs.py:        return self.mmp < other.mmp if isinstance(other, UCS_Version) else NotImplemented
base/univention-lib/python/ucs.py:        return self.mmp <= other.mmp if isinstance(other, UCS_Version) else NotImplemented
base/univention-lib/python/ucs.py:        return self.mmp >= other.mmp if isinstance(other, UCS_Version) else NotImplemented
base/univention-lib/python/ucs.py:        return self.mmp > other.mmp if isinstance(other, UCS_Version) else NotImplemented
base/univention-system-setup/umc/python/setup/netconf/__init__.py:        return (self.priority, str(self)) < (other.priority, str(other)) if isinstance(other, Phase) else NotImplemented
base/univention-system-setup/umc/python/setup/netconf/__init__.py:        return (self.priority, str(self)) <= (other.priority, str(other)) if isinstance(other, Phase) else NotImplemented
base/univention-system-setup/umc/python/setup/netconf/__init__.py:        return (self.priority, str(self)) == (other.priority, str(other)) if isinstance(other, Phase) else NotImplemented
base/univention-system-setup/umc/python/setup/netconf/__init__.py:        return (self.priority, str(self)) != (other.priority, str(other)) if isinstance(other, Phase) else NotImplemented
base/univention-system-setup/umc/python/setup/netconf/__init__.py:        return (self.priority, str(self)) >= (other.priority, str(other)) if isinstance(other, Phase) else NotImplemented
base/univention-system-setup/umc/python/setup/netconf/__init__.py:        return (self.priority, str(self)) > (other.priority, str(other)) if isinstance(other, Phase) else NotImplemented
base/univention-updater/modules/univention/updater/tools.py:        return self.name < other.name if isinstance(other, Component) else NotImplemented
base/univention-updater/modules/univention/updater/tools.py:        return self.name <= other.name if isinstance(other, Component) else NotImplemented
base/univention-updater/modules/univention/updater/tools.py:        return self.name >= other.name if isinstance(other, Component) else NotImplemented
base/univention-updater/modules/univention/updater/tools.py:        return self.name > other.name if isinstance(other, Component) else NotImplemented
management/univention-appcenter/python/appcenter/app.py:        return (self.id, LooseVersion(self.get_ucs_version()), LooseVersion(self.version), self.component_id) < (other.id, LooseVersion(other.get_ucs_versio
management/univention-appcenter/python/appcenter/app.py:        return (self.id, LooseVersion(self.get_ucs_version()), LooseVersion(self.version), self.component_id) <= (other.id, LooseVersion(other.get_ucs_versi
management/univention-appcenter/python/appcenter/app.py:        return (self.id, LooseVersion(self.get_ucs_version()), LooseVersion(self.version), self.component_id) == (other.id, LooseVersion(other.get_ucs_versi
management/univention-appcenter/python/appcenter/app.py:        return (self.id, LooseVersion(self.get_ucs_version()), LooseVersion(self.version), self.component_id) != (other.id, LooseVersion(other.get_ucs_versi
management/univention-appcenter/python/appcenter/app.py:        return (self.id, LooseVersion(self.get_ucs_version()), LooseVersion(self.version), self.component_id) >= (other.id, LooseVersion(other.get_ucs_versi
management/univention-appcenter/python/appcenter/app.py:        return (self.id, LooseVersion(self.get_ucs_version()), LooseVersion(self.version), self.component_id) > (other.id, LooseVersion(other.get_ucs_versio
management/univention-directory-manager-modules/modules/univention/admin/__init__.py:            return (self.property != 'registry', self.property) < (other.property != 'registry', other.property) if isinstance(
management/univention-directory-manager-modules/modules/univention/admin/__init__.py:            return (self.property != 'registry', self.property) <= (other.property != 'registry', other.property) if isinstance
management/univention-directory-manager-modules/modules/univention/admin/__init__.py:            return self.property == other.property if isinstance(other, field) else NotImplemented
management/univention-directory-manager-modules/modules/univention/admin/__init__.py:            return self.property != other.property if isinstance(other, field) else NotImplemented
management/univention-directory-manager-modules/modules/univention/admin/__init__.py:            return (self.property != 'registry', self.property) >= (other.property != 'registry', other.property) if isinstance
management/univention-directory-manager-modules/modules/univention/admin/__init__.py:            return (self.property != 'registry', self.property) > (other.property != 'registry', other.property) if isinstance(
test/ucs-test/univention/testing/internal.py:        return self.ver < other.ver if isinstance(other, UCSVersion) else NotImplemented
test/ucs-test/univention/testing/internal.py:        return self.ver <= other.ver if isinstance(other, UCSVersion) else NotImplemented
test/ucs-test/univention/testing/internal.py:        return self.ver >= other.ver if isinstance(other, UCSVersion) else NotImplemented
test/ucs-test/univention/testing/internal.py:        return self.ver > other.ver if isinstance(other, UCSVersion) else NotImplemented
(maybe more)

base64.decodestring
management/univention-directory-manager-modules/modules/univention/admincli/admin.py:                            object[key] = base64.decodestring(content)

unescape() method in the html.parser.HTMLParser:
management/univention-management-console/univention-management-console-web-server:    unescape = html_parser.unescape

https://docs.python.org/3/whatsnew/3.8.html
collections → collections.abc
base/univention-config-registry/python/univention/config_registry/backend.py:    from collections import Mapping, MutableMapping
base/univention-lib/unittests/test_ucs.py:    from collections import Hashable
management/univention-directory-listener/python/univention/listener/handler_logging.py:from collections import Mapping
…
Comment 2 Dirk Wiesenthal univentionstaff 2023-09-06 11:22:08 CEST
We can do this in an erratum. No target milestone for that, but it will not show up in the gitlab boards
Comment 3 Mika Westphal univentionstaff 2023-09-11 11:56:30 CEST
This is the updated report. In my last report I just used `git grep` and I did not check if it is fixed.

cgi:
base/univention-system-activation/src/wsgi.py:import cgi
test/ucs-test/univention/testing/license_client.py:import cgi

imghdr:
management/univention-portal/python/univention/portal/extensions/reloader.py:from imghdr import what

pipes:
services/univention-ldb-modules/third_party/waf/waflib/extras/genpybind.py:import pipes

typing.Text
base/univention-config-registry/python/univention/config_registry/misc.py:    from typing import IO, Dict, List, Text  # noqa: F401
management/univention-directory-manager-modules/modules/univention/admin/handlers/__init__.py:from typing import Any, Dict, Iterable, List, Optional, Set, Text, Tuple, Union  # noqa: F401
management/univention-directory-manager-modules/modules/univention/admin/mapping.py:    from typing import List, Text, Tuple, TypeVar, Union  # noqa: F401
management/univention-directory-manager-modules/modules/univention/admin/modules.py:from typing import Any, Dict, List, Optional, Set, Text, Union  # noqa: F401
management/univention-directory-manager-modules/modules/univention/udm/base.pyi:from typing import Any, Dict, Iterable, Iterator, List, Optional, Text, TypeVar, Union  # noqa: F401
management/univention-directory-manager-modules/modules/univention/udm/binary_props.pyi:from typing import BinaryIO, Optional, Text, Union  # noqa: F401
management/univention-directory-manager-modules/modules/univention/udm/connections.pyi:from typing import Any, Callable, Dict, Optional, Text, Tuple  # noqa: F401
management/univention-directory-manager-modules/modules/univention/udm/encoders.pyi:from typing import Any, Dict, List, Optional, Text, Type, TypeVar  # noqa: F401
management/univention-directory-manager-modules/modules/univention/udm/exceptions.pyi:from typing import Iterable, Optional, Text  # noqa: F401
management/univention-directory-manager-modules/modules/univention/udm/helpers.pyi:from typing import List, Text  # noqa: F401
management/univention-directory-manager-modules/modules/univention/udm/modules/generic.pyi:from typing import Any, Dict, Iterable, Iterator, List, Optional, Text, Tuple, Type, TypeVar, Union  # noqa: F401
management/univention-directory-manager-modules/modules/univention/udm/modules/mail_all.pyi:from typing import Dict, Text  # noqa: F401
management/univention-directory-manager-modules/modules/univention/udm/plugins.pyi:from typing import Any, Dict, Iterable, Text, TypeVar  # noqa: F401
management/univention-directory-manager-modules/modules/univention/udm/udm.pyi:from typing import Any, Dict, List, Optional, Text, Tuple, Type  # noqa: F401
management/univention-directory-manager-modules/modules/univention/udm/utils.pyi:from typing import Any, Text  # noqa: F401
management/univention-directory-manager-rest/src/univention/admin/rest/client/__init__.py:from typing import Any, Callable, Dict, Iterator, List, Mapping, Optional, Text, Type, Union  # noqa: F401
management/univention-management-console/src/univention/management/console/message.py:    from typing import Any, Dict, List, Optional, Text, Union  # noqa: F401
management/univention-management-console/src/univention/management/console/pam.py:    from typing import Any, Dict, Iterator, List, Optional, Pattern, Sequence, Text, Tuple, Union  # noqa: F401
packaging/univention-debhelper/univention/debhelper.py:    from typing import Dict, List, Optional, Sequence, Text  # noqa: F401
test/ucs-test/univention/testing/strings.py:from typing import Iterator, Optional, Text, Tuple  # noqa: F401

imp:
services/univention-ldb-modules/third_party/waf/waflib/Tools/python.py:        v.PYTAG = conf.cmd_and_log(conf.env.PYTHON + ['-c', "import sys\ntry:\n print(sys.implementation.cache_tag)\nexcept AttributeError:\n import imp\n print(imp.get_tag())\n"]).strip()

distutils:
management/univention-appcenter/python/appcenter/app.py:from distutils.version import LooseVersion

ssl.wrap_socket:
test/ucs-test/tests/40_mail/48_check_ssl_sni.py:    conn = context.wrap_socket(socket.socket(socket.AF_INET), server_hostname=servername)
test/ucs-test/tests/60_umc/21_request_new_license.py:        httpd.socket = ssl.wrap_socket(

ssl.match_hostname:
test/ucs-test/tests/40_mail/48_check_ssl_sni.py:        ssl.match_hostname(cert, servername)

Using NotImplemented in a boolean context has been deprecated:
base/univention-lib/python/ucs.py:        return self.mmp < other.mmp if isinstance(other, UCS_Version) else NotImplemented
base/univention-lib/python/ucs.py:        return self.mmp <= other.mmp if isinstance(other, UCS_Version) else NotImplemented
base/univention-lib/python/ucs.py:        return self.mmp >= other.mmp if isinstance(other, UCS_Version) else NotImplemented
base/univention-lib/python/ucs.py:        return self.mmp > other.mmp if isinstance(other, UCS_Version) else NotImplemented
base/univention-system-setup/umc/python/setup/netconf/__init__.py:        return (self.priority, str(self)) < (other.priority, str(other)) if isinstance(other, Phase) else NotImplemented
base/univention-system-setup/umc/python/setup/netconf/__init__.py:        return (self.priority, str(self)) <= (other.priority, str(other)) if isinstance(other, Phase) else NotImplemented
base/univention-system-setup/umc/python/setup/netconf/__init__.py:        return (self.priority, str(self)) >= (other.priority, str(other)) if isinstance(other, Phase) else NotImplemented
base/univention-system-setup/umc/python/setup/netconf/__init__.py:        return (self.priority, str(self)) > (other.priority, str(other)) if isinstance(other, Phase) else NotImplemented
base/univention-updater/modules/univention/updater/tools.py:        return self.name < other.name if isinstance(other, Component) else NotImplemented
base/univention-updater/modules/univention/updater/tools.py:        return self.name <= other.name if isinstance(other, Component) else NotImplemented
base/univention-updater/modules/univention/updater/tools.py:        return self.name >= other.name if isinstance(other, Component) else NotImplemented
base/univention-updater/modules/univention/updater/tools.py:        return self.name > other.name if isinstance(other, Component) else NotImplemented
management/univention-appcenter/python/appcenter/app.py:        return (self.id, LooseVersion(self.get_ucs_version()), LooseVersion(self.version), self.component_id) < (other.id, LooseVersion(other.get_ucs_version()), LooseVersion(other.version), other.component_id) if isinstance(other, App) else NotImplemented
management/univention-appcenter/python/appcenter/app.py:        return (self.id, LooseVersion(self.get_ucs_version()), LooseVersion(self.version), self.component_id) <= (other.id, LooseVersion(other.get_ucs_version()), LooseVersion(other.version), other.component_id) if isinstance(other, App) else NotImplemented
management/univention-appcenter/python/appcenter/app.py:        return (self.id, LooseVersion(self.get_ucs_version()), LooseVersion(self.version), self.component_id) == (other.id, LooseVersion(other.get_ucs_version()), LooseVersion(other.version), other.component_id) if isinstance(other, App) else NotImplemented
management/univention-appcenter/python/appcenter/app.py:        return (self.id, LooseVersion(self.get_ucs_version()), LooseVersion(self.version), self.component_id) != (other.id, LooseVersion(other.get_ucs_version()), LooseVersion(other.version), other.component_id) if isinstance(other, App) else NotImplemented
management/univention-appcenter/python/appcenter/app.py:        return (self.id, LooseVersion(self.get_ucs_version()), LooseVersion(self.version), self.component_id) >= (other.id, LooseVersion(other.get_ucs_version()), LooseVersion(other.version), other.component_id) if isinstance(other, App) else NotImplemented
management/univention-appcenter/python/appcenter/app.py:        return (self.id, LooseVersion(self.get_ucs_version()), LooseVersion(self.version), self.component_id) > (other.id, LooseVersion(other.get_ucs_version()), LooseVersion(other.version), other.component_id) if isinstance(other, App) else NotImplemented
management/univention-directory-manager-modules/modules/univention/admin/__init__.py:            return (self.property != 'registry', self.property) < (other.property != 'registry', other.property) if isinstance(other, field) else NotImplemented
management/univention-directory-manager-modules/modules/univention/admin/__init__.py:            return (self.property != 'registry', self.property) <= (other.property != 'registry', other.property) if isinstance(other, field) else NotImplemented
management/univention-directory-manager-modules/modules/univention/admin/__init__.py:            return self.property == other.property if isinstance(other, field) else NotImplemented
management/univention-directory-manager-modules/modules/univention/admin/__init__.py:            return self.property != other.property if isinstance(other, field) else NotImplemented
management/univention-directory-manager-modules/modules/univention/admin/__init__.py:            return (self.property != 'registry', self.property) >= (other.property != 'registry', other.property) if isinstance(other, field) else NotImplemented
management/univention-directory-manager-modules/modules/univention/admin/__init__.py:            return (self.property != 'registry', self.property) > (other.property != 'registry', other.property) if isinstance(other, field) else NotImplemented
test/ucs-test/univention/testing/internal.py:        return self.ver < other.ver if isinstance(other, UCSVersion) else NotImplemented
test/ucs-test/univention/testing/internal.py:        return self.ver <= other.ver if isinstance(other, UCSVersion) else NotImplemented
test/ucs-test/univention/testing/internal.py:        return self.ver >= other.ver if isinstance(other, UCSVersion) else NotImplemented
test/ucs-test/univention/testing/internal.py:        return self.ver > other.ver if isinstance(other, UCSVersion) else NotImplemented
(maybe more)

https://docs.python.org/3/whatsnew/3.8.html
https://docs.python.org/3/library/collections.abc.html#module-collections.abc
collections → collections.abc
management/univention-directory-listener/python/univention/listener/handler_logging.py:from collections import Mapping
Comment 5 Mika Westphal univentionstaff 2023-12-18 16:22:26 CET
The Python code has been adapted for Python 3.11. This means that outdated code is no longer used. Code that was used for compatibility with Python 2.7 has also been removed, as Python 2.7 is no longer supported by UCS 5.2. The following has been changed:
- `typing.Text` has been removed as it is now just an alias for `str`
Affected packages: univention-updater

- `cgi` has been replaced with `email`
Affected packages: univention-system-activation

- `imghdr` has been replaced with `filetype`. We have used the following package: https://packages.debian.org/bookworm/python3-filetype
Affected packages: univention-portal

- The following classes are no longer imported in a try-catch block and the corresponding compatibility code has been removed:
    - `typing`
    - `html`
    - `email_validator`
    - `zoneinfo`
    - `typing`
Affected packages:
    - univention-management-console
    - univention-directory-reports
    - univention-directory-manager-modules
    - univention-debhelper
    - univention-config-registry
    - univention-appcenter

- `distutils.LooseVersion` has been replaced by a separate implementation. During implementation, care was taken to ensure that the functionality remains the same
Affected packages:
    - univention-errata-level
    - univention-appcenter

- `ssl.match_hostname()` is no longer done by Python itself, but by OpenSSL. The code has been adapted accordingly
Affected packages: ucs-test
Comment 6 Florian Best univentionstaff 2023-12-18 18:03:22 CET
OK: Code review
OK: Jenkins tests
Comment 7 Florian Best univentionstaff 2024-03-08 11:03:30 CET
univention-updater (16.0.14)
b63cc4ee0a4b | Bug #55915: removed typing.Text because it's deprecated

univention-system-activation (6.0.4)
f5e0352dcf07 | Bug #55915: replace `cgi` import with `email`

univention-portal (5.0.6)
dbb0860e8f91 | Bug #55915: replace `imghdr` import with `filetype`

univention-management-console (13.0.10)
71757186c557 | Bug #55915: remove `try` from `import typing`

univention-errata-level (5.1.0-0)
2335ef7c41d8 | refactor(appcenter): re-implement LooseVersion

univention-directory-reports (13.0.6)
4d627e9b6afc | Bug #55915: import `html` without `try`

univention-directory-manager-modules (16.0.12)
a4ade6509282 | Bug #55915: remove `try` from `import email_validator`
e20d38a56360 | Bug #55915: remove `unicode` backward compatability
e392b1a417d8 | Bug #55915: import `zoneinfo` without `try`
71757186c557 | Bug #55915: remove `try` from `import typing`

univention-directory-manager-modules (16.0.11)
fbdff38688e4 | refactor(python): Drop python3-typing-extensions

univention-debhelper (3.0.6)
71757186c557 | Bug #55915: remove `try` from `import typing`

univention-config-registry (16.0.6)
71757186c557 | Bug #55915: remove `try` from `import typing`

univention-appcenter (10.0.9)
4d627e9b6afc | Bug #55915: import `html` without `try`
2335ef7c41d8 | refactor(appcenter): re-implement LooseVersion

ucs-test (10.0.19-31)
a5686682e8c9 | Bug #55915: replace deprecated `ssl.match_hostname()`