.. _CLIABS/Arguments: Arguments ######### .. todo:: Naming convention * Basic classes |rarr| Argument * Named arguments |rarr| Flag * Character prefixes |rarr| Short, Long, Windows .. _CLIABS/Arguments:Overview: Overview ******** .. mermaid:: graph LR; CLA[CommandLineArgument] style CLA stroke-dasharray: 5 5 EA[ExecutableArgument] NA[NamedArgument] style NA stroke-dasharray: 5 5 VA[ValuedArgument] style VA stroke-dasharray: 5 5 NVA[NamedAndValuedArgument] style NVA stroke-dasharray: 5 5 BF[BooleanFlag] style NVA stroke-dasharray: 5 5 NTA[NamedTupledArgument] style NTA stroke-dasharray: 5 5 NKVPA[NamedKeyValuePairsArgument] style NKVPA stroke-dasharray: 5 5 CLA ----> EA CLA --> NA CLA --> VA NA --> NVA VA --> NVA NA --> BF VA --> BF NA --> NTA VA --> NTA NA --> NKVPA VA --> NKVPA CA["CommandArgument
command
"] FA[FlagArgument] style FA stroke-dasharray: 5 5 NA ---> CA NA ---> FA SA["StringArgument
value
"] SLA["StringListArgument
value1 value2
"] PA["PathArgument
file1.txt
"] PLA["PathListArgument
file1.txt file2.txt
"] VA ---> SA VA ---> SLA VA ---> PA VA ---> PLA NVFA["NamedAndValuedFlagArgument
output=file.txt
"] style NVFA stroke-dasharray: 5 5 NOVFA["NamedAndOptionalValuedFlagArgument
output=file.txt
"] style NOVFA stroke-dasharray: 5 5 NVA --> NVFA NVA --> NOVFA .. _CLIABS/Arguments/WithPrefix: Without Prefix Character(s) *************************** +--------------------------+--------------------------------+-------------------------------------------------------------------+ | **RAW Format** | **Examples** | **Argument Class** | +--------------------------+--------------------------------+-------------------------------------------------------------------+ | ``executable`` | ``prog`` | :class:`~pyTooling.CLIAbstraction.Argument.ExecutableArgument` | +--------------------------+--------------------------------+-------------------------------------------------------------------+ | ``--`` | ``prog -option -- file1.txt`` | :class:`~pyTooling.CLIAbstraction.Argument.DelimiterArgument` | +--------------------------+--------------------------------+-------------------------------------------------------------------+ | ``command`` | ``prog help`` | :class:`~pyTooling.CLIAbstraction.Command.CommandArgument` | +--------------------------+--------------------------------+-------------------------------------------------------------------+ | ``string`` | ``prog value`` | :class:`~pyTooling.CLIAbstraction.Argument.StringArgument` | +--------------------------+--------------------------------+-------------------------------------------------------------------+ | ``string1`` ``string2`` | ``prog value1 value2`` | :class:`~pyTooling.CLIAbstraction.Argument.StringListArgument` | +--------------------------+--------------------------------+-------------------------------------------------------------------+ | ``path`` | ``prog file1.txt`` | :class:`~pyTooling.CLIAbstraction.Argument.PathArgument` | +--------------------------+--------------------------------+-------------------------------------------------------------------+ | ``path1`` ``path2`` | ``prog File1.log File1.log`` | :class:`~pyTooling.CLIAbstraction.Argument.PathListArgument` | +--------------------------+--------------------------------+-------------------------------------------------------------------+ Executable ========== An executable argument represents a program/executable. The internal value is a :class:`Path` object. Command ======= Commands are (usually) mutually exclusive arguments and the first argument in a list of arguments to a program. They are used to logically group arguments. While commands can or cannot have prefix characters, they shouldn't be confused with flag arguments or string arguments. **Example:** * ``prog command -arg1 --argument2`` .. seealso:: * For simple flags (various formats). |br| |rarr| :mod:`~pyTooling.CLIAbstraction.Flag` * For string arguments. |br| |rarr| :class:`~pyTooling.CLIAbstraction.Argument.StringArgument` String ====== A simple argument accepting any string value. If a string has a predefined format, more specific argument classes should be used like :mod:`~pyTooling.CLIAbstraction.Command`, :mod:`~pyTooling.CLIAbstraction.Flag` or :class:`~pyTooling.CLIAbstraction.Argument.PathArgument`. .. seealso:: * For path argument. |br| |rarr| :class:`~pyTooling.CLIAbstraction.Argument.PathArgument` List of Strings =============== Like :class:`~pyTooling.CLIAbstraction.Argument.StringArgument` but supporting a list of strings. .. seealso:: * For list of path arguments. |br| |rarr| :class:`~pyTooling.CLIAbstraction.Argument.PathListArgument` Path ==== An argument accepting a :class:`~pathlib.Path` object. List of Paths ============= Like :class:`~pyTooling.CLIAbstraction.Argument.PathArgument` but supporting a list of paths. .. _CLIABS/Arguments/WithoutPrefix: With Prefix Character(s) ************************ Commonly used prefix characters are: single and double dash, single slash, or plus character(s). +-----------------------------------+-------------------------------------+-----------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | **Single Dash Argument Format** | **Double Dash Argument Format** | **Single Slash Argument Format** | **Argument Class** | +-----------------------------------+-------------------------------------+-----------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | ``-command`` | ``--command`` | ``/command`` | :class:`~pyTooling.CLIAbstraction.Command.ShortCommand` |br| :class:`~pyTooling.CLIAbstraction.Command.LongCommand` |br| :class:`~pyTooling.CLIAbstraction.Command.WindowsCommand` | +-----------------------------------+-------------------------------------+-----------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | ``-flag`` | ``--flag`` | ``/flag`` | :class:`~pyTooling.CLIAbstraction.Flag.ShortFlag` |br| :class:`~pyTooling.CLIAbstraction.Flag.LongFlag` |br| :class:`~pyTooling.CLIAbstraction.Flag.WindowsFlag` | +-----------------------------------+-------------------------------------+-----------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | ``-flag`` |br| ``-no-flag`` | ``--flag`` |br| ``--no-flag`` | ``/flag`` |br| ``/no-flag`` | :class:`~pyTooling.CLIAbstraction.BooleanFlag.ShortBooleanFlag` |br| :class:`~pyTooling.CLIAbstraction.BooleanFlag.LongBooleanFlag` |br| :class:`~pyTooling.CLIAbstraction.BooleanFlag.WindowsBooleanFlag` | +-----------------------------------+-------------------------------------+-----------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | ``-flag`` |br| ``-flag=value`` | ``--flag`` |br| ``--flag=value`` | ``/flag`` |br| ``/flag=value`` | :class:`~pyTooling.CLIAbstraction.OptionalValuedFlag.ShortOptionalValuedFlag` |br| :class:`~pyTooling.CLIAbstraction.OptionalValuedFlag.LongOptionalValuedFlag` |br| :class:`~pyTooling.CLIAbstraction.OptionalValuedFlag.WindowsOptionalValuedFlag` | +-----------------------------------+-------------------------------------+-----------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | ``-flag=value`` | ``--flag=value`` | ``/flag=value`` | :class:`~pyTooling.CLIAbstraction.ValuedFlag.ShortValuedFlag` |br| :class:`~pyTooling.CLIAbstraction.ValuedFlag.LongValuedFlag` |br| :class:`~pyTooling.CLIAbstraction.ValuedFlag.WindowsValuedFlag` | +-----------------------------------+-------------------------------------+-----------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | ``-flag=value1 -flag=value2`` | ``--flag=value1 --flag=value2`` | ``/flag=value1 /flag=value2`` | :class:`~pyTooling.CLIAbstraction.ValuedFlagList.ShortValuedFlagList` |br| :class:`~pyTooling.CLIAbstraction.ValuedFlagList.LongValuedFlagList` |br| :class:`~pyTooling.CLIAbstraction.ValuedFlagList.WindowsValuedFlagList` | +-----------------------------------+-------------------------------------+-----------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | ``-flag value`` | ``--flag value`` | ``/flag value`` | :class:`~pyTooling.CLIAbstraction.ShortTupleFlag` |br| :class:`~pyTooling.CLIAbstraction.LongTupleFlag` |br| :class:`~pyTooling.CLIAbstraction.WindowsTupleFlag` | +-----------------------------------+-------------------------------------+-----------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | ``-gKey1=value1 -gKey2=value2`` | ``--gKey1=value1 --gKey2=value2`` | ``/g:Key1=value1 /g:Key2=value2`` | :class:`~pyTooling.CLIAbstraction.KeyValueFlag.ShortKeyValueFlag` |br| :class:`~pyTooling.CLIAbstraction.KeyValueFlag.LongKeyValueFlag` |br| :class:`~pyTooling.CLIAbstraction.KeyValueFlag.WindowsKeyValueFlag` | +-----------------------------------+-------------------------------------+-----------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ Command ======= .. TODO:: Write documentation. .. mermaid:: graph LR; CLA[CommandLineArgument] style CLA stroke-dasharray: 5 5 CLA --> NA[NamedArgument] style NA stroke-dasharray: 5 5 NA --> CA["CommandArgument
command
"]; CA --> SCA["ShortCommand
-command
"]; CA --> LCA["LongCommand
--command
"]; CA --> WCA["WindowsCommand
/command
"]; Flag ==== A flag is a command line argument that is either present or not. If present that argument is said to be activated or true. 3 variants are predefined with prefixes ``-``, ``--`` and ``/``. .. rubric:: Variants .. mermaid:: graph LR; CLA[CommandLineArgument] style CLA stroke-dasharray: 5 5 CLA --> NA[NamedArgument] style NA stroke-dasharray: 5 5 NA --> FA[FlagArgument] style FA stroke-dasharray: 5 5 FA --> SFA["ShortFlag
-flag
"] FA --> LFA["LongFlag
--flag
"] FA --> WFA["WindowsFlag
/flag
"] Flag with Value =============== .. TODO:: Write documentation. Boolean Flag ============ .. TODO:: Write documentation. Flag with Optional Value ======================== .. TODO:: Write documentation. List of Flags with Value ======================== .. TODO:: Write documentation. Flag with Value as a Tuple ========================== .. TODO:: Write documentation.