Hide keyboard shortcuts

Hot-keys on this page

r m x p   toggle line displays

j k   next/prev highlighted chunk

0   (zero) top of page

1   (one) first highlighted chunk

1# This file is part of daf_base 

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 program is free software: you can redistribute it and/or modify 

10# it under the terms of the GNU General Public License as published by 

11# the Free Software Foundation, either version 3 of the License, or 

12# (at your option) any later version. 

13# 

14# This program is distributed in the hope that it will be useful, 

15# but WITHOUT ANY WARRANTY; without even the implied warranty of 

16# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 

17# GNU General Public License for more details. 

18# 

19# You should have received a copy of the GNU General Public License 

20# along with this program. If not, see <http://www.gnu.org/licenses/>. 

21 

22"""This module defines YAML I/O for key lsst.daf.base classes.""" 

23 

24# If yaml package is not installed there is no reason to fail everywhere 

25try: 

26 import yaml 

27except ImportError: 

28 yaml = None 

29 

30from .dateTime import DateTime 

31from .propertyContainer import PropertyList, getPropertyListState, setPropertyListState, \ 

32 getPropertySetState, setPropertySetState, PropertySet 

33 

34# For YAML >= 5.1 need a different Loader for the constructor 

35loaderList = [] 

36if yaml: 36 ↛ 55line 36 didn't jump to line 55, because the condition on line 36 was never false

37 loaderList = [yaml.Loader, yaml.CLoader] 

38 try: 

39 loaderList.append(yaml.FullLoader) 

40 except AttributeError: 

41 pass 

42 try: 

43 loaderList.append(yaml.UnsafeLoader) 

44 except AttributeError: 

45 pass 

46 try: 

47 loaderList.append(yaml.SafeLoader) 

48 except AttributeError: 

49 pass 

50 

51 

52# YAML representers for key lsst.daf.base classes 

53 

54 

55def dt_representer(dumper, data): 

56 """Represent an lsst.daf.base.DateTime (as ISO8601-formatted string in TAI) 

57 """ 

58 return dumper.represent_scalar('lsst.daf.base.DateTime', 

59 data.toString(DateTime.TAI)) 

60 

61 

62if yaml: 62 ↛ 66line 62 didn't jump to line 66, because the condition on line 62 was never false

63 yaml.add_representer(DateTime, dt_representer) 

64 

65 

66def pl_representer(dumper, data): 

67 """Represent an lsst.daf.base.PropertyList as an ordered sequence of 

68 name/type/value/comment lists)""" 

69 # Turn the tuples into lists for cleaner representation in yaml 

70 result = getPropertyListState(data, asLists=True) 

71 return dumper.represent_sequence('lsst.daf.base.PropertyList', result, 

72 flow_style=None) 

73 

74 

75if yaml: 75 ↛ 79line 75 didn't jump to line 79, because the condition on line 75 was never false

76 yaml.add_representer(PropertyList, pl_representer) 

77 

78 

79def ps_representer(dumper, data): 

80 """Represent an lsst.daf.base.PropertySet as a mapping from names to 

81 type/value pairs.""" 

82 # Turn the tuples into lists for cleaner representation in yaml 

83 result = getPropertySetState(data, asLists=True) 

84 return dumper.represent_sequence('lsst.daf.base.PropertySet', result, 

85 flow_style=None) 

86 

87 

88if yaml: 88 ↛ 96line 88 didn't jump to line 96, because the condition on line 88 was never false

89 yaml.add_representer(PropertySet, ps_representer) 

90 

91############################################################################### 

92 

93# YAML constructors for key lsst.daf.base classes 

94 

95 

96def dt_constructor(loader, node): 

97 """Construct an lsst.daf.base.DateTime from an ISO8601-formatted string in 

98 TAI""" 

99 dt = loader.construct_scalar(node) 

100 return DateTime(str(dt), DateTime.TAI) 

101 

102 

103def pl_constructor(loader, node): 

104 """Construct an lsst.daf.base.PropertyList from a YAML pickle-like 

105 structure.""" 

106 pl = PropertyList() 

107 yield pl 

108 state = loader.construct_sequence(node, deep=True) 

109 setPropertyListState(pl, state) 

110 

111 

112def ps_constructor(loader, node): 

113 """Construct an lsst.daf.base.PropertyList from a YAML pickle-like 

114 structure.""" 

115 ps = PropertySet() 

116 yield ps 

117 state = loader.construct_sequence(node, deep=True) 

118 setPropertySetState(ps, state) 

119 

120 

121if yaml: 121 ↛ exitline 121 didn't exit the module, because the condition on line 121 was never false

122 for loader in loaderList: 

123 yaml.add_constructor('lsst.daf.base.PropertyList', pl_constructor, Loader=loader) 

124 yaml.add_constructor('lsst.daf.base.PropertySet', ps_constructor, Loader=loader) 

125 yaml.add_constructor('lsst.daf.base.DateTime', dt_constructor, Loader=loader)