From 250906f463e77ebe687f032743e331a9d04704c7 Mon Sep 17 00:00:00 2001 From: checktheroads Date: Thu, 19 Mar 2020 17:33:29 -0700 Subject: [PATCH] add dict, json, yaml exporters to model parent class --- hyperglass/configuration/models/_utils.py | 32 ++++++++++++++++++++--- 1 file changed, 29 insertions(+), 3 deletions(-) diff --git a/hyperglass/configuration/models/_utils.py b/hyperglass/configuration/models/_utils.py index bd83f10..47cc4b8 100644 --- a/hyperglass/configuration/models/_utils.py +++ b/hyperglass/configuration/models/_utils.py @@ -6,7 +6,7 @@ import re from pathlib import Path # Third Party -from pydantic import BaseModel +from pydantic import HttpUrl, BaseModel def clean_name(_name): @@ -30,8 +30,6 @@ def clean_name(_name): class HyperglassModel(BaseModel): """Base model for all hyperglass configuration models.""" - pass - class Config: """Default Pydantic configuration. @@ -42,6 +40,34 @@ class HyperglassModel(BaseModel): extra = "forbid" validate_assignment = True alias_generator = clean_name + json_encoders = {HttpUrl: lambda v: str(v)} + + def export_json(self, *args, **kwargs): + """Return instance as JSON. + + Returns: + {str} -- Stringified JSON. + """ + return self.json(by_alias=True, exclude_unset=False, *args, **kwargs) + + def export_dict(self, *args, **kwargs): + """Return instance as dictionary. + + Returns: + {dict} -- Python dictionary. + """ + return self.dict(by_alias=True, exclude_unset=False, *args, **kwargs) + + def export_yaml(self, *args, **kwargs): + """Return instance as YAML. + + Returns: + {str} -- Stringified YAML. + """ + import json + import yaml + + return yaml.safe_dump(json.loads(self.export_json(*args, **kwargs))) class HyperglassModelExtra(HyperglassModel):