Merge pull request #16 from tboudreaux/feature/defaultConfig
Added default config generation script
This commit is contained in:
11
utils/defaultConfig/defaults.yaml
Normal file
11
utils/defaultConfig/defaults.yaml
Normal file
@@ -0,0 +1,11 @@
|
||||
opac:
|
||||
lowTemp:
|
||||
numeric:
|
||||
maxIter: 10
|
||||
Probe:
|
||||
GLVis:
|
||||
Visualization: true
|
||||
Host: localhost
|
||||
Port: '19916'
|
||||
LogManager:
|
||||
DefaultLogName: 4DSSE.log
|
||||
70
utils/defaultConfig/generateDefaultConfig.py
Normal file
70
utils/defaultConfig/generateDefaultConfig.py
Normal file
@@ -0,0 +1,70 @@
|
||||
import os
|
||||
import re
|
||||
import yaml
|
||||
|
||||
# Regular expression to match .get<T>("a:b:c", x)
|
||||
pattern = re.compile(r'\.get<([^>]+)>\("([^"]+)",\s*([^);]+)\)')
|
||||
|
||||
def parse_value(value, type_hint):
|
||||
"""Converts values to appropriate types."""
|
||||
value = value.strip()
|
||||
|
||||
# Handle common types
|
||||
if type_hint in {"int", "long"}:
|
||||
return int(value)
|
||||
elif type_hint in {"float", "double"}:
|
||||
return float(value)
|
||||
elif type_hint == "bool":
|
||||
return value.lower() in {"true", "1"}
|
||||
elif value.startswith('"') and value.endswith('"'):
|
||||
return value.strip('"') # Remove quotes for string literals
|
||||
elif value.startswith("'") and value.endswith("'"):
|
||||
return value.strip("'") # Remove single quotes
|
||||
|
||||
return value # Return as-is if unsure
|
||||
|
||||
def insert_into_dict(hierarchy_dict, keys, value, type_hint):
|
||||
"""Recursively inserts values into a nested dictionary."""
|
||||
key = keys.pop(0)
|
||||
if not keys: # If last key, store value
|
||||
hierarchy_dict[key] = parse_value(value, type_hint)
|
||||
else:
|
||||
if key not in hierarchy_dict:
|
||||
hierarchy_dict[key] = {}
|
||||
insert_into_dict(hierarchy_dict[key], keys, value, type_hint)
|
||||
|
||||
def scan_files(directory):
|
||||
"""Scans all .cpp, .h, .c, and .hpp files in a directory recursively."""
|
||||
hierarchy_dict = {}
|
||||
|
||||
for root, _, files in os.walk(directory):
|
||||
for file in files:
|
||||
if file.endswith(('.cpp', '.h', '.c', '.hpp')):
|
||||
file_path = os.path.join(root, file)
|
||||
with open(file_path, 'r', encoding='utf-8', errors='ignore') as f:
|
||||
for line in f:
|
||||
match = pattern.search(line)
|
||||
if match:
|
||||
type_hint, hierarchy, value = match.groups()
|
||||
keys = hierarchy.split(":")
|
||||
insert_into_dict(hierarchy_dict, keys, value, type_hint)
|
||||
|
||||
return hierarchy_dict
|
||||
|
||||
def save_yaml(data, output_file):
|
||||
"""Saves the nested dictionary to a YAML file."""
|
||||
with open(output_file, 'w', encoding='utf-8') as f:
|
||||
yaml.dump(data, f, default_flow_style=False, sort_keys=False, indent=4)
|
||||
|
||||
if __name__ == "__main__":
|
||||
import argparse
|
||||
parser = argparse.ArgumentParser(description="Generate a YAML file with default configuration values.")
|
||||
parser.add_argument("directory", help="Directory to scan for .cpp, .h, .c, and .hpp files.")
|
||||
parser.add_argument("-o", "--output", help="Output file name.", default="defaults.yaml")
|
||||
args = parser.parse_args()
|
||||
|
||||
extracted_data = scan_files(args.directory)
|
||||
save_yaml(extracted_data, args.output)
|
||||
|
||||
print(f"✅ YAML file generated: {args.output}")
|
||||
|
||||
9
utils/defaultConfig/generateDefaultConfig.sh
Executable file
9
utils/defaultConfig/generateDefaultConfig.sh
Executable file
@@ -0,0 +1,9 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Check if python is installed
|
||||
if ! [ -x "$(command -v python)" ]; then
|
||||
echo 'Error: python is not installed.' >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
python ./generateDefaultConfig.py ../../src
|
||||
14
utils/defaultConfig/readme.md
Normal file
14
utils/defaultConfig/readme.md
Normal file
@@ -0,0 +1,14 @@
|
||||
# Default Configuration Generator
|
||||
Small tool to quickly generate a YAML config file which encodes all the default options used in 4DSSE. All c, c++, h, and hpp in the src directory are scanned and the config variables and their default values pulled out.
|
||||
|
||||
## Usage
|
||||
- You must have python installed
|
||||
|
||||
```bash
|
||||
./generateDefaultConfig.sh
|
||||
```
|
||||
|
||||
There should now be a file called defaults.yaml which stores all the default values.
|
||||
|
||||
## Notes
|
||||
This file could be used as a config file; however, it is more realistically intended for debugging and for checking what the default values set for config options in the code are.
|
||||
Reference in New Issue
Block a user