src/aaz_dev/command/model/configuration/_resource.py (45 lines of code) (raw):

from schematics.models import Model from schematics.types import StringType from ._fields import CMDResourceIdField, CMDVersionField from ._utils import CMDDiffLevelEnum from utils.base64 import b64decode_str class CMDResource(Model): # properties as tags id = CMDResourceIdField(required=True) version = CMDVersionField(required=True) subresource = StringType() # subresource index, used for sub commands generation. swagger = StringType(required=True) # swagger resource provider, <plane>/<path:mod_names>/ResourceProviders/<rp_name>/Paths/<base64Encoded Path>/V/<base64Encoded version> class Options: serialize_when_none = False @property def plane(self): return self.swagger.split('/')[0] @property def mod_names(self): return self.swagger.split("/ResourceProviders/")[0].split('/')[1:] @property def rp_name(self): return self.swagger.split("/ResourceProviders/")[1].split('/')[0] @property def path(self): return b64decode_str(self.swagger.split("/Paths/")[1].split('/')[0]) def diff(self, old, level): if type(self) is not type(old): return f"Type: {type(old)} != {type(self)}" diff = {} if level >= CMDDiffLevelEnum.BreakingChange: if self.id != old.id: diff["id"] = f"{old.id} != {self.id}" if self.version != old.version: diff["version"] = f"{old.version} != {self.version}" if self.subresource != old.subresource: diff["subresource"] = f"{old.subresource} != {self.subresource}" if self.plane != old.plane: diff["plane"] = f"{old.plane} != {self.plane}" if self.rp_name != old.rp_name: diff["rp_name"] = f"{old.rp_name} != {self.rp_name}" if level >= CMDDiffLevelEnum.Structure: if self.mod_names != old.mod_names: diff["mod_names"] = f"{old.mod_names} != {self.mod_names}" if self.path != old.path: diff["path"] = f"{old.path} != {self.path}" return diff