Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Do not discard error message if _imagingft fails to import #7047

Merged
merged 3 commits into from
Apr 1, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 4 additions & 9 deletions src/PIL/ImageFont.py
Original file line number Diff line number Diff line change
Expand Up @@ -54,17 +54,12 @@ def __getattr__(name):
raise AttributeError(msg)


class _ImagingFtNotInstalled:
# module placeholder
def __getattr__(self, id):
msg = "The _imagingft C module is not installed"
raise ImportError(msg)


try:
from . import _imagingft as core
except ImportError:
core = _ImagingFtNotInstalled()
except ImportError as ex:
from ._util import DeferredError

core = DeferredError(ex)


_UNSPECIFIED = object()
Expand Down
10 changes: 8 additions & 2 deletions src/PIL/features.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,10 @@ def check_module(feature):
try:
__import__(module)
return True
except ImportError:
except ModuleNotFoundError:
return False
except ImportError as ex:
warnings.warn(str(ex))
return False


Expand Down Expand Up @@ -145,7 +148,10 @@ def check_feature(feature):
try:
imported_module = __import__(module, fromlist=["PIL"])
return getattr(imported_module, flag)
except ImportError:
except ModuleNotFoundError:
return None
except ImportError as ex:
warnings.warn(str(ex))
return None


Expand Down
19 changes: 1 addition & 18 deletions src/_imagingft.c
Original file line number Diff line number Diff line change
Expand Up @@ -33,12 +33,6 @@
#include FT_COLOR_H
#endif

#define KEEP_PY_UNICODE

#if !defined(FT_LOAD_TARGET_MONO)
#define FT_LOAD_TARGET_MONO FT_LOAD_MONOCHROME
#endif

/* -------------------------------------------------------------------- */
/* error table */

Expand Down Expand Up @@ -420,11 +414,9 @@ text_layout_fallback(
if (mask) {
load_flags |= FT_LOAD_TARGET_MONO;
}
#ifdef FT_LOAD_COLOR
if (color) {
load_flags |= FT_LOAD_COLOR;
}
#endif
for (i = 0; font_getchar(string, i, &ch); i++) {
(*glyph_info)[i].index = FT_Get_Char_Index(self->face, ch);
error = FT_Load_Glyph(self->face, (*glyph_info)[i].index, load_flags);
Expand Down Expand Up @@ -581,11 +573,9 @@ font_getsize(FontObject *self, PyObject *args) {
if (mask) {
load_flags |= FT_LOAD_TARGET_MONO;
}
#ifdef FT_LOAD_COLOR
if (color) {
load_flags |= FT_LOAD_COLOR;
}
#endif

/*
* text bounds are given by:
Expand Down Expand Up @@ -844,11 +834,9 @@ font_render(FontObject *self, PyObject *args) {
if (mask) {
load_flags |= FT_LOAD_TARGET_MONO;
}
#ifdef FT_LOAD_COLOR
if (color) {
load_flags |= FT_LOAD_COLOR;
}
#endif

/*
* calculate x_min and y_max
Expand Down Expand Up @@ -958,13 +946,11 @@ font_render(FontObject *self, PyObject *args) {
/* bitmap is now FT_PIXEL_MODE_GRAY, fall through */
case FT_PIXEL_MODE_GRAY:
break;
#ifdef FT_LOAD_COLOR
case FT_PIXEL_MODE_BGRA:
if (color) {
break;
}
/* we didn't ask for color, fall through to default */
#endif
default:
PyErr_SetString(PyExc_OSError, "unsupported bitmap pixel mode");
goto glyph_error;
Expand Down Expand Up @@ -995,7 +981,6 @@ font_render(FontObject *self, PyObject *args) {
} else {
target = im->image8[yy] + xx;
}
#ifdef FT_LOAD_COLOR
if (color && bitmap.pixel_mode == FT_PIXEL_MODE_BGRA) {
/* paste color glyph */
for (k = x0; k < x1; k++) {
Expand All @@ -1010,9 +995,7 @@ font_render(FontObject *self, PyObject *args) {
target[k * 4 + 3] = source[k * 4 + 3];
}
}
} else
#endif
if (bitmap.pixel_mode == FT_PIXEL_MODE_GRAY) {
} else if (bitmap.pixel_mode == FT_PIXEL_MODE_GRAY) {
if (color) {
unsigned char *ink = (unsigned char *)&foreground_ink;
for (k = x0; k < x1; k++) {
Expand Down