def resolveFiles(self, fileSignature): """ @return: list(asm_file_system.ResolvedConfigFile) """ fileLocations = fileSignature.FileLocations if hasattr(fileSignature, 'FileLocations') else None filename = fileSignature.name fileContentSignature = fileSignature.FileContent if hasattr(fileSignature, 'FileContent') else None files = [] _, undefinedVariables = ExpressionResolver.checkVariable(self.variableResolver, filename) if undefinedVariables: logger.debug('Skip configuration file %s because following variable%s no value:' % (filename, 's have' if len(undefinedVariables) > 1 else ' has'), ', '.join(undefinedVariables)) elif fileLocations: paths = fileLocations.children for path in paths: if not OSType.match(path.os, self.shell): logger.debug('Skip path %s because expect os type %s but actual is %s' % (path.text, path.os, OSType.fromShell(self.shell))) continue for resolvedPath, resolvedFilename in self.resolvePath(path.text, filename): found = asm_file_system.getConfigFilesFromPath(self.shell, resolvedPath, resolvedFilename, path.includeSub) if found: files.extend(found) elif fileContentSignature: fileContent = ExpressionResolver.resolve(self.variableResolver, fileContentSignature.text) file = asm_file_system.ResolvedConfigFile(None, filename, fileContent) files.append(file) return files
def resolvePath(self, filePath, filename): """ @type path: str @type filename: str @return: list(str,str) """ resolvedPaths = [] _, undefinedVariables = ExpressionResolver.checkVariable(self.variableResolver, filePath) if undefinedVariables: logger.debug('Skip path %s because following variable%s was not defined:' % (filePath, 's' if len(undefinedVariables) > 1 else ''), ', '.join(undefinedVariables)) else: fullPath = '|'.join((filePath, filename)) paths = ExpressionResolver.resolve(self.variableResolver, fullPath, ExpressionResolver.STRING_LITERAL_LIST) for path in paths: resolvedPaths.append(path.split('|')) return resolvedPaths