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
전체 문서는 웹사이트에서 확인할 수 있습니다.
저장소를 구성하는 클래스는 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
과의 자세한 비교를 읽어보세요.