Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 11 additions & 7 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ The MinIO Python Client SDK provides high level APIs to access any MinIO Object
This Quickstart Guide covers how to install the MinIO client SDK, connect to the object storage service, and create a sample file uploader.

The example below uses:
- [Python version 3.7+](https://www.python.org/downloads/)
- [Python version 3.9+](https://www.python.org/downloads/)
- The [MinIO `mc` command line tool](https://min.io/docs/minio/linux/reference/minio-mc.html)
- The MinIO `play` test server

Expand All @@ -17,7 +17,7 @@ For a complete list of APIs and examples, see the [Python Client API Reference](

## Install the MinIO Python SDK

The Python SDK requires Python version 3.7+.
The Python SDK requires Python version 3.9+.
You can install the SDK with `pip` or from the [`minio/minio-py` GitHub repository](https://github.com/minio/minio-py):

### Using `pip`
Expand Down Expand Up @@ -49,7 +49,8 @@ For example:
```py
from minio import Minio

client = Minio("play.min.io",
client = Minio(
endpoint="play.min.io",
access_key="Q3AM3UQ867SPQQA43P2F",
secret_key="zuf+tfteSlswRu7BJ86wekitnifILbZam1KYY3TG",
)
Expand All @@ -74,7 +75,8 @@ from minio.error import S3Error
def main():
# Create a client with the MinIO server playground, its access key
# and secret key.
client = Minio("play.min.io",
client = Minio(
endpoint="play.min.io",
access_key="Q3AM3UQ867SPQQA43P2F",
secret_key="zuf+tfteSlswRu7BJ86wekitnifILbZam1KYY3TG",
)
Expand All @@ -87,16 +89,18 @@ def main():
destination_file = "my-test-file.txt"

# Make the bucket if it doesn't exist.
found = client.bucket_exists(bucket_name)
found = client.bucket_exists(bucket_name=bucket_name)
if not found:
client.make_bucket(bucket_name)
client.make_bucket(bucket_name=bucket_name)
print("Created bucket", bucket_name)
else:
print("Bucket", bucket_name, "already exists")

# Upload the file, renaming it in the process
client.fput_object(
bucket_name, destination_file, source_file,
bucket_name=bucket_name,
object_name=destination_file,
file_path=source_file,
)
print(
source_file, "successfully uploaded as object",
Expand Down
1,640 changes: 992 additions & 648 deletions docs/API.md

Large diffs are not rendered by default.

44 changes: 28 additions & 16 deletions examples/append_object.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,41 +17,53 @@
import io
from urllib.request import urlopen

from examples.progress import Progress
from minio import Minio

client = Minio(
"play.min.io",
endpoint="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,
bucket_name="my-bucket",
object_name="my-object",
data=io.BytesIO(b"hello, "),
length=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,
bucket_name="my-bucket",
object_name="my-object",
data=io.BytesIO(b"world"),
length=5,
)
print(f"appended {result.object_name} object; etag: {result.etag}")

# Append data in chunks.
data = urlopen(
with 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}")
) as stream:
result = client.append_object(
bucket_name="my-bucket",
object_name="my-object",
stream=stream,
length=148611164,
chunk_size=5*1024*1024,
)
print(f"appended {result.object_name} object; etag: {result.etag}")

# Append unknown sized data.
data = urlopen(
with 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}")
) as stream:
result = client.append_object(
bucket_name="my-bucket",
object_name="my-object",
stream=stream,
chunk_size=5*1024*1024,
)
print(f"appended {result.object_name} object; etag: {result.etag}")
4 changes: 2 additions & 2 deletions examples/bucket_exists.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,12 +17,12 @@
from minio import Minio

client = Minio(
"play.min.io",
endpoint="play.min.io",
access_key="Q3AM3UQ867SPQQA43P2F",
secret_key="zuf+tfteSlswRu7BJ86wekitnifILbZam1KYY3TG",
)

if client.bucket_exists("my-bucket"):
if client.bucket_exists(bucket_name="my-bucket"):
print("my-bucket exists")
else:
print("my-bucket does not exist")
35 changes: 25 additions & 10 deletions examples/compose_object.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,33 +19,48 @@
from minio.sse import SseS3

client = Minio(
"play.min.io",
endpoint="play.min.io",
access_key="Q3AM3UQ867SPQQA43P2F",
secret_key="zuf+tfteSlswRu7BJ86wekitnifILbZam1KYY3TG",
)

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"),
ComposeSource(
bucket_name="my-job-bucket", object_name="my-object-part-one",
),
ComposeSource(
bucket_name="my-job-bucket", object_name="my-object-part-two",
),
ComposeSource(
bucket_name="my-job-bucket", object_name="my-object-part-three",
),
]

# Create my-bucket/my-object by combining source object
# list.
result = client.compose_object("my-bucket", "my-object", sources)
result = client.compose_object(
bucket_name="my-bucket",
object_name="my-object",
sources=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"},
bucket_name="my-bucket",
object_name="my-object",
sources=sources,
user_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())
client.compose_object(
bucket_name="my-bucket",
object_name="my-object",
sources=sources,
sse=SseS3(),
)
print(result.object_name, result.version_id)
31 changes: 17 additions & 14 deletions examples/copy_object.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,38 +20,41 @@
from minio.commonconfig import REPLACE, CopySource

client = Minio(
"play.min.io",
endpoint="play.min.io",
access_key="Q3AM3UQ867SPQQA43P2F",
secret_key="zuf+tfteSlswRu7BJ86wekitnifILbZam1KYY3TG",
)

# copy an object from a bucket to another.
result = client.copy_object(
"my-bucket",
"my-object",
CopySource("my-sourcebucket", "my-sourceobject"),
bucket_name="my-bucket",
object_name="my-object",
source=CopySource(
bucket_name="my-sourcebucket", object_name="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",
bucket_name="my-bucket",
object_name="my-object",
source=CopySource(
bucket_name="my-sourcebucket",
object_name="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,
bucket_name="my-bucket",
object_name="my-object",
source=CopySource(
bucket_name="my-sourcebucket", object_name="my-sourceobject",
),
user_metadata={"test_meta_key": "test_meta_value"},
metadata_directive=REPLACE,
)
print(result.object_name, result.version_id)
4 changes: 2 additions & 2 deletions examples/delete_bucket_encryption.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,9 @@
from minio import Minio

client = Minio(
"play.min.io",
endpoint="play.min.io",
access_key="Q3AM3UQ867SPQQA43P2F",
secret_key="zuf+tfteSlswRu7BJ86wekitnifILbZam1KYY3TG",
)

client.delete_bucket_encryption("my-bucket")
client.delete_bucket_encryption(bucket_name="my-bucket")
4 changes: 2 additions & 2 deletions examples/delete_bucket_lifecycle.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,9 @@
from minio import Minio

client = Minio(
"play.min.io",
endpoint="play.min.io",
access_key="Q3AM3UQ867SPQQA43P2F",
secret_key="zuf+tfteSlswRu7BJ86wekitnifILbZam1KYY3TG",
)

client.delete_bucket_lifecycle("my-bucket")
client.delete_bucket_lifecycle(bucket_name="my-bucket")
4 changes: 2 additions & 2 deletions examples/delete_bucket_notification.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,9 @@
from minio import Minio

client = Minio(
"play.min.io",
endpoint="play.min.io",
access_key="Q3AM3UQ867SPQQA43P2F",
secret_key="zuf+tfteSlswRu7BJ86wekitnifILbZam1KYY3TG",
)

client.delete_bucket_notification("my-bucket")
client.delete_bucket_notification(bucket_name="my-bucket")
4 changes: 2 additions & 2 deletions examples/delete_bucket_policy.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,9 @@
from minio import Minio

client = Minio(
"play.min.io",
endpoint="play.min.io",
access_key="Q3AM3UQ867SPQQA43P2F",
secret_key="zuf+tfteSlswRu7BJ86wekitnifILbZam1KYY3TG",
)

client.delete_bucket_policy("my-bucket")
client.delete_bucket_policy(bucket_name="my-bucket")
4 changes: 2 additions & 2 deletions examples/delete_bucket_replication.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,9 @@
from minio import Minio

client = Minio(
"play.min.io",
endpoint="play.min.io",
access_key="Q3AM3UQ867SPQQA43P2F",
secret_key="zuf+tfteSlswRu7BJ86wekitnifILbZam1KYY3TG",
)

client.delete_bucket_replication("my-bucket")
client.delete_bucket_replication(bucket_name="my-bucket")
4 changes: 2 additions & 2 deletions examples/delete_bucket_tags.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,9 @@
from minio import Minio

client = Minio(
"play.min.io",
endpoint="play.min.io",
access_key="Q3AM3UQ867SPQQA43P2F",
secret_key="zuf+tfteSlswRu7BJ86wekitnifILbZam1KYY3TG",
)

client.delete_bucket_tags("my-bucket")
client.delete_bucket_tags(bucket_name="my-bucket")
4 changes: 2 additions & 2 deletions examples/delete_object_lock_config.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,9 @@
from minio import Minio

client = Minio(
"play.min.io",
endpoint="play.min.io",
access_key="Q3AM3UQ867SPQQA43P2F",
secret_key="zuf+tfteSlswRu7BJ86wekitnifILbZam1KYY3TG",
)

client.delete_object_lock_config("my-bucket")
client.delete_object_lock_config(bucket_name="my-bucket")
4 changes: 2 additions & 2 deletions examples/delete_object_tags.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,9 @@
from minio import Minio

client = Minio(
"play.min.io",
endpoint="play.min.io",
access_key="Q3AM3UQ867SPQQA43P2F",
secret_key="zuf+tfteSlswRu7BJ86wekitnifILbZam1KYY3TG",
)

client.delete_object_tags("my-bucket", "my-object")
client.delete_object_tags(bucket_name="my-bucket", object_name="my-object")
6 changes: 4 additions & 2 deletions examples/disable_object_legal_hold.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,11 @@
from minio import Minio

client = Minio(
"play.min.io",
endpoint="play.min.io",
access_key="Q3AM3UQ867SPQQA43P2F",
secret_key="zuf+tfteSlswRu7BJ86wekitnifILbZam1KYY3TG",
)

client.disable_object_legal_hold("my-bucket", "my-object")
client.disable_object_legal_hold(
bucket_name="my-bucket", object_name="my-object",
)
6 changes: 4 additions & 2 deletions examples/enable_object_legal_hold.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,11 @@
from minio import Minio

client = Minio(
"play.min.io",
endpoint="play.min.io",
access_key="Q3AM3UQ867SPQQA43P2F",
secret_key="zuf+tfteSlswRu7BJ86wekitnifILbZam1KYY3TG",
)

client.enable_object_legal_hold("my-bucket", "my-object")
client.enable_object_legal_hold(
bucket_name="my-bucket", object_name="my-object",
)
Loading