У нас есть приложение на python, которое загружает config.yml
с aumbry .Для производственных целей нам необходимо зашифровать эту конфигурацию с помощью fernet , который может загружаться без проблем.
Мы хотим иметь возможность загружать как незашифрованные, так и зашифрованные в прозрачномКстати, загрузить незашифрованную загрузку, если найдена, а если нет (производственная), загрузить зашифрованную.До сих пор мы реализовали это.
Шифрование
import cryptography.Fernet as fn
from os.path import split, splitext
def _encrypt_file(path, key):
with open(path, 'rb') as infile:
file_data = infile.read()
nc_data= fn(key).encrypt(file_data)
infile.close()
base_path, filename = split(path)
name, _ = splitext(filename)
nc_name = "{}.{}".format(name, 'nc')
with open(join(base_path, nc_name), 'wb') as outfile:
outfile.write(nc_data)
outfile.close()
Конфигурация Aumbry
from aumbry.errors import LoadError
def _get_configuration():
return aumbry.load(
aumbry.FILE,
AppConfig,
options={
'CONFIG_FILE_PATH': "config.yml"
}
)
def _get_encrypted_configuration():
return aumbry.load(
aumbry.FERNET,
AppConfig,
options={
'CONFIG_FILE_PATH': "config.nc",
'CONFIG_FILE_FERNET_KEY': 'bZhF6nN4A6fhVBPtru2dG1_6d7i0d_B2FxmsybjtE-g='
}
)
def load_config():
"""General method to load configuration"""
try:
return _get_configuration()
except LoadError:
try:
return _get_encrypted_configuration()
except LoadError:
return None
- Есть ли более элегантный способ добиться такого поведения?