old_contents: #!/usr/bin/env python
  
  # --------------------------------------------------------------------------------------------
  # Copyright (c) Microsoft Corporation. All rights reserved.
  # Licensed under the MIT License. See License.txt in the project root for license information.
  # --------------------------------------------------------------------------------------------
  
  """
  Example to demonstrate utilizing azure.core.credentials.AzureSasCredential to authenticate with Event Hubs.
  """
  
  # pylint: disable=C0111
  
  import asyncio
  import os
  import time
  import hmac
  import hashlib
  import base64
  try:
      from urllib.parse import quote as url_parse_quote
  except ImportError:
      from urllib import pathname2url as url_parse_quote
  
  from azure.core.credentials import AzureSasCredential
  from azure.eventhub.aio import EventHubProducerClient
  from azure.eventhub import EventData
  
  
  def generate_sas_token(uri, sas_name, sas_value, token_ttl):
      """Performs the signing and encoding needed to generate a sas token from a sas key."""
      sas = sas_value.encode('utf-8')
      expiry = str(int(time.time() + token_ttl))
      string_to_sign = (uri + '\n' + expiry).encode('utf-8')
      signed_hmac_sha256 = hmac.HMAC(sas, string_to_sign, hashlib.sha256)
      signature = url_parse_quote(base64.b64encode(signed_hmac_sha256.digest()))
      return 'SharedAccessSignature sr={}&sig={}&se={}&skn={}'.format(uri, signature, expiry, sas_name)
  
  # Target namespace and hub must also be specified.  Consumer group is set to default unless required otherwise.
  FULLY_QUALIFIED_NAMESPACE = os.environ['EVENT_HUB_HOSTNAME']
  EVENTHUB_NAME = os.environ['EVENT_HUB_NAME']
  
  # The following part creates a SAS token. A SAS token is typically given to you after being created.
  SAS_POLICY = os.environ['EVENT_HUB_SAS_POLICY']
  SAS_KEY = os.environ['EVENT_HUB_SAS_KEY']
  
  
  async def create_with_sas_token():
      uri = "sb://{}/{}".format(FULLY_QUALIFIED_NAMESPACE, EVENTHUB_NAME)
      token_ttl = 3000  # seconds
      sas_token = generate_sas_token(uri, SAS_POLICY, SAS_KEY, token_ttl)
      # end of creating a SAS token
  
      credential = AzureSasCredential(sas_token)
      
      producer_client = EventHubProducerClient(
          fully_qualified_namespace=FULLY_QUALIFIED_NAMESPACE,
          eventhub_name=EVENTHUB_NAME,
          credential=credential,
          logging_enable=True
      )
  
      async with producer_client:
          event_data_batch = await producer_client.create_batch()
          event_data_batch.add(EventData('Single message'))
          await producer_client.send_batch(event_data_batch)
  
  
  loop = asyncio.get_event_loop()
  start_time = time.time()
  loop.run_until_complete(create_with_sas_token())
  print("Send messages in {} seconds.".format(time.time() - start_time))
  
new_contents: #!/usr/bin/env python
  
  # --------------------------------------------------------------------------------------------
  # Copyright (c) Microsoft Corporation. All rights reserved.
  # Licensed under the MIT License. See License.txt in the project root for license information.
  # --------------------------------------------------------------------------------------------
  
  """
  Example to demonstrate utilizing azure.core.credentials.AzureSasCredential to authenticate with Event Hubs.
  """
  
  # pylint: disable=C0111
  
  import asyncio
  import os
  import time
  import hmac
  import hashlib
  import base64
  try:
      from urllib.parse import quote as url_parse_quote
  except ImportError:
      from urllib import pathname2url as url_parse_quote
  
  from azure.core.credentials import AzureSasCredential
  from azure.eventhub.aio import EventHubProducerClient
  from azure.eventhub import EventData
  
  
  def generate_sas_token(uri, sas_name, sas_value, token_ttl):
      """Performs the signing and encoding needed to generate a sas token from a sas key."""
      sas = sas_value.encode('utf-8')
      expiry = str(int(time.time() + token_ttl))
      string_to_sign = (uri + '\n' + expiry).encode('utf-8')
      signed_hmac_sha256 = hmac.HMAC(sas, string_to_sign, hashlib.sha256)
      signature = url_parse_quote(base64.b64encode(signed_hmac_sha256.digest()))
      return 'SharedAccessSignature sr={}&sig={}&se={}&skn={}'.format(uri, signature, expiry, sas_name)
  
  # Target namespace and hub must also be specified.  Consumer group is set to default unless required otherwise.
  FULLY_QUALIFIED_NAMESPACE = os.environ['EVENT_HUB_HOSTNAME']
  EVENTHUB_NAME = os.environ['EVENT_HUB_NAME']
  
  # The following part creates a SAS token. A SAS token is typically given to you after being created.
  SAS_POLICY = os.environ['EVENT_HUB_SAS_POLICY']
  SAS_KEY = os.environ['EVENT_HUB_SAS_KEY']
  
  
  async def create_with_sas_token():
      uri = "sb://{}/{}".format(FULLY_QUALIFIED_NAMESPACE, EVENTHUB_NAME)
      token_ttl = 3000  # seconds
      sas_token = generate_sas_token(uri, SAS_POLICY, SAS_KEY, token_ttl)
      # end of creating a SAS token
  
      credential = AzureSasCredential(sas_token)
      
      producer_client = EventHubProducerClient(
          fully_qualified_namespace=FULLY_QUALIFIED_NAMESPACE,
          eventhub_name=EVENTHUB_NAME,
          credential=credential,
          logging_enable=True
      )
  
      async with producer_client:
          event_data_batch = await producer_client.create_batch()
          event_data_batch.add(EventData('Single message'))
          await producer_client.send_batch(event_data_batch)
  
  
  start_time = time.time()
  asyncio.run(create_with_sas_token())
  print("Send messages in {} seconds.".format(time.time() - start_time))
  
subject: Update async legacy module to newer async module in authenticate_with_azure_sas_credential_async.py (#21756)