def _parse(self, node): errors = [] members = {} members['company'] = node.get('company') if members['company'] is None: errors.append('Missing artifact or package company') members['name'] = node.get('name') if members['name'] is None: errors.append('Missing artifact or package name') members['config'] = node.get('config') if members['config'] is None: errors.append('Missing artifact or package config') members['version'] = node.get('version') if members['version'] is None: errors.append('Missing artifact or package version') members['repo'] = node.get('repo') members['to_retrieve'] = members['repo'] is not None if members['to_retrieve']: members['publish'] = False else: members['publish'] = True publish = node.get('publish') if publish is not None: if publish == 'true': members['publish'] = True elif publish == 'false': members['publish'] = False else: errors.append('Invalid value for "publish" attribute') if len(errors) > 0: e = ParserException('') e.args = tuple(errors) raise e return members
def _parse_available_repositories(self, node): errors = [] members = {} name = node.get('name') if name is None: errors.append('Missing repository name') type = node.get('type') if type is None: errors.append('Missing repository type') elif type not in RepositoriesParser.TYPES and type != 'workspace': errors.append('Invalid repository type : ' + type + ', available types : ' + str(RepositoriesParser.TYPES)) url = node.get('url') if url is None: errors.append('Missing repository url') release = node.get('release') if release is None: release = False elif release == 'false': release = False elif release == 'true': release = True else: errors.append('Invalid value for "release" attribute : ' + release) members['type'] = type members['name'] = name members['url'] = url members['release'] = release if len(errors) > 0: e = ParserException('') e.args = tuple(errors) raise e return members
def parse(self, node, project): objects = [] members = self.parse_process(node) errors = [] file = node.find('file').text if file == '': errors.append('Missing test executable file') (path, filename) = os.path.split(file) arguments = [] for argument in node.xpath('arguments/argument'): arguments.append(argument.text) format = 'cppunit' package_nodes = node.xpath('package') if len(package_nodes) == 0: errors.append('Integration test : missing package') if len(package_nodes) > 1: errors.append('Integration test : to many packages declared') errors.append( 'Only one package can be added to an integration test') package = package_nodes[0].text if package is None or package == '': errors.append('Integration test : missing package') package = project.replace_constants(package) if package not in project.packages.keys(): errors.append('Package not declared --> ' + package) if len(errors) > 0: e = ParserException('') e.args = tuple(errors) raise e objects.append( Integration(self.cwd, members[0], path, filename, arguments, format, project.packages[package])) return objects
def parse(self, node, project): objects = [] members = self.parse_process(node) errors = [] workspace_node = node.find('workspace') if workspace_node is None: errors.append('Missing makefile workspace information') else: workspace = workspace_node.text rules_nodes = node.xpath('rules/rule') rules = [] if len(rules_nodes) == 0: errors.append('Missing makefile rules information informations') else: for rule_node in rules_nodes: rules.append(rule_node.text) options = [] for option_node in node.xpath('options/option'): options.append(option_node.text) if len(errors) > 0: e = ParserException('') e.args = tuple(errors) raise e objects.append( Makefile(self.cwd, members[0], workspace, rules, options)) return objects
def parse_process(self, node): errors = [] name = node.get('name') if name is None: errors.append('Missing process name') if len(errors) > 0: e = ParserException('') e.args = tuple(errors) raise e return name,
def parse_xml(file): tree = None if not os.path.isfile(file): raise ParserException('File not found : ' + file) try: tree = etree.parse(file) except Exception as e: pyven_exception = ParserException('') pyven_exception.args = e.args raise pyven_exception return tree
def _parse(self, node): errors = [] name = node.get('name') if name is None: errors.append('Missing repository name') elif name not in self.available_repositories.keys(): errors.append('Repository not available : ' + name + ' --> Available repositories : ' + str([r for r in self.available_repositories.keys()])) if len(errors) > 0: e = ParserException('') e.args = tuple(errors) raise e return self.available_repositories[name]
def parse(self, node, project): objects = [] members = self.parse_process(node) errors = [] file = node.find('file').text if file == '': errors.append('Missing test file') (path, filename) = os.path.split(file) arguments = [] for argument in node.xpath('arguments/argument'): arguments.append(argument.text) if len(errors) > 0: e = ParserException('') e.args = tuple(errors) raise e objects.append(MSTest(self.cwd, members[0], path, filename, arguments)) return objects
def parse(self, node, project): objects = [] members = self.parse_process(node) errors = [] config_node = node.find('configuration') if config_node is None: errors.append('Missing MSBuild configuration') elif config_node.text is None: errors.append('Missing MSBuild configuration') else: configuration = config_node.text archi_node = node.find('architecture') if archi_node is None: errors.append('Missing MSBuild platform') elif archi_node.text is None: errors.append('Missing MSBuild platform') else: architecture = archi_node.text dot_net_version = None dot_net_node = node.find('dot_net') if dot_net_node is not None and dot_net_node.text is not None: dot_net_version = dot_net_node.text project_nodes = node.xpath('projects/project') projects = [] if len(project_nodes) == 0: errors.append('Missing projects informations') else: for project_node in project_nodes: projects.append(project_node.text) options = [] for option_node in node.xpath('options/option'): options.append(option_node.text) if len(errors) > 0: e = ParserException('') e.args = tuple(errors) raise e for project in projects: objects.append( MSBuild(self.cwd, members[0], configuration, architecture, project, options, dot_net_version)) return objects
def parse(self, tree): constants = {} remote_constant_files = {} for node in tree.xpath(self.query): try: name = node.get('name') if name is None: raise ParserException('Missing constant name') if name in constants.keys(): raise ParserException('Constant already declared : ' + name) is_local_node = node.get('local') is_local = (is_local_node is None) or (is_local_node != 'false') value = node.text if not is_local: if value not in remote_constant_files.keys(): remote_constant_files[value] = [] remote_constant_files[value].append(name) else: constants[name] = value except ParserException as e: raise e for f, remote_constant_names in remote_constant_files.items(): try: tree = parse_xml(os.path.join(self.path, f)) remote_constants = ConstantsParser( os.path.join(self.path, os.path.dirname(f))).parse(tree) for remote_constant_name in remote_constant_names: if remote_constant_name not in remote_constants.keys(): raise ParserException('Constant not found : ' + remote_constant_name) constants[remote_constant_name] = remote_constants[ remote_constant_name] except ParserException as e: raise e return constants
def _parse(self, node): members = super(PackagesParser, self)._parse(node) members['extensions'] = [] packages = node.xpath('extend') for package in packages: members['extensions'].append(package.text) members['directories'] = [] dirs = node.xpath('directory') for d in dirs: members['directories'].append(d.text) members['patterns'] = [] patterns = node.xpath('pattern') for pattern in patterns: members['patterns'].append(pattern.text) items = node.xpath('item') if not members['to_retrieve'] and len(items) == 0\ and len(members['extensions']) == 0\ and len(members['patterns']) == 0\ and len(members['directories']) == 0: raise ParserException('Missing package items information') members['items'] = [] for item in items: members['items'].append(item.text) deliveries = [] for delivery_node in node.xpath('delivery'): delivery = delivery_node.text if '$company' in delivery: delivery = delivery.replace('$$company', members['company']) if '$name' in delivery: delivery = delivery.replace('$$name', members['name']) if '$config' in delivery: delivery = delivery.replace('$$config', members['config']) if '$version' in delivery: delivery = delivery.replace('$$version', members['version']) deliveries.append(delivery) members['delivery'] = deliveries return Package(members['company'],\ members['name'],\ members['config'],\ members['version'],\ members['repo'],\ members['to_retrieve'],\ members['publish'],\ members['items'],\ members['delivery'],\ members['extensions'],\ self.path,\ members['patterns'],\ members['directories'])
def parse(self, node, project): objects = [] members = self.parse_process(node) errors = [] generator_node = node.find('generator') if generator_node is None: errors.append('Missing CMake generator') else: generator = generator_node.text output_path_node = node.find('output-path') if output_path_node is None: errors.append('Missing CMake output directory path') else: output_path = output_path_node.text definitions = [] for definition in node.xpath('definitions/definition'): definitions.append(definition.text) if len(errors) > 0: e = ParserException('') e.args = tuple(errors) raise e objects.append( CMake(self.cwd, members[0], generator, output_path, definitions)) return objects
def _parse(self, node): members = super(ArtifactsParser, self)._parse(node) members['file'] = None if not members['to_retrieve']: members['file'] = node.text if members['file'] is None: raise ParserException( 'Artifact ' + members['company'] + ':' + members['name'] + ':' + members['config'] + ':' + members['version'] + ' --> No repository nor filepath specified') else: members['file'] = os.path.join(self.path, members['file']) return Artifact(members['company'],\ members['name'],\ members['config'],\ members['version'],\ members['repo'],\ members['to_retrieve'],\ members['publish'],\ members['file'])