class_docstr: Writes Core training data into a file in a YAML format.
docstr: Converts a single action into an ordered dict.
  
  Args:
      action: Original action object.
  
  Returns:
      Dict with an action.
docstr_tok: ["Converts","a","single","action","into","an","ordered","dict",".","Args",":","action",":","Original","action","object",".","Returns",":","Dict","with","an","action","."]
code: def process_action(action: ActionExecuted) -> Optional[OrderedDict]:
      """Converts a single action into an ordered dict.
  
      Args:
          action: Original action object.
  
      Returns:
          Dict with an action.
      """
      if (
          action.action_name
          == rasa.shared.core.constants.RULE_SNIPPET_ACTION_NAME
      ):
          return None
  
      result = CommentedMap()
      if action.action_name:
          result[KEY_ACTION] = action.action_name
      elif action.action_text:
          result[KEY_BOT_END_TO_END_MESSAGE] = action.action_text
  
      if hasattr(action, "inline_comment"):
          # FIXME: to fix this type issue, WarningPredictedAction needs to
          # be imported but it's currently outside of `rasa.shared`
          comment = action.inline_comment()
          if KEY_ACTION in result and comment:
              result.yaml_add_eol_comment(comment, KEY_ACTION)
          elif KEY_BOT_END_TO_END_MESSAGE in result and comment:
              result.yaml_add_eol_comment(
                  comment, KEY_BOT_END_TO_END_MESSAGE
              )
  
      return result
  
imports: from collections import OrderedDict
  from pathlib import Path
  from typing import Any, Dict, List, Text, Union, Optional
  from ruamel import yaml
  from ruamel.yaml.comments import CommentedMap
  from ruamel.yaml.scalarstring import DoubleQuotedScalarString, LiteralScalarString
  import rasa.shared.utils.io
  import rasa.shared.core.constants
  from rasa.shared.constants import LATEST_TRAINING_DATA_FORMAT_VERSION
  import rasa.shared.core.events
  from rasa.shared.core.events import UserUttered, ActionExecuted, SlotSet, ActiveLoop, Event
  from rasa.shared.core.training_data.story_reader.yaml_story_reader import KEY_STORIES, KEY_STORY_NAME, KEY_USER_INTENT, KEY_ENTITIES, KEY_ACTION, KEY_STEPS, KEY_CHECKPOINT, KEY_SLOT_NAME, KEY_CHECKPOINT_SLOTS, KEY_OR, KEY_USER_MESSAGE, KEY_ACTIVE_LOOP, KEY_BOT_END_TO_END_MESSAGE, KEY_RULES, KEY_RULE_FOR_CONVERSATION_START, KEY_WAIT_FOR_USER_INPUT_AFTER_RULE, KEY_RULE_CONDITION, KEY_RULE_NAME
  from rasa.shared.core.training_data.story_writer.story_writer import StoryWriter
  from rasa.shared.core.training_data.structures import StoryStep, Checkpoint, STORY_START, RuleStep
label_desc: Use image node_id 8 for calling the YAMLStoryWriter obj's underlying member method code with example usage: obj.process_action(action) and returns: result, None