hytos / DTI_PID / DTI_PID / HMBTable.py @ 9f0676d9
이력 | 보기 | 이력해설 | 다운로드 (4.94 KB)
1 |
# coding: utf-8
|
---|---|
2 |
|
3 |
import os |
4 |
import sys |
5 |
import sqlite3 |
6 |
from SingletonInstance import SingletonInstance |
7 |
|
8 |
|
9 |
class StreamData: |
10 |
def __init__(self, name, unit='', value='', index=0, phase='', value_min='', value_max=''): |
11 |
self.name = name
|
12 |
self.unit = unit
|
13 |
self.value = value
|
14 |
self.index = index
|
15 |
self.phase = phase
|
16 |
self.value_min = value_min
|
17 |
self.value_max = value_max
|
18 |
|
19 |
|
20 |
class HMBData: |
21 |
"""HMB data class"""
|
22 |
def __init__(self, uid=None): |
23 |
self._uid = uid
|
24 |
self._stream_no = None |
25 |
self._from = None |
26 |
self._to = None |
27 |
self._phase = None |
28 |
|
29 |
self._data = []
|
30 |
|
31 |
@property
|
32 |
def data(self): |
33 |
"""return hmb data"""
|
34 |
return self._data |
35 |
|
36 |
@data.setter
|
37 |
def data(self, value): |
38 |
"""hmb data"""
|
39 |
self._data = value
|
40 |
|
41 |
@property
|
42 |
def phase(self): |
43 |
"""phase"""
|
44 |
return self._phase |
45 |
|
46 |
@phase.setter
|
47 |
def phase(self, value): |
48 |
"""phase"""
|
49 |
self._phase = value
|
50 |
|
51 |
@property
|
52 |
def hfrom(self): |
53 |
"""from"""
|
54 |
return self._from |
55 |
|
56 |
@hfrom.setter
|
57 |
def hfrom(self, value): |
58 |
"""from"""
|
59 |
self._from = value
|
60 |
|
61 |
@property
|
62 |
def hto(self): |
63 |
"""to"""
|
64 |
return self._to |
65 |
|
66 |
@hto.setter
|
67 |
def hto(self, value): |
68 |
"""to"""
|
69 |
self._to = value
|
70 |
|
71 |
@property
|
72 |
def uid(self): |
73 |
"""uid"""
|
74 |
return self._uid |
75 |
|
76 |
@uid.setter
|
77 |
def uid(self, value): |
78 |
"""uid"""
|
79 |
self._uid = value
|
80 |
|
81 |
@property
|
82 |
def stream_no(self): |
83 |
"""stream no"""
|
84 |
return self._stream_no |
85 |
|
86 |
@stream_no.setter
|
87 |
def stream_no(self, value): |
88 |
"""stream no"""
|
89 |
self._stream_no = value
|
90 |
|
91 |
@staticmethod
|
92 |
def from_row(rows): |
93 |
"""create hmb data from database record"""
|
94 |
if rows:
|
95 |
pre_no = rows[0]['Stream_No'] |
96 |
else:
|
97 |
return []
|
98 |
|
99 |
data_list = [] |
100 |
datas = [] |
101 |
|
102 |
for row in rows: |
103 |
if row['Stream_No'] == pre_no: |
104 |
datas.append(row) |
105 |
else:
|
106 |
pre_no = row['Stream_No']
|
107 |
data_list.append(datas) |
108 |
datas = [row] |
109 |
|
110 |
data_list.append(datas) |
111 |
|
112 |
hmbs = [] |
113 |
for datas in data_list: |
114 |
hmb = HMBData(datas[0]['UID']) |
115 |
hmb.stream_no = datas[0]['Stream_No'] |
116 |
hmb.hfrom = datas[0]['From'] |
117 |
hmb.hto = datas[0]['To'] |
118 |
hmb.phase = datas[0]['Phase'] |
119 |
|
120 |
hmb_data = [] |
121 |
for _data in datas: |
122 |
name = _data['Name']
|
123 |
unit = _data['Unit']
|
124 |
value = _data['Value']
|
125 |
index = _data['index']
|
126 |
phase = _data['Type']
|
127 |
value_min = _data['Value_Min'] if _data['Value_Min'] else '' |
128 |
value_max = _data['Value_Max'] if _data['Value_Max'] else '' |
129 |
hmb_data.append(StreamData(name, unit, value, index, phase, value_min, value_max)) |
130 |
|
131 |
hmb.data = hmb_data |
132 |
hmbs.append(hmb) |
133 |
|
134 |
return hmbs
|
135 |
|
136 |
|
137 |
class HMBTable: |
138 |
"""HMB table class"""
|
139 |
def __init__(self): |
140 |
self._hmbs = None |
141 |
|
142 |
def load_data(self): |
143 |
"""load hmb data from database"""
|
144 |
from AppDocData import AppDocData |
145 |
|
146 |
try:
|
147 |
if self._hmbs is None: |
148 |
self._hmbs = []
|
149 |
|
150 |
rows = AppDocData.instance().get_hmb_data(None)
|
151 |
for row in rows: |
152 |
hmb = HMBData.from_row(row) |
153 |
self._hmbs.append(hmb)
|
154 |
# Catch the exception
|
155 |
except Exception as ex: |
156 |
from App import App |
157 |
from AppDocData import MessageType |
158 |
|
159 |
message = f"error occurred({repr(ex)}) in {sys.exc_info()[-1].tb_frame.f_code.co_filename}:" \
|
160 |
f"{sys.exc_info()[-1].tb_lineno}"
|
161 |
App.mainWnd().addMessage.emit(MessageType.Error, message) |
162 |
|
163 |
return self._hmbs |
164 |
|
165 |
@property
|
166 |
def names(self): |
167 |
"""return hmb attribute names"""
|
168 |
return set([hmb.name for hmb in self._hmbs if not hmb.isDeleted]) if self._hmbs is not None else {} |
169 |
|
170 |
def streamNos(self): |
171 |
"""return stream no collection which are not duplicated """
|
172 |
return set([hmb.stream_no for hmb in self._hmbs]) if self._hmbs is not None else {} |
173 |
|
174 |
def dataOfStreamNo(self, streamNo): |
175 |
"""return stream data"""
|
176 |
if self._hmbs is not None: |
177 |
matches = [hmb.data for hmb in self._hmbs if hmb.stream_no == streamNo] |
178 |
return matches[0] if matches else None |
179 |
else:
|
180 |
return None |
181 |
|
182 |
'''
|
183 |
@brief append hmb data
|
184 |
@author humkyung
|
185 |
@date 2018.07.12
|
186 |
'''
|
187 |
def append(self, hmbData): |
188 |
if self._hmbs is None: |
189 |
self._hmbs = []
|
190 |
|
191 |
self._hmbs.append(hmbData)
|
192 |
|
193 |
'''
|
194 |
@brief reset
|
195 |
@author humkyung
|
196 |
@date 2018.07.12
|
197 |
'''
|
198 |
def reset(self): |
199 |
if self._hmbs is not None: |
200 |
del self._hmbs |
201 |
|
202 |
self._hmbs = None |