aptly-api-client icon indicating copy to clipboard operation
aptly-api-client copied to clipboard

Add support for filename, content-type and headers when uploading files

Open jdelic opened this issue 5 months ago • 1 comments

The requests library has support for passing additional information, such as the intended filename on upload, the content-type and additional headers, by passing a tuple with 2, 3 or 4 elements instead of just a file object.

See "POST a Multipart-Encoded File" in the requests documentation for more details: https://requests.readthedocs.io/en/latest/user/quickstart/#post-a-multipart-encoded-file

Extend aptly_api files API to also be able to take similar tuples when uploading files to Aptly.

One useful use case is to pass a proper package filename, in cases where packages are generated simply as <name>.deb by upstream projects (usually via non native Debian build systems) but should more properly be stored as <name>_<epoch>:<version>_<arch>.deb. Renaming files locally is a possibility, but potentially runs into permission issues. Being able to specify the filename to the API solves this in a more elegant way, without having to modify the local filesystem. The package information can be easily derived using debian.debfile.DebFile() to inspect a package file, in specific gencontrol() returns the fields of the control file which can be used to derive the expected filename.

Tested locally by uploading files to aptly using the modified API. Also added a test (even though it mostly relies on mocks.) Confirmed mypy is happy with all the type annotation.

Copied from #129 by @filbranden

jdelic avatar Jul 29 '25 11:07 jdelic

Coverage Status

coverage: 100.0%. remained the same when pulling 2a0f776d4e165be28101d637969003e913179524 on feature/pr129 into 9bbb5b2d3bb0624604543f8f451915a7781a50e5 on master.

coveralls avatar Jul 29 '25 11:07 coveralls