'Returns the final URL based on the value of ``url``.
If ``url`` is callable it will call the function.
If not, it will then try to call ``reverse`` on ``url``.
Failing that, it will simply return the value of ``url`` as-is.
When called for a row action, the current row data object will be
passed as the first parameter.'

def get_link_url(self, datum=None):

    if (not self.url):
        raise NotImplementedError('A    LinkAction    class    must    have    a    url    attribute    or    define    its    own    get_link_url    method.')
    if callable(self.url):
        return self.url(datum, **self.kwargs)
    try:
        if datum:
            obj_id = self.table.get_object_id(datum)
            return urlresolvers.reverse(self.url, args=(obj_id,))
        else:
            return urlresolvers.reverse(self.url)
    except urlresolvers.NoReverseMatch as ex:
        LOG.info('No    reverse    found    for    "%(url)s":    %(exception)s', {'url': self.url, 'exception': ex})
        return self.url
