code: def help(cls, task=None):
          
          if task is None:
              usage_list = []
              for task in iter(cls._tasks):
                  task_func = getattr(cls, task)
                  usage_string = "  %s %s" % (cls._prog, task_func.usage)
                  desc = task_func.__doc__.splitlines()[0]
                  usage_list.append((usage_string, desc))
              max_len = functools.reduce(lambda m, item: max(m, len(item[0])), usage_list, 0)
              print("Tasks:")
              cols = int(os.environ.get("COLUMNS", 80))
              for line, desc in usage_list:
                  task_func = getattr(cls, task)
                  if desc:
                      line = "%s%s  # %s" % (line, " " * (max_len - len(line)), desc)
                  if len(line) > cols:
                      line = line[:cols - 3] + "..."
                  print(line)
          else:
              task_func = getattr(cls, task)
              print("Usage:")
              print("  %s %s" % (cls._prog, task_func.usage))
              print("")
              print(task_func.__doc__)
docs: Describe available tasks or one specific task