docs: def get_path(self, appendix=None, by_name=False):
          """ Recursively create the path of the state.
  
          The path is generated in bottom up method i.e. from the nested child states to the root state. The method
          concatenates either State.state_id (always unique) or State.name (maybe not unique but human readable) as
          state identifier for the path.
  
          :param str appendix: the part of the path that was already calculated by previous function calls
          :param bool by_name: The boolean enables name usage to generate the path
          :rtype: str
          :return: the full path to the root state
          """
          if by_name:
              state_identifier = self.name
          else:
              state_identifier = self.state_id
  
          if not self.is_root_state:
              if appendix is None:
                  return self.parent.get_path(state_identifier, by_name)
              else:
                  return self.parent.get_path(state_identifier + PATH_SEPARATOR + appendix, by_name)
          else:
              if appendix is None:
                  return state_identifier
              else:
                  return state_identifier + PATH_SEPARATOR + appendix