Skip to content

Commit 5cd3448

Browse files
author
Mathieu
committed
🏗️ QtImporter raise importError instead of returning none
1 parent 0cf167c commit 5cd3448

File tree

7 files changed

+47
-36
lines changed

7 files changed

+47
-36
lines changed

python/tank/authentication/interactive_authentication.py

+4-3
Original file line numberDiff line numberDiff line change
@@ -41,13 +41,14 @@
4141
# something usually done by the Toolkit. The worry is that the import may fail
4242
# in the context of a DCC, but occur too early for the Toolkit logging to be
4343
# fully in place to record it.
44+
logger = LogManager.get_logger(__name__)
45+
4446
try:
4547
from .ui.qt_abstraction import QtGui
46-
except Exception:
48+
except ImportError as e:
49+
logger.debug("Cant import QtGui: %s" %e)
4750
QtGui = None
4851

49-
logger = LogManager.get_logger(__name__)
50-
5152

5253
###############################################################################################
5354
# internal classes and methods

python/tank/authentication/invoker.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,8 @@
3030
# fully in place to record it.
3131
try:
3232
from .ui.qt_abstraction import QtCore, QtGui
33-
except Exception:
33+
except ImportError as e:
34+
logger.debug("Cant import QtCore/QtGui: %s" % e)
3435
QtCore, QtGui = None, None
3536

3637

python/tank/authentication/sso_saml2/core/username_password_dialog.py

+4-6
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,10 @@
1313

1414
from __future__ import print_function
1515

16-
# pylint: disable=import-error
17-
from ...ui.qt_abstraction import QtCore, QtGui
18-
19-
# No point in proceeding if QtGui is None.
20-
if QtGui is None:
21-
raise ImportError("Unable to import QtGui")
16+
try:
17+
from ...ui.qt_abstraction import QtCore, QtGui
18+
except ImportError:
19+
raise
2220

2321

2422
class UsernamePasswordDialog(QtGui.QDialog):

python/tank/authentication/ui_authentication.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,8 @@
3232
# fully in place to record it.
3333
try:
3434
from .login_dialog import LoginDialog
35-
except Exception:
35+
except ImportError as e:
36+
logger.debug("Cant import LoginDialog: %s" % e)
3637
LoginDialog = None
3738

3839

python/tank/bootstrap/async_bootstrap.py

+7-6
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,13 @@
1111
# Import Qt without having to worry about the version to use.
1212
from ..util.qt_importer import QtImporter
1313

14-
importer = QtImporter()
15-
QtCore = importer.QtCore
16-
QtGui = importer.QtGui
17-
if QtCore is None:
18-
# Raise an exception when Qt is not available.
19-
raise ImportError
14+
try:
15+
importer = QtImporter()
16+
except ImportError:
17+
raise
18+
else:
19+
QtCore = importer.QtCore
20+
QtGui = importer.QtGui
2021

2122

2223
class AsyncBootstrapWrapper(QtCore.QObject):

python/tank/platform/engine.py

+16-8
Original file line numberDiff line numberDiff line change
@@ -188,7 +188,11 @@ def __init__(self, tk, context, engine_instance_name, env):
188188

189189
# Update the authentication module to use the engine's Qt.
190190
# @todo: can this import be untangled? Code references internal part of the auth module
191-
from ..authentication.ui import qt_abstraction
191+
try:
192+
from ..authentication.ui import qt_abstraction
193+
except ImportError:
194+
class qt_abstraction:
195+
pass
192196

193197
qt_abstraction.QtCore = qt.QtCore
194198
qt_abstraction.QtGui = qt.QtGui
@@ -416,13 +420,13 @@ def __show_busy(self, title, details):
416420
from .qt.busy_dialog import BusyDialog
417421
from .qt import QtGui, QtCore
418422

419-
except:
423+
except ImportError as e:
420424
# QT import failed. This may be because someone has upgraded the core
421425
# to the latest but are still running a earlier version of the
422426
# Shotgun or Shell engine where the self.has_ui method is not
423427
# correctly implemented. In that case, absorb the error and
424428
# emit a log message
425-
self.log_info("[%s] %s" % (title, details))
429+
self.log_info("[%s] %s: %s" % (title, details, e))
426430

427431
else:
428432
# our qt import worked!
@@ -2152,7 +2156,7 @@ def _define_qt_base(self):
21522156
21532157
:returns: dict
21542158
"""
2155-
base = {"qt_core": None, "qt_gui": None, "dialog_base": None}
2159+
base = {"qt_core": None, "qt_gui": None, "dialog_base": None, "wrapper": None}
21562160
try:
21572161
importer = QtImporter()
21582162
base["qt_core"] = importer.QtCore
@@ -2162,11 +2166,11 @@ def _define_qt_base(self):
21622166
else:
21632167
base["dialog_base"] = None
21642168
base["wrapper"] = importer.binding
2165-
except:
2169+
except ImportError:
21662170

2167-
self.log_exception(
2171+
self.log_error(
21682172
"Default engine QT definition failed to find QT. "
2169-
"This may need to be subclassed."
2173+
"This may need to be subclassed"
21702174
)
21712175

21722176
return base
@@ -2182,7 +2186,11 @@ def __define_qt5_base(self):
21822186
21832187
:returns: A dictionary with all the modules, __version__ and __name__.
21842188
"""
2185-
return QtImporter(interface_version_requested=QtImporter.QT5).base
2189+
try:
2190+
return QtImporter(interface_version_requested=QtImporter.QT5).base
2191+
except ImportError as e:
2192+
self.log_debug(e)
2193+
return {}
21862194

21872195
def __define_qt6_base(self):
21882196
"""

python/tank/util/qt_importer.py

+12-11
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ class QtImporter(object):
2626
.. code-block:: python
2727
try:
2828
importer = QtImporter()
29-
except Exception as e:
29+
except ImportError as e:
3030
print "Couldn't import a Qt Wrapper: " % (e,)
3131
else:
3232
importer.QtGui.QApplication([])
@@ -42,13 +42,16 @@ def __init__(self, interface_version_requested=QT4):
4242
4343
:param interface_version_request: Indicates which version of the Qt API is requested.
4444
"""
45-
(
46-
self._binding_name,
47-
self._binding_version,
48-
self._binding,
49-
self._modules,
50-
self._qt_version_tuple,
51-
) = self._import_modules(interface_version_requested)
45+
try:
46+
(
47+
self._binding_name,
48+
self._binding_version,
49+
self._binding,
50+
self._modules,
51+
self._qt_version_tuple,
52+
) = self._import_modules(interface_version_requested)
53+
except ImportError:
54+
raise
5255

5356
@property
5457
def QtCore(self):
@@ -475,6 +478,4 @@ def _import_modules(self, interface_version_requested):
475478
logger.debug("Cant import PyQt4: %s" % e)
476479
pass
477480

478-
logger.debug("No Qt matching that interface was found.")
479-
480-
return (None, None, None, None, None)
481+
raise ImportError("No Qt matching that interface was found.")

0 commit comments

Comments
 (0)