hytos / DTI_PID / DTI_PID / HMBTable.py @ 33b2ea2b
이력 | 보기 | 이력해설 | 다운로드 (4.89 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 |
|
97 |
data_list = [] |
98 |
datas = [] |
99 |
|
100 |
for row in rows: |
101 |
if row['Stream_No'] == pre_no: |
102 |
datas.append(row) |
103 |
else:
|
104 |
pre_no = row['Stream_No']
|
105 |
data_list.append(datas) |
106 |
datas = [row] |
107 |
|
108 |
data_list.append(datas) |
109 |
|
110 |
hmbs = [] |
111 |
for datas in data_list: |
112 |
hmb = HMBData(datas[0]['UID']) |
113 |
hmb.stream_no = datas[0]['Stream_No'] |
114 |
hmb.hfrom = datas[0]['From'] |
115 |
hmb.hto = datas[0]['To'] |
116 |
hmb.phase = datas[0]['Phase'] |
117 |
|
118 |
hmb_data = [] |
119 |
for _data in datas: |
120 |
name = _data['Name']
|
121 |
unit = _data['Unit']
|
122 |
value = _data['Value']
|
123 |
index = _data['index']
|
124 |
phase = _data['Type']
|
125 |
value_min = _data['Value_Min'] if _data['Value_Min'] else '' |
126 |
value_max = _data['Value_Max'] if _data['Value_Max'] else '' |
127 |
hmb_data.append(StreamData(name, unit, value, index, phase, value_min, value_max)) |
128 |
|
129 |
hmb.data = hmb_data |
130 |
hmbs.append(hmb) |
131 |
|
132 |
return hmbs
|
133 |
|
134 |
|
135 |
class HMBTable: |
136 |
"""HMB table class"""
|
137 |
def __init__(self): |
138 |
self._hmbs = None |
139 |
|
140 |
def load_data(self): |
141 |
"""load hmb data from database"""
|
142 |
from AppDocData import AppDocData |
143 |
|
144 |
try:
|
145 |
if self._hmbs is None: |
146 |
self._hmbs = []
|
147 |
|
148 |
rows = AppDocData.get_hmb_data(None)
|
149 |
for row in rows: |
150 |
hmb = HMBData.from_row(row) |
151 |
self._hmbs.append(hmb)
|
152 |
# Catch the exception
|
153 |
except Exception as ex: |
154 |
from App import App |
155 |
from AppDocData import MessageType |
156 |
|
157 |
message = f"error occurred({repr(ex)}) in {sys.exc_info()[-1].tb_frame.f_code.co_filename}:" \
|
158 |
f"{sys.exc_info()[-1].tb_lineno}"
|
159 |
App.mainWnd().addMessage.emit(MessageType.Error, message) |
160 |
|
161 |
return self._hmbs |
162 |
|
163 |
@property
|
164 |
def names(self): |
165 |
"""return hmb attribute names"""
|
166 |
return set([hmb.name for hmb in self._hmbs if not hmb.isDeleted]) if self._hmbs is not None else {} |
167 |
|
168 |
def streamNos(self): |
169 |
"""return stream no collection which are not duplicated """
|
170 |
return set([hmb.stream_no for hmb in self._hmbs]) if self._hmbs is not None else {} |
171 |
|
172 |
def dataOfStreamNo(self, streamNo): |
173 |
"""return stream data"""
|
174 |
if self._hmbs is not None: |
175 |
matches = [hmb.data for hmb in self._hmbs if hmb.stream_no == streamNo] |
176 |
return matches[0] if matches else None |
177 |
else:
|
178 |
return None |
179 |
|
180 |
'''
|
181 |
@brief append hmb data
|
182 |
@author humkyung
|
183 |
@date 2018.07.12
|
184 |
'''
|
185 |
def append(self, hmbData): |
186 |
if self._hmbs is None: |
187 |
self._hmbs = []
|
188 |
|
189 |
self._hmbs.append(hmbData)
|
190 |
|
191 |
'''
|
192 |
@brief reset
|
193 |
@author humkyung
|
194 |
@date 2018.07.12
|
195 |
'''
|
196 |
def reset(self): |
197 |
if self._hmbs is not None: |
198 |
del self._hmbs |
199 |
|
200 |
self._hmbs = None |