-
Notifications
You must be signed in to change notification settings - Fork 4
/
model-main.py
102 lines (78 loc) · 2.4 KB
/
model-main.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
import json, unittest, datetime
with open("./data-1.json","r") as f:
jsonData1 = json.load(f)
with open("./data-2.json","r") as f:
jsonData2 = json.load(f)
with open("./data-result.json","r") as f:
jsonExpectedResult = json.load(f)
def convertFromFormat1 (jsonObject):
locationParts = jsonObject['location'].split('/')
result = {
'deviceID': jsonObject['deviceID'],
'deviceType': jsonObject['deviceType'],
'timestamp': jsonObject['timestamp'],
'location': {
'country': locationParts[0],
'city': locationParts[1],
'area': locationParts[2],
'factory': locationParts[3],
'section': locationParts[4]
},
'data': {
'status': jsonObject['operationStatus'],
'temperature': jsonObject['temp']
}
}
return result
def convertFromFormat2 (jsonObject):
date = datetime.datetime.strptime(
jsonObject['timestamp'],
'%Y-%m-%dT%H:%M:%S.%fZ'
)
timestamp = round(
(date - datetime.datetime(1970, 1, 1)).total_seconds() * 1000
)
result = {
'deviceID': jsonObject['device']['id'],
'deviceType': jsonObject['device']['type'],
'timestamp': timestamp,
'location': {
'country': jsonObject['country'],
'city': jsonObject['city'],
'area': jsonObject['area'],
'factory': jsonObject['factory'],
'section': jsonObject['section']
},
'data': jsonObject['data']
}
return result
def main (jsonObject):
result = {}
if (jsonObject.get('device') == None):
result = convertFromFormat1(jsonObject)
else:
result = convertFromFormat2(jsonObject)
return result
class TestSolution(unittest.TestCase):
def test_sanity(self):
result = json.loads(json.dumps(jsonExpectedResult))
self.assertEqual(
result,
jsonExpectedResult
)
def test_dataType1(self):
result = main (jsonData1)
self.assertEqual(
result,
jsonExpectedResult,
'Converting from Type 1 failed'
)
def test_dataType2(self):
result = main (jsonData2)
self.assertEqual(
result,
jsonExpectedResult,
'Converting from Type 2 failed'
)
if __name__ == '__main__':
unittest.main()