Skip to content

Commit a4ac003

Browse files
committed
refactoring/separating backend checks for config file/dependencies
- config check is handled handled in optional backend base class and calls separate dependency check - dependency check is an empty stub in base class and can be overriden in subclasses
1 parent db54c39 commit a4ac003

File tree

1 file changed

+35
-35
lines changed

1 file changed

+35
-35
lines changed

setupext.py

Lines changed: 35 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -457,6 +457,7 @@ class OptionalBackendPackage(SetupPackage):
457457
optional = True
458458
force = False
459459
install = 'auto'
460+
check = "installing"
460461

461462
def get_config(self):
462463
try:
@@ -469,19 +470,38 @@ def get_config(self):
469470

470471
def check(self):
471472
"""
472-
This method should be called using super() even when overriding this
473-
method in a base class to check for a opt-out in the config file.
473+
Do not override this method!
474+
475+
For custom dependency checks override self.check_requirements().
474476
"""
475-
if self.get_config() is True:
476-
return "installing"
477+
# check configuration file
478+
if self.get_config() in [True, 'auto']:
479+
self.check = "installing"
477480
else:
478481
# Some backend extensions (e.g. Agg) need to be built for certain
479482
# other GUI backends (e.g. TkAgg) even when manually disabled
480483
if self.force is True:
481-
return "installation is forced (overriding configuration)"
484+
self.check = "installing forced (config override)"
482485
else:
483486
raise CheckFailed("skipping due to configuration")
484487

488+
# check requirements and add extra information (if any) to message
489+
custom_info = self.check_requirements()
490+
if custom_info:
491+
self.check += ", " + self.check_requirements()
492+
493+
return self.check
494+
495+
def check_requirements(self):
496+
"""
497+
Override this method to do custom dependency checks.
498+
499+
- Raise CheckFailed() if requirements are not met.
500+
- Return message with additional information, or an empty string
501+
(or None) for no additional information.
502+
"""
503+
return ""
504+
485505

486506
class Platform(SetupPackage):
487507
name = "platform"
@@ -1016,9 +1036,7 @@ class BackendTkAgg(OptionalBackendPackage):
10161036
def __init__(self):
10171037
self.tcl_tk_cache = None
10181038

1019-
def check(self):
1020-
super(BackendTkAgg, self).check()
1021-
1039+
def check_requirements(self):
10221040
try:
10231041
if sys.version_info[0] < 3:
10241042
import Tkinter
@@ -1304,9 +1322,7 @@ def add_flags(self, ext):
13041322
class BackendGtk(OptionalBackendPackage):
13051323
name = "gtk"
13061324

1307-
def check(self):
1308-
super(BackendGtk, self).check()
1309-
1325+
def check_requirements(self):
13101326
try:
13111327
import gtk
13121328
except ImportError:
@@ -1459,9 +1475,7 @@ def backend_gtk3agg_internal_check(x):
14591475
class BackendGtk3Agg(OptionalBackendPackage):
14601476
name = "gtk3agg"
14611477

1462-
def check(self):
1463-
super(BackendGtk3Agg, self).check()
1464-
1478+
def check_requirements(self):
14651479
if 'TRAVIS' in os.environ:
14661480
raise CheckFailed("Can't build with Travis")
14671481

@@ -1524,9 +1538,7 @@ def backend_gtk3cairo_internal_check(x):
15241538
class BackendGtk3Cairo(OptionalBackendPackage):
15251539
name = "gtk3cairo"
15261540

1527-
def check(self):
1528-
super(BackendGtk3Cairo, self).check()
1529-
1541+
def check_requirements(self):
15301542
if 'TRAVIS' in os.environ:
15311543
raise CheckFailed("Can't build with Travis")
15321544

@@ -1554,9 +1566,7 @@ def get_package_data(self):
15541566
class BackendWxAgg(OptionalBackendPackage):
15551567
name = "wxagg"
15561568

1557-
def check(self):
1558-
super(BackendWxAgg, self).check()
1559-
1569+
def check_requirements(self):
15601570
try:
15611571
import wxversion
15621572
except ImportError:
@@ -1594,9 +1604,7 @@ def check(self):
15941604
class BackendMacOSX(OptionalBackendPackage):
15951605
name = 'macosx'
15961606

1597-
def check(self):
1598-
super(BackendMacOSX, self).check()
1599-
1607+
def check_requirements(self):
16001608
if sys.platform != 'darwin':
16011609
raise CheckFailed("Mac OS-X only")
16021610

@@ -1623,9 +1631,7 @@ class Windowing(OptionalBackendPackage):
16231631
"""
16241632
name = "windowing"
16251633

1626-
def check(self):
1627-
super(Windowing, self).check()
1628-
1634+
def check_requirements(self):
16291635
if sys.platform != 'win32':
16301636
raise CheckFailed("Microsoft Windows only")
16311637
config = self.get_config()
@@ -1656,9 +1662,7 @@ def convert_qt_version(self, version):
16561662
temp.insert(0, str(int(chunk, 16)))
16571663
return '.'.join(temp)
16581664

1659-
def check(self):
1660-
super(BackendQt4, self).check()
1661-
1665+
def check_requirements(self):
16621666
try:
16631667
from PyQt4 import pyqtconfig
16641668
except ImportError:
@@ -1676,9 +1680,7 @@ def check(self):
16761680
class BackendPySide(OptionalBackendPackage):
16771681
name = "pyside"
16781682

1679-
def check(self):
1680-
super(BackendPySide, self).check()
1681-
1683+
def check_requirements(self):
16821684
try:
16831685
from PySide import __version__
16841686
from PySide import QtCore
@@ -1694,9 +1696,7 @@ def check(self):
16941696
class BackendCairo(OptionalBackendPackage):
16951697
name = "cairo"
16961698

1697-
def check(self):
1698-
super(BackendCairo, self).check()
1699-
1699+
def check_requirements(self):
17001700
try:
17011701
import cairo
17021702
except ImportError:

0 commit comments

Comments
 (0)