Skip to content

Commit 829597b

Browse files
committed
refactoring and unifying OptionalPackage and OptionalBackendPackage
1 parent d3ae52f commit 829597b

File tree

1 file changed

+30
-36
lines changed

1 file changed

+30
-36
lines changed

setupext.py

Lines changed: 30 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -435,62 +435,52 @@ def _check_for_pkg_config(self, package, include_file, min_version=None,
435435

436436
class OptionalPackage(SetupPackage):
437437
optional = True
438-
439-
def get_config(self):
440-
install = True
441-
if config is not None:
442-
try:
443-
install = config.getboolean(
444-
'packages', self.name)
445-
except:
446-
pass
447-
return install
448-
449-
def check(self):
450-
self.install = self.get_config()
451-
if not self.install:
452-
raise CheckFailed("skipping due to configuration")
453-
return "installing"
454-
455-
456-
class OptionalBackendPackage(SetupPackage):
457-
optional = True
458438
force = False
459-
install = 'auto'
460-
check = "installing"
439+
config_category = "packages"
461440

462441
def get_config(self):
442+
"""
443+
Look at `setup.cfg` and return one of ["auto", True, False] indicating
444+
if the package is at default state ("auto"), forced by the user (True)
445+
or opted-out (False).
446+
"""
463447
try:
464-
self.install = config.getboolean('gui_support', self.name)
448+
return config.getboolean(self.config_category, self.name)
465449
except:
466-
pass
467-
if self.install is True:
468-
self.optional = False
469-
return self.install
450+
return "auto"
470451

471452
def check(self):
472453
"""
473454
Do not override this method!
474455
475456
For custom dependency checks override self.check_requirements().
457+
Two things are checked: Configuration file and requirements.
476458
"""
477-
# check configuration file
478-
if self.get_config() in [True, 'auto']:
479-
self.check = "installing"
459+
# Check configuration file
460+
conf = self.get_config()
461+
# Default "auto" state or install forced by user
462+
if conf in [True, 'auto']:
463+
message = "installing"
464+
# Set non-optional if user sets `True` in config
465+
if conf is True:
466+
self.optional = False
467+
# Configuration opt-out by user
480468
else:
481469
# Some backend extensions (e.g. Agg) need to be built for certain
482470
# other GUI backends (e.g. TkAgg) even when manually disabled
483471
if self.force is True:
484-
self.check = "installing forced (config override)"
472+
message = "installing forced (config override)"
485473
else:
486474
raise CheckFailed("skipping due to configuration")
487475

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()
476+
# Check requirements and add extra information (if any) to message.
477+
# If requirements are not met a CheckFailed should be raised in there.
478+
additional_info = self.check_requirements()
479+
if additional_info:
480+
message += ", " + additional_info
492481

493-
return self.check
482+
# No CheckFailed raised until now, return install message.
483+
return message
494484

495485
def check_requirements(self):
496486
"""
@@ -503,6 +493,10 @@ def check_requirements(self):
503493
return ""
504494

505495

496+
class OptionalBackendPackage(OptionalPackage):
497+
config_category = "gui_support"
498+
499+
506500
class Platform(SetupPackage):
507501
name = "platform"
508502

0 commit comments

Comments
 (0)