QuantStack / QuantStack/ypywidgets
Observer pattern
Nobody has claimed this yet.
- Dominant language
- Python
- Stars
- 16
- Forks
- 7
- PR merge metrics
- No merged PRs in 30d
Description
In https://github.com/jupyter-widgets/ipywidgets/issues/3293#issuecomment-1433848240 @tlambert03 mentioned psygnal, that could be used to implement the equivalent of traitlets.
I think it is a good idea, but I'm not sure how it could fit here. For instance, take the Switch model, currently implemented as:
from .ypywidgets import Widget
class Switch(Widget):
def __init__(self, value: bool = False, open_comm: bool = True) -> None:
super().__init__(name="switch", open_comm=open_comm)
self.yvalue = self.ydoc.get_map("value")
self._set(value)
def _set(self, value: bool) -> None:
with self.ydoc.begin_transaction() as t:
self.yvalue.set(t, "value", value)
@property
def value(self) -> bool:
return self.yvalue["value"]
@value.setter
def value(self, value: bool):
if value == self.value:
return
self._set(value)
def toggle(self):
self.value = not self.value
Its YDoc consists of a YMap named value, with a single entry in it, also named value, which contains the boolean value of the switch. Here the observer pattern is manually implemented using a getter and a setter function for the value attribute.
If we were to use psygnal, we would need a way to point to the YDoc's structure (self.yvalue and value entry in it) from the psygnal's attribute.
I think that's the reason why traitlets use Python's descriptor protocol, which allows to get the name of an attribute at runtime.
Also, I'm not sure how we could connect nested YDoc structures (e.g. a YMap can contain other Y structures), but I don't think it was possible with traitlets anyway, so that would be an improvement.
Contributor guide
No contributing guide indexed for this repository
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start with switch.py and the Widget/YDoc implementation shown in the issue, then review how psygnal and traitlets represent observed attributes. Determine whether a workable observer design covers the YMap value entry and nested YDoc structures. Done would require an agreed implementation scope and a clear approach for observing these structures.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- python
- Domain
- backend
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Stale
- Clarity
- Needs clarification
- Newbie friendliness
- 25/100