python / python/cpython

Enable for ZipFile to specify to create archives of arbitrary windows FAT or Unix filesystem

Open
#133,667 2 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

stdlib type-feature
Dominant language
Python
Stars
77.2k
Forks
35.9k
PR merge metrics
PR metrics pending

Description

Feature or enhancement

Proposal:

Hi, as dev working with app designed for both Windows, Mac and Linux systems, I had recently automating with ZipFile task of repacking some internal ZIP archives. To automate the task even more, I created formulas for each of systems to be available on single script, on single call (and so on one machine) to create packages easier.

Unfortunately generated tasks were faulty,
I noticed, that same script performed on Linux or Windows created archives of different types - FAT or UNX, therefore output files were seen as invalid on opposite system.

To make the picture, my flow was:
start on particular OS (either Windows or Linux) ==> download archive from web (fixed format, UNX or FAT) ==> unpacking archive ==> creating new archive from files from previous ==> resulting archive has format from OS, overriding input archive (while I need the exact opposite)

Could I ask You to add possibility from code to enforce archiving files by chosen system , for instance like a compression method (like I chose LZMA), like I suggest below ? Or maybe if it is dependent on the format of the not yet archived input , could a similar flag enforce unpacking file in chosen filesystem , not being dependent on the used machine and OS?
I also provide some output from zipinfo console utility.

I attach some links that hopefully might present the issue,
https://en.wikipedia.org/wiki/FAT_filesystem_and_Linux
https://forensics.wiki/zip/#external-file-attributes

Best regards and have a good day, also feel free to contact me for more info, Wiktor

class zipfile.ZipFile(file, filesystem='FAT/UNX', ...
ZipFile.write(filename, filesystem='FAT/UNX', ...

class zipfile.ZipFile(file, filesystem='FAT/UNX', ... 
ZipFile.write(filename, filesystem='FAT/UNX', ...

packed on Windows

zipinfo ~/Downloads/win7.1.5_sandbox.zip
Archive: win7.1.5_sandbox.zip
Zip file size: 47379022 bytes, number of entries: 92
drwx--- 6.3 fat 0 bx stor 25-Mar-12 11:41 Debug/
....
-rwx--- 6.3 fat 20554528 bx lzma 25-Mar-11 16:17 someWinApp.exe
....
-rwx--- 6.3 fat 422168 bx lzma 25-Mar-11 16:18 someWinApp2.exe
92 files, 205285623 bytes uncompressed, 47362726 bytes compressed: 76.9%

packed on Mac

zipinfo ~/Downloads/mac7.1.4_sandbox.zip
Archive: mac7.1.4_sandbox.zip
Zip file size: 93026056 bytes, number of entries: 160
drwxr-xr-x 6.3 unx 0 bx stor 25-Feb-14 01:00 .package/
drwxr-xr-x 6.3 unx 0 bx stor 25-Feb-14 00:59 RuntimeRoots/
-rwxr-xr-x 6.3 unx 25375808 bx lzma 25-Feb-14 01:00 someApp
...
-rwxr-xr-x 6.3 unx 11167424 bx lzma 25-Feb-14 01:00 someApp2
....
-rwxr-xr-x 6.3 unx 2053072 bx someApp3
-rw-r--r-- 6.3 unx 4315 bx lzma 25-Feb-10 09:30 headerfile.h
160 files, 409689641 bytes uncompressed, 92994544 bytes compressed: 77.3%

Has this already been discussed elsewhere?

No response given

Links to previous discussion of this feature:

No response

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start with the zipfile.ZipFile and ZipFile.write entry points named in the proposal, then trace how filesystem metadata is assigned when archives are created on Windows, Mac, and Linux. Done means the API can enforce the requested FAT or Unix archive metadata independently of the host OS, with behavior covered by relevant tests.

Written by the indexing model from the issue text.

Assessment

Tech stack
python
Domain
operating-systems, tooling
Issue type
Feature
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.