Message153831
I have a working updated shutil module, tests pass and the documentation is improved. I will make sure to make different commits for improving the tests, cleaning up some things, adding tarfile.compression_formats and removing duplication in shutil (see dep bugs), to be sure not to introduce regressions.
Before I finish and post the patch, I’d like feedback on a choice I made. I don’t think it’s possible to have shutil automatically support all the formats that tarfile does, because of the spelling issue I mentioned. Here’s what the code would look like (let me know if I should post it elsewhere or as a file to let you get syntax coloring):
_ARCHIVE_FORMATS = {}
_UNPACK_FORMATS = {}
for fmt in tarfile.compression_formats:
code = fmt + 'tar'
ext = '.' + fmt
desc = "%s'ed tar file" % fmt
_ARCHIVE_FORMATS[code] = (_make_tarball, [('compress', fmt)], desc)
_UNPACK_FORMATS[code] = ([ext], _unpack_tarfile, [], desc)
# kludge to add alternate extension
if 'gztar' in _ARCHIVE_FORMATS:
_UNPACK_FORMATS['gztar'][0].append('.tgz')
# XXX desc should say "gzip'ed tar file", not "gz'ed"
# rectify naming incompatibility
if 'bz2tar' in _ARCHIVE_FORMATS:
# XXX alternative: make 'bztar' alias for 'bz2tar', but would complicate
# manipulating the registries
del _ARCHIVE_FORMATS['bz2tar']
del _UNPACK_FORMATS['bz2tar']
desc = "bzip2'ed tar file"
_ARCHIVE_FORMATS['bztar'] = (_make_tarball, [('compress', 'bz2')], desc)
_UNPACK_FORMATS['bztar'] = (['.bz2'], _unpack_tarfile, [], desc)
# now add uncompressed tar and zip file
I really don’t like that code. Given that tarfile is not extensible at run time, it is not a big deal to have to update shutil whenever we add a compression format to tarfile. Therefore, I backtracked on my “automatic support” idea but kept a lot of cleanup in did in the code. Here’s what the code looks like:
_ARCHIVE_FORMATS = {}
_UNPACK_FORMATS = {}
if 'xz' in tarfile.compression_formats:
desc = "xz'ed tar file"
# XXX '.xz' is not great, '.tar.xz' would be better
_ARCHIVE_FORMATS['xztar'] = (_make_tarball, [('compress', 'xz')], desc)
_UNPACK_FORMATS['xztar'] = (['.xz'], _unpack_tarfile, [], desc)
if 'bz2' in tarfile.compression_formats:
desc = "bzip2'ed tar file"
_ARCHIVE_FORMATS['bztar'] = (_make_tarball, [('compress', 'bz2')], desc)
_UNPACK_FORMATS['bztar'] = (['.bz2'], _unpack_tarfile, [], desc)
if 'gz' in tarfile.compression_formats:
desc = "gzip'ed tar file"
_ARCHIVE_FORMATS['gztar'] = (_make_tarball, [('compress', 'gz')], desc)
_UNPACK_FORMATS['gztar'] = (['.gz', '.tgz'], _unpack_tarfile, [], desc)
So, do you agree that “not automated but not ugly” is better than “automated with ugly klutches”? |
|
Date |
User |
Action |
Args |
2012-02-21 01:24:35 | eric.araujo | set | recipients:
+ eric.araujo, nadeem.vawda, tarek, proyvind |
2012-02-21 01:24:35 | eric.araujo | set | messageid: <1329787475.57.0.420898281926.issue5411@psf.upfronthosting.co.za> |
2012-02-21 01:24:34 | eric.araujo | link | issue5411 messages |
2012-02-21 01:24:32 | eric.araujo | create | |
|