parquet_flask/io_logic/query_v2.py (186 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 datetime import datetime from typing import Union from pyspark.sql.dataframe import DataFrame from parquet_flask.io_logic.cdms_constants import CDMSConstants from parquet_flask.utils.config import Config from parquet_flask.utils.general_utils import GeneralUtils from parquet_flask.utils.time_utils import TimeUtils LOGGER = logging.getLogger(__name__) QUERY_PROPS_SCHEMA = { 'type': 'object', 'properties': { 'start_from': {'type': 'integer'}, 'size': {'type': 'integer'}, 'columns': { 'type': 'array', 'items': {'type': 'string'}, 'minItems': 0, }, 'platform_code': {'type': 'array', 'items': {'type': 'string'}, 'minItems': 1}, 'provider': {'type': 'string'}, 'marker_platform_code': {'type': 'string'}, 'project': {'type': 'string'}, 'min_depth': {'type': 'number'}, 'max_depth': {'type': 'number'}, 'min_time': {'type': 'string'}, 'max_time': {'type': 'string'}, 'min_lat_lon': {'type': 'array', 'items': {'type': 'number'}, 'minItems': 2, 'maxItems': 2}, 'max_lat_lon': {'type': 'array', 'items': {'type': 'number'}, 'minItems': 2, 'maxItems': 2}, }, 'required': ['start_from', 'size', 'min_depth', 'max_depth', 'min_time', 'max_time', 'min_lat_lon', 'max_lat_lon'], } class QueryProps: def __init__(self): self.__variable: list = [] self.__marker_platform_code = None self.__quality_flag = False self.__platform_code = None self.__project = None self.__provider = None self.__device = None self.__min_depth = None self.__max_depth = None self.__min_datetime = None self.__max_datetime = None self.__min_lat_lon = None self.__max_lat_lon = None self.__start_at = 0 self.__size = 0 self.__columns = [] @property def marker_platform_code(self): return self.__marker_platform_code @marker_platform_code.setter def marker_platform_code(self, val): """ :param val: :return: None """ self.__marker_platform_code = val return @property def variable(self) -> list: return self.__variable @variable.setter def variable(self, val: list): """ :param val: list :return: None """ self.__variable = val return @property def quality_flag(self): return self.__quality_flag @quality_flag.setter def quality_flag(self, val): """ :param val: :return: None """ self.__quality_flag = val return @property def platform_code(self) -> list: return self.__platform_code @platform_code.setter def platform_code(self, val): """ :param val: :return: None """ self.__platform_code = val return def from_json(self, input_json): self.start_at = input_json['start_from'] self.size = input_json['size'] self.min_depth = input_json['min_depth'] self.max_depth = input_json['max_depth'] self.min_datetime = input_json['min_time'] self.max_datetime = input_json['max_time'] self.min_lat_lon = input_json['min_lat_lon'] self.max_lat_lon = input_json['max_lat_lon'] if 'project' in input_json: self.project = input_json['project'] if 'provider' in input_json: self.provider = input_json['provider'] if 'device' in input_json: self.provider = input_json['device'] if 'platform_code' in input_json: self.platform_code = input_json['platform_code'] if 'columns' in input_json: self.columns = input_json['columns'] if 'variable' in input_json: self.variable = input_json['variable'] if 'marker_platform_code' in input_json: self.marker_platform_code = input_json['marker_platform_code'] return self @property def project(self): return self.__project @project.setter def project(self, val): """ :param val: :return: None """ self.__project = val return @property def provider(self): return self.__provider @provider.setter def provider(self, val): """ :param val: :return: None """ self.__provider = val return @property def device(self): return self.__device @device.setter def device(self, val): """ :param val: :return: None """ self.__device = val return @property def min_depth(self): return self.__min_depth @min_depth.setter def min_depth(self, val): """ :param val: :return: None """ self.__min_depth = val return @property def max_depth(self): return self.__max_depth @max_depth.setter def max_depth(self, val): """ :param val: :return: None """ self.__max_depth = val return @property def min_datetime(self): return self.__min_datetime @min_datetime.setter def min_datetime(self, val): """ :param val: :return: None """ self.__min_datetime = val return @property def max_datetime(self): return self.__max_datetime @max_datetime.setter def max_datetime(self, val): """ :param val: :return: None """ self.__max_datetime = val return @property def min_lat_lon(self): return self.__min_lat_lon @min_lat_lon.setter def min_lat_lon(self, val): """ :param val: :return: None """ self.__min_lat_lon = val return @property def max_lat_lon(self): return self.__max_lat_lon @max_lat_lon.setter def max_lat_lon(self, val): """ :param val: :return: None """ self.__max_lat_lon = val return @property def start_at(self): return self.__start_at @start_at.setter def start_at(self, val): """ :param val: :return: None """ self.__start_at = val return @property def size(self): return self.__size @size.setter def size(self, val): """ :param val: :return: None """ self.__size = val return @property def columns(self): return self.__columns @columns.setter def columns(self, val): """ :param val: :return: None """ self.__columns = val return