code: def _calculate_retry_delay(response, num_attempts):
      '''
      Returns the time in seconds that we should wait.
  
      :param num_attempts: number of attempts that have been made to the
          resource, including the most recent failed one
      :type num_attempts: int
      '''
      if response is not None and response.status == 503 and 'retry-after' in response.headers:
          try:
              return int(response.headers['retry-after'])
          except ValueError:
              # In RFC 2616, retry-after can be formatted as absolute time
              # instead of seconds to wait. We don't bother to parse that,
              # but the apiserver doesn't generate such responses anyway.
              pass
      if num_attempts <= 1:
          return 1
      num_attempts = min(num_attempts, 7)
      return randint(2 ** (num_attempts - 2), 2 ** (num_attempts - 1)f _calculate_retry_delay(response, num_attempts):
      '''
      Returns the time in seconds that we should wait.
  
      :param num_attempts: number of attempts that have been made to the
          resource, including the most recent failed one
      :type num_attempts: int
      '''
      if response is not None and response.status == 503 and 'retry-after' in response.headers:
          try:
              return int(response.headers['retry-after'])
          except ValueError:
              # In RFC 2616, retry-after can be formatted as absolute time
              # instead of seconds to wait. We don't bother to parse that,
              # but the apiserver doesn't generate such responses anyway.
              pass
      if num_attempts <= 1:
          return 1
      num_attempts = min(num_attempts, 7)
      return randint(2 ** (num_attempts - 2), 2 ** (num_attempts - 1))
docs: Returns the time in seconds that we should wait.
  
      :param num_attempts: number of attempts that have been made to the
          resource, including the most recent failed one
      :type num_attempts: int