-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtest.py
136 lines (104 loc) · 3.36 KB
/
test.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
import os
from box.exceptions import BoxValueError
import yaml
from src import logger
import json
import joblib
from ensure import ensure_annotations
from box import ConfigBox
from pathlib import Path
from typing import Any
import base64
@ensure_annotations
def read_yaml(path_to_yaml: Path) -> ConfigBox:
"""Reads yaml file and returns
Args:
path_to_yaml (str): path like input
Raises:
ValueError: if yaml file is empty
e: empty file
Returns:
configBox: ConfigBox type
"""
try:
with open(path_to_yaml) as yaml_file:
content = yaml.safe_load(yaml_file)
logger.info(f"yaml file: {path_to_yaml} loaded successfully")
return ConfigBox(content)
except BoxValueError:
raise ValueError("yaml file is empty")
except Exception as e:
return e
@ensure_annotations
def create_directories(path_to_directories: list, verbose=True):
"""Create list of directories
Args:
path_to_directories (list): list of path of directories
ignore_log (bool, optional): ignore if multiple dirs is to be created. Defaults to False
"""
for path in path_to_directories:
os.makedirs(path, exist_ok=True)
if verbose:
logger.info(f"Created directory at: {path}")
# While doing evaluation at the time I'll get some loss and accuracy
# matrix okey that matrix I'll be saving as json okey that's why I need this
@ensure_annotations
def save_json(path: Path, data: dict):
"""Save json data
Args:
path (Path): path to json file
data (dict): data to be saved in json file
"""
with open(path, "w") as f:
json.dump(data, f, indent=4)
logger.info(f"json file saved at: {path}")
@ensure_annotations
def load_json(path: Path) -> ConfigBox:
"""load json files data
Args:
Path(Path): Path to json file
Returns:
ConfigBox: data as class attributes instead of dict
"""
with open(path) as f:
content = json.load(f)
logger.info(f"josn file loaded successfully from: {path}")
return ConfigBox(content)
@ensure_annotations
def save_bin(data: Any, path: Path):
"""Save binary file
Args:
data (Any): data to be saved as binary
path(Path): path to binary file
"""
joblib.dump(value=data, filename=path)
logger.info(f"binary file saved at: {path}")
@ensure_annotations
def load_bin(path: Path) -> Any:
"""load binary data
Args:
path(Path): path to binary file
Returns:
Any: Object stored in the file
"""
data = joblib.load(path)
logger.info(f"binary file loaded from: {path}")
return data
@ ensure_annotations
def get_size(path: Path) -> str:
"""get size in KB
Args:
path (Path): path of the file
Returns:
str: size in KB
"""
size_in_kb = round(os.path.getsize(path)/1024)
return f"~{size_in_kb} KB"
def decoderImage(imgstring, fileName):
imgdata = base64.b64decode(imgstring)
with open(fileName, 'wb') as f:
f.write(imgdata)
f.close()
def encodeImageIntoBase64(croppedImagePath):
with open(croppedImagePath, 'rb') as f:
return base64.b64encode(f.read())