Skip to content

Commit c488545

Browse files
authored
Merge pull request #276 from ebroecker/iss275
add min and max to jsonAll export #275
2 parents adbcede + 291b88d commit c488545

File tree

2 files changed

+69
-16
lines changed

2 files changed

+69
-16
lines changed

src/canmatrix/cmjson.py

+23-16
Original file line numberDiff line numberDiff line change
@@ -25,13 +25,12 @@
2525
# (https://github.com/ericevenchick/CANard)
2626

2727
from builtins import *
28-
from .canmatrix import *
28+
import canmatrix
2929
import codecs
3030
import json
3131
import sys
3232

3333

34-
3534
extension = 'json'
3635

3736
def dump(db, f, **options):
@@ -137,12 +136,14 @@ def dump(db, f, **options):
137136
"bit_length": signal.size,
138137
"factor": str(signal.factor),
139138
"offset": str(signal.offset),
139+
"min": str(signal.min),
140+
"max": str(signal.max),
140141
"is_big_endian": signal.is_little_endian == 0,
141142
"is_signed": signal.is_signed,
142143
"is_float": signal.is_float,
143144
"comment": signal.comment,
144145
"attributes": attribs,
145-
"values": values
146+
"values": values
146147
}
147148
if signal.multiplex is not None:
148149
signalDict["multiplex"] = signal.multiplex
@@ -176,7 +177,7 @@ def dump(db, f, **options):
176177

177178

178179
def load(f, **options):
179-
db = CanMatrix()
180+
db = canmatrix.CanMatrix()
180181

181182
if (sys.version_info > (3, 0)):
182183
import io
@@ -187,7 +188,7 @@ def load(f, **options):
187188
if "messages" in jsonData:
188189
for frame in jsonData["messages"]:
189190
# newframe = Frame(frame["id"],frame["name"],8,None)
190-
newframe = Frame(frame["name"],
191+
newframe = canmatrix.Frame(frame["name"],
191192
id=frame["id"],
192193
size=8)
193194
if "length" in frame:
@@ -199,36 +200,42 @@ def load(f, **options):
199200
newframe.extended = 0
200201

201202
for signal in frame["signals"]:
202-
if "is_big_endian" in signal and signal["is_big_endian"]:
203-
is_little_endian = False
204-
else:
205-
is_little_endian = True
206-
if "is_float" in signal and signal["is_float"]:
203+
is_little_endian = not signal.get("is_big_endian", False)
204+
205+
if signal.get("is_float", False):
207206
is_float = True
208207
else:
209208
is_float = False
210-
if "is_signed" in signal and signal["is_signed"]:
209+
210+
if signal.get("is_signed", False):
211211
is_signed = True
212212
else:
213213
is_signed = False
214-
newsignal = Signal(signal["name"],
214+
newsignal = canmatrix.Signal(signal["name"],
215215
startBit=signal["start_bit"],
216216
size=signal["bit_length"],
217217
is_little_endian=is_little_endian,
218218
is_signed=is_signed,
219+
is_float = is_float,
219220
factor=signal["factor"],
220221
offset=signal["offset"])
221-
if "unit" in signal and signal["unit"]:
222+
223+
if signal.get("min") is not None:
224+
newsignal.min = newsignal.float_factory(signal["min"])
225+
226+
if signal.get("max", False):
227+
newsignal.max = newsignal.float_factory(signal["max"])
228+
229+
if signal.get("unit", False):
222230
newsignal.unit = signal["unit"]
223231

224-
if "multiplex" in signal and signal["multiplex"]:
232+
if signal.get("multiplex", False):
225233
newsignal.unit = signal["multiplex"]
226234

227-
if "values" in signal and signal["values"]:
235+
if signal.get("values", False):
228236
for key in signal["values"]:
229237
newsignal.addValues(key, signal["values"][key])
230238
if newsignal.is_little_endian == False:
231-
232239
newsignal.setStartbit(
233240
newsignal.startBit, bitNumbering=1, startLittle=True)
234241
newframe.addSignal(newsignal)

src/canmatrix/tests/test_cmjson.py

+46
Original file line numberDiff line numberDiff line change
@@ -61,3 +61,49 @@ def test_export_long_signal_names():
6161
data = json.loads(out_file.getvalue().decode("utf-8"))
6262

6363
assert data['messages'][0]['signals'][0]['name'] == long_signal_name
64+
65+
def test_export_min_max():
66+
matrix = canmatrix.canmatrix.CanMatrix()
67+
frame = canmatrix.canmatrix.Frame(name="test_frame", size=6, id=10)
68+
signal = canmatrix.Signal(name="someSigName", size=40, min=-5, max=42)
69+
frame.addSignal(signal)
70+
matrix.addFrame(frame)
71+
out_file = io.BytesIO()
72+
canmatrix.formats.dump(matrix, out_file, "cmjson", jsonAll=True)
73+
data = json.loads(out_file.getvalue().decode("utf-8"))
74+
data['messages'][0]['signals'][0]['min'] == -5
75+
data['messages'][0]['signals'][0]['max'] == 42
76+
77+
def test_import_min_max():
78+
jsonInput = """{
79+
"messages": [
80+
{
81+
"attributes": {},
82+
"comment": "",
83+
"id": 10,
84+
"is_extended_frame": false,
85+
"length": 6,
86+
"name": "test_frame",
87+
"signals": [
88+
{
89+
"attributes": {},
90+
"bit_length": 40,
91+
"comment": null,
92+
"factor": "1",
93+
"is_big_endian": false,
94+
"is_float": false,
95+
"is_signed": true,
96+
"max": "42",
97+
"min": "-5",
98+
"name": "someSigName",
99+
"offset": "0",
100+
"start_bit": 0,
101+
"values": {}
102+
}
103+
]
104+
}
105+
]
106+
}"""
107+
matrix = canmatrix.formats.loads(jsonInput, "cmjson", flatImport=True, jsonAll=True)
108+
assert matrix.frames[0].signals[0].min == -5
109+
assert matrix.frames[0].signals[0].max == 42

0 commit comments

Comments
 (0)