From 9db8caa441e657e4b55484a7cf5620d7090f4bf9 Mon Sep 17 00:00:00 2001 From: Gabriel Gerlero Date: Tue, 12 Nov 2024 00:10:36 -0300 Subject: [PATCH] Improve file writing --- foamlib/_files/_files.py | 4 ++++ foamlib/_files/_serialization.py | 7 ++++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/foamlib/_files/_files.py b/foamlib/_files/_files.py index a0ec29f..2c18417 100644 --- a/foamlib/_files/_files.py +++ b/foamlib/_files/_files.py @@ -189,6 +189,10 @@ def __setitem__( elif not isinstance(keywords, tuple): keywords = (keywords,) + if keywords and not isinstance(normalize(keywords[-1], kind=Kind.KEYWORD), str): + msg = f"Invalid keyword: {keywords[-1]}" + raise ValueError(msg) + with self: try: write_header = ( diff --git a/foamlib/_files/_serialization.py b/foamlib/_files/_serialization.py index b186de1..d478d08 100644 --- a/foamlib/_files/_serialization.py +++ b/foamlib/_files/_serialization.py @@ -73,6 +73,8 @@ def normalize( return [normalize(d, kind=Kind.SINGLE_ENTRY) for d in data] if isinstance(data, str): + data = data.strip() + with contextlib.suppress(ValueError): return int(data) @@ -90,7 +92,10 @@ def normalize( if len(tokens) == 1: return tokens[0] - return tuple(tokens) if kind != Kind.SINGLE_ENTRY else " ".join(tokens) + if kind == Kind.KEYWORD: + return " ".join(tokens) + + return tuple(tokens) if isinstance(data, FoamFileBase.Dimensioned): value = normalize(data.value, kind=Kind.SINGLE_ENTRY)