artifactory icon indicating copy to clipboard operation
artifactory copied to clipboard

Python 3.6 compatibility; Path.glob()

Open mikewaters opened this issue 7 years ago • 3 comments

Hi,

It appears that globbing behavior in Pathlib has changed/optimized to use scandir in 3.6: https://bugs.python.org/issue26032

  File "/usr/lib/python3.6/pathlib.py", line 1081, in glob
    for p in selector.select_from(self):
  File "/usr/lib/python3.6/pathlib.py", line 489, in select_from
    scandir = parent_path._accessor.scandir
AttributeError: '_ArtifactoryAccessor' object has no attribute 'scandir'

Trivially implementing scandir on _ArtifactoryAccessor results in a second failure, so this may be more than just adding a new method that wraps listdir.

mikewaters avatar Mar 17 '17 12:03 mikewaters

scandir() is supposed to return a list of DirEntry. listdir() returns strings. I was able to hack around it with this, though I have no idea if this is the best way to convert the strings to DirEntry-ish things:

from artifactory import _ArtifactoryAccessor

def scandir(self, pathobj):
	for x in _ArtifactoryAccessor.listdir(self, pathobj):
		yield pathobj.joinpath(x)

_ArtifactoryAccessor.scandir = scandir

Xcelled avatar Jun 16 '18 05:06 Xcelled

Fixed in https://github.com/devopshq/artifactory

https://github.com/devopshq/artifactory/issues/11

allburov avatar Nov 14 '18 02:11 allburov

Perhaps worth noting, in case it is used elsewhere:

the DirEntry objects hold both the filenames as well as the full path - as two separate attributes. This version obviously doesn't provide both, only yielding the full paths, as that is the output of os.listdir().

Nicholas-Autio-Mitchell avatar Feb 22 '19 17:02 Nicholas-Autio-Mitchell