コード例 #1
0
ファイル: items_parser.py プロジェクト: mgaborit/pyven
	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
コード例 #2
0
 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
コード例 #3
0
 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
コード例 #4
0
 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
コード例 #5
0
 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,
コード例 #6
0
ファイル: utils.py プロジェクト: mgaborit/pyven
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
コード例 #7
0
 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]
コード例 #8
0
 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
コード例 #9
0
    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
コード例 #10
0
ファイル: constants_parser.py プロジェクト: mgaborit/pyven
 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
コード例 #11
0
 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'])
コード例 #12
0
ファイル: parser.py プロジェクト: mgaborit/pyven-cmake-plugin
 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
コード例 #13
0
 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'])