003 File Manager
Current Path:
/usr/local/lib/python3.8/site-packages/salt/utils
usr
/
local
/
lib
/
python3.8
/
site-packages
/
salt
/
utils
/
📁
..
📄
__init__.py
(237 B)
📁
__pycache__
📄
aggregation.py
(5.17 KB)
📄
args.py
(19.86 KB)
📄
asynchronous.py
(4.07 KB)
📄
atomicfile.py
(5.33 KB)
📄
aws.py
(19.38 KB)
📄
azurearm.py
(11.38 KB)
📄
beacons.py
(517 B)
📄
boto3_elasticsearch.py
(3.73 KB)
📄
boto3mod.py
(8.36 KB)
📄
boto_elb_tag.py
(3.02 KB)
📄
botomod.py
(7.98 KB)
📄
cache.py
(9.81 KB)
📄
cloud.py
(117.04 KB)
📄
color.py
(2.72 KB)
📄
compat.py
(1.81 KB)
📄
configcomparer.py
(3.88 KB)
📄
configparser.py
(10.82 KB)
📄
context.py
(6.8 KB)
📄
crypt.py
(4.71 KB)
📄
ctx.py
(1.42 KB)
📄
data.py
(49.28 KB)
📄
dateutils.py
(2.31 KB)
📄
debug.py
(4.19 KB)
📁
decorators
📄
dictdiffer.py
(14.16 KB)
📄
dicttrim.py
(3.9 KB)
📄
dictupdate.py
(11.33 KB)
📄
dns.py
(35.17 KB)
📄
doc.py
(2.25 KB)
📁
dockermod
📄
entrypoints.py
(2.28 KB)
📄
environment.py
(2.2 KB)
📄
error.py
(1.18 KB)
📄
etcd_util.py
(14.22 KB)
📄
event.py
(52.3 KB)
📄
extend.py
(8.87 KB)
📄
extmods.py
(5.67 KB)
📄
filebuffer.py
(3.15 KB)
📄
files.py
(27.6 KB)
📄
find.py
(22.09 KB)
📄
fsutils.py
(3.29 KB)
📄
functools.py
(5.02 KB)
📄
gitfs.py
(124.49 KB)
📄
github.py
(1.52 KB)
📄
gzip_util.py
(2.86 KB)
📄
hashutils.py
(5.91 KB)
📄
http.py
(34.36 KB)
📄
iam.py
(1.22 KB)
📄
icinga2.py
(754 B)
📄
idem.py
(1.22 KB)
📄
immutabletypes.py
(2.46 KB)
📄
itertools.py
(2.36 KB)
📄
jid.py
(3 KB)
📄
jinja.py
(31.33 KB)
📄
job.py
(6.01 KB)
📄
json.py
(3.78 KB)
📄
kickstart.py
(41.04 KB)
📄
kinds.py
(493 B)
📄
lazy.py
(3.06 KB)
📄
listdiffer.py
(10.9 KB)
📄
locales.py
(2.06 KB)
📄
mac_utils.py
(14.01 KB)
📄
mako.py
(3.63 KB)
📄
master.py
(29.57 KB)
📄
mattermost.py
(1.77 KB)
📄
memcached.py
(3.56 KB)
📄
migrations.py
(1.46 KB)
📄
mine.py
(3.68 KB)
📄
minion.py
(4.13 KB)
📄
minions.py
(43.11 KB)
📄
mount.py
(1.15 KB)
📄
msazure.py
(5.36 KB)
📄
msgpack.py
(4.69 KB)
📄
nacl.py
(13.58 KB)
📄
namecheap.py
(4.32 KB)
📄
napalm.py
(23.79 KB)
📄
nb_popen.py
(7.24 KB)
📄
network.py
(71.06 KB)
📄
nxos.py
(12.94 KB)
📄
nxos_api.py
(4 KB)
📄
odict.py
(13.16 KB)
📁
openstack
📄
oset.py
(6.41 KB)
📄
pagerduty.py
(3.03 KB)
📄
parsers.py
(125.31 KB)
📄
path.py
(10.78 KB)
📄
pbm.py
(9.81 KB)
📁
pkg
📄
platform.py
(5.16 KB)
📄
powershell.py
(4.15 KB)
📄
preseed.py
(2.64 KB)
📄
process.py
(43.34 KB)
📄
profile.py
(3.21 KB)
📄
proxy.py
(331 B)
📄
psutil_compat.py
(3.65 KB)
📄
pushover.py
(4.51 KB)
📄
pycrypto.py
(5.39 KB)
📄
pydsl.py
(13.74 KB)
📄
pyobjects.py
(10.75 KB)
📄
reactor.py
(19.09 KB)
📄
reclass.py
(752 B)
📄
roster_matcher.py
(3.55 KB)
📄
rsax931.py
(8.07 KB)
📄
s3.py
(8.78 KB)
📄
saltclass.py
(14.27 KB)
📄
sanitizers.py
(2.51 KB)
📄
schedule.py
(70.67 KB)
📄
schema.py
(54.26 KB)
📄
sdb.py
(4.04 KB)
📄
slack.py
(3.57 KB)
📄
smb.py
(11.16 KB)
📄
smtp.py
(3.27 KB)
📄
ssdp.py
(14.75 KB)
📄
ssh.py
(769 B)
📄
state.py
(8.43 KB)
📄
stringio.py
(355 B)
📄
stringutils.py
(16.63 KB)
📄
systemd.py
(5.51 KB)
📄
templates.py
(23.92 KB)
📄
textformat.py
(5.03 KB)
📄
thin.py
(31.64 KB)
📄
timed_subprocess.py
(4.06 KB)
📄
timeout.py
(1.53 KB)
📄
timeutil.py
(2.4 KB)
📄
url.py
(4.96 KB)
📄
user.py
(10.92 KB)
📁
validate
📄
value.py
(247 B)
📄
vault.py
(19.23 KB)
📄
verify.py
(26.97 KB)
📄
versions.py
(16.32 KB)
📄
virt.py
(3.24 KB)
📄
virtualbox.py
(22.43 KB)
📄
vmware.py
(129.74 KB)
📄
vsan.py
(17.18 KB)
📄
vt.py
(30.25 KB)
📄
vt_helper.py
(4.4 KB)
📄
win_chcp.py
(3.7 KB)
📄
win_dacl.py
(94.69 KB)
📄
win_dotnet.py
(4.75 KB)
📄
win_functions.py
(12.69 KB)
📄
win_lgpo_auditpol.py
(8.48 KB)
📄
win_lgpo_netsh.py
(17.87 KB)
📄
win_network.py
(12.41 KB)
📄
win_osinfo.py
(2.83 KB)
📄
win_pdh.py
(13.85 KB)
📄
win_reg.py
(30.05 KB)
📄
win_runas.py
(10.55 KB)
📄
win_service.py
(5.2 KB)
📄
win_system.py
(14.47 KB)
📄
win_update.py
(40.36 KB)
📄
winapi.py
(818 B)
📄
xdg.py
(316 B)
📄
xmlutil.py
(13.91 KB)
📄
yaml.py
(348 B)
📄
yamldumper.py
(3.38 KB)
📄
yamlencoding.py
(1.55 KB)
📄
yamlloader.py
(6.21 KB)
📄
yamlloader_old.py
(8.33 KB)
📄
yast.py
(619 B)
📄
zeromq.py
(1.65 KB)
📄
zfs.py
(19.2 KB)
Editing: 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()))
Upload File
Create Folder