Commit 3947cac2 authored by Wei Shoulin's avatar Wei Shoulin
Browse files

feat: add all_catalog_names API and improve datetime validation

- Introduce new `all_catalog_names()` function in catalog.py to fetch available catalog names
- Enhance `is_valid_datetime_format()` to accept both basic and ISO datetime formats
- Add corresponding unit test for `all_catalog_names()`
- Comment out slow integration tests in level0/level1 test files
parent e8f21dee
Pipeline #10264 failed with stages
in 0 seconds
...@@ -56,4 +56,23 @@ def search(ra: float, ...@@ -56,4 +56,23 @@ def search(ra: float,
except Exception as e: except Exception as e:
return Result.error(str(e)) return Result.error(str(e))
def all_catalog_names() -> Result:
"""
获取星表名称列表。
Returns:
Result: 星表列表。
Raises:
Exception: 如果请求失败,将抛出异常。
"""
try:
datas = request.get('/api/catalog/names')
if datas and isinstance(datas, Result):
return datas
records = pickle.loads(datas._content)
return Result.ok_data(data = records)
except Exception as e:
return Result.error(str(e))
from datetime import datetime from datetime import datetime
def is_valid_datetime_format(date_str: str, format='%Y-%m-%d %H:%M:%S') -> bool: def is_valid_datetime_format(date_str: str) -> bool:
try: try:
datetime.strptime(date_str, format) # 尝试不带时区的基础格式
datetime.strptime(date_str, '%Y-%m-%d %H:%M:%S')
return True return True
except ValueError: except ValueError:
raise ValueError(f"Incorrect data format, should be {format}") try:
# 尝试ISO格式(带或不带时区)
datetime.fromisoformat(date_str.replace(' ', 'T'))
return True
except ValueError:
raise ValueError("Incorrect data format")
def get_current_time() -> str: def get_current_time() -> str:
return datetime.now().strftime('%Y-%m-%d %H:%M:%S') return datetime.now().strftime('%Y-%m-%d %H:%M:%S')
import unittest import unittest
from csst_dfs_client.catalog import search from csst_dfs_client import catalog
class CatalogTestCase(unittest.TestCase): class CatalogTestCase(unittest.TestCase):
...@@ -8,7 +8,7 @@ class CatalogTestCase(unittest.TestCase): ...@@ -8,7 +8,7 @@ class CatalogTestCase(unittest.TestCase):
pass pass
def test_search(self): def test_search(self):
result = search( result = catalog.search(
ra=90, ra=90,
dec=24.5, dec=24.5,
radius=0.21, radius=0.21,
...@@ -22,3 +22,9 @@ class CatalogTestCase(unittest.TestCase): ...@@ -22,3 +22,9 @@ class CatalogTestCase(unittest.TestCase):
print(result) print(result)
self.assertEqual(result.code, 200, "error code: " + str(result.code) + ", message: " + result.message) self.assertEqual(result.code, 200, "error code: " + str(result.code) + ", message: " + result.message)
self.assertIsNotNone(result.data, "error message: " + result.message) self.assertIsNotNone(result.data, "error message: " + result.message)
def test_get_catalog_names(self):
result = catalog.all_catalog_names()
print(result)
self.assertEqual(result.code, 200, "error code: " + str(result.code) + ", message: " + result.message)
self.assertIsNotNone(result.data, "error message: " + result.message)
\ No newline at end of file
...@@ -7,64 +7,64 @@ class Level0TestCase(unittest.TestCase): ...@@ -7,64 +7,64 @@ class Level0TestCase(unittest.TestCase):
def setUp(self): def setUp(self):
pass pass
def test_find(self): # def test_find(self):
start_time = time.time() # start_time = time.time()
result = level0.find(instrument='MSC', dataset="msc-v093") # result = level0.find(instrument='MSC', dataset="msc-v093")
print(f"1操作执行时间: {time.time() - start_time} 秒") # print(f"1操作执行时间: {time.time() - start_time} 秒")
start_time = time.time() # start_time = time.time()
result = level0.find(instrument='MSC', dataset="msc-v093", # result = level0.find(instrument='MSC', dataset="msc-v093",
ra_obj = 170, # ra_obj = 170,
dec_obj = -24, # dec_obj = -24,
radius = 1) # radius = 1)
print(f"2操作执行时间: {time.time() - start_time} 秒, 数据量:{result['total_count']}") # print(f"2操作执行时间: {time.time() - start_time} 秒, 数据量:{result['total_count']}")
start_time = time.time() # start_time = time.time()
result = level0.find(instrument='MSC', file_name="CSST_MSC_MS_SCI_20240609181116_20240609181347_10109100157991_27_L0_V01.fits") # result = level0.find(instrument='MSC', file_name="CSST_MSC_MS_SCI_20240609181116_20240609181347_10109100157991_27_L0_V01.fits")
print(f"3操作执行时间: {time.time() - start_time} 秒, 数据量:{result['total_count']}") # print(f"3操作执行时间: {time.time() - start_time} 秒, 数据量:{result['total_count']}")
self.assertEqual(result.code, 200, "error code: " + result.message) # self.assertEqual(result.code, 200, "error code: " + result.message)
self.assertIsNotNone(result.data, "error message: " + result.message) # self.assertIsNotNone(result.data, "error message: " + result.message)
def test_find_by_level0_id(self): # def test_find_by_level0_id(self):
result = level0.find_by_level0_id(level0_id = "1060940003452925") # result = level0.find_by_level0_id(level0_id = "1060940003452925")
print(result) # print(result)
self.assertEqual(result.code, 200, "error code: " + str(result.code) + ", message: " + result.message) # self.assertEqual(result.code, 200, "error code: " + str(result.code) + ", message: " + result.message)
self.assertIsNotNone(result.data, "error message: " + result.message) # self.assertIsNotNone(result.data, "error message: " + result.message)
def test_update_qc_status(self): # def test_update_qc_status(self):
result = level0.update_qc_status(level0_id = "1010910015799127", qc_status=1) # result = level0.update_qc_status(level0_id = "1010910015799127", qc_status=1, dataset="msc-v093")
print(result) # print(result)
self.assertEqual(result.code, 200, "error code: " + str(result.code) + ", message: " + result.message) # self.assertEqual(result.code, 200, "error code: " + str(result.code) + ", message: " + result.message)
def test_update_qc_status_by_ids(self): # def test_update_qc_status_by_ids(self):
result = level0.update_qc_status_by_ids(ids = ["676ac74a530b47ca41568858"], qc_status=4) # result = level0.update_qc_status_by_ids(ids = ["676ac74a530b47ca41568858"], qc_status=4)
print(result) # print(result)
self.assertEqual(result.code, 200, "error code: " + str(result.code) + ", message: " + result.message) # self.assertEqual(result.code, 200, "error code: " + str(result.code) + ", message: " + result.message)
def test_update_prc_status(self): # def test_update_prc_status(self):
result = level0.update_prc_status(level0_id = "1010910015799127", dag_run="202411071002481234", prc_status=3) # result = level0.update_prc_status(level0_id = "1010910015799127", dag_run="202411071002481234", prc_status=3)
print(result) # print(result)
self.assertEqual(result.code, 200, "error code: " + str(result.code) + ", message: " + result.message) # self.assertEqual(result.code, 200, "error code: " + str(result.code) + ", message: " + result.message)
def test_update_prc_status_by_ids(self): def test_update_prc_status_by_ids(self):
result = level0.update_prc_status_by_ids(ids = ["676ac74a530b47ca41568858"], prc_status=4) result = level0.update_prc_status_by_ids(ids = ["676ac74a530b47ca41568858"], prc_status=4)
print(result) print(result)
self.assertEqual(result.code, 200, "error code: " + str(result.code) + ", message: " + result.message) self.assertEqual(result.code, 200, "error code: " + str(result.code) + ", message: " + result.message)
def test_write(self): # def test_write(self):
file_path = "/Users/wsl/temp/csst/import/CSST_MSC_MS_SCI_20240609181116_20240609181347_10109100157991_27_L0_V01.fits" # file_path = "/Users/wsl/temp/csst/import/CSST_MSC_MS_SCI_20240609181116_20240609181347_10109100157991_27_L0_V01.fits"
result = level0.write(local_file = file_path, dataset= 'msc-v093') # result = level0.write(local_file = file_path, dataset= 'msc-v093')
print(result) # print(result)
self.assertEqual(result.code, 200, "error code: " + str(result.code) + ", message: " + result.message) # self.assertEqual(result.code, 200, "error code: " + str(result.code) + ", message: " + result.message)
def test_find_process(self): # def test_find_process(self):
result = level0.find_process(level0_id="1060940003452925") # result = level0.find_process(level0_id="1060940003452925")
print(result) # print(result)
self.assertEqual(result.code, 200, "error code: " + str(result.code) + ", message: " + result.message) # self.assertEqual(result.code, 200, "error code: " + str(result.code) + ", message: " + result.message)
def test_add_process(self): # def test_add_process(self):
result = level0.add_process(level0_id="1060940003452925", # result = level0.add_process(level0_id="1060940003452925",
dag="csst-msc-l1-mbi", # dag="csst-msc-l1-mbi",
dag_run="202411071002481234", # dag_run="202411071002481234",
dataset="v93", # dataset="v93",
batch_id="v930batch", # batch_id="v930batch",
prc_time="2024-11-07 10:24:12", prc_status=1, prc_module="MSC", message="") # prc_time="2024-11-07 10:24:12", prc_status=1, prc_module="MSC", message="")
print(result) # print(result)
self.assertEqual(result.code, 200, "error code: " + str(result.code) + ", message: " + result.message) # self.assertEqual(result.code, 200, "error code: " + str(result.code) + ", message: " + result.message)
\ No newline at end of file \ No newline at end of file
...@@ -7,31 +7,31 @@ class Level1TestCase(unittest.TestCase): ...@@ -7,31 +7,31 @@ class Level1TestCase(unittest.TestCase):
def setUp(self): def setUp(self):
pass pass
def test_find(self): # def test_find(self):
result = level1.find(instrument='MSC', obs_time=("2024-01-01 12:12:12", "2024-06-30 12:12:12"), dataset='msc-v093') # result = level1.find(instrument='MSC', obs_time=("2024-01-01 12:12:12", "2024-06-30 12:12:12"), dataset='msc-v093')
print(result) # print(result)
self.assertEqual(result.code, 200, "error code: " + str(result.code)) # self.assertEqual(result.code, 200, "error code: " + str(result.code))
self.assertIsNotNone(result.data, "error message: " + result.message) # self.assertIsNotNone(result.data, "error message: " + result.message)
def test_find_by_brick_id(self): # def test_find_by_brick_id(self):
result = level1.find_by_brick_id(brick_id = 401847) # result = level1.find_by_brick_id(brick_id = 401847)
print(result) # print(result)
self.assertEqual(result.code, 200, "error code: " + str(result.code) + ", message: " + result.message) # self.assertEqual(result.code, 200, "error code: " + str(result.code) + ", message: " + result.message)
self.assertIsNotNone(result.data, "error message: " + result.message) # self.assertIsNotNone(result.data, "error message: " + result.message)
def test_find_by_level1_id(self): # def test_find_by_level1_id(self):
result = level1.find_by_level1_id(level1_id = "1060940003452925") # result = level1.find_by_level1_id(level1_id = "1060940003452925")
print(result) # print(result)
self.assertEqual(result.code, 200, "error code: " + str(result.code) + ", message: " + result.message) # self.assertEqual(result.code, 200, "error code: " + str(result.code) + ", message: " + result.message)
self.assertIsNotNone(result.data, "error message: " + result.message) # self.assertIsNotNone(result.data, "error message: " + result.message)
def test_update_qc_status(self): # def test_update_qc_status(self):
result = level1.update_qc_status(level1_id = "1060940003452925", data_model='csst-msc-l1-mbi', qc_status=1) # result = level1.update_qc_status(level1_id = "1060940003452925", data_model='csst-msc-l1-mbi', qc_status=1, batch_id='inttest')
print(result) # print(result)
self.assertEqual(result.code, 200, "error code: " + str(result.code) + ", message: " + result.message) # self.assertEqual(result.code, 200, "error code: " + str(result.code) + ", message: " + result.message)
def test_update_prc_status(self): # def test_update_prc_status(self):
result = level1.update_prc_status(level1_id = "1060940003452925", data_model='csst-msc-l1-mbi', prc_status=3) # result = level1.update_prc_status(level1_id = "1060940003452925", data_model='csst-msc-l1-mbi', prc_status=3, batch_id='inttest')
print(result) # print(result)
self.assertEqual(result.code, 200, "error code: " + str(result.code) + ", message: " + result.message) # self.assertEqual(result.code, 200, "error code: " + str(result.code) + ", message: " + result.message)
def test_write(self): def test_write(self):
file_path = "/Users/wsl/temp/csst/import/CSST_MSC_MS_SCI_20240609181116_20240609181347_10109100157991_27_L1_V01.fits" file_path = "/Users/wsl/temp/csst/import/CSST_MSC_MS_SCI_20240609181116_20240609181347_10109100157991_27_L1_V01.fits"
...@@ -51,21 +51,31 @@ class Level1TestCase(unittest.TestCase): ...@@ -51,21 +51,31 @@ class Level1TestCase(unittest.TestCase):
data_model='csst-msc-l1-mbi', data_model='csst-msc-l1-mbi',
build=1, build=1,
qc_status=10, qc_status=10,
prc_status=12) dataset='msc-v093',
batch_id="inttest")
print(result) print(result)
self.assertEqual(result.code, 200, "error code: " + str(result.code) + ", message: " + result.message) self.assertEqual(result.code, 200, "error code: " + str(result.code) + ", message: " + result.message)
def test_find_process(self): # def test_find_process(self):
result = level1.find_process(level1_id="1060940003452925") # result = level1.find_process(level1_id="1060940003452925")
print(result) # print(result)
self.assertEqual(result.code, 200, "error code: " + str(result.code) + ", message: " + result.message) # self.assertEqual(result.code, 200, "error code: " + str(result.code) + ", message: " + result.message)
def test_add_process(self): # def test_add_process(self):
result = level1.add_process(level1_id="1060940003452925", dag="csst-msc-l1-mbi", dag_run="202411071002481234", prc_time="2024-11-07 10:24:12", prc_status=1, prc_module="MSC", message="") # result = level1.add_process(level1_id="1060940003452925", dag="csst-msc-l1-mbi", dag_run="202411071002481234", prc_time="2024-11-07 10:24:12", prc_status=1, prc_module="MSC", message="")
print(result) # print(result)
self.assertEqual(result.code, 200, "error code: " + str(result.code) + ", message: " + result.message) # self.assertEqual(result.code, 200, "error code: " + str(result.code) + ", message: " + result.message)
def test_sls_find_by_qc_status(self): # def test_sls_find_by_qc_status(self):
result = level1.sls_find_by_qc_status(qc_status=0, limit=1) # result = level1.sls_find_by_qc_status(qc_status=0, limit=1)
print(result) # print(result)
self.assertEqual(result.code, 200, "error code: " + str(result.code) + ", message: " + result.message) # self.assertEqual(result.code, 200, "error code: " + str(result.code) + ", message: " + result.message)
\ No newline at end of file # def test_update_qc_status_by_ids(self):
# result = level1.update_qc_status_by_ids(ids = ["676ac74a530b47ca41568858"], qc_status=4)
# print(result)
# self.assertEqual(result.code, 200, "error code: " + str(result.code) + ", message: " + result.message)
# def test_update_prc_status_by_ids(self):
# result = level1.update_prc_status_by_ids(ids = ["676ac74a530b47ca41568858"], prc_status=4)
# print(result)
# self.assertEqual(result.code, 200, "error code: " + str(result.code) + ", message: " + result.message)
\ No newline at end of file
import unittest
from csst_dfs_client.common.utils import is_valid_datetime_format
class TestIsValidDatetimeFormat(unittest.TestCase):
def test_valid_basic_format(self):
"""测试有效的基础格式日期时间"""
self.assertTrue(is_valid_datetime_format("2023-05-15 14:30:00"))
def test_valid_iso_format_without_timezone(self):
"""测试有效的ISO格式(不带时区)日期时间"""
self.assertTrue(is_valid_datetime_format("2023-05-15T14:30:00"))
def test_valid_iso_format_with_timezone(self):
"""测试有效的ISO格式(带时区)日期时间"""
self.assertTrue(is_valid_datetime_format("2023-05-15T14:30:00+08:00"))
def test_valid_iso_format_with_timezone2(self):
"""测试有效的ISO格式(带时区)日期时间"""
self.assertTrue(is_valid_datetime_format("2023-05-15T14:30:00.123"))
def test_invalid_date_format(self):
"""测试无效的日期格式"""
with self.assertRaises(ValueError):
is_valid_datetime_format("2023/05/15 14:30:00")
def test_invalid_time_format(self):
"""测试无效的时间格式"""
with self.assertRaises(ValueError):
is_valid_datetime_format("2023-05-15 14-30-00")
def test_empty_string(self):
"""测试空字符串"""
with self.assertRaises(ValueError):
is_valid_datetime_format("")
if __name__ == '__main__':
unittest.main()
\ No newline at end of file
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment