Mercurial > libervia-backend
diff doc/libervia-cli/input.rst @ 3488:c80a0f864b5d
doc: updated doc following global renaming
author | Goffi <goffi@goffi.org> |
---|---|
date | Sun, 21 Mar 2021 18:23:58 +0100 |
parents | doc/jp/input.rst@72583524cfd3 |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/doc/libervia-cli/input.rst Sun Mar 21 18:23:58 2021 +0100 @@ -0,0 +1,119 @@ +================================================ +input: automatise commands using external inputs +================================================ + +``input`` is a way to use external data (like file in a specific format) as input +arguments. It may be seen as a something similar to ``--output`` but for inputs. + + +csv +=== + +CSV (for Comma-Separated Values) is a common format for tabular data. It is widely used in +spreadsheet software (at least at en export format). With ``csv`` command, you can use +columns a CSV file as arguments to li commands. + +To set the command, you'll write in sequence what to do with each column of your data. +For each column you can: + +- specify a short option name using ``-s ARGUMENTS, --short ARGUMENTS`` (short options are + the ones with a single ``-``) +- specify a long option name using ``-l ARGUMENTS, --long ARGUMENTS`` (long options are + the ones with two ``-``) +- specify a positional argument using ``-p ARGUMENTS, --positional ARGUMENTS`` +- indicate to use the column data with ``stdin`` using ``-i, --stdin`` +- ignore the column if it's not used in the li command, using ``-x, --ignore`` + +After each column specification, you may use a filter to manage the value. So far the +following filters are available: + +``-S, --split`` + This will split the value (on any whitespace character, discarding empty values) and + repeat the option which each item. This is useful when you are using an option which can + be repeated (like ``-t TAG, --tag TAG`` with ``li blog set``). + +``-E ARGUMENTS, --empty ARGUMENTS`` + Indicate what to do if the column value is empty (by default en empty string is used). + You can use either ``skip`` to skip the whole row, or ``ignore`` so the option will not + be set at all (which is different from the default which will still set the option but + with an empty string). + +CSV file is read from stdin, and by default unicode is expected. You may force an encoding +by using ``--encoding ENCODING``. + +By default all the rows are read, but you may want to ignore first rows (if they are used +for columns title, or if you have already handled part of the list). To do that, use the +``-r ROW, --row ROW`` option. + +When you test your command, it is better to do a dry run to see what will happen. The +``-D, --debug`` option is here for that: if you set it, the commands won't be actually +run, but the exact command which would be executed will be printed on screen. You should +always use this option first until you're sure that what you want will be executed. + +You may add verbosity level to help debugging. With a verbosity level of 2 (i.e. ``-vv``) +the value read from CSV will be printed. + +By default stdout and stderr of each launched command is ignored, but you can log them to +files using respectively ``--log LOG`` and ``--log-err LOG_ERR`` where ``LOG`` and +``LOG_ERR`` are paths to a log file to create. + +Once all the sequence and options are set, you write the li command that you want to use, +with all the needed static option (i.e. options which must be used each time). + + +example +------- + +Louise as a spreadsheet with a table like this: + +============================ ============ ============= =============== +title body internal data tags +============================ ============ ============= =============== +Some title a body ABC li demo +Something else another body XYZ li demo +Third one third body VWZ special_tag li +This one doesn't have a body 123 li demo numbers +last one last body 456 li demo numbers +============================ ============ ============= =============== + +She wants to use it as input data to create blog posts. + +She first saves the file using CSV format, let's say to ``~/blog_input.csv``. + +Then she checks ``li blog set --help`` to get name of options to use. She'll need to use +``--title`` for title, ``stdin`` for the body and ``-t`` for tags. Louise wants to +activate comments, so she also wants to use ``-C`` for all posts, and a tag to says it's +coming from the spreadsheet (using ``-t spreadsheet``) . + +The first row of the table is used for columns headers, so she'll start at row 1 with ``-r +1``. + +There is one row without body, Louise want to skip any row without body so she'll use the +``-E skip`` filter, just after specifying the body row. + +Reading column by column, the sequence is like this: + +``-l title`` + a title which goes to the ``--title`` long option of ``li blog`` +``-i -E skip`` + a body which goes to the stdin of ``li blog``. If the body is empty, the ``-E skip`` + filter tells to skip the whole row. +``-x`` + the ``internal data`` column is not used, so it is ignored +``-s t -S`` + the last column are the tags, so the ``-t`` short option is used. There are several of + them separated by spaces, so the ``-S`` filter is used to split the values. + +First she'll use the ``-D, --debug`` to check that the commands which will be executed are +the expected one:: + + $ li input csv -D -r 1 -l title -i -E skip -x -s t -S blog set -C -t spreadsheet < ~/blog_input.csv + +Everything seems fine, so she'll actually launch the command by running the same command +line but without the ``-D`` option:: + + $ li input csv -r 1 -l title -i -E skip -x -s t -S blog set -C -t spreadsheet < ~/blog_input.csv + +She could also have used ``--log`` and ``--log-err`` to check the logs of each command:: + + $ li input csv -r 1 -l title -i -E skip -x -s t -S --log /tmp/jp_blog_stdout.log --log-err /tmp/jp_blog_stderr.log blog set -C -t spreadsheet < ~/blog_input.csv