Skip to content

Commit 2e268c6

Browse files
committed
Improve parsing compatibility with protowhat
1 parent fe2ed99 commit 2e268c6

1 file changed

Lines changed: 18 additions & 11 deletions

File tree

pythonwhat/State.py

Lines changed: 18 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
)
1212
from protowhat.Feedback import InstructorError
1313
from pythonwhat.Feedback import Feedback
14-
from protowhat.Test import Test
14+
from protowhat.Test import Fail
1515
from pythonwhat import signatures
1616
from pythonwhat.converters import get_manual_converters
1717
from collections.abc import Mapping
@@ -79,17 +79,15 @@ def __init__(
7979

8080
# parse code if didn't happen yet
8181
if not hasattr(self, "student_tree"):
82-
self.student_tree_tokens, self.student_tree = self.parse_external(
83-
self.student_code
84-
)
82+
self.student_tree_tokens, self.student_tree = self.parse(self.student_code)
8583

8684
if not hasattr(self, "solution_tree"):
87-
self.solution_tree_tokens, self.solution_tree = self.parse_internal(
88-
self.solution_code
85+
self.solution_tree_tokens, self.solution_tree = self.parse(
86+
self.solution_code, test=False
8987
)
9088

9189
if not hasattr(self, "pre_exercise_tree"):
92-
_, self.pre_exercise_tree = State.parse_internal(self.pre_exercise_code)
90+
_, self.pre_exercise_tree = self.parse(self.pre_exercise_code, test=False)
9391

9492
if not hasattr(self, "parent_state"):
9593
self.parent_state = None
@@ -298,7 +296,7 @@ def parse_external(self, x):
298296
e.filename = "script.py"
299297
# no line info for now
300298
self.do_test(
301-
Test(
299+
Fail(
302300
Feedback(
303301
"Your code could not be parsed due to an error in the indentation:<br>`%s.`"
304302
% str(e)
@@ -310,7 +308,7 @@ def parse_external(self, x):
310308
e.filename = "script.py"
311309
# no line info for now
312310
self.do_test(
313-
Test(
311+
Fail(
314312
Feedback(
315313
"Your code can not be executed due to a syntax error:<br>`%s.`"
316314
% str(e)
@@ -321,13 +319,14 @@ def parse_external(self, x):
321319
# Can happen, can't catch this earlier because we can't differentiate between
322320
# TypeError in parsing or TypeError within code (at runtime).
323321
except:
324-
self.do_test(Test(Feedback("Something went wrong while parsing your code.")))
322+
self.do_test(
323+
Fail(Feedback("Something went wrong while parsing your code."))
324+
)
325325

326326
return res
327327

328328
@staticmethod
329329
def parse_internal(x):
330-
res = (None, None)
331330
try:
332331
res = asttokens.ASTTokens(x, parse=True)
333332
return (res, res._tree)
@@ -336,6 +335,14 @@ def parse_internal(x):
336335
"Something went wrong when parsing PEC or solution code: %s" % str(e)
337336
)
338337

338+
def parse(self, text, test=True):
339+
if test:
340+
parse_method = self.parse_external
341+
else:
342+
parse_method = self.parse_internal
343+
344+
return parse_method(text)
345+
339346

340347
# add property methods for retrieving parser outputs --------------------------
341348
# note that this code is an alternative means of using something like..

0 commit comments

Comments
 (0)