kopia lustrzana https://github.com/dgtlmoon/changedetection.io
Fix - {diff} and {diff_full} notifications tokens were not always including the full output
rodzic
334010025f
commit
082634f851
|
@ -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
|
||||||
|
|
||||||
|
|
Ładowanie…
Reference in New Issue