# Copyright (C) 2018 Avatao.com Innovative Learning Kft. # All Rights Reserved. See LICENSE file for details. from shlex import split from tfw.decorators.lazy_property import lazy_property class CommandsEqual: def __init__(self, command_1, command_2, fuzzyness=1, must_begin_similarly=True): self.command_1 = split(command_1) self.command_2 = split(command_2) self.fuzzyness = fuzzyness self.must_begin_similarly = must_begin_similarly def __bool__(self): if self.must_begin_similarly and not self.beginnings_are_equal: return False return self.similarity >= self.fuzzyness @lazy_property def beginnings_are_equal(self): return self.command_1[0] == self.command_2[0] @lazy_property def similarity(self): parts_1 = set(self.command_1) parts_2 = set(self.command_2) difference = parts_1 - parts_2 deviance = len(difference) / len(max(parts_1, parts_2)) return 1 - deviance