diff --git a/doc/source/conf.py b/doc/source/conf.py
index 7a12515..9055a03 100755
--- a/doc/source/conf.py
+++ b/doc/source/conf.py
@@ -40,8 +40,8 @@
 # openstackdocstheme options
 openstackdocs_repo_name = "openstack/staffeln"
 openstackdocs_bug_project = (
-    "replace with the name of the project on "
-    "Launchpad or the ID from Storyboard")
+    "replace with the name of the project on " "Launchpad or the ID from Storyboard"
+)
 openstackdocs_bug_tag = ""
 
 # If true, '()' will be appended to :func: etc. cross-reference text.
diff --git a/staffeln/api/app.py b/staffeln/api/app.py
index b19b9b8..8b54dad 100755
--- a/staffeln/api/app.py
+++ b/staffeln/api/app.py
@@ -1,12 +1,10 @@
 from __future__ import annotations
 
-from flask import Flask
-from flask import request
-from flask import Response
+from flask import Flask, Response, request
 from oslo_log import log
 
-from staffeln.common import context
 from staffeln import objects
+from staffeln.common import context
 
 ctx = context.make_context()
 app = Flask(__name__)
diff --git a/staffeln/api/middleware/parsable_error.py b/staffeln/api/middleware/parsable_error.py
index 2443201..343c8c2 100755
--- a/staffeln/api/middleware/parsable_error.py
+++ b/staffeln/api/middleware/parsable_error.py
@@ -80,10 +80,7 @@
                 state["status_code"] = status_code
             except (ValueError, TypeError):  # pragma: nocover
                 raise Exception(
-                    _(
-                        "ErrorDocumentMiddleware received an invalid "
-                        "status %s"
-                    )
+                    _("ErrorDocumentMiddleware received an invalid " "status %s")
                     % status
                 )
             else:
diff --git a/staffeln/cmd/api.py b/staffeln/cmd/api.py
index ba2ce09..a175089 100755
--- a/staffeln/cmd/api.py
+++ b/staffeln/cmd/api.py
@@ -7,9 +7,9 @@
 
 from oslo_log import log as logging
 
+import staffeln.conf
 from staffeln.api import app as api_app
 from staffeln.common import service
-import staffeln.conf
 from staffeln.i18n import _
 
 CONF = staffeln.conf.CONF
diff --git a/staffeln/cmd/conductor.py b/staffeln/cmd/conductor.py
index 3b2b84e..eaec3cf 100755
--- a/staffeln/cmd/conductor.py
+++ b/staffeln/cmd/conductor.py
@@ -5,9 +5,9 @@
 import cotyledon
 from cotyledon import oslo_config_glue
 
+import staffeln.conf
 from staffeln.common import service
 from staffeln.conductor import manager
-import staffeln.conf
 
 CONF = staffeln.conf.CONF
 
diff --git a/staffeln/cmd/dbmanage.py b/staffeln/cmd/dbmanage.py
index 433b7d7..bd6f01d 100644
--- a/staffeln/cmd/dbmanage.py
+++ b/staffeln/cmd/dbmanage.py
@@ -8,8 +8,8 @@
 
 from oslo_config import cfg
 
-from staffeln.common import service
 from staffeln import conf
+from staffeln.common import service
 from staffeln.db import migration
 
 CONF = conf.CONF
@@ -27,14 +27,10 @@
 
 def add_command_parsers(subparsers):
 
-    parser = subparsers.add_parser(
-        "create_schema", help="Create the database schema."
-    )
+    parser = subparsers.add_parser("create_schema", help="Create the database schema.")
     parser.set_defaults(func=DBCommand.create_schema)
 
-    parser = subparsers.add_parser(
-        "upgrade", help="Upgrade the database schema."
-    )
+    parser = subparsers.add_parser("upgrade", help="Upgrade the database schema.")
     parser.add_argument("revision", nargs="?")
     parser.set_defaults(func=DBCommand.do_upgrade)
 
diff --git a/staffeln/common/email.py b/staffeln/common/email.py
index 79d7225..368028b 100644
--- a/staffeln/common/email.py
+++ b/staffeln/common/email.py
@@ -2,11 +2,11 @@
 
 from __future__ import annotations
 
+import smtplib
+from email import utils
 from email.header import Header
 from email.mime.multipart import MIMEMultipart
 from email.mime.text import MIMEText
-from email import utils
-import smtplib
 
 from oslo_log import log
 
diff --git a/staffeln/common/lock.py b/staffeln/common/lock.py
index 5f21bf6..9f7db41 100644
--- a/staffeln/common/lock.py
+++ b/staffeln/common/lock.py
@@ -5,15 +5,14 @@
 import os
 import re
 import sys
-from typing import Optional  # noqa: H301
 import uuid
+from typing import Optional  # noqa: H301
 
-from oslo_log import log
 import sherlock
+from oslo_log import log
 from tooz import coordination
 
-from staffeln import conf
-from staffeln import exception
+from staffeln import conf, exception
 
 CONF = conf.CONF
 LOG = log.getLogger(__name__)
diff --git a/staffeln/common/openstack.py b/staffeln/common/openstack.py
index e9f730c..710d112 100644
--- a/staffeln/common/openstack.py
+++ b/staffeln/common/openstack.py
@@ -1,7 +1,6 @@
 from __future__ import annotations
 
-from openstack import exceptions
-from openstack import proxy
+from openstack import exceptions, proxy
 from oslo_log import log
 
 from staffeln.common import auth
@@ -20,9 +19,7 @@
         project_id = project.get("id")
 
         if project_id not in self.conn_list:
-            LOG.debug(
-                _("Initiate connection for project %s" % project.get("name"))
-            )
+            LOG.debug(_("Initiate connection for project %s" % project.get("name")))
             conn = self.conn.connect_as_project(project)
             self.conn_list[project_id] = conn
         LOG.debug(_("Connect as project %s" % project.get("name")))
@@ -33,14 +30,10 @@
         user_name = self.conn.config.auth["username"]
         if "user_domain_id" in self.conn.config.auth:
             domain_id = self.conn.config.auth["user_domain_id"]
