Spaces:
Sleeping
Sleeping
| #!/usr/bin/env python | |
| # -*- coding: utf-8 -*- | |
| import os | |
| import subprocess | |
| import shutil | |
| import tempfile | |
| from typing import Tuple | |
| def evaluate_solution(task_id: str, solution: str) -> Tuple[bool, str]: | |
| initial_dir = os.getcwd() | |
| task_dir = task_id.replace('/', '_') | |
| original_task_path = 'tasks/{}'.format(task_dir) | |
| if not os.path.exists(original_task_path): | |
| raise FileNotFoundError('Task not found: {}'.format(task_id)) | |
| with tempfile.TemporaryDirectory() as temp_dir: | |
| temp_task_path = os.path.join(temp_dir, task_dir) | |
| # Replicate the directory structure with symbolic links | |
| shutil.copytree( | |
| original_task_path, | |
| temp_task_path, | |
| symlinks=True, | |
| dirs_exist_ok=True, | |
| ) | |
| os.chdir(temp_task_path) | |
| # Write solution with UTF-8 encoding | |
| with open('contracts/Task.sol', 'w', encoding='utf-8') as f: | |
| f.write(solution) | |
| try: | |
| result = subprocess.run( | |
| ['npx', 'hardhat', 'test'], | |
| capture_output=True, | |
| text=True, | |
| check=True, | |
| encoding='utf-8', # Specify UTF-8 encoding for subprocess | |
| ) | |
| return True, result.stdout | |
| except subprocess.CalledProcessError as e: | |
| return False, e.stderr | |
| finally: | |
| os.chdir(initial_dir) | |