Skip to content

Commit 3ff50fb

Browse files
authored
Merge pull request #35 from Codeplain-ai/release/11-26
Concepts rules in ***plain
2 parents 3a798c9 + b6e45fb commit 3ff50fb

40 files changed

+2086
-1274
lines changed

codeplain_REST_api.py

Lines changed: 42 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -4,55 +4,13 @@
44
import requests
55
from requests.exceptions import ConnectionError, RequestException, Timeout
66

7+
import plain2code_exceptions
78
from plain2code_state import RunState
89

910
MAX_RETRIES = 4
1011
RETRY_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-
5614
class 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

Comments
 (0)