本文整理汇总了Python中zipfile.ZipInfo.external_attr方法的典型用法代码示例。如果您正苦于以下问题:Python ZipInfo.external_attr方法的具体用法?Python ZipInfo.external_attr怎么用?Python ZipInfo.external_attr使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类zipfile.ZipInfo
的用法示例。
在下文中一共展示了ZipInfo.external_attr方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: _add_path
# 需要导入模块: from zipfile import ZipInfo [as 别名]
# 或者: from zipfile.ZipInfo import external_attr [as 别名]
def _add_path(self, path, version, myzip):
mtime = os.path.getmtime(path)
info = ZipInfo("versions/%d/%s"%(version, path), Archive.unixtime_to_utcziptime(mtime))
info.create_system = 3
info.extra += struct.pack('<HHBl', 0x5455, 5, 1, mtime)
# http://unix.stackexchange.com/questions/14705/the-zip-formats-external-file-attribute
# make mode without file type, which may be system-specific
clean_mode = os.stat(path).st_mode & 0007777
if (os.path.islink(path)):
# set zip file type to link
info.external_attr = (Archive.ZIP_EXT_ATTR_LINK | clean_mode) << 16L
myzip.writestr(info, os.readlink(path))
elif (os.path.isdir(path)):
# set zip file type to dir
info.external_attr = (Archive.ZIP_EXT_ATTR_DIR | clean_mode) << 16L
# dos directory flag
info.external_attr |= 0x10
# it seems we should have a trailing slash for dirs
if not(info.filename.endswith('/')): info.filename = "%s/"%(info.filename)
myzip.writestr(info, '')
for name in os.listdir(path):
self._add_path(os.path.join(path, name), version, myzip)
elif (os.path.isfile(path)):
info.external_attr = (Archive.ZIP_EXT_ATTR_FILE | clean_mode) << 16L
myzip.writestr(info, open(path).read())
else:
raise Exception()
示例2: create_zipinfo
# 需要导入模块: from zipfile import ZipInfo [as 别名]
# 或者: from zipfile.ZipInfo import external_attr [as 别名]
def create_zipinfo(filename, mtime=None, dir=False, executable=False, symlink=False,
comment=None):
"""Create a instance of `ZipInfo`.
:param filename: file name of the entry
:param mtime: modified time of the entry
:param dir: if `True`, the entry is a directory
:param executable: if `True`, the entry is a executable file
:param symlink: if `True`, the entry is a symbolic link
:param comment: comment of the entry
"""
from zipfile import ZipInfo, ZIP_DEFLATED, ZIP_STORED
zipinfo = ZipInfo()
# The general purpose bit flag 11 is used to denote
# UTF-8 encoding for path and comment. Only set it for
# non-ascii files for increased portability.
# See http://www.pkware.com/documents/casestudies/APPNOTE.TXT
if any(ord(c) >= 128 for c in filename):
zipinfo.flag_bits |= 0x0800
zipinfo.filename = filename.encode('utf-8')
if mtime is not None:
mtime = to_datetime(mtime, utc)
zipinfo.date_time = mtime.utctimetuple()[:6]
# The "extended-timestamp" extra field is used for the
# modified time of the entry in unix time. It avoids
# extracting wrong modified time if non-GMT timezone.
# See http://www.opensource.apple.com/source/zip/zip-6/unzip/unzip
# /proginfo/extra.fld
zipinfo.extra += struct.pack(
'<hhBl',
0x5455, # extended-timestamp extra block type
1 + 4, # size of this block
1, # modification time is present
to_timestamp(mtime)) # time of last modification
# external_attr is 4 bytes in size. The high order two
# bytes represent UNIX permission and file type bits,
# while the low order two contain MS-DOS FAT file
# attributes, most notably bit 4 marking directories.
if dir:
if not zipinfo.filename.endswith('/'):
zipinfo.filename += '/'
zipinfo.compress_type = ZIP_STORED
zipinfo.external_attr = 040755 << 16L # permissions drwxr-xr-x
zipinfo.external_attr |= 0x10 # MS-DOS directory flag
else:
zipinfo.compress_type = ZIP_DEFLATED
zipinfo.external_attr = 0644 << 16L # permissions -r-wr--r--
if executable:
zipinfo.external_attr |= 0755 << 16L # -rwxr-xr-x
if symlink:
zipinfo.compress_type = ZIP_STORED
zipinfo.external_attr |= 0120000 << 16L # symlink file type
if comment:
zipinfo.comment = comment.encode('utf-8')
return zipinfo
示例3: handle
# 需要导入模块: from zipfile import ZipInfo [as 别名]
# 或者: from zipfile.ZipInfo import external_attr [as 别名]
def handle(self, *args, **options):
options['platform'] = options['platform'].lower() # normalize
if options['platform'] not in ["all", "linux", "macos", "darwin", "windows"]:
raise CommandError("Unrecognized platform: %s; will include ALL files." % options['platform'])
# Step 1: recursively add all static files
kalite_base = os.path.realpath(settings.PROJECT_PATH + "/../")
files_dict = recursively_add_files(dirpath=kalite_base, **options)
# Step 2: Add a local_settings.py file.
# For distributed servers, this is a copy of the local local_settings.py,
# with a few properties (specified as command-line options) overridden
ls_file = create_local_settings_file(location=os.path.realpath(kalite_base+"/kalite/local_settings.py"), server_type=options['server_type'], locale=options['locale'])
files_dict[ls_file] = { "dest_path": "kalite/local_settings.py" }
# Step 3: select output file.
if options['file']=="__default__":
options['file'] = create_default_archive_filename(options)
# Step 4: package into a zip file
with ZipFile(options['file'], "w", ZIP_DEFLATED if options['compress'] else ZIP_STORED) as zfile:
for srcpath,fdict in files_dict.items():
if options['verbosity'] >= 1:
print "Adding to zip: %s" % srcpath
# Add without setting exec perms
if os.path.splitext(fdict["dest_path"])[1] != ".sh":
zfile.write(srcpath, arcname=fdict["dest_path"])
# Add with exec perms
else:
info = ZipInfo(fdict["dest_path"])
info.external_attr = 0755 << 16L # give full access to included file
with open(srcpath, "r") as fh:
zfile.writestr(info, fh.read())
示例4: add
# 需要导入模块: from zipfile import ZipInfo [as 别名]
# 或者: from zipfile.ZipInfo import external_attr [as 别名]
def add(self, member):
if (member.isdir):
return # FIXME Should be able to add empty directories
info = ZipInfo(member.name)
info.date_time = member.mtime
info.external_attr = member.perm << 16L
self.archive.writestr(info, member.data)
示例5: add_file
# 需要导入模块: from zipfile import ZipInfo [as 别名]
# 或者: from zipfile.ZipInfo import external_attr [as 别名]
def add_file(self, zf, path, name):
with open(path, 'rb') as f:
raw = f.read()
self.h.update(raw)
zi = ZipInfo(name)
zi.external_attr = 0o444 << 16
zf.writestr(zi, raw)
示例6: system_specific_zipping
# 需要导入模块: from zipfile import ZipInfo [as 别名]
# 或者: from zipfile.ZipInfo import external_attr [as 别名]
def system_specific_zipping(files_dict, zip_file=None, compression=ZIP_DEFLATED, callback=_default_callback_zip):
"""
Zip up files, adding permissions when appropriate.
"""
if not zip_file:
zip_file = tempfile.mkstemp()[1]
zfile = None
try:
zfile = ZipFile(zip_file, 'w', compression)
for fi, (dest_path, src_path) in enumerate(files_dict.iteritems()):
if callback:
callback(src_path, fi, len(files_dict))
# All platforms besides windows need permissions set.
ext = os.path.splitext(dest_path)[1]
if ext not in not_system_specific_scripts(system="windows"):
zfile.write(src_path, arcname=dest_path)
# Add with exec perms
else:
info = ZipInfo(dest_path)
info.external_attr = 0775 << ((1 - is_osx()) * 16L) # give full access to included file
with open(src_path, "r") as fh:
zfile.writestr(info, fh.read())
zfile.close()
finally:
if zfile:
zfile.close()
示例7: dump
# 需要导入模块: from zipfile import ZipInfo [as 别名]
# 或者: from zipfile.ZipInfo import external_attr [as 别名]
def dump(self, fp):
"""Dump the plugin as package into the filepointer or file."""
from zipfile import ZipFile, ZipInfo
f = ZipFile(fp, 'w')
# write all files into a "pdata/" folder
offset = len(self.path) + 1
for dirpath, dirnames, filenames in walk(self.path):
# don't recurse into hidden dirs
for i in range(len(dirnames)-1, -1, -1):
if dirnames[i].startswith('.'):
del dirnames[i]
for filename in filenames:
if filename.endswith('.pyc') or \
filename.endswith('.pyo'):
continue
f.write(path.join(dirpath, filename),
path.join('pdata', dirpath[offset:], filename))
# add the package information files
for name, data in [('ZINE_PLUGIN', self.name),
('ZINE_PACKAGE', PACKAGE_VERSION)]:
zinfo = ZipInfo(name, localtime(time()))
zinfo.compress_type = f.compression
zinfo.external_attr = (33188 & 0xFFFF) << 16L
f.writestr(zinfo, str(data))
f.close()
示例8: createZipArchive
# 需要导入模块: from zipfile import ZipInfo [as 别名]
# 或者: from zipfile.ZipInfo import external_attr [as 别名]
def createZipArchive(self, source, destination, exclude=None):
"""
Create a zip file at `destination` based on files from `source`.
"""
"""
Create a zip file at `destination` based on files from `source`.
"""
if exclude is None:
exclude = []
source_path = self.fs.join(source)
parent_path = os.path.dirname(source_path)
archivename = self.fs.join(destination)
with closing(ZipFile(archivename, 'w', ZIP_DEFLATED)) as z:
for root, dirs, files in os.walk(source_path):
# Write all files.
for fn in files:
if fn in exclude:
continue
absolute_filename = os.path.join(root, fn)
zip_filename = absolute_filename[len(parent_path):]
# See http://bugs.python.org/issue1734346
# for adding unicode support.
z.write(str(absolute_filename), str(zip_filename))
# For empty folders, we need to create a special ZipInfo
# entry.
# 16 works, but some places suggest using 48.
if not files and not dirs:
foldername = root[len(parent_path):] + '/'
zip_info = ZipInfo(foldername)
zip_info.external_attr = 16
z.writestr(zip_info, "")
示例9: _render_zip
# 需要导入模块: from zipfile import ZipInfo [as 别名]
# 或者: from zipfile.ZipInfo import external_attr [as 别名]
def _render_zip(self, req, filename, repos, data):
"""ZIP archive with all the added and/or modified files."""
new_rev = data['new_rev']
req.send_response(200)
req.send_header('Content-Type', 'application/zip')
req.send_header('Content-Disposition',
content_disposition('inline', filename + '.zip'))
from zipfile import ZipFile, ZipInfo, ZIP_DEFLATED
buf = StringIO()
zipfile = ZipFile(buf, 'w', ZIP_DEFLATED)
for old_node, new_node, kind, change in repos.get_changes(
new_path=data['new_path'], new_rev=data['new_rev'],
old_path=data['old_path'], old_rev=data['old_rev']):
if kind == Node.FILE and change != Changeset.DELETE:
assert new_node
zipinfo = ZipInfo()
zipinfo.filename = new_node.path.strip('/').encode('utf-8')
# Note: unicode filenames are not supported by zipfile.
# UTF-8 is not supported by all Zip tools either,
# but as some do, I think UTF-8 is the best option here.
zipinfo.date_time = new_node.last_modified.utctimetuple()[:6]
zipinfo.external_attr = 0644 << 16L # needed since Python 2.5
zipinfo.compress_type = ZIP_DEFLATED
zipfile.writestr(zipinfo, new_node.get_content().read())
zipfile.close()
zip_str = buf.getvalue()
req.send_header("Content-Length", len(zip_str))
req.end_headers()
req.write(zip_str)
raise RequestDone
示例10: write_blob
# 需要导入模块: from zipfile import ZipInfo [as 别名]
# 或者: from zipfile.ZipInfo import external_attr [as 别名]
def write_blob(self, path, blob, compression=ZIP_DEFLATED, mode=0644):
"""Add something to the zip without adding to manifest"""
zinfo = ZipInfo(path)
zinfo.external_attr = mode << 16L # set permissions
zinfo.compress_type = compression
zinfo.date_time = self.now
self.zipfile.writestr(zinfo, blob)
示例11: add_file
# 需要导入模块: from zipfile import ZipInfo [as 别名]
# 或者: from zipfile.ZipInfo import external_attr [as 别名]
def add_file(file_path, arcname):
if not path.islink(file_path):
archive.write(file_path, arcname, ZIP_DEFLATED)
else:
i = ZipInfo(arcname)
i.create_system = 3
i.external_attr = 0xA1ED0000
archive.writestr(i, readlink(file_path))
示例12: write
# 需要导入模块: from zipfile import ZipInfo [as 别名]
# 或者: from zipfile.ZipInfo import external_attr [as 别名]
def write(self, filename, arcname=None, compress_type=None):
with open(filename, 'rb') as f:
st = os.fstat(f.fileno())
data = f.read()
zinfo = ZipInfo(arcname or filename, date_time=get_zipinfo_datetime(st.st_mtime))
zinfo.external_attr = st.st_mode << 16
zinfo.compress_type = ZIP_DEFLATED
self.writestr(zinfo, data, compress_type)
示例13: enviar_zip
# 需要导入模块: from zipfile import ZipInfo [as 别名]
# 或者: from zipfile.ZipInfo import external_attr [as 别名]
def enviar_zip(self, entregas, nombre, extras = None, ignoreFileNames = []):
buffer = StringIO()
zip = ZipFile(buffer, 'w', zipfile.ZIP_DEFLATED)
for e in entregas:
szip = ZipFile(StringIO(e.archivos), 'r')
for file in szip.namelist():
if file not in ignoreFileNames:
zipinfo = ZipInfo('%s_%u/%s' % (e.entregador.alumno.padron.encode('ascii'), e.instancia.numero, file))
zipinfo.external_attr = 0664 << 16L
zip.writestr(zipinfo, szip.read(file))
szip.close()
if extras is not None:
for exk in extras.keys():
zipinfo = ZipInfo('%s' % exk)
zipinfo.external_attr = 0774 << 16L
zip.writestr(zipinfo, extras[exk])
zip.close()
download = Downloader(cherrypy.response)
return download.download_zip(buffer.getvalue(), nombre)
示例14: zip
# 需要导入模块: from zipfile import ZipInfo [as 别名]
# 或者: from zipfile.ZipInfo import external_attr [as 别名]
def zip(cls):
now = time.localtime(time.time())
zipio = StringIO()
zipfile = ZipFile(zipio, 'w', ZIP_DEFLATED)
for file in cls.files:
zipinfo = ZipInfo(file.filename, date_time=now)
zipinfo.external_attr = 0644 << 16L
zipfile.writestr(zipinfo, file.getvalue())
zipfile.close()
return zipio
示例15: write_file
# 需要导入模块: from zipfile import ZipInfo [as 别名]
# 或者: from zipfile.ZipInfo import external_attr [as 别名]
def write_file(filename, data, mode):
if zip:
info = ZipInfo(filename)
info.external_attr = 0o755 << 16
zip_file.writestr(info, data)
else:
f = open(os.path.join(target, filename), mode)
try:
f.write(data)
finally:
f.close()