-
-
Notifications
You must be signed in to change notification settings - Fork 31.7k
Support Path objects in the posix module #70215
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
Comments
path_converter should be changed to accept objects with the "path" attribute. See bpo-22570 for details. |
Here is preliminary patch without tests. Writing tests will be tiresome. |
Did you still want to handle this, Serhiy, or should I assign the issue to myself? |
I'll take a look. |
At first glance bpo-27186-os_path_t.patch looks good. But with the patch applied the error message in case of incorrect argument type is always "expected str, bytes or os.PathLike object, not ...". Currently it is more detailed and specific: contains the function and the argument names, and is aware that some functions accept an integer or None. I think the best way is to inline the code of PyOS_FSPath in path_converter. Also we first resolve bpo-26800. |
I have no issues inlining -- with a comment about the inlining -- if it buys us better error messages in this critical case. |
Here is a version of Jelle's patch but with PyOS_FSPath() inlined. Serhiy, does this work for you? |
Here is an updated patch that adds in change to posixmodule.c stemming from the new warning about using bytearrays. It also makes type checking more stringent for what __fspath__() returns. |
Added comments on Rietveld. Needed tests for supporting path-like objects. And it would be nice to have few tests for error messages. |
Thanks for the review! I'll probably update the patch next week based on your feedback (which I agree with). As for error messages and tests, they exist in my patches on issues dependent on this one (e.g. the tests included in issues bpo-27524 and bpo-27182 which pull in Jelle's test from his original patch); I have been doing all of my os package-related changes in a single checkout and so this one isn't wholly written in isolation. |
Here is a patch that incorporates Serhiy's feedback. |
New changeset b64f83d6ff24 by Brett Cannon in branch 'default': |
Thanks to Jelle for the initial commit and Serhiy for the code review! |
This change causes test_os to produce warnings, and can fail: $ hg update b64f83d6ff24
$ ./python -bWerror -m test -u all -W test_os
[. . .] ====================================================================== Traceback (most recent call last):
File "/media/disk/home/proj/python/cpython/Lib/test/test_os.py", line 2865, in test_path_t_converter
result = fn(path, *extra_args)
DeprecationWarning: stat: path should be string, bytes, os.PathLike or integer, not bytearray Similar warnings: |
New changeset 32b93ba32aa0 by Brett Cannon in branch 'default': |
Thanks for catching that, Martin. I removed the test for bytearray as it was originally written before the deprecation. |
One more thing, ;) the Windows buildbots are failing to removing a temporary file: ====================================================================== Traceback (most recent call last):
File "C:\buildbot.python.org\3.x.kloth-win64\build\lib\test\support\__init__.py", line 365, in unlink
_unlink(filename)
File "C:\buildbot.python.org\3.x.kloth-win64\build\lib\test\support\__init__.py", line 336, in _unlink
_waitfor(os.unlink, filename)
File "C:\buildbot.python.org\3.x.kloth-win64\build\lib\test\support\__init__.py", line 304, in _waitfor
func(pathname)
PermissionError: [WinError 32] The process cannot access the file because it is being used by another process: '@test_5716_tmp' Subsequently, other tests fail, probably because this file already exists. |
Hopefully https://hg.python.org/cpython/rev/775158408ecb will fix the problem. |
It's still failing: http://buildbot.python.org/all/builders/AMD64%20Windows7%20SP1%203.x/builds/8176/steps/test/logs/stdio . Don't have time to look at why right now and I'm on a Mac ATM so I can't test locally to try and fix it until I'm at work on Monday. If someone has an idea as to why this is only happening on Windows I'm open to understanding. |
New changeset 8ec5a00e5d75 by Berker Peksag in branch 'default': |
test_path_t_converter failure looks similar to http://bugs.python.org/issue27493#msg271047 (fixed by 5424252ce174.) I've tested a fix on my Windows box and the test passed for me. Hopefully 8ec5a00e5d75 will fix the problem on buildbots too :) |
I wish the name was "pushCleanup" to emphasize that cleanup functions are popped and called in LIFO order. |
Builtbots look happy now: |
Thanks for fixing it, Berker! On Sat, Aug 27, 2016, 12:59 Berker Peksag <report@bugs.python.org> wrote:
|
New changeset d0d9d7f55cb5 by Brett Cannon in branch 'default': |
New changeset 9be0286772bf by Brett Cannon in branch 'default': |
Note: these values reflect the state of the issue at the time it was migrated and might not reflect the current state.
Show more details
GitHub fields:
bugs.python.org fields:
The text was updated successfully, but these errors were encountered: