level0.py 7.9 KB
Newer Older
Wei Shoulin's avatar
leve0  
Wei Shoulin committed
1
2
3
import grpc

from csst_dfs_commons.models import Result
Wei Shoulin's avatar
Wei Shoulin committed
4
from csst_dfs_commons.models.common import from_proto_model_list
Wei Shoulin's avatar
Wei Shoulin committed
5
from csst_dfs_commons.models.facility import Level0Record
Wei Shoulin's avatar
Wei Shoulin committed
6

Wei Shoulin's avatar
Wei Shoulin committed
7
from csst_dfs_proto.facility.level0 import level0_pb2, level0_pb2_grpc
Wei Shoulin's avatar
leve0  
Wei Shoulin committed
8

Wei Shoulin's avatar
Wei Shoulin committed
9
from ..common.service import grpc_channel
Wei Shoulin's avatar
leve0  
Wei Shoulin committed
10
11
12
13
from ..common.utils import *

class Level0DataApi(object):
    def __init__(self):
Wei Shoulin's avatar
Wei Shoulin committed
14
15
        self.stub_class = level0_pb2_grpc.Level0SrvStub
        self.stub = None
Wei Shoulin's avatar
leve0  
Wei Shoulin committed
16

Wei Shoulin's avatar
Wei Shoulin committed
17
    @grpc_channel
Wei Shoulin's avatar
leve0  
Wei Shoulin committed
18
19
20
21
    def find(self, **kwargs):
        ''' retrieve level0 records from database

        parameter kwargs:
Wei Shoulin's avatar
Wei Shoulin committed
22
23
24
25
26
27
28
29
30
31
32
33
34
35
            obs_id: [str],
            module_id: [str]
            detector_no: [str],
            obs_type: [str],
            filter: [str],
            obs_time : (start, end),
            qc0_status : [int],
            prc_status : [int],
            file_name: [str],
            ra_obj: [float],
            dec_obj: [float],
            radius: [float],
            object_name: [str],
            version: [str],
Wei Shoulin's avatar
leve0  
Wei Shoulin committed
36
37
38
39
40
41
            limit: limits returns the number of records,default 0:no-limit

        return: csst_dfs_common.models.Result
        '''
        try:
            resp, _ =  self.stub.Find.with_call(level0_pb2.FindLevel0DataReq(
Wei Shoulin's avatar
Wei Shoulin committed
42
                obs_id = get_parameter(kwargs, "obs_id"),
Wei Shoulin's avatar
leve0  
Wei Shoulin committed
43
                detector_no = get_parameter(kwargs, "detector_no"),
Wei Shoulin's avatar
Wei Shoulin committed
44
                module_id = get_parameter(kwargs, "module_id"),
Wei Shoulin's avatar
leve0  
Wei Shoulin committed
45
                obs_type = get_parameter(kwargs, "obs_type"),
Wei Shoulin's avatar
c3    
Wei Shoulin committed
46
47
                exp_time_start = get_parameter(kwargs, "obs_time", [None, None])[0],
                exp_time_end = get_parameter(kwargs, "obs_time", [None, None])[1],
Wei Shoulin's avatar
status    
Wei Shoulin committed
48
49
                qc0_status = get_parameter(kwargs, "qc0_status", 1024),
                prc_status = get_parameter(kwargs, "prc_status", 1024),
Wei Shoulin's avatar
leve0  
Wei Shoulin committed
50
                file_name = get_parameter(kwargs, "file_name"),
Wei Shoulin's avatar
Wei Shoulin committed
51
52
53
54
55
                ra_obj  = get_parameter(kwargs, "ra_obj", None),
                dec_obj = get_parameter(kwargs, "dec_obj", None),
                radius = get_parameter(kwargs, "radius", 0),
                object_name = get_parameter(kwargs, "object_name", None),
                version = get_parameter(kwargs, "version", None),
Wei Shoulin's avatar
Wei Shoulin committed
56
                filter = get_parameter(kwargs, "filter", None),
Wei Shoulin's avatar
leve0  
Wei Shoulin committed
57
58
59
60
61
                limit = get_parameter(kwargs, "limit", 0),
                other_conditions = {"test":"cnlab.test"}
            ),metadata = get_auth_headers())

            if resp.success:
Wei Shoulin's avatar
Wei Shoulin committed
62
                return Result.ok_data(data=from_proto_model_list(Level0Record, resp.records)).append("totalCount", resp.totalCount)
Wei Shoulin's avatar
leve0  
Wei Shoulin committed
63
            else:
Wei Shoulin's avatar
c3    
Wei Shoulin committed
64
                return Result.error(message = str(resp.error.detail))
