obstore
v0.2.0
Amazon S3、Google Cloud Storage、Azure Blob Storage などのオブジェクト ストレージ サービス、Cloudflare R2 などの S3 準拠 API とのシンプルかつ迅速な統合。
list
。ページネーションは必要ありません。dict
/ list
オブジェクトを実体化するよりも高速です。get_range
およびget_ranges
での Rust から Python へのゼロコピー データ交換のサポート。boto3.Session
オブジェクトから構築するためのヘルパーpip を使用して obstore をインストールするには:
pip install obstore
Obstore は conda-forge 上にあり、conda、mamba、または pixi を使用してインストールできます。 conda を使用して obstore をインストールするには:
conda install -c conda-forge obstore
完全なドキュメントは Web サイトで入手できます。
ストアを構築するクラスは、 obstore.store
サブモジュールからエクスポートされます。
S3Store
: Amazon S3 への接続を設定します。GCSStore
: Google Cloud Storage への接続を構成します。AzureStore
: Microsoft Azure Blob Storage への接続を構成します。HTTPStore
: 汎用 HTTP サーバーへの接続を構成しますLocalStore
: 同じオブジェクト ストア インターフェイスを提供するローカル ファイルシステム ストレージ。MemoryStore
: ObjectStore の完全なメモリ内実装。 import boto3
from obstore . store import S3Store
session = boto3 . Session ()
store = S3Store . from_session ( session , "bucket-name" , config = { "AWS_REGION" : "us-east-1" })
上記の各ストア クラスには独自の設定があり、 config
という名前のパラメータを通じてアクセスできます。これについてはドキュメントで説明されており、文字列リテラルは型ヒントにあります。
追加の HTTP クライアント構成は、 client_options
名前付きパラメーターを介して利用できます。
ストアと対話するためのすべてのメソッドは、( store
オブジェクトのメソッドではなく)トップレベル関数としてエクスポートされます。
copy
: 同じオブジェクト ストア内のあるパスから別のパスにオブジェクトをコピーします。delete
: 指定された場所にあるオブジェクトを削除します。get
: 指定された場所に格納されているバイトを返します。head
: 指定された場所のメタデータを返します。list
: 指定されたプレフィックスを持つすべてのオブジェクトをリストします。put
: 指定されたバイトを指定された場所に保存しますrename
: オブジェクトを同じオブジェクト ストア内のあるパスから別のパスに移動します。特定の使用例に役立つ追加の API がいくつかあります。
get_range
: ファイルから特定のバイト範囲を取得します。get_ranges
: 単一のファイルから複数のバイト範囲を取得します。list_with_delimiter
: 特定のディレクトリ内のオブジェクトをリストします。sign
: 署名付き URL を作成します。すべてのメソッドには、同じ名前に_async
サフィックスが付いている同等の非同期メソッドがあります。
import obstore as obs
store = obs . store . MemoryStore ()
obs . put ( store , "file.txt" , b"hello world!" )
response = obs . get ( store , "file.txt" )
response . meta
# {'path': 'file.txt',
# 'last_modified': datetime.datetime(2024, 10, 21, 16, 19, 45, 102620, tzinfo=datetime.timezone.utc),
# 'size': 12,
# 'e_tag': '0',
# 'version': None}
assert response . bytes () == b"hello world!"
byte_range = obs . get_range ( store , "file.txt" , offset = 0 , length = 5 )
assert byte_range == b"hello"
obs . copy ( store , "file.txt" , "other.txt" )
assert obs . get ( store , "other.txt" ). bytes () == b"hello world!"
これらのメソッドにはすべて、 _async
という接尾辞が付いたasync
メソッドもあります。
import obstore as obs
store = obs . store . MemoryStore ()
await obs . put_async ( store , "file.txt" , b"hello world!" )
response = await obs . get_async ( store , "file.txt" )
response . meta
# {'path': 'file.txt',
# 'last_modified': datetime.datetime(2024, 10, 21, 16, 20, 36, 477418, tzinfo=datetime.timezone.utc),
# 'size': 12,
# 'e_tag': '0',
# 'version': None}
assert await response . bytes_async () == b"hello world!"
byte_range = await obs . get_range_async ( store , "file.txt" , offset = 0 , length = 5 )
assert byte_range == b"hello"
await obs . copy_async ( store , "file.txt" , "other.txt" )
resp = await obs . get_async ( store , "other.txt" )
assert await resp . bytes_async () == b"hello world!"
同じ Rust object_store
クレートをラップする以前の Python ライブラリであるobject-store-python
との詳細な比較をお読みください。