msg242496 - (view) |
Author: Gregorio (Gregorio) |
Date: 2015-05-03 17:52 |
Debian 8
Python 3.4.3
Path.(r)glob stops when it encounters a PermissionDenied exception.
However, os.walk just skips files/directories it does not have permission to access.
In my opinion, the os.walk behavior is better because it doesn't prevent usage in situations where a single file/directory in a tree has restricted permissions.
|
msg242727 - (view) |
Author: Ethan Furman (ethan.furman) *  |
Date: 2015-05-07 19:13 |
From Frank Woodall on python-ideas:
==================================
How to reproduce:
mkdir /tmp/path_test && cd /tmp/path_test && mkdir dir1 dir2 dir2/dir3 && touch dir1/file1 dir1/file2 dir2/file1 dir2/file2 dir2/dir3/file1
su
chmod 700 dir2/dir3/
chown root:root dir2/dir3/
exit
python 3.4.1
from pathlib import Path
p = Path('/tmp/path_test')
for x in p.rglob('*') : print(x)
|
msg244876 - (view) |
Author: Ulrich Petri (ulope) * |
Date: 2015-06-05 20:19 |
The attached patch adds an unaccessible directory to the pathlib tests to provoke the problem and also fixes the cause in pathlib.
It applies to at least 3.4 - 3.6
|
msg244899 - (view) |
Author: Serhiy Storchaka (serhiy.storchaka) *  |
Date: 2015-06-06 12:01 |
The glob module is not affected because it ignores all OSErrors (including "Permission denied" and "Too many levels of symbolic links").
>>> import glob
>>> glob.glob('**/*', recursive=True)
['dir2/file1', 'dir2/file2', 'dir2/dir3', 'dir1/file1', 'dir1/file2']
There is no special test for PermissionError.
|
msg245032 - (view) |
Author: Serhiy Storchaka (serhiy.storchaka) *  |
Date: 2015-06-08 18:47 |
I'm not sure that Path.(r)glob() (and perhaps glob.glob()) should unconditionally ignore errors. Python has lover level than shell, and even bash has an option that controls this behavior.
failglob
If set, patterns which fail to match filenames during pathname expansion result in an expansion error.
|
msg245034 - (view) |
Author: Ethan Furman (ethan.furman) *  |
Date: 2015-06-08 19:13 |
Failing to find any matches with a pattern is an entirely different class of error than finding matches but hitting permission problems or broken links or suddenly deleted files or ...
If glob doesn't already have a 'failglob' option we could add that, but in a different issue.
|
msg245884 - (view) |
Author: Antoine Pitrou (pitrou) *  |
Date: 2015-06-27 17:29 |
Thank you Ulrich for the patch. I basically agree with the solution you proposed (I'm not a fan of the non-ASCII "ASCII art", by the way, but I won't block the patch on that :-)).
Have you tested the patch and tests under Windows? Otherwise, I (or someone else) will have to do that before accepting it.
|
msg246077 - (view) |
Author: Ulrich Petri (ulope) * |
Date: 2015-07-02 13:57 |
Antoine, thanks for the review. I didn't realise that `tree` outputs non-ASCII by default. I've updated the patch with a pure ASCII file tree.
Unfortunately I don't have a Windows dev environment available at the moment, so I can't easily test for that.
|
msg246085 - (view) |
Author: Antoine Pitrou (pitrou) *  |
Date: 2015-07-02 15:49 |
Ok, thanks. The tests are running ok on my Windows VM.
|
msg246092 - (view) |
Author: Serhiy Storchaka (serhiy.storchaka) *  |
Date: 2015-07-02 18:11 |
May be slightly refactor the code?
def _select_from(self, parent_path, is_dir, exists, listdir):
try:
if not is_dir(parent_path):
return
yield from self._select_from2(parent_path, is_dir, exists, listdir)
except PermissionError:
return
def _select_from2(self, parent_path, is_dir, exists, listdir):
... # implementation
|
msg257510 - (view) |
Author: Guido van Rossum (gvanrossum) *  |
Date: 2016-01-05 01:56 |
I just ran into this issue. What's keeping it from being committed, except perhaps that Antoine decided to leave core developments?
|
msg257618 - (view) |
Author: Guido van Rossum (gvanrossum) *  |
Date: 2016-01-06 17:42 |
I'm just going to commit this.
|
msg257623 - (view) |
Author: Roundup Robot (python-dev)  |
Date: 2016-01-06 17:54 |
New changeset bac18cb7b011 by Guido van Rossum in branch '3.4':
Issue #24120: Ignore PermissionError in pathlib.Path.[r]glob(). Ulrich Petri.
https://hg.python.org/cpython/rev/bac18cb7b011
New changeset 224a026b4ca1 by Guido van Rossum in branch '3.5':
Issue #24120: Ignore PermissionError in pathlib.Path.[r]glob(). Ulrich Petri. (Merge 3.4->3.5)
https://hg.python.org/cpython/rev/224a026b4ca1
New changeset f6ae90450a4d by Guido van Rossum in branch 'default':
Issue #24120: Ignore PermissionError in pathlib.Path.[r]glob(). Ulrich Petri. (Merge 3.5->3.6)
https://hg.python.org/cpython/rev/f6ae90450a4d
|
msg257627 - (view) |
Author: Gregorio (Gregorio) |
Date: 2016-01-06 18:19 |
thanks
On 01/06/2016 06:42 PM, Guido van Rossum wrote:
> Guido van Rossum added the comment:
>
> I'm just going to commit this.
>
> ----------
> assignee: -> gvanrossum
>
> _______________________________________
> Python tracker <report@bugs.python.org>
> <http://bugs.python.org/issue24120>
> _______________________________________
>
|
msg257707 - (view) |
Author: Guido van Rossum (gvanrossum) *  |
Date: 2016-01-07 18:43 |
I think this is not fixed yet. The try/except clause is currently around certain loops whereas it should be around specific calls (is_dir, exists, listdir. and is_symlink). As it currently is, the behavior is dependent on the ordering of the names returned by listdir(), which is just wrong.
I think this is the root cause of the breakage reported in issue #26012.
|
msg257710 - (view) |
Author: Roundup Robot (python-dev)  |
Date: 2016-01-07 18:58 |
New changeset 4043e08e6e52 by Guido van Rossum in branch '3.4':
Add another try/except PermissionError to avoid depending on listdir order. Fix issues #24120 and #26012.
https://hg.python.org/cpython/rev/4043e08e6e52
New changeset 8a3b0c1fb3d3 by Guido van Rossum in branch '3.5':
Add another try/except PermissionError to avoid depending on listdir order. Fix issues #24120 and #26012. (Merge 3.4->3.5)
https://hg.python.org/cpython/rev/8a3b0c1fb3d3
New changeset 398cb8c183da by Guido van Rossum in branch 'default':
Add another try/except PermissionError to avoid depending on listdir order. Fix issues #24120 and #26012. (Merge 3.5->3.6)
https://hg.python.org/cpython/rev/398cb8c183da
|
msg257713 - (view) |
Author: Guido van Rossum (gvanrossum) *  |
Date: 2016-01-07 19:00 |
Should be fixed for real now.
|
|
Date |
User |
Action |
Args |
2022-04-11 14:58:16 | admin | set | github: 68308 |
2020-10-29 12:06:03 | blueyed | set | nosy:
+ blueyed
pull_requests:
+ pull_request21942 |
2016-01-07 19:00:14 | gvanrossum | set | status: open -> closed
messages:
+ msg257713 |
2016-01-07 18:58:59 | python-dev | set | messages:
+ msg257710 |
2016-01-07 18:43:56 | gvanrossum | set | status: closed -> open
messages:
+ msg257707 |
2016-01-06 18:19:31 | Gregorio | set | messages:
+ msg257627 |
2016-01-06 17:55:03 | gvanrossum | set | status: open -> closed resolution: fixed |
2016-01-06 17:54:12 | python-dev | set | nosy:
+ python-dev messages:
+ msg257623
|
2016-01-06 17:42:33 | gvanrossum | set | assignee: gvanrossum messages:
+ msg257618 |
2016-01-05 01:56:22 | gvanrossum | set | nosy:
+ gvanrossum messages:
+ msg257510
|
2015-07-21 07:07:21 | ethan.furman | set | nosy:
- ethan.furman
|
2015-07-02 18:11:55 | serhiy.storchaka | set | messages:
+ msg246092 |
2015-07-02 15:49:14 | pitrou | set | messages:
+ msg246085 |
2015-07-02 13:57:59 | ulope | set | files:
+ issue24120_2.diff
messages:
+ msg246077 |
2015-06-27 17:29:50 | pitrou | set | nosy:
+ zach.ware messages:
+ msg245884
|
2015-06-27 17:26:57 | pitrou | set | stage: patch review versions:
+ Python 3.5, Python 3.6 |
2015-06-08 19:13:27 | ethan.furman | set | messages:
+ msg245034 |
2015-06-08 18:47:33 | serhiy.storchaka | set | messages:
+ msg245032 |
2015-06-06 12:01:58 | serhiy.storchaka | set | nosy:
+ serhiy.storchaka messages:
+ msg244899
|
2015-06-05 20:19:39 | ulope | set | files:
+ issue24120.diff
nosy:
+ ulope messages:
+ msg244876
keywords:
+ patch |
2015-05-07 19:13:32 | ethan.furman | set | messages:
+ msg242727 |
2015-05-07 19:10:59 | ethan.furman | set | nosy:
+ ethan.furman
|
2015-05-05 20:39:07 | ned.deily | set | nosy:
+ pitrou
|
2015-05-03 17:52:28 | Gregorio | create | |