includehandler: Fold GlobalIncludes into IncludeHandler class
No user for this abstraction in sight. Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
This commit is contained in:
		
				
					committed by
					
						
						Daniel Wagner
					
				
			
			
				
	
			
			
			
						parent
						
							76e7339fdb
						
					
				
				
					commit
					5c28272d73
				
			@@ -57,10 +57,10 @@ class Config:
 | 
				
			|||||||
        Implements the kas configuration based on config files.
 | 
					        Implements the kas configuration based on config files.
 | 
				
			||||||
    """
 | 
					    """
 | 
				
			||||||
    def __init__(self, filename, target, task=None):
 | 
					    def __init__(self, filename, target, task=None):
 | 
				
			||||||
        from .includehandler import GlobalIncludes
 | 
					        from .includehandler import IncludeHandler
 | 
				
			||||||
        self._config = {}
 | 
					        self._config = {}
 | 
				
			||||||
        self.filename = os.path.abspath(filename)
 | 
					        self.filename = os.path.abspath(filename)
 | 
				
			||||||
        self.handler = GlobalIncludes(self.filename)
 | 
					        self.handler = IncludeHandler(self.filename)
 | 
				
			||||||
        self.repo_dict = self._get_repo_dict()
 | 
					        self.repo_dict = self._get_repo_dict()
 | 
				
			||||||
        self.context = None
 | 
					        self.context = None
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -104,7 +104,20 @@ class IncludeException(Exception):
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
class IncludeHandler:
 | 
					class IncludeHandler:
 | 
				
			||||||
    """
 | 
					    """
 | 
				
			||||||
        Abstract class that defines the interface of an include handler.
 | 
					        Implements a handler where every configuration file should
 | 
				
			||||||
 | 
					        contain a dictionary as the base type with and 'includes'
 | 
				
			||||||
 | 
					        key containing a list of includes.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        The includes can be specified in two ways, as a string
 | 
				
			||||||
 | 
					        containing the relative path from the current file or as a
 | 
				
			||||||
 | 
					        dictionary. The dictionary should have a 'file' key, containing
 | 
				
			||||||
 | 
					        the relative path to the include file and optionally a 'repo'
 | 
				
			||||||
 | 
					        key, containing the key of the repository. If the 'repo' key is
 | 
				
			||||||
 | 
					        missing the value of the 'file' key is treated the same as if
 | 
				
			||||||
 | 
					        just a string was defined, meaning the path is relative to the
 | 
				
			||||||
 | 
					        current config file otherwise its relative to the repository path.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        The includes are read and merged depth first from top to buttom.
 | 
				
			||||||
    """
 | 
					    """
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def __init__(self, top_file):
 | 
					    def __init__(self, top_file):
 | 
				
			||||||
@@ -121,31 +134,7 @@ class IncludeHandler:
 | 
				
			|||||||
            repos -- A list of missing repo names that are needed \
 | 
					            repos -- A list of missing repo names that are needed \
 | 
				
			||||||
                     to create a complete configuration
 | 
					                     to create a complete configuration
 | 
				
			||||||
        """
 | 
					        """
 | 
				
			||||||
        # pylint: disable=no-self-use,unused-argument
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        logging.error('get_config is not implemented')
 | 
					 | 
				
			||||||
        raise NotImplementedError()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
class GlobalIncludes(IncludeHandler):
 | 
					 | 
				
			||||||
    """
 | 
					 | 
				
			||||||
        Implements a handler where every configuration file should
 | 
					 | 
				
			||||||
        contain a dictionary as the base type with and 'includes'
 | 
					 | 
				
			||||||
        key containing a list of includes.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        The includes can be specified in two ways, as a string
 | 
					 | 
				
			||||||
        containg the relative path from the current file or as a
 | 
					 | 
				
			||||||
        dictionary. The dictionary should have a 'file' key, containing
 | 
					 | 
				
			||||||
        the relative path to the include file and optionally a 'repo'
 | 
					 | 
				
			||||||
        key, containing the key of the repository. If the 'repo' key is
 | 
					 | 
				
			||||||
        missing the value of the 'file' key is threated the same as if
 | 
					 | 
				
			||||||
        just a string was defined, meaning the path is relative to the
 | 
					 | 
				
			||||||
        current config file otherwise its relative to the repository path.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        The includes are read and merged depth first from top to buttom.
 | 
					 | 
				
			||||||
    """
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    def get_config(self, repos=None):
 | 
					 | 
				
			||||||
        repos = repos or {}
 | 
					        repos = repos or {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        def _internal_include_handler(filename):
 | 
					        def _internal_include_handler(filename):
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -129,7 +129,7 @@ class TestLoadConfig:
 | 
				
			|||||||
            includehandler.load_config('x.yml')
 | 
					            includehandler.load_config('x.yml')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class TestGlobalIncludes:
 | 
					class TestIncludes:
 | 
				
			||||||
    header = '''
 | 
					    header = '''
 | 
				
			||||||
header:
 | 
					header:
 | 
				
			||||||
  version: 5
 | 
					  version: 5
 | 
				
			||||||
@@ -140,7 +140,7 @@ header:
 | 
				
			|||||||
        monkeypatch.setattr(includehandler, 'CONFIGSCHEMA', {})
 | 
					        monkeypatch.setattr(includehandler, 'CONFIGSCHEMA', {})
 | 
				
			||||||
        for test in testvector:
 | 
					        for test in testvector:
 | 
				
			||||||
            with patch_open(includehandler, dictionary=test['fdict']):
 | 
					            with patch_open(includehandler, dictionary=test['fdict']):
 | 
				
			||||||
                ginc = includehandler.GlobalIncludes('x.yml')
 | 
					                ginc = includehandler.IncludeHandler('x.yml')
 | 
				
			||||||
                config, missing = ginc.get_config(repos=test['rdict'])
 | 
					                config, missing = ginc.get_config(repos=test['rdict'])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                # Remove header, because we dont want to compare it:
 | 
					                # Remove header, because we dont want to compare it:
 | 
				
			||||||
@@ -348,7 +348,7 @@ v: {v2: y, v3: y, v5: y}'''),
 | 
				
			|||||||
                os.path.abspath('z.yml'): header.format('''
 | 
					                os.path.abspath('z.yml'): header.format('''
 | 
				
			||||||
v: {v3: z, v4: z}''')}
 | 
					v: {v3: z, v4: z}''')}
 | 
				
			||||||
        with patch_open(includehandler, dictionary=data):
 | 
					        with patch_open(includehandler, dictionary=data):
 | 
				
			||||||
            ginc = includehandler.GlobalIncludes('x.yml')
 | 
					            ginc = includehandler.IncludeHandler('x.yml')
 | 
				
			||||||
            config, _ = ginc.get_config()
 | 
					            config, _ = ginc.get_config()
 | 
				
			||||||
            keys = list(config['v'].keys())
 | 
					            keys = list(config['v'].keys())
 | 
				
			||||||
            index = {keys[i]: i for i in range(len(keys))}
 | 
					            index = {keys[i]: i for i in range(len(keys))}
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user