Skip to content
catalog.py 1.89 KiB
Newer Older
Wei Shoulin's avatar
Wei Shoulin committed
import grpc
Wei Shoulin's avatar
Wei Shoulin committed
import time
import logging
Wei Shoulin's avatar
Wei Shoulin committed
from csst_dfs_commons.models import Result
Wei Shoulin's avatar
Wei Shoulin committed
from csst_dfs_commons.models.common import from_proto_model_list, Gaia3Record

Shoulin Wei's avatar
Shoulin Wei committed
from csst_dfs_proto.common.ephem import ephem_pb2, ephem_pb2_grpc
Wei Shoulin's avatar
Wei Shoulin committed
from .service import ServiceProxy
from .constants import *
from .utils import get_auth_headers
Shoulin Wei's avatar
Shoulin Wei committed

Wei Shoulin's avatar
Wei Shoulin committed
log = logging.getLogger('csst')
Shoulin Wei's avatar
Shoulin Wei committed
class CatalogApi(object):
    def __init__(self):
Wei Shoulin's avatar
Wei Shoulin committed
        self.stub = ephem_pb2_grpc.EphemSearchSrvStub(ServiceProxy().channel())
Shoulin Wei's avatar
Shoulin Wei committed
    
    def gaia3_query(self, ra: float, dec: float, radius: float, min_mag: float,  max_mag: float,  obstime: int, limit: int):
        ''' retrieval GAIA DR 3
            args:
                ra:  in deg
                dec:  in deg
                radius:  in deg
                min_mag: minimal magnitude
                max_mag: maximal magnitude
                obstime: seconds  
                limit: limits returns the number of records
Wei Shoulin's avatar
Wei Shoulin committed
            return: csst_dfs_common.models.Result
Shoulin Wei's avatar
Shoulin Wei committed
        ''' 
        try:
Wei Shoulin's avatar
Wei Shoulin committed
            resps, _ = self.stub.Gaia3Search.with_call(ephem_pb2.EphemSearchRequest(
Wei Shoulin's avatar
gz  
Wei Shoulin committed
                ra = ra,
                dec = dec,
                radius = radius,
                minMag = min_mag,
                maxMag = max_mag,
                obstime = obstime,
                limit = limit
            ),metadata = get_auth_headers())
Wei Shoulin's avatar
Wei Shoulin committed
            records = []
            totalCount = 0
            for resp in resps:
                if resp.success:
                    data = from_proto_model_list(Gaia3Record, resp.records)
                    records.extend(data)
                    totalCount = resp.totalCount
                else:
                    return Result.error(message = str(resp.error.detail))
            return Result.ok_data(data = records).append("totalCount", totalCount)
Wei Shoulin's avatar
Wei Shoulin committed
        except grpc.RpcError as e:
Wei Shoulin's avatar
Wei Shoulin committed
            return Result.error(message="%s:%s" % (e.code().value, e.details()))
Shoulin Wei's avatar
Shoulin Wei committed