[Python-ideas] Move tarfile.filemode() into stat module

Giampaolo Rodolà g.rodola at gmail.com
Sun May 13 23:04:38 CEST 2012


2012/5/12 Terry Reedy <tjreedy at udel.edu>:
> On 5/12/2012 10:41 AM, Antoine Pitrou wrote:
>>
>> On Sat, 12 May 2012 16:29:35 +0200
>> Giampaolo Rodolà<g.rodola at gmail.com>
>> wrote:
>>>
>>> http://hg.python.org/cpython/file/9d9495fabeb9/Lib/tarfile.py#l304
>>> I discovered this undocumented function by accident different years
>>> ago and reused it a couple of times since then.
>>> I think that leaving it hidden inside tarfile module is unfortunate.
>>> What about moving it into stat module and document it?
>>
>>
>> I don't know which of stat or shutil would be the better recipient, but
>> it's a good idea anyway.
>
>
> I think I would more likely look in stat, and as noted below, the constants
> used for the table used in the function are already in stat.py.
>
> I checked, and
>
> # Bits used in the mode field, values in octal.
> #---------------------------------------------------------
> S_IFLNK = 0o120000        # symbolic link
> ...
>
> are only used in
>
> filemode_table = (
>    ((S_IFLNK,      "l"),
>    ...
>
> which is only used in
>
> def filemode(mode): ...
>
> So all three can be cleanly extracted into another module.
>
> However 1) the bit definitions themselves should just be deleted as they
> *duplicate* those in stat.py. The S_Ixxx names are the same, the other names
> are variations of the other stat.S_Ixxxx names. So filemode_table (with '_'
> added?) could/should be re-written in stat.py to use the public, documented
> constants already defined there.
>
> However 2) stat.py lacks the nice comments explaining the constants in the
> file itself, so I *would* copy the comments to the appropriate lines.
>
>
> There only seems to be one use of the function in tarfile.py:
> Line 1998:                 print(filemode(tarinfo.mode), end=' ')
>
> All the other uses of 'filemode' are as a local name inside the open method,
> derived from its mode parameter:
>            filemode, comptype = mode.split(":", 1)
>
> +1 on moving the table (probably with private name, and using the existing,
> documented stat S_Ixxxx constants) and function (public) to stat.py.
>
> --
> Terry Jan Reedy

Agreed then. I'm going to submit a patch soon.


--- Giampaolo

http://code.google.com/p/pyftpdlib/
http://code.google.com/p/psutil/
http://code.google.com/p/pysendfile/



More information about the Python-ideas mailing list