code: def run_conditional_decorators(self, context):
          
          logger.debug("starting")
  
          # The decorator attributes might contain formatting expressions that
          # change whether they evaluate True or False, thus apply formatting at
          # last possible instant.
          run_me = context.get_formatted_as_type(self.run_me, out_type=bool)
          skip_me = context.get_formatted_as_type(self.skip_me, out_type=bool)
          swallow_me = context.get_formatted_as_type(self.swallow_me,
                                                     out_type=bool)
  
          if run_me:
              if not skip_me:
                  try:
                      if self.retry_decorator:
                          self.retry_decorator.retry_loop(context,
                                                          self.invoke_step)
                      else:
                          self.invoke_step(context=context)
                  except Exception as ex_info:
                      if swallow_me:
                          logger.error(
                              f"{self.name} Ignoring error because swallow "
                              "is True for this step.\n"
                              f"{type(ex_info).__name__}: {ex_info}")
                      else:
                          raise
              else:
                  logger.info(
                      f"{self.name} not running because skip is True.")
          else:
              logger.info(f"{self.name} not running because run is False.")
  
          logger.debug("done")
docs: Evaluate the step decorators to decide whether to run step or not.
  
          Use pypyr.dsl.Step.run_step if you intend on executing the step the
          same way pypyr does.
  
          Args:
              context: (pypyr.context.Context) The pypyr context. This arg will
                       mutate.