OptimaLab35/utils/utility.py

117 lines
3.8 KiB
Python

import yaml
import os
class Utilities:
def __init__(self):
pass
def read_yaml(self, yaml_file):
try:
with open(yaml_file, "r") as file:
data = yaml.safe_load(file)
return data
except (FileNotFoundError, PermissionError) as e:
print(f"Error loading settings file: {e}")
return
def write_yaml(self, yaml_file, data):
try:
with open(yaml_file, "w") as file:
yaml.dump(data, file)
except PermissionError as e:
print(f"Error saving setings: {e}")
def program_configs(self):
"""Prepear folder for config and generate default exif if non aviable"""
program_folder = self._ensure_program_folder_exists()
if not os.path.isfile(f"{program_folder}/exif.yaml"):
self._default_exif(f"{program_folder}/exif.yaml")
def _ensure_program_folder_exists(self):
program_folder = os.path.expanduser("~/.config/OptimaLab35")
print(program_folder)
if not os.path.exists(program_folder):
print("in not, make folder")
os.makedirs(program_folder)
return program_folder
def _default_exif(self, file):
"""Makes a default exif file."""
print("Making default")
def_exif = {
"artist": [
"Mr Finchum",
"John Doe"
],
"copyright_info": [
"All Rights Reserved",
"CC BY-NC 4.0",
"No Copyright"
],
"image_description": [
"ILFORD DELTA 3200",
"ILFORD ILFOCOLOR",
"LomoChrome Turquoise",
"Kodak 200"
],
"iso": [
"200",
"400",
"1600",
"3200"
],
"lens": [
"Nikon LENS SERIES E 50mm",
"AF NIKKOR 35-70mm",
"Canon FD 50mm f/1.4 S.S.C"
],
"make": [
"Nikon",
"Canon"
],
"model": [
"FG",
"F50",
"AE-1"
],
"user_comment": [
"Scanner.NORITSU-KOKI",
"Scanner.NA"
]
}
self.write_yaml(file, def_exif)
def append_number_to_name(self, base_name: str, current_image: int, total_images: int, invert: bool):
""""Returns name, combination of base_name and ending number."""
total_digits = len(str(total_images))
if invert:
ending_number = total_images - (current_image - 1)
else:
ending_number = current_image
ending = f"{ending_number:0{total_digits}}"
return f"{base_name}_{ending}"
def yes_no(self, str):
"""Ask user y/n question"""
while True:
choice = input(f"{str} (y/n): ")
if choice == "y":
return True
elif choice == "n":
return False
else:
print("Not a valid option, try again.")
def progress_bar(self, current, total, barsize = 50):
if current > total:
print("\033[91mThis bar has exceeded its limits!\033[0m Maybe the current value needs some restraint?")
return
progress = int((barsize / total) * current)
rest = barsize - progress
if rest <= 2: rest = 0
# Determine the number of digits in total
total_digits = len(str(total))
# Format current with leading zeros
current_formatted = f"{current:0{total_digits}}"
print(f"{current_formatted}|{progress * '-'}>{rest * ' '}|{total}", end="\r")
if current == total: print("")