|
2 | 2 | #
|
3 | 3 | # Copyright (C) 2018 University of Michigan Teaching and Learning
|
4 | 4 |
|
5 |
| -UNIZIN_FILE = "unizin_{table}.csv" |
6 |
| - |
7 |
| -RESULTS_FILE = open("u_results.txt", "w") |
8 |
| -ERRORS_FILE = open("u_errors.txt", "w") |
| 5 | +UNIZIN_FILE_FORMAT = "unizin_{table}.csv" |
9 | 6 |
|
10 | 7 | ## don't modify anything below this line (except for experimenting)
|
11 | 8 |
|
12 |
| -import sys, os, csv, itertools, argparse, smtplib |
| 9 | +import sys, os, csv, itertools, argparse, smtplib, tempfile, json |
13 | 10 |
|
14 | 11 | from email.mime.text import MIMEText
|
15 | 12 | from collections import OrderedDict
|
|
28 | 25 |
|
29 | 26 | from tqdm import tqdm
|
30 | 27 |
|
31 |
| -from dotenv import load_dotenv |
32 |
| -load_dotenv() |
| 28 | + |
| 29 | +try: |
| 30 | + with open(os.getenv("ENV_FILE", "/unizin-csv-validation/config/env.json")) as f: |
| 31 | + ENV = json.load(f) |
| 32 | +except FileNotFoundError as fnfe: |
| 33 | + print("Default config file or one defined in environment variable ENV_FILE not found. This is normal for the build, should define for operation") |
| 34 | + # Set ENV so collectstatic will still run in the build |
| 35 | + ENV = os.environ |
| 36 | + |
| 37 | +OUT_DIR = ENV.get("TMP_DIR", "/tmp/") |
| 38 | +RESULTS_FILE = open(OUT_DIR + "u_results.txt", "w") |
| 39 | +ERRORS_FILE = open(OUT_DIR + "u_errors.txt", "w") |
33 | 40 |
|
34 | 41 | class SimpleQuoter(object):
|
35 | 42 | @staticmethod
|
@@ -63,11 +70,11 @@ def close_compare(i, j):
|
63 | 70 |
|
64 | 71 | def compare_CSV(tablename):
|
65 | 72 | RESULTS_FILE.write(f"Comparing on {tablename}\n")
|
66 |
| - sis_file = dbqueries.QUERIES[tablename]['sis_file'].format(date=os.getenv("SIS_DATE")) |
| 73 | + sis_file = dbqueries.QUERIES[tablename]['sis_file'].format(date=ENV.get("SIS_DATE")) |
67 | 74 | index = dbqueries.QUERIES[tablename]['index']
|
68 | 75 | try:
|
69 | 76 | SIS_df = load_CSV_to_dict(sis_file.format(table=tablename), index)
|
70 |
| - Unizin_df = load_CSV_to_dict(UNIZIN_FILE.format(table=tablename), index) |
| 77 | + Unizin_df = load_CSV_to_dict(OUT_DIR + UNIZIN_FILE_FORMAT.format(table=tablename), index) |
71 | 78 | except Exception as e:
|
72 | 79 | print ("Exception ",e)
|
73 | 80 | return
|
@@ -118,10 +125,10 @@ def compare_CSV(tablename):
|
118 | 125 | continue
|
119 | 126 |
|
120 | 127 | def load_Unizin_to_CSV(tablename):
|
121 |
| - out_filename = UNIZIN_FILE.format(table=tablename) |
| 128 | + out_filename = OUT_DIR + UNIZIN_FILE_FORMAT.format(table=tablename) |
122 | 129 | print (f"Loading ucdm {tablename} table to {out_filename}")
|
123 | 130 | # The DSN might switch depending on the data file
|
124 |
| - conn = psycopg2.connect(os.getenv("DSN_"+dbqueries.QUERIES[tablename]['dsn'])) |
| 131 | + conn = psycopg2.connect(ENV.get("DSN_"+dbqueries.QUERIES[tablename]['dsn'])) |
125 | 132 |
|
126 | 133 | curs = conn.cursor()
|
127 | 134 |
|
@@ -163,16 +170,16 @@ def email_results(filenames, subject=None):
|
163 | 170 | if canvas_date:
|
164 | 171 | subject = f"{subject} for {canvas_date:%B %d, %Y}"
|
165 | 172 | msg['Subject'] = subject
|
166 |
| - msg['From'] = os.getenv("SMTP_FROM") |
167 |
| - msg['To'] = os.getenv("SMTP_TO") |
| 173 | + msg['From'] = ENV.get("SMTP_FROM") |
| 174 | + msg['To'] = ENV.get("SMTP_TO") |
168 | 175 |
|
169 | 176 | print (f"Emailing out {filename}")
|
170 |
| - server = smtplib.SMTP(os.getenv("SMTP_HOST"), os.getenv("SMTP_PORT"), None, 5) |
| 177 | + server = smtplib.SMTP(ENV.get("SMTP_HOST"), ENV.get("SMTP_PORT"), None, 5) |
171 | 178 | server.send_message(msg)
|
172 | 179 | server.quit()
|
173 | 180 |
|
174 | 181 | #select_tables = ['academic_term']
|
175 |
| -select_tables = list(csv.reader([os.getenv("SELECT_TABLES", "academic_term")]))[0] |
| 182 | +select_tables = list(csv.reader([ENV.get("SELECT_TABLES", "academic_term")]))[0] |
176 | 183 |
|
177 | 184 | print (select_tables)
|
178 | 185 |
|
@@ -213,8 +220,11 @@ def email_results(filenames, subject=None):
|
213 | 220 | load_Unizin_to_CSV("number_of_courses_by_term")
|
214 | 221 | load_Unizin_to_CSV("unizin_metadata")
|
215 | 222 | subject = dbqueries.QUERIES["number_of_courses_by_term"].get('query_name')
|
216 |
| - email_results([UNIZIN_FILE.format(table="unizin_metadata"),UNIZIN_FILE.format(table="number_of_courses_by_term")], subject=subject) |
| 223 | + email_results([OUT_DIR + UNIZIN_FILE_FORMAT.format(table="unizin_metadata"),OUT_DIR + UNIZIN_FILE_FORMAT.format(table="number_of_courses_by_term")], subject=subject) |
217 | 224 | else:
|
218 | 225 | print(f"{option} is not currently a valid option")
|
219 | 226 |
|
| 227 | +RESULTS_FILE.close() |
| 228 | +ERRORS_FILE.close() |
| 229 | + |
220 | 230 | sys.exit(0)
|
0 commit comments