def split_env_items(env_string): '''Splits space-separated variable assignments into a list of individual assignments. >>> split_env_items('VAR=abc') ['VAR=abc'] >>> split_env_items('VAR="a string" THING=3') ['VAR="a string"', 'THING=3'] >>> split_env_items('VAR="a string" THING=\\'single "quotes"\\'') ['VAR="a string"', 'THING=\\'single "quotes"\\''] >>> split_env_items('VAR="dont \\\\"forget\\\\" about backslashes"') ['VAR="dont \\\\"forget\\\\" about backslashes"'] >>> split_env_items('PATH="$PATH;/opt/cibw_test_path"') ['PATH="$PATH;/opt/cibw_test_path"'] >>> split_env_items('PATH2="something with spaces"') ['PATH2="something with spaces"'] ''' if not env_string: return [] command_node = bashlex.parsesingle(env_string) result = [] for word_node in command_node.parts: part_string = env_string[word_node.pos[0]:word_node.pos[1]] result.append(part_string) return result
def evaluate(value, environment): if not value: # empty string evaluates to empty string # (but trips up bashlex) return '' command_node = bashlex.parsesingle(value) if len(command_node.parts) != 1: raise ValueError('"%s" has too many parts' % value) value_word_node = command_node.parts[0] return evaluate_node(value_word_node, context=NodeExecutionContext(environment=environment, input=value))
def evaluate(value: str, environment: Dict[str, str], executor: Optional[EnvironmentExecutor] = None) -> str: if not value: # empty string evaluates to empty string # (but trips up bashlex) return '' command_node = bashlex.parsesingle(value) if len(command_node.parts) != 1: raise ValueError(f'"{value}" has too many parts') value_word_node = command_node.parts[0] return evaluate_node(value_word_node, context=NodeExecutionContext( environment=environment, input=value, executor=executor or local_environment_executor))