Integrasi yang sederhana dan cepat dengan layanan penyimpanan objek seperti Amazon S3, Google Cloud Storage, Azure Blob Storage, dan API yang sesuai dengan S3 seperti Cloudflare R2.
list
streaming, tanpa perlu membuat halaman.dict
/ list
Python.get_range
dan get_ranges
.boto3.Session
Untuk menginstal obstore menggunakan pip:
pip install obstore
Obstore ada di conda-forge dan dapat diinstal menggunakan conda, mamba, atau pixi. Untuk menginstal obstore menggunakan conda:
conda install -c conda-forge obstore
Dokumentasi lengkap tersedia di situs web.
Kelas untuk membangun toko diekspor dari submodul obstore.store
:
S3Store
: Konfigurasikan koneksi ke Amazon S3.GCSStore
: Konfigurasikan koneksi ke Google Cloud Storage.AzureStore
: Konfigurasikan koneksi ke Microsoft Azure Blob Storage.HTTPStore
: Konfigurasikan koneksi ke server HTTP generikLocalStore
: Penyimpanan sistem file lokal yang menyediakan antarmuka penyimpanan objek yang sama.MemoryStore
: Implementasi ObjectStore yang sepenuhnya ada di dalam memori. import boto3
from obstore . store import S3Store
session = boto3 . Session ()
store = S3Store . from_session ( session , "bucket-name" , config = { "AWS_REGION" : "us-east-1" })
Setiap kelas toko di atas memiliki konfigurasinya sendiri, dapat diakses melalui parameter bernama config
. Hal ini tercakup dalam dokumen, dan string literal ada dalam petunjuk tipe.
Konfigurasi klien HTTP tambahan tersedia melalui parameter bernama client_options
.
Semua metode untuk berinteraksi dengan toko diekspor sebagai fungsi tingkat atas (bukan metode pada objek store
):
copy
: Menyalin objek dari satu jalur ke jalur lain di penyimpanan objek yang sama.delete
: Menghapus objek di lokasi yang ditentukan.get
: Mengembalikan byte yang disimpan di lokasi yang ditentukan.head
: Mengembalikan metadata untuk lokasi yang ditentukanlist
: Daftar semua objek dengan awalan yang diberikan.put
: Menyimpan byte yang disediakan ke lokasi yang ditentukanrename
: Memindahkan objek dari satu jalur ke jalur lainnya di penyimpanan objek yang sama.Ada beberapa API tambahan yang berguna untuk kasus penggunaan tertentu:
get_range
: Dapatkan rentang byte tertentu dari sebuah file.get_ranges
: Dapatkan beberapa rentang byte dari satu file.list_with_delimiter
: Daftar objek dalam direktori tertentu.sign
: Buat URL yang ditandatangani. Semua metode memiliki metode async yang sebanding dengan nama yang sama ditambah akhiran _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!"
Semua metode ini juga memiliki rekanan async
, yang diakhiri dengan _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!"
Baca perbandingan mendetail dengan object-store-python
, pustaka Python sebelumnya yang juga membungkus peti Rust object_store
yang sama.