Coverage for soxspipe/cl_utils.py: 13%

# Coverage for soxspipe/cl_utils.py : 13%

## 97 statements 13 run 84 missing 0 excluded

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#!/usr/bin/env python

2# encoding: utf-8

3"""

4 Documentation for soxspipe can be found here: http://soxspipe.readthedocs.org

5

6 Usage:

7 soxspipe init

8 soxspipe mbias <inputFrames> [-o <outputDirectory> -s <pathToSettingsFile>]

9 soxspipe mdark <inputFrames> [-o <outputDirectory> -s <pathToSettingsFile>]

10 soxspipe disp_sol <inputFrames> [-o <outputDirectory> -s <pathToSettingsFile>]

11 soxspipe order_centres <inputFrames> [-o <outputDirectory> -s <pathToSettingsFile>]

12

13 Options:

14 init setup the soxspipe settings file for the first time

15 mbias the master bias recipe

16 mdark the master dark recipe

17 disp_sol the disp solution recipe

18 order_centres the order centres recipe

19

20 inputFrames path to a directory of frames or a set-of-files file

21

22 -h, --help show this help message

23 -v, --version show version

24 -s, --settings <pathToSettingsFile> the settings file

25"""

26################# GLOBAL IMPORTS ####################

27 import sys

28 import os

29 os.environ['TERM'] = 'vt100'

30 import readline

31 import glob

32 import pickle

33 from docopt import docopt

34 from fundamentals import tools, times

35 from subprocess import Popen, PIPE, STDOUT

36

37

38 def tab_complete(text, state):

39 return (glob.glob(text + '*') + [None])[state]

40

41

42 def main(arguments=None):

43 """

44 *The main function used when `cl_utils.py` is run as a single script from the cl, or when installed as a cl command*

45 """

46 # setup the command-line util settings

47 su = tools(

48 arguments=arguments,

49 docString=__doc__,

50 logLevel="ERROR",

51 options_first=False,

52 projectName="soxspipe",

53 defaultSettingsFile=True

54 )

55 arguments, settings, log, dbConn = su.setup()

56

57 # ALIGN ASTROPY LOGGING LEVEL WITH SOXSPIPES

58 try:

59 from astropy import log as astrolog

60 astrolog.setLevel(settings["logging settings"]["root"]["level"])

61 except:

62 pass

63

64 # tab completion for raw_input

65 readline.set_completer_delims(' \t\n;')

66 readline.parse_and_bind("tab: complete")

67 readline.set_completer(tab_complete)

68

69 # UNPACK REMAINING CL ARGUMENTS USING `EXEC` TO SETUP THE VARIABLE NAMES

70 # AUTOMATICALLY

71 a = {}

72 for arg, val in list(arguments.items()):

73 if arg[0] == "-":

74 varname = arg.replace("-", "") + "Flag"

75 else:

76 varname = arg.replace("<", "").replace(">", "")

77 a[varname] = val

78 if arg == "--dbConn":

79 dbConn = val

80 a["dbConn"] = val

81 log.debug('%s = %s' % (varname, val,))

82

83 ## START LOGGING ##

84 startTime = times.get_now_sql_datetime()

85 log.info(

86 '--- STARTING TO RUN THE cl_utils.py AT %s' %

87 (startTime,))

88

89 # set options interactively if user requests

90 if "interactiveFlag" in a and a["interactiveFlag"]:

91

92 # load previous settings

93 moduleDirectory = os.path.dirname(__file__) + "/resources"

94 pathToPickleFile = "%(moduleDirectory)s/previousSettings.p" % locals()

95 try:

96 with open(pathToPickleFile):

97 pass

98 previousSettingsExist = True

99 except:

100 previousSettingsExist = False

101 previousSettings = {}

102 if previousSettingsExist:

103 previousSettings = pickle.load(open(pathToPickleFile, "rb"))

104

105 # x-raw-input

106 # x-boolean-raw-input

107 # x-raw-input-with-default-value-from-previous-settings

108

109 # save the most recently used requests

110 pickleMeObjects = []

111 pickleMe = {}

112 theseLocals = locals()

113 for k in pickleMeObjects:

114 pickleMe[k] = theseLocals[k]

115 pickle.dump(pickleMe, open(pathToPickleFile, "wb"))

116

117 # PACK UP SOME OF THE CL SWITCHES INTO SETTINGS DICTIONARY

118 if a['outputDirectory']:

119 settings["intermediate-data-root"] = a['outputDirectory']

120

121 if a["init"]:

122 from os.path import expanduser

123 home = expanduser("~")

124 filepath = home + "/.config/soxspipe/soxspipe.yaml"

125 try:

126 cmd = """open %(filepath)s""" % locals()

127 p = Popen(cmd, stdout=PIPE, stderr=PIPE, shell=True)

128 except:

129 pass

130 try:

131 cmd = """start %(filepath)s""" % locals()

132 p = Popen(cmd, stdout=PIPE, stderr=PIPE, shell=True)

133 except:

134 pass

135 return

136

137 if a["mbias"]:

138 from soxspipe.recipes import soxs_mbias

139 recipe = soxs_mbias(

140 log=log,

141 settings=settings,

142 inputFrames=a["inputFrames"]

143 )

144 mbiasFrame = recipe.produce_product()

145 print("You can find the master bias frame at `%(mbiasFrame)s`" % locals())

146

147 if a["mdark"]:

148 from soxspipe.recipes import soxs_mdark

149 recipe = soxs_mdark(

150 log=log,

151 settings=settings,

152 inputFrames=a["inputFrames"]

153 )

154 mdarkFrame = recipe.produce_product()

155 print("You can find the master bias frame at `%(mdarkFrame)s`" % locals())

156

157 if a["disp_sol"]:

158 from soxspipe.recipes import soxs_disp_solution

159 disp_map = soxs_disp_solution(

160 log=log,

161 settings=settings,

162 inputFrames=a["inputFrames"]

163 ).produce_product()

164 print(f"\nSingle pinhole first guess dispersion map saved to: {disp_map}")

165

166 if a["order_centres"]:

167 from soxspipe.recipes import soxs_order_centres

168 order_table = soxs_order_centres(

169 log=log,

170 settings=settings,

171 inputFrames=a["inputFrames"]

172 ).produce_product()

173 print(f"\nThe order centre locations have been saved to an order table: {order_table}")

174

175 # CALL FUNCTIONS/OBJECTS

176

177 if "dbConn" in locals() and dbConn:

178 dbConn.commit()

179 dbConn.close()

180 ## FINISH LOGGING ##

181 endTime = times.get_now_sql_datetime()

182 runningTime = times.calculate_time_difference(startTime, endTime)

183 log.info('-- FINISHED ATTEMPT TO RUN THE cl_utils.py AT %s (RUNTIME: %s) --' %

184 (endTime, runningTime, ))

185

186 return

187

188

189 if __name__ == '__main__':

190 main()