Einfache, schnelle Integration mit Objektspeicherdiensten wie Amazon S3, Google Cloud Storage, Azure Blob Storage und S3-kompatiblen APIs wie Cloudflare R2.
list
, ohne dass eine Paginierung erforderlich ist.dict
/ list
.get_range
und get_ranges
.boto3.Session
Objekten So installieren Sie obstore mit pip:
pip install obstore
Obstore ist auf Conda-Forge und kann mit Conda, Mamba oder Pixi installiert werden. So installieren Sie Obstore mit Conda:
conda install -c conda-forge obstore
Die vollständige Dokumentation ist auf der Website verfügbar.
Klassen zum Aufbau eines Stores werden aus dem Submodul obstore.store
exportiert:
S3Store
: Konfigurieren Sie eine Verbindung zu Amazon S3.GCSStore
: Konfigurieren Sie eine Verbindung zu Google Cloud Storage.AzureStore
: Konfigurieren Sie eine Verbindung zu Microsoft Azure Blob Storage.HTTPStore
: Konfigurieren Sie eine Verbindung zu einem generischen HTTP-ServerLocalStore
: Lokaler Dateisystemspeicher, der dieselbe Objektspeicherschnittstelle bereitstellt.MemoryStore
: Eine vollständig speicherinterne Implementierung von ObjectStore. import boto3
from obstore . store import S3Store
session = boto3 . Session ()
store = S3Store . from_session ( session , "bucket-name" , config = { "AWS_REGION" : "us-east-1" })
Jede der oben genannten Speicherklassen verfügt über eine eigene Konfiguration, auf die über den config
genannten Parameter zugegriffen werden kann. Dies wird in den Dokumenten behandelt und Zeichenfolgenliterale finden Sie in den Typhinweisen.
Eine zusätzliche HTTP-Clientkonfiguration ist über den benannten Parameter client_options
verfügbar.
Alle Methoden zur Interaktion mit einem Store werden als Funktionen der obersten Ebene exportiert (nicht als Methoden für das store
Objekt):
copy
: Kopieren Sie ein Objekt von einem Pfad zu einem anderen im selben Objektspeicher.delete
: Löschen Sie das Objekt am angegebenen Ort.get
: Gibt die Bytes zurück, die am angegebenen Ort gespeichert sind.head
: Gibt die Metadaten für den angegebenen Speicherort zurücklist
: Listet alle Objekte mit dem angegebenen Präfix auf.put
: Speichern Sie die bereitgestellten Bytes am angegebenen Speicherortrename
: Verschieben Sie ein Objekt von einem Pfad zu einem anderen im selben Objektspeicher.Es gibt einige zusätzliche APIs, die für bestimmte Anwendungsfälle nützlich sind:
get_range
: Holen Sie sich einen bestimmten Bytebereich aus einer Datei.get_ranges
: Mehrere Bytebereiche aus einer einzelnen Datei abrufen.list_with_delimiter
: Objekte in einem bestimmten Verzeichnis auflisten.sign
: Erstellen Sie eine signierte URL. Alle Methoden verfügen über eine vergleichbare asynchrone Methode mit demselben Namen und dem Suffix _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!"
Alle diese Methoden haben auch async
Gegenstücke mit dem Suffix _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!"
Lesen Sie einen detaillierten Vergleich mit object-store-python
, einer früheren Python-Bibliothek, die auch die gleiche Rust object_store
Kiste umschließt.