class_docstr: Abstract base class for subcommands
  
  Subclasses should implement an ``invoke(self, args)`` method that accepts
  a set of argparse processed arguments as input.
  
  Subclasses should also define the following class attributes:
  
  * ``name`` a name for this subcommand
  
  * ``help`` a help string for argparse to use for this subcommand
  
  * ``args`` the parameters to pass to ``parser.add_argument``
  
  The format of the ``args`` should be a sequence of tuples of the form:
  
  .. code-block:: python
  
      ('argname', Argument(
          metavar='ARGNAME',
          nargs='+',
      ))
  
  Example:
  
      A simple subcommand "foo" might look like this:
  
      .. code-block:: python
  
          class Foo(Subcommand):
  
              name = "foo"
              help = "performs the Foo action"
              args = (
                  ('--yell', Argument(
                      action='store_true',
                      help="Make it loud",
                  )),
              )
  
              def invoke(self, args):
                  if args.yell:
                      print("FOO!")
                  else:
                      print("foo")
  
      Then executing ``bokeh foo --yell`` would print ``FOO!`` at the console.
docstr: Takes over main program flow to perform the subcommand.
  
  *This method must be implemented by subclasses.*
  subclassed overwritten methods return different types:
  bool: Build
  None: FileOutput (subclassed by HTML, SVG and JSON. PNG overwrites FileOutput.invoke method), Info, Init,                 Sampledata, Secret, Serve, Static
  
  
  Args:
      args (argparse.Namespace) : command line arguments for the subcommand to parse
  
  Raises:
      NotImplementedError
code: def invoke(self, args: Namespace) -> bool | None:
      """ Takes over main program flow to perform the subcommand.
  
          *This method must be implemented by subclasses.*
          subclassed overwritten methods return different types:
          bool: Build
          None: FileOutput (subclassed by HTML, SVG and JSON. PNG overwrites FileOutput.invoke method), Info, Init, \
                  Sampledata, Secret, Serve, Static
  
  
          Args:
              args (argparse.Namespace) : command line arguments for the subcommand to parse
  
          Raises:
              NotImplementedError
  
          """
      raise NotImplementedError("implement invoke()")
  
file_path: bokeh/src/bokeh/command/subcommand.py
imports: from __future__ import annotations
  import logging
  from abc import ABCMeta, abstractmethod
  from argparse import ArgumentParser, Namespace
  from typing import TYPE_CHECKING, Any, ClassVar, Literal, Sequence, Union
  from ..util.dataclasses import NotRequired, Unspecified, dataclass, entries
label_desc: Use image node_id 2 for calling the Subcommand obj's underlying member method code with example usage: obj.invoke(args) without return types