Mark Grandi added the comment:
> I don't have an idea how to make it easier and still meet all/most
> requirements and without cluttering up the api.
That is what i mentioned in my original post, a lot of the time users just
_don't care_ about a lot of the stuff that a tar archive can store (permission
bits, uid/gid, etc).
Say i'm on my mac. I can select a bunch of files and then right click ->
compress. Pretending that it saves the resulting archive as a .tar.gz rather
then a .zip, that's really it. The user doesn't care about the permission bits,
uid/gid or any of that, they just want a compressed archive.
While the api does do a good job of exposing the low level parts of the api
with TarInfo, being able to set all the stuff manually or have it figured out
through gettarinfo() calling os.stat()
My original reasoning for this bug report is that its way too hard to do it for
in-memory files, as those don't have file descriptors so os.stat() fails. But
why can't we just make it so:
gettarinfo() is called
* if it's a regular file, it continues as it does not
* if it is NOT a regular file (no file descriptor), then it returns a
TarInfo object with the 'name' and 'size' set, and the rest of the fields set
to default values (the current user's uid and gid, acceptable permission bits
and the correct type for a regular file (REGFILE?)
* if gettarinfo() is called with a non regular file and it's name has a
slash, then its assumed to be a folder structure, so then it will add the
correct TarInfo with type = DIRTYPE and then insert the file underneath that
folder, sorta how zipfile works. I looked at the tarfile.py code and it seems
it does this already.
This just adds the needed "easy use case" for the tarfile module, as the
complicated low level api is there, we just need something that users just want
to create an archive without worrying too much about the low level stuff. So
then they can just:
import tarfile, io
fileToAdd = io.BytesIO("hello world!".encode("utf-8"))
with tarfile.open("sample.tar", mode="w") as tar:
# this TarInfo object has:
# name = 'somefile.txt'
# type = REGTYPE (or whatever is 'just a regular file')
# uid = 501, gid = 20, gname=staff, uname=markgrandi, mode=644
tmpTarInfo = tar.gettarinfo("somefile.txt", fileToAdd)
tar.addfile()
So basically its just having defaults for the TarInfo object when gettarinfo()
is given a file that doesn't have a file descriptor.
----------
_______________________________________
Python tracker <[email protected]>
<http://bugs.python.org/issue22208>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe:
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com