baseimage-tutorial-framework/lib/tfw/components/commands_equal.py

34 lines
1012 B
Python

# 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