mirror of
https://github.com/arsenetar/dupeguru.git
synced 2025-03-10 05:34:36 +00:00
parent
0e542577b0
commit
c34c9562d3
14
core/app.py
14
core/app.py
@ -21,8 +21,7 @@ from hscommon.notify import Broadcaster
|
|||||||
from hscommon.path import Path
|
from hscommon.path import Path
|
||||||
from hscommon.conflict import smart_move, smart_copy
|
from hscommon.conflict import smart_move, smart_copy
|
||||||
from hscommon.gui.progress_window import ProgressWindow
|
from hscommon.gui.progress_window import ProgressWindow
|
||||||
from hscommon.util import (delete_if_empty, first, escape, nonone, format_time_decimal, allsame,
|
from hscommon.util import delete_if_empty, first, escape, nonone, format_time_decimal, allsame
|
||||||
rem_file_ext)
|
|
||||||
from hscommon.trans import tr
|
from hscommon.trans import tr
|
||||||
from hscommon.plat import ISWINDOWS
|
from hscommon.plat import ISWINDOWS
|
||||||
from hscommon import desktop
|
from hscommon import desktop
|
||||||
@ -90,10 +89,7 @@ def format_dupe_count(c):
|
|||||||
return str(c) if c else '---'
|
return str(c) if c else '---'
|
||||||
|
|
||||||
def cmp_value(dupe, attrname):
|
def cmp_value(dupe, attrname):
|
||||||
if attrname == 'name':
|
value = getattr(dupe, attrname, '')
|
||||||
value = rem_file_ext(dupe.name)
|
|
||||||
else:
|
|
||||||
value = getattr(dupe, attrname, '')
|
|
||||||
return value.lower() if isinstance(value, str) else value
|
return value.lower() if isinstance(value, str) else value
|
||||||
|
|
||||||
def fix_surrogate_encoding(s, encoding='utf-8'):
|
def fix_surrogate_encoding(s, encoding='utf-8'):
|
||||||
@ -205,13 +201,11 @@ class DupeGuru(RegistrableApplication, Broadcaster):
|
|||||||
else:
|
else:
|
||||||
result = cmp_value(dupe, key)
|
result = cmp_value(dupe, key)
|
||||||
if delta:
|
if delta:
|
||||||
refval = getattr(get_group().ref, key)
|
refval = cmp_value(get_group().ref, key)
|
||||||
if key in self.result_table.DELTA_COLUMNS:
|
if key in self.result_table.DELTA_COLUMNS:
|
||||||
result -= refval
|
result -= refval
|
||||||
else:
|
else:
|
||||||
# We use directly getattr() because cmp_value() does thing that we don't want to do
|
same = cmp_value(dupe, key) == refval
|
||||||
# when we want to determine whether two values are exactly the same.
|
|
||||||
same = getattr(dupe, key) == refval
|
|
||||||
result = (same, result)
|
result = (same, result)
|
||||||
return result
|
return result
|
||||||
|
|
||||||
|
@ -42,7 +42,7 @@ class DupeRow(Row):
|
|||||||
dupe_info = self.data
|
dupe_info = self.data
|
||||||
ref_info = self._group.ref.get_display_info(group=self._group, delta=False)
|
ref_info = self._group.ref.get_display_info(group=self._group, delta=False)
|
||||||
for key, value in dupe_info.items():
|
for key, value in dupe_info.items():
|
||||||
if ref_info[key] != value:
|
if (key not in self._delta_columns) and (ref_info[key].lower() != value.lower()):
|
||||||
self._delta_columns.add(key)
|
self._delta_columns.add(key)
|
||||||
return column_name in self._delta_columns
|
return column_name in self._delta_columns
|
||||||
|
|
||||||
|
@ -44,3 +44,13 @@ def test_delta_flags_delta_mode_on_non_delta_columns():
|
|||||||
assert not app.rtable[3].is_cell_delta('name')
|
assert not app.rtable[3].is_cell_delta('name')
|
||||||
# "ibabtu" == "ibabtu", flag off
|
# "ibabtu" == "ibabtu", flag off
|
||||||
assert not app.rtable[4].is_cell_delta('name')
|
assert not app.rtable[4].is_cell_delta('name')
|
||||||
|
|
||||||
|
def test_delta_flags_delta_mode_on_non_delta_columns_case_insensitive():
|
||||||
|
# Comparison that occurs for non-numeric columns to check whether they're delta is case
|
||||||
|
# insensitive
|
||||||
|
app = app_with_results()
|
||||||
|
app.app.results.groups[1].ref.name = "ibAbtu"
|
||||||
|
app.app.results.groups[1].dupes[0].name = "IBaBTU"
|
||||||
|
app.rtable.delta_values = True
|
||||||
|
# "ibAbtu" == "IBaBTU", flag off
|
||||||
|
assert not app.rtable[4].is_cell_delta('name')
|
||||||
|
@ -230,6 +230,23 @@ class TestCaseResultsWithSomeGroups:
|
|||||||
# also remove group ref
|
# also remove group ref
|
||||||
assert self.results.get_group_of_duplicate(ref) is None
|
assert self.results.get_group_of_duplicate(ref) is None
|
||||||
|
|
||||||
|
def test_dupe_list_sort_delta_values_nonnumeric(self):
|
||||||
|
# When sorting dupes in delta mode on a non-numeric column, our first sort criteria is if
|
||||||
|
# the string is the same as its ref.
|
||||||
|
g1r, g1d1, g1d2, g2r, g2d1 = self.objects
|
||||||
|
# "aaa" makes our dupe go first in alphabetical order, but since we have the same value as
|
||||||
|
# ref, we're going last.
|
||||||
|
g2r.name = g2d1.name = "aaa"
|
||||||
|
self.results.sort_dupes('name', delta=True)
|
||||||
|
eq_("aaa", self.results.dupes[2].name)
|
||||||
|
|
||||||
|
def test_dupe_list_sort_delta_values_nonnumeric_case_insensitive(self):
|
||||||
|
# Non-numeric delta sorting comparison is case insensitive
|
||||||
|
g1r, g1d1, g1d2, g2r, g2d1 = self.objects
|
||||||
|
g2r.name = "AaA"
|
||||||
|
g2d1.name = "aAa"
|
||||||
|
self.results.sort_dupes('name', delta=True)
|
||||||
|
eq_("aAa", self.results.dupes[2].name)
|
||||||
|
|
||||||
class TestCaseResultsWithSavedResults:
|
class TestCaseResultsWithSavedResults:
|
||||||
def setup_method(self, method):
|
def setup_method(self, method):
|
||||||
|
Loading…
x
Reference in New Issue
Block a user