From 69185e58190155bf4d0e17d56fd6e0b3cb5f3c3b Mon Sep 17 00:00:00 2001 From: "James R. Barlow" Date: Fri, 12 Dec 2025 01:20:59 -0800 Subject: [PATCH] refactor: remove custom attribute handling methods and add output_folder option --- src/ocrmypdf/_options.py | 51 ++++++++++++++++++++-------------------- 1 file changed, 26 insertions(+), 25 deletions(-) diff --git a/src/ocrmypdf/_options.py b/src/ocrmypdf/_options.py index 745eacea..7df6e696 100644 --- a/src/ocrmypdf/_options.py +++ b/src/ocrmypdf/_options.py @@ -77,6 +77,7 @@ class OCROptions(BaseModel): input_file: PathOrIO output_file: PathOrIO sidecar: PathOrIO | None = None + output_folder: Path | None = None # Core OCR options languages: list[str] = Field(default_factory=lambda: [DEFAULT_LANGUAGE]) @@ -163,33 +164,33 @@ class OCROptions(BaseModel): default_factory=dict, exclude=True, alias='_extra_attrs' ) - def __getattr__(self, name: str) -> Any: - """Allow attribute access like argparse.Namespace.""" - if name in self.extra_attrs: - return self.extra_attrs[name] - raise AttributeError( - f"'{type(self).__name__}' object has no attribute '{name}'" - ) + # def __getattr__(self, name: str) -> Any: + # """Allow attribute access like argparse.Namespace.""" + # if name in self.extra_attrs: + # return self.extra_attrs[name] + # raise AttributeError( + # f"'{type(self).__name__}' object has no attribute '{name}'" + # ) - def __setattr__(self, name: str, value: Any) -> None: - """Allow attribute setting like argparse.Namespace.""" - if name.startswith('_') or name in type(self).model_fields: - super().__setattr__(name, value) - else: - if not hasattr(self, 'extra_attrs'): - super().__setattr__('extra_attrs', {}) - self.extra_attrs[name] = value + # def __setattr__(self, name: str, value: Any) -> None: + # """Allow attribute setting like argparse.Namespace.""" + # if name.startswith('_') or name in type(self).model_fields: + # super().__setattr__(name, value) + # else: + # if not hasattr(self, 'extra_attrs'): + # super().__setattr__('extra_attrs', {}) + # self.extra_attrs[name] = value - def __delattr__(self, name: str) -> None: - """Allow attribute deletion like argparse.Namespace.""" - if name in type(self).model_fields: - super().__delattr__(name) - elif name in self.extra_attrs: - del self.extra_attrs[name] - else: - raise AttributeError( - f"'{type(self).__name__}' object has no attribute '{name}'" - ) + # def __delattr__(self, name: str) -> None: + # """Allow attribute deletion like argparse.Namespace.""" + # if name in type(self).model_fields: + # super().__delattr__(name) + # elif name in self.extra_attrs: + # del self.extra_attrs[name] + # else: + # raise AttributeError( + # f"'{type(self).__name__}' object has no attribute '{name}'" + # ) @classmethod def from_namespace(cls, ns: Namespace) -> OCROptions: