Commit 87698395 authored by Darko Poljak's avatar Darko Poljak

Merge branch 'cleanup/string-formatting' into 'master'

Cleanup/string formatting

Closes #855

See merge request !985
parents 1e765fca 4c2d273f
Pipeline #3414 passed with stage
in 53 seconds
......@@ -533,10 +533,10 @@ def parse_and_configure(argv, singleton=True):
log = logging.getLogger("cdist")
log.verbose("version %s" % cdist.VERSION)
log.trace('command line args: {}'.format(cfg.command_line_args))
log.trace('configuration: {}'.format(cfg.get_config()))
log.trace('configured args: {}'.format(args))
log.verbose("version %s", cdist.VERSION)
log.trace('command line args: %s', cfg.command_line_args)
log.trace('configuration: %s', cfg.get_config())
log.trace('configured args: %s', args)
check_beta(vars(args))
......
This diff is collapsed.
......@@ -34,17 +34,17 @@ class IllegalObjectIdError(cdist.Error):
self.message = message or 'Illegal object id'
def __str__(self):
return '%s: %s' % (self.message, self.object_id)
return '{}: {}'.format(self.message, self.object_id)
class MissingObjectIdError(cdist.Error):
def __init__(self, type_name):
self.type_name = type_name
self.message = ("Type %s requires object id (is not a "
"singleton type)") % self.type_name
self.message = ("Type {} requires object id (is not a "
"singleton type)").format(self.type_name)
def __str__(self):
return '%s' % (self.message)
return '{}'.format(self.message)
class CdistObject:
......@@ -142,7 +142,7 @@ class CdistObject:
if self.object_marker in self.object_id.split(os.sep):
raise IllegalObjectIdError(
self.object_id, ('object_id may not contain '
'\'%s\'') % self.object_marker)
'\'{}\'').format(self.object_marker))
if '//' in self.object_id:
raise IllegalObjectIdError(
self.object_id, 'object_id may not contain //')
......@@ -189,7 +189,7 @@ class CdistObject:
object_id=object_id)
def __repr__(self):
return '<CdistObject %s>' % self.name
return '<CdistObject {}>'.format(self.name)
def __eq__(self, other):
"""define equality as 'name is the same'"""
......@@ -277,7 +277,7 @@ class CdistObject:
os.makedirs(path, exist_ok=allow_overwrite)
except EnvironmentError as error:
raise cdist.Error(('Error creating directories for cdist object: '
'%s: %s') % (self, error))
'{}: {}').format(self, error))
def requirements_unfinished(self, requirements):
"""Return state whether requirements are satisfied"""
......
......@@ -34,7 +34,7 @@ class InvalidTypeError(cdist.Error):
self.source_path = os.path.realpath(self.type_absolute_path)
def __str__(self):
return "Invalid type '%s' at '%s' defined at '%s'" % (
return "Invalid type '{}' at '{}' defined at '{}'".format(
self.type_path, self.type_absolute_path, self.source_path)
......@@ -82,9 +82,9 @@ class CdistType:
yield cls(base_path, name)
except InvalidTypeError as e:
# ignore invalid type, log warning and continue
msg = "Ignoring invalid type '%s' at '%s' defined at '%s'" % (
e.type_path, e.type_absolute_path, e.source_path)
cls.log.warning(msg)
cls.log.warning("Ignoring invalid type '%s' at '%s' defined"
" at '%s'", e.type_path, e.type_absolute_path,
e.source_path)
# remove invalid from runtime conf dir
os.remove(e.type_absolute_path)
......@@ -109,7 +109,7 @@ class CdistType:
return cls._instances[name]
def __repr__(self):
return '<CdistType %s>' % self.name
return '<CdistType {}>'.format(self.name)
def __eq__(self, other):
return isinstance(other, self.__class__) and self.name == other.name
......
......@@ -122,8 +122,8 @@ class Code:
def _run_gencode(self, cdist_object, which):
cdist_type = cdist_object.cdist_type
script = os.path.join(self.local.type_path,
getattr(cdist_type, 'gencode_%s_path' % which))
gencode_attr = getattr(cdist_type, 'gencode_{}_path'.format(which))
script = os.path.join(self.local.type_path, gencode_attr)
if os.path.isfile(script):
env = os.environ.copy()
env.update(self.env)
......@@ -167,8 +167,8 @@ class Code:
def _run_code(self, cdist_object, which, env=None):
which_exec = getattr(self, which)
script = os.path.join(which_exec.object_path,
getattr(cdist_object, 'code_%s_path' % which))
code_attr = getattr(cdist_object, 'code_{}_path'.format(which))
script = os.path.join(which_exec.object_path, code_attr)
if which_exec.save_output_streams:
stderr_path = os.path.join(cdist_object.stderr_path,
'code-' + which)
......
......@@ -131,18 +131,17 @@ class Explorer:
self._run_global_explorer(explorer, out_path)
def _run_global_explorers_parallel(self, out_path):
self.log.debug("Running global explorers in {} parallel jobs".format(
self.jobs))
self.log.trace("Multiprocessing start method is {}".format(
multiprocessing.get_start_method()))
self.log.trace(("Starting multiprocessing Pool for global "
"explorers run"))
self.log.debug("Running global explorers in %s parallel jobs",
self.jobs)
self.log.trace("Multiprocessing start method is %s",
multiprocessing.get_start_method())
self.log.trace("Starting multiprocessing Pool for global explorers"
" run")
args = [
(e, out_path, ) for e in self.list_global_explorer_names()
]
mp_pool_run(self._run_global_explorer, args, jobs=self.jobs)
self.log.trace(("Multiprocessing run for global explorers "
"finished"))
self.log.trace("Multiprocessing run for global explorers finished")
# logger is not pickable, so remove it when we pickle
def __getstate__(self):
......@@ -161,8 +160,8 @@ class Explorer:
self.remote.transfer(self.local.global_explorer_path,
self.remote.global_explorer_path,
self.jobs)
self.remote.run(["chmod", "0700",
"%s/*" % (self.remote.global_explorer_path)])
self.remote.run(["chmod", "0700", "{}/*".format(
self.remote.global_explorer_path)])
def run_global_explorer(self, explorer):
"""Run the given global explorer and return it's output."""
......@@ -184,15 +183,14 @@ class Explorer:
in the object.
"""
self.log.verbose("Running type explorers for {}".format(
cdist_object.cdist_type))
self.log.verbose("Running type explorers for %s",
cdist_object.cdist_type)
if transfer_type_explorers:
self.log.trace("Transferring type explorers for type: %s",
cdist_object.cdist_type)
self.transfer_type_explorers(cdist_object.cdist_type)
else:
self.log.trace(("No need for transferring type explorers for "
"type: %s"),
self.log.trace("No need for transferring type explorers for %s",
cdist_object.cdist_type)
self.log.trace("Transferring object parameters for object: %s",
cdist_object.name)
......@@ -236,15 +234,15 @@ class Explorer:
remote side."""
if cdist_type.explorers:
if cdist_type.name in self._type_explorers_transferred:
self.log.trace(("Skipping retransfer of type explorers "
"for: %s"), cdist_type)
self.log.trace("Skipping retransfer of type explorers for: %s",
cdist_type)
else:
source = os.path.join(self.local.type_path,
cdist_type.explorer_path)
destination = os.path.join(self.remote.type_path,
cdist_type.explorer_path)
self.remote.transfer(source, destination)
self.remote.run(["chmod", "0700", "%s/*" % (destination)])
self.remote.run(["chmod", "0700", "{}/*".format(destination)])
self._type_explorers_transferred.append(cdist_type.name)
def transfer_object_parameters(self, cdist_object):
......
......@@ -80,13 +80,12 @@ class NoInitialManifestError(cdist.Error):
if user_supplied:
if os.path.islink(manifest_path):
self.message = "%s: %s -> %s" % (
msg_header, manifest_path,
os.path.realpath(manifest_path))
self.message = "{}: {} -> {}".format(
msg_header, manifest_path, os.path.realpath(manifest_path))
else:
self.message = "%s: %s" % (msg_header, manifest_path)
self.message = "{}: {}".format(msg_header, manifest_path)
else:
self.message = "%s" % (msg_header)
self.message = "{}".format(msg_header)
def __str__(self):
return repr(self.message)
......@@ -107,7 +106,7 @@ class Manifest:
self._open_logger()
self.env = {
'PATH': "%s:%s" % (self.local.bin_path, os.environ['PATH']),
'PATH': "{}:{}".format(self.local.bin_path, os.environ['PATH']),
# for use in type emulator
'__cdist_type_base_path': self.local.type_path,
'__global': self.local.base_path,
......@@ -161,7 +160,7 @@ class Manifest:
raise NoInitialManifestError(initial_manifest, user_supplied)
message_prefix = "initialmanifest"
self.log.verbose("Running initial manifest " + initial_manifest)
self.log.verbose("Running initial manifest %s", initial_manifest)
which = "init"
if self.local.save_output_streams:
stderr_path = os.path.join(self.local.stderr_base_path, which)
......
......@@ -36,8 +36,8 @@ from cdist.core.manifest import Manifest
class MissingRequiredEnvironmentVariableError(cdist.Error):
def __init__(self, name):
self.name = name
self.message = ("Emulator requires the environment variable %s to be "
"setup" % self.name)
self.message = ("Emulator requires the environment variable {} to be "
"setup").format(self.name)
def __str__(self):
return self.message
......@@ -107,8 +107,8 @@ class Emulator:
self.record_requirements()
self.record_auto_requirements()
self.record_parent_child_relationships()
self.log.trace("Finished %s %s" % (
self.cdist_object.path, self.parameters))
self.log.trace("Finished %s %s", self.cdist_object.path,
self.parameters)
def __init_log(self):
"""Setup logging facility"""
......@@ -170,7 +170,7 @@ class Emulator:
# And finally parse/verify parameter
self.args = parser.parse_args(self.argv[1:])
self.log.trace('Args: %s' % self.args)
self.log.trace('Args: %s', self.args)
def init_object(self):
# Initialize object - and ensure it is not in args
......@@ -231,18 +231,18 @@ class Emulator:
if self.cdist_object.exists and 'CDIST_OVERRIDE' not in self.env:
obj_params = self._object_params_in_context()
if obj_params != self.parameters:
errmsg = ("Object %s already exists with conflicting "
"parameters:\n%s: %s\n%s: %s" % (
errmsg = ("Object {} already exists with conflicting "
"parameters:\n{}: {}\n{}: {}").format(
self.cdist_object.name,
" ".join(self.cdist_object.source),
obj_params,
self.object_source,
self.parameters))
self.parameters)
raise cdist.Error(errmsg)
else:
if self.cdist_object.exists:
self.log.debug(('Object %s override forced with '
'CDIST_OVERRIDE'), self.cdist_object.name)
self.log.debug('Object %s override forced with CDIST_OVERRIDE',
self.cdist_object.name)
self.cdist_object.create(True)
else:
self.cdist_object.create()
......@@ -260,8 +260,8 @@ class Emulator:
parent = self.cdist_object.object_from_name(__object_name)
parent.typeorder.append(self.cdist_object.name)
if self._order_dep_on():
self.log.trace(('[ORDER_DEP] Adding %s to typeorder dep'
' for %s'), depname, parent.name)
self.log.trace('[ORDER_DEP] Adding %s to typeorder dep for %s',
depname, parent.name)
parent.typeorder_dep.append(depname)
elif self._order_dep_on():
self.log.trace('[ORDER_DEP] Adding %s to global typeorder dep',
......@@ -292,7 +292,7 @@ class Emulator:
fd.write(chunk)
chunk = self._read_stdin()
except EnvironmentError as e:
raise cdist.Error('Failed to read from stdin: %s' % e)
raise cdist.Error('Failed to read from stdin: {}'.format(e))
def record_requirement(self, requirement):
"""record requirement and return recorded requirement"""
......@@ -301,16 +301,14 @@ class Emulator:
try:
cdist_object = self.cdist_object.object_from_name(requirement)
except core.cdist_type.InvalidTypeError as e:
self.log.error(("%s requires object %s, but type %s does not"
" exist. Defined at %s" % (
self.cdist_object.name,
requirement, e.name, self.object_source)))
self.log.error("%s requires object %s, but type %s does not"
" exist. Defined at %s", self.cdist_object.name,
requirement, e.name, self.object_source)
raise
except core.cdist_object.MissingObjectIdError:
self.log.error(("%s requires object %s without object id."
" Defined at %s" % (self.cdist_object.name,
requirement,
self.object_source)))
self.log.error("%s requires object %s without object id."
" Defined at %s", self.cdist_object.name,
requirement, self.object_source)
raise
self.log.debug("Recording requirement %s for %s",
......@@ -380,10 +378,9 @@ class Emulator:
self.env['require'] += " " + lastcreatedtype
else:
self.env['require'] = lastcreatedtype
self.log.debug(("Injecting require for "
"CDIST_ORDER_DEPENDENCY: %s for %s"),
lastcreatedtype,
self.cdist_object.name)
self.log.debug("Injecting require for"
" CDIST_ORDER_DEPENDENCY: %s for %s",
lastcreatedtype, self.cdist_object.name)
except IndexError:
# if no second last line, we are on the first type,
# so do not set a requirement
......@@ -391,7 +388,7 @@ class Emulator:
if "require" in self.env:
requirements = self.env['require']
self.log.debug("reqs = " + requirements)
self.log.debug("reqs = %s", requirements)
for requirement in self._parse_require(requirements):
# Ignore empty fields - probably the only field anyway
if len(requirement) == 0:
......
......@@ -152,10 +152,10 @@ class Local:
def _setup_object_marker_file(self):
with open(self.object_marker_file, 'w') as fd:
fd.write("%s\n" % self.object_marker_name)
fd.write("{}\n".format(self.object_marker_name))
self.log.trace("Object marker %s saved in %s" % (
self.object_marker_name, self.object_marker_file))
self.log.trace("Object marker %s saved in %s",
self.object_marker_name, self.object_marker_file)
def _init_cache_dir(self, cache_dir):
home_dir = cdist.home_dir()
......@@ -184,7 +184,7 @@ class Local:
"""
assert isinstance(command, (list, tuple)), (
"list or tuple argument expected, got: %s" % command)
"list or tuple argument expected, got: {}".format(command))
quiet = self.quiet_mode or quiet_mode
do_save_output = save_output and not quiet and self.save_output_streams
......@@ -289,14 +289,12 @@ class Local:
return cache_subpath
def save_cache(self, start_time=time.time()):
self.log.trace("cache subpath pattern: {}".format(
self.cache_path_pattern))
self.log.trace("cache subpath pattern: %s", self.cache_path_pattern)
cache_subpath = self._cache_subpath(start_time,
self.cache_path_pattern)
self.log.debug("cache subpath: {}".format(cache_subpath))
self.log.debug("cache subpath: %s", cache_subpath)
destination = os.path.join(self.cache_path, cache_subpath)
self.log.trace(("Saving cache: " + self.base_path + " to " +
destination))
self.log.trace("Saving cache %s to %s", self.base_path, destination)
if not os.path.exists(destination):
shutil.move(self.base_path, destination)
......@@ -332,7 +330,7 @@ class Local:
# Iterate over all directories and link the to the output dir
for conf_dir in self.conf_dirs:
self.log.debug("Checking conf_dir %s ..." % (conf_dir))
self.log.debug("Checking conf_dir %s ...", conf_dir)
for sub_dir in CONF_SUBDIRS_LINKED:
current_dir = os.path.join(conf_dir, sub_dir)
......@@ -350,12 +348,13 @@ class Local:
if os.path.exists(dst):
os.unlink(dst)
self.log.trace("Linking %s to %s ..." % (src, dst))
self.log.trace("Linking %s to %s ...", src, dst)
try:
os.symlink(src, dst)
except OSError as e:
raise cdist.Error("Linking %s %s to %s failed: %s" % (
sub_dir, src, dst, e.__str__()))
raise cdist.Error(
"Linking {} {} to {} failed: {}".format(
sub_dir, src, dst, e.__str__()))
def _link_types_for_emulator(self):
"""Link emulator to types"""
......@@ -368,5 +367,5 @@ class Local:
os.symlink(src, dst)
except OSError as e:
raise cdist.Error(
"Linking emulator from %s to %s failed: %s" % (
"Linking emulator from {} to {} failed: {}".format(
src, dst, e.__str__()))
......@@ -24,12 +24,10 @@ import os
import glob
import subprocess
import logging
import multiprocessing
import cdist
import cdist.exec.util as util
import cdist.util.ipaddr as ipaddr
from cdist.mputil import mp_pool_run
def _wrap_addr(addr):
......@@ -176,19 +174,19 @@ class Remote:
# create archive
tarpath, fcnt = autil.tar(source, self.archiving_mode)
if tarpath is None:
self.log.trace(("Files count {} is lower than {} limit, "
"skipping archiving").format(
fcnt, autil.FILES_LIMIT))
self.log.trace("Files count %d is lower than %d limit, "
"skipping archiving",
fcnt, autil.FILES_LIMIT)
else:
self.log.trace(("Archiving mode, tarpath: %s, file count: "
"%s"), tarpath, fcnt)
self.log.trace("Archiving mode, tarpath: %s, file count: "
"%s", tarpath, fcnt)
# get archive name
tarname = os.path.basename(tarpath)
self.log.trace("Archiving mode tarname: %s", tarname)
# archive path at the remote
desttarpath = os.path.join(destination, tarname)
self.log.trace(
"Archiving mode desttarpath: %s", desttarpath)
self.log.trace("Archiving mode desttarpath: %s",
desttarpath)
# transfer archive to the remote side
self.log.trace("Archiving mode: transferring")
self._transfer_file(tarpath, desttarpath)
......@@ -262,9 +260,10 @@ class Remote:
# remotely in e.g. csh and setting up CDIST_REMOTE_SHELL to e.g.
# /bin/csh will execute this script in the right way.
if env:
remote_env = [" export %s=%s;" % item for item in env.items()]
string_cmd = ("/bin/sh -c '" + " ".join(remote_env) +
" ".join(command) + "'")
remote_env = [" export {env[0]}={env[1]};".format(env=item)
for item in env.items()]
string_cmd = ("/bin/sh -c '{}{}'").format(" ".join(remote_env),
" ".join(command))
cmd.append(string_cmd)
else:
cmd.extend(command)
......@@ -278,7 +277,7 @@ class Remote:
"""
assert isinstance(command, (list, tuple)), (
"list or tuple argument expected, got: %s" % command)
"list or tuple argument expected, got: {}".format(command))
close_stdout = False
close_stderr = False
......
......@@ -47,4 +47,4 @@ class Install(cdist.config.Config):
yield cdist_object
else:
self.log.debug("Running in install mode, ignoring non install"
"object: {0}".format(cdist_object))
"object: %s", cdist_object)
......@@ -92,7 +92,7 @@ class Inventory:
self.init_db()
def init_db(self):
self.log.trace("Init db: {}".format(self.db_basedir))
self.log.trace("Init db: %s", self.db_basedir)
if not os.path.exists(self.db_basedir):
os.makedirs(self.db_basedir, exist_ok=True)
elif not os.path.isdir(self.db_basedir):
......@@ -182,9 +182,9 @@ class Inventory:
configuration = cfg.get_config(section='GLOBAL')
determine_default_inventory_dir(args, configuration)
log.debug("Using inventory: {}".format(args.inventory_dir))
log.trace("Inventory args: {}".format(vars(args)))
log.trace("Inventory command: {}".format(args.subcommand))
log.debug("Using inventory: %s", args.inventory_dir)
log.trace("Inventory args: %s", vars(args))
log.trace("Inventory command: %s", args.subcommand)
if args.subcommand == "list":
c = InventoryList(hosts=args.host, istag=args.tag,
......@@ -237,16 +237,16 @@ class InventoryList(Inventory):
def _do_list(self, it_tags, it_hosts, check_func):
if (it_tags is not None):
param_tags = set(it_tags)
self.log.trace("param_tags: {}".format(param_tags))
self.log.trace("param_tags: %s", param_tags)
else:
param_tags = set()
for host in it_hosts:
self.log.trace("host: {}".format(host))
self.log.trace("host: %s", host)
tags = self._get_host_tags(host)
if tags is None:
self.log.debug("Host \'{}\' not found, skipped".format(host))
self.log.debug("Host \'%s\' not found, skipped", host)
continue
self.log.trace("tags: {}".format(tags))
self.log.trace("tags: %s", tags)
if check_func(tags, param_tags):
yield host, tags
......@@ -308,11 +308,11 @@ class InventoryHost(Inventory):
def _action(self, host):
if self.action == "add":
self.log.debug("Adding host \'{}\'".format(host))
self.log.debug("Adding host \'%s\'", host)
elif self.action == "del":
self.log.debug("Deleting host \'{}\'".format(host))
self.log.debug("Deleting host \'%s\'", host)
hostpath = self._host_path(host)
self.log.trace("hostpath: {}".format(hostpath))
self.log.trace("hostpath: %s", hostpath)
if self.action == "add" and not os.path.exists(hostpath):
self._new_hostpath(hostpath)
else:
......@@ -372,23 +372,23 @@ class InventoryTag(Inventory):
print("Host \'{}\' does not exist, skipping".format(host),
file=sys.stderr)
return
self.log.trace("existing host_tags: {}".format(host_tags))
self.log.trace("existing host_tags: %s", host_tags)
if self.action == "del" and self.all:
host_tags = set()
else:
for tag in self.input_tags:
if self.action == "add":
self.log.debug("Adding tag \'{}\' for host \'{}\'".format(
tag, host))
self.log.debug("Adding tag \'%s\' for host \'%s\'",
tag, host)
host_tags.add(tag)
elif self.action == "del":
self.log.debug("Deleting tag \'{}\' for host "
"\'{}\'".format(tag, host))
self.log.debug("Deleting tag \'%s\' for host \'%s\'",
tag, host)
if tag in host_tags:
host_tags.remove(tag)
self.log.trace("new host tags: {}".format(host_tags))
self.log.trace("new host tags: %s", host_tags)
if not self._write_host_tags(host, host_tags):
self.log.trace("{} does not exist, skipped".format(host))
self.log.trace("%s does not exist, skipped", host)
def run(self):
if self.allhosts:
......
......@@ -70,7 +70,7 @@ class Message:
with open(self.global_messages, 'a') as fd:
for line in content:
fd.write("%s:%s" % (self.prefix, line))
fd.write("{}:{}".format(self.prefix, line))
def merge_messages(self):
self._merge_messages()
......
......@@ -49,7 +49,7 @@ def scan_preos_dir_plugins(dir):
c = cm[1]
yield from preos_plugin(c)
except ImportError as e:
log.warning("Cannot import '{}': {}".format(module_name, e))
log.warning("Cannot import '%s': %s", module_name, e)
def find_preos_plugins():
......@@ -102,7 +102,7 @@ class PreOS:
parser.add_argument('remainder_args', nargs=argparse.REMAINDER)
args = parser.parse_args(argv[1:])
cdist.argparse.handle_loglevel(args)
log.debug("preos args : {}".format(args))
log.debug("preos args : %s", args)
conf_dirs = util.resolve_conf_dirs_from_config_and_args(args)
......@@ -122,7 +122,7 @@ class PreOS:
func_args = [preos, args.remainder_args, ]
else:
func_args = [args.remainder_args, ]
log.info("Running preos : {}".format(preos_name))
log.info("Running preos : %s", preos_name)
func(*func_args)
else:
raise cdist.Error(
......