fix!: support registering component to multiple managers #39
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This PR ensures that components can be registered to more than one manager without breaking.
This is done by making managers keep track of what component identifier is registered to which manager, and only making the manager available to a component instance when it is invoked.
Why?
This is a valid concern, as was brought to my attention recently, to be able to "version" components.
For example, say you have a component that used to run on legacy disnake-ext-components, and you now ported to disnake-compass; you now have the same component with two different custom id specs:
e.g.
"my_button:123"
for the legacy component and"MyButton|123"
for the updated component.With some clever usage of managers, you can handle both versions with the same component class:
Breaking Changes
ComponentBase.factory
has been replaced with theComponentBase.get_factory
class method;ComponentBase.manager
has been replaced with theComponentBase.get_manager
instance method;ComponentManager.parse_message_interaction
is now deprecated.