With the docs changes below,
Reviewed-by: Juraj Linkeš <juraj.lin...@pantheon.tech>

diff --git a/dts/framework/remote_session/interactive_shell.py 
b/dts/framework/remote_session/interactive_shell.py
index 11dc8a0643..fcaf1f6a5f 100644
--- a/dts/framework/remote_session/interactive_shell.py
+++ b/dts/framework/remote_session/interactive_shell.py
@@ -9,6 +9,9 @@
  collection.
  """
+import weakref
+from typing import ClassVar
+
  from .single_active_interactive_shell import SingleActiveInteractiveShell
@@ -16,18 +19,26 @@ class InteractiveShell(SingleActiveInteractiveShell):
      """Adds manual start and stop functionality to interactive shells.
Like its super-class, this class should not be instantiated directly and should instead be
-    extended. This class also provides an option for automated cleanup of the 
application through
-    the garbage collector.
+    extended. This class also provides an option for automated cleanup of the 
application using a
+    weakref and a finalize class. This finalize class allows for cleanup of 
the class at the time
+    of garbage collection and also ensures that cleanup only happens once. 
This way if a user
+    initiates the closing of the shell manually it is not repeated at the time 
of garbage
+    collection.
      """
+ _finalizer: weakref.finalize
+    #: Shells that do not require only one instance to be running shouldn't 
need more than 1
+    #: attempt to start.

This wording is a bit confusing. This could mean that the shells could require multiple instances. We could try an alternative approach: One attempt should be enough for shells which don't have to worry about other instances closing before starting a new one.

Or something similar.

+    _init_attempts: ClassVar[int] = 1
+
      def start_application(self) -> None:
-        """Start the application."""
+        """Start the application.
+
+        After the application has started, add a weakref finalize class to 
manage cleanup.

I think this could be improved to:
use :class:`weakref.finalize` to manage cleanup

+        """
          self._start_application()
+        self._finalizer = weakref.finalize(self, self._close)
def close(self) -> None:
-        """Properly free all resources."""
-        self._close()
-
-    def __del__(self) -> None:
-        """Make sure the session is properly closed before deleting the 
object."""
-        self.close()
+        """Free all resources using finalize class."""

Also here:
using :class:`weakref.finalize`

+        self._finalizer()

Reply via email to