hive icon indicating copy to clipboard operation
hive copied to clipboard

Improve YAML serialization.

Open itsausting opened this issue 2 years ago • 1 comments

For #150.

Creates a custom_yaml object that has alternative "representers" registered to it to modify the default output structures.

Summary:

  • tuple is treated as a list
  • set is treated as a list, but is sorted to ensure that they're serialized in a deterministic way.
  • PurePath and subclasses are stringified
  • ReportType, ScheduleType, and SimTime have yaml_representer static methods and are registered to the custom_yaml object in the custom_yaml.py file.
  • A generic representer is registered on object and its subclasses to catch anything else that is passed in. It creates a WARNING-level log entry to prompt the user that an "implicit" serialization was performed.
  • ReportType had __lt__ defined so that a set[ReportType] could be deterministically serialized, as mentioned above.

Some mediocre testing was included.

NOTE: I believe that import yaml and from nrel...custom_yaml import custom_yaml as yaml both import the same object, so it's not clear to me if the unmodified yaml package would be available. The "package-local" import was still used to make it clear that it is modified.

itsausting avatar Apr 25 '23 22:04 itsausting

The output .yml can not be directly imported because the code currently expects an input key, but the output includes an input_config key.

@nreinicke advised that outputing an input key rather than input_config was acceptable. I can try to investigate this change and include it in this PR.

itsausting avatar Apr 25 '23 22:04 itsausting