level0.py 9.8 KB
Newer Older
Wei Shoulin's avatar
Wei Shoulin committed
1
import os
Wei Shoulin's avatar
t    
Wei Shoulin committed
2
from typing import Optional, Tuple, Literal
Wei Shoulin's avatar
Wei Shoulin committed
3
from .common import request, Result, utils, constants
Wei Shoulin's avatar
Wei Shoulin committed
4
5
6
7
8

DateTimeTuple = Tuple[str, str]

def find(project_id: Optional[str] = None,
        obs_id: Optional[str] = None,
9
        intrument: Literal['MSC', 'IFS', 'MCI', 'HSTDM', 'CPIC'] = 'MSC', 
Wei Shoulin's avatar
Wei Shoulin committed
10
11
        detector_no: Optional[str] = None,
        file_type: Optional[str] = None,
12
        obs_type: Optional[str] = None,
Wei Shoulin's avatar
Wei Shoulin committed
13
14
15
16
17
18
19
20
21
22
        filter: Optional[str] = None,
        obs_time: Optional[DateTimeTuple] = None,
        create_time: Optional[DateTimeTuple] = None,
        qc0_status: Optional[int] = None,
        prc_status: Optional[int] = None,
        file_name: Optional[str] = None,
        ra_obj: Optional[int] = None,
        dec_obj: Optional[int] = None,
        radius: Optional[float] = None,
        object_name: Optional[str] = None,
Wei Shoulin's avatar
Wei Shoulin committed
23
        dataset: str = constants.DEFAULT_DATASET,
Wei Shoulin's avatar
Wei Shoulin committed
24
25
26
        page: int = 1,
        limit: int = 0) -> Result:
    """
Wei Shoulin's avatar
Wei Shoulin committed
27
    根据给定的参数搜索0级数据文件记录
Wei Shoulin's avatar
Wei Shoulin committed
28
29
30
31
    
    Args:
        project_id (Optional[str], optional): 项目ID. Defaults to None.
        obs_id (Optional[str], optional): 观测ID. Defaults to None.
32
        intrument (Optional[str], optional): 设备,如'MSC', 'IFS'. Defaults to 'MSC'.
Wei Shoulin's avatar
Wei Shoulin committed
33
34
        detector_no (Optional[str], optional): 探测器编号. Defaults to None.
        file_type (Optional[str], optional): 文件类型,如'SCI'. Defaults to None.
35
        obs_type (Optional[str], optional): 观测类型,如'01'. Defaults to None.
Wei Shoulin's avatar
Wei Shoulin committed
36
37
38
39
40
41
42
43
44
45
        filter (Optional[str], optional): 滤光片. Defaults to None.
        obs_time (Optional[DateTimeTuple], optional): 观测时间范围. Defaults to None.
        create_time (Optional[DateTimeTuple], optional): 创建时间范围. Defaults to None.
        qc0_status (Optional[int], optional): QC0状态. Defaults to None.
        prc_status (Optional[int], optional): 处理状态. Defaults to None.
        file_name (Optional[str], optional): 文件名. Defaults to None.
        ra_obj (Optional[int], optional): 目标赤经. Defaults to None.
        dec_obj (Optional[int], optional): 目标赤纬. Defaults to None.
        radius (Optional[float], optional): 搜索半径. Defaults to None.
        object_name (Optional[str], optional): 目标名称. Defaults to None.
Wei Shoulin's avatar
Wei Shoulin committed
46
        dataset (Optional[str], optional): 数据集名称. Defaults to constants.DEFAULT_DATASET.
Wei Shoulin's avatar
Wei Shoulin committed
47
48
49
50
51
52
53
54
55
56
57
        page (int, optional): 页码. Defaults to 1.
        limit (int, optional): 每页数量. Defaults to 0,不限制.
    
    Returns:
        Result: 搜索结果对象.
    
    """

    params = {
        'project_id': project_id,
        'obs_id': obs_id,
58
        'intrument': intrument,
Wei Shoulin's avatar
Wei Shoulin committed
59
60
        'detector_no': detector_no,
        'file_type': file_type,
61
        'obs_type': obs_type,
Wei Shoulin's avatar
Wei Shoulin committed
62
63
64
65
66
67
68
69
70
71
72
73
        'filter': filter,
        'qc0_status': qc0_status,
        'prc_status': prc_status,
        'file_name': file_name,
        'ra_obj': ra_obj,
        'dec_obj': dec_obj,
        'radius': radius,
        'object_name': object_name,
        'obs_time_start': None,
        'obs_time_end': None,
        'create_time_start': None,
        'create_time_end': None,
Wei Shoulin's avatar
Wei Shoulin committed
74
        'dataset': dataset,
Wei Shoulin's avatar
Wei Shoulin committed
75
76
77
78
79
80
        'page': page,
        'limit': limit,
    }
    
    if obs_time is not None:
        params['obs_time_start'], params['obs_time_end'] = obs_time
