parquet_flask/v1/sub_collection_statistics_endpoint.py (53 lines of code) (raw):

# Licensed to the Apache Software Foundation (ASF) under one or more # contributor license agreements. See the NOTICE file distributed with # this work for additional information regarding copyright ownership. # The ASF licenses this file to You under the Apache License, Version 2.0 # (the "License"); you may not use this file except in compliance with # the License. You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. import logging from flask_restx import Resource, Namespace, fields from flask import request from parquet_flask.io_logic.query_v2 import QueryProps from parquet_flask.io_logic.sub_collection_statistics import SubCollectionStatistics from parquet_flask.utils.general_utils import GeneralUtils from parquet_flask.utils.time_utils import TimeUtils api = Namespace('sub_collection_statistics', description="Querying data") LOGGER = logging.getLogger(__name__) query_model = api.model('sub_collection_statistics', { 'minDepth': fields.Float(required=True, example=-65.34), 'maxDepth': fields.Float(required=True, example=-65.34), 'startTime': fields.String(required=True, example='2020-01-01T00:00:00Z'), 'endTime': fields.String(required=True, example='2020-01-31T00:00:00Z'), 'bbox': fields.String(required=True, example='-45, 175, -30, 180', description='west, south, east, north || min_lon, min_lat, max_lon, max_lat'), 'platform': fields.String(required=True, example='30,3B'), 'provider': fields.Integer(required=True, example=0), 'project': fields.Integer(required=True, example=0), }) @api.route('', methods=["get", "post"], strict_slashes=False) @api.route('/', methods=["get", "post"], strict_slashes=False) class SubCollectionStatisticsEndpoint(Resource): def __init__(self, api=None, *args, **kwargs): super().__init__(api, args, kwargs) @api.expect() def get(self): try: query_props = QueryProps() sub_collection_stats_api = SubCollectionStatistics(query_props) if 'startTime' in request.args: query_props.min_datetime = TimeUtils.get_datetime_obj(request.args.get('startTime')).timestamp() if 'endTime' in request.args: query_props.max_datetime = TimeUtils.get_datetime_obj(request.args.get('endTime')).timestamp() if 'minDepth' in request.args: query_props.min_depth = float(request.args.get('minDepth')) if 'maxDepth' in request.args: query_props.max_depth = float(request.args.get('maxDepth')) if 'bbox' in request.args: bounding_box = GeneralUtils.gen_float_list_from_comma_sep_str(request.args.get('bbox'), 4) query_props.min_lat_lon = [bounding_box[1], bounding_box[0]] query_props.max_lat_lon = [bounding_box[3], bounding_box[2]] if 'platform' in request.args: query_props.platform_code = [k.strip() for k in request.args.get('platform').strip().split(',')] query_props.platform_code.sort() if 'provider' in request.args: query_props.provider = request.args.get('provider') if 'project' in request.args: query_props.project = request.args.get('project') sub_collection_stats = sub_collection_stats_api.start() except Exception as e: LOGGER.exception(f'error while retrieving stats') return {'message': 'error while retrieving stats', 'details': str(e)}, 500 return sub_collection_stats, 200