LSSTApplications  18.0.0+106,18.0.0+50,19.0.0,19.0.0+1,19.0.0+10,19.0.0+11,19.0.0+13,19.0.0+17,19.0.0+2,19.0.0-1-g20d9b18+6,19.0.0-1-g425ff20,19.0.0-1-g5549ca4,19.0.0-1-g580fafe+6,19.0.0-1-g6fe20d0+1,19.0.0-1-g7011481+9,19.0.0-1-g8c57eb9+6,19.0.0-1-gb5175dc+11,19.0.0-1-gdc0e4a7+9,19.0.0-1-ge272bc4+6,19.0.0-1-ge3aa853,19.0.0-10-g448f008b,19.0.0-12-g6990b2c,19.0.0-2-g0d9f9cd+11,19.0.0-2-g3d9e4fb2+11,19.0.0-2-g5037de4,19.0.0-2-gb96a1c4+3,19.0.0-2-gd955cfd+15,19.0.0-3-g2d13df8,19.0.0-3-g6f3c7dc,19.0.0-4-g725f80e+11,19.0.0-4-ga671dab3b+1,19.0.0-4-gad373c5+3,19.0.0-5-ga2acb9c+2,19.0.0-5-gfe96e6c+2,w.2020.01
LSSTDataManagementBasePackage
convert.py
Go to the documentation of this file.
1 # This file is part of pex_config.
2 #
3 # Developed for the LSST Data Management System.
4 # This product includes software developed by the LSST Project
5 # (http://www.lsst.org).
6 # See the COPYRIGHT file at the top-level directory of this distribution
7 # for details of code ownership.
8 #
9 # This software is dual licensed under the GNU General Public License and also
10 # under a 3-clause BSD license. Recipients may choose which of these licenses
11 # to use; please see the files gpl-3.0.txt and/or bsd_license.txt,
12 # respectively. If you choose the GPL option then the following text applies
13 # (but note that there is still no warranty even if you opt for BSD instead):
14 #
15 # This program is free software: you can redistribute it and/or modify
16 # it under the terms of the GNU General Public License as published by
17 # the Free Software Foundation, either version 3 of the License, or
18 # (at your option) any later version.
19 #
20 # This program is distributed in the hope that it will be useful,
21 # but WITHOUT ANY WARRANTY; without even the implied warranty of
22 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
23 # GNU General Public License for more details.
24 #
25 # You should have received a copy of the GNU General Public License
26 # along with this program. If not, see <http://www.gnu.org/licenses/>.
27 
28 __all__ = ('makePropertySet', 'makePolicy')
29 
30 from deprecated.sphinx import deprecated
31 
32 try:
33  import lsst.pex.policy as pexPolicy
34 except ImportError:
35  pexPolicy = None
36 
37 try:
38  import lsst.daf.base as dafBase
39 except ImportError:
40  dafBase = None
41 
42 
43 def makePropertySet(config):
44  """Convert a configuration into a `lsst.daf.base.PropertySet`.
45 
46  Parameters
47  ----------
48  config : `lsst.pex.config.Config`
49  Configuration instance.
50 
51  Returns
52  -------
53  propertySet : `lsst.daf.base.PropertySet`
54  A `~lsst.daf.base.PropertySet` that is equivalent to the ``config``
55  instance. If ``config`` is `None` then this return value is also
56  `None`.
57 
58  See also
59  --------
60  makePolicy
61  lsst.daf.base.PropertySet
62  """
63  if dafBase is None:
64  raise RuntimeError("lsst.daf.base is not available")
65 
66  def _helper(ps, prefix, dict_):
67  for k, v in dict_.items():
68  name = prefix + "." + k if prefix is not None else k
69  if isinstance(v, dict):
70  _helper(ps, name, v)
71  elif v is not None:
72  ps.set(name, v)
73 
74  if config is not None:
75  ps = dafBase.PropertySet()
76  _helper(ps, None, config.toDict())
77  return ps
78  else:
79  return None
80 
81 
82 @deprecated("pex_policy is deprecated, prefer makePropertySet (will be removed after v19)",
83  category=FutureWarning)
84 def makePolicy(config):
85  """Convert a configuration into a `lsst.pex.policy.Policy`.
86 
87  Parameters
88  ----------
89  config : `lsst.pex.config.Config`
90  Configuration instance.
91 
92  Returns
93  -------
94  policy : `lsst.pex.policy.Policy`
95  A `~lsst.pex.policy.Policy` that is equivalent to the ``config``
96  instance. If ``config`` is `None` then return value is also `None`.
97 
98  See also
99  --------
100  makePropertySet
101  lsst.pex.policy.Policy
102  """
103  if pexPolicy is None:
104  raise RuntimeError("lsst.pex.policy is not available")
105 
106  def _helper(dict_):
107  p = pexPolicy.Policy()
108  for k, v in dict_.items():
109  if isinstance(v, dict):
110  p.set(k, _helper(v))
111  elif isinstance(v, list):
112  for vi in v:
113  p.add(k, vi)
114  elif v is not None:
115  p.set(k, v)
116  return p
117  if config:
118  return _helper(config.toDict())
119  else:
120  return None
def makePropertySet(config)
Definition: convert.py:43
a container for holding hierarchical configuration data in memory.
Definition: Policy.h:167
def makePolicy(config)
Definition: convert.py:84
PersistenceHelper _helper
Definition: Exposure.cc:219
Class for storing generic metadata.
Definition: PropertySet.h:67