dependency app - JavaScriptDependency.extract fails when tar archive includes an folder
Hi,
if a tar archive includes an folder like 'package':
XXXXX@YYYYYY:~/Downloads$ tar tvf popper.js-1.16.1-lts.tgz | more
drwxr-xr-x 0/0 0 2020-04-06 07:59 package
-rw-r--r-- 0/0 11127 2020-04-06 07:56 package/README.md
drwxr-xr-x 0/0 0 2020-04-06 07:59 package/dist
-rw-r--r-- 0/0 4744 2020-04-06 07:56 package/index.d.ts
-rw-r--r-- 0/0 3114 2020-04-06 07:56 package/index.js.flow
-rw-r--r-- 0/0 1565 2020-04-06 07:59 package/package.json
JavaScriptDependency.extract fails (AttributeError: __enter__) since
TarFile.extractfile(...) returns None. The context manager ( with archive.open_member(filename=str(member)) as member_archive_file_object ) can not use __enter__.
Reproduce: Add popper.js as JavascriptDependency:
JavaScriptDependency(
label=_('Popper js'), module=__name__, name='popper.js',
version_string='=1.16.1'
)
and run: ./manage.py dependencies_install
Quick fix (check if object returned from archive.open_member(filename=str(member)) is not None in method JavaScriptDependency.extract:
for member in archive.members():
member_path = (path_temporary / member).resolve()
if member_path.parent.is_relative_to(path_temporary):
file_reader = archive.open_member(filename=str(member))
if file_reader:
with file_reader as member_archive_file_object:
member_path.parent.mkdir(exist_ok=True, parents=True)
with member_path.open(mode='wb+') as member_storage_file_object:
shutil.copyfileobj(
fsrc=member_archive_file_object,
fdst=member_storage_file_object
)
br Matthias