diff --git a/staffeln/common/lock.py b/staffeln/common/lock.py
index 8006fd1..5568bfe 100644
--- a/staffeln/common/lock.py
+++ b/staffeln/common/lock.py
@@ -3,18 +3,13 @@
 import os
 import re
 import sys
-from typing import Optional  # noqa: H301
 import uuid
+from typing import Optional  # noqa: H301
 
-from oslo_config import cfg
 from oslo_log import log
-from oslo_utils import timeutils
-from oslo_utils import uuidutils
+from staffeln import conf, exception
 from tooz import coordination
 
-from staffeln import conf
-from staffeln import exception
-
 CONF = conf.CONF
 LOG = log.getLogger(__name__)
 
@@ -67,7 +62,7 @@
         meaningful prefix.
     """
 
-    def __init__(self, agent_id: Optional[str] = None, prefix: str = ''):
+    def __init__(self, agent_id: Optional[str] = None, prefix: str = ""):
         self.coordinator = None
         self.agent_id = agent_id or str(uuid.uuid4())
         self.started = False
@@ -75,11 +70,11 @@
         self._file_path = None
 
     def _get_file_path(self, backend_url):
-        if backend_url.startswith('file://'):
+        if backend_url.startswith("file://"):
             path = backend_url[7:]
             # Copied from TooZ's _normalize_path to get the same path they use
-            if sys.platform == 'win32':
-                path = re.sub(r'\\(?=\w:\\)', '', os.path.normpath(path))
+            if sys.platform == "win32":
+                path = re.sub(r"\\(?=\w:\\)", "", os.path.normpath(path))
             return os.path.abspath(os.path.join(path, self.prefix))
         return None
 
@@ -90,7 +85,7 @@
         backend_url = CONF.coordination.backend_url
 
         # member_id should be bytes
-        member_id = (self.prefix + self.agent_id).encode('ascii')
+        member_id = (self.prefix + self.agent_id).encode("ascii")
         self.coordinator = coordination.get_coordinator(backend_url, member_id)
         assert self.coordinator is not None
         self.coordinator.start(start_heart=True)
@@ -112,19 +107,18 @@
             across all nodes.
         """
         # lock name should be bytes
-        lock_name = (self.prefix + name).encode('ascii')
+        lock_name = (self.prefix + name).encode("ascii")
         if self.coordinator is not None:
             return self.coordinator.get_lock(lock_name)
         else:
-            raise exception.LockCreationFailed('Coordinator uninitialized.')
+            raise exception.LockCreationFailed("Coordinator uninitialized.")
 
     def remove_lock(self, glob_name):
         # Most locks clean up on release, but not the file lock, so we manually
         # clean them.
 
         def _err(file_name: str, exc: Exception) -> None:
-            LOG.warning('Failed to cleanup lock %(name)s: %(exc)s',
-                        {'name': file_name, 'exc': exc})
+            LOG.warning(f"Failed to cleanup lock {file_name}: {exc}")
 
         if self._file_path:
             files = glob.glob(self._file_path + glob_name)
@@ -132,10 +126,10 @@
                 try:
                     os.remove(file_name)
                 except OSError as exc:
-                    if (exc.errno != errno.ENOENT):
+                    if exc.errno != errno.ENOENT:
                         _err(file_name, exc)
                 except Exception as exc:
                     _err(file_name, exc)
 
 
-COORDINATOR = Coordinator(prefix='staffeln-')
+COORDINATOR = Coordinator(prefix="staffeln-")
diff --git a/staffeln/conductor/manager.py b/staffeln/conductor/manager.py
index 6e04e2a..380c2f7 100755
--- a/staffeln/conductor/manager.py
+++ b/staffeln/conductor/manager.py
@@ -60,7 +60,9 @@
                     LOG.debug(
                         f"try to get lock and run task for volume: {queue.volume_id}."
                     )
