프로젝트

일반

사용자정보

통계
| 개정판:

hytos / DTI_PID / DTI_PID / HMBTable.py @ 107d6245

이력 | 보기 | 이력해설 | 다운로드 (4.93 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.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
클립보드 이미지 추가 (최대 크기: 500 MB)