in mysql-connector-python/cpydist/utils.py [0:0]
def _parse_mysql_info_line(line):
"""Parse a command line.
This will never be perfect without special knowledge about all possible
command lines "mysql_config" might output. But it should be close enough
for our usage.
"""
args = shlex.split(line)
# Find out what kind of argument it is first,
# if starts with "--", "-" or nothing
pre_parsed_line = []
for arg in args:
re_obj = re.search(r"^(--|-|)(.*)", arg)
pre_parsed_line.append(re_obj.group(1, 2))
parsed_line = []
while pre_parsed_line:
(type1, opt1) = pre_parsed_line.pop(0)
if "=" in opt1:
# One of "--key=val", "-key=val" or "key=val"
parsed_line.append(tuple(opt1.split("=", 1)))
elif type1:
# We have an option that might have a value
# in the next element in the list
if pre_parsed_line:
(type2, opt2) = pre_parsed_line[0]
if type2 == "" and "=" not in opt2:
# Value was in the next list element
parsed_line.append((opt1, opt2))
pre_parsed_line.pop(0)
continue
if type1 == "--":
# If "--" and no argument then it is an option like "--fast"
parsed_line.append(opt1)
else:
# If "-" (and no "=" handled above) then it is a
# traditional one character option name that might
# have a value
val = opt1[1:]
if val:
parsed_line.append((opt1[:1], val))
else:
parsed_line.append(opt1)
else:
LOGGER.warning("Could not handle '%s' in '%s'", opt1, line)
return parsed_line