Skip to content

Commit

Permalink
Fix #1408: Can no longer expand Numpy arrays to view elements
Browse files Browse the repository at this point in the history
Fix regression when loading pydevd plugins for numpy, pandas, and django.

Add smoke test for numpy arrays.
  • Loading branch information
int19h committed Dec 15, 2023
1 parent e9a39f7 commit b9b09e6
Show file tree
Hide file tree
Showing 6 changed files with 94 additions and 3 deletions.
9 changes: 8 additions & 1 deletion setup.py
Expand Up @@ -176,7 +176,14 @@ def tail_is(*suffixes):
"License :: OSI Approved :: MIT License",
],
package_dir={"": "src"},
packages=setuptools.find_namespace_packages(where="src", include=["debugpy*"]),
packages=[
"debugpy",
"debugpy.adapter",
"debugpy.common",
"debugpy.launcher",
"debugpy.server",
"debugpy._vendored",
],
package_data={
"debugpy": ["ThirdPartyNotices.txt"],
"debugpy._vendored": [
Expand Down
2 changes: 2 additions & 0 deletions src/debugpy/_vendored/pydevd/pydevd_plugins/__init__.py
@@ -0,0 +1,2 @@
import pkgutil
__path__ = pkgutil.extend_path(__path__, __name__)
@@ -0,0 +1,2 @@
import pkgutil
__path__ = pkgutil.extend_path(__path__, __name__)
@@ -0,0 +1,2 @@
import pkgutil
__path__ = pkgutil.extend_path(__path__, __name__)
77 changes: 77 additions & 0 deletions tests/debugpy/test_numpy.py
@@ -0,0 +1,77 @@
# Copyright (c) Microsoft Corporation. All rights reserved.
# Licensed under the MIT License. See LICENSE in the project root
# for license information.

from tests import debug
from tests.patterns import some


def test_ndarray(pyfile, target, run):
@pyfile
def code_to_debug():
import numpy
import debuggee

debuggee.setup()
a = numpy.array([123, 456], numpy.int32)
print(a) # @bp

with debug.Session() as session:
session.config["variablePresentation"] = {"all": "hide", "protected": "inline"}
with run(session, target(code_to_debug)):
session.set_breakpoints(code_to_debug, all)

stop = session.wait_for_stop()
scopes = session.request("scopes", {"frameId": stop.frame_id})["scopes"]
globals_ref = scopes[0]["variablesReference"]
vars = session.request(
"variables",
{"variablesReference": globals_ref},
)["variables"]
print(vars)

# Fetch children variables of the array.
(a,) = (v for v in vars if v["name"] == "a")
a_vars = session.request(
"variables",
{"variablesReference": a["variablesReference"]},
)["variables"]
print(a_vars)

# Fetch the actual array items
(items,) = (v for v in a_vars if v["name"] == "[0:2] ")
a_items = session.request(
"variables",
{"variablesReference": items["variablesReference"]},
)["variables"]
print(a_items)

assert a_items == [
some.dict.containing(
{
"type": "int32",
"name": "0",
"value": "123",
"variablesReference": some.int,
}
),
some.dict.containing(
{
"type": "int32",
"name": "1",
"value": "456",
"variablesReference": some.int,
}
),
some.dict.containing(
{
"type": "int",
"name": "len()",
"value": "2",
"presentationHint": {"attributes": ["readOnly"]},
"variablesReference": 0,
}
),
]

session.request_continue()
5 changes: 3 additions & 2 deletions tests/requirements.txt
Expand Up @@ -13,6 +13,7 @@ psutil
## Used in Python code that is run/debugged by the tests:

django
requests
gevent
flask
gevent
numpy
requests

0 comments on commit b9b09e6

Please sign in to comment.