在pyhocon中可以在运行时包含文件吗?
例如,我知道如何在运行时合并树
function sendData (){
var json = collectformData();
var params = {
"method": "POST",
"contentType":"application/json",
"payload": json,
};
var response = UrlFetchApp.fetch(URL_ENDPOINT, params);
if (response.getResponseCode() == "200"){
SpreadsheetApp.getUi().alert("Success!");
};
return response.getContentText();
}
我想模拟include语句,以便在运行时对hocon变量进行求值,如下面的希望代码所示:
conf = ConfigFactory.parse_file(conf_file)
conf1 = ConfigFactory.parse_file(include_conf)
conf = ConfigTree.merge_configs(conf, conf1)
答案 0 :(得分:0)
可以使用字符串:
from pyhocon import ConfigFactory
# readingconf entrypoint
file = open('application.conf', mode='r')
conf_string = file.read()
file.close()
conf_string_ready = conf_string.replace("PATH_TO_CONFIG","spec.conf")
conf = ConfigFactory.parse_string(conf_string_ready)
print(conf)
application.conf具有
include "file://INCLUDE_FILE"
或者在没有准备的运行时中,我自己使用python 3.65编写了它:
#!/usr/bin/env python
import os
from pyhocon import ConfigFactory as Cf
def is_line_in_file(full_path, line):
with open(full_path) as f:
content = f.readlines()
for l in content:
if line in l:
f.close()
return True
return False
def line_prepender(filename, line, once=True):
with open(filename, 'r+') as f:
content = f.read()
f.seek(0, 0)
if is_line_in_file(filename, line) and once:
return
f.write(line.rstrip('\r\n') + '\n' + content)
def include_configs(base_path, included_paths):
for included_path in included_paths:
line_prepender(filename=base_path, line=f'include file("{included_path}")')
return Cf.parse_file(base_path)
if __name__ == "__main__":
dir_path = os.path.dirname(os.path.realpath(__file__))
print(f"current working dir: {dir_path}")
dir_path = ''
_base_path = f'{dir_path}example.conf'
_included_files = [f'{dir_path}example1.conf', f'{dir_path}example2.conf']
_conf = include_configs(base_path=_base_path, included_paths=_included_files)
print('break point')