-            user = self.conn.get_user(
-                name_or_id=user_name, domain_id=domain_id
-            )
+            user = self.conn.get_user(name_or_id=user_name, domain_id=domain_id)
         elif "user_domain_name" in self.conn.config.auth:
             domain_name = self.conn.config.auth["user_domain_name"]
-            user = self.conn.get_user(
-                name_or_id=user_name, domain_id=domain_name
-            )
+            user = self.conn.get_user(name_or_id=user_name, domain_id=domain_name)
         else:
             user = self.conn.get_user(name_or_id=user_name)
         return user.id
@@ -81,9 +74,7 @@
                 project_id=project_id,
             )
         else:
-            return self.conn.compute.servers(
-                details=details, all_projects=all_projects
-            )
+            return self.conn.compute.servers(details=details, all_projects=all_projects)
 
     def get_volume(self, uuid, project_id):
         return self.conn.get_volume_by_id(uuid)
@@ -149,15 +140,11 @@
 
         if usage:
             resp = self.conn.block_storage.get(
-                "/os-quota-sets/{project_id}?usage=True".format(
-                    project_id=project_id
-                )
+                "/os-quota-sets/{project_id}?usage=True".format(project_id=project_id)
             )
         else:
             resp = self.conn.block_storage.get(
                 "/os-quota-sets/{project_id}".format(project_id=project_id)
             )
-        data = proxy._json_response(
-            resp, error_message="cinder client call failed"
-        )
+        data = proxy._json_response(resp, error_message="cinder client call failed")
         return self.conn._get_and_munchify("quota_set", data)
diff --git a/staffeln/common/service.py b/staffeln/common/service.py
index c657896..98399f6 100755
--- a/staffeln/common/service.py
+++ b/staffeln/common/service.py
@@ -15,9 +15,9 @@
 
 from oslo_log import log as logging
 
-from staffeln.common import config
 import staffeln.conf
 from staffeln import objects
+from staffeln.common import config
 
 CONF = staffeln.conf.CONF
 
diff --git a/staffeln/conductor/backup.py b/staffeln/conductor/backup.py
index 5319035..760132c 100755
--- a/staffeln/conductor/backup.py
+++ b/staffeln/conductor/backup.py
@@ -1,8 +1,7 @@
 from __future__ import annotations
 
 import collections
-from datetime import timedelta
-from datetime import timezone
+from datetime import timedelta, timezone
 
 from openstack.exceptions import HttpException as OpenstackHttpException
 from openstack.exceptions import ResourceNotFound as OpenstackResourceNotFound
@@ -10,14 +9,12 @@
 from oslo_log import log
 from oslo_utils import timeutils
 
-from staffeln.common import constants
-from staffeln.common import context
-from staffeln.common import openstack
+import staffeln.conf
+from staffeln import objects
+from staffeln.common import constants, context, openstack
 from staffeln.common import time as xtime
 from staffeln.conductor import result
-import staffeln.conf
 from staffeln.i18n import _
-from staffeln import objects
 
 CONF = staffeln.conf.CONF
 LOG = log.getLogger(__name__)
@@ -148,8 +145,8 @@
                 return False
 
             return (
-                metadata[CONF.conductor.backup_metadata_key].lower(
-                ) == constants.BACKUP_ENABLED_KEY
+                metadata[CONF.conductor.backup_metadata_key].lower()
+                == constants.BACKUP_ENABLED_KEY
             )
         else:
             return True
@@ -164,8 +161,8 @@
             if not res:
                 reason = _(
                     "Volume %s is not triger new backup task because "
-                    "it is in %s status" %
-                    (volume_id, volume["status"]))
+                    "it is in %s status" % (volume_id, volume["status"])
+                )
                 LOG.info(reason)
                 return reason
             return res
@@ -279,9 +276,7 @@
                 )
 
         except OpenstackSDKException as e:
-            LOG.warn(
-                f"Backup {backup_object.backup_id} deletion failed. {str(e)}"
-            )
+            LOG.warn(f"Backup {backup_object.backup_id} deletion failed. {str(e)}")
             # We don't delete backup object if any exception occured
             # backup_object.delete_backup()
             return False
@@ -296,7 +291,8 @@
                     f"{backup_object.backup_id} is not existing in "
                     "Openstack. Please check your access right to this "
                     "project. "
-                    "Skip this backup from remove now and will retry later.")
+                    "Skip this backup from remove now and will retry later."
+                )
                 # Don't remove backup object, keep it and retry on next
                 # periodic task backup_object.delete_backup()
                 return
@@ -309,17 +305,15 @@
                 LOG.info(
                     f"Backup {backup_object.backup_id} is removed from "
                     "Openstack or cinder-backup is not existing in the "
-                    "cloud. Start removing backup object from Staffeln.")
+                    "cloud. Start removing backup object from Staffeln."
+                )
                 return backup_object.delete_backup()
 
             self.openstacksdk.delete_backup(uuid=backup_object.backup_id)
             # Don't remove backup until it's officially removed from Cinder
             # backup_object.delete_backup()
         except Exception as e:
-            if (
-                skip_inc_err and (
-                    "Incremental backups exist for this backup" in str(e))
-            ):
+            if skip_inc_err and ("Incremental backups exist for this backup" in str(e)):
                 LOG.debug(str(e))
             else:
                 LOG.info(
@@ -355,15 +349,11 @@
                 # Ignore backup interval
                 return True
             interval = CONF.conductor.backup_min_interval
-            threshold_strtime = timeutils.utcnow() - timedelta(
-                seconds=interval
-            )
+            threshold_strtime = timeutils.utcnow() - timedelta(seconds=interval)
             backups = self.get_backups(
                 filters={
                     "volume_id__eq": volume_id,
-                    "created_at__gt": threshold_strtime.astimezone(
-                        timezone.utc
-                    ),
+                    "created_at__gt": threshold_strtime.astimezone(timezone.utc),
                 }
             )
             if backups:
@@ -407,8 +397,7 @@
                     return True
         except Exception as e:
             LOG.debug(
-                "Failed to get backup history to decide backup "
-                f"method. Reason: {e}"
+                "Failed to get backup history to decide backup " f"method. Reason: {e}"
             )
         return False
 
@@ -513,14 +502,16 @@
                     LOG.debug(
                         f"Found retention time ({server_retention_time}) "
                         f"defined for server {server.id}, "
-                        "Adding it retention reference map.")
+                        "Adding it retention reference map."
+                    )
                     retention_map[server.id] = server_retention_time
                 else:
                     LOG.info(
                         f"Server retention time for instance {server.id} is "
                         "incorrect. Please follow "
                         "'<YEARS>y<MONTHS>m<WEEKS>w<DAYS>d<HOURS>"
-                        "h<MINUTES>min<SECONDS>s' format.")
+                        "h<MINUTES>min<SECONDS>s' format."
+                    )
         return retention_map
 
     def _volume_queue(self, task):
