ผสานรวมที่ง่ายและรวดเร็วกับบริการพื้นที่จัดเก็บอ็อบเจ็กต์ เช่น Amazon S3, Google Cloud Storage, Azure Blob Storage และ API ที่สอดคล้องกับ S3 เช่น Cloudflare R2
list
สตรีมมิ่ง โดยไม่จำเป็นต้องแบ่งหน้าdict
/ list
เป็นรูปธรรมget_range
และ get_ranges
boto3.Session
วิธีติดตั้ง obstore โดยใช้ pip:
pip install obstore
Obstore อยู่บน conda-forge และสามารถติดตั้งได้โดยใช้ conda, mamba หรือ pixi วิธีติดตั้ง obstore โดยใช้ conda:
conda install -c conda-forge obstore
เอกสารฉบับเต็มมีอยู่บนเว็บไซต์
คลาสสำหรับสร้างร้านค้าจะถูกส่งออกจากโมดูลย่อย obstore.store
:
S3Store
: กำหนดค่าการเชื่อมต่อกับ Amazon S3GCSStore
: กำหนดค่าการเชื่อมต่อกับ Google Cloud StorageAzureStore
: กำหนดค่าการเชื่อมต่อกับ Microsoft Azure Blob StorageHTTPStore
: กำหนดค่าการเชื่อมต่อกับเซิร์ฟเวอร์ 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 ที่เทียบเคียงได้ซึ่งมีชื่อเดียวกันบวกกับส่วนต่อท้าย _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!"
อ่านการเปรียบเทียบโดยละเอียดกับ object-store-python
ซึ่งเป็นไลบรารี Python ก่อนหน้าที่หุ้ม Rust object_store
crate เดียวกันด้วย