Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package python-minio for openSUSE:Factory checked in at 2025-08-15 21:52:33 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-minio (Old) and /work/SRC/openSUSE:Factory/.python-minio.new.1085 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-minio" Fri Aug 15 21:52:33 2025 rev:24 rq:1299768 version:7.2.16 Changes: -------- --- /work/SRC/openSUSE:Factory/python-minio/python-minio.changes 2025-01-31 17:18:59.568536396 +0100 +++ /work/SRC/openSUSE:Factory/.python-minio.new.1085/python-minio.changes 2025-08-15 21:54:02.881078810 +0200 @@ -1,0 +2,11 @@ +Fri Aug 15 07:27:48 UTC 2025 - John Paul Adrian Glaubitz <adrian.glaub...@suse.com> + +- Update to 7.2.16 + * Add account_info Admin API by @mhkarimi1383 in #1463 + * fix mypy error by @balamurugana in #1483 + * put_object: add append object support by @balamurugana in #1493 + * Add append_object() API by @balamurugana in #1494 + * fix: type wrong in commonconfig by @hlf20010508 in #1489 + * fix pip install for ubuntu 24.04 by @balamurugana in #1502 + +------------------------------------------------------------------- Old: ---- minio-7.2.15.tar.gz New: ---- minio-7.2.16.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-minio.spec ++++++ --- /var/tmp/diff_new_pack.lLuYuL/_old 2025-08-15 21:54:03.357098604 +0200 +++ /var/tmp/diff_new_pack.lLuYuL/_new 2025-08-15 21:54:03.361098771 +0200 @@ -18,7 +18,7 @@ %{?sle15_python_module_pythons} Name: python-minio -Version: 7.2.15 +Version: 7.2.16 Release: 0 Summary: Minio library for Amazon S3 compatible cloud storage License: Apache-2.0 ++++++ minio-7.2.15.tar.gz -> minio-7.2.16.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/minio-7.2.15/PKG-INFO new/minio-7.2.16/PKG-INFO --- old/minio-7.2.15/PKG-INFO 2025-01-19 09:57:22.795931800 +0100 +++ new/minio-7.2.16/PKG-INFO 2025-07-21 22:11:12.682272400 +0200 @@ -1,6 +1,6 @@ -Metadata-Version: 2.2 +Metadata-Version: 2.1 Name: minio -Version: 7.2.15 +Version: 7.2.16 Summary: MinIO Python SDK for Amazon S3 Compatible Cloud Storage Home-page: https://github.com/minio/minio-py Download-URL: https://github.com/minio/minio-py/releases @@ -23,22 +23,6 @@ Description-Content-Type: text/markdown License-File: LICENSE License-File: NOTICE -Requires-Dist: certifi -Requires-Dist: urllib3 -Requires-Dist: argon2-cffi -Requires-Dist: pycryptodome -Requires-Dist: typing-extensions -Dynamic: author -Dynamic: author-email -Dynamic: classifier -Dynamic: description -Dynamic: description-content-type -Dynamic: download-url -Dynamic: home-page -Dynamic: license -Dynamic: requires-dist -Dynamic: requires-python -Dynamic: summary # MinIO Python Client SDK for Amazon S3 Compatible Cloud Storage [](https://slack.min.io) [](https://github.com/minio/minio-py/blob/master/LICENSE) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/minio-7.2.15/docs/API.md new/minio-7.2.16/docs/API.md --- old/minio-7.2.15/docs/API.md 2025-01-19 09:56:46.000000000 +0100 +++ new/minio-7.2.16/docs/API.md 2025-07-21 22:09:42.000000000 +0200 @@ -63,30 +63,30 @@ | Bucket operations | Object operations | |:------------------------------------------------------------|:----------------------------------------------------------------| -| [`make_bucket`](#make_bucket) | [`get_object`](#get_object) | -| [`list_buckets`](#list_buckets) | [`put_object`](#put_object) | -| [`bucket_exists`](#bucket_exists) | [`copy_object`](#copy_object) | -| [`remove_bucket`](#remove_bucket) | [`compose_object`](#compose_object) | -| [`list_objects`](#list_objects) | [`stat_object`](#stat_object) | -| [`get_bucket_versioning`](#get_bucket_versioning) | [`remove_object`](#remove_object) | -| [`set_bucket_versioning`](#set_bucket_versioning) | [`remove_objects`](#remove_objects) | -| [`delete_bucket_replication`](#delete_bucket_replication) | [`fput_object`](#fput_object) | -| [`get_bucket_replication`](#get_bucket_replication) | [`fget_object`](#fget_object) | -| [`set_bucket_replication`](#set_bucket_replication) | [`select_object_content`](#select_object_content) | -| [`delete_bucket_lifecycle`](#delete_bucket_lifecycle) | [`delete_object_tags`](#delete_object_tags) | -| [`get_bucket_lifecycle`](#get_bucket_lifecycle) | [`get_object_tags`](#get_object_tags) | -| [`set_bucket_lifecycle`](#set_bucket_lifecycle) | [`set_object_tags`](#set_object_tags) | -| [`delete_bucket_tags`](#delete_bucket_tags) | [`enable_object_legal_hold`](#enable_object_legal_hold) | -| [`get_bucket_tags`](#get_bucket_tags) | [`disable_object_legal_hold`](#disable_object_legal_hold) | -| [`set_bucket_tags`](#set_bucket_tags) | [`is_object_legal_hold_enabled`](#is_object_legal_hold_enabled) | -| [`delete_bucket_policy`](#delete_bucket_policy) | [`get_object_retention`](#get_object_retention) | -| [`get_bucket_policy`](#get_bucket_policy) | [`set_object_retention`](#set_object_retention) | -| [`set_bucket_policy`](#set_bucket_policy) | [`presigned_get_object`](#presigned_get_object) | -| [`delete_bucket_notification`](#delete_bucket_notification) | [`presigned_put_object`](#presigned_put_object) | -| [`get_bucket_notification`](#get_bucket_notification) | [`presigned_post_policy`](#presigned_post_policy) | -| [`set_bucket_notification`](#set_bucket_notification) | [`get_presigned_url`](#get_presigned_url) | -| [`listen_bucket_notification`](#listen_bucket_notification) | [`upload_snowball_objects`](#upload_snowball_objects) | -| [`delete_bucket_encryption`](#delete_bucket_encryption) | | +| [`make_bucket`](#make_bucket) | [`append_object`](#append_object) | +| [`list_buckets`](#list_buckets) | [`get_object`](#get_object) | +| [`bucket_exists`](#bucket_exists) | [`put_object`](#put_object) | +| [`remove_bucket`](#remove_bucket) | [`copy_object`](#copy_object) | +| [`list_objects`](#list_objects) | [`compose_object`](#compose_object) | +| [`get_bucket_versioning`](#get_bucket_versioning) | [`stat_object`](#stat_object) | +| [`set_bucket_versioning`](#set_bucket_versioning) | [`remove_object`](#remove_object) | +| [`delete_bucket_replication`](#delete_bucket_replication) | [`remove_objects`](#remove_objects) | +| [`get_bucket_replication`](#get_bucket_replication) | [`fput_object`](#fput_object) | +| [`set_bucket_replication`](#set_bucket_replication) | [`fget_object`](#fget_object) | +| [`delete_bucket_lifecycle`](#delete_bucket_lifecycle) | [`select_object_content`](#select_object_content) | +| [`get_bucket_lifecycle`](#get_bucket_lifecycle) | [`delete_object_tags`](#delete_object_tags) | +| [`set_bucket_lifecycle`](#set_bucket_lifecycle) | [`get_object_tags`](#get_object_tags) | +| [`delete_bucket_tags`](#delete_bucket_tags) | [`set_object_tags`](#set_object_tags) | +| [`get_bucket_tags`](#get_bucket_tags) | [`enable_object_legal_hold`](#enable_object_legal_hold) | +| [`set_bucket_tags`](#set_bucket_tags) | [`disable_object_legal_hold`](#disable_object_legal_hold) | +| [`delete_bucket_policy`](#delete_bucket_policy) | [`is_object_legal_hold_enabled`](#is_object_legal_hold_enabled) | +| [`get_bucket_policy`](#get_bucket_policy) | [`get_object_retention`](#get_object_retention) | +| [`set_bucket_policy`](#set_bucket_policy) | [`set_object_retention`](#set_object_retention) | +| [`delete_bucket_notification`](#delete_bucket_notification) | [`presigned_get_object`](#presigned_get_object) | +| [`get_bucket_notification`](#get_bucket_notification) | [`presigned_put_object`](#presigned_put_object) | +| [`set_bucket_notification`](#set_bucket_notification) | [`presigned_post_policy`](#presigned_post_policy) | +| [`listen_bucket_notification`](#listen_bucket_notification) | [`get_presigned_url`](#get_presigned_url) | +| [`delete_bucket_encryption`](#delete_bucket_encryption) | [`upload_snowball_objects`](#upload_snowball_objects) | | [`get_bucket_encryption`](#get_bucket_encryption) | | | [`set_bucket_encryption`](#set_bucket_encryption) | | | [`delete_object_lock_config`](#delete_object_lock_config) | | @@ -836,6 +836,57 @@ ## 3. Object operations +<a name="append_object"></a> + +### append_object(bucket_name, object_name, data, length, content_type="application/octet-stream", metadata=None, sse=None, progress=None, part_size=0, num_parallel_uploads=3, tags=None, retention=None, legal_hold=False) + +Appends from a stream to existing object in a bucket. + +__Parameters__ + +| Param | Type | Description | +|:----------------|:------------|:---------------------------------------------------------| +| `bucket_name` | _str_ | Name of the bucket. | +| `object_name` | _str_ | Object name in the bucket. | +| `data` | _object_ | An object having callable read() returning bytes object. | +| `length` | _int_ | Data size; -1 for unknown size and set valid part_size. | +| `part_size` | _int_ | Chunk size. | +| `progress` | _threading_ | A progress object. | +| `extra_headers` | _dict_ | Extra headers. | + +__Return Value__ + +| Return | +|:----------------------------| +| _ObjectWriteResult_ object. | + +__Example__ +```py +# Append data. +result = client.append_object( + "my-bucket", "my-object", io.BytesIO(b"world"), 5, +) +print(f"appended {result.object_name} object; etag: {result.etag}") + +# Append data in chunks. +data = urlopen( + "https://www.kernel.org/pub/linux/kernel/v6.x/linux-6.13.12.tar.xz", +) +result = client.append_object( + "my-bucket", "my-object", data, 148611164, 5*1024*1024, +) +print(f"appended {result.object_name} object; etag: {result.etag}") + +# Append unknown sized data. +data = urlopen( + "https://www.kernel.org/pub/linux/kernel/v6.x/linux-6.14.3.tar.xz", +) +result = client.append_object( + "my-bucket", "my-object", data, 149426584, 5*1024*1024, +) +print(f"appended {result.object_name} object; etag: {result.etag}") +``` + <a name="get_object"></a> ### get_object(bucket_name, object_name, offset=0, length=0, request_headers=None, ssec=None, version_id=None, extra_query_params=None) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/minio-7.2.15/examples/append_object.py new/minio-7.2.16/examples/append_object.py --- old/minio-7.2.15/examples/append_object.py 1970-01-01 01:00:00.000000000 +0100 +++ new/minio-7.2.16/examples/append_object.py 2025-07-21 22:09:42.000000000 +0200 @@ -0,0 +1,57 @@ +# -*- coding: utf-8 -*- +# MinIO Python Library for Amazon S3 Compatible Cloud Storage, +# (C) 2025 MinIO, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import io +from urllib.request import urlopen + +from examples.progress import Progress +from minio import Minio + +client = Minio( + "play.min.io", + access_key="Q3AM3UQ867SPQQA43P2F", + secret_key="zuf+tfteSlswRu7BJ86wekitnifILbZam1KYY3TG", +) + +# Upload data. +result = client.put_object( + "my-bucket", "my-object", io.BytesIO(b"hello, "), 7, +) +print(f"created {result.object_name} object; etag: {result.etag}") + +# Append data. +result = client.append_object( + "my-bucket", "my-object", io.BytesIO(b"world"), 5, +) +print(f"appended {result.object_name} object; etag: {result.etag}") + +# Append data in chunks. +data = urlopen( + "https://www.kernel.org/pub/linux/kernel/v6.x/linux-6.13.12.tar.xz", +) +result = client.append_object( + "my-bucket", "my-object", data, 148611164, 5*1024*1024, +) +print(f"appended {result.object_name} object; etag: {result.etag}") + +# Append unknown sized data. +data = urlopen( + "https://www.kernel.org/pub/linux/kernel/v6.x/linux-6.14.3.tar.xz", +) +result = client.append_object( + "my-bucket", "my-object", data, 149426584, 5*1024*1024, +) +print(f"appended {result.object_name} object; etag: {result.etag}") diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/minio-7.2.15/minio/__init__.py new/minio-7.2.16/minio/__init__.py --- old/minio-7.2.15/minio/__init__.py 2025-01-19 09:56:46.000000000 +0100 +++ new/minio-7.2.16/minio/__init__.py 2025-07-21 22:09:42.000000000 +0200 @@ -33,7 +33,7 @@ __title__ = "minio-py" __author__ = "MinIO, Inc." -__version__ = "7.2.15" +__version__ = "7.2.16" __license__ = "Apache 2.0" __copyright__ = "Copyright 2015, 2016, 2017, 2018, 2019, 2020 MinIO, Inc." diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/minio-7.2.15/minio/api.py new/minio-7.2.16/minio/api.py --- old/minio-7.2.15/minio/api.py 2025-01-19 09:56:46.000000000 +0100 +++ new/minio-7.2.16/minio/api.py 2025-07-21 22:09:42.000000000 +0200 @@ -20,6 +20,8 @@ # pylint: disable=too-many-lines # pylint: disable=too-many-public-methods # pylint: disable=too-many-statements +# pylint: disable=too-many-locals +# pylint: disable=too-many-positional-arguments """ Simple Storage Service (aka S3) client to perform bucket and object operations. @@ -1835,7 +1837,8 @@ num_parallel_uploads: int = 3, tags: Tags | None = None, retention: Retention | None = None, - legal_hold: bool = False + legal_hold: bool = False, + write_offset: int | None = None, ) -> ObjectWriteResult: """ Uploads data from a stream to an object in a bucket. @@ -1854,6 +1857,7 @@ :param tags: :class:`Tags` for the object. :param retention: :class:`Retention` configuration object. :param legal_hold: Flag to set legal hold for the object. + :param write_offset: Offset byte for appending data to existing object. :return: :class:`ObjectWriteResult` object. Example:: @@ -1890,6 +1894,12 @@ raise ValueError("retention must be Retention type") if not callable(getattr(data, "read")): raise ValueError("input data must have callable read()") + if write_offset is not None: + if write_offset < 0: + raise ValueError("write offset should not be negative") + if length < 0: + raise ValueError("length must be provided for write offset") + part_size = length if length > MIN_PART_SIZE else MIN_PART_SIZE part_size, part_count = get_part_info(length, part_size) if progress: # Set progress bar length and object name before upload @@ -1897,6 +1907,8 @@ headers = genheaders(metadata, sse, tags, retention, legal_hold) headers["Content-Type"] = content_type or "application/octet-stream" + if write_offset: + headers["x-amz-write-offset-bytes"] = str(write_offset) object_size = length uploaded_size = 0 @@ -1995,6 +2007,124 @@ ) raise exc + def append_object( + self, + bucket_name: str, + object_name: str, + data: BinaryIO, + length: int, + chunk_size: int | None = None, + progress: ProgressType | None = None, + extra_headers: DictType | None = None, + ) -> ObjectWriteResult: + """ + Appends from a stream to existing object in a bucket. + + :param bucket_name: Name of the bucket. + :param object_name: Object name in the bucket. + :param data: An object having callable read() returning bytes object. + :param length: Data size; -1 for unknown size. + :param chunk_size: Chunk size to optimize uploads. + :return: :class:`ObjectWriteResult` object. + + Example:: + # Append data. + result = client.append_object( + "my-bucket", "my-object", io.BytesIO(b"world"), 5, + ) + print(f"appended {result.object_name} object; etag: {result.etag}") + + # Append data in chunks. + data = urlopen( + "https://www.kernel.org/pub/linux/kernel/v6.x/" + "linux-6.13.12.tar.xz", + ) + result = client.append_object( + "my-bucket", "my-object", data, 148611164, 5*1024*1024, + ) + print(f"appended {result.object_name} object; etag: {result.etag}") + + # Append unknown sized data. + data = urlopen( + "https://www.kernel.org/pub/linux/kernel/v6.x/" + "linux-6.14.3.tar.xz", + ) + result = client.append_object( + "my-bucket", "my-object", data, 149426584, 5*1024*1024, + ) + print(f"appended {result.object_name} object; etag: {result.etag}") + """ + if length == 0: + raise ValueError("length should not be zero") + if chunk_size is not None: + if chunk_size < MIN_PART_SIZE: + raise ValueError("chunk size must be minimum of 5 MiB") + if chunk_size > MAX_PART_SIZE: + raise ValueError("chunk size must be less than 5 GiB") + else: + chunk_size = length if length > MIN_PART_SIZE else MIN_PART_SIZE + + chunk_count = -1 + if length > 0: + chunk_count = int(length / chunk_size) + if (chunk_count * chunk_size) < length: + chunk_count += 1 + chunk_count = chunk_count or 1 + + object_size = length + uploaded_size = 0 + chunk_number = 0 + one_byte = b"" + stop = False + + stat = self.stat_object(bucket_name, object_name) + write_offset = cast(int, stat.size) + + while not stop: + chunk_number += 1 + if chunk_count > 0: + if chunk_number == chunk_count: + chunk_size = object_size - uploaded_size + stop = True + chunk_data = read_part_data( + data, chunk_size, progress=progress, + ) + if len(chunk_data) != chunk_size: + raise IOError( + f"stream having not enough data;" + f"expected: {chunk_size}, " + f"got: {len(chunk_data)} bytes" + ) + else: + chunk_data = read_part_data( + data, chunk_size + 1, one_byte, progress=progress, + ) + # If chunk_data_size is less or equal to chunk_size, + # then we have reached last chunk. + if len(chunk_data) <= chunk_size: + chunk_count = chunk_number + stop = True + else: + one_byte = chunk_data[-1:] + chunk_data = chunk_data[:-1] + + uploaded_size += len(chunk_data) + + headers = extra_headers or {} + headers["x-amz-write-offset-bytes"] = str(write_offset) + upload_result = self._put_object( + bucket_name, object_name, chunk_data, headers=headers, + ) + write_offset += len(chunk_data) + return ObjectWriteResult( + cast(str, upload_result.bucket_name), + cast(str, upload_result.object_name), + upload_result.version_id, + upload_result.etag, + upload_result.http_headers, + location=upload_result.location, + ) + def list_objects( self, bucket_name: str, @@ -3080,9 +3210,10 @@ metadata["X-Amz-Meta-Snowball-Auto-Extract"] = "true" name = staging_filename - mode = "w:gz" if compression else "w" fileobj = None if name else BytesIO() - with tarfile.open(name=name, mode=mode, fileobj=fileobj) as tar: + with tarfile.open( + name=name, mode="w:gz" if compression else "w", fileobj=fileobj, + ) as tar: for obj in object_list: if obj.filename: tar.add(obj.filename, obj.object_name) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/minio-7.2.15/minio/commonconfig.py new/minio-7.2.16/minio/commonconfig.py --- old/minio-7.2.15/minio/commonconfig.py 2025-01-19 09:56:46.000000000 +0100 +++ new/minio-7.2.16/minio/commonconfig.py 2025-07-21 22:09:42.000000000 +0200 @@ -313,8 +313,8 @@ length: int | None = None, match_etag: str | None = None, not_match_etag: str | None = None, - modified_since: str | None = None, - unmodified_since: str | None = None, + modified_since: datetime | None = None, + unmodified_since: datetime | None = None, ): if ssec is not None and not isinstance(ssec, SseCustomerKey): raise ValueError("ssec must be SseCustomerKey type") @@ -395,12 +395,12 @@ return self._not_match_etag @property - def modified_since(self) -> str | None: + def modified_since(self) -> datetime | None: """Get modified since condition.""" return self._modified_since @property - def unmodified_since(self) -> str | None: + def unmodified_since(self) -> datetime | None: """Get unmodified since condition.""" return self._unmodified_since @@ -460,8 +460,8 @@ length: int | None = None, match_etag: str | None = None, not_match_etag: str | None = None, - modified_since: str | None = None, - unmodified_since: str | None = None, + modified_since: datetime | None = None, + unmodified_since: datetime | None = None, ): super().__init__( bucket_name, object_name, region, version_id, ssec, offset, length, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/minio-7.2.15/minio/minioadmin.py new/minio-7.2.16/minio/minioadmin.py --- old/minio-7.2.15/minio/minioadmin.py 2025-01-19 09:56:46.000000000 +0100 +++ new/minio-7.2.16/minio/minioadmin.py 2025-07-21 22:09:42.000000000 +0200 @@ -53,6 +53,7 @@ @unique class _COMMAND(Enum): """Admin Command enumerations.""" + ACCOUNT_INFO = "accountinfo" ADD_USER = "add-user" USER_INFO = "user-info" LIST_USERS = "list-users" @@ -322,6 +323,15 @@ ) return response.data.decode() + def account_info(self, prefix_usage: bool = False) -> str: + """Get usage information for the authenticating account""" + response = self._url_open( + "GET", + _COMMAND.ACCOUNT_INFO, + query_params={"prefix-usage": "true"} if prefix_usage else None, + ) + return response.data.decode() + def user_add(self, access_key: str, secret_key: str) -> str: """Create user with access and secret keys""" body = json.dumps( diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/minio-7.2.15/minio.egg-info/PKG-INFO new/minio-7.2.16/minio.egg-info/PKG-INFO --- old/minio-7.2.15/minio.egg-info/PKG-INFO 2025-01-19 09:57:22.000000000 +0100 +++ new/minio-7.2.16/minio.egg-info/PKG-INFO 2025-07-21 22:11:11.000000000 +0200 @@ -1,6 +1,6 @@ -Metadata-Version: 2.2 +Metadata-Version: 2.1 Name: minio -Version: 7.2.15 +Version: 7.2.16 Summary: MinIO Python SDK for Amazon S3 Compatible Cloud Storage Home-page: https://github.com/minio/minio-py Download-URL: https://github.com/minio/minio-py/releases @@ -23,22 +23,6 @@ Description-Content-Type: text/markdown License-File: LICENSE License-File: NOTICE -Requires-Dist: certifi -Requires-Dist: urllib3 -Requires-Dist: argon2-cffi -Requires-Dist: pycryptodome -Requires-Dist: typing-extensions -Dynamic: author -Dynamic: author-email -Dynamic: classifier -Dynamic: description -Dynamic: description-content-type -Dynamic: download-url -Dynamic: home-page -Dynamic: license -Dynamic: requires-dist -Dynamic: requires-python -Dynamic: summary # MinIO Python Client SDK for Amazon S3 Compatible Cloud Storage [](https://slack.min.io) [](https://github.com/minio/minio-py/blob/master/LICENSE) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/minio-7.2.15/minio.egg-info/SOURCES.txt new/minio-7.2.16/minio.egg-info/SOURCES.txt --- old/minio-7.2.15/minio.egg-info/SOURCES.txt 2025-01-19 09:57:22.000000000 +0100 +++ new/minio-7.2.16/minio.egg-info/SOURCES.txt 2025-07-21 22:11:12.000000000 +0200 @@ -7,6 +7,7 @@ docs/API.md docs/zh_CN/API.md docs/zh_CN/CONTRIBUTING.md +examples/append_object.py examples/bucket_exists.py examples/compose_object.py examples/copy_object.py @@ -84,7 +85,6 @@ minio/minioadmin.py minio/notificationconfig.py minio/objectlockconfig.py -minio/py.typed minio/replicationconfig.py minio/retention.py minio/select.py diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/minio-7.2.15/minio.egg-info/requires.txt new/minio-7.2.16/minio.egg-info/requires.txt --- old/minio-7.2.15/minio.egg-info/requires.txt 2025-01-19 09:57:22.000000000 +0100 +++ new/minio-7.2.16/minio.egg-info/requires.txt 2025-07-21 22:11:11.000000000 +0200 @@ -1,5 +1,5 @@ -certifi -urllib3 argon2-cffi +certifi pycryptodome typing-extensions +urllib3