Improve nix.py (#254)

Co-authored-by: Rok Garbas <rok@garbas.si>
This commit is contained in:
Naïm Favier 2020-12-18 13:04:13 +01:00 committed by GitHub
parent 282d0b1e5a
commit aea6789af6
Failed to generate hash of commit
2 changed files with 39 additions and 6 deletions

View file

@ -4,8 +4,12 @@ def prettyPrintAttrName(attr_name):
return attr_name
stringEscapes = str.maketrans({"\\": "\\\\", '"': '\\"'})
def prettyPrint(item, level=""):
next_level = level + " "
if item is None:
return "null"
@ -18,16 +22,28 @@ def prettyPrint(item, level=""):
return f"{item}"
elif type(item) == str:
item = item.strip()
if "\n" in item:
return f"''{item}''"
return f'"{item}"'
return "".join(
[
"''\n",
"".join(
[
f"{next_level}{line}"
for line in item.splitlines(keepends=True)
]
),
f"\n{level}''",
]
)
return f'"{item.translate(stringEscapes)}"'
elif type(item) == list:
if len(item) == 0:
return "[ ]"
return (
"[\n"
+ ("".join([f"{level} {prettyPrint(i, next_level)}\n" for i in item]))
+ ("".join([f"{next_level}{prettyPrint(i, next_level)}\n" for i in item]))
+ f"{level}]"
)
@ -38,13 +54,13 @@ def prettyPrint(item, level=""):
if type(item["text"]) == str:
return item["text"]
else:
return prettyPrint(item["text"], next_level)
return prettyPrint(item["text"], level)
return (
"{\n"
+ (
"".join(
[
f"{level} {prettyPrintAttrName(n)} = {prettyPrint(v, next_level)};\n"
f"{next_level}{prettyPrintAttrName(n)} = {prettyPrint(v, next_level)};\n"
for n, v in item.items()
]
)

View file

@ -7,9 +7,26 @@ import pytest # type: ignore
(None, "null",),
(True, "true",),
("text", '"text"',),
(
"\nnew line is ignored at start and end\n",
'"new line is ignored at start and end"',
),
('"double quotes"', '"\\"double quotes\\""',),
("multi\nline\ntext", "''\n multi\n line\n text\n''",),
('"multi line\ndouble quotes"', "''\n \"multi line\n double quotes\"\n''",),
(123, "123",),
(123.123, "123.123",),
([False, "text"], ("[\n" " false\n" ' "text"\n' "]"),),
(
[False, "text", "multi\nline\ntext"],
"".join(
[
"[\n",
" false\n",
' "text"\n',
" ''\n multi\n" " line\n" " text\n" " ''\n" "]",
]
),
),
(
{"name1": "value1", "name.2": True, "name3": [False, "text"]},
(