Esempio n. 1
0
    def test_ActionPath_dump(self):
        parser = ArgumentParser()
        parser.add_argument('--path', action=ActionPath(mode='fc'))
        cfg = parser.parse_string('path: path')
        self.assertEqual(parser.dump(cfg), 'path: path\n')

        parser = ArgumentParser()
        parser.add_argument('--paths', nargs='+', action=ActionPath(mode='fc'))
        cfg = parser.parse_args(['--paths', 'path1', 'path2'])
        self.assertEqual(parser.dump(cfg), 'paths:\n- path1\n- path2\n')
    def test_ActionJsonSchema(self):
        parser = ArgumentParser(prog='app', default_meta=False, error_handler=None)
        parser.add_argument('--op1',
            action=ActionJsonSchema(schema=schema1))
        parser.add_argument('--op2',
            action=ActionJsonSchema(schema=schema2))
        parser.add_argument('--op3',
            action=ActionJsonSchema(schema=schema3))
        parser.add_argument('--cfg',
            action=ActionConfigFile)

        op1_val = [1, 2, 3, 4]
        op2_val = {'k1': 'one', 'k2': 2, 'k3': 3.3}

        self.assertEqual(op1_val, parser.parse_args(['--op1', str(op1_val)]).op1)
        self.assertRaises(ParserError, lambda: parser.parse_args(['--op1', '[1, "two"]']))
        self.assertRaises(ParserError, lambda: parser.parse_args(['--op1', '[1.5, 2]']))

        self.assertEqual(op2_val, parser.parse_args(['--op2', str(op2_val)]).op2)
        self.assertEqual(17, parser.parse_args(['--op2', '{"k2": 2}']).op2['k3'])
        self.assertRaises(ParserError, lambda: parser.parse_args(['--op2', '{"k1": 1}']))
        self.assertRaises(ParserError, lambda: parser.parse_args(['--op2', '{"k2": "2"}']))
        self.assertRaises(ParserError, lambda: parser.parse_args(['--op2', '{"k4": 4}']))

        op1_file = os.path.join(self.tmpdir, 'op1.json')
        op2_file = os.path.join(self.tmpdir, 'op2.json')
        cfg1_file = os.path.join(self.tmpdir, 'cfg1.yaml')
        cfg3_file = os.path.join(self.tmpdir, 'cfg3.yaml')
        cfg2_str = 'op1:\n  '+str(op1_val)+'\nop2:\n  '+str(op2_val)+'\n'
        with open(op1_file, 'w') as f:
            f.write(str(op1_val))
        with open(op2_file, 'w') as f:
            f.write(str(op2_val))
        with open(cfg1_file, 'w') as f:
            f.write('op1:\n  '+op1_file+'\nop2:\n  '+op2_file+'\n')
        with open(cfg3_file, 'w') as f:
            f.write('op3:\n  n1:\n  - '+str(op2_val)+'\n')

        cfg = parser.parse_path(cfg1_file)
        self.assertEqual(op1_val, cfg['op1'])
        self.assertEqual(op2_val, cfg['op2'])

        cfg = parser.parse_string(cfg2_str)
        self.assertEqual(op1_val, cfg['op1'])
        self.assertEqual(op2_val, cfg['op2'])

        cfg = parser.parse_args(['--cfg', cfg3_file])
        self.assertEqual(op2_val, cfg.op3['n1'][0])
        parser.check_config(cfg, skip_none=True)

        if os.name == 'posix' and platform.python_implementation() == 'CPython':
            os.chmod(op1_file, 0)
            self.assertRaises(ParserError, lambda: parser.parse_path(cfg1_file))
