-
-
Notifications
You must be signed in to change notification settings - Fork 2
Migration Guide Generate Module
This guide covers migrating to the new simple_resume.shell.generate module structure (v0.1.1). The reorganization improves performance with lazy loading and enhances code organization.
Before:
from simple_resume.generation import generate_pdf, generate_html, generate_all
from simple_resume.generation import GenerationConfigAfter:
# Recommended: Main API (lazy loaded by default)
from simple_resume import generate_pdf, generate_html, generate_all
# Or direct module access
from simple_resume.shell.generate import generate_pdf, generate_html, generate_all
# GenerationConfig moved to core.models
from simple_resume.core.models import GenerationConfigThe simple_resume.generation module has been reorganized into:
simple_resume/generate/
├── __init__.py # Main API exports (lazy loading)
├── core.py # Eager loading, full functionality
└── lazy.py # Lazy loading wrappers
# Before
from simple_resume.generation import generate_pdf, generate_html
# After (no changes needed if using main API)
from simple_resume import generate_pdf, generate_html# Before
import simple_resume.generation
# After
import simple_resume.shell.generate
# Function access remains the same
result = simple_resume.shell.generate.generate_pdf(resume_data)# Before
from simple_resume.generation import GenerationConfig
# After
from simple_resume.core.models import GenerationConfigVerify your imports work correctly:
# Test basic functionality
from simple_resume import generate_pdf, generate_html, generate_all
from simple_resume.core.models import GenerationConfig
# Test module access
from simple_resume.shell.generate import core, lazy
print("Migration successful!")The new structure provides both lazy and eager loading options:
- Suited for: CLI tools, scripts, applications where generation is optional
- Benefits: Faster startup, lower memory footprint
- Usage: Default main API imports
from simple_resume import generate_pdf # Lazy loaded- Suited for: Web applications, services where generation is always used
- Benefits: Predictable performance when generation is called
- Usage: Direct core module imports
from simple_resume.shell.generate.core import generate_pdf # Eager loaded| Previous Import | New Import | Compatibility |
|---|---|---|
simple_resume.generation |
simple_resume |
Drop-in replacement |
simple_resume.generation.GenerationConfig |
simple_resume.core.models.GenerationConfig |
Path changed |
simple_resume.generation.*functions |
simple_resume.shell.generate.*functions |
Path changed |
# Before
from simple_resume.generation import generate_pdf, GenerationConfig
# After (recommended - lazy loading)
from simple_resume import generate_pdf
from simple_resume.core.models import GenerationConfig
# Or direct import for slightly better performance
from simple_resume.shell.generate.lazy import generate_pdf# Before
from simple_resume.generation import generate_all, GenerationConfig
# After (recommended - eager loading)
from simple_resume.shell.generate.core import generate_all
from simple_resume.core.models import GenerationConfig# Before
from simple_resume.generation import generate_resume
# After (recommended - flexible)
from simple_resume import generate_resume # Default lazy loadingError: ModuleNotFoundError: No module named 'simple_resume.generation'
Solution: Update import paths:
# Replace
from simple_resume.generation import generate_pdf
# With
from simple_resume import generate_pdfError: ImportError: cannot import name 'GenerationConfig' from 'simple_resume.generation'
Solution: Update GenerationConfig import:
# Replace
from simple_resume.generation import GenerationConfig
# With
from simple_resume.core.models import GenerationConfigIf you experience slower first-time generation calls, this is expected due to lazy loading. For consistent performance in high-throughput scenarios, use eager loading:
# Instead of lazy loading
from simple_resume import generate_pdf
# Use eager loading
from simple_resume.shell.generate.core import generate_pdffrom simple_resume import generate_pdf, generate_html, generate_all
from simple_resume.shell.generate import core, lazy
from simple_resume.core.models import GenerationConfig
def test_migration():
"""Test that imports work correctly after migration."""
try:
# Test main API
print("OK Main API imports work")
# Test module structure
print("OK Module structure works")
# Test GenerationConfig
config = GenerationConfig()
print("OK GenerationConfig works")
return True
except Exception as e:
print(f"Migration failed: {e}")
return Falseimport time
import sys
import importlib
def test_import_performance():
"""Compare import performance between approaches."""
# Clear any existing imports
modules_to_remove = [k for k in sys.modules.keys() if "simple_resume" in k]
for module in modules_to_remove:
del sys.modules[module]
# Test lazy loading
start = time.time()
simple_resume = importlib.import_module("simple_resume")
generate_pdf = simple_resume.shell.generate_pdf
lazy_time = time.time() - start
# Clear imports between tests
modules_to_remove = [k for k in sys.modules.keys() if "simple_resume" in k]
for module in modules_to_remove:
del sys.modules[module]
# Test eager loading
start = time.time()
simple_resume_generate_core = importlib.import_module("simple_resume.shell.generate.core")
eager_pdf = simple_resume_generate_core.generate_pdf
eager_time = time.time() - start
print(f"Lazy loading: {lazy_time:.4f}s")
print(f"Eager loading: {eager_time:.4f}s")- Building CLI tools or scripts
- Generation functionality is optional
- Memory efficiency is important
- Startup time matters
- Building web applications or services
- Generation functionality is always used
- Predictable response times are critical
- Initial import time is less important than runtime performance
- Check the Usage Guide for detailed usage examples
- Review the Architecture Decisions for technical details
- Open an issue for questions or problems