Wei Shoulin's avatar
Wei Shoulin committed
81
82
83
84
        if params['obs_time_start'] and utils.is_valid_datetime_format(params['obs_time_start']):
            pass
        if params['obs_time_end'] and utils.is_valid_datetime_format(params['obs_time_end']):
            pass 
Wei Shoulin's avatar
Wei Shoulin committed
85
86
    if create_time is not None:
        params['create_time_start'], params['create_time_end'] = create_time
Wei Shoulin's avatar
Wei Shoulin committed
87
        utils.is_valid_datetime_format(params['create_time_start']) or utils.is_valid_datetime_format(params['create_time_end'])
Wei Shoulin's avatar
Wei Shoulin committed
88
89
90
    return request.post("/api/level0", params)

def get_by_id(_id: str) -> Result:
Wei Shoulin's avatar
docs    
Wei Shoulin committed
91
92
93
94
95
96
97
98
99
100
    """
    根据内部ID获取0级数据
    
    Args:
        _id (str): 0级数据的内部ID
    
    Returns:
        Result: 查询结果
    
    """
Wei Shoulin's avatar
Wei Shoulin committed
101
102
103
104
    return request.get(f"/api/level0/_id/{_id}")

def find_by_level0_id(level0_id: str) -> Result:
    """
Wei Shoulin's avatar
Wei Shoulin committed
105
    通过 level0 的 ID 查询0级数据
Wei Shoulin's avatar
Wei Shoulin committed
106
107
    
    Args:
Wei Shoulin's avatar
Wei Shoulin committed
108
        level0_id (str): 0级数据的ID
Wei Shoulin's avatar
Wei Shoulin committed
109
110
    
    Returns:
Wei Shoulin's avatar
Wei Shoulin committed
111
        Result: 查询结果
Wei Shoulin's avatar
Wei Shoulin committed
112
113
114
115
    
    """
    return request.get(f"/api/level0/{level0_id}")

Wei Shoulin's avatar
Wei Shoulin committed
116
def update_qc0_status(level0_id: str, file_type: str, qc0_status: int, dataset: str = constants.DEFAULT_DATASET) -> Result:
Wei Shoulin's avatar
Wei Shoulin committed
117
118
119
120
121
122
123
    """
    更新0级数据的QC0状态
    
    Args:
        level0_id (str): 0级数据的ID
        file_type (str): 文件类型
        qc0_status (int): QC0状态
Wei Shoulin's avatar
Wei Shoulin committed
124
        dataset (str): 数据集名称
Wei Shoulin's avatar
Wei Shoulin committed
125
126
127
128
    
    Returns:
        Result: 更新结果
    """
Wei Shoulin's avatar
Wei Shoulin committed
129
    return request.put(f"/api/level0/qc0_status/{level0_id}", {'file_type': file_type, 'qc0_status': qc0_status, 'dataset': dataset})
Wei Shoulin's avatar
Wei Shoulin committed
130

131
def update_prc_status(level0_id: str, file_type: str, dag_run_id: str, prc_status: int, dataset: str = constants.DEFAULT_DATASET) -> Result:
Wei Shoulin's avatar
Wei Shoulin committed
132
    """
Wei Shoulin's avatar
Wei Shoulin committed
133
    更新0级数据的处理状态
Wei Shoulin's avatar
Wei Shoulin committed
134
135
    
    Args:
Wei Shoulin's avatar
Wei Shoulin committed
136
137
        level0_id (str): 0级数据的ID
        file_type (str): 文件类型
138
        dag_run_id (str): 运行ID
Wei Shoulin's avatar
Wei Shoulin committed
139
140
        prc_status (int): 处理状态
        dataset (str): 数据集名称
Wei Shoulin's avatar
Wei Shoulin committed
141
142
    
    Returns:
Wei Shoulin's avatar
Wei Shoulin committed
143
        Result: 操作结果
Wei Shoulin's avatar
Wei Shoulin committed
144
    """
145
    return request.put(f"/api/level0/prc_status/{level0_id}/{dag_run_id}", {'file_type': file_type, 'prc_status': prc_status, 'dataset': dataset})
