Gestire le proprietà e i metadati dei contenitori con Python

Oltre ai dati che contengono, i contenitori BLOB supportano le proprietà di sistema e i metadati definiti dall'utente. Questo articolo illustra come gestire le proprietà di sistema e i metadati definiti dall'utente con la libreria client di Archiviazione di Azure per Python.

Per informazioni sulla gestione di proprietà e metadati tramite API asincrone, vedere Impostare i metadati del contenitore in modo asincrono.

Prerequisiti

Informazioni su proprietà e metadati

  • Proprietà di sistema: proprietà di sistema su ogni risorsa di archiviazione BLOB. Alcune di esse possono essere lette o impostate, mentre altre sono di sola lettura. Dietro le quinte, alcune proprietà di sistema corrispondono a specifiche intestazioni HTTP standard. La libreria client di Archiviazione di Azure per Python gestisce automaticamente queste proprietà.

  • Metadati definiti dall'utente: i metadati definiti dall'utente sono costituiti da una o più coppie nome-valore specificate per una risorsa di archiviazione BLOB. È possibile usare i metadati per archiviare valori aggiuntivi con la risorsa. I valori di metadati sono solo per le proprie esigenze e non influiscono sul comportamento della risorsa.

    Le coppie nome/valore di metadati sono intestazioni HTTP valide e devono essere conformi alle restrizioni imposte sulle intestazioni HTTP. Per altre informazioni sui requisiti di denominazione dei metadati, vedere Nomi dei metadati.

Recuperare le proprietà del contenitore

Per recuperare le proprietà del contenitore, usare il metodo seguente:

L'esempio di codice seguente recupera le proprietà di sistema di un contenitore e scrive i valori delle proprietà in una finestra della console:

def get_properties(self, blob_service_client: BlobServiceClient, container_name):
    container_client = blob_service_client.get_container_client(container=container_name)

    properties = container_client.get_container_properties()

    print(f"Public access type: {properties.public_access}")
    print(f"Lease status: {properties.lease.status}")
    print(f"Lease state: {properties.lease.state}")
    print(f"Has immutability policy: {properties.has_immutability_policy}")

Impostare e recuperare i metadati

È possibile specificare i metadati come uno o più coppie nome-valore in una risorsa BLOB o contenitore. Per impostare i metadati, usare il metodo seguente:

L'impostazione dei metadati del contenitore sovrascrive tutti i metadati esistenti associati al contenitore. Non è possibile modificare una sola coppia nome-valore.

Il seguente codice di esempio imposta i metadati in un contenitore:

def set_metadata(self, blob_service_client: BlobServiceClient, container_name):
    container_client = blob_service_client.get_container_client(container=container_name)

    # Retrieve existing metadata, if desired
    metadata = container_client.get_container_properties().metadata

    more_metadata = {'docType': 'text', 'docCategory': 'reference'}
    metadata.update(more_metadata)

    # Set metadata on the container
    container_client.set_container_metadata(metadata=metadata)

Per recuperare i metadati, chiamare il metodo seguente:

L'esempio seguente legge i valori dei metadati:

def get_metadata(self, blob_service_client: BlobServiceClient, container_name):
    container_client = blob_service_client.get_container_client(container=container_name)

    # Retrieve existing metadata, if desired
    metadata = container_client.get_container_properties().metadata

    for k, v in metadata.items():
        print(k, v)

Impostare i metadati del contenitore in modo asincrono

La libreria client di Archiviazione BLOB di Azure per Python supporta la gestione asincrona delle proprietà e dei metadati dei contenitori. Per altre informazioni sui requisiti di configurazione del progetto, vedere Programmazione asincrona.

Seguire questa procedura per impostare i metadati del contenitore usando le API asincrone:

  1. Aggiungere le seguenti istruzioni Import:

    import asyncio
    
    from azure.identity.aio import DefaultAzureCredential
    from azure.storage.blob.aio import BlobServiceClient
    
  2. Aggiungere codice per eseguire il programma usando asyncio.run. Questa funzione esegue la coroutine passata, main() nell'esempio e gestisce il ciclo di eventi asyncio. Le coroutine vengono dichiarate con la sintassi async/await. In questo esempio, la coroutine main() crea prima di tutto il BlobServiceClient di primo livello usando async with, quindi chiama il metodo che imposta i metadati del contenitore. Si noti che solo il client di primo livello deve usare async with, poiché gli altri client creati da esso condividono lo stesso pool di connessioni.

    async def main():
        sample = ContainerSamples()
    
        # TODO: Replace <storage-account-name> with your actual storage account name
        account_url = "https://<storage-account-name>.blob.core.windows.net"
        credential = DefaultAzureCredential()
    
        async with BlobServiceClient(account_url, credential=credential) as blob_service_client:
            await sample.set_metadata(blob_service_client, "sample-container")
    
    if __name__ == '__main__':
        asyncio.run(main())
    
  3. Aggiungere il codice per impostare i metadati del contenitore. Il codice è uguale all'esempio sincrono, ad eccezione del fatto che il metodo viene dichiarato con la parola chiave async e la parola chiave await viene usata quando si chiamano i metodi get_container_properties e set_container_metadata.

    async def set_metadata(self, blob_service_client: BlobServiceClient, container_name):
        container_client = blob_service_client.get_container_client(container=container_name)
    
        # Retrieve existing metadata, if desired
        metadata = (await container_client.get_container_properties()).metadata
    
        more_metadata = {'docType': 'text', 'docCategory': 'reference'}
        metadata.update(more_metadata)
    
        # Set metadata on the container
        await container_client.set_container_metadata(metadata=metadata)
    

Con questa configurazione di base, è possibile implementare altri esempi in questo articolo come coroutine usando la sintassi async/await.

Risorse

Per altre informazioni sull'impostazione e il recupero di proprietà e metadati del contenitore tramite la libreria client di Archiviazione BLOB di Azure per Python, vedere le risorse seguenti.

Operazioni dell'API REST

Azure SDK per Python contiene librerie basate sull'API REST di Azure, che consentono di interagire con le operazioni dell'API REST tramite paradigmi Python noti. I metodi della libreria client per l'impostazione e il recupero di proprietà e metadati usano le operazioni API REST seguenti:

Il metodo get_container_properties recupera le proprietà e i metadati del contenitore chiamando sia l'operazione Get Container Properties che l'operazione Get Container Metadata.

Esempi di codice

Risorse libreria client