mirror of
https://github.com/bcye/structured-wikivoyage-exports.git
synced 2025-04-21 02:06:20 +00:00
45 lines
1.5 KiB
Python
45 lines
1.5 KiB
Python
"""Handler that writes files to the filesystem."""
|
|
from pathlib import Path
|
|
import aiofiles
|
|
from .base_handler import BaseHandler
|
|
import json
|
|
|
|
class FilesystemHandler(BaseHandler):
|
|
"""
|
|
Handler that writes files to the filesystem.
|
|
"""
|
|
def __init__(self, output_dir: str, **kwargs):
|
|
"""
|
|
Initializes the FileSystemHandler with the specified output directory.
|
|
|
|
Args:
|
|
output_dir (str): The directory where files will be written.
|
|
**kwargs: Additional keyword arguments for the BaseHandler.
|
|
"""
|
|
super().__init__(**kwargs)
|
|
self.output_dir = Path(output_dir)
|
|
# Ensure the target directory exists
|
|
self.output_dir.mkdir(parents=True, exist_ok=True)
|
|
self.logger.info(f"Output directory set to {self.output_dir}")
|
|
|
|
|
|
async def _write_entry(self, entry: dict, uid: str) -> bool:
|
|
"""
|
|
Asynchronously writes a single entry to the filesystem.
|
|
|
|
Args:
|
|
entry (dict): The entry to write (will be JSON-encoded).
|
|
uid (str): The unique identifier for the entry.
|
|
|
|
Returns:
|
|
bool: True if the entry was written successfully, False otherwise.
|
|
"""
|
|
try:
|
|
file_path = self.output_dir / f"{uid}.json"
|
|
async with aiofiles.open(file_path, 'w') as f:
|
|
await f.write(json.dumps(entry))
|
|
return True
|
|
except IOError as e:
|
|
self.logger.error(f"Error writing entry {uid}: {e}")
|
|
return False
|