-
-
Notifications
You must be signed in to change notification settings - Fork 2.2k
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
Handle pathlib.Path in FreeTypeFont #7578
Conversation
@@ -213,6 +214,8 @@ def load_from_bytes(f): | |||
) | |||
|
|||
if is_path(font): |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'm looking at _util.is_path
, it checks isinstance(f, (bytes, str, Path))
, so bytes are also handled as paths, but next I see: else: load_from_bytes(font)
.
Do we really want consider bytes as paths? I believe this is obsolete in Python3
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
#258 was the original request for bytes as paths.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I assume load_from_bytes
is unreachable here, so we need to remove it, or provide a way to reach it
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think it's reachable. The logic hasn't changed since load_from_bytes()
was added in #3785.
If it is a path, then pass the path to the C layer. If we're on Windows and the path is not ASCII, then open a file pointer to the path and read the contents of the file pointer with load_from_bytes()
.
If it is not a path, then it is a file pointer, read the contents of the file pointer with load_from_bytes()
.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ok, I see. I believe there is misnaming here, since f is not a bytes, it's file object.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Oh right, I remember figuring that out after being confused in the past.
Should typing.BinaryIO
be added to the type annotation then?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yep, I've pushed a commit. Testing in PyCharm, I find it also includes io.BytesIO
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@radarhere I see you've used typing.IO
. This causes a mypy error, see #7642.
Testing with both PyCharm and mypy, I find that a io.BytesIO
value is accepted for a typing.BinaryIO
type hint (which seems correct here), so I'm not sure I understand your last message.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think I was concerned about strings being used, but looking now, that doesn't appear to be a problem.
Co-authored-by: Hugo van Kemenade <[email protected]>
Co-authored-by: Ondrej Baranovič <[email protected]>
Fix documentation link to PIL.ImageFont.Layout
Resolves #7577