Skip to content

Commit

Permalink
Make pex_policy and daf_base optional
Browse files Browse the repository at this point in the history
makePropertySet and makePolicy will now fail at runtime if they
are not available.
  • Loading branch information
timj committed Aug 23, 2019
1 parent b8b8ef1 commit eef9c66
Show file tree
Hide file tree
Showing 3 changed files with 37 additions and 10 deletions.
21 changes: 17 additions & 4 deletions python/lsst/pex/config/convert.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,15 @@

__all__ = ('makePropertySet', 'makePolicy')

import lsst.pex.policy
import lsst.daf.base
try:
import lsst.pex.policy as pexPolicy
except ImportError:
pexPolicy = None

try:
import lsst.daf.base as dafBase
except ImportError:
dafBase = None


def makePropertySet(config):
Expand All @@ -45,6 +52,9 @@ def makePropertySet(config):
makePolicy
lsst.daf.base.PropertySet
"""
if dafBase is None:
raise RuntimeError("lsst.daf.base is not available")

def _helper(ps, prefix, dict_):
for k, v in dict_.items():
name = prefix + "." + k if prefix is not None else k
Expand All @@ -54,7 +64,7 @@ def _helper(ps, prefix, dict_):
ps.set(name, v)

if config is not None:
ps = lsst.daf.base.PropertySet()
ps = dafBase.PropertySet()
_helper(ps, None, config.toDict())
return ps
else:
Expand All @@ -80,8 +90,11 @@ def makePolicy(config):
makePropertySet
lsst.pex.policy.Policy
"""
if pexPolicy is None:
raise RuntimeError("lsst.pex.policy is not available")

def _helper(dict_):
p = lsst.pex.policy.Policy()
p = pexPolicy.Policy()
for k, v in dict_.items():
if isinstance(v, dict):
p.set(k, _helper(v))
Expand Down
22 changes: 18 additions & 4 deletions tests/test_Config.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,17 @@

import lsst.pex.config as pexConfig

# Some tests depend on daf_base or pex_policy.
# Skip them if they are not found.
try:
import lsst.daf.base as dafBase
except ImportError:
dafBase = None
try:
import lsst.pex.policy as pexPolicy
except ImportError:
pexPolicy = None

GLOBAL_REGISTRY = {}


Expand Down Expand Up @@ -301,24 +312,27 @@ class III(AAA):
self.assertEqual(III.a.default, 5)
self.assertEqual(AAA.a.default, 4)

def testConvert(self):
@unittest.skipIf(pexPolicy is None, "lsst.pex.policy is required")
def testConvertPolicy(self):
pol = pexConfig.makePolicy(self.simple)
self.assertFalse(pol.exists("i"))
self.assertEqual(pol.get("f"), self.simple.f)
self.assertEqual(pol.get("b"), self.simple.b)
self.assertEqual(pol.get("c"), self.simple.c)
self.assertEqual(pol.getArray("ll"), list(self.simple.ll))

pol = pexConfig.makePolicy(self.comp)
self.assertEqual(pol.get("c.f"), self.comp.c.f)

@unittest.skipIf(dafBase is None, "lsst.daf.base is required")
def testConvertPropertySet(self):
ps = pexConfig.makePropertySet(self.simple)
self.assertFalse(ps.exists("i"))
self.assertEqual(ps.getScalar("f"), self.simple.f)
self.assertEqual(ps.getScalar("b"), self.simple.b)
self.assertEqual(ps.getScalar("c"), self.simple.c)
self.assertEqual(list(ps.getArray("ll")), list(self.simple.ll))

pol = pexConfig.makePolicy(self.comp)
self.assertEqual(pol.get("c.f"), self.comp.c.f)

ps = pexConfig.makePropertySet(self.comp)
self.assertEqual(ps.getScalar("c.f"), self.comp.c.f)

Expand Down
4 changes: 2 additions & 2 deletions ups/pex_config.table
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
setupRequired(daf_base)
setupRequired(pex_policy)
setupRequired(numpy)
setupRequired(pybind11)
setupRequired(python)
setupOptional(daf_base)
setupOptional(pex_policy)

envPrepend(LD_LIBRARY_PATH, ${PRODUCT_DIR}/lib)
envPrepend(DYLD_LIBRARY_PATH, ${PRODUCT_DIR}/lib)
Expand Down

0 comments on commit eef9c66

Please sign in to comment.