Spaces:
Sleeping
Sleeping
| """ | |
| Resource access utilities for managing local files | |
| """ | |
| import os | |
| import logging | |
| import json | |
| from typing import Dict, List, Optional, Any, Union | |
| # Configure logging | |
| logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s') | |
| logger = logging.getLogger(__name__) | |
| # Constants | |
| RESOURCE_FOLDER = os.path.join(os.path.dirname(os.path.abspath(__file__)), "resource") | |
| METADATA_FILE = os.path.join(RESOURCE_FOLDER, "metadata.jsonl") | |
| class ResourceAccess: | |
| """Manages access to resource files""" | |
| def list_resources() -> List[str]: | |
| """List all files in the resources directory""" | |
| try: | |
| return [f for f in os.listdir(RESOURCE_FOLDER) if os.path.isfile(os.path.join(RESOURCE_FOLDER, f))] | |
| except Exception as e: | |
| logger.error(f"Error listing resources: {e}") | |
| return [] | |
| def get_file_path(filename: str) -> Optional[str]: | |
| """Get the full path for a specific file""" | |
| file_path = os.path.join(RESOURCE_FOLDER, filename) | |
| return file_path if os.path.exists(file_path) else None | |
| def get_files_by_extension(extension: str) -> List[str]: | |
| """Get a list of files with a specific extension""" | |
| if not extension.startswith('.'): | |
| extension = f".{extension}" | |
| try: | |
| return [f for f in os.listdir(RESOURCE_FOLDER) | |
| if os.path.isfile(os.path.join(RESOURCE_FOLDER, f)) | |
| and f.lower().endswith(extension.lower())] | |
| except Exception as e: | |
| logger.error(f"Error getting files by extension {extension}: {e}") | |
| return [] | |
| def load_metadata() -> Dict[str, Dict]: | |
| """Load metadata from the metadata.jsonl file""" | |
| metadata = {} | |
| try: | |
| with open(METADATA_FILE, 'r', encoding='utf-8') as f: | |
| for line in f: | |
| data = json.loads(line.strip()) | |
| task_id = data.get('task_id') | |
| if task_id: | |
| metadata[task_id] = data | |
| logger.info(f"Loaded {len(metadata)} entries from metadata") | |
| except Exception as e: | |
| logger.error(f"Error loading metadata: {e}") | |
| return metadata | |
| def find_tasks_with_file(filename: str) -> List[Dict]: | |
| """Find tasks that reference a specific file""" | |
| tasks = [] | |
| try: | |
| metadata = ResourceAccess.load_metadata() | |
| for task_id, data in metadata.items(): | |
| if 'resources' in data: | |
| for resource in data['resources']: | |
| if resource.get('file_name') == filename: | |
| tasks.append(data) | |
| break | |
| except Exception as e: | |
| logger.error(f"Error finding tasks with file {filename}: {e}") | |
| return tasks | |
| def file_exists(filename: str) -> bool: | |
| """Check if a file exists in the resources directory""" | |
| return os.path.exists(os.path.join(RESOURCE_FOLDER, filename)) | |
| def get_metadata_for_task(task_id: str) -> Optional[Dict]: | |
| """Get metadata for a specific task ID""" | |
| try: | |
| metadata = ResourceAccess.load_metadata() | |
| return metadata.get(task_id) | |
| except Exception as e: | |
| logger.error(f"Error getting metadata for task {task_id}: {e}") | |
| return None | |