تكامل بسيط وسريع مع خدمات تخزين الكائنات مثل Amazon S3 وGoogle Cloud Storage وAzure Blob Storage وواجهات برمجة التطبيقات المتوافقة مع S3 مثل Cloudflare R2.
list
التدفق، دون الحاجة إلى ترقيم الصفحات.list
/ dict
في Python.get_range
و get_ranges
.boto3.Session
لتثبيت obstore باستخدام النقطة:
pip install obstore
Obstore موجود على conda-forge ويمكن تثبيته باستخدام conda أو mamba أو pixi. لتثبيت obstore باستخدام conda:
conda install -c conda-forge obstore
الوثائق الكاملة متاحة على الموقع.
يتم تصدير الفئات المخصصة لإنشاء متجر من الوحدة الفرعية 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
: نقل كائن من مسار إلى آخر في نفس مخزن العناصر.هناك عدد قليل من واجهات برمجة التطبيقات الإضافية المفيدة لحالات استخدام محددة:
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!"
اقرأ مقارنة تفصيلية مع مكتبة object-store-python
، وهي مكتبة Python سابقة تحتوي أيضًا على نفس صندوق Rust object_store
.