You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@buildstream.apache.org by tv...@apache.org on 2022/07/26 06:20:19 UTC

[buildstream] 02/03: _message.py: Add type annotations

This is an automated email from the ASF dual-hosted git repository.

tvb pushed a commit to branch tristan/print-error-messages-before-prompt
in repository https://gitbox.apache.org/repos/asf/buildstream.git

commit a65f18cbe15c9e7b71531bf48ba9df6147c67818
Author: Tristan van Berkom <tr...@codethink.co.uk>
AuthorDate: Tue Jul 26 15:13:36 2022 +0900

    _message.py: Add type annotations
---
 src/buildstream/_message.py   | 57 +++++++++++++++++++++++--------------------
 src/buildstream/_messenger.py |  1 +
 2 files changed, 31 insertions(+), 27 deletions(-)

diff --git a/src/buildstream/_message.py b/src/buildstream/_message.py
index 538d385d7..c54398c39 100644
--- a/src/buildstream/_message.py
+++ b/src/buildstream/_message.py
@@ -1,5 +1,5 @@
 #
-#  Copyright (C) 2017 Codethink Limited
+#  Copyright (C) 2022 Codethink Limited
 #
 #  Licensed under the Apache License, Version 2.0 (the "License");
 #  you may not use this file except in compliance with the License.
@@ -18,6 +18,9 @@
 
 import datetime
 import os
+from typing import Optional
+
+from .types import _DisplayKey
 
 
 # Types of status messages.
@@ -48,33 +51,33 @@ unconditional_messages = [MessageType.INFO, MessageType.WARN, MessageType.FAIL,
 class Message:
     def __init__(
         self,
-        message_type,
-        message,
+        message_type: str,
+        message: str,
         *,
-        task_element_name=None,
-        task_element_key=None,
-        element_name=None,
-        element_key=None,
-        detail=None,
-        action_name=None,
-        elapsed=None,
-        logfile=None,
-        sandbox=False,
-        scheduler=False
+        task_element_name: Optional[str] = None,
+        task_element_key: Optional[_DisplayKey] = None,
+        element_name: Optional[str] = None,
+        element_key: Optional[_DisplayKey] = None,
+        detail: str = None,
+        action_name: str = None,
+        elapsed: Optional[datetime.timedelta] = None,
+        logfile: str = None,
+        sandbox: bool = False,
+        scheduler: bool = False
     ):
-        self.message_type = message_type  # Message type
-        self.message = message  # The message string
-        self.task_element_name = task_element_name  # The name of the issuing task element
-        self.task_element_key = task_element_key  # The DisplayKey of the issuing task element
-        self.element_name = element_name  # The name of the issuing element
-        self.element_key = element_key  # The DisplayKey of the issuing element
-        self.detail = detail  # An additional detail string
-        self.action_name = action_name  # Name of the task queue (fetch, refresh, build, etc)
-        self.elapsed = elapsed  # The elapsed time, in timed messages
-        self.logfile = logfile  # The log file path where commands took place
-        self.sandbox = sandbox  # Whether the error that caused this message used a sandbox
-        self.pid = os.getpid()  # The process pid
-        self.scheduler = scheduler  # Whether this is a scheduler level message
-        self.creation_time = datetime.datetime.now()
+        self.message_type: str = message_type  # Message type
+        self.message: str = message  # The message string
+        self.task_element_name: Optional[str] = task_element_name  # The name of the issuing task element
+        self.task_element_key: Optional[_DisplayKey] = task_element_key  # The DisplayKey of the issuing task element
+        self.element_name: Optional[str] = element_name  # The name of the issuing element
+        self.element_key: Optional[_DisplayKey] = element_key  # The DisplayKey of the issuing element
+        self.detail: Optional[str] = detail  # An additional detail string
+        self.action_name: Optional[str] = action_name  # Name of the task queue (fetch, refresh, build, etc)
+        self.elapsed: Optional[datetime.timedelta] = elapsed  # The elapsed time, in timed messages
+        self.logfile: Optional[str] = logfile  # The log file path where commands took place
+        self.sandbox: bool = sandbox  # Whether the error that caused this message used a sandbox
+        self.pid: int = os.getpid()  # The process pid
+        self.scheduler: bool = scheduler  # Whether this is a scheduler level message
+        self.creation_time: datetime.datetime = datetime.datetime.now()
         if message_type in (MessageType.SUCCESS, MessageType.FAIL):
             assert elapsed is not None
diff --git a/src/buildstream/_messenger.py b/src/buildstream/_messenger.py
index 71f8eda99..93b1db927 100644
--- a/src/buildstream/_messenger.py
+++ b/src/buildstream/_messenger.py
@@ -545,6 +545,7 @@ class Messenger:
 
         timecode = EMPTYTIME
         if message.message_type in (MessageType.SUCCESS, MessageType.FAIL):
+            assert message.elapsed is not None
             hours, remainder = divmod(int(message.elapsed.total_seconds()), 60**2)
             minutes, seconds = divmod(remainder, 60)
             timecode = "{0:02d}:{1:02d}:{2:02d}".format(hours, minutes, seconds)