Manages code files, including extraction, updates, rewriting, and version control.
| 6 | |
| 7 | |
| 8 | class Codes: |
| 9 | """ |
| 10 | Manages code files, including extraction, updates, rewriting, and version control. |
| 11 | """ |
| 12 | |
| 13 | def __init__(self, generated_content: list | dict | None = None): |
| 14 | """ |
| 15 | Initializes the Codes class and stores parsed generated code content in codebooks. |
| 16 | Args: |
| 17 | generated_content: Generated code content (in string format). |
| 18 | """ |
| 19 | self.directory: str = None # Project directory path |
| 20 | self.version: float = 0.0 # Code version |
| 21 | self.generated_content: str = generated_content # Generated code content |
| 22 | self.codebooks = {} # Stores filename and code content pairs |
| 23 | |
| 24 | def extract_filename_from_code(code): |
| 25 | """ |
| 26 | Extracts filename from code content. |
| 27 | Args: |
| 28 | code: Code content |
| 29 | Returns: |
| 30 | file_name: Extracted filename |
| 31 | """ |
| 32 | file_name = "" |
| 33 | regex_extract = r"class (\S+?):\n" |
| 34 | matches_extract = re.finditer(regex_extract, code, re.DOTALL) |
| 35 | for match_extract in matches_extract: |
| 36 | file_name = match_extract.group(1) |
| 37 | file_name = file_name.lower().split("(")[0] + ".py" |
| 38 | return file_name |
| 39 | |
| 40 | def process_code_item(item_dict): |
| 41 | """ |
| 42 | Processes a single code dictionary item, extracting filename and code, and storing them in codebooks. |
| 43 | Args: |
| 44 | item_dict: Dictionary containing filename and code |
| 45 | """ |
| 46 | filename = item_dict.get("filename", "").lower() |
| 47 | code = item_dict.get("code", "") |
| 48 | # If code contains __main__, set filename as main.py |
| 49 | if "__main__" in code: |
| 50 | filename = "main.py" |
| 51 | # If filename is not provided, try extracting it from code |
| 52 | if filename == "": |
| 53 | filename = extract_filename_from_code(code) |
| 54 | assert filename != "", "Filename extraction failed" |
| 55 | if filename and code: |
| 56 | self.codebooks[filename] = self._format_code(code) |
| 57 | |
| 58 | # Parse and store the generated code if content is provided |
| 59 | if generated_content: |
| 60 | if isinstance(generated_content, list): |
| 61 | for item in generated_content: |
| 62 | process_code_item(item) |
| 63 | elif isinstance(generated_content, dict): |
| 64 | process_code_item(generated_content) |
| 65 |
no outgoing calls
no test coverage detected