You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			37 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			Python
		
	
			
		
		
	
	
			37 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			Python
		
	
"""Yaml utilities."""
 | 
						|
from __future__ import annotations
 | 
						|
 | 
						|
from pathlib import Path, PurePath
 | 
						|
from typing import Any
 | 
						|
 | 
						|
from yaml import dump as ydump
 | 
						|
from yaml import load as yload
 | 
						|
 | 
						|
try:
 | 
						|
    from yaml import CSafeDumper as SafeDumper
 | 
						|
    from yaml import CSafeLoader as SafeLoader
 | 
						|
except ImportError:  # pragma: no cover
 | 
						|
    from yaml import SafeDumper, SafeLoader  # type:ignore[assignment]
 | 
						|
 | 
						|
 | 
						|
def loads(stream: Any) -> Any:
 | 
						|
    """Load yaml from a stream."""
 | 
						|
    return yload(stream, Loader=SafeLoader)
 | 
						|
 | 
						|
 | 
						|
def dumps(stream: Any) -> str:
 | 
						|
    """Parse the first YAML document in a stream as an object."""
 | 
						|
    return ydump(stream, Dumper=SafeDumper)
 | 
						|
 | 
						|
 | 
						|
def load(fpath: str | PurePath) -> Any:
 | 
						|
    """Load yaml from a file."""
 | 
						|
    # coerce PurePath into Path, then read its contents
 | 
						|
    data = Path(str(fpath)).read_text(encoding="utf-8")
 | 
						|
    return loads(data)
 | 
						|
 | 
						|
 | 
						|
def dump(data: Any, outpath: str | PurePath) -> None:
 | 
						|
    """Parse the a YAML document in a file as an object."""
 | 
						|
    Path(outpath).write_text(dumps(data), encoding="utf-8")
 |