forked from uncloud/uncloud
		
	
		
			
				
	
	
		
			62 lines
		
	
	
	
		
			1.5 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			62 lines
		
	
	
	
		
			1.5 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable file
		
	
	
	
	
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)
 | 
						|
            )
 |