robotcode-debugger 0.81.0__tar.gz → 0.82.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (22) hide show
  1. {robotcode_debugger-0.81.0 → robotcode_debugger-0.82.1}/PKG-INFO +3 -3
  2. {robotcode_debugger-0.81.0 → robotcode_debugger-0.82.1}/pyproject.toml +2 -2
  3. robotcode_debugger-0.82.1/src/robotcode/debugger/__version__.py +1 -0
  4. {robotcode_debugger-0.81.0 → robotcode_debugger-0.82.1}/src/robotcode/debugger/debugger.py +10 -16
  5. {robotcode_debugger-0.81.0 → robotcode_debugger-0.82.1}/src/robotcode/debugger/protocol.py +4 -6
  6. {robotcode_debugger-0.81.0 → robotcode_debugger-0.82.1}/src/robotcode/debugger/run.py +1 -2
  7. robotcode_debugger-0.81.0/src/robotcode/debugger/__version__.py +0 -1
  8. {robotcode_debugger-0.81.0 → robotcode_debugger-0.82.1}/.gitignore +0 -0
  9. {robotcode_debugger-0.81.0 → robotcode_debugger-0.82.1}/LICENSE.txt +0 -0
  10. {robotcode_debugger-0.81.0 → robotcode_debugger-0.82.1}/README.md +0 -0
  11. {robotcode_debugger-0.81.0 → robotcode_debugger-0.82.1}/src/robotcode/debugger/__init__.py +0 -0
  12. {robotcode_debugger-0.81.0 → robotcode_debugger-0.82.1}/src/robotcode/debugger/cli.py +0 -0
  13. {robotcode_debugger-0.81.0 → robotcode_debugger-0.82.1}/src/robotcode/debugger/dap_types.py +0 -0
  14. {robotcode_debugger-0.81.0 → robotcode_debugger-0.82.1}/src/robotcode/debugger/hooks.py +0 -0
  15. {robotcode_debugger-0.81.0 → robotcode_debugger-0.82.1}/src/robotcode/debugger/launcher/__init__.py +0 -0
  16. {robotcode_debugger-0.81.0 → robotcode_debugger-0.82.1}/src/robotcode/debugger/launcher/cli.py +0 -0
  17. {robotcode_debugger-0.81.0 → robotcode_debugger-0.82.1}/src/robotcode/debugger/launcher/client.py +0 -0
  18. {robotcode_debugger-0.81.0 → robotcode_debugger-0.82.1}/src/robotcode/debugger/launcher/run.py +0 -0
  19. {robotcode_debugger-0.81.0 → robotcode_debugger-0.82.1}/src/robotcode/debugger/launcher/server.py +0 -0
  20. {robotcode_debugger-0.81.0 → robotcode_debugger-0.82.1}/src/robotcode/debugger/listeners.py +0 -0
  21. {robotcode_debugger-0.81.0 → robotcode_debugger-0.82.1}/src/robotcode/debugger/py.typed +0 -0
  22. {robotcode_debugger-0.81.0 → robotcode_debugger-0.82.1}/src/robotcode/debugger/server.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: robotcode-debugger
3
- Version: 0.81.0
3
+ Version: 0.82.1
4
4
  Summary: RobotCode Debugger for Robot Framework
5
5
  Project-URL: Homepage, https://robotcode.io
6
6
  Project-URL: Donate, https://opencollective.com/robotcode
@@ -25,8 +25,8 @@ Classifier: Programming Language :: Python :: Implementation :: PyPy
25
25
  Classifier: Topic :: Utilities
26
26
  Classifier: Typing :: Typed
27
27
  Requires-Python: >=3.8
28
- Requires-Dist: robotcode-jsonrpc2==0.81.0
29
- Requires-Dist: robotcode-runner==0.81.0
28
+ Requires-Dist: robotcode-jsonrpc2==0.82.1
29
+ Requires-Dist: robotcode-runner==0.82.1
30
30
  Requires-Dist: robotframework>=4.1.0
31
31
  Provides-Extra: debugpy
32
32
  Requires-Dist: debugpy; extra == 'debugpy'
