class_docstr: Type for making click options mutually exclusive.
  
  Usage:
  ```
  @option(
      '--arg-1',
      cls=MutuallyExclusiveOption,
      mutually_exclusive=["arg_2"],
      # ...
  )
  @option(
      '--arg-2',
      cls=MutuallyExclusiveOption,
      mutually_exclusive=["arg_1"],
      # ...
  )
  ```
class_docstr_tok: ["Type","for","making","click","options","mutually","exclusive",".","Usage",":","``","`","@","option","(","'","--","arg-1","'",",","cls=MutuallyExclusiveOption",",","mutually_exclusive=","[","``","arg_2","''","]",",","#","...",")","@","option","(","'","--","arg-2","'",",","cls=MutuallyExclusiveOption",",","mutually_exclusive=","[","``","arg_1","''","]",",","#","...",")","``","`"]
code: def handle_parse_result(  # type: ignore # noqa: D
      self, ctx: click.Context, opts: Dict[str, Any], args: List[str]
  ) -> Tuple[Any, List[str]]:
      mutually_exclusive_opts_present = (
          len(self.mutually_exclusive.intersection(opts)) > 0
      )
  
      if mutually_exclusive_opts_present and self.name in opts:
          exclude_str = ",".join(
              f"'--{opt}'" for opt in self.mutually_exclusive
          )
          raise click.BadOptionUsage(
              self.name,
              f"cannot use option '--{self.name}' because it is mutually exclusive with {exclude_str}",
              ctx,
          )
  
      return super(MutuallyExclusiveOption, self).handle_parse_result(
          ctx, opts, args
      )
  
file_path: metricflow/metricflow/cli/custom_click_types.py
imports: from __future__ import annotations
  from typing import Any, Callable, Dict, Generic, List, Optional, Sequence, Tuple, TypeVar
  import click
label_desc: Use image node_id 2 for calling the MutuallyExclusiveOption obj's underlying member method code with example usage: obj.handle_parse_result(ctx, opts, args) and returns: super