rw#

Read and write related API.

class s3pathlib.core.rw.ReadAndWriteAPIMixin[source]#

A mixin class that implements the Text / Bytes, Read / Write methods.

read_bytes(version_id: str = Sentinel('NOTHING'), if_match: str = Sentinel('NOTHING'), if_modified_since: datetime = Sentinel('NOTHING'), if_none_match: str = Sentinel('NOTHING'), if_unmodified_since: datetime = Sentinel('NOTHING'), range: str = Sentinel('NOTHING'), response_cache_control: str = Sentinel('NOTHING'), response_content_disposition: str = Sentinel('NOTHING'), response_content_encoding: str = Sentinel('NOTHING'), response_content_language: str = Sentinel('NOTHING'), response_content_type: str = Sentinel('NOTHING'), response_expires: str = Sentinel('NOTHING'), sse_customer_algorithm: str = Sentinel('NOTHING'), sse_customer_key: str = Sentinel('NOTHING'), request_payer: str = Sentinel('NOTHING'), part_number: int = Sentinel('NOTHING'), expected_bucket_owner: str = Sentinel('NOTHING'), checksum_mode: str = Sentinel('NOTHING'), bsm: BotoSesManager | None = None) bytes[source]#

Read binary data from s3 object. A simple wrapper around get_object.

It also updates this S3Path object’s metadata and attributes like etag, size, version_id, etc with the get_object response.

Example:

>>> s3path = S3Path.from_s3_uri("s3://my-bucket/my-file.txt")
>>> s3path.write_bytes(b"hello", metadata={"creator": "me"})
>>> s3path.read_bytes()
b'hello'
>>> s3path.size
5
>>> s3path.metadata
{'creator': 'me'}
Parameters:
Returns:

the binary data.

New in version 1.0.3.

Changed in version 1.1.2: automatically store metadata in cache.

Changed in version 2.0.1: add version_id parameter, and now support full list of get_object arguments.

read_text(encoding='utf-8', errors='strict', version_id: str = Sentinel('NOTHING'), if_match: str = Sentinel('NOTHING'), if_modified_since: datetime = Sentinel('NOTHING'), if_none_match: str = Sentinel('NOTHING'), if_unmodified_since: datetime = Sentinel('NOTHING'), range: str = Sentinel('NOTHING'), response_cache_control: str = Sentinel('NOTHING'), response_content_disposition: str = Sentinel('NOTHING'), response_content_encoding: str = Sentinel('NOTHING'), response_content_language: str = Sentinel('NOTHING'), response_content_type: str = Sentinel('NOTHING'), response_expires: str = Sentinel('NOTHING'), sse_customer_algorithm: str = Sentinel('NOTHING'), sse_customer_key: str = Sentinel('NOTHING'), request_payer: str = Sentinel('NOTHING'), part_number: int = Sentinel('NOTHING'), expected_bucket_owner: str = Sentinel('NOTHING'), checksum_mode: str = Sentinel('NOTHING'), bsm: BotoSesManager | None = None) str[source]#

Read text data from s3 object. A simple wrapper around get_object.

It also updates this S3Path object’s metadata and attributes like etag, size, version_id, etc with the get_object response.

Example:

>>> s3path = S3Path("s3://my-bucket/my-file.txt")
>>> s3path.write_text("hello", metadata={"creator": "me"})
>>> s3path.read_text()
'hello'
>>> s3path.size
5
>>> s3path.metadata
{'creator': 'me'}
Parameters:
Returns:

the string data.

New in version 1.0.3.

Changed in version 1.1.2: automatically store metadata in cache.

Changed in version 2.0.1: add version_id parameter, and now support full list of get_object arguments.

