Source code for properties.link

"""link.py: functionality for connecting to traitlets"""
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
from __future__ import unicode_literals

from six import string_types

from .base import HasProperties
from .handlers import observer


def properties_observer(instance, prop, callback, **kwargs):
    """Adds properties callback handler"""
    change_only = kwargs.get('change_only', True)
    observer(instance, prop, callback, change_only=change_only)

LINK_OBSERVERS = {HasProperties: properties_observer}

try:
    import traitlets

    def traitlets_observer(instance, prop, callback, **_):
        """Adds traitlets callback handler"""
        instance.observe(callback, names=prop)

    LINK_OBSERVERS.update({traitlets.HasTraits: traitlets_observer})

except ImportError:
    pass