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: