Comments (4)
Well, we migrated to the new observe API with custom event types in order to support the type of approach that is proposed in #278.
from traitlets.
@SylvainCorlay, this idea of a WatchedType
wouldn't be a full replacement for your pr, but would instead be an alternative to #278's edict
where each of the required methods was rewritten in order to catch changes. I've actually written an example that describes an "eventful dict" using WatchedType
.
from traitlets.
@SylvainCorlay, I'll soon push a commit that allows for this kind of work flow (I'll post on your main thread when I'm do):
EventfulList = watched_type("EventfulList", list, '__setitem__')
def pass_on_args(inst, call):
return call.args
def print_element_change(inst, answer):
# answer.before = pass_on_args(call)
index, old = answer.before
new = inst[index]
if new != old:
print("{%s: %s} -> {%s, %s}" % (index, old, index, inst[index]))
elist = EventfulList([1, 2, 3])
elist.notify_before(__setitem__=pass_on_args)
elist.notify_after(__setitem__=print_element_change)
elist[0] = 1
# No print
elist[0] = -1
# PRINTS: '{0: 1} -> {0: -1}'
This represents a generic way to establish callbacks for any method on any type of instance.
I think it is a very powerful, and useful callback tool that avoids the need for hard coded classes like edict
or elist
.
While this does not replace an EventfulDict
trait type, it would be the internal foundation of one.
from traitlets.
After #317 is merged, this could be a working example:
class HasEvents(HasTraits):
elist = Eventful(List(), '__setitem__')
@event(on='elist.__setitem__')
def elist_set_callbacks(self):
def before(inst, call):
m = "set from %s to %s at list index %s"
print(m % (inst[call.args[0]], call.args[1], call.args[0]))
return (before, None)
he = HasEvents()
he.elist = [1]
he.elist[0] = 2
Prints: set from 1 to 2 at list index 0
from traitlets.
Related Issues (20)
- Is there a way to only show base "--help" for explicitly defined options?
- pull request blocked by "Enforce PR label / enforce-label (pull_request)" HOT 1
- Issues with trait typing HOT 12
- Consider using mypyc HOT 1
- Promise not to remove Sentinel?
- One test fails HOT 3
- Singletons configurable allow multiple instances HOT 2
- `__doc__` no longer contains the traitlets help string for reference type traitlets (Dict, List, ...) HOT 2
- Fix License metadata in PyPi package
- More typing edge cases
- Uncaught Exception `TypeError: 'ExtendedCompletionFinder' object is not callable` caused by orphaned pyc in site-packages HOT 5
- execution order of trait observers HOT 2
- Traitlets documentation incorrectly shows `__version__`
- Upgrade from traitlets `5.11.2` to `5.12.0` broke script HOT 1
- 5.13.0: pytest is failing with error in tests/test_typing.py HOT 1
- Changed behaviour since v5.12.0 of `traitlets.Set.set` if value is a string HOT 1
- Obeserve not works when showing result in widgets.Output()
- 26 tests fail
- test_complete_custom_completers failing HOT 4
- in get_type_hints(Appliction), TypeError: <class 'traitlets.traitlets.Dict'> is not a generic class HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from traitlets.