azurefunctions-extensions-bindings-blob/azurefunctions/extensions/bindings/blob/blobClient.py (41 lines of code) (raw):

# Copyright (c) Microsoft Corporation. All rights reserved. # Licensed under the MIT License. import json from azure.identity import DefaultAzureCredential from azure.storage.blob import BlobServiceClient from azurefunctions.extensions.base import Datum, SdkType from .utils import get_connection_string, using_managed_identity class BlobClient(SdkType): def __init__(self, *, data: Datum) -> None: # model_binding_data properties self._data = data self._using_managed_identity = False self._version = None self._source = None self._content_type = None self._connection = None self._containerName = None self._blobName = None if self._data: self._version = data.version self._source = data.source self._content_type = data.content_type content_json = json.loads(data.content) self._connection = get_connection_string(content_json.get("Connection")) self._using_managed_identity = using_managed_identity( content_json.get("Connection") ) self._containerName = content_json.get("ContainerName") self._blobName = content_json.get("BlobName") def get_sdk_type(self): """ When using Managed Identity, the only way to create a BlobClient is through a BlobServiceClient. There are two ways to create a BlobServiceClient: 1. Through the constructor: this is the only option when using Managed Identity 2. Through from_connection_string: this is the only option when not using Managed Identity We track if Managed Identity is being used through a flag. """ if self._data: blob_service_client = ( BlobServiceClient( account_url=self._connection, credential=DefaultAzureCredential() ) if self._using_managed_identity else BlobServiceClient.from_connection_string(self._connection) ) return blob_service_client.get_blob_client( container=self._containerName, blob=self._blobName, ) else: return None