def peer_echo(includes=None, force=False):
    """Echo filtered attributes back onto the same relation for storage.

    This is a requirement to use the peerstorage module - it needs to be called
    from the peer relation's changed hook.

    If Juju leader support exists this will be a noop unless force is True.
    """
    try:
        is_leader()
    except NotImplementedError:
        pass
    else:
        if not force:
            return  # NOOP if leader-election is supported

    # Use original non-leader calls
    relation_get = _relation_get
    relation_set = _relation_set

    rdata = relation_get()
    echo_data = {}
    if includes is None:
        echo_data = rdata.copy()
        for ex in ['private-address', 'public-address']:
            if ex in echo_data:
                echo_data.pop(ex)
    else:
        for attribute, value in six.iteritems(rdata):
            for include in includes:
                if include in attribute:
                    echo_data[attribute] = value
    if len(echo_data) > 0:
        relation_set(relation_settings=echo_data)
def peer_echo ( includes = None , force = False ) : try : is_leader ( ) except NotImplementedError : pass else : if not force : return relation_get = _relation_get relation_set = _relation_set rdata = relation_get ( ) echo_data = { } if includes is None : echo_data = rdata . copy ( ) for ex in [ 'private-address' , 'public-address' ] : if ex in echo_data : echo_data . pop ( ex ) else : for attribute , value in six . iteritems ( rdata ) : for include in includes : if include in attribute : echo_data [ attribute ] = value if len ( echo_data ) > 0 : relation_set ( relation_settings = echo_data )
Echo filtered attributes back onto the same relation for storage.

    This is a requirement to use the peerstorage module - it needs to be called
    from the peer relation's changed hook.

    If Juju leader support exists this will be a noop unless force is True.