Wei Shoulin's avatar
leve0  
Wei Shoulin committed
65
66

        except grpc.RpcError as e:
Wei Shoulin's avatar
Wei Shoulin committed
67
            return Result.error(message="%s:%s" % (e.code().value, e.details()))
Wei Shoulin's avatar
leve0  
Wei Shoulin committed
68

Wei Shoulin's avatar
Wei Shoulin committed
69
    @grpc_channel
Wei Shoulin's avatar
hstdm    
Wei Shoulin committed
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
    def find_by_brick_ids(self, **kwargs):
        ''' retrieve level0 records by brick_ids like [1,2,3,4]

        :param kwargs: Parameter dictionary, key items support:
            brick_ids: [list]

        return: csst_dfs_common.models.Result
        '''
        try:
            resp, _ =  self.stub.FindByBrickIds.with_call(level0_pb2.FindByBrickIdsReq(
                brick_ids = get_parameter(kwargs, "brick_ids", [])
            ),metadata = get_auth_headers())

            if resp.success:
                return Result.ok_data(data=from_proto_model_list(Level0Record, resp.records))
            else:
                return Result.error(message = str(resp.error.detail))

        except grpc.RpcError as e:
            return Result.error(message="%s:%s" % (e.code().value, e.details()))

Wei Shoulin's avatar
Wei Shoulin committed
91
    @grpc_channel
Wei Shoulin's avatar
leve0  
Wei Shoulin committed
92
93
94
95
    def get(self, **kwargs):
        '''  fetch a record from database

        parameter kwargs:
Wei Shoulin's avatar
Wei Shoulin committed
96
            id : [int],
Wei Shoulin's avatar
Wei Shoulin committed
97
98
            level0_id: [str],
            obs_type: [str]
Wei Shoulin's avatar
leve0  
Wei Shoulin committed
99
100
101
102
103

        return csst_dfs_common.models.Result
        '''
        try:
            resp, _ =  self.stub.Get.with_call(level0_pb2.GetLevel0DataReq(
Wei Shoulin's avatar
Wei Shoulin committed
104
105
106
                id = get_parameter(kwargs, "id"),
                level0_id = get_parameter(kwargs, "level0_id"),
                obs_type = get_parameter(kwargs, "obs_type")
Wei Shoulin's avatar
leve0  
Wei Shoulin committed
107
108
            ),metadata = get_auth_headers())

Wei Shoulin's avatar
Wei Shoulin committed
109
            if resp.record is None or resp.record.id == 0:
Wei Shoulin's avatar
Wei Shoulin committed
110
                return Result.error(message=f"not found")  
Wei Shoulin's avatar
leve0  
Wei Shoulin committed
111

Wei Shoulin's avatar
Wei Shoulin committed
112
            return Result.ok_data(data = Level0Record().from_proto_model(resp.record))
Wei Shoulin's avatar
Wei Shoulin committed
113

Wei Shoulin's avatar
leve0  
Wei Shoulin committed
114
        except grpc.RpcError as e:
Wei Shoulin's avatar
Wei Shoulin committed
115
            return Result.error(message="%s:%s" % (e.code().value, e.details()))   
Wei Shoulin's avatar
leve0  
Wei Shoulin committed
116

Wei Shoulin's avatar
Wei Shoulin committed
117
    @grpc_channel
Wei Shoulin's avatar
leve0  
Wei Shoulin committed
118
119
120
121
    def update_proc_status(self, **kwargs):
        ''' update the status of reduction

        parameter kwargs:
Wei Shoulin's avatar
Wei Shoulin committed
122
123
            id : [int],
            level0_id: [str],
Wei Shoulin's avatar
Wei Shoulin committed
124
            obs_type: [str],
Wei Shoulin's avatar
leve0  
Wei Shoulin committed
125
126
127
128
129
130
131
            status : [int]

        return csst_dfs_common.models.Result
        '''
        status = get_parameter(kwargs, "status")
        try:
            resp,_ = self.stub.UpdateProcStatus.with_call(
Wei Shoulin's avatar
Wei Shoulin committed
132
                level0_pb2.UpdateProcStatusReq(
Wei Shoulin's avatar
Wei Shoulin committed
133
134
135
136
137
                    id = get_parameter(kwargs, "id"),
                    level0_id = get_parameter(kwargs, "level0_id"),
                    obs_type = get_parameter(kwargs, "obs_type"),
                    status=get_parameter(kwargs, "status")
                ),
Wei Shoulin's avatar
leve0  
Wei Shoulin committed
138
139
140
141
142
143
144
                metadata = get_auth_headers()
            )
            if resp.success:
                return Result.ok_data()
            else:
                return Result.error(message = str(resp.error.detail))
        except grpc.RpcError as e:
Wei Shoulin's avatar
Wei Shoulin committed
145
            return Result.error(message="%s:%s" % (e.code().value, e.details()))
Wei Shoulin's avatar
leve0  
Wei Shoulin committed
146

Wei Shoulin's avatar
Wei Shoulin committed
147
    @grpc_channel
Wei Shoulin's avatar
leve0  
Wei Shoulin committed
148
149
150
151
    def update_qc0_status(self, **kwargs):
        ''' update the status of QC0
        
        parameter kwargs:
Wei Shoulin's avatar
Wei Shoulin committed
152
153
            id : [int],
            level0_id: [str],
Wei Shoulin's avatar
Wei Shoulin committed
154
            obs_type: [str],
Wei Shoulin's avatar
leve0  
Wei Shoulin committed
155
156
            status : [int]
        '''        
Wei Shoulin's avatar
Wei Shoulin committed
157

Wei Shoulin's avatar
leve0  
Wei Shoulin committed
158
159
        try:
            resp,_ = self.stub.UpdateQc0Status.with_call(
Wei Shoulin's avatar
Wei Shoulin committed
160
                level0_pb2.UpdateQc0StatusReq( 
Wei Shoulin's avatar
Wei Shoulin committed
161
162
163
164
165
                    id = get_parameter(kwargs, "id"),
                    level0_id = get_parameter(kwargs, "level0_id"),
                    obs_type = get_parameter(kwargs, "obs_type"),
                    status=get_parameter(kwargs, "status")
                ),
Wei Shoulin's avatar
leve0  
Wei Shoulin committed
166
167
168
169
170
171
172
                metadata = get_auth_headers()
            )
            if resp.success:
                return Result.ok_data()
            else:
                return Result.error(message = str(resp.error.detail))
        except grpc.RpcError as e:
Wei Shoulin's avatar
Wei Shoulin committed
173
            return Result.error(message="%s:%s" % (e.code().value, e.details()))
Wei Shoulin's avatar
leve0  
Wei Shoulin committed
174

Wei Shoulin's avatar
Wei Shoulin committed
175
    @grpc_channel
Wei Shoulin's avatar
c3    
Wei Shoulin committed
176
177
    def write(self, **kwargs):
        ''' insert a level0 data record into database
Wei Shoulin's avatar
Wei Shoulin committed
178

Wei Shoulin's avatar
c3    
Wei Shoulin committed
179
        parameter kwargs:
Wei Shoulin's avatar
Wei Shoulin committed
180
            obs_id = [str]
Wei Shoulin's avatar
c3    
Wei Shoulin committed
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
            detector_no = [str]
            obs_type = [str]        
            obs_time = [str]
            exp_time = [int]
            detector_status_id = [int]
            filename = [str]
            file_path = [str]
        return: csst_dfs_common.models.Result
        '''          
        rec = level0_pb2.Level0Record(
            obs_id = get_parameter(kwargs, "obs_id"),
            detector_no = get_parameter(kwargs, "detector_no"),
            obs_type = get_parameter(kwargs, "obs_type"),
            obs_time = get_parameter(kwargs, "obs_time"),
            exp_time = get_parameter(kwargs, "exp_time"),
Wei Shoulin's avatar
Wei Shoulin committed
196
            qc0_status = get_parameter(kwargs, "qc0_status", 0),
Wei Shoulin's avatar
c3    
Wei Shoulin committed
197
198
199
200
201
202
            detector_status_id = get_parameter(kwargs, "detector_status_id"),
            filename = get_parameter(kwargs, "filename"),
            file_path = get_parameter(kwargs, "file_path")
        )
        req = level0_pb2.WriteLevel0DataReq(record = rec)
        try:
Wei Shoulin's avatar
Wei Shoulin committed
203
            resp,_ = self.stub.Write.with_call(req, metadata = get_auth_headers())
Wei Shoulin's avatar
c3    
Wei Shoulin committed
204
            if resp.success:
Wei Shoulin's avatar
Wei Shoulin committed
205
                return Result.ok_data(data = Level0Record().from_proto_model(resp.record))
Wei Shoulin's avatar
c3    
Wei Shoulin committed
206
207
208
209
            else:
                return Result.error(message = str(resp.error.detail))
    
        except grpc.RpcError as e:
Wei Shoulin's avatar
Wei Shoulin committed
210
            return Result.error(message="%s:%s" % (e.code().value, e.details()))
Wei Shoulin's avatar
leve0  
Wei Shoulin committed
211
212