CoolFace
Apppublic

Aluode/PerceptionLabPortable

sourceHugging Faceupdated 9mo agoView on Hugging Face
0likes
GribStubImagePlugin.py77 linesDownload Raw Back to PIL
1#
2# The Python Imaging Library
3# $Id$
4#
5# GRIB stub adapter
6#
7# Copyright (c) 1996-2003 by Fredrik Lundh
8#
9# See the README file for information on usage and redistribution.
10#
11from __future__ import annotations
12
13import os
14from typing import IO
15
16from . import Image, ImageFile
17
18_handler = None
19
20
21def register_handler(handler: ImageFile.StubHandler | None) -> None:
22    """
23    Install application-specific GRIB image handler.
24
25    :param handler: Handler object.
26    """
27    global _handler
28    _handler = handler
29
30
31# --------------------------------------------------------------------
32# Image adapter
33
34
35def _accept(prefix: bytes) -> bool:
36    return len(prefix) >= 8 and prefix.startswith(b"GRIB") and prefix[7] == 1
37
38
39class GribStubImageFile(ImageFile.StubImageFile):
40    format = "GRIB"
41    format_description = "GRIB"
42
43    def _open(self) -> None:
44        assert self.fp is not None
45        if not _accept(self.fp.read(8)):
46            msg = "Not a GRIB file"
47            raise SyntaxError(msg)
48
49        self.fp.seek(-8, os.SEEK_CUR)
50
51        # make something up
52        self._mode = "F"
53        self._size = 1, 1
54
55        loader = self._load()
56        if loader:
57            loader.open(self)
58
59    def _load(self) -> ImageFile.StubHandler | None:
60        return _handler
61
62
63def _save(im: Image.Image, fp: IO[bytes], filename: str | bytes) -> None:
64    if _handler is None or not hasattr(_handler, "save"):
65        msg = "GRIB save handler not installed"
66        raise OSError(msg)
67    _handler.save(im, fp, filename)
68
69
70# --------------------------------------------------------------------
71# Registry
72
73Image.register_open(GribStubImageFile.format, GribStubImageFile, _accept)
74Image.register_save(GribStubImageFile.format, _save)
75
76Image.register_extension(GribStubImageFile.format, ".grib")
77 
Aluode/PerceptionLabPortable · CoolFace