Files
py_enjoy/template/source/FileSource.py
2026-02-27 14:37:10 +08:00

77 lines
2.0 KiB
Python

#!/usr/bin/env python3.9
# -*- coding: utf-8 -*-
"""
JFinal FileSource - File Source
"""
import os
import time
class FileSource:
"""File source for template loading"""
def __init__(self, base_template_path: str, fileName: str, encoding: str):
"""
Initialize file source
Args:
base_template_path: Base template path
fileName: File name
encoding: Encoding
"""
self._fileName = fileName
self._encoding = encoding
self._lastModified = 0
# Build file path
if base_template_path:
self._filePath = os.path.join(base_template_path, fileName)
else:
self._filePath = fileName
# Normalize path
self._filePath = os.path.normpath(self._filePath)
# Get last modified time
self._update_last_modified()
def get_content(self) -> str:
"""
Get file content
Returns:
File content as string
"""
try:
with open(self._filePath, 'r', encoding=self._encoding) as f:
return f.read()
except Exception as e:
raise RuntimeError(f"Error reading file {self._filePath}: {e}")
def is_modified(self) -> bool:
"""
Check if file has been modified
Returns:
True if modified, False otherwise
"""
current_modified = os.path.getmtime(self._filePath)
if current_modified > self._lastModified:
self._lastModified = current_modified
return True
return False
def _update_last_modified(self):
"""Update last modified time"""
try:
self._lastModified = os.path.getmtime(self._filePath)
except:
self._lastModified = 0
def get_file_name(self) -> str:
"""Get file name"""
return self._fileName
def __repr__(self) -> str:
return f"FileSource({self._fileName})"