@@ -575,10 +566,7 @@
                 # NOTE(Alex): no need to wait because we have a cycle time out
                 if project_id not in self.project_list:
                     LOG.warn(
-                        _(
-                            "Project ID %s is not existing in project list"
-                            % project_id
-                        )
+                        _("Project ID %s is not existing in project list" % project_id)
                     )
                     self.process_non_existing_backup(task)
                     return
@@ -586,10 +574,7 @@
                 backup_method = "Incremental" if task.incremental else "Full"
                 LOG.info(
                     _(
-                        (
-                            "%s Backup (name: %s) for volume %s creating "
-                            "in project %s"
-                        )
+                        ("%s Backup (name: %s) for volume %s creating " "in project %s")
                         % (
                             backup_method,
                             backup_name,
@@ -608,26 +593,23 @@
                 task.backup_status = constants.BACKUP_WIP
                 task.save()
             except OpenstackSDKException as error:
-                inc_err_msg = (
-                    "No backups available to do an incremental backup"
-                )
+                inc_err_msg = "No backups available to do an incremental backup"
                 if inc_err_msg in str(error):
                     LOG.info(
                         "Retry to create full backup for volume %s instead of "
-                        "incremental." %
-                        task.volume_id)
+                        "incremental." % task.volume_id
+                    )
                     task.incremental = False
                     task.save()
                 else:
                     reason = _(
                         "Backup (name: %s) creation for the volume %s "
-                        "failled. %s" %
-                        (backup_name, task.volume_id, str(error)[
-                            :64]))
+                        "failled. %s" % (backup_name, task.volume_id, str(error)[:64])
+                    )
                     LOG.warn(
                         "Backup (name: %s) creation for the volume %s "
-                        "failled. %s" %
-                        (backup_name, task.volume_id, str(error)))
+                        "failled. %s" % (backup_name, task.volume_id, str(error))
+                    )
                     task.reason = reason
                     task.backup_status = constants.BACKUP_FAILED
                     task.save()
@@ -654,8 +636,7 @@
     def process_pre_failed_backup(self, task):
         # 1.notify via email
         reason = _(
-            "The backup creation for the volume %s was prefailed."
-            % task.volume_id
+            "The backup creation for the volume %s was prefailed." % task.volume_id
         )
         LOG.warn(reason)
         task.reason = reason
@@ -664,9 +645,7 @@
 
     def process_failed_backup(self, task):
         # 1. notify via email
-        reason = (
-            f"The status of backup for the volume {task.volume_id} is error."
-        )
+        reason = f"The status of backup for the volume {task.volume_id} is error."
         LOG.warn(reason)
         # 2. delete backup generator
         try:
@@ -729,10 +708,7 @@
         if backup_gen is None:
             # TODO(Alex): need to check when it is none
             LOG.info(
-                _(
-                    "[Beta] Backup status of %s is returning none."
-                    % (queue.backup_id)
-                )
+                _("[Beta] Backup status of %s is returning none." % (queue.backup_id))
             )
             self.process_non_existing_backup(queue)
             return
@@ -741,9 +717,7 @@
         elif backup_gen.status == "available":
             self.process_available_backup(queue)
         elif backup_gen.status == "creating":
-            LOG.info(
-                "Waiting for backup of %s to be completed" % queue.volume_id
-            )
+            LOG.info("Waiting for backup of %s to be completed" % queue.volume_id)
         else:  # "deleting", "restoring", "error_restoring" status
             self.process_using_backup(queue)
 
diff --git a/staffeln/conductor/manager.py b/staffeln/conductor/manager.py
index 1d96d52..c43e13b 100755
--- a/staffeln/conductor/manager.py
+++ b/staffeln/conductor/manager.py
@@ -1,23 +1,20 @@
 from __future__ import annotations
 
-from datetime import timedelta
-from datetime import timezone
 import threading
 import time
+from datetime import timedelta, timezone
 
 import cotyledon
 from futurist import periodics
 from oslo_log import log
 from oslo_utils import timeutils
 
-from staffeln.common import constants
-from staffeln.common import context
-from staffeln.common import lock
+import staffeln.conf
+from staffeln import objects
+from staffeln.common import constants, context, lock
 from staffeln.common import time as xtime
 from staffeln.conductor import backup as backup_controller
-import staffeln.conf
 from staffeln.i18n import _
-from staffeln import objects
 
 LOG = log.getLogger(__name__)
 CONF = staffeln.conf.CONF
@@ -125,9 +122,7 @@
                 ) 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
-                        )
+                        task = self.controller.get_queue_task_by_id(task_id=task.id)
                         if task.backup_status == constants.BACKUP_PLANNED:
                             task.backup_status = constants.BACKUP_INIT
                             task.save()
@@ -146,13 +141,9 @@
 
     def _report_backup_result(self):
         report_period = CONF.conductor.report_period
-        threshold_strtime = timeutils.utcnow() - timedelta(
-            seconds=report_period
-        )
+        threshold_strtime = timeutils.utcnow() - timedelta(seconds=report_period)
 
-        filters = {
-            "created_at__gt": threshold_strtime.astimezone(timezone.utc)
-        }
+        filters = {"created_at__gt": threshold_strtime.astimezone(timezone.utc)}
         report_tss = objects.ReportTimestamp.list(  # pylint: disable=E1120
             context=self.ctx, filters=filters
         )
