def size_callback(option, opt_str, value, parser): """Parse width, height, size options to Size.""" largs_callback(option, opt_str, value, parser) # TODO: allow relative size, and absolute size try: if option.dest == 'width': width = Size.parse_value(value) size = Size(width, 0) elif option.dest == 'height': height = Size.parse_value(value) size = Size(0, height) elif option.dest == 'size': size = Size.parse(*value) except (ValueError, TypeError): msg = 'option %s: error parsing Size value: %s' % (opt_str, value) raise optparse.OptionValueError(msg) setattr(parser.values, option.dest, size)
def test_parse_value(self): self.assertEqual(Size.parse_value('FULL'), 1.0) self.assertEqual(Size.parse_value('F'), 1.0) self.assertEqual(Size.parse_value('1'), 1.0) self.assertEqual(Size.parse_value('1.0'), 1.0) self.assertEqual(Size.parse_value('H+H'), 1.0) self.assertEqual(Size.parse_value('H+0.5'), 1.0) self.assertEqual(Size.parse_value('0.25*4'), 1.0) self.assertEqual(Size.parse_value('Q*4'), 1.0) self.assertEqual(Size.parse_value('0.25*2+H'), 1.0) self.assertEqual(Size.parse_value('8*HALF/4'), 1.0) self.assertEqual(Size.parse_value('8*HALF/2-FULL'), 1.0) self.assertEqual(Size.parse_value('HALF'), 0.5) self.assertEqual(Size.parse_value('H'), 0.5) self.assertEqual(Size.parse_value('0.5'), 0.5) self.assertEqual(Size.parse_value('THIRD'), 1.0/3) self.assertEqual(Size.parse_value('T'), 1.0/3) self.assertEqual(Size.parse_value('QUARTER'), 0.25) self.assertEqual(Size.parse_value('Q'), 0.25) self.assertEqual(Size.parse_value('0.25'), 0.25) self.assertEqual(Size.parse_value('HALF,FULL'), [0.5, 1]) self.assertEqual(Size.parse_value(''), None) self.assertEqual(Size.parse_value(' '), None) self.assertRaises(ValueError, Size.parse_value, 'fasdfa')