Implement must_contain_patterns CommandsEqual

This commit is contained in:
Kristóf Tóth 2018-08-03 16:07:12 +02:00
parent 8454236bc8
commit 4f881a0ea0
1 changed files with 20 additions and 1 deletions

View File

@ -2,27 +2,46 @@
# All Rights Reserved. See LICENSE file for details.
from shlex import split
from re import search
from tfw.decorators.lazy_property import lazy_property
class CommandsEqual:
def __init__(self, command_1, command_2, fuzzyness=1, must_begin_similarly=True):
def __init__(self, command_1, command_2, fuzzyness=1, must_begin_similarly=True, must_contain_patterns=None):
self.command_1 = split(command_1)
self.command_2 = split(command_2)
self.fuzzyness = fuzzyness
self.must_begin_similarly = must_begin_similarly
self.must_contain_patterns = must_contain_patterns
def __bool__(self):
if self.must_begin_similarly and not self.beginnings_are_equal:
return False
if self.must_contain_patterns is not None and not self.commands_contain_necessary_parts:
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 commands_contain_necessary_parts(self):
return all((
self.contains_neccessary_parts(self.command_1),
self.contains_neccessary_parts(self.command_2)
))
def contains_neccessary_parts(self, command):
command = ' '.join(command)
for pattern in self.must_contain_patterns:
if not search(pattern, command):
return False
return True
@lazy_property
def similarity(self):
parts_1 = set(self.command_1)