@@ -166,13 +157,9 @@
             threshold_strtime = timeutils.utcnow() - timedelta(
                 seconds=report_period * 10
             )
-            filters = {
-                "created_at__lt": threshold_strtime.astimezone(timezone.utc)
-            }
-            old_report_tss = (
-                objects.ReportTimestamp.list(  # pylint: disable=E1120
-                    context=self.ctx, filters=filters
-                )
+            filters = {"created_at__lt": threshold_strtime.astimezone(timezone.utc)}
+            old_report_tss = objects.ReportTimestamp.list(  # pylint: disable=E1120
+                context=self.ctx, filters=filters
             )
             for report_ts in old_report_tss:
                 report_ts.delete()
@@ -181,9 +168,7 @@
         LOG.info("Backup manager started %s" % str(time.time()))
         LOG.info("%s periodics" % self.name)
 
-        @periodics.periodic(
-            spacing=backup_service_period, run_immediately=True
-        )
+        @periodics.periodic(spacing=backup_service_period, run_immediately=True)
         def backup_tasks():
             with self.lock_mgt:
                 with lock.Lock(self.lock_mgt, constants.PULLER) as puller:
@@ -269,14 +254,10 @@
     def rotation_engine(self, retention_service_period):
         LOG.info(f"{self.name} rotation_engine")
 
-        @periodics.periodic(
-            spacing=retention_service_period, run_immediately=True
-        )
+        @periodics.periodic(spacing=retention_service_period, run_immediately=True)
         def rotation_tasks():
             with self.lock_mgt:
-                with lock.Lock(
-                    self.lock_mgt, constants.RETENTION
-                ) as retention:
+                with lock.Lock(self.lock_mgt, constants.RETENTION) as retention:
                     if not retention.acquired:
                         return
 
@@ -291,9 +272,8 @@
                     )
 
                     # No way to judge retention
-                    if (
-                        self.threshold_strtime is None and (
-                            not self.instance_retention_map)
+                    if self.threshold_strtime is None and (
+                        not self.instance_retention_map
                     ):
                         return
                     backup_instance_map = {}
@@ -309,9 +289,7 @@
                         # after we enable incremental backup.
                         # So we need to have information to judge on.
                         if backup.instance_id in backup_instance_map:
-                            backup_instance_map[backup.instance_id].append(
-                                backup
-                            )
+                            backup_instance_map[backup.instance_id].append(backup)
                         else:
                             backup_instance_map[backup.instance_id] = [backup]
 
diff --git a/staffeln/conductor/result.py b/staffeln/conductor/result.py
index c602ae3..6bc24f5 100644
--- a/staffeln/conductor/result.py
+++ b/staffeln/conductor/result.py
@@ -5,11 +5,10 @@
 from oslo_log import log
 from oslo_utils import timeutils
 
-from staffeln.common import constants
-from staffeln.common import email
-from staffeln.common import time as xtime
 import staffeln.conf
 from staffeln import objects
+from staffeln.common import constants, email
+from staffeln.common import time as xtime
 
 CONF = staffeln.conf.CONF
 LOG = log.getLogger(__name__)
@@ -40,23 +39,23 @@
             receiver = CONF.notification.receiver
         elif not CONF.notification.project_receiver_domain:
             try:
-                receiver = (
-                    self.backup_mgt.openstacksdk.get_project_member_emails(
-                        project_id
-                    )
+                receiver = self.backup_mgt.openstacksdk.get_project_member_emails(
+                    project_id
                 )
                 if not receiver:
                     LOG.warn(
                         "No email can be found from members of project "
                         f"{project_id}. "
-                        "Skip report now and will try to report later.")
+                        "Skip report now and will try to report later."
+                    )
                     return False
             except Exception as ex:
                 LOG.warn(
                     "Failed to fetch emails from project members with "
                     f"exception: {str(ex)} "
                     "As also no receiver email or project receiver domain are "
-                    "configured. Will try to report later.")
+                    "configured. Will try to report later."
+                )
                 return False
         else:
             receiver_domain = CONF.notification.project_receiver_domain
