parquet_flask/utils/config.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 os
import uuid
from parquet_flask.utils.singleton import Singleton
class Config(metaclass=Singleton):
master_spark_url = 'master_spark_url'
parquet_metadata_tbl = 'parquet_metadata_tbl'
spark_app_name = 'spark_app_name'
spark_config_dict = 'spark_config_dict'
parquet_file_name = 'parquet_file_name'
aws_region = 'aws_region'
aws_access_key_id = 'aws_access_key_id'
aws_secret_access_key = 'aws_secret_access_key'
aws_session_token = 'aws_session_token'
in_situ_schema = 'in_situ_schema'
spark_ram_size = 'spark_ram_size'
missing_depth_value = 'missing_depth_value'
authentication_type = 'authentication_type'
authentication_key = 'authentication_key'
es_url = 'es_url'
es_index = 'es_index'
es_port = 'es_port'
def __init__(self, validate_env: bool = True):
self.__keys = [
Config.es_url,
Config.master_spark_url,
Config.spark_app_name,
# Config.spark_config_dict,
Config.parquet_file_name,
Config.in_situ_schema,
Config.authentication_type,
Config.authentication_key,
Config.parquet_metadata_tbl,
]
self.__optional_keys = [
Config.spark_ram_size,
Config.aws_access_key_id,
Config.aws_secret_access_key,
Config.aws_session_token,
]
if validate_env:
self.__validate()
app_name_postfix = self.get_value('HOSTNAME', str(uuid.uuid4()))
self.__spark_app_name = f'{self.get_value(Config.spark_app_name)}___{app_name_postfix}'
def get_spark_app_name(self):
return self.__spark_app_name
def __validate(self):
missing_mandatory_keys = [k for k in self.__keys if k not in os.environ]
if len(missing_mandatory_keys) > 0:
raise RuntimeError('missing configuration values in environment values: {}'.format(missing_mandatory_keys))
return
def get_value(self, key, default_val=None):
if key in os.environ:
return os.environ[key]
return default_val