44import requests
55from requests .exceptions import ConnectionError , RequestException , Timeout
66
7+ import plain2code_exceptions
78from plain2code_state import RunState
89
910MAX_RETRIES = 4
1011RETRY_DELAY = 3
1112
1213
13- class FunctionalRequirementTooComplex (Exception ):
14- def __init__ (self , message , proposed_breakdown = None ):
15- self .message = message
16- self .proposed_breakdown = proposed_breakdown
17- super ().__init__ (self .message )
18-
19-
20- class ConflictingRequirements (Exception ):
21- pass
22-
23-
24- class CreditBalanceTooLow (Exception ):
25- pass
26-
27-
28- class LLMInternalError (Exception ):
29- pass
30-
31-
32- class MissingResource (Exception ):
33- pass
34-
35-
36- class PlainSyntaxError (Exception ):
37- pass
38-
39-
40- class OnlyRelativeLinksAllowed (Exception ):
41- pass
42-
43-
44- class LinkMustHaveTextSpecified (Exception ):
45- pass
46-
47-
48- class NoRenderFound (Exception ):
49- pass
50-
51-
52- class MultipleRendersFound (Exception ):
53- pass
54-
55-
5614class CodeplainAPI :
5715
5816 def __init__ (self , api_key , console ):
@@ -88,36 +46,36 @@ def post_request(self, endpoint_url, headers, payload, run_state: Optional[RunSt
8846
8947 if response .status_code == requests .codes .bad_request and "error_code" in response_json :
9048 if response_json ["error_code" ] == "FunctionalRequirementTooComplex" :
91- raise FunctionalRequirementTooComplex (
49+ raise plain2code_exceptions . FunctionalRequirementTooComplex (
9250 response_json ["message" ], response_json .get ("proposed_breakdown" )
9351 )
9452
9553 if response_json ["error_code" ] == "ConflictingRequirements" :
96- raise ConflictingRequirements (response_json ["message" ])
54+ raise plain2code_exceptions . ConflictingRequirements (response_json ["message" ])
9755
9856 if response_json ["error_code" ] == "CreditBalanceTooLow" :
99- raise CreditBalanceTooLow (response_json ["message" ])
57+ raise plain2code_exceptions . CreditBalanceTooLow (response_json ["message" ])
10058
10159 if response_json ["error_code" ] == "LLMInternalError" :
102- raise LLMInternalError (response_json ["message" ])
60+ raise plain2code_exceptions . LLMInternalError (response_json ["message" ])
10361
10462 if response_json ["error_code" ] == "MissingResource" :
105- raise MissingResource (response_json ["message" ])
63+ raise plain2code_exceptions . MissingResource (response_json ["message" ])
10664
10765 if response_json ["error_code" ] == "PlainSyntaxError" :
108- raise PlainSyntaxError (response_json ["message" ])
66+ raise plain2code_exceptions . PlainSyntaxError (response_json ["message" ])
10967
11068 if response_json ["error_code" ] == "OnlyRelativeLinksAllowed" :
111- raise OnlyRelativeLinksAllowed (response_json ["message" ])
69+ raise plain2code_exceptions . OnlyRelativeLinksAllowed (response_json ["message" ])
11270
11371 if response_json ["error_code" ] == "LinkMustHaveTextSpecified" :
114- raise LinkMustHaveTextSpecified (response_json ["message" ])
72+ raise plain2code_exceptions . LinkMustHaveTextSpecified (response_json ["message" ])
11573
11674 if response_json ["error_code" ] == "NoRenderFound" :
117- raise NoRenderFound (response_json ["message" ])
75+ raise plain2code_exceptions . NoRenderFound (response_json ["message" ])
11876
11977 if response_json ["error_code" ] == "MultipleRendersFound" :
120- raise MultipleRendersFound (response_json ["message" ])
78+ raise plain2code_exceptions . MultipleRendersFound (response_json ["message" ])
12179
12280 response .raise_for_status ()
12381 return response_json
@@ -237,6 +195,9 @@ def render_conformance_tests(
237195 plain_source_tree ,
238196 linked_resources ,
239197 existing_files_content ,
198+ conformance_tests_folder_name ,
199+ conformance_tests_json ,
200+ all_acceptance_tests ,
240201 run_state : RunState ,
241202 ):
242203 endpoint_url = f"{ self .api_url } /render_conformance_tests"
@@ -248,9 +209,13 @@ def render_conformance_tests(
248209 "plain_source_tree" : plain_source_tree ,
249210 "linked_resources" : linked_resources ,
250211 "existing_files_content" : existing_files_content ,
212+ "conformance_tests_folder_name" : conformance_tests_folder_name ,
213+ "conformance_tests_json" : conformance_tests_json ,
214+ "all_acceptance_tests" : all_acceptance_tests ,
251215 }
252216
253- return self .post_request (endpoint_url , headers , payload , run_state )
217+ response = self .post_request (endpoint_url , headers , payload , run_state )
218+ return response ["patched_response_files" ], response ["conformance_tests_plan_summary_string" ]
254219
255220 def generate_folder_name_from_functional_requirement (
256221 self ,
@@ -282,6 +247,8 @@ def fix_conformance_tests_issue(
282247 acceptance_tests ,
283248 conformance_tests_issue ,
284249 implementation_fix_count ,
250+ conformance_tests_folder_name ,
251+ current_testing_frid_high_level_implementation_plan : Optional [str ],
285252 run_state : RunState ,
286253 ):
287254 endpoint_url = f"{ self .api_url } /fix_conformance_tests_issue"
@@ -297,6 +264,8 @@ def fix_conformance_tests_issue(
297264 "conformance_tests_files" : conformance_tests_files ,
298265 "conformance_tests_issue" : conformance_tests_issue ,
299266 "implementation_fix_count" : implementation_fix_count ,
267+ "conformance_tests_folder_name" : conformance_tests_folder_name ,
268+ "current_testing_frid_high_level_implementation_plan" : current_testing_frid_high_level_implementation_plan ,
300269 }
301270
302271 if acceptance_tests is not None :
@@ -380,3 +349,22 @@ def finish_functional_requirement(self, frid, run_state: RunState):
380349 }
381350
382351 return self .post_request (endpoint_url , headers , payload , run_state )
352+
353+ def summarize_finished_conformance_tests (
354+ self ,
355+ frid ,
356+ plain_source_tree ,
357+ linked_resources ,
358+ conformance_test_files_content ,
359+ run_state : RunState ,
360+ ):
361+ endpoint_url = f"{ self .api_url } /summarize_finished_conformance_tests"
362+ headers = {"X-API-Key" : self .api_key , "Content-Type" : "application/json" }
363+ payload = {
364+ "frid" : frid ,
365+ "plain_source_tree" : plain_source_tree ,
366+ "linked_resources" : linked_resources ,
367+ "conformance_test_files_content" : conformance_test_files_content ,
368+ }
369+
370+ return self .post_request (endpoint_url , headers , payload , run_state )
0 commit comments