예제 #1
0
    def test_size_calc_convert(self):
        self.assertEqual(10485760,
                         SizeCalc.auto_convert("10M", SizeCalc.UNIT_B))
        self.assertEqual(10485760,
                         SizeCalc.auto_convert("10MiB", SizeCalc.UNIT_B))
        self.assertEqual(10000000,
                         SizeCalc.auto_convert("10MB", SizeCalc.UNIT_B))

        self.assertEqual(3221225472,
                         SizeCalc.auto_convert("3Gib", SizeCalc.UNIT_B))
        self.assertEqual(3145728,
                         SizeCalc.auto_convert("3Gib", SizeCalc.UNIT_KiB))
예제 #2
0
    def parse_opts(cls, new_args, object_name):
        modify = {}
        deletes = []
        for arg in new_args:
            value = new_args[arg]
            is_unset = arg.startswith(cls.unsetprefix)
            prop_name = arg[len(cls.unsetprefix) + 1:] if is_unset else arg
            option = cls.drbd_options[object_name][prop_name]

            key = option['key']
            if is_unset:
                deletes.append(key)
            else:
                if 'bytes' in option and option['unit'] == 'bytes':
                    value = SizeCalc.auto_convert(value, SizeCalc.UNIT_B)
                    if option['min'] < value < option['max']:
                        value = str(value)
                    else:
                        raise argparse.ArgumentTypeError(
                            prop_name +
                            " value {v} is out of range [{mi}-{ma}]".format(
                                v=value, mi=option['min'], ma=option['max']))
                modify[key] = str(value)

        return modify, deletes
예제 #3
0
    def parse_opts(cls, new_args, object_name):
        modify = {}
        deletes = []
        for arg in new_args:
            is_unset = arg.startswith(cls.unsetprefix)
            value = new_args[arg]
            prop_name = arg[len(cls.unsetprefix) + 1:] if is_unset else arg
            if prop_name.startswith(
                    "drbd-") and prop_name[5:] in cls.CLASH_OPTIONS:
                prop_name = prop_name[5:]
            option = cls.drbd_options[object_name][prop_name]

            key = option['key']
            if is_unset:
                deletes.append(key)
            else:
                if DrbdOptions._is_byte_unit(option):
                    unit = SizeCalc.UNIT_KiB if option.get(
                        'unit_prefix') == 'k' else SizeCalc.UNIT_B
                    value = SizeCalc.auto_convert(value, unit)
                    if option['min'] <= value <= option['max']:
                        value = str(value)
                    else:
                        raise ArgumentError(
                            prop_name +
                            " value {v}{u} is out of range [{mi}-{ma}]".format(
                                v=value,
                                u=SizeCalc.unit_to_str(unit),
                                mi=str(option['min']) +
                                option.get('unit_prefix', ''),
                                ma=str(option['max']) +
                                option.get('unit_prefix', '')))
                modify[key] = str(value)

        return modify, deletes