Source code for reemote.utilities.parse_kwargs_string
# Copyright (c) 2025 Kim Jarvis TPF Software Services S.A. kim.jarvis@tpfsystems.com # This software is licensed under the MIT License. See the LICENSE file for details.#importast
[docs]defparse_kwargs_string(param_str):"""Parses a string of comma-separated key-value pairs into a dictionary. This function is designed to interpret a string like 'key=value,key2=value2' and convert it into a Python dictionary. It uses `ast.literal_eval` to safely parse the value part of each pair, allowing it to correctly handle various Python literal types. Key features include: - Parsing integers, floats, booleans, `None`, and quoted strings. - Handling list literals, even with commas inside (e.g., `items=[1,2,3]`). - Using a regular expression to robustly split key-value pairs. - Defaulting to a plain string for values that cannot be evaluated (e.g., an unquoted string like `color=red`). Args: param_str (str): The input string containing key-value pairs. For example: "count=10,is_active=True,names=['A','B']". Returns: dict: A dictionary where keys are the parameter names and values are the parsed Python objects. Returns an empty dictionary if the input string is empty. """ifnotparam_str:return{}kwargs={}# Use regex to split key-value pairs while respecting quoted values and listsimportrepattern=r'(\w+)=((?:\[[^\]]*\]|[^,])+)'matches=re.findall(pattern,param_str)forkey,value_strinmatches:key=key.strip()value_str=value_str.strip()# Safely evaluate the value (handles True, False, None, numbers, strings, lists)try:value=ast.literal_eval(value_str)except(ValueError,SyntaxError):# Fallback: treat as string if literal_eval failsvalue=value_strkwargs[key]=valuereturnkwargs