import os from ucloud.config import etcd_client, config class Optional: pass class Field: def __init__(self, _name, _type, _value=None): self.name = _name self.value = _value self.type = _type self.__errors = [] def validation(self): return True def is_valid(self): if self.value == KeyError: self.add_error("'{}' field is a required field".format(self.name)) else: if isinstance(self.value, Optional): pass elif not isinstance(self.value, self.type): self.add_error("Incorrect Type for '{}' field".format(self.name)) else: self.validation() if self.__errors: return False return True def get_errors(self): return self.__errors def add_error(self, error): self.__errors.append(error) class VmUUIDField(Field): def __init__(self, data): self.uuid = data.get("uuid", KeyError) super().__init__("uuid", str, self.uuid) self.validation = self.vm_uuid_validation def vm_uuid_validation(self): r = etcd_client.get(os.path.join(config['api']['VM_PREFIX'], self.uuid)) if not r: self.add_error("VM with uuid {} does not exists".format(self.uuid))