@@ -124,21 +123,31 @@
         if success_tasks:
             success_volumes = "<br>".join(
                 [
-                    (f"Volume ID: {str(e.volume_id)}, "
-                     f"Backup ID: {str(e.backup_id)}, "
-                     "Backup mode: "
-                     f"{'Incremental' if e.incremental else 'Full'}, "
-                     f"Created at: {str(e.created_at)}, Last updated at: "
-                     f"{str(e.updated_at)}") for e in success_tasks])
+                    (
+                        f"Volume ID: {str(e.volume_id)}, "
+                        f"Backup ID: {str(e.backup_id)}, "
+                        "Backup mode: "
+                        f"{'Incremental' if e.incremental else 'Full'}, "
+                        f"Created at: {str(e.created_at)}, Last updated at: "
+                        f"{str(e.updated_at)}"
+                    )
+                    for e in success_tasks
+                ]
+            )
         else:
             success_volumes = "<br>"
         if failed_tasks:
             failed_volumes = "<br>".join(
                 [
-                    (f"Volume ID: {str(e.volume_id)}, "
-                     f"Reason: {str(e.reason)}, "
-                     f"Created at: {str(e.created_at)}, Last updated at: "
-                     f"{str(e.updated_at)}") for e in failed_tasks])
+                    (
+                        f"Volume ID: {str(e.volume_id)}, "
+                        f"Reason: {str(e.reason)}, "
+                        f"Created at: {str(e.created_at)}, Last updated at: "
+                        f"{str(e.updated_at)}"
+                    )
+                    for e in failed_tasks
+                ]
+            )
         else:
             failed_volumes = "<br>"
         html += (
@@ -152,7 +161,8 @@
             "<h3>Success List</h3>"
             f"<FONT COLOR=GREEN><h4>{success_volumes}</h4></FONT><br>"
             "<h3>Failed List</h3>"
-            f"<FONT COLOR=RED><h4>{failed_volumes}</h4></FONT><br>")
+            f"<FONT COLOR=RED><h4>{failed_volumes}</h4></FONT><br>"
+        )
         self.content += html
         subject = f"Staffeln Backup result: {project_id}"
         reported = self.send_result_email(
diff --git a/staffeln/conf/__init__.py b/staffeln/conf/__init__.py
index 4da72a5..76c247e 100755
--- a/staffeln/conf/__init__.py
+++ b/staffeln/conf/__init__.py
@@ -2,11 +2,7 @@
 
 from oslo_config import cfg
 
-from staffeln.conf import api
-from staffeln.conf import conductor
-from staffeln.conf import database
-from staffeln.conf import notify
-from staffeln.conf import paths
+from staffeln.conf import api, conductor, database, notify, paths
 
 CONF = cfg.CONF
 
diff --git a/staffeln/conf/api.py b/staffeln/conf/api.py
index 16db057..4f848eb 100755
--- a/staffeln/conf/api.py
+++ b/staffeln/conf/api.py
@@ -19,9 +19,7 @@
     cfg.PortOpt(
         "port",
         default=8808,
-        help=_(
-            "Staffeln API listens on this port number for incoming requests."
-        ),
+        help=_("Staffeln API listens on this port number for incoming requests."),
     ),
     cfg.BoolOpt("enabled_ssl", default=False, help=_("ssl enabled")),
     cfg.StrOpt("ssl_key_file", default=False, help=_("ssl key file path")),
diff --git a/staffeln/conf/conductor.py b/staffeln/conf/conductor.py
index db0f840..86407cc 100755
--- a/staffeln/conf/conductor.py
+++ b/staffeln/conf/conductor.py
@@ -8,10 +8,7 @@
 conductor_group = cfg.OptGroup(
     "conductor",
     title="Conductor Options",
-    help=_(
-        "Options under this group are used "
-        "to define Conductor's configuration."
-    ),
+    help=_("Options under this group are used " "to define Conductor's configuration."),
 )
 
 backup_opts = [
@@ -60,9 +57,7 @@
     ),
     cfg.StrOpt(
         "backup_metadata_key",
-        help=_(
-            "The key string of metadata the VM, which requres back up, has"
-        ),
+        help=_("The key string of metadata the VM, which requres back up, has"),
     ),
     cfg.StrOpt(
         "retention_metadata_key",
@@ -122,8 +117,7 @@
     "coordination",
     title="Coordination Options",
     help=_(
-        "Options under this group are used to define Coordination's"
-        "configuration."
+        "Options under this group are used to define Coordination's" "configuration."
     ),
 )
 
diff --git a/staffeln/conf/database.py b/staffeln/conf/database.py
index f4fe98e..aa65873 100644
--- a/staffeln/conf/database.py
+++ b/staffeln/conf/database.py
@@ -17,9 +17,7 @@
 )
 
 SQL_OPTS = [
-    cfg.StrOpt(
-        "mysql_engine", default="InnoDB", help=_("MySQL engine to use.")
-    ),
+    cfg.StrOpt("mysql_engine", default="InnoDB", help=_("MySQL engine to use.")),
 ]
 
 
