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:17 UTC

[buildstream] branch tristan/print-error-messages-before-prompt created (now 397d7c6fa)

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

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


      at 397d7c6fa _frontend/app.py: Flush cached messages when handling a failure.

This branch includes the following new commits:

     new 136cffdd3 _messenger.py: Document some undocumented symbols, and correct one type
     new a65f18cbe _message.py: Add type annotations
     new 397d7c6fa _frontend/app.py: Flush cached messages when handling a failure.

The 3 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



[buildstream] 01/03: _messenger.py: Document some undocumented symbols, and correct one type

Posted by tv...@apache.org.
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 136cffdd3ed911517439afd8b4e07674705712b1
Author: Tristan van Berkom <tr...@codethink.co.uk>
AuthorDate: Tue Jul 26 15:01:33 2022 +0900

    _messenger.py: Document some undocumented symbols, and correct one type
    
    The element_key passed around in Message objects is a _DisplayKey, not str.
---
 src/buildstream/_messenger.py | 20 ++++++++++++++++++--
 1 file changed, 18 insertions(+), 2 deletions(-)

diff --git a/src/buildstream/_messenger.py b/src/buildstream/_messenger.py
index 6baacc9ab..71f8eda99 100644
--- a/src/buildstream/_messenger.py
+++ b/src/buildstream/_messenger.py
@@ -22,6 +22,7 @@ import threading
 from contextlib import contextmanager
 from typing import Optional, Callable, Iterator, TextIO
 
+from .types import _DisplayKey
 from . import _signals
 from ._exceptions import BstError
 from ._message import Message, MessageType, unconditional_messages
@@ -48,8 +49,13 @@ class _TimeData:
         self.start_time: datetime.datetime = start_time
 
 
+# _JobInfo
+#
+# Information about a job, used as a part of thread local storage
+# in order to fill in some Message parameters automatically.
+#
 class _JobInfo:
-    def __init__(self, action_name: str, element_name: str, element_key: str) -> None:
+    def __init__(self, action_name: str, element_name: str, element_key: _DisplayKey) -> None:
         self.action_name = action_name
         self.element_name = element_name
         self.element_key = element_key
@@ -111,7 +117,17 @@ class Messenger:
         #
         self._bst_version = get_versions()["version"]
 
-    def setup_new_action_context(self, action_name: str, element_name: str, element_key: str) -> None:
+    # setup_new_action_context()
+    #
+    # Setup the thread local context for a new task, some message
+    # components are filled in automatically based on the action context.
+    #
+    # Args:
+    #    action_name: The action name
+    #    element_name: The element name
+    #    element_key: The element's DisplayKey
+    #
+    def setup_new_action_context(self, action_name: str, element_name: str, element_key: _DisplayKey) -> None:
         self._locals.silence_scope_depth = 0
         self._locals.job = _JobInfo(action_name, element_name, element_key)
 


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

Posted by tv...@apache.org.
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)


[buildstream] 03/03: _frontend/app.py: Flush cached messages when handling a failure.

Posted by tv...@apache.org.
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 397d7c6fa1b0efec75905cc6612056a50a09f27a
Author: Tristan van Berkom <tr...@codethink.co.uk>
AuthorDate: Tue Jul 26 15:18:58 2022 +0900

    _frontend/app.py: Flush cached messages when handling a failure.
    
    It's very confusing to get an interactive prompt and not see the detailed
    failure message on screen - make sure we print the pending messages when
    handling a failure.
---
 src/buildstream/_frontend/app.py | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/src/buildstream/_frontend/app.py b/src/buildstream/_frontend/app.py
index 8d6cdb064..303c9636a 100644
--- a/src/buildstream/_frontend/app.py
+++ b/src/buildstream/_frontend/app.py
@@ -624,6 +624,9 @@ class App:
     def _job_failed(self, task_id, element=None):
         task = self._state.tasks[task_id]
 
+        # Flush any pending messages when handling a failure
+        self._render(message_text=self._message_text)
+
         # Dont attempt to handle a failure if the user has already opted to
         # terminate
         if not self.stream.terminated: