def render_config(config): return '\n'.join(render_lines(config)) def render_lines(config, indent=0): lines = [] blocks = [] for key, value in sorted(config.items()): if isinstance(value, dict): blocks.extend([ '', key+' {', *render_lines(value, indent=4), '}', ]) elif isinstance(value, list): lines.extend([ f'{key} {_value};' for _value in value ]) else: lines.append( f'{key} {value};' ) return [ f"{' '*indent}{line}" for line in lines+blocks ]