write_bytes(data: bytes, metadata: Dict[str, str] = Sentinel('NOTHING'), tags: Dict[str, str] = Sentinel('NOTHING'), acl: str = Sentinel('NOTHING'), cache_control: str = Sentinel('NOTHING'), content_disposition: str = Sentinel('NOTHING'), content_encoding: str = Sentinel('NOTHING'), content_language: str = Sentinel('NOTHING'), content_length: int = Sentinel('NOTHING'), content_md5: str = Sentinel('NOTHING'), content_type: str = Sentinel('NOTHING'), checksum_algorithm: str = Sentinel('NOTHING'), checksum_crc32: str = Sentinel('NOTHING'), checksum_crc32c: str = Sentinel('NOTHING'), checksum_sha1: str = Sentinel('NOTHING'), checksum_sha256: str = Sentinel('NOTHING'), expires_datetime: datetime = Sentinel('NOTHING'), grant_full_control: str = Sentinel('NOTHING'), grant_read: str = Sentinel('NOTHING'), grant_read_acp: str = Sentinel('NOTHING'), grant_write_acp: str = Sentinel('NOTHING'), server_side_encryption: str = Sentinel('NOTHING'), storage_class: str = Sentinel('NOTHING'), website_redirect_location: str = Sentinel('NOTHING'), sse_customer_algorithm: str = Sentinel('NOTHING'), sse_customer_key: str = Sentinel('NOTHING'), sse_kms_key_id: str = Sentinel('NOTHING'), sse_kms_encryption_context: str = Sentinel('NOTHING'), bucket_key_enabled: bool = Sentinel('NOTHING'), request_payer: str = Sentinel('NOTHING'), object_lock_mode: str = Sentinel('NOTHING'), object_lock_retain_until_datetime: datetime = Sentinel('NOTHING'), object_lock_legal_hold_status: str = Sentinel('NOTHING'), expected_bucket_owner: str = Sentinel('NOTHING'), bsm: BotoSesManager | None = None) S3Path[source]#

Write binary data to s3 object. A simple wrapper around put_object.

Example:

>>> s3path = S3Path("s3://my-bucket/my-file.txt")
>>> s3path.write_bytes(b"hello", metadata={"creator": "me"})
>>> s3path.size
5
>>> s3path.metadata
{'creator': 'me'}
Parameters:
Returns:

A new S3Path object with the same bucket and key, but the new metadata representing the object you just put.

New in version 1.0.3.

Changed in version 1.1.1: add metadata and tags parameters.

write_text(data: str, encoding: str = 'utf-8', errors: str = 'strict', metadata: Dict[str, str] = Sentinel('NOTHING'), tags: Dict[str, str] = Sentinel('NOTHING'), acl: str = Sentinel('NOTHING'), cache_control: str = Sentinel('NOTHING'), content_disposition: str = Sentinel('NOTHING'), content_encoding: str = Sentinel('NOTHING'), content_language: str = Sentinel('NOTHING'), content_length: int = Sentinel('NOTHING'), content_md5: str = Sentinel('NOTHING'), content_type: str = Sentinel('NOTHING'), checksum_algorithm: str = Sentinel('NOTHING'), checksum_crc32: str = Sentinel('NOTHING'), checksum_crc32c: str = Sentinel('NOTHING'), checksum_sha1: str = Sentinel('NOTHING'), checksum_sha256: str = Sentinel('NOTHING'), expires_datetime: datetime = Sentinel('NOTHING'), grant_full_control: str = Sentinel('NOTHING'), grant_read: str = Sentinel('NOTHING'), grant_read_acp: str = Sentinel('NOTHING'), grant_write_acp: str = Sentinel('NOTHING'), server_side_encryption: str = Sentinel('NOTHING'), storage_class: str = Sentinel('NOTHING'), website_redirect_location: str = Sentinel('NOTHING'), sse_customer_algorithm: str = Sentinel('NOTHING'), sse_customer_key: str = Sentinel('NOTHING'), sse_kms_key_id: str = Sentinel('NOTHING'), sse_kms_encryption_context: str = Sentinel('NOTHING'), bucket_key_enabled: bool = Sentinel('NOTHING'), request_payer: str = Sentinel('NOTHING'), object_lock_mode: str = Sentinel('NOTHING'), object_lock_retain_until_datetime: datetime = Sentinel('NOTHING'), object_lock_legal_hold_status: str = Sentinel('NOTHING'), expected_bucket_owner: str = Sentinel('NOTHING'), bsm: BotoSesManager | None = None) S3Path[source]#

