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

2# encoding: utf-8 

3""" 

4Documentation for atelParser can be found here: http://atelParser.readthedocs.org/en/stable 

5 

6Usage: 

7 atel init 

8 atel count [-s <pathToSettingsFile>] 

9 atel download [-s <pathToSettingsFile>] 

10 atel [-r] parse [-s <pathToSettingsFile>] 

11 

12Options: 

13 init setup the atelParser settings file for the first time 

14 count report the total number of atels reported so far 

15 download download new and remaining ATel to the atel-directory stated in settings file 

16 parse add the new ATel contents to database and parse for names and coordinates 

17 

18 -h, --help show this help message 

19 -v, --version show version 

20 -s, --settings the settings file 

21 -r, --reparse re-parse all ATel for names and coordinates 

22""" 

23from __future__ import print_function 

24import sys 

25import os 

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

27import readline 

28import glob 

29import pickle 

30from docopt import docopt 

31from fundamentals import tools, times 

32from subprocess import Popen, PIPE, STDOUT 

33 

34 

35def tab_complete(text, state): 

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

37 

38 

39def main(arguments=None): 

40 """ 

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

42 """ 

43 # setup the command-line util settings 

44 su = tools( 

45 arguments=arguments, 

46 docString=__doc__, 

47 logLevel="WARNING", 

48 options_first=False, 

49 projectName="atelParser", 

50 defaultSettingsFile=True 

51 ) 

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

53 

54 # tab completion for raw_input 

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

56 readline.parse_and_bind("tab: complete") 

57 readline.set_completer(tab_complete) 

58 

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

60 # AUTOMATICALLY 

61 a = {} 

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

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

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

65 else: 

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

67 a[varname] = val 

68 if arg == "--dbConn": 

69 dbConn = val 

70 a["dbConn"] = val 

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

72 

73 ## START LOGGING ## 

74 startTime = times.get_now_sql_datetime() 

75 log.info( 

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

77 (startTime,)) 

78 

79 # set options interactively if user requests 

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

81 

82 # load previous settings 

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

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

85 try: 

86 with open(pathToPickleFile): 

87 pass 

88 previousSettingsExist = True 

89 except: 

90 previousSettingsExist = False 

91 previousSettings = {} 

92 if previousSettingsExist: 

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

94 

95 # x-raw-input 

96 # x-boolean-raw-input 

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

98 

99 # save the most recently used requests 

100 pickleMeObjects = [] 

101 pickleMe = {} 

102 theseLocals = locals() 

103 for k in pickleMeObjects: 

104 pickleMe[k] = theseLocals[k] 

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

106 

107 if a["init"]: 

108 from os.path import expanduser 

109 home = expanduser("~") 

110 filepath = home + "/.config/atelParser/atelParser.yaml" 

111 try: 

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

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

114 except: 

115 pass 

116 try: 

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

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

119 except: 

120 pass 

121 return 

122 

123 count = a["count"] 

124 download = a["download"] 

125 parse = a["parse"] 

126 reparseFlag = a["reparseFlag"] 

127 

128 # CALL FUNCTIONS/OBJECTS 

129 if download: 

130 from atelParser import download 

131 atels = download( 

132 log=log, 

133 settings=settings 

134 ) 

135 atelsToDownload = atels.get_list_of_atels_still_to_download() 

136 atels.download_list_of_atels(atelsToDownload) 

137 

138 if count: 

139 from atelParser import download 

140 atels = download( 

141 log=log, 

142 settings=settings 

143 ) 

144 latestNumber = atels.get_latest_atel_number() 

145 from datetime import datetime, date, time 

146 now = datetime.now() 

147 now = now.strftime("%Y/%m/%d %H:%M:%Ss") 

148 print("%(latestNumber)s ATels have been reported as of %(now)s" % locals()) 

149 

150 if parse: 

151 from atelParser import mysql 

152 parser = mysql( 

153 log=log, 

154 settings=settings, 

155 reParse=reparseFlag 

156 ) 

157 parser.atels_to_database() 

158 parser.parse_atels() 

159 parser.populate_htm_columns() 

160 

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

162 dbConn.commit() 

163 dbConn.close() 

164 ## FINISH LOGGING ## 

165 endTime = times.get_now_sql_datetime() 

166 runningTime = times.calculate_time_difference(startTime, endTime) 

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

168 (endTime, runningTime, )) 

169 

170 return 

171 

172if __name__ == '__main__': 

173 main()