Gets a funtion fully quaified name.
        Args    :
            fn      : The function.
        Returns : The name of the function.

def fn_name(fn):
    '''
        Gets a funtion fully quaified name.
        Args    :
            fn      : The function.
        Returns : The name of the function.
    '''
    expression = '(\S+) (?:of|at)'
    #Checks if the function is a mehtod and should have the self argument passed
    is_method   = inspect.ismethod(fn)

    #Builds the name of the method,module.class.method or module.method
    name        = '{}.{}'.format(fn.__module__, re.compile(expression).findall(str(fn))[0])

    return name,is_method