Wei Shoulin's avatar
Wei Shoulin committed
146

Wei Shoulin's avatar
Wei Shoulin committed
147
148
149
def write(local_file: str, 
        dataset: str = constants.DEFAULT_DATASET,
        **kwargs) -> Result:
Wei Shoulin's avatar
Wei Shoulin committed
150
    """
Wei Shoulin's avatar
Wei Shoulin committed
151
    将本地文件写入DFS中
Wei Shoulin's avatar
Wei Shoulin committed
152
153
    
    Args:
Wei Shoulin's avatar
Wei Shoulin committed
154
155
156
        local_file (str]): 文件路径
        dataset (Optional[str], optional): 数据集名称. Defaults to None.
        **kwargs: 额外的关键字参数,这些参数将传递给DFS
Wei Shoulin's avatar
Wei Shoulin committed
157
158
    
    Returns:
Wei Shoulin's avatar
Wei Shoulin committed
159
        Result: 操作的结果对象,包含操作是否成功以及相关的错误信息,成功返回数据对象
Wei Shoulin's avatar
Wei Shoulin committed
160
161
    
    """
Wei Shoulin's avatar
Wei Shoulin committed
162
163
164
165
    params = {
        'dataset': dataset,
    }
    params.update(kwargs)
Wei Shoulin's avatar
Wei Shoulin committed
166
167
    if not os.path.exists(local_file):
        raise FileNotFoundError(local_file)        
Wei Shoulin's avatar
Wei Shoulin committed
168
    return request.post_file("/api/level0/file", local_file, params)
Wei Shoulin's avatar
Wei Shoulin committed
169

Wei Shoulin's avatar
Wei Shoulin committed
170
171
172
def write_cat(local_file: str,
            dataset: str = constants.DEFAULT_DATASET,
            **kwargs) -> Result:
Wei Shoulin's avatar
Wei Shoulin committed
173
    """
Wei Shoulin's avatar
Wei Shoulin committed
174
    主巡天仿真数据的星表本地文件写入DFS中
Wei Shoulin's avatar
Wei Shoulin committed
175
176
    
    Args:
Wei Shoulin's avatar
Wei Shoulin committed
177
178
179
        local_file (str]): 文件路径
        dataset (Optional[str], optional): 数据集名称. Defaults to None.
        **kwargs: 额外的关键字参数,这些参数将传递给DFS
Wei Shoulin's avatar
Wei Shoulin committed
180
181
    
    Returns:
Wei Shoulin's avatar
Wei Shoulin committed
182
        Result: 操作的结果对象,包含操作是否成功以及相关的错误信息,成功返回数据对象
Wei Shoulin's avatar
Wei Shoulin committed
183
184
    
    """
Wei Shoulin's avatar
Wei Shoulin committed
185
186
187
188
    params = {
        'dataset': dataset,
    }
    params.update(kwargs)
Wei Shoulin's avatar
Wei Shoulin committed
189
190
    if not os.path.exists(local_file):
        raise FileNotFoundError(local_file)        
Wei Shoulin's avatar
Wei Shoulin committed
191
    return request.post_file("/api/level0/cat/file", local_file, params)
Wei Shoulin's avatar
Wei Shoulin committed
192

193
def generate_prc_msg(intrument: Literal['MSC', 'IFS', 'MCI', 'HSTDM', 'CPIC'], 
Wei Shoulin's avatar
Wei Shoulin committed
194
                    obs_id: str, 
Wei Shoulin's avatar
Wei Shoulin committed
195
                    detector_no: str,
196
                    level0_id: str,
Wei Shoulin's avatar
Wei Shoulin committed
197
                    dataset: str = constants.DEFAULT_DATASET,
Wei Shoulin's avatar
Wei Shoulin committed
198
                    batch_id: str = constants.DEFAULT_BATCH_ID) -> Result:
Wei Shoulin's avatar
Wei Shoulin committed
199
    """
Wei Shoulin's avatar
Wei Shoulin committed
200
    生成流水线的处理消息
Wei Shoulin's avatar
Wei Shoulin committed
201
202
    
    Args:
203
        intrument (str): 模块ID
Wei Shoulin's avatar
Wei Shoulin committed
204
205
        obs_id (str): 观测ID
        detector_no (str): 探测器编号
206
        level0_id (str): 0级数据ID
Wei Shoulin's avatar
Wei Shoulin committed
207
208
        dataset (Optional[str], optional): 数据集名称..
        batch_id (Optional[str], optional): 批次ID. Defaults to 'auto'.
Wei Shoulin's avatar
Wei Shoulin committed
209
210
    
    Returns:
Wei Shoulin's avatar
Wei Shoulin committed
211
        Result: 处理消息生成的结果,是否成功以及相关的错误信息
Wei Shoulin's avatar
Wei Shoulin committed
212
213
    
    """
