调整版本并做测试
This commit is contained in:
92
pyenjoy/template/Env.py
Normal file
92
pyenjoy/template/Env.py
Normal file
@@ -0,0 +1,92 @@
|
||||
#!/usr/bin/env python3.9
|
||||
# -*- coding: utf-8 -*-
|
||||
"""
|
||||
JFinal Env - Template Environment
|
||||
"""
|
||||
|
||||
from typing import Dict, Optional, List
|
||||
|
||||
class Env:
|
||||
"""Template environment for storing template functions and managing sources"""
|
||||
|
||||
def __init__(self, engine_config):
|
||||
"""
|
||||
Initialize environment
|
||||
|
||||
Args:
|
||||
engine_config: Engine configuration
|
||||
"""
|
||||
self._engine_config = engine_config
|
||||
self._function_map: Dict[str, object] = {}
|
||||
self._source_list: Optional[List[object]] = None
|
||||
|
||||
@property
|
||||
def engine_config(self):
|
||||
"""Get engine configuration"""
|
||||
return self._engine_config
|
||||
|
||||
@property
|
||||
def is_dev_mode(self) -> bool:
|
||||
"""Check if in development mode"""
|
||||
return self._engine_config.is_dev_mode()
|
||||
|
||||
def add_function(self, function_name: str, function: object):
|
||||
"""
|
||||
Add template function
|
||||
|
||||
Args:
|
||||
function_name: Function name
|
||||
function: Function object
|
||||
"""
|
||||
if function_name in self._function_map:
|
||||
raise ValueError(f"Template function '{function_name}' already defined")
|
||||
|
||||
self._function_map[function_name] = function
|
||||
|
||||
def get_function(self, function_name: str) -> Optional[object]:
|
||||
"""
|
||||
Get template function
|
||||
|
||||
Args:
|
||||
function_name: Function name
|
||||
|
||||
Returns:
|
||||
Function object or None
|
||||
"""
|
||||
func = self._function_map.get(function_name)
|
||||
if func is not None:
|
||||
return func
|
||||
|
||||
# Try to get from shared functions
|
||||
return self._engine_config.get_shared_function(function_name)
|
||||
|
||||
def get_function_map(self) -> Dict[str, object]:
|
||||
"""Get all functions"""
|
||||
return self._function_map.copy()
|
||||
|
||||
def add_source(self, source):
|
||||
"""
|
||||
Add source for dev mode tracking
|
||||
|
||||
Args:
|
||||
source: Source object
|
||||
"""
|
||||
if self._source_list is None:
|
||||
self._source_list = []
|
||||
|
||||
self._source_list.append(source)
|
||||
|
||||
def is_source_list_modified(self) -> bool:
|
||||
"""Check if any source has been modified (for dev mode)"""
|
||||
if self._source_list:
|
||||
for source in self._source_list:
|
||||
if hasattr(source, 'is_modified') and source.is_modified():
|
||||
return True
|
||||
return False
|
||||
|
||||
def clear_functions(self):
|
||||
"""Clear all functions"""
|
||||
self._function_map.clear()
|
||||
|
||||
def __repr__(self) -> str:
|
||||
return f"Env(function_count={len(self._function_map)}, dev_mode={self.is_dev_mode})"
|
||||
Reference in New Issue
Block a user