diff --git a/staffeln/conf/notify.py b/staffeln/conf/notify.py
index bc3f4bf..c0834b1 100644
--- a/staffeln/conf/notify.py
+++ b/staffeln/conf/notify.py
@@ -7,9 +7,7 @@
 notify_group = cfg.OptGroup(
     "notification",
     title="Notification options",
-    help=_(
-        "Options under this group are used to define notification settings."
-    ),
+    help=_("Options under this group are used to define notification settings."),
 )
 
 email_opts = [
diff --git a/staffeln/conf/paths.py b/staffeln/conf/paths.py
index 7341e48..08cf205 100644
--- a/staffeln/conf/paths.py
+++ b/staffeln/conf/paths.py
@@ -9,9 +9,7 @@
 PATH_OPTS = [
     cfg.StrOpt(
         "pybasedir",
-        default=os.path.abspath(
-            os.path.join(os.path.dirname(__file__), "../")
-        ),
+        default=os.path.abspath(os.path.join(os.path.dirname(__file__), "../")),
         help=_("Directory where the staffeln python module is installed."),
     ),
     cfg.StrOpt(
diff --git a/staffeln/db/api.py b/staffeln/db/api.py
index 3e22bde..5f6d2f8 100644
--- a/staffeln/db/api.py
+++ b/staffeln/db/api.py
@@ -6,9 +6,7 @@
 from oslo_db import api as db_api
 
 _BACKEND_MAPPING = {"sqlalchemy": "staffeln.db.sqlalchemy.api"}
-IMPL = db_api.DBAPI.from_config(
-    cfg.CONF, backend_mapping=_BACKEND_MAPPING, lazy=True
-)
+IMPL = db_api.DBAPI.from_config(cfg.CONF, backend_mapping=_BACKEND_MAPPING, lazy=True)
 
 
 def get_instance():
diff --git a/staffeln/db/sqlalchemy/alembic/env.py b/staffeln/db/sqlalchemy/alembic/env.py
index 970dcc7..18b6ee4 100644
--- a/staffeln/db/sqlalchemy/alembic/env.py
+++ b/staffeln/db/sqlalchemy/alembic/env.py
@@ -46,9 +46,7 @@
     """
     engine = sqla_api.get_engine()
     with engine.connect() as connection:
-        context.configure(
-            connection=connection, target_metadata=target_metadata
-        )
+        context.configure(connection=connection, target_metadata=target_metadata)
         with context.begin_transaction():
             context.run_migrations()
 
diff --git a/staffeln/db/sqlalchemy/alembic/versions/041d9a0f1159_backup_add_names.py b/staffeln/db/sqlalchemy/alembic/versions/041d9a0f1159_backup_add_names.py
index 6d53f0e..492009c 100644
--- a/staffeln/db/sqlalchemy/alembic/versions/041d9a0f1159_backup_add_names.py
+++ b/staffeln/db/sqlalchemy/alembic/versions/041d9a0f1159_backup_add_names.py
@@ -12,8 +12,8 @@
 revision = "041d9a0f1159"
 down_revision = ""
 
-from alembic import op  # noqa: E402
 import sqlalchemy as sa  # noqa: E402
+from alembic import op  # noqa: E402
 
 
 def upgrade():
diff --git a/staffeln/db/sqlalchemy/alembic/versions/2b2b9df199bd_add_reason_column_to_queue_data_table.py b/staffeln/db/sqlalchemy/alembic/versions/2b2b9df199bd_add_reason_column_to_queue_data_table.py
index 4ebaf9f..5f87464 100644
--- a/staffeln/db/sqlalchemy/alembic/versions/2b2b9df199bd_add_reason_column_to_queue_data_table.py
+++ b/staffeln/db/sqlalchemy/alembic/versions/2b2b9df199bd_add_reason_column_to_queue_data_table.py
@@ -12,8 +12,8 @@
 revision = "2b2b9df199bd"
 down_revision = "ebdbed01e9a7"
 
-from alembic import op  # noqa: E402
 import sqlalchemy as sa  # noqa: E402
+from alembic import op  # noqa: E402
 
 
 def upgrade():
diff --git a/staffeln/db/sqlalchemy/alembic/versions/5b2e78435231_add_report_timestamp.py b/staffeln/db/sqlalchemy/alembic/versions/5b2e78435231_add_report_timestamp.py
index 5635fd9..20605ee 100644
--- a/staffeln/db/sqlalchemy/alembic/versions/5b2e78435231_add_report_timestamp.py
+++ b/staffeln/db/sqlalchemy/alembic/versions/5b2e78435231_add_report_timestamp.py
@@ -1,8 +1,8 @@
 from __future__ import annotations
 
+import sqlalchemy as sa
 from alembic import op
 from oslo_log import log
-import sqlalchemy as sa
 
 """add report timestamp
 
diff --git a/staffeln/db/sqlalchemy/alembic/versions/ebdbed01e9a7_added_incremental_field.py b/staffeln/db/sqlalchemy/alembic/versions/ebdbed01e9a7_added_incremental_field.py
index 45cc8a8..8dccd8b 100644
--- a/staffeln/db/sqlalchemy/alembic/versions/ebdbed01e9a7_added_incremental_field.py
+++ b/staffeln/db/sqlalchemy/alembic/versions/ebdbed01e9a7_added_incremental_field.py
@@ -12,16 +12,12 @@
 revision = "ebdbed01e9a7"
 down_revision = "041d9a0f1159"
 
-from alembic import op  # noqa: E402
 import sqlalchemy as sa  # noqa: E402
+from alembic import op  # noqa: E402
 
 
 def upgrade():
     # ### commands auto generated by Alembic - please adjust! ###
-    op.add_column(
-        "backup_data", sa.Column("incremental", sa.Boolean(), nullable=True)
-    )
-    op.add_column(
-        "queue_data", sa.Column("incremental", sa.Boolean(), nullable=True)
-    )
+    op.add_column("backup_data", sa.Column("incremental", sa.Boolean(), nullable=True))
+    op.add_column("queue_data", sa.Column("incremental", sa.Boolean(), nullable=True))
     # ### end Alembic commands ###
diff --git a/staffeln/db/sqlalchemy/api.py b/staffeln/db/sqlalchemy/api.py
index 4919f28..b27d0d1 100644
--- a/staffeln/db/sqlalchemy/api.py
+++ b/staffeln/db/sqlalchemy/api.py
@@ -10,9 +10,7 @@
 from oslo_db.sqlalchemy import session as db_session
 from oslo_db.sqlalchemy import utils as db_utils
 from oslo_log import log
-from oslo_utils import strutils
-from oslo_utils import timeutils
-from oslo_utils import uuidutils
+from oslo_utils import strutils, timeutils, uuidutils
 from sqlalchemy.inspection import inspect
 from sqlalchemy.orm import exc
 
@@ -185,8 +183,9 @@
         field = getattr(model, fieldname)
 
         if (
-            fieldname != "deleted" and value and (
-                field.type.python_type is datetime.datetime)
+            fieldname != "deleted"
+            and value
+            and (field.type.python_type is datetime.datetime)
         ):
             if not isinstance(value, datetime.datetime):
                 value = timeutils.parse_isotime(value)
@@ -347,9 +346,7 @@
         """Get the column from the backup_data with matching backup_id"""
 
         try:
-            return self._get_backup(
-                context, fieldname="backup_id", value=backup_id
-            )
+            return self._get_backup(context, fieldname="backup_id", value=backup_id)
         except Exception:  # noqa: E722
             LOG.error("Backup not found with backup_id %s." % backup_id)
 
@@ -379,9 +376,7 @@
 
     def create_report_timestamp(self, values):
         try:
-            report_timestamp_data = self._create(
-                models.Report_timestamp, values
-            )
+            report_timestamp_data = self._create(models.Report_timestamp, values)
         except db_exc.DBDuplicateEntry:
             LOG.error("Report Timestamp ID already exists.")
         return report_timestamp_data
diff --git a/staffeln/exception.py b/staffeln/exception.py
index 3f8a34e..e1caceb 100644
--- a/staffeln/exception.py
+++ b/staffeln/exception.py
@@ -16,8 +16,7 @@
 """Staffeln base exception handling."""
 from __future__ import annotations
 
-from typing import Optional
-from typing import Union
+from typing import Optional, Union
 
 from oslo_log import log as logging
 
diff --git a/staffeln/objects/base.py b/staffeln/objects/base.py
index 60a6fe2..7f3cb85 100755
--- a/staffeln/objects/base.py
+++ b/staffeln/objects/base.py
@@ -33,9 +33,7 @@
     OBJ_PROJECT_NAMESPACE = "staffeln"
 
     def as_dict(self):
-        return {
-            k: getattr(self, k) for k in self.fields if self.obj_attr_is_set(k)
-        }
+        return {k: getattr(self, k) for k in self.fields if self.obj_attr_is_set(k)}
 
 
 class StaffelnObjectSerializer(ovoo_base.VersionedObjectSerializer):
@@ -53,14 +51,9 @@
     object_fields = {}
 
     def obj_refresh(self, loaded_object):
-        fields = (
-            field for field in self.fields if field not in self.object_fields
-        )
+        fields = (field for field in self.fields if field not in self.object_fields)
         for field in fields:
-            if (
-                self.obj_attr_is_set(field) and (
-                    self[field] != loaded_object[field])
-            ):
+            if self.obj_attr_is_set(field) and (self[field] != loaded_object[field]):
                 self[field] = loaded_object[field]
 
     @staticmethod
diff --git a/staffeln/objects/report.py b/staffeln/objects/report.py
index 7bc1885..588be73 100644
--- a/staffeln/objects/report.py
+++ b/staffeln/objects/report.py
@@ -26,9 +26,7 @@
 
     @base.remotable_classmethod
     def list(cls, context, filters=None):  # pylint: disable=E0213
-        db_report = cls.dbapi.get_report_timestamp_list(
-            context, filters=filters
-        )
+        db_report = cls.dbapi.get_report_timestamp_list(context, filters=filters)
         return [cls._from_db_object(cls(context), obj) for obj in db_report]
 
     @base.remotable
diff --git a/staffeln/objects/volume.py b/staffeln/objects/volume.py
index 88f952a..f8b6e80 100644
--- a/staffeln/objects/volume.py
+++ b/staffeln/objects/volume.py
@@ -36,9 +36,7 @@
 
         :param filters: dict mapping the filter to a value.
         """
-        db_backups = cls.dbapi.get_backup_list(
-            context, filters=filters, **kwargs
-        )
+        db_backups = cls.dbapi.get_backup_list(context, filters=filters, **kwargs)
 
         return [cls._from_db_object(cls(context), obj) for obj in db_backups]
 
@@ -79,9 +77,7 @@
         self.dbapi.soft_delete_backup(self.id)
 
     @base.remotable_classmethod
-    def get_backup_by_backup_id(
-        cls, context, backup_id
-    ):  # pylint: disable=E0213
+    def get_backup_by_backup_id(cls, context, backup_id):  # pylint: disable=E0213
         """Find a backup based on backup_id
 
         :param context: Security context. NOTE: This should only
diff --git a/staffeln/tests/common/test_openstacksdk.py b/staffeln/tests/common/test_openstacksdk.py
index e516a30..ceeece9 100644
--- a/staffeln/tests/common/test_openstacksdk.py
+++ b/staffeln/tests/common/test_openstacksdk.py
@@ -3,11 +3,11 @@
 
 from unittest import mock
 
-from openstack import exceptions as openstack_exc
 import tenacity
+from openstack import exceptions as openstack_exc
 
-from staffeln.common import openstack as s_openstack
 from staffeln import conf
+from staffeln.common import openstack as s_openstack
 from staffeln.tests import base
 
 
@@ -46,20 +46,17 @@
         self.fake_role_assignment = mock.MagicMock(user="foo")
         self.fake_role_assignment2 = mock.MagicMock(user={"id": "bar"})
 
-    def _test_http_error(
-        self, m_func, retry_func, status_code, call_count=1, **kwargs
-    ):
-        m_func.side_effect = openstack_exc.HttpException(
-            http_status=status_code
-        )
+    def _test_http_error(self, m_func, retry_func, status_code, call_count=1, **kwargs):
+        m_func.side_effect = openstack_exc.HttpException(http_status=status_code)
         exc = self.assertRaises(
             openstack_exc.HttpException,
             getattr(self.openstack, retry_func),
             **kwargs,
         )
         self.assertEqual(status_code, exc.status_code)
-        skip_retry_codes = conf.CONF.openstack.skip_retry_codes.replace(
-            ' ', '').split(',')
+        skip_retry_codes = conf.CONF.openstack.skip_retry_codes.replace(" ", "").split(
+            ","
+        )
         if str(status_code) not in skip_retry_codes:
             if call_count == 1:
                 self.m_sleep.assert_called_once_with(1.0)
@@ -72,9 +69,7 @@
 
     def _test_non_http_error(self, m_func, retry_func, **kwargs):
         m_func.side_effect = KeyError
-        self.assertRaises(
-            KeyError, getattr(self.openstack, retry_func), **kwargs
-        )
+        self.assertRaises(KeyError, getattr(self.openstack, retry_func), **kwargs)
         self.m_sleep.assert_not_called()
 
     def test_get_servers(self):
@@ -88,28 +83,20 @@
         self._test_non_http_error(self.m_c.compute.servers, "get_servers")
 
     def test_get_servers_conf_skip_http_error(self):
-        conf.CONF.set_override('skip_retry_codes', '403,', 'openstack')
-        self._test_http_error(
-            self.m_c.compute.servers, "get_servers", status_code=403
-        )
-        self.assertEqual('403,', conf.CONF.openstack.skip_retry_codes)
+        conf.CONF.set_override("skip_retry_codes", "403,", "openstack")
+        self._test_http_error(self.m_c.compute.servers, "get_servers", status_code=403)
+        self.assertEqual("403,", conf.CONF.openstack.skip_retry_codes)
 
     def test_get_servers_conf_skip_http_error_not_hit(self):
-        conf.CONF.set_override('skip_retry_codes', '403,', 'openstack')
-        self._test_http_error(
-            self.m_c.compute.servers, "get_servers", status_code=404
-        )
-        self.assertEqual('403,', conf.CONF.openstack.skip_retry_codes)
+        conf.CONF.set_override("skip_retry_codes", "403,", "openstack")
+        self._test_http_error(self.m_c.compute.servers, "get_servers", status_code=404)
+        self.assertEqual("403,", conf.CONF.openstack.skip_retry_codes)
 
     def test_get_servers_404_http_error(self):
-        self._test_http_error(
-            self.m_c.compute.servers, "get_servers", status_code=404
-        )
+        self._test_http_error(self.m_c.compute.servers, "get_servers", status_code=404)
 
     def test_get_servers_500_http_error(self):
-        self._test_http_error(
-            self.m_c.compute.servers, "get_servers", status_code=500
-        )
+        self._test_http_error(self.m_c.compute.servers, "get_servers", status_code=500)
 
     def test_get_projects(self):
         self.m_c.list_projects = mock.MagicMock(return_value=[])
@@ -120,14 +107,10 @@
         self._test_non_http_error(self.m_c.list_projects, "get_projects")
 
     def test_get_projects_404_http_error(self):
-        self._test_http_error(
-            self.m_c.list_projects, "get_projects", status_code=404
-        )
+        self._test_http_error(self.m_c.list_projects, "get_projects", status_code=404)
 
     def test_get_projects_500_http_error(self):
-        self._test_http_error(
-            self.m_c.list_projects, "get_projects", status_code=500
-        )
+        self._test_http_error(self.m_c.list_projects, "get_projects", status_code=500)
 
     def test_get_user_id(self):
         self.m_c.get_user = mock.MagicMock(return_value=self.fake_user)
@@ -138,14 +121,10 @@
         self._test_non_http_error(self.m_c.get_user, "get_user_id")
 
     def test_get_user_id_404_http_error(self):
-        self._test_http_error(
-            self.m_c.get_user, "get_user_id", status_code=404
-        )
+        self._test_http_error(self.m_c.get_user, "get_user_id", status_code=404)
 
     def test_get_user_id_500_http_error(self):
-        self._test_http_error(
-            self.m_c.get_user, "get_user_id", status_code=500
-        )
+        self._test_http_error(self.m_c.get_user, "get_user_id", status_code=500)
 
     def test_get_user(self):
         self.m_c.get_user = mock.MagicMock(return_value=self.fake_user)
@@ -177,9 +156,7 @@
 
     def test_get_role_assignments(self):
         self.m_c.list_role_assignments = mock.MagicMock(return_value=[])
-        self.assertEqual(
-            self.openstack.get_role_assignments(project_id="foo"), []
-        )
+        self.assertEqual(self.openstack.get_role_assignments(project_id="foo"), [])
         self.m_c.list_role_assignments.assert_called_once_with(
             filters={"project": "foo"}
         )
@@ -226,9 +203,7 @@
         self.m_c.get_user.assert_has_calls(
             [
                 mock.call(name_or_id=self.fake_role_assignment.user),
-                mock.call(
-                    name_or_id=self.fake_role_assignment2.user.get("id")
-                ),
+                mock.call(name_or_id=self.fake_role_assignment2.user.get("id")),
             ]
         )
 
@@ -257,13 +232,9 @@
         )
 
     def test_get_volume(self):
-        self.m_c.get_volume_by_id = mock.MagicMock(
-            return_value=self.fake_volume
-        )
+        self.m_c.get_volume_by_id = mock.MagicMock(return_value=self.fake_volume)
         self.assertEqual(
-            self.openstack.get_volume(
-                uuid=self.fake_volume.id, project_id="bar"
-            ),
+            self.openstack.get_volume(uuid=self.fake_volume.id, project_id="bar"),
             self.fake_volume,
         )
         self.m_c.get_volume_by_id.assert_called_once_with(self.fake_volume.id)
@@ -295,13 +266,9 @@
         )
 
     def test_get_backup(self):
-        self.m_c.get_volume_backup = mock.MagicMock(
-            return_value=self.fake_backup
-        )
+        self.m_c.get_volume_backup = mock.MagicMock(return_value=self.fake_backup)
         self.assertEqual(
-            self.openstack.get_backup(
-                uuid=self.fake_backup.id, project_id="bar"
-            ),
+            self.openstack.get_backup(uuid=self.fake_backup.id, project_id="bar"),
             self.fake_backup,
         )
         self.m_c.get_volume_backup.assert_called_once_with(self.fake_backup.id)
@@ -311,9 +278,7 @@
             side_effect=openstack_exc.ResourceNotFound
         )
         self.assertEqual(
-            self.openstack.get_backup(
-                uuid=self.fake_backup.id, project_id="bar"
-            ),
+            self.openstack.get_backup(uuid=self.fake_backup.id, project_id="bar"),
             None,
         )
         self.m_c.get_volume_backup.assert_called_once_with(self.fake_backup.id)
