1111)
1212from protowhat .Feedback import InstructorError
1313from pythonwhat .Feedback import Feedback
14- from protowhat .Test import Test
14+ from protowhat .Test import Fail
1515from pythonwhat import signatures
1616from pythonwhat .converters import get_manual_converters
1717from 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