Skip to content

Commit 0150688

Browse files
SG-36372 Switch distutil.version to packaging.version (#105)
* Switch `distutil.version` to `packaging.version` * Implement a sorting function * Remove log * Fix style issue * Refactor import * Update import preference * Improve type safety * Use import names * Format * Move imports to get logs
1 parent 34f09ab commit 0150688

1 file changed

Lines changed: 37 additions & 13 deletions

File tree

python/tk_multi_launchapp/base_launcher.py

Lines changed: 37 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -8,23 +8,22 @@
88
# agreement to the Shotgun Pipeline Toolkit Source Code License. All rights
99
# not expressly granted therein are reserved by Shotgun Software Inc.
1010

11+
import contextlib
1112
import os
1213
import sys
13-
import contextlib
14-
15-
if sys.version_info[0:2] >= (3, 10):
16-
from setuptools._distutils.version import LooseVersion
17-
else:
18-
from distutils.version import LooseVersion
1914

2015
import sgtk
2116
import sgtk.util
2217
from sgtk import TankError
2318
from sgtk.platform.qt import QtCore, QtGui
2419

25-
from .util import apply_version_to_setting, get_clean_version_string
26-
from .util import clear_dll_directory, restore_dll_directory
2720
from .prepare_apps import prepare_launch_for_engine
21+
from .util import (
22+
apply_version_to_setting,
23+
clear_dll_directory,
24+
get_clean_version_string,
25+
restore_dll_directory,
26+
)
2827

2928

3029
class BaseLauncher(object):
@@ -50,6 +49,28 @@ def __init__(self):
5049
else "mac" if sgtk.util.is_macos() else "windows"
5150
)
5251

52+
try:
53+
from packaging import version
54+
55+
self.version_parse = version.parse
56+
except ModuleNotFoundError:
57+
try:
58+
from distutils.version import LooseVersion
59+
60+
self.version_parse = LooseVersion
61+
except ModuleNotFoundError:
62+
try:
63+
from setuptools._distutils.version import LooseVersion
64+
65+
self.version_parse = LooseVersion
66+
except ModuleNotFoundError:
67+
# Fall back to string comparison
68+
self.version_parse = str
69+
self._tk_app.log_debug(
70+
"Modules packaging or distutils not found in the Python environment, "
71+
"falling back to string comparison."
72+
)
73+
5374
def _register_launch_command(
5475
self,
5576
app_menu_name,
@@ -504,10 +525,13 @@ def _sort_versions(self, versions):
504525
except AttributeError:
505526
ctx_mgr = contextlib.nullcontext
506527
with ctx_mgr():
507-
# Cast the incoming version strings as LooseVersion instances to sort using
508-
# the LooseVersion.__cmp__ method.
509-
sort_versions = [LooseVersion(version) for version in versions]
528+
# Cast the incoming version strings to sort them
529+
try:
530+
sort_versions = [self.version_parse(v) for v in versions]
531+
except Exception as e:
532+
sort_versions = [get_clean_version_string(v) for v in versions]
533+
510534
sort_versions.sort(reverse=True)
511535

512-
# Convert the LooseVersions back to strings on return.
513-
return [str(version) for version in sort_versions]
536+
# Convert the parsed versions back to strings on return.
537+
return [str(v) for v in sort_versions]

0 commit comments

Comments
 (0)