import os from uncloud.shared import shared from uncloud.settings import settings 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 = shared.etcd_client.get( os.path.join(settings["etcd"]["vm_prefix"], self.uuid) ) if not r: self.add_error( "VM with uuid {} does not exists".format(self.uuid) )