@@ -345,13 +310,9 @@
         )
 
     def test_delete_backup(self):
-        self.m_c.delete_volume_backup = mock.MagicMock(
-            return_value=self.fake_backup
-        )
+        self.m_c.delete_volume_backup = mock.MagicMock(return_value=self.fake_backup)
         self.assertEqual(
-            self.openstack.delete_backup(
-                uuid=self.fake_backup.id, project_id="bar"
-            ),
+            self.openstack.delete_backup(uuid=self.fake_backup.id, project_id="bar"),
             None,
         )
         self.m_c.delete_volume_backup.assert_called_once_with(
@@ -363,9 +324,7 @@
             side_effect=openstack_exc.ResourceNotFound
         )
         self.assertEqual(
-            self.openstack.delete_backup(
-                uuid=self.fake_backup.id, project_id="bar"
-            ),
+            self.openstack.delete_backup(uuid=self.fake_backup.id, project_id="bar"),
             None,
         )
         self.m_c.delete_volume_backup.assert_called_once_with(
@@ -438,9 +397,7 @@
         self.m_c.block_storage.get = mock.MagicMock(status_code=200)
         self.m_gam = mock.MagicMock()
         self.m_c._get_and_munchify = self.m_gam
-        self.m_gam.return_value = mock.MagicMock(
-            backup_gigabytes=[self.fake_backup.id]
-        )
+        self.m_gam.return_value = mock.MagicMock(backup_gigabytes=[self.fake_backup.id])
         self.assertEqual(
             [self.fake_backup.id],
             self.openstack.get_backup_gigabytes_quota(project_id="bar"),
@@ -497,7 +454,5 @@
             self.m_gam_return,
             self.openstack._get_volume_quotas(project_id="bar", usage=False),
         )
-        self.m_c.block_storage.get.assert_called_once_with(
-            "/os-quota-sets/bar"
-        )
+        self.m_c.block_storage.get.assert_called_once_with("/os-quota-sets/bar")
         self.m_gam.assert_called_once_with("quota_set", m_j_r())
