<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def update_source(self, **kwargs):
 """Set BGP update source property for a neighbor. This method currently only supports loopback interfaces. Args: vrf (str):
 The VRF for this BGP process. rbridge_id (str):
 The rbridge ID of the device on which BGP will be configured in a VCS fabric. neighbor (str):
 Address family to configure. (ipv4, ipv6) int_type (str):
 Interface type (loopback) int_name (str):
 Interface identifier (1, 5, 7, etc) get (bool):
 Get config instead of editing config. (True, False) callback (function):
 A function executed upon completion of the method. The only parameter passed to `callback` will be the ``ElementTree`` `config`. Returns: Return value of `callback`. Raises: ``AttributeError``: When `neighbor` is not a valid IPv4 or IPv6 address. ``KeyError``: When `int_type` or `int_name` are not specified. Examples: Traceback (most recent call last):
 NotImplementedError KeyError """

        callback = kwargs.pop('callback', self._callback)
        ip_addr = ip_interface(unicode(kwargs.pop('neighbor')))
        config = self._update_source_xml(neighbor=ip_addr,
                                         int_type=kwargs.pop('int_type'),
                                         int_name=kwargs.pop('int_name'),
                                         rbridge_id=kwargs.pop('rbridge_id',
                                                               '1'),
                                         vrf=kwargs.pop('vrf', 'default'))
        if kwargs.pop('get', False):
            return callback(config, handler='get_config')
        if kwargs.pop('delete', False):
            config.find('.//*update-source').set('operation', 'delete')
        return callback(config)