Spaces:
Sleeping
Sleeping
| import zipfile | |
| import io | |
| import json | |
| def create_zip_archive(files: dict) -> bytes: | |
| """Creates a zip archive in memory from a dictionary of filename: content.""" | |
| zip_buffer = io.BytesIO() | |
| with zipfile.ZipFile(zip_buffer, 'w', zipfile.ZIP_DEFLATED) as zip_file: | |
| for filename, content in files.items(): | |
| zip_file.writestr(filename, content) | |
| zip_buffer.seek(0) | |
| return zip_buffer.getvalue() | |
| def read_file_content(file_obj) -> str: | |
| """Reads content from a file object (GradIO file wrapper) or path.""" | |
| if hasattr(file_obj, 'name'): | |
| path = file_obj.name | |
| else: | |
| path = file_obj | |
| try: | |
| with open(path, 'r', encoding='utf-8') as f: | |
| return f.read() | |
| except UnicodeDecodeError: | |
| # Fallback for some notebook formats if needed | |
| with open(path, 'r', encoding='latin-1') as f: | |
| return f.read() | |
| def extract_code_from_ipynb(ipynb_content: str) -> str: | |
| """Extracts code cells from ipynb json string.""" | |
| try: | |
| data = json.loads(ipynb_content) | |
| code_cells = [] | |
| for cell in data.get('cells', []): | |
| if cell.get('cell_type') == 'code': | |
| source = cell.get('source', []) | |
| if isinstance(source, list): | |
| code_cells.append(''.join(source)) | |
| elif isinstance(source, str): | |
| code_cells.append(source) | |
| return '\n\n'.join(code_cells) | |
| except json.JSONDecodeError: | |
| return ipynb_content # Validation failed or not json, treat as raw text? | |