def identify(self, desc): # noqa: D102 if desc.type is not None and desc.type != 'python': return setup_py = desc.path / 'setup.py' if not setup_py.is_file(): return setup_cfg = desc.path / 'setup.cfg' if not setup_cfg.is_file(): return if not is_reading_cfg_sufficient(setup_py): logger.debug( "Python package in '{desc.path}' passes arguments to the " 'setup() function which requires a different identification ' "extension than '{self.PACKAGE_IDENTIFICATION_NAME}'". format_map(locals())) return config = get_configuration(setup_cfg) name = config.get('metadata', {}).get('name') if not name: return desc.type = 'python' if desc.name is not None and desc.name != name: msg = 'Package name already set to different value' logger.error(msg) raise RuntimeError(msg) desc.name = name
def identify(self, desc): # noqa: D102 if desc.type is not None and desc.type != 'bazel': return build_file = desc.path / 'BUILD.bazel' if not build_file.is_file(): # Dangerous, but valid for Bazel ! build_file = desc.path / 'BUILD' if not build_file.is_file(): return data = extract_data(build_file) if not data['name']: msg = ("Failed to extract project name from '%s'" % build_file) logger.error(msg) raise RuntimeError(msg) if desc.name is not None and desc.name != data['name']: msg = 'Package name already set to different value' logger.error(msg) raise RuntimeError(msg) desc.type = 'bazel' if desc.name is None: desc.name = data['name'] desc.dependencies['build'] |= data['depends']['build'] desc.dependencies['run'] |= data['depends']['run'] desc.dependencies['test'] |= data['depends']['test']
def identify(self, desc): # noqa: D102 if desc.type is not None and desc.type != 'python': return setup_py = desc.path / 'setup.py' if not setup_py.is_file(): return setup_cfg = desc.path / 'setup.cfg' if not setup_cfg.is_file(): return config = get_configuration(setup_cfg) name = config.get('metadata', {}).get('name') if not name: return desc.type = 'python' if desc.name is not None and desc.name != name: msg = 'Package name already set to different value' logger.error(msg) raise RuntimeError(msg) desc.name = name options = config.get('options', {}) dependencies = extract_dependencies(options) for k, v in dependencies.items(): desc.dependencies[k] |= v def getter(env): nonlocal options return options desc.metadata['get_python_setup_options'] = getter
def identify(self, desc): # noqa: D102 if desc.type is not None and desc.type != 'python': return setup_py = desc.path / 'setup.py' if not setup_py.is_file(): return kwargs = get_setup_arguments(setup_py) data = extract_data(**kwargs) if desc.type is not None and desc.type != 'python': logger.error('Package type already set to different value') raise RuntimeError('Package type already set to different value') desc.type = 'python' if desc.name is not None and desc.name != data['name']: logger.error('Package name already set to different value') raise RuntimeError('Package name already set to different value') desc.name = data['name'] for key in ('build', 'run', 'test'): desc.dependencies[key] |= data['%s_depends' % key] path = str(desc.path) def getter(env): nonlocal path return get_setup_arguments_with_context( os.path.join(path, 'setup.py'), env) desc.metadata['get_python_setup_options'] = getter
def identify(self, desc): # noqa: D102 if desc.type is not None and desc.type != 'python': return setup_py = desc.path / 'setup.py' if not setup_py.is_file(): return setup_cfg = desc.path / 'setup.cfg' if not setup_cfg.is_file(): return if not is_reading_cfg_sufficient(setup_py): logger.debug( "Python package in '{desc.path}' passes arguments to the " 'setup() function which requires a different identification ' "extension than '{self.PACKAGE_IDENTIFICATION_NAME}'". format_map(locals())) return config = get_configuration(setup_cfg) name = config.get('metadata', {}).get('name') if not name: return desc.type = 'python' if desc.name is not None and desc.name != name: msg = 'Package name already set to different value' logger.error(msg) raise RuntimeError(msg) desc.name = name version = config.get('metadata', {}).get('version') desc.metadata['version'] = version options = config.get('options', {}) dependencies = extract_dependencies(options) for k, v in dependencies.items(): desc.dependencies[k] |= v def getter(env): nonlocal options return options desc.metadata['get_python_setup_options'] = getter
def identify(self, desc): # noqa: D102 if desc.type is not None and desc.type != 'python': return setup_py = desc.path / 'setup.py' if not setup_py.is_file(): return config = get_setup_information(setup_py) desc.type = 'python' name = config['metadata'].get('name') if not name: logger.error('Failed to determine Python package name in ' "'{setup_py.parent}'".format_map(locals())) raise RuntimeError('Failed to determine Python package name in ' "'{setup_py.parent}'".format_map(locals())) if desc.name is not None and desc.name != name: logger.error('Package name already set to different value') raise RuntimeError('Package name already set to different value') desc.name = name
def identify(self, desc): # noqa: D102 if desc.type is not None and desc.type != 'python': return setup_py = desc.path / 'setup.py' if not setup_py.is_file(): return config = get_setup_information(setup_py) if desc.type is not None and desc.type != 'python': logger.error('Package type already set to different value') raise RuntimeError('Package type already set to different value') desc.type = 'python' name = config['metadata'].get('name') if not name: logger.error( 'Failed to determine Python package name in ' "'{setup_py.parent}'".format_map(locals())) raise RuntimeError( 'Failed to determine Python package name in ' "'{setup_py.parent}'".format_map(locals())) if desc.name is not None and desc.name != name: logger.error('Package name already set to different value') raise RuntimeError('Package name already set to different value') desc.name = name for dependency_type, option_name in [ ('build', 'setup_requires'), ('run', 'install_requires'), ('test', 'tests_require') ]: desc.dependencies[dependency_type] = { create_dependency_descriptor(d) for d in config[option_name] or ()} def getter(env): nonlocal setup_py return get_setup_information(setup_py, env=env) desc.metadata['get_python_setup_options'] = getter desc.metadata['version'] = config['metadata'].get('version')
def identify(self, desc): # noqa: D102 # ignore packages which have been identified with a different type if desc.type is not None and desc.type != 'ros': return # skip paths with an ignore marker file if (desc.path / 'CATKIN_IGNORE').exists(): raise IgnoreLocationException() if (desc.path / 'AMENT_IGNORE').exists(): raise IgnoreLocationException() # parse package manifest and get build type pkg, build_type = get_package_with_build_type(str(desc.path)) if not pkg or not build_type: # if it is not a wet ROS package check for a dry ROS package if (desc.path / 'manifest.xml').exists(): # ignore location to avoid being identified as a CMake package raise IgnoreLocationException() return # for Python build types ensure that a setup.py file exists if build_type == 'ament_python': setup_py = desc.path / 'setup.py' if not setup_py.is_file(): logger.error( "ROS package '{desc.path}' with build type '{build_type}' " "has no 'setup.py' file".format_map(locals())) raise IgnoreLocationException() desc.type = 'ros.{build_type}'.format_map(locals()) # use package name from manifest if not already set # e.g. from external configuration if desc.name is None: desc.name = pkg.name desc.metadata['version'] = pkg.version # get dependencies for d in pkg.build_depends + pkg.buildtool_depends: assert d.evaluated_condition is not None if d.evaluated_condition: desc.dependencies['build'].add( DependencyDescriptor(d.name, metadata=_create_metadata(d))) for d in (pkg.build_export_depends + pkg.buildtool_export_depends + pkg.exec_depends): assert d.evaluated_condition is not None if d.evaluated_condition: desc.dependencies['run'].add( DependencyDescriptor(d.name, metadata=_create_metadata(d))) for d in pkg.test_depends: assert d.evaluated_condition is not None if d.evaluated_condition: desc.dependencies['test'].add( DependencyDescriptor(d.name, metadata=_create_metadata(d))) # for Python build types ensure that a setup.py file exists if build_type == 'ament_python': setup_cfg = desc.path / 'setup.cfg' for _ in (1, ): # try to get information from setup.cfg file if setup_cfg.is_file(): if is_reading_cfg_sufficient(setup_py): config = get_configuration(setup_cfg) name = config.get('metadata', {}).get('name') if name: options = config.get('options', {}) def getter(env): nonlocal options return options break else: # use information from setup.py file def getter(env): # noqa: F811 nonlocal desc return get_setup_information(desc.path / 'setup.py', env=env) desc.metadata['get_python_setup_options'] = getter