Skip to content

Commit

Permalink
Merged PR posit-dev/positron-python#84: Refactor positron to use insp…
Browse files Browse the repository at this point in the history
…ectors

Merge pull request #84 from posit-dev/positron-refactor

Refactor positron to use inspectors
--------------------
Commit message for posit-dev/positron-python@3d137ac:

Refactor positron to use inspectors


Authored-by: Pete Farland <pete.farland@posit.co>
Signed-off-by: Pete Farland <pete.farland@posit.co>
  • Loading branch information
petetronic authored and wesm committed Mar 28, 2024
1 parent 4277843 commit ac2d1d3
Show file tree
Hide file tree
Showing 3 changed files with 407 additions and 203 deletions.
31 changes: 4 additions & 27 deletions extensions/positron-python/pythonFiles/positron/environment.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
from collections.abc import Iterable, Mapping, Sequence
from typing import Any, Optional

from .inspectors import get_inspector, is_inspectable
from .inspectors import get_inspector, is_inspectable, MAX_ITEMS
from .utils import get_qualname


Expand Down Expand Up @@ -165,9 +165,6 @@ def __init__(self, message):
self["message"] = message


MAX_ITEMS = 2000


class EnvironmentService:
def __init__(self, kernel): # noqa: F821
self.kernel = kernel
Expand Down Expand Up @@ -403,29 +400,9 @@ def _send_details(self, path: Sequence, context: Any = None):
"""

children = []
if isinstance(context, Mapping):
# Treat dictionary items as children
children.extend(self._summarize_variables(context))

elif is_inspectable(context):
inspector = get_inspector(context)
for child_name in inspector.get_child_names(context):
child_display_type, child_value = inspector.get_child_info(context, child_name)
summary = self._summarize_variable(child_name, child_value)
if summary is not None:
summary["display_type"] = child_display_type
children.append(summary)

elif isinstance(context, (list, set, frozenset, tuple)):
# Treat collection items as children, with the index as the name
for i, item in enumerate(context):
if len(children) >= MAX_ITEMS:
break

summary = self._summarize_variable(i, item)
if summary is not None:
children.append(summary)

inspector = get_inspector(context)
if inspector is not None and inspector.has_children(context):
children = inspector.summarize_children(context, self._summarize_variable)
else:
# Otherwise, treat as a simple value at given path
summary = self._summarize_variable("", context)
Expand Down
Loading

0 comments on commit ac2d1d3

Please sign in to comment.