diff --git a/osm_ee/frontend_server.py b/osm_ee/frontend_server.py
index 32b3afe..a36594f 100644
--- a/osm_ee/frontend_server.py
+++ b/osm_ee/frontend_server.py
@@ -39,21 +39,31 @@
 class FrontendExecutor(FrontendExecutorBase):
 
     def __init__(self):
-        self.logger = logging.getLogger('osm_ee.frontend_server')
+        self.logger = logging.getLogger("osm_ee.frontend_server")
         self.base_ee = BaseEE()
 
-    async def RunPrimitive(self, stream: Stream[PrimitiveRequest, PrimitiveReply]) -> None:
+    async def RunPrimitive(
+        self, stream: Stream[PrimitiveRequest, PrimitiveReply]
+    ) -> None:
         request = await stream.recv_message()
         try:
-            self.logger.debug(f'Run primitive: id {request.id}, name: {request.name}, params: {request.params}')
-            async for status, detailed_message in self.base_ee.run_action(request.id, request.name, request.params):
-                self.logger.debug(f'Send response {status}, {detailed_message}')
+            self.logger.debug(
+                f"Run primitive: id {request.id}, name: {request.name}, params: {request.params}"
+            )
+            async for status, detailed_message in self.base_ee.run_action(
+                request.id, request.name, request.params
+            ):
+                self.logger.debug(f"Send response {status}, {detailed_message}")
                 await stream.send_message(
-                    PrimitiveReply(status=status, detailed_message=detailed_message))
+                    PrimitiveReply(status=status, detailed_message=detailed_message)
+                )
         except Exception as e:
-            self.logger.debug(f'Error executing primitive: id {request.id}, name: {request.name}, error_msg: {str(e)}')
+            self.logger.debug(
+                f"Error executing primitive: id {request.id}, name: {request.name}, error_msg: {str(e)}"
+            )
             await stream.send_message(
-                PrimitiveReply(status="ERROR", detailed_message=str(e)))
+                PrimitiveReply(status="ERROR", detailed_message=str(e))
+            )
 
     async def GetSshKey(self, stream: Stream[SshKeyRequest, SshKeyReply]) -> None:
         request = await stream.recv_message()
@@ -62,9 +72,9 @@
         await stream.send_message(SshKeyReply(message=message))
 
 
-async def main(*, host: str = '0.0.0.0', port: int = 50051) -> None:
+async def main(*, host: str = "0.0.0.0", port: int = 50051) -> None:
     logging.basicConfig()
-    logger = logging.getLogger('osm_ee')
+    logger = logging.getLogger("osm_ee")
     logger.setLevel(logging.DEBUG)
 
     # Generate ssh key
@@ -77,11 +87,11 @@
     server = Server([FrontendExecutor()])
     with graceful_exit([server]):
         await server.start(host, port, ssl=util_grpc.create_secure_context())
-        logging.getLogger('osm_ee.frontend_server').debug(f'Serving on {host}:{port}')
+        logging.getLogger("osm_ee.frontend_server").debug(f"Serving on {host}:{port}")
         await server.wait_closed()
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     loop = asyncio.get_event_loop()
     try:
         main_task = asyncio.ensure_future(main())
