def METHOD_NAME(domain, info):
    if domain != "py":
        return None
    modname = info["module"]
    fullname = info["fullname"]
    submod = sys.modules.get(modname)
    print(submod)
    if submod is None:
        return None
    for part in fullname.split("."):
        try:
            obj = getattr(submod, part)
            print(obj)
        except:  # noqa: E722
            return None
    try:
        fn = inspect.getsourcefile(obj.test_fn)  # TODO: generalise for other objects!
        print(fn)
    except:  # noqa: E722
        fn = None
    if not fn:
        return None
    try:
        source, lineno = inspect.getsourcelines(obj)
    except:  # noqa: E722
        lineno = None
    if lineno:
        linespec = "#L%d-L%d" % (lineno, lineno + len(source) - 1)
    else:
        linespec = ""
    filename = fn.split("python-client", 1)[-1]
    return f"https://github.com/Giskard-AI/giskard/blob/feature/ai-test-v2-merged/python-client{filename}{linespec}"