From 1e0441fa0700d15d1b723b742f4f4cce1da6617a Mon Sep 17 00:00:00 2001 From: William Valentin Date: Thu, 17 Jul 2025 15:36:52 -0700 Subject: [PATCH] Add logging with .env support --- .gitignore | 1 + src/main.py | 48 +++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 48 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 0b0c840..87d08bc 100644 --- a/.gitignore +++ b/.gitignore @@ -5,3 +5,4 @@ dist/ *.pyc __pycache__/ *.spec +*.log diff --git a/src/main.py b/src/main.py index f844cd4..955ee72 100644 --- a/src/main.py +++ b/src/main.py @@ -1,4 +1,5 @@ import csv +import logging import os import tkinter as tk from tkinter import messagebox, ttk @@ -7,6 +8,9 @@ import matplotlib.pyplot as plt import pandas as pd from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg +import sys +from dotenv import load_dotenv + class MedTrackerApp: def __init__(self, root): @@ -17,7 +21,24 @@ class MedTrackerApp: # self.root.iconbitmap("app_icon.ico") # self.root.geometry("800x600") - self.filename = "thechart_data.csv" + if len(sys.argv) > 1: + script_name = sys.argv[0] + first_argument = sys.argv[1] + + if logger.level == logging.DEBUG: + logger.debug(f"Script name: {script_name}") + logger.debug(f"First argument: {first_argument}") + + if os.path.exists(first_argument): + self.filename = first_argument + logger.info(f"Using data file: {first_argument}") + else: + self.filename = "thechart_data.csv" + logger.warning( + f"Data file {first_argument} does not exist." + f" Using default file: {self.filename}" + ) + self.initialize_csv() main_frame = ttk.Frame(self.root, padding="10") @@ -489,6 +510,7 @@ class MedTrackerApp: def update_graph(self, df: pd.DataFrame) -> None: self.ax.clear() if not df.empty: + df["date"] = pd.to_datetime(df["date"]) df = df.sort_values(by="date") df.set_index(keys="date", inplace=True) self.ax.plot( @@ -515,7 +537,31 @@ class MedTrackerApp: self.canvas.draw() +def setup_logging() -> logging.Logger: + load_dotenv() + log_file = os.getenv("LOG_FILE", "/tmp/thechart.log") + if not os.path.exists(os.path.dirname(log_file)): + os.makedirs(os.path.dirname(log_file), exist_ok=True) + + log_level = os.getenv("LOG_LEVEL", "INFO").upper() + if log_level not in ["DEBUG", "INFO", "WARNING", "ERROR", "CRITICAL"]: + log_level = "DEBUG" + + logging.basicConfig( + level=getattr(logging, log_level), + format="%(asctime)s - %(levelname)s - %(message)s", + handlers=[ + logging.FileHandler(log_file), + logging.StreamHandler(sys.stdout), + ], + ) + logger = logging.getLogger() + + return logger + + if __name__ == "__main__": + logger = setup_logging() root = tk.Tk() app = MedTrackerApp(root) root.mainloop()