def __init__(self, pkg: PackageDescriptor, installers: Dict[str, BundleInstallerExtensionPoint], args, *, additional_destinations=None): """ Construct the BundlePackageArguments. :param PackageDescriptor pkg: The package descriptor :param args: The parsed command line arguments :param list additional_destinations: The destinations of additional arguments """ super().__init__() self.build_base = os.path.abspath( os.path.join(os.getcwd(), args.build_base, pkg.name)) self.install_base = os.path.abspath( os.path.join(os.getcwd(), args.install_base)) if not args.merge_install: self.install_base = os.path.join(self.install_base, pkg.name) self.bundle_base = os.path.abspath( os.path.join(os.getcwd(), args.bundle_base)) self.installers = installers # set additional arguments from the command line or package metadata for dest in (additional_destinations or []): if hasattr(args, dest): update_object( self, dest, getattr(args, dest), pkg.name, 'bundle', 'command line') if dest in pkg.metadata: update_object( self, dest, pkg.metadata[dest], pkg.name, 'bundle', 'package metadata')
def __init__(self, pkg, args, *, additional_destinations=None): """ Construct a BuildPackageArguments. :param pkg: The package descriptor :param args: The parsed command line arguments :param list additional_destinations: The destinations of additional arguments """ super().__init__() self.path = os.path.abspath(os.path.join(os.getcwd(), str(pkg.path))) self.build_base = os.path.abspath( os.path.join(os.getcwd(), args.build_base, pkg.name)) self.install_base = os.path.abspath( os.path.join(os.getcwd(), args.install_base)) self.merge_install = args.merge_install if not args.merge_install: self.install_base = os.path.join(self.install_base, pkg.name) self.symlink_install = args.symlink_install self.test_result_base = os.path.abspath(os.path.join( os.getcwd(), args.test_result_base, pkg.name)) \ if args.test_result_base else None # set additional arguments for dest in (additional_destinations or []): # from the command line if hasattr(args, dest): update_object(self, dest, getattr(args, dest), pkg.name, 'build', 'command line') # from the package metadata if dest in pkg.metadata: update_object(self, dest, pkg.metadata[dest], pkg.name, 'build', 'package metadata')
def __init__(self, pkg, args, *, additional_destinations=None): """ Construct a LockCachePackageArguments. :param pkg: The package descriptor :param args: The parsed command line arguments :param list additional_destinations: The destinations of additional arguments """ super().__init__() self.path = os.path.abspath(os.path.join(os.getcwd(), str(pkg.path))) self.build_base = os.path.abspath( os.path.join(os.getcwd(), args.build_base, pkg.name)) self.ignore_dependencies = args.ignore_dependencies # set additional arguments for dest in (additional_destinations or []): # from the command line if hasattr(args, dest): update_object(self, dest, getattr(args, dest), pkg.name, 'cache lock', 'command line') # from the package metadata if dest in pkg.metadata: update_object(self, dest, pkg.metadata[dest], pkg.name, 'cache lock', 'package metadata')
def test_update_object(): obj = argparse.Namespace() key = 'key' msg_args = ['package_name', 'argument_type', 'value_source'] update_object(obj, key, 'foo', *msg_args) assert hasattr(obj, key) assert getattr(obj, key) == 'foo' # debug message when overwriting a value with the same type with patch('colcon_core.verb.logger.log') as log: update_object(obj, key, 'bar', *msg_args) assert getattr(obj, key) == 'bar' assert log.call_count == 1 assert len(log.call_args[0]) == 2 assert log.call_args[0][0] == 5 assert 'overwrite' in log.call_args[0][1] # warning message when overwriting a value with a different type with patch('colcon_core.verb.logger.log') as log: update_object(obj, key, 42, *msg_args) assert getattr(obj, key) == 42 assert log.call_count == 1 assert len(log.call_args[0]) == 2 assert log.call_args[0][0] == logging.WARNING assert 'overwrite' in log.call_args[0][1] # an existing dictionary value is updated with the passed dictionary obj = argparse.Namespace() update_object(obj, key, {'foo': 'foo', 'bar': 'bar'}, *msg_args) with patch('colcon_core.verb.logger.log') as log: update_object(obj, key, {'bar': 'BAR', 'baz': 'BAZ'}, *msg_args) assert getattr(obj, key) == {'foo': 'foo', 'bar': 'BAR', 'baz': 'BAZ'} assert log.call_count == 1 assert len(log.call_args[0]) == 2 assert log.call_args[0][0] == 5 assert 'update' in log.call_args[0][1] # an existing list value is extended with the passed list obj = argparse.Namespace() update_object(obj, key, ['foo', 'bar'], *msg_args) with patch('colcon_core.verb.logger.log') as log: update_object(obj, key, ['bar', 'baz'], *msg_args) assert getattr(obj, key) == ['foo', 'bar', 'bar', 'baz'] assert log.call_count == 1 assert len(log.call_args[0]) == 2 assert log.call_args[0][0] == 5 assert 'extend' in log.call_args[0][1]