Skip to content

Commit 167e51e

Browse files
author
Philip Guo
committed
fixed a tiny corner case
1 parent fba5849 commit 167e51e

4 files changed

Lines changed: 87 additions & 1 deletion

File tree

v3/pg_encoder.py

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -219,7 +219,16 @@ def encode(self, dat):
219219
def encode_class_or_instance(self, dat, new_obj):
220220
"""Encode dat as a class or instance."""
221221
if is_instance(dat):
222-
class_name = get_name(dat.__class__)
222+
if hasattr(dat, '__class__'):
223+
# common case ...
224+
class_name = get_name(dat.__class__)
225+
else:
226+
# super special case for something like
227+
# "from datetime import datetime_CAPI" in Python 3.2,
228+
# which is some weird 'PyCapsule' type ...
229+
# http://docs.python.org/release/3.1.5/c-api/capsule.html
230+
class_name = get_name(type(dat))
231+
223232
new_obj.extend(['INSTANCE', class_name])
224233
# don't traverse inside modules, or else risk EXPLODING the visualization
225234
if class_name == 'module':
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
{
2+
"code": "# importing some C-ish module ...\n# make sure this doesn't crash in Python 2 or 3\nfrom datetime import datetime_CAPI\n",
3+
"trace": [
4+
{
5+
"ordered_globals": [],
6+
"stdout": "",
7+
"func_name": "<module>",
8+
"stack_to_render": [],
9+
"globals": {},
10+
"heap": {},
11+
"line": 3,
12+
"event": "step_line"
13+
},
14+
{
15+
"ordered_globals": [
16+
"datetime_CAPI"
17+
],
18+
"stdout": "",
19+
"func_name": "<module>",
20+
"stack_to_render": [],
21+
"globals": {
22+
"datetime_CAPI": [
23+
"REF",
24+
1
25+
]
26+
},
27+
"heap": {
28+
"1": [
29+
"PyCapsule",
30+
"<capsule object \"datetime.datetime_CAPI\" at 0xADDR>"
31+
]
32+
},
33+
"line": 3,
34+
"event": "return"
35+
}
36+
]
37+
}
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
{
2+
"code": "# importing some C-ish module ...\n# make sure this doesn't crash in Python 2 or 3\nfrom datetime import datetime_CAPI\n",
3+
"trace": [
4+
{
5+
"ordered_globals": [],
6+
"stdout": "",
7+
"func_name": "<module>",
8+
"stack_to_render": [],
9+
"globals": {},
10+
"heap": {},
11+
"line": 3,
12+
"event": "step_line"
13+
},
14+
{
15+
"ordered_globals": [
16+
"datetime_CAPI"
17+
],
18+
"stdout": "",
19+
"func_name": "<module>",
20+
"stack_to_render": [],
21+
"globals": {
22+
"datetime_CAPI": [
23+
"REF",
24+
1
25+
]
26+
},
27+
"heap": {
28+
"1": [
29+
"INSTANCE",
30+
"PyCapsule"
31+
]
32+
},
33+
"line": 3,
34+
"event": "return"
35+
}
36+
]
37+
}

v3/tests/backend-tests/cmodule.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
# importing some C-ish module ...
2+
# make sure this doesn't crash in Python 2 or 3
3+
from datetime import datetime_CAPI

0 commit comments

Comments
 (0)