Add function for writing value to fannie config file
This commit is contained in:
parent
ebef0f6be1
commit
e6c1b2d9ba
|
@ -0,0 +1,40 @@
|
|||
<?php
|
||||
|
||||
$options = getopt('h', array(
|
||||
'help',
|
||||
'path:',
|
||||
'name:',
|
||||
'value:',
|
||||
));
|
||||
|
||||
$help = isset($options['h']) or isset($options['help']);
|
||||
$path = isset($options['path']) ? $options['path'] : null;
|
||||
$name = isset($options['name']) ? $options['name'] : null;
|
||||
$value = isset($options['value']) ? $options['value'] : null;
|
||||
|
||||
if ($help or !$path or !$name or !$value) {
|
||||
$script = basename($argv[0]);
|
||||
echo "Usage: $script --path FANNIE_CONFIG_PATH --name SETTING_NAME --value SETTING_VALUE\n";
|
||||
exit($help ? 0 : 1);
|
||||
}
|
||||
|
||||
if (!is_file(realpath($path))) {
|
||||
echo "Config file does not exist: $path\n";
|
||||
exit(2);
|
||||
}
|
||||
$path = realpath($path);
|
||||
|
||||
// convert value from JSON to PHP
|
||||
$value = json_decode($value);
|
||||
if (gettype($value) == 'string') {
|
||||
$value = "'$value'";
|
||||
} else {
|
||||
echo gettype($value) . " data type not supported: " . print_r($value, true);
|
||||
exit(2);
|
||||
}
|
||||
|
||||
// invoke native CORE logic to update config file
|
||||
require(dirname($path) . '/install/util.php');
|
||||
confset($name, $value);
|
||||
|
||||
?>
|
|
@ -31,7 +31,7 @@ import subprocess
|
|||
from rattail.files import resource_path
|
||||
|
||||
|
||||
def get_fannie_config_value(config, name):
|
||||
def get_fannie_config_value(config, name, fannie_config_path=None):
|
||||
"""
|
||||
Retrieve a config value from `fannie/config.php`
|
||||
|
||||
|
@ -40,6 +40,9 @@ def get_fannie_config_value(config, name):
|
|||
:param name: Name of the config value to be returned. This need
|
||||
not be prefixed with ``FANNIE_`` although it can be.
|
||||
|
||||
:param fannie_config_path: Optional path to fannie config file.
|
||||
If not specified, it is will be determined via ``config``.
|
||||
|
||||
:returns: Config value as Python object, e.g. a string or dict.
|
||||
This is believed to work okay but since the Fannie config file
|
||||
represents data with PHP code, which is then converted to JSON
|
||||
|
@ -48,20 +51,53 @@ def get_fannie_config_value(config, name):
|
|||
if not name.startswith('FANNIE_'):
|
||||
name = f'FANNIE_{name}'
|
||||
|
||||
is4c = config.require('corepos', 'srcdir')
|
||||
path = os.path.join(is4c, 'fannie', 'config.php')
|
||||
if not fannie_config_path:
|
||||
is4c = config.require('corepos', 'srcdir')
|
||||
fannie_config_path = os.path.join(is4c, 'fannie', 'config.php')
|
||||
script = resource_path('rattail_corepos.corepos.office:scripts/parse-fannie-config.php')
|
||||
|
||||
try:
|
||||
output = subprocess.check_output(['php', script,
|
||||
'--path', path,
|
||||
'--path', fannie_config_path,
|
||||
'--setting', name])
|
||||
except subprocess.CalledProcessError as error:
|
||||
raise ValueError(f"failed to read value: {error.output.decode('utf_8')}")
|
||||
output = error.output.decode('utf_8')
|
||||
if "file does not contain setting" in output:
|
||||
raise ValueError(output)
|
||||
raise
|
||||
|
||||
return json.loads(output.decode('utf_8'))
|
||||
|
||||
|
||||
def set_fannie_config_value(config, name, value, fannie_config_path=None):
|
||||
"""
|
||||
Update a config value in `fannie/config.php`
|
||||
|
||||
:param config: Rattail config object.
|
||||
|
||||
:param name: Name of the config value to set. This need not be
|
||||
prefixed with ``FANNIE_`` although it can be.
|
||||
|
||||
:param value: Config value to set This must be provided as a
|
||||
JSON-compatible string.
|
||||
|
||||
:param fannie_config_path: Optional path to fannie config file.
|
||||
If not specified, it is will be determined via ``config``.
|
||||
"""
|
||||
if not name.startswith('FANNIE_'):
|
||||
name = f'FANNIE_{name}'
|
||||
|
||||
if not fannie_config_path:
|
||||
is4c = config.require('corepos', 'srcdir')
|
||||
fannie_config_path = os.path.join(is4c, 'fannie', 'config.php')
|
||||
script = resource_path('rattail_corepos.corepos.office:scripts/update-fannie-config.php')
|
||||
|
||||
output = subprocess.check_output(['php', script,
|
||||
'--path', fannie_config_path,
|
||||
'--name', name,
|
||||
'--value', json.dumps(value)])
|
||||
|
||||
|
||||
def get_blueline_template(config):
|
||||
return get_fannie_config_value(config, 'BLUELINE_TEMPLATE')
|
||||
|
||||
|
|
Loading…
Reference in a new issue