| import os |
| from typing_extensions import Annotated |
| from IPython import get_ipython |
|
|
| default_path = "coding/" |
|
|
|
|
| class IPythonUtils: |
|
|
| def exec_python(cell: Annotated[str, "Valid Python cell to execute."]) -> str: |
| """ |
| run cell in ipython and return the execution result. |
| """ |
| ipython = get_ipython() |
| result = ipython.run_cell(cell) |
| log = str(result.result) |
| if result.error_before_exec is not None: |
| log += f"\n{result.error_before_exec}" |
| if result.error_in_exec is not None: |
| log += f"\n{result.error_in_exec}" |
| return log |
|
|
| def display_image( |
| image_path: Annotated[str, "Path to image file to display."] |
| ) -> str: |
| """ |
| Display image in Jupyter Notebook. |
| """ |
| log = __class__.exec_python( |
| f"from IPython.display import Image, display\n\ndisplay(Image(filename='{image_path}'))" |
| ) |
| if not log: |
| return "Image displayed successfully" |
| else: |
| return log |
|
|
|
|
| class CodingUtils: |
|
|
| def list_dir(directory: Annotated[str, "Directory to check."]) -> str: |
| """ |
| List files in choosen directory. |
| """ |
| files = os.listdir(default_path + directory) |
| return str(files) |
|
|
| def see_file(filename: Annotated[str, "Name and path of file to check."]) -> str: |
| """ |
| Check the contents of a chosen file. |
| """ |
| with open(default_path + filename, "r") as file: |
| lines = file.readlines() |
| formatted_lines = [f"{i+1}:{line}" for i, line in enumerate(lines)] |
| file_contents = "".join(formatted_lines) |
|
|
| return file_contents |
|
|
| def modify_code( |
| filename: Annotated[str, "Name and path of file to change."], |
| start_line: Annotated[int, "Start line number to replace with new code."], |
| end_line: Annotated[int, "End line number to replace with new code."], |
| new_code: Annotated[ |
| str, |
| "New piece of code to replace old code with. Remember about providing indents.", |
| ], |
| ) -> str: |
| """ |
| Replace old piece of code with new one. Proper indentation is important. |
| """ |
| with open(default_path + filename, "r+") as file: |
| file_contents = file.readlines() |
| file_contents[start_line - 1 : end_line] = [new_code + "\n"] |
| file.seek(0) |
| file.truncate() |
| file.write("".join(file_contents)) |
| return "Code modified" |
|
|
| def create_file_with_code( |
| filename: Annotated[str, "Name and path of file to create."], |
| code: Annotated[str, "Code to write in the file."], |
| ) -> str: |
| """ |
| Create a new file with provided code. |
| """ |
| directory = os.path.dirname(default_path + filename) |
| os.makedirs(directory, exist_ok=True) |
| with open(default_path + filename, "w") as file: |
| file.write(code) |
| return "File created successfully" |
|
|