From a9a2f5ab50a97ece9f730c4fcdc23ec7c2c3d746 Mon Sep 17 00:00:00 2001 From: Clark Boylan Date: Wed, 26 Jun 2024 15:04:53 -0700 Subject: [PATCH] Be more cautious initing mimetypes We use mimetypes to set file mime types for upload to log server locations. We also override yaml files mime type to text/plain when doing so. If we then call mimetypes.init() again this overrides the previous yaml update to text/plain. This wasn't a problem until python3.12 but python3.12 (on Ubuntu Noble specifically) seems to import test cases in a different order which results in the mimetypes.init() call in generate_manifest.py overriding the yaml mimetype set by the log upload test cases. Simply check if mimetypes is already inited before we init it again which should avoid the problem entirely. Note that this is likely to only ever by a testing issues as typically ansible wouldn't import all of this code together but the unittest runner does. Change-Id: Ifb9137ddd89713cad546129c462ad94315100940 --- roles/generate-zuul-manifest/library/generate_manifest.py | 4 +++- roles/test-upload-logs-swift/library/zuul_swift_upload.py | 4 +++- roles/upload-logs-base/module_utils/zuul_jobs/upload_utils.py | 4 +++- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/roles/generate-zuul-manifest/library/generate_manifest.py b/roles/generate-zuul-manifest/library/generate_manifest.py index 5e1240a2a..40f5eb35c 100644 --- a/roles/generate-zuul-manifest/library/generate_manifest.py +++ b/roles/generate-zuul-manifest/library/generate_manifest.py @@ -23,7 +23,9 @@ import sys from ansible.module_utils.basic import AnsibleModule -mimetypes.init() +if not mimetypes.inited: + # We don't want to reinit and override any previously added types. + mimetypes.init() def path_in_tree(root, path): diff --git a/roles/test-upload-logs-swift/library/zuul_swift_upload.py b/roles/test-upload-logs-swift/library/zuul_swift_upload.py index fc2220a56..b2df12c39 100755 --- a/roles/test-upload-logs-swift/library/zuul_swift_upload.py +++ b/roles/test-upload-logs-swift/library/zuul_swift_upload.py @@ -60,7 +60,9 @@ try: except ImportError: from collections import Sequence -mimetypes.init() +if not mimetypes.inited: + # We don't want to reinit and override any previously inited types. + mimetypes.init() mimetypes.add_type('text/plain', '.yaml') MAX_UPLOAD_THREADS = 24 diff --git a/roles/upload-logs-base/module_utils/zuul_jobs/upload_utils.py b/roles/upload-logs-base/module_utils/zuul_jobs/upload_utils.py index 9b6353f83..51e551785 100644 --- a/roles/upload-logs-base/module_utils/zuul_jobs/upload_utils.py +++ b/roles/upload-logs-base/module_utils/zuul_jobs/upload_utils.py @@ -47,7 +47,9 @@ try: except ImportError: from collections import Sequence -mimetypes.init() +if not mimetypes.inited: + # We don't want to reinit and override any previously added types. + mimetypes.init() mimetypes.add_type('text/plain', '.yaml') MAX_UPLOAD_THREADS = 24