docs: def is_feature_enabled(self, feature_key, user_id, attributes=None):
      """ Returns true if the feature is enabled for the given user.
  
      Args:
        feature_key: The key of the feature for which we are determining if it is enabled or not for the given user.
        user_id: ID for user.
        attributes: Dict representing user attributes.
  
      Returns:
        True if the feature is enabled for the user. False otherwise.
      """
  
      if not self.is_valid:
        self.logger.error(enums.Errors.INVALID_DATAFILE.format('is_feature_enabled'))
        return False
  
      if not validator.is_non_empty_string(feature_key):
        self.logger.error(enums.Errors.INVALID_INPUT_ERROR.format('feature_key'))
        return False
  
      if not isinstance(user_id, string_types):
        self.logger.error(enums.Errors.INVALID_INPUT_ERROR.format('user_id'))
        return False
  
      if not self._validate_user_inputs(attributes):
        return False
  
      feature = self.config.get_feature_from_key(feature_key)
      if not feature:
        return False
  
      feature_enabled = False
      source_info = {}
      decision = self.decision_service.get_variation_for_feature(feature, user_id, attributes)
      is_source_experiment = decision.source == enums.DecisionSources.FEATURE_TEST
  
      if decision.variation:
        if decision.variation.featureEnabled is True:
          feature_enabled = True
        # Send event if Decision came from an experiment.
        if is_source_experiment:
          source_info = {
            'experiment_key': decision.experiment.key,
            'variation_key': decision.variation.key
          }
          self._send_impression_event(decision.experiment,
                                      decision.variation,
                                      user_id,
                                      attributes)
  
      if feature_enabled:
        self.logger.info('Feature "%s" is enabled for user "%s".' % (feature_key, user_id))
      else:
        self.logger.info('Feature "%s" is not enabled for user "%s".' % (feature_key, user_id))
  
      self.notification_center.send_notifications(
          enums.NotificationTypes.DECISION,
          enums.DecisionNotificationTypes.FEATURE,
          user_id,
          attributes or {},
          {
            'feature_key': feature_key,
            'feature_enabled': feature_enabled,
            'source': decision.source,
            'source_info': source_info
          }
      )
  
      return feature_enabled