class_docstr: Base class representing a step in an MLflow Recipe
docstr: :param step_config: dictionary of the config needed to
                      run/implement the step.
  :param recipe_root: String file path to the directory where step
                        are defined.
docstr_tok: [":","param","step_config",":","dictionary","of","the","config","needed","to","run\/implement","the","step",".",":","param","recipe_root",":","String","file","path","to","the","directory","where","step","are","defined","."]
code: def __init__(self, step_config: Dict[str, Any], recipe_root: str):
      """
      :param step_config: dictionary of the config needed to
                          run/implement the step.
      :param recipe_root: String file path to the directory where step
                            are defined.
      """
      self.step_config = step_config
      self.recipe_root = recipe_root
      self.recipe_name = get_recipe_name(recipe_root_path=recipe_root)
      self.task = self.step_config.get(
          "recipe", "regression/v1"
      ).rsplit("/", 1)[0]
      self.step_card = None
  
imports: import abc
  import json
  import logging
  import os
  import time
  import traceback
  from enum import Enum
  from typing import Any, Dict, List, Optional
  import yaml
  from mlflow.recipes.cards import CARD_HTML_NAME, CARD_PICKLE_NAME, BaseCard, FailureCard
  from mlflow.recipes.utils import get_recipe_name
  from mlflow.recipes.utils.step import display_html
  from mlflow.tracking import MlflowClient
  from mlflow.utils.databricks_utils import is_in_databricks_runtime
label_desc: Use image node_id 1 to create a new BaseStep object  with example: obj = BaseStep(step_config, recipe_root)