Wei Shoulin's avatar
Wei Shoulin committed
214
215
216
217
218
    params = {
        'dataset': dataset,
        'batch_id': batch_id,
        'obs_id': obs_id,
        'detector_no': detector_no,
219
        "level0_id": level0_id,
Wei Shoulin's avatar
Wei Shoulin committed
220
221
    }
    
222
    return request.put(f"/api/level0/prc/{intrument}", params)
Wei Shoulin's avatar
Wei Shoulin committed
223
224
225

def process_list(level0_id: str) -> Result:
    """
Wei Shoulin's avatar
Wei Shoulin committed
226
    通过 level0 的 ID 查询0级数据处理过程
Wei Shoulin's avatar
Wei Shoulin committed
227
228
    
    Args:
Wei Shoulin's avatar
Wei Shoulin committed
229
        level0_id (str): 0级数据的ID
Wei Shoulin's avatar
Wei Shoulin committed
230
231
    
    Returns:
Wei Shoulin's avatar
Wei Shoulin committed
232
        Result: 成功后,Result.data为数据列表,失败message为失败原因
Wei Shoulin's avatar
Wei Shoulin committed
233
234
235
236
237
    
    """
    return request.get(f"/api/level0/prc/{level0_id}")

def add_process(level0_id: str, 
238
239
                dag_id: str, 
                dag_run_id: str, 
Wei Shoulin's avatar
Wei Shoulin committed
240
241
242
243
                batch_id: Optional[str] = None,
                dataset: str = constants.DEFAULT_DATASET,
                prc_status: int = -1024,                
                prc_time: str = utils.get_current_time(),                
Wei Shoulin's avatar
Wei Shoulin committed
244
245
246
                prc_module: str = "",
                message: str = "") -> Result:
    """
Wei Shoulin's avatar
Wei Shoulin committed
247
    添加0级数据处理过程
Wei Shoulin's avatar
Wei Shoulin committed
248
249
    
    Args:
Wei Shoulin's avatar
Wei Shoulin committed
250
        level0_id (str): 0级数据的ID
251
252
        dag_id (str): 管线ID
        dag_run_id (str): 运行ID
Wei Shoulin's avatar
Wei Shoulin committed
253
254
255
256
257
258
        dataset (str): 数据集
        batch_id (str): 批次ID
        prc_time (str): 处理时间,格式为"YYYY-MM-DD HH:MM:SS"
        prc_status (int): 处理状态
        prc_module (str): 处理模块
        message (str): 处理消息
Wei Shoulin's avatar
Wei Shoulin committed
259
260
    
    Returns:
Wei Shoulin's avatar
Wei Shoulin committed
261
        Result: 成功后,Result.data为写入记录,失败message为失败原因
Wei Shoulin's avatar
Wei Shoulin committed
262
263
264
265
    
    """
    params = {
        'level0_id': level0_id,
266
267
        'dag_id': dag_id,
        'dag_run_id': dag_run_id,
Wei Shoulin's avatar
Wei Shoulin committed
268
269
        'dataset': dataset,
        'batch_id': batch_id,
Wei Shoulin's avatar
Wei Shoulin committed
270
271
272
273
274
        'prc_time': prc_time,
        'prc_status': prc_status,
        'prc_module': prc_module,
        'message': message,
    }
Wei Shoulin's avatar
Wei Shoulin committed
275
    utils.is_valid_datetime_format(prc_time)
Wei Shoulin's avatar
Wei Shoulin committed
276
277
278
279
    return request.post("/api/level0/prc", params)

def new(data: dict) -> Result:
    """
Wei Shoulin's avatar
Wei Shoulin committed
280
    新建0级数据,用于仿真数据测试
Wei Shoulin's avatar
Wei Shoulin committed
281
282
    
    Args:
Wei Shoulin's avatar
Wei Shoulin committed
283
        data (dict): 0级数据的字典表示
Wei Shoulin's avatar
Wei Shoulin committed
284
285
    
    Returns:
Wei Shoulin's avatar
Wei Shoulin committed
286
        Result: 成功后,Result.data为写入记录,失败message为失败原因
Wei Shoulin's avatar
Wei Shoulin committed
287
288
289
    
    """
    return request.post("/api/level0/new", data)