Fix tests
This commit is contained in:
@@ -28,9 +28,50 @@ from gallery.config import (
|
||||
)
|
||||
from gallery.api import generate
|
||||
|
||||
# Export utility functions for testing and advanced usage
|
||||
from gallery.utils.stats import (
|
||||
calculate_directory_stats,
|
||||
format_file_size,
|
||||
)
|
||||
from gallery.utils.processing import (
|
||||
convert_pdf_to_png,
|
||||
needs_update,
|
||||
process_plot_files,
|
||||
render_gallery_page,
|
||||
)
|
||||
from gallery.utils.metadata import (
|
||||
load_folder_metadata,
|
||||
merge_metadata,
|
||||
save_metadata_cache,
|
||||
load_metadata_file,
|
||||
resolve_metadata_for_plot,
|
||||
)
|
||||
from gallery.utils.datetime_utils import (
|
||||
datetime_from_timestamp,
|
||||
strftime_filter,
|
||||
)
|
||||
from gallery.builder import build_gallery, get_template
|
||||
|
||||
__all__ = [
|
||||
"generate",
|
||||
"GalleryConfig",
|
||||
"GallerySource",
|
||||
"GalleryDefaults",
|
||||
# Utilities
|
||||
"calculate_directory_stats",
|
||||
"format_file_size",
|
||||
"convert_pdf_to_png",
|
||||
"needs_update",
|
||||
"process_plot_files",
|
||||
"render_gallery_page",
|
||||
"load_folder_metadata",
|
||||
"merge_metadata",
|
||||
"save_metadata_cache",
|
||||
"load_metadata_file",
|
||||
"resolve_metadata_for_plot",
|
||||
"build_gallery",
|
||||
"get_template",
|
||||
"datetime_from_timestamp",
|
||||
"strftime_filter",
|
||||
]
|
||||
|
||||
|
||||
+12
-12
@@ -3,9 +3,13 @@
|
||||
import shutil
|
||||
from pathlib import Path
|
||||
from typing import Dict, Any, Optional
|
||||
from jinja2 import Environment, FileSystemLoader
|
||||
from jinja2 import Environment, FileSystemLoader, Template
|
||||
|
||||
from gallery.config import GalleryConfig
|
||||
from gallery.utils.datetime_utils import (
|
||||
datetime_from_timestamp,
|
||||
strftime_filter,
|
||||
)
|
||||
from gallery.utils.metadata import (
|
||||
load_folder_metadata,
|
||||
merge_metadata,
|
||||
@@ -18,7 +22,7 @@ from gallery.utils.processing import (
|
||||
)
|
||||
|
||||
|
||||
def get_template(template_dir: Optional[Path] = None):
|
||||
def get_template(template_dir: Optional[Path | str] = None):
|
||||
"""
|
||||
Get the Jinja2 template for gallery rendering.
|
||||
|
||||
@@ -29,6 +33,9 @@ def get_template(template_dir: Optional[Path] = None):
|
||||
Returns:
|
||||
Jinja2 Template object
|
||||
"""
|
||||
if isinstance(template_dir, str):
|
||||
template_dir = Path(template_dir)
|
||||
|
||||
if template_dir is None:
|
||||
# Use package-included template
|
||||
import gallery
|
||||
@@ -37,15 +44,6 @@ def get_template(template_dir: Optional[Path] = None):
|
||||
|
||||
env = Environment(loader=FileSystemLoader(str(template_dir)))
|
||||
|
||||
def datetime_from_timestamp(timestamp: float):
|
||||
"""Convert a Unix timestamp to a datetime object."""
|
||||
from datetime import datetime
|
||||
return datetime.fromtimestamp(timestamp)
|
||||
|
||||
def strftime_filter(dt, fmt: str) -> str:
|
||||
"""Format a datetime object using strftime."""
|
||||
return dt.strftime(fmt)
|
||||
|
||||
env.filters['datetime_from_timestamp'] = datetime_from_timestamp
|
||||
env.filters['strftime'] = strftime_filter
|
||||
|
||||
@@ -54,9 +52,9 @@ def get_template(template_dir: Optional[Path] = None):
|
||||
|
||||
def build_gallery(
|
||||
config: GalleryConfig,
|
||||
template,
|
||||
source_dir: Path,
|
||||
web_dir: Path,
|
||||
template: Template = None,
|
||||
relative_path: Path = None,
|
||||
inherited_metadata: Optional[Dict[str, Any]] = None,
|
||||
) -> None:
|
||||
@@ -75,6 +73,8 @@ def build_gallery(
|
||||
relative_path: Relative path from gallery root (for navigation)
|
||||
inherited_metadata: Metadata inherited from parent directories
|
||||
"""
|
||||
if not template:
|
||||
template = Template("./templates/gallery.html")
|
||||
if relative_path is None:
|
||||
relative_path = Path(".")
|
||||
|
||||
|
||||
@@ -0,0 +1,30 @@
|
||||
"""Date and time utility functions."""
|
||||
|
||||
from datetime import datetime
|
||||
|
||||
|
||||
def datetime_from_timestamp(timestamp: float) -> datetime:
|
||||
"""
|
||||
Convert a Unix timestamp to a datetime object.
|
||||
|
||||
Args:
|
||||
timestamp: Unix timestamp as float
|
||||
|
||||
Returns:
|
||||
datetime object
|
||||
"""
|
||||
return datetime.fromtimestamp(timestamp)
|
||||
|
||||
|
||||
def strftime_filter(dt: datetime, fmt: str) -> str:
|
||||
"""
|
||||
Format a datetime object using strftime.
|
||||
|
||||
Args:
|
||||
dt: datetime object to format
|
||||
fmt: strftime format string
|
||||
|
||||
Returns:
|
||||
Formatted datetime string
|
||||
"""
|
||||
return dt.strftime(fmt)
|
||||
@@ -60,7 +60,11 @@ def load_folder_metadata(folder_path: Path) -> Dict[str, Any]:
|
||||
"""
|
||||
# Try YAML first, then JSON for backwards compatibility
|
||||
for filename in ['metadata.yaml', 'metadata.yml', 'metadata.json']:
|
||||
metadata_path = folder_path / filename
|
||||
try:
|
||||
metadata_path = folder_path / filename
|
||||
except TypeError as e:
|
||||
raise RuntimeError(f"DEBUG {folder_path=}, {filename=}")
|
||||
|
||||
if metadata_path.exists():
|
||||
return load_metadata_file(metadata_path)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user