프로젝트

일반

사용자정보

통계
| 브랜치(Branch): | 개정판:

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
클립보드 이미지 추가 (최대 크기: 500 MB)