from pathlib import Path import re # Fix AppController file_ac = Path('src/app_controller.py') code_ac = file_ac.read_text(encoding='utf-8') # Robust non-recursive __getattr__ new_getattr_ac = """ def __getattr__(self, name: str) -> Any: if name == '_app': raise AttributeError(name) # Check if _app exists in self without triggering __getattr__ try: app = object.__getattribute__(self, '_app') except AttributeError: raise AttributeError(f"'{type(self).__name__}' object has no attribute '{name}'") if app is not None and name in app.__dict__: return getattr(app, name) raise AttributeError(f"'{type(self).__name__}' object has no attribute '{name}'") """ # Replace all instances of __getattr__ in AppController (in case of duplication) code_ac = re.sub(r'def __getattr__\(self, name: str\) -> Any:.*?raise AttributeError\(.*?\)', new_getattr_ac, code_ac, flags=re.DOTALL) file_ac.write_text(code_ac, encoding='utf-8') # Fix App file_gui = Path('src/gui_2.py') code_gui = file_gui.read_text(encoding='utf-8') new_getattr_gui = """ def __getattr__(self, name: str) -> Any: if name == 'controller': raise AttributeError(name) try: ctrl = object.__getattribute__(self, 'controller') except AttributeError: raise AttributeError(f"'{type(self).__name__}' object has no attribute '{name}'") if ctrl is not None and name in ctrl.__dict__: return getattr(ctrl, name) raise AttributeError(f"'{type(self).__name__}' object has no attribute '{name}'") """ code_gui = re.sub(r'def __getattr__\(self, name: str\) -> Any:.*?raise AttributeError\(.*?\)', new_getattr_gui, code_gui, flags=re.DOTALL) new_setattr_gui = """ def __setattr__(self, name: str, value: Any) -> None: if name == 'controller': object.__setattr__(self, name, value) return try: ctrl = object.__getattribute__(self, 'controller') except AttributeError: ctrl = None if ctrl is not None and name in ctrl.__dict__: setattr(ctrl, name, value) else: object.__setattr__(self, name, value) """ code_gui = re.sub(r'def __setattr__\(self, name: str, value: Any\) -> None:.*?object\.__setattr__\(self, name, value\)', new_setattr_gui, code_gui, flags=re.DOTALL) file_gui.write_text(code_gui, encoding='utf-8') print('Delegation fix complete.')