Returns:
            dict: engineer command information
                - arguments (list<dict>): command arguments
                    - args (list):  args to pass through to click.argument
                    - kwargs (dict): keyword arguments to pass through to click.argument
                - options (list<dict>): command options
                    - args (list):  args to pass through to click.option
                    - kwargs (dict): keyword options to pass through to click.option

def engineer_info(self, action):

        """
        Returns:
            dict: engineer command information
                - arguments (list<dict>): command arguments
                    - args (list):  args to pass through to click.argument
                    - kwargs (dict): keyword arguments to pass through to click.argument
                - options (list<dict>): command options
                    - args (list):  args to pass through to click.option
                    - kwargs (dict): keyword options to pass through to click.option
        """

        fn = getattr(self, action, None)
        if not fn:
            raise AttributeError("Engineer action not found: %s" % action)
        if not hasattr(fn, "engineer"):
            raise AttributeError("Engineer action not exposed: %s" % action)

        return fn.engineer