class_docstr: Generate a report about the DataLad installation and configuration
  
  IMPORTANT: Sharing this report with untrusted parties (e.g. on the web)
  should be done with care, as it may include identifying information, and/or
  credentials or access tokens.
class_docstr_tok: ["Generate","a","report","about","the","DataLad","installation","and","configuration","IMPORTANT",":","Sharing","this","report","with","untrusted","parties","(","e.g",".","on","the","web",")","should","be","done","with","care",",","as","it","may","include","identifying","information",",","and\/or","credentials","or","access","tokens","."]
code: def __call__(
      *,
      dataset=None,
      sensitive=None,
      sections=None,
      flavor="full",
      decor=None,
      clipboard=None,
  ):
      from datalad.distribution.dataset import require_dataset
      from datalad.support.exceptions import NoDatasetFound
      from datalad.interface.results import get_status_dict
  
      ds = None
      try:
          ds = require_dataset(
              dataset, check_installed=False, purpose="report"
          )
      except NoDatasetFound:
          # failure is already logged
          pass
      if ds and not ds.is_installed():
          # warn that the dataset is bogus
          yield dict(
              action="wtf",
              path=ds.path,
              status="impossible",
              message=(
                  "No dataset found at %s. Reporting on the dataset is "
                  "not attempted.",
                  ds.path,
              ),
              logger=lgr,
          )
          # we don't deal with absent datasets
          ds = None
      if sensitive:
          if ds is None:
              from datalad import cfg
          else:
              cfg = ds.config
      else:
          cfg = None
  
      from datalad.ui import ui
      from datalad.support.external_versions import external_versions
  
      infos = dict()
      res = get_status_dict(
          action="wtf",
          path=ds.path if ds else ensure_unicode(op.abspath(op.curdir)),
          type="dataset" if ds else "directory",
          status="ok",
          logger=lgr,
          decor=decor,
          infos=infos,
          flavor=flavor,
      )
  
      # Define section callables which require variables.
      # so there is no side-effect on module level original
      section_callables = SECTION_CALLABLES.copy()
      section_callables["location"] = partial(_describe_location, res)
      section_callables["configuration"] = partial(
          _describe_configuration, cfg, sensitive
      )
      if ds:
          section_callables["dataset"] = partial(
              _describe_dataset, ds, sensitive
          )
      else:
          section_callables.pop("dataset")
      assert all(section_callables.values())  # check if none was missed
  
      asked_for_all_sections = sections is not None and any(
          s == "*" for s in sections
      )
      if sections is None or asked_for_all_sections:
          if flavor == "full" or asked_for_all_sections:
              sections = sorted(list(section_callables))
          elif flavor == "short":
              sections = ["datalad", "dependencies"]
          else:
              raise ValueError(flavor)
  
      # flatten and handle (skip with a record non-matching ones) section groups
      for sg in sections:
          try:
              for s in SECTION_CALLABLES_GROUPPED[sg]:
                  infos[s] = section_callables[s]()
          except KeyError as exc:
              yield get_status_dict(
                  action="wtf",
                  path=Path.cwd(),
                  status="impossible",
                  message=(
                      "Requested section <%s> was not found among the "
                      "available infos. Skipping report.",
                      exc.args[0],
                  ),
                  logger=lgr,
              )
  
      if clipboard:
          external_versions.check(
              "pyperclip",
              msg="It is needed to be able to use clipboard",
          )
          import pyperclip
  
          report = _render_report(res)
          pyperclip.copy(report)
          ui.message(
              "WTF information of length %s copied to clipboard"
              % len(report)
          )
      yield res
      return
  
imports: import logging
  import os
  import os.path
  import sys
  import tempfile
  import textwrap
  from collections import defaultdict
  from functools import partial
  from datalad.dochelpers import get_docstring_split
  from datalad.interface.base import Interface, build_doc
  from datalad.utils import ensure_unicode, getpwd, unlink, Path
  from datalad.support.external_versions import external_versions
  from datalad.support.exceptions import CapturedException, CommandError, InvalidGitRepositoryError
  from datalad import __version__
label_desc: Use image node_id 1 for calling the WTF obj's underlying member method code with example usage: obj.__call__() without return types