Python Client API Reference

1. Constructor

Minio(endpoint, access_key=None, secret_key=None, session_token=None, secure=True, region=None, http_client=None, credentials=None)

Initializes a new client object.

Parameters

ParamTypeDescription
endpointstrHostname of a S3 service.
access_keystr(Optional) Access key (aka user ID) of your account in S3 service.
secret_keystr(Optional) Secret Key (aka password) of your account in S3 service.
session_tokenstr(Optional) Session token of your account in S3 service.
securebool(Optional) Flag to indicate to use secure (TLS) connection to S3 service or not.
regionstr(Optional) Region name of buckets in S3 service.
http_clienturllib3.poolmanager.PoolManager(Optional) Customized HTTP client.
credentialsminio.credentials.Provider(Optional) Credentials provider of your account in S3 service.
cert_checkbool(Optional) Flag to check on server certificate for HTTPS connection.

NOTE on concurrent usage: Minio object is thread safe when using the Python threading library. Specifically, it is NOT safe to share it between multiple processes, for example when using multiprocessing.Pool. The solution is simply to create a new Minio object in each process, and not share it between processes.

Example

from minio import Minio

# Create client with anonymous access.
client = Minio("play.min.io")

# Create client with access and secret key.
client = Minio("s3.amazonaws.com", "ACCESS-KEY", "SECRET-KEY")

# Create client with access key and secret key with specific region.
client = Minio(
    "play.minio.io:9000",
    access_key="Q3AM3UQ867SPQQA43P2F",
    secret_key="zuf+tfteSlswRu7BJ86wekitnifILbZam1KYY3TG",
    region="my-region",
)

# Create client with custom HTTP client using proxy server.
import urllib3
client = Minio(
    "SERVER:PORT",
    access_key="ACCESS_KEY",
    secret_key="SECRET_KEY",
    secure=True,
    http_client=urllib3.ProxyManager(
        "https://PROXYSERVER:PROXYPORT/",
        timeout=urllib3.Timeout.DEFAULT_TIMEOUT,
        cert_reqs="CERT_REQUIRED",
        retries=urllib3.Retry(
            total=5,
            backoff_factor=0.2,
            status_forcelist=[500, 502, 503, 504],
        ),
    ),
)

2. Bucket operations

make_bucket(bucket_name, location=‘us-east-1’, object_lock=False)

Create a bucket with region and object lock.

Parameters

ParamTypeDescription
bucket_namestrName of the bucket.
locationstrRegion in which the bucket will be created.
object_lockboolFlag to set object-lock feature.

Example

# Create bucket.
client.make_bucket("my-bucket")

# Create bucket on specific region.
client.make_bucket("my-bucket", "us-west-1")

# Create bucket with object-lock feature on specific region.
client.make_bucket("my-bucket", "eu-west-2", object_lock=True)

list_buckets()

List information of all accessible buckets.

Parameters

Return
List of Bucket

Example

buckets = client.list_buckets()
for bucket in buckets:
    print(bucket.name, bucket.creation_date)

bucket_exists(bucket_name)

Check if a bucket exists.

Parameters

ParamTypeDescription
bucket_namestrName of the bucket.

Example

if client.bucket_exists("my-bucket"):
    print("my-bucket exists")
else:
    print("my-bucket does not exist")

remove_bucket(bucket_name)

Remove an empty bucket.

Parameters

ParamTypeDescription
bucket_namestrName of the bucket.

Example

client.remove_bucket("my-bucket")

list_objects(bucket_name, prefix=None, recursive=False, start_after=None, include_user_meta=False, include_version=False, use_api_v1=False, use_url_encoding_type=True, extra_headers=None, extra_query_params=None)

Lists object information of a bucket.

Parameters

ParamTypeDescription
bucket_namestrName of the bucket.
prefixstrObject name starts with prefix.
recursiveboolList recursively than directory structure emulation.
start_afterstrList objects after this key name.
include_user_metaboolMinIO specific flag to control to include user metadata.
include_versionboolFlag to control whether include object versions.
use_api_v1boolFlag to control to use ListObjectV1 S3 API or not.
use_url_encoding_typeboolFlag to control whether URL encoding type to be used or not.
extra_headersdictExtra HTTP headers for advanced usage.
extra_query_paramsdictExtra query parameters for advanced usage.

Return Value

Return
An iterator of Object

Example

# List objects information.
objects = client.list_objects("my-bucket")
for obj in objects:
    print(obj)

# List objects information whose names starts with "my/prefix/".
objects = client.list_objects("my-bucket", prefix="my/prefix/")
for obj in objects:
    print(obj)

# List objects information recursively.
objects = client.list_objects("my-bucket", recursive=True)
for obj in objects:
    print(obj)

# List objects information recursively whose names starts with
# "my/prefix/".
objects = client.list_objects(
    "my-bucket", prefix="my/prefix/", recursive=True,
)
for obj in objects:
    print(obj)

# List objects information recursively after object name
# "my/prefix/world/1".
objects = client.list_objects(
    "my-bucket", recursive=True, start_after="my/prefix/world/1",
)
for obj in objects:
    print(obj)

get_bucket_policy(bucket_name)

Get bucket policy configuration of a bucket.

Parameters

ParamTypeDescription
bucket_namestrName of the bucket.

Return Value

