Fix - {diff} and {diff_full} notifications tokens were not always including the full output

ticket-16-diff-in-RSS
dgtlmoon 3 years ago committed by GitHub
parent 334010025f
commit 082634f851
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -2,22 +2,31 @@
import difflib import difflib
def same_slicer(l, a, b):
if a == b:
return [l[a]]
else:
return l[a:b]
# like .compare but a little different output # like .compare but a little different output
def customSequenceMatcher(before, after, include_equal=False): def customSequenceMatcher(before, after, include_equal=False):
cruncher = difflib.SequenceMatcher(isjunk=lambda x: x in " \\t", a=before, b=after) cruncher = difflib.SequenceMatcher(isjunk=lambda x: x in " \\t", a=before, b=after)
# @todo Line-by-line mode instead of buncghed, including `after` that is not in `before` (maybe unset?)
for tag, alo, ahi, blo, bhi in cruncher.get_opcodes(): for tag, alo, ahi, blo, bhi in cruncher.get_opcodes():
if include_equal and tag == 'equal': if include_equal and tag == 'equal':
g = before[alo:ahi] g = before[alo:ahi]
yield g yield g
elif tag == 'delete': elif tag == 'delete':
g = "(removed) {}".format(before[alo]) g = ["(removed) " + i for i in same_slicer(before, alo, ahi)]
yield g yield g
elif tag == 'replace': elif tag == 'replace':
g = ["(changed) {}".format(before[alo]), "(-> into) {}".format(after[blo])] g = ["(changed) " + i for i in same_slicer(before, alo, ahi)]
g += ["(into ) " + i for i in same_slicer(after, blo, bhi)]
yield g yield g
elif tag == 'insert': elif tag == 'insert':
g = "(added) {}".format(after[blo]) g = ["(added ) " + i for i in same_slicer(after, blo, bhi)]
yield g yield g
# only_differences - only return info about the differences, no context # only_differences - only return info about the differences, no context

@ -125,7 +125,7 @@ def test_check_notification(client, live_server):
# Diff was correctly executed # Diff was correctly executed
assert "Diff Full: Some initial text" in notification_submission assert "Diff Full: Some initial text" in notification_submission
assert "Diff: (changed) Which is across multiple lines" in notification_submission assert "Diff: (changed) Which is across multiple lines" in notification_submission
assert "(-> into) which has this one new line" in notification_submission assert "(into ) which has this one new line" in notification_submission
if env_base_url: if env_base_url:

@ -0,0 +1,3 @@
After twenty years, as cursed as I may be
ok
and insure that I'm one of those computer nerds.

@ -2,5 +2,6 @@ After twenty years, as cursed as I may be
for having learned computerese, for having learned computerese,
I continue to examine bits, bytes and words I continue to examine bits, bytes and words
xok xok
next-x-ok
and insure that I'm one of those computer nerds. and insure that I'm one of those computer nerds.
and something new and something new

@ -12,12 +12,19 @@ from changedetectionio import diff
class TestDiffBuilder(unittest.TestCase): class TestDiffBuilder(unittest.TestCase):
def test_expected_diff_output(self): def test_expected_diff_output(self):
base_dir=os.path.dirname(__file__) base_dir = os.path.dirname(__file__)
output = diff.render_diff(base_dir+"/test-content/before.txt", base_dir+"/test-content/after.txt") output = diff.render_diff(previous_file=base_dir + "/test-content/before.txt", newest_file=base_dir + "/test-content/after.txt")
output = output.split("\n") output = output.split("\n")
self.assertIn("(changed) ok", output) self.assertIn('(changed) ok', output)
self.assertIn("(-> into) xok", output) self.assertIn('(into ) xok', output)
self.assertIn("(added) and something new", output) self.assertIn('(into ) next-x-ok', output)
self.assertIn('(added ) and something new', output)
output = diff.render_diff(previous_file=base_dir + "/test-content/before.txt", newest_file=base_dir + "/test-content/after-2.txt")
output = output.split("\n")
self.assertIn('(removed) for having learned computerese,', output)
self.assertIn('(removed) I continue to examine bits, bytes and words', output)
# @todo test blocks of changed, blocks of added, blocks of removed # @todo test blocks of changed, blocks of added, blocks of removed

@ -35,3 +35,8 @@ lxml
# 3.141 was missing socksVersion, 3.150 was not in pypi, so we try 4.1.0 # 3.141 was missing socksVersion, 3.150 was not in pypi, so we try 4.1.0
selenium ~= 4.1.0 selenium ~= 4.1.0
# https://stackoverflow.com/questions/71652965/importerror-cannot-import-name-safe-str-cmp-from-werkzeug-security/71653849#71653849
# ImportError: cannot import name 'safe_str_cmp' from 'werkzeug.security'
# need to revisit flask login versions
werkzeug ~= 2.0.0

Loading…
Cancel
Save