Administración de propiedades y metadatos de contenedor con Python
Los contenedores de blobs admiten propiedades del sistema y metadatos definidos por el usuario, además de los datos que contienen. En este artículo se muestra cómo administrar propiedades del sistema y metadatos definidos por el usuario con la biblioteca cliente de Azure Storage para Python.
Para aprender a administrar propiedades y metadatos mediante API asincrónicas, consulte Establecimiento de metadatos de contenedor de forma asincrónica.
Requisitos previos
- Una suscripción a Azure: cree una cuenta gratuita
- Una cuenta de Azure Storage: cree una cuenta de almacenamiento
- Python 3.8 y versiones posteriores
Configurar el entorno
Si no tiene un proyecto existente, en esta sección se muestra cómo configurar uno para que funcione con la biblioteca cliente de Azure Blob Storage para Python. Para más información, vea Introducción a Azure Blob Storage y Python.
Para trabajar con los ejemplos de código de este artículo, siga los pasos siguientes a fin de configurar el proyecto.
Instalar paquetes
Instale los siguientes paquetes mediante pip install
:
pip install azure-storage-blob azure-identity
Adición de instrucciones import
Agregue las instrucciones siguientes import
:
from azure.identity import DefaultAzureCredential
from azure.storage.blob import BlobServiceClient
Authorization
El mecanismo de autorización debe tener los permisos necesarios para trabajar con propiedades o metadatos del contenedor. Para la autorización con Microsoft Entra ID (recomendada), necesita el rol integrado de RBAC de Azure Lector de datos de Storage Blob o superior para las operaciones get, y el rol Colaborador de datos de blobs de Almacenamiento o superior para las operaciones set. Para obtener más información, consulte la guía de autorización para Obtener propiedades de contenedor (API de REST), Establecer metadatos de contenedor (API de REST) u Obtener metadatos de contenedor (API de REST).
Creación de un objeto de cliente
Para conectar una aplicación a Blob Storage, cree una instancia de BlobServiceClient. En el ejemplo siguiente se muestra cómo crear un objeto de cliente mediante DefaultAzureCredential
para la autorización:
# TODO: Replace <storage-account-name> with your actual storage account name
account_url = "https://<storage-account-name>.blob.core.windows.net"
credential = DefaultAzureCredential()
# Create the BlobServiceClient object
blob_service_client = BlobServiceClient(account_url, credential=credential)
También puede crear objetos de cliente para contenedores o blobs específicos ya sea directamente o desde el objeto BlobServiceClient
. Para obtener más información sobre cómo crear y administrar objetos de cliente, consulte Crear y administrar objetos de cliente que interactúan con los recursos de datos.
Acerca de las propiedades y los metadatos
Propiedades del sistema: en cada recurso de Blob Storage existen propiedades del sistema. Algunas se pueden leer o establecer, mientras que otras son de solo lectura. En segundo plano, algunas propiedades del sistema corresponden a ciertos encabezados HTTP estándar. La biblioteca cliente de Azure Storage para Python mantiene estas propiedades automáticamente.
Metadatos definidos por el usuario: los metadatos definidos por el usuario se componen de uno o más pares nombre-valor que especifica para un recurso de almacenamiento de blobs. Puede usar metadatos para almacenar valores adicionales con el recurso. Los valores de metadatos se proporcionan para uso personal y no afectan a cómo se comporta el recurso.
Los pares de nombre/valor de metadatos son encabezados HTTP válidos y deben cumplir todas las restricciones que gobiernan los encabezados HTTP. Para obtener más información sobre los requisitos de nomenclatura de metadatos, consulte Nombres de metadatos.
Recuperación de las propiedades del contenedor
Para recuperar las propiedades del contenedor, use el método siguiente:
En el ejemplo de código siguiente se capturan las propiedades del sistema de un contenedor y se escriben los valores de propiedad en una ventana de la consola:
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}")
Establecimiento y recuperación de metadatos
Puede especificar metadatos como uno o más pares nombre-valor en un recurso de blob o contenedor. Para establecer metadatos, use el método siguiente:
Al establecer metadatos de contenedor, se sobrescriben todos los metadatos existentes asociados al contenedor. No es posible modificar un par nombre-valor individual.
El ejemplo de código siguiente establece los metadatos en un contenedor:
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 metadatos, llame al método siguiente:
En el ejemplo siguiente se leen los valores de metadatos:
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)
Establecimiento de metadatos de contenedor de forma asincrónica
La biblioteca cliente de Azure Blob Storage para Python admite la administración de metadatos y propiedades de contenedor de forma asincrónica. Para obtener más información sobre los requisitos de configuración del proyecto, consulte Programación asincrónica.
Siga estos pasos para establecer los metadatos de contenedor mediante API asincrónicas:
Agregue las siguientes instrucciones import:
import asyncio from azure.identity.aio import DefaultAzureCredential from azure.storage.blob.aio import BlobServiceClient
Agregue código para ejecutar el programa mediante
asyncio.run
. Esta función ejecuta la corrutina pasada,main()
en nuestro ejemplo, y administra el bucle de eventosasyncio
. Las corrutinas se declaran con la sintaxis async/await. En este ejemplo, la corrutinamain()
crea primero el elementoBlobServiceClient
de nivel superior medianteasync with
y, luego, llama al método que establece los metadatos de contenedor. Tenga en cuenta que solo el cliente de nivel superior debe usarasync with
, ya que otros clientes creados a partir de él comparten el mismo grupo de conexiones.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())
Agregue código para establecer los metadatos de contenedor. El código es el mismo que el ejemplo sincrónico, salvo que el método se declara con la palabra clave
async
y la palabra claveawait
se usa al llamar a los métodosget_container_properties
yset_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 esta configuración básica, puede implementar otros ejemplos de este artículo como corrutinas mediante la sintaxis async/await.
Recursos
Para más información sobre cómo establecer y recuperar propiedades y metadatos de contenedor mediante la biblioteca cliente de Azure Blob Storage para Python, consulte los siguientes recursos.
Ejemplos de código
- Ver ejemplo de código sincrónicos o asincrónicos de este artículo (GitHub)
Operaciones de API REST
El SDK de Azure para Python contiene bibliotecas que se crean a partir de la API REST de Azure, lo que le permite interactuar con las operaciones de API REST a través de paradigmas conocidos de Python. Los métodos de la biblioteca cliente para establecer y recuperar propiedades y metadatos usan las siguientes operaciones de la API REST:
- Get Container Properties (API REST)
- Set Container Metadata (API REST)
- Get Container Metadata (API REST)
El método get_container_properties
recupera propiedades y metadatos de contenedor mediante la llamada a la operación Obtener propiedades de contenedor y Obtener metadatos de contenedor.
Recursos de la biblioteca cliente
- Documentación de referencia de la biblioteca cliente
- Código fuente de la biblioteca del cliente
- Paquete (PyPi)
Contenido relacionado
- Este artículo forma parte de la guía para desarrolladores de Blob Storage para Python. Para más información, consulte la lista completa de artículos de la guía para desarrolladores en Compilación de la aplicación de Python.