72ebc5e103
✨ Features: - Add comprehensive metadata system with YAML/JSON support - Implement hierarchical metadata inheritance from parent folders - Support plot-specific metadata overrides - Add metadata caching for performance optimization 🗂️ Code Organization: - Move Python orchestration code to orchestration/ folder - Move validation utilities to tests/ folder - Move documentation to docs/ folder - Separate metadata functionality into dedicated module 🔧 Infrastructure: - Add automatic asset copying to web directory - Fix asset path resolution for nested directories - Update template to use dynamic asset paths - Add MetadataConfig class with inheritance options 📚 Documentation: - Add comprehensive metadata usage guide (METADATA_USAGE.md) - Add implementation documentation (METADATA_IMPLEMENTATION.md) - Include example metadata files in examples/ - Add metadata validation utility script 🐛 Bug Fixes: - Fix breadcrumb navigation and JavaScript functionality - Resolve asset path issues in nested directories - Update template imports for modular CSS/JS structure This commit introduces a flexible metadata system that allows users to add rich metadata to plots and folders using YAML or JSON files, with full hierarchical inheritance and plot-specific overrides. The project structure is now better organized with clear separation of concerns.
3.5 KiB
3.5 KiB
Metadata System Implementation Summary
What Was Implemented
1. Core Metadata Module (metadata.py)
load_metadata_file(): Loads YAML/JSON metadata files with error handlingload_folder_metadata(): Discovers and loads folder-level metadata (meta.yaml/meta.json)merge_metadata(): Merges parent and child metadata with proper override behaviorresolve_metadata_for_plot(): Resolves final metadata for individual plotssave_metadata_cache(): Saves resolved metadata to cache files for performance
2. Updated Gallery Generator (generate_gallery.py)
- Hierarchical inheritance: Folder metadata is inherited by subfolders and plots
- Plot-specific overrides: Individual plots can have their own metadata files
- Template integration: Metadata is passed to HTML templates for rendering
- Cache generation:
meta_cache.jsonfiles are created in each output directory
3. Configuration Updates (config.py and config.yaml)
- Added
MetadataConfigclass with caching and inheritance options - Updated main
Configclass to include metadata settings - Added metadata section to
config.yaml
4. Documentation and Examples
METADATA_USAGE.md: Comprehensive documentation on using the metadata systemexamples/meta.yaml: Example folder metadata fileexamples/specific_plot.json: Example plot-specific metadata filevalidate_metadata.py: Utility script for validating metadata files
Key Features
Hierarchical Metadata Inheritance
root_folder/
├── meta.yaml # Base metadata for all plots
├── subfolder/
│ ├── meta.yaml # Inherits from parent, can override
│ ├── plot1.pdf
│ ├── plot1.yaml # Plot-specific metadata
│ └── plot2.pdf # Uses folder metadata
Flexible Format Support
- YAML files:
.yaml,.yml - JSON files:
.json - Automatic format detection based on file extension
Template Integration
folder_metadata: Available in templates for folder-level metadataitem.metadata: Available for each plot in the items loop- Clean separation of concerns between data and presentation
Performance Optimization
- Metadata caching in
meta_cache.jsonfiles - Only reload when source files are newer than cache
- Efficient hierarchical resolution
Usage Examples
Basic Folder Metadata
# meta.yaml
title: "Physics Analysis Results"
experiment: "CMS"
author:
name: "Researcher Name"
institution: "University"
tags: ["analysis", "physics"]
Plot-specific Metadata
# my_plot.yaml (for my_plot.pdf)
title: "Signal Region Analysis"
plot_type: "histogram"
variables:
x_axis: "mass"
y_axis: "events"
highlight: true
Template Usage
<h1>{{ folder_metadata.title }}</h1>
{% for item in items %}
<div class="plot">
<h3>{{ item.metadata.title or item.name }}</h3>
{% if item.metadata.plot_type %}
<span class="type">{{ item.metadata.plot_type }}</span>
{% endif %}
</div>
{% endfor %}
Benefits
- Flexibility: Support any metadata structure using YAML/JSON
- Inheritance: Avoid repetition by inheriting from parent folders
- Override capability: Fine-tune metadata for specific plots
- Performance: Caching system for efficient repeated builds
- Validation: Built-in error handling and validation utilities
- Documentation: Comprehensive usage documentation and examples
The metadata system is now fully integrated and ready for use in your scientific plot gallery generator!