def diff(right, external=False):

    lw = None
    rw = None
    lv = None
    rv = None

    for w in sublime.windows():
        if w.id() == LEFT["win_id"]:
            lw = w
        if w.id() == right["win_id"]:
            rw = w
        if lw is not None and rw is not None:
            break

    if lw is not None:
        for v in lw.views():
            if v.id() == LEFT["view_id"]:
                lv = v
                break
    else:
        if LEFT["clip"]:
            lv = LEFT["clip"]

    if rw is not None:
        for v in rw.views():
            if v.id() == right["view_id"]:
                rv = v
                break
    else:
        if right["clip"]:
            rv = right["clip"]

    if lv is not None and rv is not None:
        ext_diff = get_external_diff()
        if external:
            EasyDiff.extcompare(EasyDiffInput(lv, rv, external=True), ext_diff)
        else:
            EasyDiff.compare(EasyDiffInput(lv, rv))
    else:
        log("Can't compare")


###############################
# Helper Classes
###############################
Initializes the settings for the connection and container.
dataset/ETHPy150Open facelessuser/EasyDiff/easy_diff_basic.py/diff--crossover with--dataset/ETHPy150Open django-cumulus/django-cumulus/cumulus/authentication.py/Auth.__init__