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
6Usage:
7 atel init
8 atel count [-s <pathToSettingsFile>]
9 atel download [-s <pathToSettingsFile>]
10 atel [-r] parse [-s <pathToSettingsFile>]
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
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
35def tab_complete(text, state):
36 return (glob.glob(text + '*') + [None])[state]
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()
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)
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,))
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,))
79 # set options interactively if user requests
80 if "interactiveFlag" in a and a["interactiveFlag"]:
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"))
95 # x-raw-input
96 # x-boolean-raw-input
97 # x-raw-input-with-default-value-from-previous-settings
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"))
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
123 count = a["count"]
124 download = a["download"]
125 parse = a["parse"]
126 reparseFlag = a["reparseFlag"]
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)
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())
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()
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, ))
170 return
172if __name__ == '__main__':
173 main()