Esempio n. 3
0
    def test_ActionOperators(self):
        parser = ArgumentParser(prog='app', error_handler=None)
        parser.add_argument('--le0', action=ActionOperators(expr=('<', 0)))
        parser.add_argument('--gt1.a.le4',
                            action=ActionOperators(expr=[('>', 1.0),
                                                         ('<=', 4.0)],
                                                   join='and',
                                                   type=float))
        parser.add_argument('--lt5.o.ge10.o.eq7',
                            action=ActionOperators(expr=[('<', 5), ('>=', 10),
                                                         ('==', 7)],
                                                   join='or',
                                                   type=int))

        def int_or_off(x):
            return x if x == 'off' else int(x)

        parser.add_argument('--ge0',
                            nargs=3,
                            action=ActionOperators(expr=('>=', 0)))

        self.assertEqual(1.5,
                         parser.parse_args(['--gt1.a.le4', '1.5']).gt1.a.le4)
        self.assertEqual(4.0,
                         parser.parse_args(['--gt1.a.le4', '4.0']).gt1.a.le4)
        self.assertRaises(ParserError,
                          lambda: parser.parse_args(['--gt1.a.le4', '1.0']))
        self.assertRaises(ParserError,
                          lambda: parser.parse_args(['--gt1.a.le4', '5.5']))

        self.assertEqual(
            1.5,
            parser.parse_string('gt1:\n  a:\n    le4: 1.5').gt1.a.le4)
        self.assertEqual(
            4.0,
            parser.parse_string('gt1:\n  a:\n    le4: 4.0').gt1.a.le4)
        self.assertRaises(
            ParserError,
            lambda: parser.parse_string('gt1:\n  a:\n    le4: 1.0'))
        self.assertRaises(
            ParserError,
            lambda: parser.parse_string('gt1:\n  a:\n    le4: 5.5'))

        self.assertEqual(
            1.5,
            parser.parse_env({
                'APP_GT1__A__LE4': '1.5'
            }).gt1.a.le4)
        self.assertEqual(
            4.0,
            parser.parse_env({
                'APP_GT1__A__LE4': '4.0'
            }).gt1.a.le4)
        self.assertRaises(ParserError,
                          lambda: parser.parse_env({'APP_GT1__A__LE4': '1.0'}))
        self.assertRaises(ParserError,
                          lambda: parser.parse_env({'APP_GT1__A__LE4': '5.5'}))

        self.assertEqual(
            2,
            parser.parse_args(['--lt5.o.ge10.o.eq7', '2']).lt5.o.ge10.o.eq7)
        self.assertEqual(
            7,
            parser.parse_args(['--lt5.o.ge10.o.eq7', '7']).lt5.o.ge10.o.eq7)
        self.assertEqual(
            10,
            parser.parse_args(['--lt5.o.ge10.o.eq7', '10']).lt5.o.ge10.o.eq7)
        self.assertRaises(
            ParserError,
            lambda: parser.parse_args(['--lt5.o.ge10.o.eq7', '5']))
        self.assertRaises(
            ParserError,
            lambda: parser.parse_args(['--lt5.o.ge10.o.eq7', '8']))

        self.assertEqual([0, 1, 2],
                         parser.parse_args(['--ge0', '0', '1', '2']).ge0)

        self.assertRaises(
            ValueError,
            lambda: parser.add_argument('--op1', action=ActionOperators))
        action = ActionOperators(expr=('<', 0))
        self.assertRaises(
            ValueError,
            lambda: parser.add_argument('--op2', type=float, action=action))
        self.assertRaises(
            ValueError,
            lambda: parser.add_argument('--op3', nargs=0, action=action))
        self.assertRaises(ValueError, lambda: ActionOperators())
        self.assertRaises(ValueError, lambda: ActionOperators(expr='<'))
        self.assertRaises(
            ValueError,
            lambda: ActionOperators(expr=[('<', 5), ('>=', 10)], join='xor'))
Esempio n. 4
0
def main(config_string):
    logger.debug("Parsing arguments...")
    parser = ArgumentParser()
    parser.add_argument('--cfg', action=ActionConfigFile)
    parser.add_argument('--lang',
                        choices=['eng', 'nl'],
                        nargs='?',
                        default='nl',
                        help='The language you want to hear.')
    parser.add_argument(
        '--duration_breath',
        type=int,
        default=0,
        help=
        'Number of seconds that Tessa takes a breath before announcing the next exercise.'
    )
    parser.add_argument('--max_times',
                        type=int,
                        default=3,
                        help='The number of exercises per day.')
    parser.add_argument(
        '--warn_before',
        type=int,
        default=6,
        help='Seconds, before exercise starts, you get a warning.')
    parser.add_argument('--duration_exercise',
                        action=ActionOperators(expr=('>', 15)),
                        default=20,
                        help='Seconds, duration of exercise.')
    parser.add_argument('--music.dir',
                        action=ActionPath(mode='dr'),
                        default=Path(os.path.join(
                            str(libPath.home()),
                            'Music/iTunes/iTunes Media/Music'),
                                     mode='dr'),
                        help='The root folder of your music files.')
    parser.add_argument(
        '--music.vol',
        type=float,
        default=0.19,
        help=
        'The volume of the music (exponential scale, where 0 is silent, 1 is normal, up to 255 for very loud.'
    )
    parser.add_argument(
        '--finished_work_at',
        type=int,
        default=19,
        help='When are you finished with work and want to stop exercises.')
    parser.add_argument(
        '--min_pause',
        type=int,
        default=0,
        help='Minutes, minimum how long your break between exercises takes.')
    parser.add_argument(
        '--max_pause',
        type=int,
        default=0,
        help='Minutes, maximum how long your break between exercises takes.')
    parser.add_argument(
        '--silent',
        action=ActionYesNo,
        default=False,
        help=
        'Wether you want to run Tessa in silent mode. Music is played anyway.')
    parser.add_argument(
        '--skip_intro',
        action=ActionYesNo,
        default=True,
        help='If you want to restart Tessa and skip the intro.')
    args = parser.parse_string(config_string)

    speech = Speech(args)
    music = Music(args)
    start(args, speech, music)