From 099819085d03a2a7b86ac373a766326587c6db54 Mon Sep 17 00:00:00 2001 From: Steph Prince <40640337+stephprince@users.noreply.github.com> Date: Fri, 9 Feb 2024 08:02:00 -0800 Subject: [PATCH] add option to use a custom html field generation method (#1038) * add option to use a value's html field generation method * update CHANGELOG.md * update html representation docstring * Update CHANGELOG.md * Update CHANGELOG.md --------- Co-authored-by: Ryan Ly --- CHANGELOG.md | 5 +++++ src/hdmf/container.py | 10 ++++++++-- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e309b47fd..1294aee02 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,10 @@ # HDMF Changelog +## HDMF 3.12.2 (February 9, 2024) + +### Bug fixes +- Fixed recursion error in html representation generation in jupyter notebooks. @stephprince [#1038](https://github.com/hdmf-dev/hdmf/pull/1038) + ## HDMF 3.12.1 (February 5, 2024) ### Bug fixes diff --git a/src/hdmf/container.py b/src/hdmf/container.py index 614fbbccd..521568d95 100644 --- a/src/hdmf/container.py +++ b/src/hdmf/container.py @@ -626,7 +626,10 @@ def _generate_html_repr(self, fields, level=0, access_code="", is_field=False): if isinstance(fields, dict): for key, value in fields.items(): current_access_code = f"{access_code}.{key}" if is_field else f"{access_code}['{key}']" - html_repr += self._generate_field_html(key, value, level, current_access_code) + if hasattr(value, '_generate_field_html'): + html_repr += value._generate_field_html(key, value, level, current_access_code) + else: + html_repr += self._generate_field_html(key, value, level, current_access_code) elif isinstance(fields, list): for index, item in enumerate(fields): access_code += f'[{index}]' @@ -639,7 +642,10 @@ def _generate_html_repr(self, fields, level=0, access_code="", is_field=False): return html_repr def _generate_field_html(self, key, value, level, access_code): - """Generates HTML for a single field.""" + """Generates HTML for a single field. + + This function can be overwritten by a child class to implement customized html representations. + """ if isinstance(value, (int, float, str, bool)): return f'