1
0
mirror of https://github.com/deadc0de6/dotdrop.git synced 2026-02-15 16:50:03 +00:00

implement user input for #318

This commit is contained in:
deadc0de6
2021-09-22 11:16:17 +02:00
parent 5dfbf5d044
commit 55e6ff46b8
3 changed files with 45 additions and 4 deletions

View File

@@ -206,10 +206,11 @@ class CfgAggregator:
# parsing # parsing
######################################################## ########################################################
def _load(self): def _load(self, reloading=False):
"""load lower level config""" """load lower level config"""
self.cfgyaml = CfgYaml(self.path, self.cfgyaml = CfgYaml(self.path,
self.profile_key, self.profile_key,
reloading=reloading,
debug=self.debug) debug=self.debug)
# settings # settings
@@ -361,7 +362,7 @@ class CfgAggregator:
self.log.dbg('reloading config') self.log.dbg('reloading config')
olddebug = self.debug olddebug = self.debug
self.debug = False self.debug = False
self._load() self._load(reloading=True)
self.debug = olddebug self.debug = olddebug
@classmethod @classmethod

View File

@@ -33,7 +33,7 @@ from dotdrop.settings import Settings
from dotdrop.logger import Logger from dotdrop.logger import Logger
from dotdrop.templategen import Templategen from dotdrop.templategen import Templategen
from dotdrop.linktypes import LinkTypes from dotdrop.linktypes import LinkTypes
from dotdrop.utils import shellrun, uniq_list from dotdrop.utils import shellrun, uniq_list, userinput
from dotdrop.exceptions import YamlException, UndefinedException from dotdrop.exceptions import YamlException, UndefinedException
@@ -50,6 +50,7 @@ class CfgYaml:
key_trans_w = 'trans_write' key_trans_w = 'trans_write'
key_variables = 'variables' key_variables = 'variables'
key_dvariables = 'dynvariables' key_dvariables = 'dynvariables'
key_uvariables = 'uservariables'
action_pre = 'pre' action_pre = 'pre'
action_post = 'post' action_post = 'post'
@@ -98,16 +99,19 @@ class CfgYaml:
allowed_link_val = [lnk_nolink, lnk_link, lnk_children] allowed_link_val = [lnk_nolink, lnk_link, lnk_children]
top_entries = [key_dotfiles, key_settings, key_profiles] top_entries = [key_dotfiles, key_settings, key_profiles]
def __init__(self, path, profile=None, addprofiles=None, debug=False): def __init__(self, path, profile=None, addprofiles=None,
reloading=False, debug=False):
""" """
config parser config parser
@path: config file path @path: config file path
@profile: the selected profile @profile: the selected profile
@addprofiles: included profiles @addprofiles: included profiles
@reloading: true when reloading
@debug: debug flag @debug: debug flag
""" """
self._path = os.path.abspath(path) self._path = os.path.abspath(path)
self._profile = profile self._profile = profile
self._reloading = reloading
self._debug = debug self._debug = debug
self._log = Logger(debug=self._debug) self._log = Logger(debug=self._debug)
# config needs to be written # config needs to be written
@@ -163,6 +167,10 @@ class CfgYaml:
dvariables = self._parse_blk_dynvariables(self._yaml_dict) dvariables = self._parse_blk_dynvariables(self._yaml_dict)
self._add_variables(dvariables, template=False) self._add_variables(dvariables, template=False)
# parse the "uservariables" block
uvariables = self._parse_blk_uservariables(self._yaml_dict)
self._add_variables(uvariables, template=False)
# now template variables and dynvariables from the same pool # now template variables and dynvariables from the same pool
self._rec_resolve_variables(self.variables) self._rec_resolve_variables(self.variables)
# and execute dvariables # and execute dvariables
@@ -565,6 +573,24 @@ class CfgYaml:
self._debug_dict('dynvariables block', dvariables) self._debug_dict('dynvariables block', dvariables)
return dvariables return dvariables
def _parse_blk_uservariables(self, dic):
"""parse the "uservariables" block"""
uvariables = self._get_entry(dic,
self.key_uvariables,
mandatory=False)
uvars = {}
if not self._reloading and uvariables:
for k, v in uvariables.items():
content = userinput(v, debug=self._debug)
uvars[k] = content
if uvars:
uvars = uvars.copy()
if self._debug:
self._debug_dict('uservariables block', uvars)
return uvars
######################################################## ########################################################
# parsing helpers # parsing helpers
######################################################## ########################################################

View File

@@ -69,6 +69,20 @@ def shellrun(cmd, debug=False):
return ret == 0, out return ret == 0, out
def userinput(prompt, debug=False):
"""
get user input
return user input
"""
if debug:
LOG.dbg('get user input for \"{}\"'.format(prompt), force=True)
pre = 'Please provide the value for \"{}\": '.format(prompt)
res = input(pre)
if debug:
LOG.dbg('user input result: {}'.format(res), force=True)
return res
def fastdiff(left, right): def fastdiff(left, right):
"""fast compare files and returns True if different""" """fast compare files and returns True if different"""
return not filecmp.cmp(left, right, shallow=False) return not filecmp.cmp(left, right, shallow=False)