Source code for utok
#! /usr/bin/env python
# -*- coding: utf-8 -*-
"""Python interpretation of utok.
"""
from __future__ import division, print_function, absolute_import, unicode_literals
# Standard library imports.
import argparse
import itertools
__date__ = "2023/01/01 22:27:23 hoel"
__author__ = "Berthold Höllmann"
__copyright__ = "Copyright © 2020 by Berthold Höllmann"
__credits__ = ["Berthold Höllmann"]
__maintainer__ = "Berthold Höllmann"
__email__ = "berhoel@gmail.com"
__version__ = "1.1.4"
[docs]def get_parser():
"""Define the command lien parser for ``utok``.
Returns:
ArgumentParser: Command line argument parser for ``utok``.
"""
parser = argparse.ArgumentParser(
prog="utok", formatter_class=argparse.ArgumentDefaultsHelpFormatter
)
parser.add_argument(
"--delimiter",
"-s",
type=str,
default=":",
help="""
Allows one to change the delimiter. If you use csh you might want to set your
path with something like: set path = (`utok -s \\ /usr/local/bin $path`) """,
)
parser.add_argument(
"--delete-list",
"-d",
type=str,
help="""\
Allows one to remove tokens from a list, to remove /usr/sbin and . from a path \
in Bourne Shell one might use: PATH=`utok $PATH -d .:/usr/sbin`
""",
)
parser.add_argument("tokens", nargs="+", type=str)
parser.add_argument(
"--version",
"-V",
action="version",
version="%(prog)s {version}".format(version=__version__),
)
return parser
[docs]def utok(tokens, delimiter=":", delete_list=""):
"""Process token.
The token chains are splitted at `delimiter` into tokens, and then
the tokens joined again using `delimiter` after removing double
tokens.
Args:
tokens (list[str]): List of strings representing tokens chains.
delimiter (str): Character used to construct token chains.
delete_list (str): Chain of tokens to be deleted from `tokens`.
Returns:
str: Token chain with all tokens."""
res = []
_delete_list = delete_list.split(delimiter) if delete_list else []
for t in itertools.chain(*(j.split(delimiter) for j in tokens)):
if t not in res and t not in _delete_list:
res.append(t)
return delimiter.join(res)
[docs]def prog():
"""``utok [-s delimiter] [ tokens... [-d delete-list ] tokens...]``
Processing the command line arguments and executing the joining of
the elements.
Returns:
str: Newly constructed string."""
args = get_parser().parse_args()
return utok(args.tokens, delimiter=args.delimiter, delete_list=args.delete_list)
[docs]def main():
"""Main entry point for command line.
Printing the result string.
"""
print(prog())
if __name__ == "__main__":
print(prog())
# Local Variables:
# mode: python
# compile-command: "poetry run tox"
# time-stamp-pattern: "30/__date__ = \"%:y/%02m/%02d %02H:%02M:%02S %u\""
# End: