Added so much stuff I cant keep up. I think some sorting capability and a way to add metadata to each folder (WIP)

This commit is contained in:
Kylian Schmidt
2025-07-29 09:38:28 +02:00
parent 3e2aaa4be8
commit f3adbe49fa
30 changed files with 1134 additions and 697 deletions
+92
View File
@@ -0,0 +1,92 @@
#!/usr/bin/env python3
"""
Gallery Creation Time Integration
Example function to add creation time metadata to plot items.
This should be integrated into your existing Python gallery generation code.
"""
from pathlib import Path
def add_creation_time_to_items(items, base_path):
"""
Add creation time to plot items for sorting functionality.
Args:
items: List of plot item dictionaries
base_path: Base path where plot files are located
Returns:
Updated items list with creation_time field
"""
for item in items:
try:
# Try to get creation time from PNG file first, then PDF
png_path = None
pdf_path = None
# Extract relative path from href
if 'png_href' in item:
png_rel_path = item['png_href'].replace('../', '').replace(
'./', '')
png_path = Path(base_path) / png_rel_path
if 'pdf_href' in item:
pdf_rel_path = item['pdf_href'].replace('../', '').replace(
'./', '')
pdf_path = Path(base_path) / pdf_rel_path
# Use PNG creation time if available, otherwise PDF
creation_time = 0
if png_path and png_path.exists():
creation_time = int(png_path.stat().st_ctime)
elif pdf_path and pdf_path.exists():
creation_time = int(pdf_path.stat().st_ctime)
# Add creation time as timestamp (JavaScript can handle this)
item['creation_time'] = creation_time
except Exception as e:
# Fallback to 0 if there's any error
name = item.get('name', 'unknown')
print(f"Warning: Could not get creation time for {name}: {e}")
item['creation_time'] = 0
return items
def example_integration():
"""
Example of how to integrate this into your existing gallery generation.
"""
# This would be part of your existing gallery generation code
items = [
{
'name': 'plot1.png',
'png_href': './plot1.png',
'pdf_href': './plot1.pdf'
},
{
'name': 'plot2.png',
'png_href': './plot2.png',
'pdf_href': './plot2.pdf'
}
]
base_path = "/path/to/your/gallery/directory"
# Add creation times
items_with_time = add_creation_time_to_items(items, base_path)
# Now items_with_time can be passed to your Jinja2 template
# The template will have access to item.creation_time for each item
return items_with_time
if __name__ == "__main__":
# Test the function
items = example_integration()
for item in items:
created = item['creation_time']
print(f"Plot: {item['name']}, Created: {created}")
+45
View File
@@ -0,0 +1,45 @@
from typing import Dict, Any
import json
from pathlib import Path
def open_metadata(path: str, filename: str = "metadata.json") -> Dict[str, Any]:
"""
Open metadata file and return its contents as a dictionary.
Args:
path: The directory path where the metadata file is located.
filename: The name of the metadata file (default: "metadata.json").
Returns:
A dictionary containing the metadata.
"""
with open(Path(path) / filename, 'r', encoding='utf-8') as f:
try:
return json.load(f)
except json.JSONDecodeError as e:
raise ValueError(f"Error decoding JSON from {filename}: {e}")
except FileNotFoundError:
raise FileNotFoundError(f"Metadata file {filename} not found in {path}")
except Exception as e:
raise RuntimeError(f"Unexpected error reading metadata: {e}")
def merge_metadata(
base_metadata: Dict[str, Any],
additional_metadata: Dict[str, Any]
) -> Dict[str, Any]:
"""
Merge two metadata dictionaries.
Args:
base_metadata: The base metadata dictionary.
additional_metadata: The additional metadata dictionary to merge.
Returns:
A new dictionary containing the merged metadata.
"""
merged = base_metadata.copy()
for key, value in additional_metadata.items():
merged[key] = value
return merged