Write text to s3 object. A simple wrapper around put_object.

Example:

>>> s3path = S3Path("s3://my-bucket/my-file.txt")
>>> s3path.write_text("hello", metadata={"creator": "me"})
>>> s3path.size
5
>>> s3path.metadata
{'creator': 'me'}
Parameters:
Returns:

A new S3Path object with the same bucket and key, but the new metadata representing the object you just put.

New in version 1.0.3.

Changed in version 1.1.1: add metadata and tags parameters.

touch(exist_ok: bool = False, metadata: Dict[str, str] = Sentinel('NOTHING'), tags: Dict[str, str] = Sentinel('NOTHING'), acl: str = Sentinel('NOTHING'), cache_control: str = Sentinel('NOTHING'), content_disposition: str = Sentinel('NOTHING'), content_encoding: str = Sentinel('NOTHING'), content_language: str = Sentinel('NOTHING'), content_length: int = Sentinel('NOTHING'), content_md5: str = Sentinel('NOTHING'), content_type: str = Sentinel('NOTHING'), checksum_algorithm: str = Sentinel('NOTHING'), checksum_crc32: str = Sentinel('NOTHING'), checksum_crc32c: str = Sentinel('NOTHING'), checksum_sha1: str = Sentinel('NOTHING'), checksum_sha256: str = Sentinel('NOTHING'), expires_datetime: datetime = Sentinel('NOTHING'), grant_full_control: str = Sentinel('NOTHING'), grant_read: str = Sentinel('NOTHING'), grant_read_acp: str = Sentinel('NOTHING'), grant_write_acp: str = Sentinel('NOTHING'), server_side_encryption: str = Sentinel('NOTHING'), storage_class: str = Sentinel('NOTHING'), website_redirect_location: str = Sentinel('NOTHING'), sse_customer_algorithm: str = Sentinel('NOTHING'), sse_customer_key: str = Sentinel('NOTHING'), sse_kms_key_id: str = Sentinel('NOTHING'), sse_kms_encryption_context: str = Sentinel('NOTHING'), bucket_key_enabled: bool = Sentinel('NOTHING'), request_payer: str = Sentinel('NOTHING'), object_lock_mode: str = Sentinel('NOTHING'), object_lock_retain_until_datetime: datetime = Sentinel('NOTHING'), object_lock_legal_hold_status: str = Sentinel('NOTHING'), expected_bucket_owner: str = Sentinel('NOTHING'), bsm: BotoSesManager | None = None)[source]#

Create an empty S3 object at the S3 location if the S3 object not exists. Do nothing if already exists.

Example:

>>> s3path = S3Path("s3://my-bucket/my-file.txt")
>>> s3path.write_text("hello", metadata={"creator": "me"})
>>> s3path.size
5
>>> s3path.metadata
{'creator': 'me'}
Parameters:

New in version 1.0.6.

Changed in version 1.2.1: add metadata and tags parameters.

mkdir(exist_ok: bool = False, parents: bool = False, bsm: BotoSesManager | None = None)[source]#

Make an S3 folder (empty “/” file)

Example:

>>> s3dir = S3Path("s3://my-bucket/my-folder/").to_dir()
>>> s3dir.to_dir(exist_ok=True)
Parameters:
  • exist_ok – If True, it won’t raise error when the S3 folder already exists.

  • parents – If True, all parent folders will be created.

  • bsm – See bsm.

New in version 1.0.6.