Skip to content

Commit 5412557

Browse files
author
Tjaz Erzen
committed
Fix error propagation in TUI
1 parent 5e0e8ff commit 5412557

7 files changed

Lines changed: 12 additions & 19 deletions

File tree

plain2code.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
from plain2code_exceptions import (
2121
ConflictingRequirements,
2222
CreditBalanceTooLow,
23+
InternalClientError,
2324
InternalServerError,
2425
InvalidAPIKey,
2526
InvalidFridArgument,
@@ -30,7 +31,6 @@
3031
NetworkConnectionError,
3132
OutdatedClientVersion,
3233
PlainSyntaxError,
33-
UnexpectedState,
3434
)
3535
from plain2code_logger import (
3636
CrashLogHandler,
@@ -295,7 +295,7 @@ def main(): # noqa: C901
295295
console.error(f"Invalid API key: {str(e)}\n")
296296
except OutdatedClientVersion as e:
297297
console.error(f"Outdated client version: {str(e)}\n")
298-
except (InternalServerError, UnexpectedState):
298+
except (InternalServerError, InternalClientError):
299299
exc_info = sys.exc_info()
300300
console.error(
301301
f"Internal server error.\n\nPlease report the error to support@codeplain.ai with the attached {args.log_file_name} file."

plain2code_exceptions.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ class PlainSyntaxError(Exception):
2525
pass
2626

2727

28-
class UnexpectedState(Exception):
28+
class InternalClientError(Exception):
2929
pass
3030

3131

render_machine/actions/analyze_specification_ambiguity.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import git_utils
55
import plain_spec
66
from plain2code_console import console
7+
from plain2code_exceptions import InternalClientError
78
from plain2code_utils import AMBIGUITY_CAUSES
89
from render_machine.actions.base_action import BaseAction
910
from render_machine.render_context import RenderContext
@@ -17,7 +18,7 @@ def execute(self, render_context: RenderContext, _previous_action_payload: Any |
1718
render_context.build_folder, render_context.frid_context.frid
1819
)
1920
if fixed_implementation_code_diff is None:
20-
raise Exception(
21+
raise InternalClientError(
2122
"Fixes to the implementation code found during conformance testing are not committed to git."
2223
)
2324
previous_frid = plain_spec.get_previous_frid(render_context.plain_source_tree, render_context.frid_context.frid)

render_machine/actions/fix_conformance_test.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
import plain_spec
66
from memory_management import MemoryManager
77
from plain2code_console import console
8-
from plain2code_exceptions import UnexpectedState
8+
from plain2code_exceptions import InternalClientError
99
from render_machine.actions.base_action import BaseAction
1010
from render_machine.implementation_code_helpers import ImplementationCodeHelpers
1111
from render_machine.render_context import RenderContext
@@ -21,7 +21,7 @@ def execute(self, render_context: RenderContext, previous_action_payload: Any |
2121
)
2222

2323
if not previous_action_payload.get("previous_conformance_tests_issue"):
24-
raise UnexpectedState("Previous action payload does not contain previous conformance tests issue.")
24+
raise InternalClientError("Previous action payload does not contain previous conformance tests issue.")
2525
previous_conformance_tests_issue = previous_action_payload["previous_conformance_tests_issue"]
2626

2727
render_context.conformance_tests_running_context.previous_conformance_tests_issue_old = (

render_machine/actions/fix_unit_tests.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import file_utils
44
import render_machine.render_utils as render_utils
55
from plain2code_console import console
6-
from plain2code_exceptions import UnexpectedState
6+
from plain2code_exceptions import InternalClientError
77
from render_machine.actions.base_action import BaseAction
88
from render_machine.implementation_code_helpers import ImplementationCodeHelpers
99
from render_machine.render_context import RenderContext
@@ -16,7 +16,7 @@ class FixUnitTests(BaseAction):
1616

1717
def execute(self, render_context: RenderContext, previous_action_payload: Any | None):
1818
if not previous_action_payload.get("previous_unittests_issue"):
19-
raise UnexpectedState("Previous action payload does not contain previous unit tests issue.")
19+
raise InternalClientError("Previous action payload does not contain previous unit tests issue.")
2020
previous_unittests_issue = previous_action_payload["previous_unittests_issue"]
2121

2222
if previous_unittests_issue and len(previous_unittests_issue) > MAX_ISSUE_LENGTH:

render_machine/conformance_tests.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33

44
import file_utils
55
from plain2code_console import console
6+
from plain2code_exceptions import InternalClientError
67
from plain_modules import PlainModule
78

89
CONFORMANCE_TESTS_DEFINITION_FILE_NAME = "conformance_tests.json"
@@ -69,7 +70,7 @@ def get_source_conformance_test_folder_name(
6970
) -> tuple[str, str]:
7071
original_prefix = self.get_module_conformance_tests_folder(current_testing_module_name)
7172
if not original_conformance_test_folder_name.startswith(original_prefix):
72-
raise Exception(
73+
raise InternalClientError(
7374
f"Unexpected conformance test folder name prefix {original_prefix} for {original_conformance_test_folder_name}!"
7475
)
7576

tui/plain2code_tui.py

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919
RenderModuleStarted,
2020
RenderStateUpdated,
2121
)
22-
from plain2code_exceptions import InternalServerError, NetworkConnectionError
2322
from render_machine.states import States
2423
from tui.widget_helpers import log_to_widget
2524

@@ -138,15 +137,7 @@ def on_worker_state_changed(self, event: Worker.StateChanged) -> None:
138137
# Extract the original exception from WorkerFailed wrapper
139138
error = event.worker.error
140139
original_error = error.__cause__ if isinstance(error, WorkerFailed) and error.__cause__ else error
141-
142-
# Connection-related errors are propagated as-is to show helpful error messages
143-
# All other errors are wrapped in InternalServerError for consistent handling
144-
if isinstance(original_error, NetworkConnectionError):
145-
self.exit(result=original_error)
146-
else:
147-
internal_error = InternalServerError(str(original_error))
148-
internal_error.__cause__ = original_error
149-
self.exit(result=internal_error)
140+
self.exit(result=original_error)
150141

151142
def _handle_exception(self, error: Exception) -> None:
152143
"""Override Textual's exception handler to suppress console tracebacks for worker errors.

0 commit comments

Comments
 (0)