def link(self, src, dst, type, args, delete=False, **kwargs): """Create, replace, or delete a link.""" if delete: self.api.Edge.delete(src, dst) else: key_values = parse.parse_key_values(" ".join(args)) return self.api.Edge.create(src, dst, type=type, **key_values)
def test_parse_key_values(): TestData = namedtuple("TestData", ["input", "out"]) testcases = ( TestData("", {}), TestData("body=", {"body": ""}), TestData("body= cats=two", {"body": "", "cats": "two"}), TestData("body=I don't know what to do with my hands", {"body": "I don't know what to do with my hands"}), TestData("line1=I think line2=My fear's come true", {"line1": "I think", "line2": "My fear's come true"}), TestData("tag1= key1=value1 tag2=", {"tag1": "", "tag2": "", "key1": "value1"}), ) for case in testcases: obs = parse.parse_key_values(case.input) assert case.out == obs
def _parse_name_kvs(self, args): """Parses the node name as a special-case. Example:: atomic <cmd> <name w/ optional spaces> key1=value one key2=... Args: args (List[str]): List of strings, such as what :func:`shlex.split` would produce. Returns: dict: Dictionary containing a 'name' key, if present, and a any and all parsed key-values and tags. """ line = " ".join(args) # Rejoin args for regex parsing name = parse.parse_non_kv(line) kvs = parse.parse_key_values(line[len(name) :]) if name: kvs.setdefault("name", name) return kvs