-
-
Notifications
You must be signed in to change notification settings - Fork 22
Description
Feature Request
Background:
I want to start out by saying Im new to sockpuppet, but love this project. One thing though. I find setting instance level attributes in Reflexes as a way to update context data to be a confusing API
Related to issue #43, It would be nice to make the documentation more explicit that user added reflex attributes get propagated into the context data during refreshes.
I also find the existence of the context
attribute in reflexes promotes this confusion. For myself and other uninitiated, setting context
in a reflex instance has surprising behavior:
- The context attribute is only populated with data after calling get_context_data(), and setting the context attribute overrides the data returned by
get_context_data
.
>>> reflex.context
{}
>>> reflex.get_context_data()
{'stimulus_reflex': True, 'view': <app.views.NewView object at 0x7ff32cdb36d0>}
>>> reflex.context
{'stimulus_reflex': True, 'view': <app.views.NewView object at 0x7ff32cdb36d0>}
>>> reflex.context = {"field2": "value2"}
>>> reflex.get_context_data()
{'field2': 'value2'}
- Fields added to the context attribute in the reflex do not get passed to the template and view.
Possible solutions
Editing the documentation to better explain the API for changing context data would be a first step. A further improvement could be made to the overall API in one of two ways:
- Make
context
"private" by prepending with a "_". Right now it looks like its part of the API and not something reserved for internal use. - Modify behavior where context data is pulled from reflex instance attributes, and instead update/merge with data from
context
.
class MyReflex(Reflex):
def update(self):
self.field = "data"
becomes
class MyReflex(Reflex):
def update(self):
self.context.field = "data"
I think option 2 is a better direction but it would be a breaking change. It would be ideal to release a minor version where context is pulled both from the context attribute and instance level attributes before phasing out the instance level attribute propagation in a major version.
Maybe I am confusing some of the intended API and behavior. Would love to hear others thoughts.
PR link
TBD