Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Udayraj123
GitHub Repository: Udayraj123/OMRChecker
Path: blob/master/src/utils/file.py
228 views
1
import argparse
2
import json
3
import os
4
from csv import QUOTE_NONNUMERIC
5
from time import localtime, strftime
6
7
import pandas as pd
8
9
from src.logger import logger
10
11
12
def load_json(path, **rest):
13
try:
14
with open(path, "r") as f:
15
loaded = json.load(f, **rest)
16
except json.decoder.JSONDecodeError as error:
17
logger.critical(f"Error when loading json file at: '{path}'\n{error}")
18
exit(1)
19
return loaded
20
21
22
class Paths:
23
def __init__(self, output_dir):
24
self.output_dir = output_dir
25
self.save_marked_dir = output_dir.joinpath("CheckedOMRs")
26
self.results_dir = output_dir.joinpath("Results")
27
self.manual_dir = output_dir.joinpath("Manual")
28
self.evaluation_dir = output_dir.joinpath("Evaluation")
29
self.errors_dir = self.manual_dir.joinpath("ErrorFiles")
30
self.multi_marked_dir = self.manual_dir.joinpath("MultiMarkedFiles")
31
32
33
def setup_dirs_for_paths(paths):
34
logger.info("Checking Directories...")
35
for save_output_dir in [paths.save_marked_dir]:
36
if not os.path.exists(save_output_dir):
37
logger.info(f"Created : {save_output_dir}")
38
os.makedirs(save_output_dir)
39
os.mkdir(save_output_dir.joinpath("stack"))
40
os.mkdir(save_output_dir.joinpath("_MULTI_"))
41
os.mkdir(save_output_dir.joinpath("_MULTI_", "stack"))
42
43
for save_output_dir in [paths.manual_dir, paths.results_dir, paths.evaluation_dir]:
44
if not os.path.exists(save_output_dir):
45
logger.info(f"Created : {save_output_dir}")
46
os.makedirs(save_output_dir)
47
48
for save_output_dir in [paths.multi_marked_dir, paths.errors_dir]:
49
if not os.path.exists(save_output_dir):
50
logger.info(f"Created : {save_output_dir}")
51
os.makedirs(save_output_dir)
52
53
54
def setup_outputs_for_template(paths, template):
55
# TODO: consider moving this into a class instance
56
ns = argparse.Namespace()
57
logger.info("Checking Files...")
58
59
# Include current output paths
60
ns.paths = paths
61
62
ns.empty_resp = [""] * len(template.output_columns)
63
ns.sheetCols = [
64
"file_id",
65
"input_path",
66
"output_path",
67
"score",
68
] + template.output_columns
69
ns.OUTPUT_SET = []
70
ns.files_obj = {}
71
TIME_NOW_HRS = strftime("%I%p", localtime())
72
ns.filesMap = {
73
"Results": os.path.join(paths.results_dir, f"Results_{TIME_NOW_HRS}.csv"),
74
"MultiMarked": os.path.join(paths.manual_dir, "MultiMarkedFiles.csv"),
75
"Errors": os.path.join(paths.manual_dir, "ErrorFiles.csv"),
76
}
77
78
for file_key, file_name in ns.filesMap.items():
79
if not os.path.exists(file_name):
80
logger.info(f"Created new file: '{file_name}'")
81
# moved handling of files to pandas csv writer
82
ns.files_obj[file_key] = file_name
83
# Create Header Columns
84
pd.DataFrame([ns.sheetCols], dtype=str).to_csv(
85
ns.files_obj[file_key],
86
mode="a",
87
quoting=QUOTE_NONNUMERIC,
88
header=False,
89
index=False,
90
)
91
else:
92
logger.info(f"Present : appending to '{file_name}'")
93
ns.files_obj[file_key] = open(file_name, "a")
94
95
return ns
96
97