-                    with lock.Lock(self.lock_mgt, queue.volume_id, remove_lock=True) as q_lock:
+                    with lock.Lock(
+                        self.lock_mgt, queue.volume_id, remove_lock=True
+                    ) as q_lock:
                         if q_lock.acquired:
                             self.controller.check_volume_backup_status(queue)
             else:  # time out
@@ -110,7 +112,9 @@
         )
         if len(tasks_to_start) != 0:
             for task in tasks_to_start:
-                with lock.Lock(self.lock_mgt, task.volume_id, remove_lock=True) as t_lock:
+                with lock.Lock(
+                    self.lock_mgt, task.volume_id, remove_lock=True
+                ) as t_lock:
                     if t_lock.acquired:
                         # Re-pulling status and make it's up-to-date
                         task = self.controller.get_queue_task_by_id(task_id=task.id)
diff --git a/staffeln/conf/conductor.py b/staffeln/conf/conductor.py
index 33160cf..ff39f13 100755
--- a/staffeln/conf/conductor.py
+++ b/staffeln/conf/conductor.py
@@ -115,7 +115,9 @@
 
 
 coordination_opts = [
-    cfg.StrOpt("backend_url", default="", help=_("lock coordination connection backend URL.")),
+    cfg.StrOpt(
+        "backend_url", default="", help=_("lock coordination connection backend URL.")
+    ),
 ]
 
 
@@ -133,5 +135,5 @@
     return {
         "DEFAULT": rotation_opts,
         conductor_group: backup_opts,
-        coordination_group: coordination_opts
+        coordination_group: coordination_opts,
     }
diff --git a/staffeln/exception.py b/staffeln/exception.py
index 2faf951..e561506 100644
--- a/staffeln/exception.py
+++ b/staffeln/exception.py
@@ -17,8 +17,8 @@
 """Staffeln base exception handling."""
 
 from typing import Optional, Union  # noqa: H301
-from oslo_log import log as logging
 
+from oslo_log import log as logging
 
 LOG = logging.getLogger(__name__)
 
@@ -27,10 +27,11 @@
     """Base Staffeln Exception
 
     To correctly use this class, inherit from it and define
-    a 'message' property. That message will get printf'd
+    a "message" property. That message will get printf'd
     with the keyword arguments provided to the constructor.
 
     """
+
     message = "An unknown exception occurred."
     code = 500
     headers: dict = {}
@@ -38,11 +39,11 @@
 
     def __init__(self, message: Optional[Union[str, tuple]] = None, **kwargs):
         self.kwargs = kwargs
-        self.kwargs['message'] = message
+        self.kwargs["message"] = message
 
-        if 'code' not in self.kwargs:
+        if "code" not in self.kwargs:
             try:
-                self.kwargs['code'] = self.code
+                self.kwargs["code"] = self.code
             except AttributeError:
                 pass
 
@@ -61,22 +62,21 @@
 
         self.msg = message
         super(StaffelnException, self).__init__(message)
-        # Oslo.messaging use the argument 'message' to rebuild exception
+        # Oslo.messaging use the argument "message" to rebuild exception
         # directly at the rpc client side, therefore we should not use it
         # in our keyword arguments, otherwise, the rebuild process will fail
         # with duplicate keyword exception.
-        self.kwargs.pop('message', None)
+        self.kwargs.pop("message", None)
 
     def _log_exception(self) -> None:
         # kwargs doesn't match a variable in the message
         # log the issue and the kwargs
-        LOG.exception('Exception in string format operation:')
+        LOG.exception("Exception in string format operation:")
         for name, value in self.kwargs.items():
-            LOG.error("%(name)s: %(value)s",
-                      {'name': name, 'value': value})
+            LOG.error(f"{name}: {value}")
 
     def _should_format(self) -> bool:
-        return self.kwargs['message'] is None or '%(message)' in self.message
+        return self.kwargs["message"] is None or "%(message)" in self.message
 
 
 class LockCreationFailed(StaffelnException):
