Falling in love with @lbt’s approach, I got this code:
import yaml
def str_presenter(dumper, data):
if len(data.splitlines()) > 1: # check for multiline string
return dumper.represent_scalar('tag:yaml.org,2002:str', data, style="|")
return dumper.represent_scalar('tag:yaml.org,2002:str', data)
yaml.add_representer(str, str_presenter)
# to use with safe_dump:
yaml.representer.SafeRepresenter.add_representer(str, str_presenter)
It makes every multiline string be a block literal.
I was trying to avoid the monkey patching part.
Full credit to @lbt and @J.F.Sebastian.