Core
Core API Reference¶
The lda.core module provides the foundational classes for LDA functionality.
Classes¶
LDAScaffold¶
Manages project structure creation and scaffolding.
from lda.core.scaffold import LDAScaffold
from lda.config import LDAConfig
config = LDAConfig("lda_config.yaml")
scaffold = LDAScaffold(config)
Constructor¶
Parameters: - config: LDA configuration object
Example:
Methods¶
create_project()¶
Create the complete project structure.
Returns: - Dictionary with creation results: - project_folder: Path to created project - sections: List of created sections - files: List of created files - duration: Time taken in seconds
Example:
result = scaffold.create_project()
print(f"Created project at: {result['project_folder']}")
print(f"Created {len(result['sections'])} sections")
create_section()¶
Create a single section.
Parameters: - section_config: Section configuration dictionary
Returns: - Dictionary with section details
Example:
section = {
"id": "sec01",
"name": "Preprocessing",
"inputs": [{"pattern": "raw_*.csv"}]
}
result = scaffold.create_section(section)
validate_config()¶
Validate configuration before scaffolding.
Returns: - List of validation errors
Example:
LDAManifest¶
Manages file manifests and tracking.
Constructor¶
Parameters: - manifest_file: Path to manifest file
Example:
Properties¶
version¶
Manifest format version.
section¶
Section identifier.
files¶
Dictionary of tracked files.
Methods¶
load()¶
Load manifest from file.
Raises: - FileNotFoundError: If manifest doesn't exist - JSONDecodeError: If manifest is invalid
Example:
save()¶
Save manifest to file.
Example:
track_file()¶
Add or update file in manifest.
Parameters: - file_path: Path to file - message: Optional tracking message
Returns: - File tracking information
Example:
info = manifest.track_file("outputs/results.csv", "Updated results")
print(f"File hash: {info['hash']}")
remove_file()¶
Remove file from manifest.
Parameters: - file_path: Path to file
Returns: - True if file was removed
Example:
get_file_info()¶
Get information about tracked file.
Parameters: - file_path: Path to file
Returns: - File information or None
Example:
info = manifest.get_file_info("data/input.csv")
if info:
print(f"Last modified: {info['modified']}")
get_changes()¶
Get files that have changed.
Returns: - List of changed files
Example:
changes = manifest.get_changes()
for change in changes:
print(f"{change['file']}: {change['status']}")
validate()¶
Validate manifest integrity.
Returns: - List of validation errors
Example:
errors = manifest.validate()
if errors:
print("Manifest issues found:")
for error in errors:
print(f" - {error}")
LDATracker¶
File tracking and hash management.
Methods¶
calculate_hash()¶
Calculate file hash.
Parameters: - file_path: Path to file - algorithm: Hash algorithm to use
Returns: - Hex digest of file hash
Example:
tracker = LDATracker()
hash_value = tracker.calculate_hash("data.csv")
print(f"SHA256: {hash_value}")
track_directory()¶
Track all files in directory.
Parameters: - directory: Directory to track - patterns: Optional file patterns to include
Returns: - Dictionary of tracked files
Example:
files = tracker.track_directory("outputs", patterns=["*.csv", "*.png"])
print(f"Tracked {len(files)} files")
compare_files()¶
Compare two files.
Parameters: - file1: First file path - file2: Second file path
Returns: - True if files are identical
Example:
if tracker.compare_files("old.csv", "new.csv"):
print("Files are identical")
else:
print("Files differ")
LDAError¶
Base exception for LDA errors.
from lda.core.errors import LDAError
try:
# LDA operations
except LDAError as e:
print(f"LDA error: {e}")
Subclasses¶
ConfigurationError¶
Configuration-related errors.
ManifestError¶
Manifest-related errors.
ScaffoldError¶
Scaffolding errors.
TrackingError¶
File tracking errors.
Usage Examples¶
Creating a New Project¶
from lda.config import LDAConfig
from lda.core.scaffold import LDAScaffold
# Create configuration
config = LDAConfig()
config.set("project.name", "Clinical Trial 001")
config.set("project.code", "CT001")
# Define sections
sections = [
{
"id": "sec01_protocol",
"name": "Study Protocol",
"inputs": [{"pattern": "protocol_*.pdf"}]
},
{
"id": "sec02_data",
"name": "Clinical Data",
"inputs": [{"pattern": "clinical_*.csv"}],
"outputs": [{"pattern": "cleaned_*.csv"}]
}
]
config.set("sections", sections)
# Create scaffold
scaffold = LDAScaffold(config)
result = scaffold.create_project()
print(f"Project created: {result['project_folder']}")
Managing File Tracking¶
from lda.core.manifest import LDAManifest
from lda.core.tracking import LDATracker
# Load manifest
manifest = LDAManifest("sec01/manifest.json")
# Track new files
tracker = LDATracker()
new_files = tracker.track_directory("sec01/outputs", ["*.csv"])
for file_path, file_info in new_files.items():
manifest.track_file(file_path, "Generated output")
# Check for changes
changes = manifest.get_changes()
if changes:
print(f"Found {len(changes)} changed files")
manifest.save()
Error Handling¶
from lda.core.errors import LDAError, ConfigurationError
from lda.core.scaffold import LDAScaffold
try:
config = LDAConfig("config.yaml")
scaffold = LDAScaffold(config)
scaffold.create_project()
except ConfigurationError as e:
print(f"Configuration error: {e}")
# Handle configuration issues
except ScaffoldError as e:
print(f"Scaffolding error: {e}")
# Handle scaffold issues
except LDAError as e:
print(f"General LDA error: {e}")
# Handle other LDA errors
except Exception as e:
print(f"Unexpected error: {e}")
# Handle non-LDA errors
Custom Validation¶
from lda.core.manifest import LDAManifest
class CustomManifest(LDAManifest):
def validate_custom(self):
"""Add custom validation rules."""
errors = []
# Check file naming convention
for file_path in self.files:
if not file_path.startswith(self.section):
errors.append(f"File {file_path} doesn't follow naming convention")
# Check required files
required = ["inputs/data.csv", "outputs/results.csv"]
for req_file in required:
if req_file not in self.files:
errors.append(f"Required file {req_file} is missing")
return errors
manifest = CustomManifest("manifest.json")
custom_errors = manifest.validate_custom()
Batch Operations¶
from lda.core.manifest import LDAManifest
from lda.core.tracking import LDATracker
import glob
# Track multiple sections
tracker = LDATracker()
for section_dir in glob.glob("sec*"):
manifest_file = f"{section_dir}/manifest.json"
manifest = LDAManifest(manifest_file)
# Track all CSV files
csv_files = glob.glob(f"{section_dir}/**/*.csv", recursive=True)
for csv_file in csv_files:
if csv_file not in manifest.files:
manifest.track_file(csv_file, "Batch tracking")
manifest.save()
print(f"Updated {section_dir}: {len(manifest.files)} files tracked")
See Also¶
- Configuration API - Configuration management
- CLI API - Command-line interface
- Error Handling - Complete error reference