code: def add_proto_attribute_value(
          pb_attributes,
          attribute_key,
          attribute_value):
      
  
      if isinstance(attribute_value, bool):
          pb_attributes.attribute_map[attribute_key].\
              bool_value = attribute_value
      elif isinstance(attribute_value, int):
          pb_attributes.attribute_map[attribute_key].\
              int_value = attribute_value
      elif isinstance(attribute_value, str):
          pb_attributes.attribute_map[attribute_key].\
              string_value.value = attribute_value
      elif isinstance(attribute_value, float):
          pb_attributes.attribute_map[attribute_key].\
              double_value = attribute_value
      else:
          pb_attributes.attribute_map[attribute_key].\
              string_value.value = str(attribute_value)
docs: Sets string, int, boolean or float value on protobuf
          span, link or annotation attributes.
  
      :type pb_attributes:
          :class: `~opencensus.proto.trace.Span.Attributes`
      :param pb_attributes: protobuf Span's attributes property
  
      :type attribute_key: str
      :param attribute_key: attribute key to set
  
      :type attribute_value: str or int or bool or float
      :param attribute_value: attribute value