LSSTApplications  17.0+124,17.0+14,17.0+73,18.0.0+37,18.0.0+80,18.0.0-4-g68ffd23+4,18.1.0-1-g0001055+12,18.1.0-1-g03d53ef+5,18.1.0-1-g1349e88+55,18.1.0-1-g2505f39+44,18.1.0-1-g5315e5e+4,18.1.0-1-g5e4b7ea+14,18.1.0-1-g7e8fceb+4,18.1.0-1-g85f8cd4+48,18.1.0-1-g8ff0b9f+4,18.1.0-1-ga2c679d+1,18.1.0-1-gd55f500+35,18.1.0-10-gb58edde+2,18.1.0-11-g0997b02+4,18.1.0-13-gfe4edf0b+12,18.1.0-14-g259bd21+21,18.1.0-19-gdb69f3f+2,18.1.0-2-g5f9922c+24,18.1.0-2-gd3b74e5+11,18.1.0-2-gfbf3545+32,18.1.0-26-g728bddb4+5,18.1.0-27-g6ff7ca9+2,18.1.0-3-g52aa583+25,18.1.0-3-g8ea57af+9,18.1.0-3-gb69f684+42,18.1.0-3-gfcaddf3+6,18.1.0-32-gd8786685a,18.1.0-4-gf3f9b77+6,18.1.0-5-g1dd662b+2,18.1.0-5-g6dbcb01+41,18.1.0-6-gae77429+3,18.1.0-7-g9d75d83+9,18.1.0-7-gae09a6d+30,18.1.0-9-gc381ef5+4,w.2019.45
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