class_docstr: Run is an object to enable user access to properties
  
  Parameters
  ----------
  task_entity : datmo.core.entity.task.Task
      core task entity to reference
  
  Attributes
  ----------
  id : str
      the id of task associated with run
  model_id : str
      the parent model id for the entity
  before_snapshot_id : str
      id of snapshot associated before the run
  after_snapshot_id : str
      id of snapshot associated after the run
  command : str
      command that is used by the run
  type : str
      type of task, script or workspace (jupyterlab, notebook, rstudio, terminal)
  status : str or None
      status of the current run
  start_time : datetime.datetime or None
      timestamp for the beginning time of the run
  end_time : datetime.datetime or None
      timestamp for the end time of the run
  duration : float or None
      delta in seconds between start and end times
  logs : str or None
      string output of logs
  config : dict
      dictionary containing input or output configs from the run
  results : dict
      dictionary containing output results from the run
  files : list
      returns list of file objects for the run in read mode
  
  Methods
  -------
  get_files(mode="r")
      Returns a list of file objects for the run
  
  Raises
  ------
  InvalidArgumentType
class_docstr_tok: ["Run","is","an","object","to","enable","user","access","to","properties","Parameters","--","--","--","--","--","task_entity",":","datmo.core.entity.task.Task","core","task","entity","to","reference","Attributes","--","--","--","--","--","id",":","str","the","id","of","task","associated","with","run","model_id",":","str","the","parent","model","id","for","the","entity","before_snapshot_id",":","str","id","of","snapshot","associated","before","the","run","after_snapshot_id",":","str","id","of","snapshot","associated","after","the","run","command",":","str","command","that","is","used","by","the","run","type",":","str","type","of","task",",","script","or","workspace","(","jupyterlab",",","notebook",",","rstudio",",","terminal",")","status",":","str","or","None","status","of","the","current","run","start_time",":","datetime.datetime","or","None","timestamp","for","the","beginning","time","of","the","run","end_time",":","datetime.datetime","or","None","timestamp","for","the","end","time","of","the","run","duration",":","float","or","None","delta","in","seconds","between","start","and","end","times","logs",":","str","or","None","string","output","of","logs","config",":","dict","dictionary","containing","input","or","output","configs","from","the","run","results",":","dict","dictionary","containing","output","results","from","the","run","files",":","list","returns","list","of","file","objects","for","the","run","in","read","mode","Methods","--","--","--","-","get_files","(","mode=","''","r","''",")","Returns","a","list","of","file","objects","for","the","run","Raises","--","--","--","InvalidArgumentType"]
code: def __str__(self):
      final_str = "\033[94m" + "run " + self.id + os.linesep + "\033[0m"
      table_data = []
      if self.status:
          table_data.append(["Status", "-> " + self.status])
      if self.start_time:
          table_data.append(
              ["Start Time", "-> " + prettify_datetime(self.start_time)]
          )
      if self.end_time:
          table_data.append(
              ["End Time", "-> " + prettify_datetime(self.end_time)]
          )
      if self.duration:
          table_data.append(
              ["Duration", "-> " + str(self.duration) + " seconds"]
          )
      # Outputs
      if self.logs:
          table_data.append(
              ["Logs", "-> Use task log to view or download logs"]
          )
      if self.config:
          table_data.append(["Config", "-> " + str(self.config)])
      if self.results:
          table_data.append(["Results", "-> " + str(self.results)])
      if not self.files:
          table_data.append(["Files", "-> None"])
      else:
          table_data.append(["Files", "-> " + self.files[0].name])
          if len(list(self.files)) > 1:
              for f in self.files[1:]:
                  table_data.append(["     ", "-> " + f.name])
      final_str = final_str + format_table(table_data)
      final_str = (
          final_str
          + os.linesep
          + "    "
          + self.command
          + os.linesep
          + os.linesep
      )
      return final_str
  
imports: import os
  from datmo.core.controller.snapshot import SnapshotController
  from datmo.core.entity.task import Task
  from datmo.core.util.exceptions import InvalidArgumentType
  from datmo.core.util.misc_functions import printable_object, prettify_datetime, format_table
label_desc: Use image node_id 20 for calling the Run obj's underlying member method code with example usage: obj.__str__() and returns: final_str