golden hour
/opt/saltstack/salt/lib/python3.10/site-packages/salt/utils
⬆️ Go Up
Upload
File/Folder
Size
Actions
__init__.py
237 B
Del
OK
__pycache__
-
Del
OK
aggregation.py
5.17 KB
Del
OK
ansible.py
1.48 KB
Del
OK
args.py
18.33 KB
Del
OK
asynchronous.py
4.06 KB
Del
OK
atomicfile.py
5.33 KB
Del
OK
aws.py
20.37 KB
Del
OK
azurearm.py
11.42 KB
Del
OK
beacons.py
517 B
Del
OK
boto3mod.py
8.36 KB
Del
OK
boto_elb_tag.py
3.02 KB
Del
OK
botomod.py
7.98 KB
Del
OK
cache.py
11.49 KB
Del
OK
channel.py
489 B
Del
OK
cloud.py
116.3 KB
Del
OK
color.py
2.72 KB
Del
OK
compat.py
1.89 KB
Del
OK
configcomparer.py
3.88 KB
Del
OK
configparser.py
10.82 KB
Del
OK
context.py
6.8 KB
Del
OK
crypt.py
5 KB
Del
OK
ctx.py
1.42 KB
Del
OK
data.py
53.03 KB
Del
OK
dateutils.py
2.3 KB
Del
OK
debug.py
4.19 KB
Del
OK
decorators
-
Del
OK
dictdiffer.py
16.48 KB
Del
OK
dicttrim.py
3.9 KB
Del
OK
dictupdate.py
11.33 KB
Del
OK
dns.py
35.21 KB
Del
OK
doc.py
2.25 KB
Del
OK
dockermod
-
Del
OK
entrypoints.py
1.83 KB
Del
OK
environment.py
2.2 KB
Del
OK
error.py
1.18 KB
Del
OK
etcd_util.py
33.25 KB
Del
OK
event.py
52.45 KB
Del
OK
extend.py
8.87 KB
Del
OK
extmods.py
6.04 KB
Del
OK
filebuffer.py
3.15 KB
Del
OK
files.py
27.94 KB
Del
OK
find.py
22.08 KB
Del
OK
fsutils.py
3.29 KB
Del
OK
functools.py
6.02 KB
Del
OK
gitfs.py
130.41 KB
Del
OK
github.py
1.52 KB
Del
OK
gzip_util.py
2.86 KB
Del
OK
hashutils.py
5.91 KB
Del
OK
http.py
33.9 KB
Del
OK
iam.py
1.22 KB
Del
OK
icinga2.py
754 B
Del
OK
idem.py
1.22 KB
Del
OK
immutabletypes.py
2.46 KB
Del
OK
itertools.py
2.36 KB
Del
OK
jid.py
3 KB
Del
OK
jinja.py
33.92 KB
Del
OK
job.py
6.89 KB
Del
OK
json.py
3.78 KB
Del
OK
kickstart.py
41.04 KB
Del
OK
kinds.py
493 B
Del
OK
lazy.py
3.06 KB
Del
OK
listdiffer.py
10.9 KB
Del
OK
locales.py
2.06 KB
Del
OK
mac_utils.py
14.01 KB
Del
OK
mako.py
3.97 KB
Del
OK
master.py
29.7 KB
Del
OK
mattermost.py
1.77 KB
Del
OK
memcached.py
3.56 KB
Del
OK
migrations.py
1.46 KB
Del
OK
mine.py
3.68 KB
Del
OK
minion.py
4.13 KB
Del
OK
minions.py
43.38 KB
Del
OK
mount.py
1.15 KB
Del
OK
msazure.py
5.36 KB
Del
OK
msgpack.py
4.69 KB
Del
OK
nacl.py
13.65 KB
Del
OK
namecheap.py
4.32 KB
Del
OK
napalm.py
23.22 KB
Del
OK
nb_popen.py
7.24 KB
Del
OK
network.py
73.86 KB
Del
OK
nxos.py
12.94 KB
Del
OK
nxos_api.py
4 KB
Del
OK
odict.py
13.21 KB
Del
OK
openstack
-
Del
OK
oset.py
6.41 KB
Del
OK
pagerduty.py
3.03 KB
Del
OK
parsers.py
122.69 KB
Del
OK
path.py
11.24 KB
Del
OK
pbm.py
9.81 KB
Del
OK
pkg
-
Del
OK
platform.py
5.84 KB
Del
OK
powershell.py
4.15 KB
Del
OK
preseed.py
2.64 KB
Del
OK
process.py
40.76 KB
Del
OK
profile.py
3.21 KB
Del
OK
proxy.py
331 B
Del
OK
psutil_compat.py
3.63 KB
Del
OK
pushover.py
4.51 KB
Del
OK
pycrypto.py
5.41 KB
Del
OK
pydsl.py
13.74 KB
Del
OK
pyobjects.py
10.75 KB
Del
OK
reactor.py
18.99 KB
Del
OK
reclass.py
752 B
Del
OK
roster_matcher.py
3.55 KB
Del
OK
rsax931.py
8.42 KB
Del
OK
s3.py
8.78 KB
Del
OK
saltclass.py
14.27 KB
Del
OK
sanitizers.py
2.51 KB
Del
OK
schedule.py
71.81 KB
Del
OK
schema.py
54.26 KB
Del
OK
sdb.py
4.04 KB
Del
OK
slack.py
3.58 KB
Del
OK
smb.py
11.16 KB
Del
OK
smtp.py
3.27 KB
Del
OK
ssdp.py
14.75 KB
Del
OK
ssh.py
769 B
Del
OK
state.py
8.43 KB
Del
OK
stringio.py
355 B
Del
OK
stringutils.py
16.95 KB
Del
OK
systemd.py
5.51 KB
Del
OK
templates.py
24.03 KB
Del
OK
textformat.py
5.03 KB
Del
OK
thin.py
31.91 KB
Del
OK
timed_subprocess.py
4.06 KB
Del
OK
timeout.py
1.53 KB
Del
OK
timeutil.py
2.4 KB
Del
OK
url.py
5 KB
Del
OK
user.py
11.86 KB
Del
OK
validate
-
Del
OK
value.py
247 B
Del
OK
vault.py
21.74 KB
Del
OK
verify.py
25.34 KB
Del
OK
versions.py
17.17 KB
Del
OK
virt.py
3.24 KB
Del
OK
virtualbox.py
22.43 KB
Del
OK
vmware.py
129.74 KB
Del
OK
vsan.py
17.18 KB
Del
OK
vt.py
31.47 KB
Del
OK
vt_helper.py
4.4 KB
Del
OK
win_chcp.py
3.7 KB
Del
OK
win_dacl.py
95.49 KB
Del
OK
win_dotnet.py
4.74 KB
Del
OK
win_functions.py
12.69 KB
Del
OK
win_lgpo_auditpol.py
8.48 KB
Del
OK
win_lgpo_netsh.py
17.87 KB
Del
OK
win_lgpo_reg.py
16.98 KB
Del
OK
win_network.py
16.35 KB
Del
OK
win_osinfo.py
2.83 KB
Del
OK
win_pdh.py
13.85 KB
Del
OK
win_reg.py
30.82 KB
Del
OK
win_runas.py
10.53 KB
Del
OK
win_service.py
5.2 KB
Del
OK
win_system.py
14.47 KB
Del
OK
win_update.py
40.36 KB
Del
OK
winapi.py
818 B
Del
OK
x509.py
73.19 KB
Del
OK
xdg.py
316 B
Del
OK
xmlutil.py
13.91 KB
Del
OK
yaml.py
349 B
Del
OK
yamldumper.py
3.37 KB
Del
OK
yamlencoding.py
1.55 KB
Del
OK
yamllint.py
1.61 KB
Del
OK
yamlloader.py
6.04 KB
Del
OK
yamlloader_old.py
8.15 KB
Del
OK
yast.py
619 B
Del
OK
zeromq.py
1.74 KB
Del
OK
zfs.py
19.15 KB
Del
OK
Edit: configparser.py
""" Custom configparser classes """ import re from configparser import * # pylint: disable=no-name-in-module,wildcard-import,unused-wildcard-import import salt.utils.stringutils try: from collections import OrderedDict as _default_dict except ImportError: # fallback for setup.py which hasn't yet built _collections _default_dict = dict # pylint: disable=string-substitution-usage-error class GitConfigParser(RawConfigParser): """ Custom ConfigParser which reads and writes git config files. READ A GIT CONFIG FILE INTO THE PARSER OBJECT >>> import salt.utils.configparser >>> conf = salt.utils.configparser.GitConfigParser() >>> conf.read('/home/user/.git/config') MAKE SOME CHANGES >>> # Change user.email >>> conf.set('user', 'email', 'myaddress@mydomain.tld') >>> # Add another refspec to the "origin" remote's "fetch" multivar >>> conf.set_multivar('remote "origin"', 'fetch', '+refs/tags/*:refs/tags/*') WRITE THE CONFIG TO A FILEHANDLE >>> import salt.utils.files >>> with salt.utils.files.fopen('/home/user/.git/config', 'w') as fh: ... conf.write(fh) >>> """ DEFAULTSECT = "DEFAULT" SPACEINDENT = " " * 8 # pylint: disable=useless-super-delegation def __init__( self, defaults=None, dict_type=_default_dict, allow_no_value=True, ): """ Changes default value for allow_no_value from False to True """ super().__init__(defaults, dict_type, allow_no_value) # pylint: enable=useless-super-delegation def _read(self, fp, fpname): """ Makes the following changes from the RawConfigParser: 1. Strip leading tabs from non-section-header lines. 2. Treat 8 spaces at the beginning of a line as a tab. 3. Treat lines beginning with a tab as options. 4. Drops support for continuation lines. 5. Multiple values for a given option are stored as a list. 6. Keys and values are decoded to the system encoding. """ cursect = None # None, or a dictionary optname = None lineno = 0 e = None # None, or an exception while True: line = salt.utils.stringutils.to_unicode(fp.readline()) if not line: break lineno = lineno + 1 # comment or blank line? if line.strip() == "" or line[0] in "#;": continue if line.split(None, 1)[0].lower() == "rem" and line[0] in "rR": # no leading whitespace continue # Replace space indentation with a tab. Allows parser to work # properly in cases where someone has edited the git config by hand # and indented using spaces instead of tabs. if line.startswith(self.SPACEINDENT): line = "\t" + line[len(self.SPACEINDENT) :] # is it a section header? mo = self.SECTCRE.match(line) if mo: sectname = mo.group("header") if sectname in self._sections: cursect = self._sections[sectname] elif sectname == self.DEFAULTSECT: cursect = self._defaults else: cursect = self._dict() self._sections[sectname] = cursect # So sections can't start with a continuation line optname = None # no section header in the file? elif cursect is None: raise MissingSectionHeaderError( # pylint: disable=undefined-variable salt.utils.stringutils.to_str(fpname), lineno, salt.utils.stringutils.to_str(line), ) # an option line? else: mo = self._optcre.match(line.lstrip()) if mo: optname, vi, optval = mo.group("option", "vi", "value") optname = self.optionxform(optname.rstrip()) if optval is None: optval = "" if optval: if vi in ("=", ":") and ";" in optval: # ';' is a comment delimiter only if it follows # a spacing character pos = optval.find(";") if pos != -1 and optval[pos - 1].isspace(): optval = optval[:pos] optval = optval.strip() # Empty strings should be considered as blank strings if optval in ('""', "''"): optval = "" self._add_option(cursect, optname, optval) else: # a non-fatal parsing error occurred. set up the # exception but keep going. the exception will be # raised at the end of the file and will contain a # list of all bogus lines if not e: e = ParsingError(fpname) # pylint: disable=undefined-variable e.append(lineno, repr(line)) # if any parsing errors occurred, raise an exception if e: raise e # pylint: disable=raising-bad-type def _string_check(self, value, allow_list=False): """ Based on the string-checking code from the SafeConfigParser's set() function, this enforces string values for config options. """ if self._optcre is self.OPTCRE or value: is_list = isinstance(value, list) if is_list and not allow_list: raise TypeError( "option value cannot be a list unless allow_list is True" ) elif not is_list: value = [value] if not all(isinstance(x, str) for x in value): raise TypeError("option values must be strings") def get(self, section, option, as_list=False): # pylint: disable=arguments-differ """ Adds an optional "as_list" argument to ensure a list is returned. This is helpful when iterating over an option which may or may not be a multivar. """ ret = super().get(section, option) if as_list and not isinstance(ret, list): ret = [ret] return ret def set(self, section, option, value=""): """ This is overridden from the RawConfigParser merely to change the default value for the 'value' argument. """ self._string_check(value) super().set(section, option, value) def _add_option(self, sectdict, key, value): if isinstance(value, list): sectdict[key] = value elif isinstance(value, str): try: sectdict[key].append(value) except KeyError: # Key not present, set it sectdict[key] = value except AttributeError: # Key is present but the value is not a list. Make it into a list # and then append to it. sectdict[key] = [sectdict[key]] sectdict[key].append(value) else: raise TypeError( "Expected str or list for option value, got %s" % type(value).__name__ ) def set_multivar(self, section, option, value=""): """ This function is unique to the GitConfigParser. It will add another value for the option if it already exists, converting the option's value to a list if applicable. If "value" is a list, then any existing values for the specified section and option will be replaced with the list being passed. """ self._string_check(value, allow_list=True) if not section or section == self.DEFAULTSECT: sectdict = self._defaults else: try: sectdict = self._sections[section] except KeyError: raise NoSectionError( # pylint: disable=undefined-variable salt.utils.stringutils.to_str(section) ) key = self.optionxform(option) self._add_option(sectdict, key, value) def remove_option_regexp(self, section, option, expr): """ Remove an option with a value matching the expression. Works on single values and multivars. """ if not section or section == self.DEFAULTSECT: sectdict = self._defaults else: try: sectdict = self._sections[section] except KeyError: raise NoSectionError( # pylint: disable=undefined-variable salt.utils.stringutils.to_str(section) ) option = self.optionxform(option) if option not in sectdict: return False regexp = re.compile(expr) if isinstance(sectdict[option], list): new_list = [x for x in sectdict[option] if not regexp.search(x)] # Revert back to a list if we removed all but one item if len(new_list) == 1: new_list = new_list[0] existed = new_list != sectdict[option] if existed: del sectdict[option] sectdict[option] = new_list del new_list else: existed = bool(regexp.search(sectdict[option])) if existed: del sectdict[option] return existed def write(self, fp_): # pylint: disable=arguments-differ """ Makes the following changes from the RawConfigParser: 1. Prepends options with a tab character. 2. Does not write a blank line between sections. 3. When an option's value is a list, a line for each option is written. This allows us to support multivars like a remote's "fetch" option. 4. Drops support for continuation lines. """ convert = ( salt.utils.stringutils.to_bytes if "b" in fp_.mode else salt.utils.stringutils.to_str ) if self._defaults: fp_.write(convert("[%s]\n" % self.DEFAULTSECT)) for (key, value) in self._defaults.items(): value = salt.utils.stringutils.to_unicode(value).replace("\n", "\n\t") fp_.write(convert("{} = {}\n".format(key, value))) for section in self._sections: fp_.write(convert("[%s]\n" % section)) for (key, value) in self._sections[section].items(): if (value is not None) or (self._optcre == self.OPTCRE): if not isinstance(value, list): value = [value] for item in value: fp_.write(convert("\t%s\n" % " = ".join((key, item)).rstrip()))
Save