|
35 | 35 | from typing import NamedTuple |
36 | 36 |
|
37 | 37 | from . import Image |
| 38 | +from ._deprecate import deprecate |
38 | 39 | from ._util import is_path |
39 | 40 |
|
40 | 41 | MAXBLOCK = 65536 |
|
63 | 64 | # Helpers |
64 | 65 |
|
65 | 66 |
|
66 | | -def raise_oserror(error): |
| 67 | +def _get_oserror(error, *, encoder): |
67 | 68 | try: |
68 | 69 | msg = Image.core.getcodecstatus(error) |
69 | 70 | except AttributeError: |
70 | 71 | msg = ERRORS.get(error) |
71 | 72 | if not msg: |
72 | | - msg = f"decoder error {error}" |
73 | | - msg += " when reading image file" |
74 | | - raise OSError(msg) |
| 73 | + msg = f"{'encoder' if encoder else 'decoder'} error {error}" |
| 74 | + msg += f" when {'writing' if encoder else 'reading'} image file" |
| 75 | + return OSError(msg) |
| 76 | + |
| 77 | + |
| 78 | +def raise_oserror(error): |
| 79 | + deprecate( |
| 80 | + "raise_oserror", |
| 81 | + 12, |
| 82 | + action="It is only useful for translating error codes returned by a codec's " |
| 83 | + "decode() method, which ImageFile already does automatically.", |
| 84 | + ) |
| 85 | + raise _get_oserror(error, encoder=False) |
75 | 86 |
|
76 | 87 |
|
77 | 88 | def _tilesort(t): |
@@ -294,7 +305,7 @@ def load(self): |
294 | 305 |
|
295 | 306 | if not self.map and not LOAD_TRUNCATED_IMAGES and err_code < 0: |
296 | 307 | # still raised if decoder fails to return anything |
297 | | - raise_oserror(err_code) |
| 308 | + raise _get_oserror(err_code, encoder=False) |
298 | 309 |
|
299 | 310 | return Image.Image.load(self) |
300 | 311 |
|
@@ -421,7 +432,7 @@ def feed(self, data): |
421 | 432 | if e < 0: |
422 | 433 | # decoding error |
423 | 434 | self.image = None |
424 | | - raise_oserror(e) |
| 435 | + raise _get_oserror(e, encoder=False) |
425 | 436 | else: |
426 | 437 | # end of image |
427 | 438 | return |
@@ -551,8 +562,7 @@ def _encode_tile(im, fp, tile: list[_Tile], bufsize, fh, exc=None): |
551 | 562 | # slight speedup: compress to real file object |
552 | 563 | errcode = encoder.encode_to_file(fh, bufsize) |
553 | 564 | if errcode < 0: |
554 | | - msg = f"encoder error {errcode} when writing image file" |
555 | | - raise OSError(msg) from exc |
| 565 | + raise _get_oserror(errcode, encoder=True) from exc |
556 | 566 | finally: |
557 | 567 | encoder.cleanup() |
558 | 568 |
|
|
0 commit comments