Param
Bucket policy configuration as JSON string.

Example

policy = client.get_bucket_policy("my-bucket")

set_bucket_policy(bucket_name, policy)

Set bucket policy configuration to a bucket.

Parameters

ParamTypeDescription
bucket_namestrName of the bucket.
PolicystrBucket policy configuration as JSON string.

Example

# Example anonymous read-only bucket policy.
policy = {
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {"AWS": "*"},
            "Action": ["s3:GetBucketLocation", "s3:ListBucket"],
            "Resource": "arn:aws:s3:::my-bucket",
        },
        {
            "Effect": "Allow",
            "Principal": {"AWS": "*"},
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::my-bucket/*",
        },
    ],
}
client.set_bucket_policy("my-bucket", json.dumps(policy))

# Example anonymous read-write bucket policy.
policy = {
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {"AWS": "*"},
            "Action": [
                "s3:GetBucketLocation",
                "s3:ListBucket",
                "s3:ListBucketMultipartUploads",
            ],
            "Resource": "arn:aws:s3:::my-bucket",
        },
        {
            "Effect": "Allow",
            "Principal": {"AWS": "*"},
            "Action": [
                "s3:GetObject",
                "s3:PutObject",
                "s3:DeleteObject",
                "s3:ListMultipartUploadParts",
                "s3:AbortMultipartUpload",
            ],
            "Resource": "arn:aws:s3:::my-bucket/images/*",
        },
    ],
}
client.set_bucket_policy("my-bucket", json.dumps(policy))

delete_bucket_policy(bucket_name)

Delete bucket policy configuration of a bucket.

Parameters

ParamTypeDescription
bucket_namestrName of the bucket.

Example

client.delete_bucket_policy("my-bucket")

get_bucket_notification(bucket_name)

Get notification configuration of a bucket.

Parameters

ParamTypeDescription
bucket_namestrName of the bucket.

Return Value

Param
NotificationConfig object.

Example

config = client.get_bucket_notification("my-bucket")

set_bucket_notification(bucket_name, config)

Set notification configuration of a bucket.

Parameters

ParamTypeDescription
bucket_namestrName of the bucket.
configNotificationConfigNotification configuration.

Example

config = NotificationConfig(
    queue_config_list=[
        QueueConfig(
            "QUEUE-ARN-OF-THIS-BUCKET",
            ["s3:ObjectCreated:*"],
            config_id="1",
            prefix_filter_rule=PrefixFilterRule("abc"),
        ),
    ],
)
client.set_bucket_notification("my-bucket", config)

delete_bucket_notification(bucket_name)

Delete notification configuration of a bucket. On success, S3 service stops notification of events previously set of the bucket.

Parameters

ParamTypeDescription
bucket_namestrName of the bucket.

Example

client.delete_bucket_notification("my-bucket")

listen_bucket_notification(bucket_name, prefix=’’, suffix=’’, events=(‘s3:ObjectCreated:*’, ‘s3:ObjectRemoved:*’, ‘s3:ObjectAccessed:*’))

Listen events of object prefix and suffix of a bucket. Caller should iterate returned iterator to read new events.

Parameters

ParamTypeDescription
bucket_namestrName of the bucket.
prefixstrListen events of object starts with prefix.
suffixstrListen events of object ends with suffix.
eventslistEvents to listen.

Return Value

Param
Iterator of event records as dict
with client.listen_bucket_notification(
    "my-bucket",
    prefix="my-prefix/",
    events=["s3:ObjectCreated:*", "s3:ObjectRemoved:*"],
) as events:
    for event in events:
        print(event)

get_bucket_encryption(bucket_name)

Get encryption configuration of a bucket.

Parameters

ParamTypeDescription
bucket_namestrName of the bucket.

Return Value

Param
SSEConfig object.

Example

config = client.get_bucket_encryption("my-bucket")

set_bucket_encryption(bucket_name, config)

Set encryption configuration of a bucket.

Parameters

ParamTypeDescription
bucket_namestrName of the bucket.
configSSEConfigServer-side encryption configuration.

Example

client.set_bucket_encryption(
    "my-bucket", SSEConfig(Rule.new_sse_s3_rule()),
)

delete_bucket_encryption(bucket_name)

Delete encryption configuration of a bucket.

Parameters

ParamTypeDescription
bucket_namestrName of the bucket.

Example

client.delete_bucket_encryption("my-bucket")

get_bucket_versioning(bucket_name)

Get versioning configuration of a bucket.

Parameters

ParamTypeDescription
bucket_namestrName of the bucket.

Example

config = client.get_bucket_versioning("my-bucket")
print(config.status)

set_bucket_versioning(bucket_name, config)

Set versioning configuration to a bucket.

Parameters

ParamTypeDescription
bucket_namestrName of the bucket.
configVersioningConfigVersioning configuration.

Example

client.set_bucket_versioning("my-bucket", VersioningConfig(ENABLED))

delete_bucket_replication(bucket_name)

Delete replication configuration of a bucket.

Parameters

ParamTypeDescription
bucket_namestrName of the bucket.

Example

client.delete_bucket_replication("my-bucket")

get_bucket_replication(bucket_name)

Get replication configuration of a bucket.

Parameters

ParamTypeDescription
bucket_namestrName of the bucket.
Return
ReplicationConfig object.

Example

config = client.get_bucket_replication("my-bucket")

set_bucket_replication(bucket_name, config)

Set replication configuration to a bucket.

Parameters

ParamTypeDescription
bucket_namestrName of the bucket.
configReplicationConfigReplication configuration.

Example

config = ReplicationConfig(
    "REPLACE-WITH-ACTUAL-ROLE",
    [
        Rule(
            Destination(
                "REPLACE-WITH-ACTUAL-DESTINATION-BUCKET-ARN",
            ),
            ENABLED,
            delete_marker_replication=DeleteMarkerReplication(
                DISABLED,
            ),
            rule_filter=Filter(
                AndOperator(
                    "TaxDocs",
                    {"key1": "value1", "key2": "value2"},
                ),
            ),
            rule_id="rule1",
            priority=1,
        ),
    ],
)
client.set_bucket_replication("my-bucket", config)

delete_bucket_lifecycle(bucket_name)

Delete lifecycle configuration of a bucket.

Parameters

ParamTypeDescription
bucket_namestrName of the bucket.

Example

client.delete_bucket_lifecycle("my-bucket")

get_bucket_lifecycle(bucket_name)

Get lifecycle configuration of a bucket.

Parameters

ParamTypeDescription
bucket_namestrName of the bucket.
Return
LifecycleConfig object.

Example

config = client.get_bucket_lifecycle("my-bucket")

set_bucket_lifecycle(bucket_name, config)

Set lifecycle configuration to a bucket.

Parameters

ParamTypeDescription
bucket_namestrName of the bucket.
configLifecycleConfigLifecycle configuration.

Example

config = LifecycleConfig(
    [
        Rule(
            ENABLED,
            rule_filter=Filter(prefix="documents/"),
            rule_id="rule1",
            transition=Transition(days=30, storage_class="GLACIER"),
        ),
        Rule(
            ENABLED,
            rule_filter=Filter(prefix="logs/"),
            rule_id="rule2",
            expiration=Expiration(days=365),
        ),
    ],
)
client.set_bucket_lifecycle("my-bucket", config)

delete_bucket_tags(bucket_name)

Delete tags configuration of a bucket.

Parameters

ParamTypeDescription
bucket_namestrName of the bucket.

Example

client.delete_bucket_tags("my-bucket")

get_bucket_tags(bucket_name)

Get tags configuration of a bucket.

Parameters

ParamTypeDescription
bucket_namestrName of the bucket.
Return
Tags object.

Example

tags = client.get_bucket_tags("my-bucket")

set_bucket_tags(bucket_name, tags)

Set tags configuration to a bucket.

Parameters

ParamTypeDescription
bucket_namestrName of the bucket.
tagsTagsTags configuration.

Example

tags = Tags.new_bucket_tags()
tags["Project"] = "Project One"
tags["User"] = "jsmith"
client.set_bucket_tags("my-bucket", tags)

delete_object_lock_config(bucket_name)

Delete object-lock configuration of a bucket.

Parameters

ParamTypeDescription
bucket_namestrName of the bucket.

Example

client.delete_object_lock_config("my-bucket")

get_object_lock_config(bucket_name)

Get object-lock configuration of a bucket.

Parameters

ParamTypeDescription
bucket_namestrName of the bucket.
Return
ObjectLockConfig object.

Example

config = client.get_object_lock_config("my-bucket")

set_object_lock_config(bucket_name, config)

Set object-lock configuration to a bucket.

Parameters

ParamTypeDescription
bucket_namestrName of the bucket.
configObjectLockConfigObject-Lock configuration.

Example

config = ObjectLockConfig(GOVERNANCE, 15, DAYS)
client.set_object_lock_config("my-bucket", config)

3. Object operations

Appends from a stream to existing object in a bucket.

Parameters

ParamTypeDescription
bucket_namestrName of the bucket.
object_namestrObject name in the bucket.
dataobjectAn object having callable read() returning bytes object.
lengthintData size; -1 for unknown size and set valid part_size.
part_sizeintChunk size.
progressthreadingA progress object.
extra_headersdictExtra headers.

Return Value

Return
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}")

get_object(bucket_name, object_name, offset=0, length=0, request_headers=None, ssec=None, version_id=None, extra_query_params=None)

Gets data from offset to length of an object. Returned response should be closed after use to release network resources. To reuse the connection, it’s required to call response.release_conn() explicitly.

Parameters

ParamTypeDescription
bucket_namestrName of the bucket.
object_namestrObject name in the bucket.
offsetintStart byte position of object data.
lengthintNumber of bytes of object data from offset.
request_headersdictAny additional headers to be added with GET request.
ssecSseCustomerKeyServer-side encryption customer key.
version_idstrVersion-ID of the object.
extra_query_paramsdictExtra query parameters for advanced usage.

Return Value

Return
urllib3.response.HTTPResponse object.

Example

# Get data of an object.
try:
    response = client.get_object("my-bucket", "my-object")
    # Read data from response.
finally:
    response.close()
    response.release_conn()

# Get data of an object of version-ID.
try:
    response = client.get_object(
        "my-bucket", "my-object",
        version_id="dfbd25b3-abec-4184-a4e8-5a35a5c1174d",
    )
    # Read data from response.
finally:
    response.close()
    response.release_conn()

# Get data of an object from offset and length.
try:
    response = client.get_object(
        "my-bucket", "my-object", offset=512, length=1024,
    )
    # Read data from response.
finally:
    response.close()
    response.release_conn()

# Get data of an SSE-C encrypted object.
try:
    response = client.get_object(
        "my-bucket", "my-object",
        ssec=SseCustomerKey(b"32byteslongsecretkeymustprovided"),
    )
    # Read data from response.
finally:
    response.close()
    response.release_conn()

select_object_content(bucket_name, object_name, request)

Select content of an object by SQL expression.

Parameters

ParamTypeDescription
bucket_namestrName of the bucket.
object_namestrObject name in the bucket.
requestSelectRequestSelect request.

Return Value

Return
A reader contains requested records and progress information as SelectObjectReader

Example

with client.select_object_content(
        "my-bucket",
        "my-object.csv",
        SelectRequest(
            "select * from S3Object",
            CSVInputSerialization(),
            CSVOutputSerialization(),
            request_progress=True,
        ),
) as result:
    for data in result.stream():
        print(data.decode())
    print(result.stats())

fget_object(bucket_name, object_name, file_path, request_headers=None, ssec=None, version_id=None, extra_query_params=None, tmp_file_path=None)

Downloads data of an object to file.

Parameters

ParamTypeDescription
bucket_namestrName of the bucket.
object_namestrObject name in the bucket.
file_pathstrName of file to download.
request_headersdictAny additional headers to be added with GET request.
ssecSseCustomerKeyServer-side encryption customer key.
version_idstrVersion-ID of the object.
extra_query_paramsdictExtra query parameters for advanced usage.
tmp_file_pathstrPath to a temporary file.

Return Value

Return
Object information as Object

Example

# Download data of an object.
client.fget_object("my-bucket", "my-object", "my-filename")

# Download data of an object of version-ID.
client.fget_object(
    "my-bucket", "my-object", "my-filename",
    version_id="dfbd25b3-abec-4184-a4e8-5a35a5c1174d",
)

# Download data of an SSE-C encrypted object.
client.fget_object(
    "my-bucket", "my-object", "my-filename",
    ssec=SseCustomerKey(b"32byteslongsecretkeymustprovided"),
)

Create an object by server-side copying data from another object. In this API maximum supported source object size is 5GiB.

Parameters

ParamTypeDescription
bucket_namestrName of the bucket.
object_namestrObject name in the bucket.
sourceCopySourceSource object information.
sseSseServer-side encryption of destination object.
metadatadictAny user-defined metadata to be copied along with destination object.
tagsTagsTags for destination object.
retentionRetentionRetention configuration.
legal_holdboolFlag to set legal hold for destination object.
metadata_directivestrDirective used to handle user metadata for destination object.
tagging_directivestrDirective used to handle tags for destination object.

Return Value

Return
ObjectWriteResult object.

Example

from datetime import datetime, timezone
from minio.commonconfig import REPLACE, CopySource

# copy an object from a bucket to another.
result = client.copy_object(
    "my-bucket",
    "my-object",
    CopySource("my-sourcebucket", "my-sourceobject"),
)
print(result.object_name, result.version_id)

# copy an object with condition.
result = client.copy_object(
    "my-bucket",
    "my-object",
    CopySource(
        "my-sourcebucket",
        "my-sourceobject",
        modified_since=datetime(2014, 4, 1, tzinfo=timezone.utc),
    ),
)
print(result.object_name, result.version_id)

# copy an object from a bucket with replacing metadata.
metadata = {"test_meta_key": "test_meta_value"}
result = client.copy_object(
    "my-bucket",
    "my-object",
    CopySource("my-sourcebucket", "my-sourceobject"),
    metadata=metadata,
    metadata_directive=REPLACE,
)
print(result.object_name, result.version_id)

Create an object by combining data from different source objects using server-side copy.

Parameters

ParamTypeDescription
bucket_namestrName of the bucket.
object_namestrObject name in the bucket.
sourceslistList of ComposeSource object.
sseSseServer-side encryption of destination object.
metadatadictAny user-defined metadata to be copied along with destination object.
tagsTagsTags for destination object.
retentionRetentionRetention configuration.
legal_holdboolFlag to set legal hold for destination object.

Return Value

Return
ObjectWriteResult object.

Example

from minio.commonconfig import ComposeSource
from minio.sse import SseS3

sources = [
    ComposeSource("my-job-bucket", "my-object-part-one"),
    ComposeSource("my-job-bucket", "my-object-part-two"),
    ComposeSource("my-job-bucket", "my-object-part-three"),
]

# Create my-bucket/my-object by combining source object
# list.
result = client.compose_object("my-bucket", "my-object", sources)
print(result.object_name, result.version_id)

# Create my-bucket/my-object with user metadata by combining
# source object list.
result = client.compose_object(
    "my-bucket",
    "my-object",
    sources,
    metadata={"test_meta_key": "test_meta_value"},
)
print(result.object_name, result.version_id)

# Create my-bucket/my-object with user metadata and
# server-side encryption by combining source object list.
client.compose_object("my-bucket", "my-object", sources, sse=SseS3())
print(result.object_name, result.version_id)

Uploads data from a stream to an object in a bucket.

Parameters

ParamTypeDescription
bucket_namestrName of the bucket.
object_namestrObject name in the bucket.
dataobjectAn object having callable read() returning bytes object.
lengthintData size; -1 for unknown size and set valid part_size.
content_typestrContent type of the object.
metadatadictAny additional metadata to be uploaded along with your PUT request.
sseSseServer-side encryption.
progressthreadingA progress object.
part_sizeintMultipart part size.
tagsTagsTags for the object.
retentionRetentionRetention configuration.
legal_holdboolFlag to set legal hold for the object.

Return Value

Return
ObjectWriteResult object.

Example

# Upload data.
result = client.put_object(
    "my-bucket", "my-object", io.BytesIO(b"hello"), 5,
)
print(
    "created {0} object; etag: {1}, version-id: {2}".format(
        result.object_name, result.etag, result.version_id,
    ),
)

# Upload unknown sized data.
data = urlopen(
    "https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.4.81.tar.xz",
)
result = client.put_object(
    "my-bucket", "my-object", data, length=-1, part_size=10*1024*1024,
)
print(
    "created {0} object; etag: {1}, version-id: {2}".format(
        result.object_name, result.etag, result.version_id,
    ),
)

# Upload data with content-type.
result = client.put_object(
    "my-bucket", "my-object", io.BytesIO(b"hello"), 5,
    content_type="application/csv",
)
print(
    "created {0} object; etag: {1}, version-id: {2}".format(
        result.object_name, result.etag, result.version_id,
    ),
)

# Upload data with metadata.
result = client.put_object(
    "my-bucket", "my-object", io.BytesIO(b"hello"), 5,
    metadata={"My-Project": "one"},
)
print(
    "created {0} object; etag: {1}, version-id: {2}".format(
        result.object_name, result.etag, result.version_id,
    ),
)

# Upload data with customer key type of server-side encryption.
result = client.put_object(
    "my-bucket", "my-object", io.BytesIO(b"hello"), 5,
    sse=SseCustomerKey(b"32byteslongsecretkeymustprovided"),
)
print(
    "created {0} object; etag: {1}, version-id: {2}".format(
        result.object_name, result.etag, result.version_id,
    ),
)

# Upload data with KMS type of server-side encryption.
result = client.put_object(
    "my-bucket", "my-object", io.BytesIO(b"hello"), 5,
    sse=SseKMS("KMS-KEY-ID", {"Key1": "Value1", "Key2": "Value2"}),
)
print(
    "created {0} object; etag: {1}, version-id: {2}".format(
        result.object_name, result.etag, result.version_id,
    ),
)

# Upload data with S3 type of server-side encryption.
result = client.put_object(
    "my-bucket", "my-object", io.BytesIO(b"hello"), 5,
    sse=SseS3(),
)
print(
    "created {0} object; etag: {1}, version-id: {2}".format(
        result.object_name, result.etag, result.version_id,
    ),
)

# Upload data with tags, retention and legal-hold.
date = datetime.utcnow().replace(
    hour=0, minute=0, second=0, microsecond=0,
) + timedelta(days=30)
tags = Tags(for_object=True)
tags["User"] = "jsmith"
result = client.put_object(
    "my-bucket", "my-object", io.BytesIO(b"hello"), 5,
    tags=tags,
    retention=Retention(GOVERNANCE, date),
    legal_hold=True,
)
print(
    "created {0} object; etag: {1}, version-id: {2}".format(
        result.object_name, result.etag, result.version_id,
    ),
)

# Upload data with progress bar.
result = client.put_object(
    "my-bucket", "my-object", io.BytesIO(b"hello"), 5,
    progress=Progress(),
)
print(
    "created {0} object; etag: {1}, version-id: {2}".format(
        result.object_name, result.etag, result.version_id,
    ),
)

Uploads data from a file to an object in a bucket.

ParamTypeDescription
bucket_namestrName of the bucket.
object_namestrObject name in the bucket.
file_pathstrName of file to upload.
content_typestrContent type of the object.
metadatadictAny additional metadata to be uploaded along with your PUT request.
sseSseServer-side encryption.
progressthreadingA progress object.
part_sizeintMultipart part size.
tagsTagsTags for the object.
retentionRetentionRetention configuration.
legal_holdboolFlag to set legal hold for the object.

Return Value

Return
ObjectWriteResult object.

Example

# Upload data.
result = client.fput_object(
    "my-bucket", "my-object", "my-filename",
)
print(
    "created {0} object; etag: {1}, version-id: {2}".format(
        result.object_name, result.etag, result.version_id,
    ),
)

# Upload data with content-type.
result = client.fput_object(
    "my-bucket", "my-object", "my-filename",
    content_type="application/csv",
)
print(
    "created {0} object; etag: {1}, version-id: {2}".format(
        result.object_name, result.etag, result.version_id,
    ),
)

# Upload data with metadata.
result = client.fput_object(
    "my-bucket", "my-object", "my-filename",
    metadata={"My-Project": "one"},
)
print(
    "created {0} object; etag: {1}, version-id: {2}".format(
        result.object_name, result.etag, result.version_id,
    ),
)

# Upload data with customer key type of server-side encryption.
result = client.fput_object(
    "my-bucket", "my-object", "my-filename",
    sse=SseCustomerKey(b"32byteslongsecretkeymustprovided"),
)
print(
    "created {0} object; etag: {1}, version-id: {2}".format(
        result.object_name, result.etag, result.version_id,
    ),
)

# Upload data with KMS type of server-side encryption.
result = client.fput_object(
    "my-bucket", "my-object", "my-filename",
    sse=SseKMS("KMS-KEY-ID", {"Key1": "Value1", "Key2": "Value2"}),
)
print(
    "created {0} object; etag: {1}, version-id: {2}".format(
        result.object_name, result.etag, result.version_id,
    ),
)

# Upload data with S3 type of server-side encryption.
result = client.fput_object(
    "my-bucket", "my-object", "my-filename",
    sse=SseS3(),
)
print(
    "created {0} object; etag: {1}, version-id: {2}".format(
        result.object_name, result.etag, result.version_id,
    ),
)

# Upload data with tags, retention and legal-hold.
date = datetime.utcnow().replace(
    hour=0, minute=0, second=0, microsecond=0,
) + timedelta(days=30)
tags = Tags(for_object=True)
tags["User"] = "jsmith"
result = client.fput_object(
    "my-bucket", "my-object", "my-filename",
    tags=tags,
    retention=Retention(GOVERNANCE, date),
    legal_hold=True,
)
print(
    "created {0} object; etag: {1}, version-id: {2}".format(
        result.object_name, result.etag, result.version_id,
    ),
)

# Upload data with progress bar.
result = client.fput_object(
    "my-bucket", "my-object", "my-filename",
    progress=Progress(),
)
print(
    "created {0} object; etag: {1}, version-id: {2}".format(
        result.object_name, result.etag, result.version_id,
    ),
)

stat_object(bucket_name, object_name, ssec=None, version_id=None, extra_headers=None, extra_query_params=None)

Get object information and metadata of an object.

Parameters

ParamTypeDescription
bucket_namestrName of the bucket.
object_namestrObject name in the bucket.
ssecSseCustomerKeyServer-side encryption customer key.
version_idstrVersion ID of the object.
extra_headersdictExtra HTTP headers for advanced usage.
extra_query_paramsdictExtra query parameters for advanced usage.

Return Value

Return
Object information as Object

Example

# Get object information.
result = client.stat_object("my-bucket", "my-object")
print(
    "last-modified: {0}, size: {1}".format(
        result.last_modified, result.size,
    ),
)

# Get object information of version-ID.
result = client.stat_object(
    "my-bucket", "my-object",
    version_id="dfbd25b3-abec-4184-a4e8-5a35a5c1174d",
)
print(
    "last-modified: {0}, size: {1}".format(
        result.last_modified, result.size,
    ),
)

# Get SSE-C encrypted object information.
result = client.stat_object(
    "my-bucket", "my-object",
    ssec=SseCustomerKey(b"32byteslongsecretkeymustprovided"),
)
print(
    "last-modified: {0}, size: {1}".format(
        result.last_modified, result.size,
    ),
)

remove_object(bucket_name, object_name, version_id=None)

Remove an object.

Parameters

ParamTypeDescription
bucket_namestrName of the bucket.
object_namestrObject name in the bucket.
version_idstrVersion ID of the object.

Example

# Remove object.
client.remove_object("my-bucket", "my-object")

# Remove version of an object.
client.remove_object(
    "my-bucket", "my-object",
    version_id="dfbd25b3-abec-4184-a4e8-5a35a5c1174d",
)

remove_objects(bucket_name, delete_object_list, bypass_governance_mode=False)

Remove multiple objects.

Parameters

ParamTypeDescription
bucket_namestrName of the bucket.
delete_object_listiterableAn iterable containing :class:DeleteObject <DeleteObject> object.
bypass_governance_modeboolBypass Governance retention mode.

Return Value

Return
An iterator containing :class:DeleteError <DeleteError> object

Example

# Remove list of objects.
errors = client.remove_objects(
    "my-bucket",
    [
        DeleteObject("my-object1"),
        DeleteObject("my-object2"),
        DeleteObject("my-object3", "13f88b18-8dcd-4c83-88f2-8631fdb6250c"),
    ],
)
for error in errors:
    print("error occurred when deleting object", error)

# Remove a prefix recursively.
delete_object_list = map(
    lambda x: DeleteObject(x.object_name),
    client.list_objects("my-bucket", "my/prefix/", recursive=True),
)
errors = client.remove_objects("my-bucket", delete_object_list)
for error in errors:
    print("error occurred when deleting object", error)

delete_object_tags(bucket_name, object_name, version_id=None)

Delete tags configuration of an object.

Parameters

ParamTypeDescription
bucket_namestrName of the bucket.
object_namestrObject name in the bucket.
version_idstrVersion ID of the object.

Example

client.delete_object_tags("my-bucket", "my-object")

get_object_tags(bucket_name, object_name, version_id=None)

Get tags configuration of an object.

Parameters

ParamTypeDescription
bucket_namestrName of the bucket.
object_namestrObject name in the bucket.
version_idstrVersion ID of the object.
Return
Tags object.

Example

tags = client.get_object_tags("my-bucket", "my-object")

set_object_tags(bucket_name, object_name, tags, version_id=None)

Set tags configuration to an object.

Parameters

ParamTypeDescription
bucket_namestrName of the bucket.
object_namestrObject name in the bucket.
tagsTagsTags configuration.
version_idstrVersion ID of the object.

Example

tags = Tags.new_object_tags()
tags["Project"] = "Project One"
tags["User"] = "jsmith"
client.set_object_tags("my-bucket", "my-object", tags)

Enable legal hold on an object.

Parameters

ParamTypeDescription
bucket_namestrName of the bucket.
object_namestrObject name in the bucket.
version_idstrVersion ID of the object.

Example

client.enable_object_legal_hold("my-bucket", "my-object")

Disable legal hold on an object.

Parameters

ParamTypeDescription
bucket_namestrName of the bucket.
object_namestrObject name in the bucket.
version_idstrVersion ID of the object.

Example

client.disable_object_legal_hold("my-bucket", "my-object")

Returns true if legal hold is enabled on an object.

Parameters

ParamTypeDescription
bucket_namestrName of the bucket.
object_namestrObject name in the bucket.
version_idstrVersion ID of the object.

Example

if client.is_object_legal_hold_enabled("my-bucket", "my-object"):
    print("legal hold is enabled on my-object")
else:
    print("legal hold is not enabled on my-object")

get_object_retention(bucket_name, object_name, version_id=None)

Get retention information of an object.

Parameters

ParamTypeDescription
bucket_namestrName of the bucket.
object_namestrObject name in the bucket.
version_idstrVersion ID of the object.

Return Value

Return
Retention object

Example

config = client.get_object_retention("my-bucket", "my-object")

set_object_retention(bucket_name, object_name, config, version_id=None)

Set retention information to an object.

Parameters

ParamTypeDescription
bucket_namestrName of the bucket.
object_namestrObject name in the bucket.
configRetentionRetention configuration.
version_idstrVersion ID of the object.

Example

config = Retention(GOVERNANCE, datetime.utcnow() + timedelta(days=10))
client.set_object_retention("my-bucket", "my-object", config)

presigned_get_object(bucket_name, object_name, expires=timedelta(days=7), response_headers=None, request_date=None, version_id=None, extra_query_params=None)

Get presigned URL of an object to download its data with expiry time and custom request parameters.

Parameters

ParamTypeDescription
bucket_namestrName of the bucket.
object_namestrObject name in the bucket.
expiresdatetime.timedeltaExpiry in seconds; defaults to 7 days.
response_headersdictOptional response_headers argument to specify response fields like date, size, type of file, data about server, etc.
request_datedatetime.datetimeOptional request_date argument to specify a different request date. Default is current date.
version_idstrVersion ID of the object.
extra_query_paramsdictExtra query parameters for advanced usage.

Return Value

Return
URL string

Example

# Get presigned URL string to download 'my-object' in
# 'my-bucket' with default expiry (i.e. 7 days).
url = client.presigned_get_object("my-bucket", "my-object")
print(url)

# Get presigned URL string to download 'my-object' in
# 'my-bucket' with two hours expiry.
url = client.presigned_get_object(
    "my-bucket", "my-object", expires=timedelta(hours=2),
)
print(url)

presigned_put_object(bucket_name, object_name, expires=timedelta(days=7))

Get presigned URL of an object to upload data with expiry time and custom request parameters.

Parameters

ParamTypeDescription
bucket_namestrName of the bucket.
object_namestrObject name in the bucket.
expiresdatetime.timedeltaExpiry in seconds; defaults to 7 days.

Return Value

Return
URL string

Example

# Get presigned URL string to upload data to 'my-object' in
# 'my-bucket' with default expiry (i.e. 7 days).
url = client.presigned_put_object("my-bucket", "my-object")
print(url)

# Get presigned URL string to upload data to 'my-object' in
# 'my-bucket' with two hours expiry.
url = client.presigned_put_object(
    "my-bucket", "my-object", expires=timedelta(hours=2),
)
print(url)

presigned_post_policy(policy)

Get form-data of PostPolicy of an object to upload its data using POST method.

Parameters

ParamTypeDescription
policyPostPolicyPost policy.

Return Value

Return
Form-data containing dict

Example

policy = PostPolicy(
    "my-bucket", datetime.utcnow() + timedelta(days=10),
)
policy.add_starts_with_condition("key", "my/object/prefix/")
policy.add_content_length_range_condition(
    1*1024*1024, 10*1024*1024,
)
form_data = client.presigned_post_policy(policy)

get_presigned_url(method, bucket_name, object_name, expires=timedelta(days=7), response_headers=None, request_date=None, version_id=None, extra_query_params=None)

Get presigned URL of an object for HTTP method, expiry time and custom request parameters.

Parameters

ParamTypeDescription
methodstrHTTP method.
bucket_namestrName of the bucket.
object_namestrObject name in the bucket.
expiresdatetime.timedeltaExpiry in seconds; defaults to 7 days.
response_headersdictOptional response_headers argument to specify response fields like date, size, type of file, data about server, etc.
request_datedatetime.datetimeOptional request_date argument to specify a different request date. Default is current date.
version_idstrVersion ID of the object.
extra_query_paramsdictExtra query parameters for advanced usage.

Return Value

Return
URL string

Example

# Get presigned URL string to delete 'my-object' in
# 'my-bucket' with one day expiry.
url = client.get_presigned_url(
    "DELETE",
    "my-bucket",
    "my-object",
    expires=timedelta(days=1),
)
print(url)

# Get presigned URL string to upload 'my-object' in
# 'my-bucket' with response-content-type as application/json
# and one day expiry.
url = client.get_presigned_url(
    "PUT",
    "my-bucket",
    "my-object",
    expires=timedelta(days=1),
    response_headers={"response-content-type": "application/json"},
)
print(url)

# Get presigned URL string to download 'my-object' in
# 'my-bucket' with two hours expiry.
url = client.get_presigned_url(
    "GET",
    "my-bucket",
    "my-object",
    expires=timedelta(hours=2),
)
print(url)

Uploads multiple objects in a single put call. It is done by creating intermediate TAR file optionally compressed which is uploaded to S3 service.

Parameters

ParamTypeDescription
bucket_namestrName of the bucket.
object_listiterableAn iterable containing :class:SnowballObject <SnowballObject> object.
metadatadictAny additional metadata to be uploaded along with your PUT request.
sseSseServer-side encryption.
tagsTagsTags for the object.
retentionRetentionRetention configuration.
legal_holdboolFlag to set legal hold for the object.
staging_filenamestrA staging filename to create intermediate tarball.
compressionboolFlag to compress tarball.

Return Value

Return
ObjectWriteResult object.

Example

# Upload snowball object.
client.upload_snowball_objects(
    "my-bucket",
    [
        SnowballObject("my-object1", filename="/etc/hostname"),
        SnowballObject(
            "my-object2", data=io.BytesIO("hello"), length=5,
        ),
        SnowballObject(
            "my-object3", data=io.BytesIO("world"), length=5,
            mod_time=datetime.now(),
        ),
    ],
)

5. Explore Further

On this page

1. ConstructorMinio(endpoint, access_key=None, secret_key=None, session_token=None, secure=True, region=None, http_client=None, credentials=None)2. Bucket operationsmake_bucket(bucket_name, location=‘us-east-1’, object_lock=False)list_buckets()bucket_exists(bucket_name)remove_bucket(bucket_name)list_objects(bucket_name, prefix=None, recursive=False, start_after=None, include_user_meta=False, include_version=False, use_api_v1=False, use_url_encoding_type=True, extra_headers=None, extra_query_params=None)get_bucket_policy(bucket_name)set_bucket_policy(bucket_name, policy)delete_bucket_policy(bucket_name)get_bucket_notification(bucket_name)set_bucket_notification(bucket_name, config)delete_bucket_notification(bucket_name)listen_bucket_notification(bucket_name, prefix=’’, suffix=’’, events=(‘s3:ObjectCreated:*’, ‘s3:ObjectRemoved:*’, ‘s3:ObjectAccessed:*’))get_bucket_encryption(bucket_name)set_bucket_encryption(bucket_name, config)delete_bucket_encryption(bucket_name)get_bucket_versioning(bucket_name)set_bucket_versioning(bucket_name, config)delete_bucket_replication(bucket_name)get_bucket_replication(bucket_name)set_bucket_replication(bucket_name, config)delete_bucket_lifecycle(bucket_name)get_bucket_lifecycle(bucket_name)set_bucket_lifecycle(bucket_name, config)delete_bucket_tags(bucket_name)get_bucket_tags(bucket_name)set_bucket_tags(bucket_name, tags)delete_object_lock_config(bucket_name)get_object_lock_config(bucket_name)set_object_lock_config(bucket_name, config)3. Object operationsappend_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)get_object(bucket_name, object_name, offset=0, length=0, request_headers=None, ssec=None, version_id=None, extra_query_params=None)select_object_content(bucket_name, object_name, request)fget_object(bucket_name, object_name, file_path, request_headers=None, ssec=None, version_id=None, extra_query_params=None, tmp_file_path=None)copy_object(bucket_name, object_name, source, sse=None, metadata=None, tags=None, retention=None, legal_hold=False, metadata_directive=None, tagging_directive=None)compose_object(bucket_name, object_name, sources, sse=None, metadata=None, tags=None, retention=None, legal_hold=False)put_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)fput_object(bucket_name, object_name, file_path, 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)stat_object(bucket_name, object_name, ssec=None, version_id=None, extra_headers=None, extra_query_params=None)remove_object(bucket_name, object_name, version_id=None)remove_objects(bucket_name, delete_object_list, bypass_governance_mode=False)delete_object_tags(bucket_name, object_name, version_id=None)get_object_tags(bucket_name, object_name, version_id=None)set_object_tags(bucket_name, object_name, tags, version_id=None)enable_object_legal_hold(bucket_name, object_name, version_id=None)disable_object_legal_hold(bucket_name, object_name, version_id=None)is_object_legal_hold_enabled(bucket_name, object_name, version_id=None)get_object_retention(bucket_name, object_name, version_id=None)set_object_retention(bucket_name, object_name, config, version_id=None)presigned_get_object(bucket_name, object_name, expires=timedelta(days=7), response_headers=None, request_date=None, version_id=None, extra_query_params=None)presigned_put_object(bucket_name, object_name, expires=timedelta(days=7))presigned_post_policy(policy)get_presigned_url(method, bucket_name, object_name, expires=timedelta(days=7), response_headers=None, request_date=None, version_id=None, extra_query_params=None)upload_snowball_objects(bucket_name, object_list, metadata=None, sse=None, tags=None, retention=None, legal_hold=False, staging_filename=None, compression=False)5. Explore Further