Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

More complete mime hook API for inspector? #14339

Closed
krassowski opened this issue Feb 16, 2024 · 1 comment · Fixed by #14342
Closed

More complete mime hook API for inspector? #14339

krassowski opened this issue Feb 16, 2024 · 1 comment · Fixed by #14342

Comments

@krassowski
Copy link
Member

Right now mime hooks get two arguments: obj and info.

bundle = self._make_info_unformatted(
obj,
info_dict,
formatter,
detail_level=detail_level,
omit_sections=omit_sections,
)
for key, hook in self.mime_hooks.items():
res = hook(obj, info)

This feels redundant because info includes info.obj == obj. There is no info_dict but downstream could just call .info(), but there is no detail_level so all mime hooks have to return the same result for obj? and obj??. I am not sure if omit_sections should be passed to, it does not appear crucial though.

I think passing detail_level is uncontroversial. What do you think about passing info_dict too?

@krassowski
Copy link
Member Author

Probably passing a dataclass to the hook would be best because this allows to add and deprecate fields without breaking compatibility.

Carreau added a commit that referenced this issue Feb 20, 2024
Fixes #14339

### Additions

Adds `InfoDict` type to improve the typing of `info()` result.

Adds missing `"subclasses"` to `info_fields` list (these were added to
the field list in #11486 but we
forgot to update `info_fields` variable at the time) - the newly added
`InfoDict` type will ensure that this won't happen again.

Adds `InspectorHookData` dataclass which is passed to the MIME hooks
which now should expect a single argument. Having a single dataclass
argument enables us to deprecate individual fields, or add new fields
without breaking the existing hooks. The old hooks will still work (if
any are out there since this mechanism got just added in the previous
point version).

### Deletions

A comment over `info_fields` gets deleted:
- Contrarily to the comment (which is getting deleted in this PR),
`info_fields` were not defining the order of display since at least 2015
(#7903 - I did not feel the need
to go further in the history to find when exactly it happened).
- Also contrarily to this comment, current Jupyter messaging spec does
not define the contents of `info_fields` (I guess this was lost during
IPython/Jupyter split), but the newly added `InfoDict` at least properly
annotates their type (if you know where I can find the old IPython
messaging spec with the descriptions I can add these as doc comments).

Unused `cast_unicode` import gets deleted. If someone imported it from
here... well they really should not have.

### Deprecations

- mime hooks taking two arguments (`obj, info`)
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 a pull request may close this issue.

1 participant