Commit c14e73dd authored by Andreas Klöckner's avatar Andreas Klöckner
Browse files

Add toml wrangling functionality

parent d12896ac
Loading
Loading
Loading
Loading
+70 −0
Original line number Diff line number Diff line
@@ -67,6 +67,76 @@ rewrite_pyopencl_test()

# {{{ utilities

function tomlsh {
  python3 - "$@" <<EOF
#! /usr/bin/env python3

import argparse
import sys
import toml


def resolve_dotted_name(data, dotted_name):
    components = dotted_name.split(".")
    for comp in components:
        data = data.get(comp)
        if data is None:
            return data

    return data


def has_key(data, args):
    return 0 if resolve_dotted_name(data, args.dotted_name) is not None else 1


def get(data, args):
    data = resolve_dotted_name(data, args.dotted_name)
    if data:
        print(data)
    return 0


def get_list(data, args):
    for item in resolve_dotted_name(data, args.dotted_name):
        print(item)
    return 0


def main():
    parser = argparse.ArgumentParser(description="TOML wrangling for shell scripts")
    parser.add_argument("filename", default="FILE.TOML")
    subp = parser.add_subparsers()

    parser_has_key = subp.add_parser("has-key")
    parser_has_key.add_argument("dotted_name", default="DOTTED.NAME")

    parser_has_key.set_defaults(func=has_key)

    parser_get = subp.add_parser("get")
    parser_get.add_argument("dotted_name", default="DOTTED.NAME")
    parser_get.set_defaults(func=get)

    parser_get_list = subp.add_parser("get-list")
    parser_get_list .add_argument("dotted_name", default="DOTTED.NAME")
    parser_get_list .set_defaults(func=get_list)

    args = parser.parse_args()

    if not hasattr(args, "func"):
        parser.print_usage()
        sys.exit(1)

    data = toml.load(args.filename)

    sys.exit(args.func(data, args))


if __name__ == "__main__":
    main()
EOF
}

function with_echo()
{
  echo "+++" "$@"