From 7dffa943fa5be83d556ecfecb329ee7426ea92aa Mon Sep 17 00:00:00 2001 From: "Paul Gauthier (aider)" Date: Tue, 26 Nov 2024 20:37:29 -0800 Subject: [PATCH] fix: handle analytics file access errors gracefully --- aider/analytics.py | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/aider/analytics.py b/aider/analytics.py index 52f5a7f9d..9404fa05b 100644 --- a/aider/analytics.py +++ b/aider/analytics.py @@ -105,9 +105,14 @@ class Analytics: return uuid_str[:6] <= threshold def get_data_file_path(self): - data_file = Path.home() / ".aider" / "analytics.json" - data_file.parent.mkdir(parents=True, exist_ok=True) - return data_file + try: + data_file = Path.home() / ".aider" / "analytics.json" + data_file.parent.mkdir(parents=True, exist_ok=True) + return data_file + except OSError: + # If we can't create/access the directory, just disable analytics + self.disable(permanently=False) + return None def get_or_create_uuid(self): self.load_data() @@ -119,6 +124,9 @@ class Analytics: def load_data(self): data_file = self.get_data_file_path() + if not data_file: + return + if data_file.exists(): try: data = json.loads(data_file.read_text()) @@ -130,14 +138,20 @@ class Analytics: def save_data(self): data_file = self.get_data_file_path() + if not data_file: + return + data = dict( uuid=self.user_id, permanently_disable=self.permanently_disable, asked_opt_in=self.asked_opt_in, ) - # Allow exceptions; crash if we can't record permanently_disabled=True, etc - data_file.write_text(json.dumps(data, indent=4)) + try: + data_file.write_text(json.dumps(data, indent=4)) + except OSError: + # If we can't write the file, just disable analytics + self.disable(permanently=False) def get_system_info(self): return {