@@ -28,8 +28,8 @@ classifiers = [
28
28
  dynamic = ["version"]
29
29
  dependencies = [
30
30
  "robotframework>=4.1.0",
31
- "robotcode-jsonrpc2==0.81.0",
32
- "robotcode-runner==0.81.0",
31
+ "robotcode-jsonrpc2==0.82.1",
32
+ "robotcode-runner==0.82.1",
33
33
  ]
34
34
 
35
35
  [project.optional-dependencies]
@@ -0,0 +1 @@
1
+ __version__ = "0.82.1"
@@ -1,6 +1,3 @@
1
- from __future__ import annotations
2
-
3
- import asyncio
4
1
  import itertools
5
2
  import os
6
3
  import pathlib
@@ -157,7 +154,7 @@ class InvalidThreadIdError(Exception):
157
154
  class StackFrameEntry:
158
155
  def __init__(
159
156
  self,
160
- parent: Optional[StackFrameEntry],
157
+ parent: Optional["StackFrameEntry"],
161
158
  context: Any,
162
159
  name: str,
163
160
  type: str,
@@ -193,7 +190,7 @@ class StackFrameEntry:
193
190
  def __repr__(self) -> str:
194
191
  return f"StackFrameEntry({self.name!r}, {self.type!r}, {self.source!r}, {self.line!r}, {self.column!r})"
195
192
 
196
- def get_first_or_self(self) -> StackFrameEntry:
193
+ def get_first_or_self(self) -> "StackFrameEntry":
197
194
  if self.stack_frames:
198
195
  return self.stack_frames[0]
199
196
  return self
@@ -260,14 +257,14 @@ else:
260
257
 
261
258
 
262
259
  class Debugger:
263
- __instance: ClassVar[Optional[Debugger]] = None
260
+ __instance: ClassVar[Optional["Debugger"]] = None
264
261
  __lock: ClassVar = threading.RLock()
265
262
  __inside_instance: ClassVar = False
266
263
 
267
264
  _logger = LoggingDescriptor()
268
265
 
269
266
  @classmethod
270
- def instance(cls) -> Debugger:
267
+ def instance(cls) -> "Debugger":
271
268
  if cls.__instance is not None:
272
269
  return cls.__instance
273
270
  with cls.__lock:
@@ -318,7 +315,6 @@ class Debugger:
318
315
  self.terminated = False
319
316
  self.attached = False
320
317
  self.path_mappings: List[PathMapping] = []
321
- self.server_loop: Optional[asyncio.AbstractEventLoop] = None
322
318
 
323
319
  self._keyword_to_evaluate: Optional[Callable[..., Any]] = None
324
320
  self._evaluated_keyword_result: Any = None
@@ -917,14 +913,12 @@ class Debugger:
917
913
  status = attributes.get("status", "")
918
914
 
919
915
  if status == "FAIL":
920
- if self.server_loop:
921
- self.process_end_state(
922
- status,
923
- {"failed_suite"},
924
- "Suite failed.",
925
- f"Suite failed{f': {v}' if (v := attributes.get('message')) else ''}",
926
- )
927
-
916
+ self.process_end_state(
917
+ status,
918
+ {"failed_suite"},
919
+ "Suite failed.",
920
+ f"Suite failed{f': {v}' if (v := attributes.get('message')) else ''}",
921
+ )
928
922
  self.wait_for_running()
929
923
 
930
924
  source = attributes.get("source")
@@ -12,6 +12,7 @@ from typing import (
12
12
  List,
13
13
  Mapping,
14
14
  Optional,
15
+ Set,
15
16
  Tuple,
16
17
  Type,
17
18
  TypeVar,
@@ -81,6 +82,7 @@ class DebugAdapterProtocol(JsonRPCProtocolBase):
81
82
  self._received_request_lock = threading.RLock()
82
83
  self._received_request: OrderedDict[int, asyncio.Future[Any]] = OrderedDict()
83
84
  self._initialized = False
85
+ self._running_handle_message_tasks: Set[asyncio.Future[Any]] = set()
84
86
 
85
87
  @_logger.call
86
88
  def send_message(self, message: ProtocolMessage) -> None:
@@ -140,14 +142,10 @@ class DebugAdapterProtocol(JsonRPCProtocolBase):
140
142
  )
141
143
 
142
144
  def _handle_messages(self, iterator: Iterator[ProtocolMessage]) -> None:
143
- def done(f: "asyncio.Future[Any]") -> None:
144
- ex = f.exception()
145
- if ex is not None and not isinstance(ex, asyncio.CancelledError):
146
- self._logger.exception(ex, exc_info=ex)
147
-
148
145
  for m in iterator:
149
146
  task = asyncio.create_task(self.handle_message(m), name="handle_message")
150
- task.add_done_callback(done)
147
+ self._running_handle_message_tasks.add(task)
148
+ task.add_done_callback(self._running_handle_message_tasks.discard)
151
149
 
152
150
  @_logger.call
153
151
  async def handle_message(self, message: ProtocolMessage) -> None:
@@ -230,7 +230,6 @@ def run_debugger(
230
230
  Debugger.instance().colored_output = app.colored
231
231
  Debugger.instance().debug = debug
232
232
  Debugger.instance().set_main_thread(threading.current_thread())
233
- Debugger.instance().server_loop = server.loop
234
233
 
235
234
  app.verbose("Start the debugger instance")
236
235
  Debugger.instance().start()
@@ -267,7 +266,7 @@ def run_debugger(
267
266
  server.protocol.terminate()
268
267
 
269
268
  if not server.protocol.wait_for_disconnected():
270
- app.warning("Timeout to get disconnected from client")
269
+ app.verbose("Timeout to get disconnected from client")
271
270
 
272
271
  server.loop.stop()
273
272
 
@@ -1 +0,0 @@
1
- __version__ = "0.81.0"