def _parse_set_weight_values(argvish): new_cmd_format, opts, args = validate_args(argvish) # We'll either parse the all-in-one-string format or the # --options format, # but not both. If both are specified, raise an error. try: devs = [] if not new_cmd_format: if len(args) % 2 != 0: print(Commands.set_weight.__doc__.strip()) exit(EXIT_ERROR) devs_and_weights = izip(islice(argvish, 0, len(argvish), 2), islice(argvish, 1, len(argvish), 2)) for devstr, weightstr in devs_and_weights: devs.extend( builder.search_devs(parse_search_value(devstr)) or []) weight = float(weightstr) _set_weight_values(devs, weight) else: if len(args) != 1: print(Commands.set_weight.__doc__.strip()) exit(EXIT_ERROR) devs.extend( builder.search_devs(parse_search_values_from_opts(opts)) or []) weight = float(args[0]) _set_weight_values(devs, weight) except ValueError as e: print(e) exit(EXIT_ERROR)
def _parse_remove_values(argvish): new_cmd_format, opts, args = validate_args(argvish) # We'll either parse the all-in-one-string format or the # --options format, # but not both. If both are specified, raise an error. try: devs = [] if len(args) > 0: if new_cmd_format: print(Commands.remove.__doc__.strip()) exit(EXIT_ERROR) for arg in args: devs.extend(builder.search_devs( parse_search_value(arg)) or []) else: devs.extend(builder.search_devs( parse_search_values_from_opts(opts))) return devs except ValueError as e: print(e) exit(EXIT_ERROR)
def _parse_set_weight_values(argvish): new_cmd_format, opts, args = validate_args(argvish) # We'll either parse the all-in-one-string format or the # --options format, # but not both. If both are specified, raise an error. try: devs = [] if not new_cmd_format: if len(args) % 2 != 0: print(Commands.set_weight.__doc__.strip()) exit(EXIT_ERROR) devs_and_weights = izip(islice(argvish, 0, len(argvish), 2), islice(argvish, 1, len(argvish), 2)) for devstr, weightstr in devs_and_weights: devs.extend(builder.search_devs( parse_search_value(devstr)) or []) weight = float(weightstr) _set_weight_values(devs, weight) else: if len(args) != 1: print(Commands.set_weight.__doc__.strip()) exit(EXIT_ERROR) devs.extend(builder.search_devs( parse_search_values_from_opts(opts)) or []) weight = float(args[0]) _set_weight_values(devs, weight) except ValueError as e: print(e) exit(EXIT_ERROR)
def _parse_remove_values(argvish): new_cmd_format, opts, args = validate_args(argvish) # We'll either parse the all-in-one-string format or the # --options format, # but not both. If both are specified, raise an error. try: devs = [] if len(args) > 0: if new_cmd_format: print Commands.remove.__doc__.strip() exit(EXIT_ERROR) for arg in args: devs.extend(builder.search_devs( parse_search_value(arg)) or []) else: devs.extend(builder.search_devs( parse_search_values_from_opts(opts))) return devs except ValueError as e: print e exit(EXIT_ERROR)
def _parse_set_info_values(argvish): new_cmd_format, opts, args = validate_args(argvish) # We'll either parse the all-in-one-string format or the # --options format, # but not both. If both are specified, raise an error. if not new_cmd_format: if len(args) % 2 != 0: print(Commands.search.__doc__.strip()) exit(EXIT_ERROR) searches_and_changes = izip(islice(argvish, 0, len(argvish), 2), islice(argvish, 1, len(argvish), 2)) for search_value, change_value in searches_and_changes: devs = builder.search_devs(parse_search_value(search_value)) change = {} change_value = calculate_change_value(change_value, change, 'ip', 'port') if change_value.startswith('R'): change_value = change_value[1:] change_value = calculate_change_value(change_value, change, 'replication_ip', 'replication_port') if change_value.startswith('/'): i = 1 while i < len(change_value) and change_value[i] != '_': i += 1 change['device'] = change_value[1:i] change_value = change_value[i:] if change_value.startswith('_'): change['meta'] = change_value[1:] change_value = '' if change_value or not change: raise ValueError('Invalid set info change value: %s' % repr(argvish[1])) _set_info_values(devs, change, opts) else: devs = builder.search_devs(parse_search_values_from_opts(opts)) change = parse_change_values_from_opts(opts) _set_info_values(devs, change, opts)
def _parse_search_values(argvish): new_cmd_format, opts, args = validate_args(argvish) # We'll either parse the all-in-one-string format or the # --options format, # but not both. If both are specified, raise an error. try: search_values = {} if len(args) > 0: if new_cmd_format or len(args) != 1: print(Commands.search.__doc__.strip()) exit(EXIT_ERROR) search_values = parse_search_value(args[0]) else: search_values = parse_search_values_from_opts(opts) return search_values except ValueError as e: print(e) exit(EXIT_ERROR)
def test_parse_search_values_from_opts(self): argv = \ ["--id", "1", "--region", "2", "--zone", "3", "--ip", "test.test.com", "--port", "6200", "--replication-ip", "r.test.com", "--replication-port", "7000", "--device", "sda3", "--meta", "some meta data", "--weight", "3.14159265359", "--change-ip", "change.test.test.com", "--change-port", "6201", "--change-replication-ip", "change.r.test.com", "--change-replication-port", "7001", "--change-device", "sdb3", "--change-meta", "some meta data for change"] expected = { 'id': 1, 'region': 2, 'zone': 3, 'ip': "test.test.com", 'port': 6200, 'replication_ip': "r.test.com", 'replication_port': 7000, 'device': "sda3", 'meta': "some meta data", 'weight': 3.14159265359, } new_cmd_format, opts, args = validate_args(argv) search_values = parse_search_values_from_opts(opts) self.assertEqual(search_values, expected) argv = \ ["--id", "1", "--region", "2", "--zone", "3", "--ip", "127.0.0.1", "--port", "6200", "--replication-ip", "127.0.0.10", "--replication-port", "7000", "--device", "sda3", "--meta", "some meta data", "--weight", "3.14159265359", "--change-ip", "127.0.0.2", "--change-port", "6201", "--change-replication-ip", "127.0.0.20", "--change-replication-port", "7001", "--change-device", "sdb3", "--change-meta", "some meta data for change"] expected = { 'id': 1, 'region': 2, 'zone': 3, 'ip': "127.0.0.1", 'port': 6200, 'replication_ip': "127.0.0.10", 'replication_port': 7000, 'device': "sda3", 'meta': "some meta data", 'weight': 3.14159265359, } new_cmd_format, opts, args = validate_args(argv) search_values = parse_search_values_from_opts(opts) self.assertEqual(search_values, expected) argv = \ ["--id", "1", "--region", "2", "--zone", "3", "--ip", "[127.0.0.1]", "--port", "6200", "--replication-ip", "[127.0.0.10]", "--replication-port", "7000", "--device", "sda3", "--meta", "some meta data", "--weight", "3.14159265359", "--change-ip", "[127.0.0.2]", "--change-port", "6201", "--change-replication-ip", "[127.0.0.20]", "--change-replication-port", "7001", "--change-device", "sdb3", "--change-meta", "some meta data for change"] new_cmd_format, opts, args = validate_args(argv) search_values = parse_search_values_from_opts(opts) self.assertEqual(search_values, expected)
def _parse_set_info_values(argvish): new_cmd_format, opts, args = validate_args(argvish) # We'll either parse the all-in-one-string format or the # --options format, # but not both. If both are specified, raise an error. if not new_cmd_format: if len(args) % 2 != 0: print(Commands.search.__doc__.strip()) exit(EXIT_ERROR) searches_and_changes = izip(islice(argvish, 0, len(argvish), 2), islice(argvish, 1, len(argvish), 2)) for search_value, change_value in searches_and_changes: devs = builder.search_devs(parse_search_value(search_value)) change = {} ip = '' if change_value and change_value[0].isdigit(): i = 1 while (i < len(change_value) and change_value[i] in '0123456789.'): i += 1 ip = change_value[:i] change_value = change_value[i:] elif change_value and change_value.startswith('['): i = 1 while i < len(change_value) and change_value[i] != ']': i += 1 i += 1 ip = change_value[:i].lstrip('[').rstrip(']') change_value = change_value[i:] if ip: change['ip'] = validate_and_normalize_ip(ip) if change_value.startswith(':'): i = 1 while i < len(change_value) and change_value[i].isdigit(): i += 1 change['port'] = int(change_value[1:i]) change_value = change_value[i:] if change_value.startswith('R'): change_value = change_value[1:] replication_ip = '' if change_value and change_value[0].isdigit(): i = 1 while (i < len(change_value) and change_value[i] in '0123456789.'): i += 1 replication_ip = change_value[:i] change_value = change_value[i:] elif change_value and change_value.startswith('['): i = 1 while i < len(change_value) and change_value[i] != ']': i += 1 i += 1 replication_ip = \ change_value[:i].lstrip('[').rstrip(']') change_value = change_value[i:] if replication_ip: change['replication_ip'] = \ validate_and_normalize_ip(replication_ip) if change_value.startswith(':'): i = 1 while i < len(change_value) and change_value[i].isdigit(): i += 1 change['replication_port'] = int(change_value[1:i]) change_value = change_value[i:] if change_value.startswith('/'): i = 1 while i < len(change_value) and change_value[i] != '_': i += 1 change['device'] = change_value[1:i] change_value = change_value[i:] if change_value.startswith('_'): change['meta'] = change_value[1:] change_value = '' if change_value or not change: raise ValueError('Invalid set info change value: %s' % repr(argvish[1])) _set_info_values(devs, change) else: devs = builder.search_devs(parse_search_values_from_opts(opts)) change = parse_change_values_from_opts(opts) _set_info_values(devs, change)
def _parse_set_info_values(argvish): new_cmd_format, opts, args = validate_args(argvish) # We'll either parse the all-in-one-string format or the # --options format, # but not both. If both are specified, raise an error. if not new_cmd_format: if len(args) % 2 != 0: print(Commands.search.__doc__.strip()) exit(EXIT_ERROR) searches_and_changes = izip(islice(argvish, 0, len(argvish), 2), islice(argvish, 1, len(argvish), 2)) for search_value, change_value in searches_and_changes: devs = builder.search_devs(parse_search_value(search_value)) change = {} ip = '' if len(change_value) and change_value[0].isdigit(): i = 1 while (i < len(change_value) and change_value[i] in '0123456789.'): i += 1 ip = change_value[:i] change_value = change_value[i:] elif len(change_value) and change_value[0] == '[': i = 1 while i < len(change_value) and change_value[i] != ']': i += 1 i += 1 ip = change_value[:i].lstrip('[').rstrip(']') change_value = change_value[i:] if ip: change['ip'] = validate_and_normalize_ip(ip) if change_value.startswith(':'): i = 1 while i < len(change_value) and change_value[i].isdigit(): i += 1 change['port'] = int(change_value[1:i]) change_value = change_value[i:] if change_value.startswith('R'): change_value = change_value[1:] replication_ip = '' if len(change_value) and change_value[0].isdigit(): i = 1 while (i < len(change_value) and change_value[i] in '0123456789.'): i += 1 replication_ip = change_value[:i] change_value = change_value[i:] elif len(change_value) and change_value[0] == '[': i = 1 while i < len(change_value) and change_value[i] != ']': i += 1 i += 1 replication_ip = \ change_value[:i].lstrip('[').rstrip(']') change_value = change_value[i:] if replication_ip: change['replication_ip'] = \ validate_and_normalize_ip(replication_ip) if change_value.startswith(':'): i = 1 while i < len(change_value) and change_value[i].isdigit(): i += 1 change['replication_port'] = int(change_value[1:i]) change_value = change_value[i:] if change_value.startswith('/'): i = 1 while i < len(change_value) and change_value[i] != '_': i += 1 change['device'] = change_value[1:i] change_value = change_value[i:] if change_value.startswith('_'): change['meta'] = change_value[1:] change_value = '' if change_value or not change: raise ValueError('Invalid set info change value: %s' % repr(argvish[1])) _set_info_values(devs, change) else: devs = builder.search_devs(parse_search_values_from_opts(opts)) change = parse_change_values_from_opts(opts) _set_info_values(devs, change)
def test_parse_search_values_from_opts(self): argv = \ ["--id", "1", "--region", "2", "--zone", "3", "--ip", "test.test.com", "--port", "6000", "--replication-ip", "r.test.com", "--replication-port", "7000", "--device", "sda3", "--meta", "some meta data", "--weight", "3.14159265359", "--change-ip", "change.test.test.com", "--change-port", "6001", "--change-replication-ip", "change.r.test.com", "--change-replication-port", "7001", "--change-device", "sdb3", "--change-meta", "some meta data for change"] expected = { 'id': 1, 'region': 2, 'zone': 3, 'ip': "test.test.com", 'port': 6000, 'replication_ip': "r.test.com", 'replication_port': 7000, 'device': "sda3", 'meta': "some meta data", 'weight': 3.14159265359, } new_cmd_format, opts, args = validate_args(argv) search_values = parse_search_values_from_opts(opts) self.assertEquals(search_values, expected) argv = \ ["--id", "1", "--region", "2", "--zone", "3", "--ip", "127.0.0.1", "--port", "6000", "--replication-ip", "127.0.0.10", "--replication-port", "7000", "--device", "sda3", "--meta", "some meta data", "--weight", "3.14159265359", "--change-ip", "127.0.0.2", "--change-port", "6001", "--change-replication-ip", "127.0.0.20", "--change-replication-port", "7001", "--change-device", "sdb3", "--change-meta", "some meta data for change"] expected = { 'id': 1, 'region': 2, 'zone': 3, 'ip': "127.0.0.1", 'port': 6000, 'replication_ip': "127.0.0.10", 'replication_port': 7000, 'device': "sda3", 'meta': "some meta data", 'weight': 3.14159265359, } new_cmd_format, opts, args = validate_args(argv) search_values = parse_search_values_from_opts(opts) self.assertEquals(search_values, expected) argv = \ ["--id", "1", "--region", "2", "--zone", "3", "--ip", "[127.0.0.1]", "--port", "6000", "--replication-ip", "[127.0.0.10]", "--replication-port", "7000", "--device", "sda3", "--meta", "some meta data", "--weight", "3.14159265359", "--change-ip", "[127.0.0.2]", "--change-port", "6001", "--change-replication-ip", "[127.0.0.20]", "--change-replication-port", "7001", "--change-device", "sdb3", "--change-meta", "some meta data for change"] new_cmd_format, opts, args = validate_args(argv) search_values = parse_search_values_from_opts(opts) self.assertEquals(search_values, expected)
def _parse_set_info_values(argvish): new_cmd_format, opts, args = validate_args(argvish) # We'll either parse the all-in-one-string format or the # --options format, # but not both. If both are specified, raise an error. if not new_cmd_format: if len(args) % 2 != 0: print(Commands.search.__doc__.strip()) exit(EXIT_ERROR) searches_and_changes = izip(islice(argvish, 0, len(argvish), 2), islice(argvish, 1, len(argvish), 2)) for search_value, change_value in searches_and_changes: devs = builder.search_devs(parse_search_value(search_value)) change = {} ip = "" if len(change_value) and change_value[0].isdigit(): i = 1 while i < len(change_value) and change_value[i] in "0123456789.": i += 1 ip = change_value[:i] change_value = change_value[i:] elif len(change_value) and change_value[0] == "[": i = 1 while i < len(change_value) and change_value[i] != "]": i += 1 i += 1 ip = change_value[:i].lstrip("[").rstrip("]") change_value = change_value[i:] if ip: change["ip"] = validate_and_normalize_ip(ip) if change_value.startswith(":"): i = 1 while i < len(change_value) and change_value[i].isdigit(): i += 1 change["port"] = int(change_value[1:i]) change_value = change_value[i:] if change_value.startswith("R"): change_value = change_value[1:] replication_ip = "" if len(change_value) and change_value[0].isdigit(): i = 1 while i < len(change_value) and change_value[i] in "0123456789.": i += 1 replication_ip = change_value[:i] change_value = change_value[i:] elif len(change_value) and change_value[0] == "[": i = 1 while i < len(change_value) and change_value[i] != "]": i += 1 i += 1 replication_ip = change_value[:i].lstrip("[").rstrip("]") change_value = change_value[i:] if replication_ip: change["replication_ip"] = validate_and_normalize_ip(replication_ip) if change_value.startswith(":"): i = 1 while i < len(change_value) and change_value[i].isdigit(): i += 1 change["replication_port"] = int(change_value[1:i]) change_value = change_value[i:] if change_value.startswith("/"): i = 1 while i < len(change_value) and change_value[i] != "_": i += 1 change["device"] = change_value[1:i] change_value = change_value[i:] if change_value.startswith("_"): change["meta"] = change_value[1:] change_value = "" if change_value or not change: raise ValueError("Invalid set info change value: %s" % repr(argvish[1])) _set_info_values(devs, change) else: devs = builder.search_devs(parse_search_values_from_opts(opts)) change = parse_change_values_from_opts(opts) _set_info_values(devs, change)