Gerencie propriedades e metadados de contêiner com Python
Os contêineres de Blob suportam propriedades do sistema e metadados definidos pelo usuário, além dos dados que eles contêm. Este artigo mostra como gerenciar propriedades do sistema e metadados definidos pelo usuário com a biblioteca de cliente do Armazenamento do Azure para Python.
Para saber mais sobre como gerenciar propriedades e metadados usando APIs assíncronas, consulte Definir metadados de contêiner de forma assíncrona.
Pré-requisitos
- Este artigo pressupõe que você já tenha um projeto configurado para trabalhar com a biblioteca de cliente do Armazenamento de Blobs do Azure para Python. Para saber mais sobre como configurar seu projeto, incluindo instalação de pacote, adição de
import
instruções e criação de um objeto de cliente autorizado, consulte Introdução ao Armazenamento de Blob do Azure e Python. - O mecanismo de autorização deve ter permissões para trabalhar com propriedades ou metadados de contêiner. Para saber mais, consulte as diretrizes de autorização para as seguintes operações de API REST:
Sobre propriedades e metadados
Propriedades do sistema: as propriedades do sistema existem em cada recurso de Armazenamento de Blob. Alguns deles podem ser lidos ou definidos, enquanto outros são somente leitura. Nos bastidores, algumas propriedades do sistema correspondem a determinados cabeçalhos HTTP padrão. A biblioteca de cliente do Armazenamento do Azure para Python mantém essas propriedades para você.
Metadados definidos pelo usuário: os metadados definidos pelo usuário consistem em um ou mais pares nome-valor que você especifica para um recurso de armazenamento de Blob. Você pode usar metadados para armazenar valores adicionais com o recurso. Os valores de metadados são apenas para seus próprios fins e não afetam como o recurso se comporta.
Os pares nome/valor de metadados são cabeçalhos HTTP válidos e devem aderir a todas as restrições que regem os cabeçalhos HTTP. Para obter mais informações sobre requisitos de nomenclatura de metadados, consulte Nomes de metadados.
Recuperar propriedades do contêiner
Para recuperar propriedades de contêiner, use o seguinte método:
O exemplo de código a seguir busca as propriedades do sistema de um contêiner e grava os valores de propriedade em uma janela do 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}")
Definir e recuperar metadados
Você pode especificar metadados como um ou mais pares nome-valor em um recurso de blob ou contêiner. Para definir metadados, use o seguinte método:
A configuração de metadados de contêiner substitui todos os metadados existentes associados ao contêiner. Não é possível modificar um par nome-valor individual.
O exemplo de código a seguir define metadados em um contêiner:
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)
Para recuperar metadados, chame o seguinte método:
O exemplo a seguir lê em valores de metadados:
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)
Definir metadados de contêiner de forma assíncrona
A biblioteca de cliente do Armazenamento de Blobs do Azure para Python dá suporte ao gerenciamento assíncrono de propriedades de contêiner e metadados. Para saber mais sobre os requisitos de configuração do projeto, consulte Programação assíncrona.
Siga estas etapas para definir metadados de contêiner usando APIs assíncronas:
Adicione as seguintes instruções de importação:
import asyncio from azure.identity.aio import DefaultAzureCredential from azure.storage.blob.aio import BlobServiceClient
Adicione código para executar o programa usando
asyncio.run
o . Essa função executa a co-rotina passada,main()
em nosso exemplo, e gerencia o loop deasyncio
eventos. As co-rotinas são declaradas com a sintaxe async/await. Neste exemplo, amain()
co-rotina primeiro cria o nívelBlobServiceClient
superior usandoasync with
e, em seguida, chama o método que define os metadados do contêiner. Observe que apenas o cliente de nível superior precisa usarasync with
o , pois outros clientes criados a partir dele compartilham o mesmo pool de conexões.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())
Adicione código para definir os metadados do contêiner. O código é o mesmo que o exemplo síncrono, exceto que o método é declarado com a
async
palavra-chave e aawait
palavra-chave é usada ao chamar osget_container_properties
métodos andset_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)
Com essa configuração básica em vigor, você pode implementar outros exemplos neste artigo como co-rotinas usando a sintaxe async/await.
Recursos
Para saber mais sobre como definir e recuperar propriedades e metadados de contêiner usando a biblioteca de cliente do Armazenamento de Blobs do Azure para Python, consulte os recursos a seguir.
Operações da API REST
O SDK do Azure para Python contém bibliotecas que se baseiam na API REST do Azure, permitindo que você interaja com operações da API REST por meio de paradigmas Python familiares. Os métodos da biblioteca de cliente para definir e recuperar propriedades e metadados usam as seguintes operações da API REST:
- Obter propriedades de contêiner (API REST)
- Definir metadados de contêiner (API REST)
- Obter metadados de contêiner (API REST)
O get_container_properties
método recupera propriedades e metadados de contêiner chamando a operação Get Container Properties e a operação Get Container Metadata .
Amostras de código
- Exibir exemplos de código síncrono ou assíncrono deste artigo (GitHub)
Recursos da biblioteca do cliente
Comentários
https://aka.ms/ContentUserFeedback.
Brevemente: Ao longo de 2024, vamos descontinuar progressivamente o GitHub Issues como mecanismo de feedback para conteúdos e substituí-lo por um novo sistema de feedback. Para obter mais informações, veja:Submeter e ver comentários