65 lines
2.5 KiB
Python
65 lines
2.5 KiB
Python
import json
|
|
import pathlib
|
|
import logging
|
|
from .storage import storage
|
|
from .general import JSON, UNSAFE_JSON
|
|
from .output import log
|
|
|
|
def output_configs(area :dict, show :bool = True, save :bool = True):
|
|
""" Show on the screen the configuration data (except credentials) and/or save them on a json file
|
|
:param area: a dictionary to be shown/save (basically archinstall.arguments, but needed to be passed explictly to avoid circular references
|
|
:type area: dict
|
|
:param show:Determines if the config data will be displayed on screen in Json format
|
|
:type show: bool
|
|
:param save:Determines if the config data will we written as a Json file
|
|
:type save:bool
|
|
"""
|
|
user_credentials = {}
|
|
disk_layout = {}
|
|
user_config = {}
|
|
for key in area:
|
|
if key in ['!users','!superusers','!encryption-password']:
|
|
user_credentials[key] = area[key]
|
|
elif key == 'disk_layouts':
|
|
disk_layout = area[key]
|
|
elif key in ['abort','install','config','creds','dry_run']:
|
|
pass
|
|
else:
|
|
user_config[key] = area[key]
|
|
|
|
user_configuration_json = json.dumps({
|
|
'config_version': storage['__version__'], # Tells us what version was used to generate the config
|
|
**user_config, # __version__ will be overwritten by old version definition found in config
|
|
'version': storage['__version__']
|
|
} , indent=4, sort_keys=True, cls=JSON)
|
|
if disk_layout:
|
|
disk_layout_json = json.dumps(disk_layout, indent=4, sort_keys=True, cls=JSON)
|
|
if user_credentials:
|
|
user_credentials_json = json.dumps(user_credentials, indent=4, sort_keys=True, cls=UNSAFE_JSON)
|
|
|
|
if save:
|
|
dest_path = pathlib.Path(storage.get('LOG_PATH','.'))
|
|
if (not dest_path.exists()) or not (dest_path.is_dir()):
|
|
log(f"Destination directory {dest_path.resolve()} does not exist or is not a directory,\n Configuration files can't be saved",fg="yellow",)
|
|
input("Press enter to continue")
|
|
else:
|
|
with (dest_path / "user_configuration.json").open('w') as config_file:
|
|
config_file.write(user_configuration_json)
|
|
if user_credentials:
|
|
target = dest_path / "user_credentials.json"
|
|
with target.open('w') as config_file:
|
|
config_file.write(user_credentials_json)
|
|
if disk_layout:
|
|
target = dest_path / "user_disk_layout.json"
|
|
with target.open('w') as config_file:
|
|
config_file.write(disk_layout_json)
|
|
|
|
if show:
|
|
print()
|
|
print('This is your chosen configuration:')
|
|
log("-- Guided template chosen (with below config) --", level=logging.DEBUG)
|
|
log(user_configuration_json, level=logging.INFO)
|
|
if disk_layout:
|
|
log(disk_layout_json, level=logging.INFO)
|
|
print()
|