Skip to content

Decouple template rendering via BaseConfig.render()#31

Merged
rafa-guedes merged 5 commits intomainfrom
issue-30-decouple-rendering
Feb 26, 2026
Merged

Decouple template rendering via BaseConfig.render()#31
rafa-guedes merged 5 commits intomainfrom
issue-30-decouple-rendering

Conversation

@tomdurrant
Copy link
Contributor

Summary

  • Adds BaseConfig.render(context, output_dir) -> str as an overridable hook that delegates to the existing cookiecutter renderer by default.
  • Refactors ModelRun.generate() to call config.render(...) instead of importing/calling rompy.core.render.render directly.
  • Adds a unit test to assert ModelRun.generate() delegates to config.render(...).

Why

ModelRun.generate() previously hard-coded cookiecutter rendering and assumed configs always expose .template and .checkout. Moving rendering responsibility to the config object decouples orchestration from implementation and enables alternative rendering strategies via overrides.

Verification

  • pytest -q (340 passed, 4 skipped)
  • Targeted: pytest tests/test_config_render_delegation.py -q and pytest tests/test_templates.py -q

Commits

  • refactor(config): add BaseConfig.render hook (41513ea)
  • test(modelrun): assert generate delegates to config.render (937038a)
  • refactor(modelrun): delegate rendering to config.render (329a1c7)

Fixes #30

Add render() method to BaseConfig that delegates to cookiecutter renderer.
This enables configs to override rendering behavior while maintaining
backward compatibility with existing template-based rendering.
Add unit test verifying ModelRun.generate() calls config.render() with
correct arguments. Test uses mock to intercept render() and validate
delegation behavior.
Update ModelRun.generate() to call config.render() instead of directly
calling rompy.core.render.render(). This decouples rendering logic from
ModelRun and allows configs to customize rendering behavior.
@rafa-guedes rafa-guedes merged commit 8767aa7 into main Feb 26, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Decouple rendering logic from ModelRun by adding render() method to BaseConfig

2 participants