Skip to content

Commit b8e336b

Browse files
authored
[convert] add delete_obsolete_ecus (fix for #434) (#438)
1 parent d95f08c commit b8e336b

File tree

4 files changed

+31
-0
lines changed

4 files changed

+31
-0
lines changed

src/canmatrix/canmatrix.py

+11
Original file line numberDiff line numberDiff line change
@@ -1567,6 +1567,17 @@ def add_define_default(self, name, value): # type: (str, typing.Any) -> None
15671567
if name in self.global_defines:
15681568
self.global_defines[name].set_default(value)
15691569

1570+
def delete_obsolete_ecus(self): # type: () -> None
1571+
"""Delete all unused ECUs
1572+
"""
1573+
used_ecus = [ecu for f in self.frames for ecu in f.transmitters]
1574+
used_ecus += [ecu for f in self.frames for ecu in f.receivers]
1575+
used_ecus += [ecu for f in self.frames for s in f.signals for ecu in s.receivers]
1576+
used_ecus += [ecu for s in self.signals for ecu in s.receivers]
1577+
ecus_to_delete = [ecu.name for ecu in self.ecus if ecu.name not in used_ecus]
1578+
for ecu in ecus_to_delete:
1579+
self.del_ecu(ecu)
1580+
15701581
def delete_obsolete_defines(self): # type: () -> None
15711582
"""Delete all unused Defines.
15721583

src/canmatrix/cli/convert.py

+1
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ def get_formats():
5555
# manipulation and filter switches
5656
@click.option('--deleteObsoleteDefines/--no-deleteObsoleteDefines', 'deleteObsoleteDefines', default=False, help="delete defines from all ECUs, frames and Signals\nExample --deleteObsoleteDefines")
5757
@click.option('--deleteEcu', 'deleteEcu', help="delete Ecu form databases. (comma separated list)\nSyntax: --deleteEcu=myEcu,mySecondEcu")
58+
@click.option('--deleteObsoleteEcus/--no-deleteObsoleteEcus', 'deleteObsoleteEcus', default=False, help="delete ECUs which are not references as transmitter or receiver\nExample --deleteObsoleteEcus")
5859
@click.option('--renameEcu', 'renameEcu', help="rename Ecu form databases. (comma separated list)\nSyntax: --renameEcu=myOldEcu:myNewEcu,mySecondEcu:mySecondNewEcu")
5960
@click.option('--deleteSignal', 'deleteSignal', help="delete Signal form databases. (comma separated list)\nSyntax: --deleteSignal=mySignal1,mySecondSignal")
6061
@click.option('--renameSignal', 'renameSignal', help="rename Signal form databases. (comma separated list)\nSyntax: --renameSignal=myOldSignal:myNewSignal,mySecondSignal:mySecondNewSignal")

src/canmatrix/convert.py

+4
Original file line numberDiff line numberDiff line change
@@ -195,6 +195,10 @@ def convert(infile, out_file_name, **options): # type: (str, str, **str) -> Non
195195
'deleteObsoleteDefines']:
196196
db.delete_obsolete_defines()
197197

198+
if 'deleteObsoleteEcus' in options and options[
199+
'deleteObsoleteEcus']:
200+
db.delete_obsolete_ecus()
201+
198202
if 'recalcDLC' in options and options['recalcDLC']:
199203
db.recalc_dlc(options['recalcDLC'])
200204

src/canmatrix/tests/test_canmatrix.py

+15
Original file line numberDiff line numberDiff line change
@@ -943,6 +943,21 @@ def test_canmatrix_del_ecu_by_instance(empty_matrix):
943943
assert empty_matrix.ecus == [ecu2]
944944

945945

946+
def test_canmatrix_del_obsolete_ecus(empty_matrix):
947+
empty_matrix.add_ecu(canmatrix.Ecu(name="Ecu1"))
948+
empty_matrix.add_ecu(canmatrix.Ecu(name="Ecu2"))
949+
frame1 = canmatrix.Frame(name="frame1", transmitters=["Ecu1"])
950+
frame1.add_signal(canmatrix.Signal("signal1", receivers=["Ecu2"]))
951+
empty_matrix.add_frame(frame1)
952+
empty_matrix.delete_obsolete_ecus()
953+
assert "Ecu1" in [ecu.name for ecu in empty_matrix.ecus]
954+
assert "Ecu2" in [ecu.name for ecu in empty_matrix.ecus]
955+
frame1.del_transmitter("Ecu1")
956+
empty_matrix.delete_obsolete_ecus()
957+
assert "Ecu1" not in [ecu.name for ecu in empty_matrix.ecus]
958+
assert "Ecu2" in [ecu.name for ecu in empty_matrix.ecus]
959+
960+
946961
def test_canmatrix_rename_frame_by_name(empty_matrix):
947962
f = canmatrix.Frame(name="F1")
948963
empty_matrix.add_frame(f)

0 commit comments

Comments
 (0)