Beispiel #1
0
 def test_default_evaluate_arguments(self):
     old_argv = sys.argv
     enc = sys.stdin.encoding or sys.getdefaultencoding()
     sys.argv = [s.encode(enc) for s in [u'script_name', u'foo', u'bar']]
     p = Parser()
     self.assertEqual(p.evaluate(), ({}, [u'foo', u'bar']))
     sys.argv = old_argv
Beispiel #2
0
 def test_options(self):
     class TestDeclarative(Command):
         spam = Option('a', 'asomething')
         eggs = Option('b', 'bsomething')
     a = TestDeclarative()
     b = Command(options={
         'spam': Option('a', 'asomething'),
         'eggs': Option('b', 'bsomething')})
     for c in [a, b]:
         p = Parser(commands=dict(c=c))
         self.assertEqual(
             p.evaluate([u'c', u'-a', u'foo']),
             ({'c': ({'spam': u'foo'}, [])}, [])
         )
         self.assertEqual(
             p.evaluate([u'c', u'--asomething', u'foo']),
             ({'c': ({'spam': u'foo'}, [])}, [])
         )
         self.assertEqual(
             p.evaluate([u'c', u'-b', u'foo']),
             ({'c': ({u'eggs': u'foo'}, [])}, [])
         )
         self.assertEqual(
             p.evaluate([u'c', u'--bsomething', u'foo']),
             ({'c': ({u'eggs': u'foo'}, [])}, [])
         )
Beispiel #3
0
 def test_evaluate_no_quotes(self):
     o = MultipleOptions(short='o')
     p = Parser(options=dict(o=o))
     self.assertEqual(
         p.evaluate([u'-o', u'foo,bar,baz']),
         ({'o': [u'foo', u'bar', u'baz']}, [])
     )
Beispiel #4
0
    def test_disallow_abbreviated_commands(self):
        class NewCommand(Command):
            allow_abbreviated_commands = False

        c = NewCommand(commands={'foo': Command()})
        p = Parser(commands=dict(c=c))
        self.assertEqual(p.evaluate([u'c', u'f']), ({'c': ({}, [u'f'])}, []))
Beispiel #5
0
 def test_evaluate(self):
     o = BooleanOption(short="b")
     p = Parser(options=dict(b=o))
     self.assertEqual(p.evaluate([u'-b']), ({'b': True}, []))
     o = BooleanOption(short="b", default=True)
     p = Parser(options=dict(b=o))
     self.assertEqual(p.evaluate(['-b']), ({'b': False}, []))
Beispiel #6
0
 def test_default_evaluate_arguments(self):
     old_argv = sys.argv
     enc = sys.stdin.encoding or sys.getdefaultencoding()
     sys.argv = [s.encode(enc) for s in [u'script_name', u'foo', u'bar']]
     p = Parser()
     self.assertEqual(p.evaluate(), ({}, [u'foo', u'bar']))
     sys.argv = old_argv
Beispiel #7
0
 def test_disallow_abbreviated_commands(self):
     class NewCommand(Command):
         allow_abbreviated_commands = False
     c = NewCommand(commands={
         'foo': Command()
     })
     p = Parser(commands=dict(c=c))
     self.assertEqual(p.evaluate([u'c', u'f']), ({'c': ({}, [u'f'])}, []))
Beispiel #8
0
 def test_evaluate_with_quotes(self):
     o = MultipleOptions(short='o')
     p = Parser(options=dict(o=o))
     self.assertEqual(p.evaluate([u'-o', u'foo,"bar,baz"']), ({
         'o': [u'foo', u'bar,baz']
     }, []))
     self.assertEqual(p.evaluate([u'-o', u'"foo,bar",baz']), ({
         'o': [u'foo,bar', u'baz']
     }, []))
Beispiel #9
0
 def test_remaining_arguments(self):
     c = Command(options={'a': Option('a')})
     p = Parser(commands=dict(c=c))
     self.assertEqual(
         p.evaluate([u'c', u'foo']),
         ({'c': ({}, [u'foo'])}, [])
     )
     self.assertEqual(
         p.evaluate([u'c', u'-a', u'foo']),
         ({'c': ({'a': u'foo'}, [])}, [])
     )
     self.assertEqual(
         p.evaluate([u'c', u'-a', u'foo', u'bar']),
         ({u'c': ({'a': u'foo'}, [u'bar'])}, [])
     )
Beispiel #10
0
 def test_remaining_arguments(self):
     c = Command(options={'a': Option('a')})
     p = Parser(commands=dict(c=c))
     self.assertEqual(p.evaluate([u'c', u'foo']), ({
         'c': ({}, [u'foo'])
     }, []))
     self.assertEqual(p.evaluate([u'c', u'-a', u'foo']), ({
         'c': ({
             'a': u'foo'
         }, [])
     }, []))
     self.assertEqual(p.evaluate([u'c', u'-a', u'foo', u'bar']), ({
         u'c': ({
             'a': u'foo'
         }, [u'bar'])
     }, []))
Beispiel #11
0
 def test_commands_and_options(self):
     p = Parser(options={'foo': Option('f')},
                commands={'bar': Command()},
                out_file=self.out_file)
     self.assertRaises(SystemExit, p.evaluate, [u'help'])
     output = self.out_file.getvalue()
     self.assertContains(output, u'usage: script [options] [commands]')
Beispiel #12
0
 def test_positionals(self):
     p = Parser(positionals=[Positional('a'),
                             Positional('b')],
                out_file=self.out_file)
     self.assertRaises(SystemExit, p.evaluate, [u'help'])
     output = self.out_file.getvalue()
     self.assertContains(output, u'usage: script a b')
Beispiel #13
0
    def test_abbreviations(self):
        c = Command(
            options={
                'stack': Option(long='stack'),
                'stash': Option(long='stash')},
            commands={
                'stack': Command(),
                'stash': Command()})

        p = Parser(commands=dict(c=c))
        cp = [u'script_name']
        for s in [u's', u'st', u'sta']:
            cmd = [u'c', s]
            result = ({'c': ({}, [s])}, [])
            self.assertEqual(p.evaluate(cmd), result)
            self.assertEqual(p.evaluate(cmd), result)
            self.assertEqual(p.evaluate(cmd), result)

        self.assertEqual(
            p.evaluate([u'c', u'stac']),
            ({'c': ({u'stack': ({}, [])}, [])}, [])
        )
        self.assertEqual(
            p.evaluate([u'c', u'stas']),
            ({'c': ({u'stash': ({}, [])}, [])}, [])
        )
        self.assertEqual(
            p.evaluate([u'c', u'--stac', u'foo']),
            ({'c': ({u'stack': u'foo'}, [])}, [])
        )
        self.assertEqual(
            p.evaluate([u'c', u'--stas', u'foo']),
            ({'c': ({u'stash': u'foo'}, [])}, [])
        )
Beispiel #14
0
 def test_commands(self):
     class TestDeclarative(Command):
         spam = Command()
         eggs = Command()
     a = TestDeclarative()
     b = Command(commands={
         'spam': Command(),
         'eggs': Command()})
     cp = [u'script_name']
     for c in [a, b]:
         p = Parser(commands=dict(c=c))
         self.assertEqual(
             p.evaluate([u'c', u'spam']),
             ({'c': ({u'spam': ({}, [])}, [])}, [])
         )
         self.assertEqual(
             p.evaluate([u'c', u'eggs']),
             ({'c': ({'eggs': ({}, [])}, [])}, [])
         )
Beispiel #15
0
    def test_commands(self):
        class TestDeclarative(Command):
            spam = Command()
            eggs = Command()

        a = TestDeclarative()
        b = Command(commands={'spam': Command(), 'eggs': Command()})
        cp = [u'script_name']
        for c in [a, b]:
            p = Parser(commands=dict(c=c))
            self.assertEqual(p.evaluate([u'c', u'spam']), ({
                'c': ({
                    u'spam': ({}, [])
                }, [])
            }, []))
            self.assertEqual(p.evaluate([u'c', u'eggs']), ({
                'c': ({
                    'eggs': ({}, [])
                }, [])
            }, []))
Beispiel #16
0
 def test_positional_arguments(self):
     p = Parser(positionals=[
         Positional(u'foo'),
         Positional(u'bar', short_description=u'something')
     ],
                out_file=self.out_file)
     self.assertRaises(SystemExit, p.evaluate, [u'help'])
     output = self.out_file.getvalue()
     self.assertContainsAll(output, [
         u'usage: script foo bar', u'Positional arguments:', u' foo',
         u'No short description.', u' bar', u'something'
     ])
Beispiel #17
0
 def test_evaluate(self):
     o = BooleanOption(short="b")
     p = Parser(options=dict(b=o))
     self.assertEqual(p.evaluate([u'-b']), ({'b': True}, []))
     o = BooleanOption(short="b", default=True)
     p = Parser(options=dict(b=o))
     self.assertEqual(p.evaluate(['-b']), ({'b': False}, []))
Beispiel #18
0
    def test_options(self):
        class TestDeclarative(Command):
            spam = Option('a', 'asomething')
            eggs = Option('b', 'bsomething')

        a = TestDeclarative()
        b = Command(options={
            'spam': Option('a', 'asomething'),
            'eggs': Option('b', 'bsomething')
        })
        for c in [a, b]:
            p = Parser(commands=dict(c=c))
            self.assertEqual(p.evaluate([u'c', u'-a', u'foo']), ({
                'c': ({
                    'spam': u'foo'
                }, [])
            }, []))
            self.assertEqual(p.evaluate([u'c', u'--asomething', u'foo']), ({
                'c': ({
                    'spam': u'foo'
                }, [])
            }, []))
            self.assertEqual(p.evaluate([u'c', u'-b', u'foo']), ({
                'c': ({
                    u'eggs': u'foo'
                }, [])
            }, []))
            self.assertEqual(p.evaluate([u'c', u'--bsomething', u'foo']), ({
                'c': ({
                    u'eggs': u'foo'
                }, [])
            }, []))
Beispiel #19
0
 def test_options(self):
     p = Parser(options={
         'foo': Option('f'),
         'bar': Option(long='bar'),
         'baz': Option('b', 'baz')
     },
                out_file=self.out_file)
     self.assertRaises(SystemExit, p.evaluate, [u'help'])
     output = self.out_file.getvalue()
     self.assertContainsAll(output, [
         u'usage: script [options]', u'Options:', u' -f', u' --bar',
         u' -b --baz'
     ])
Beispiel #20
0
 def test_getattr(self):
     p = Parser(options={'activate': Option('a')},
                commands={
                    'foo':
                    Command(options={
                        'spam': Option('b'),
                        'eggs': Option('c')
                    })
                })
     p.activate
     p.foo
     p.foo.spam
     p.foo.eggs
Beispiel #21
0
 def test_commands(self):
     p = Parser(commands={
         'foo': Command(short_description=u'foo description'),
         'bar': Command(short_description=u'bar description')
     },
                description=u'The script description',
                out_file=self.out_file)
     self.assertRaises(SystemExit, p.evaluate, [u'help'])
     output = self.out_file.getvalue()
     self.assertContainsAll(output, [
         u'usage: script [commands]', p.long_description, u'Commands:',
         u' foo', p.commands['foo'].short_description, u' bar',
         p.commands['bar'].short_description
     ])
Beispiel #22
0
 def test_alternative_options(self):
     p = Parser(options={
         'stack': Option(long='stack'),
         'stash': Option(long='stash')
     },
                out_file=self.out_file)
     for option in [u'--s', u'--st', u'--sta']:
         self.assertRaises(SystemExit, p.evaluate, [option])
         output = self.out_file.getvalue()
         self.assertContains(output, u'usage: script [options]')
         self.assertContains(
             output,
             u'option "{0}" does not exist, did you mean?'.format(option))
         self.assertContains(output, u'--stack')
         self.assertContains(output, u'--stash')
Beispiel #23
0
 def test_alternative_commands(self):
     p = Parser(commands={
         'stack': Command(),
         'stash': Command(),
     },
                out_file=self.out_file,
                takes_arguments=False)
     for cmd in [u's', u'st', u'sta']:
         self.assertRaises(SystemExit, p.evaluate, [cmd])
         output = self.out_file.getvalue()
         self.assertContains(output, u'usage: script [commands]')
         self.assertContains(
             output,
             u'command "{0}" does not exist, did you mean?'.format(cmd))
         self.assertContains(output, u'stack')
         self.assertContains(output, u'stash')
Beispiel #24
0
 def test_commands_and_options(self):
     p = Parser(commands={
         'spam': Command(),
         'eggs': Command()
     },
                options={
                    'foo': Option('f'),
                    'bar': Option('b')
                },
                out_file=self.out_file)
     self.assertRaises(SystemExit, p.evaluate, [u'help'])
     output = self.out_file.getvalue()
     self.assertContainsAll(output, [
         u'usage: script [options] [commands]', u'Commands:', u' spam',
         u' eggs', u'Options:', u' -f', u' -b'
     ])
Beispiel #25
0
 def test_dynamically_adding_nodes(self):
     p = Parser()
     p.commands['foo'] = Command()
     p.commands['foo'].options['a'] = BooleanOption('a')
     p.options['bar'] = Option('b')
     self.assertEquals(p.evaluate([u'-b', u'spam']), ({'bar': u'spam'}, []))
     self.assertEquals(p.evaluate([u'foo']), ({
         'foo': ({
             'a': False
         }, [])
     }, []))
     self.assertEquals(p.evaluate([u'foo', u'-a']), ({
         'foo': ({
             'a': True
         }, [])
     }, []))
Beispiel #26
0
 def test_dynamically_adding_nodes(self):
     p = Parser()
     p.commands['foo'] = Command()
     p.commands['foo'].options['a'] = BooleanOption('a')
     p.options['bar'] = Option('b')
     self.assertEquals(p.evaluate([u'-b', u'spam']), ({'bar': u'spam'}, []))
     self.assertEquals(
         p.evaluate([u'foo']),
         ({'foo': ({'a': False}, [])}, [])
     )
     self.assertEquals(
         p.evaluate([u'foo', u'-a']),
         ({'foo': ({'a': True}, [])}, [])
     )
Beispiel #27
0
    def test_abbreviations(self):
        c = Command(options={
            'stack': Option(long='stack'),
            'stash': Option(long='stash')
        },
                    commands={
                        'stack': Command(),
                        'stash': Command()
                    })

        p = Parser(commands=dict(c=c))
        cp = [u'script_name']
        for s in [u's', u'st', u'sta']:
            cmd = [u'c', s]
            result = ({'c': ({}, [s])}, [])
            self.assertEqual(p.evaluate(cmd), result)
            self.assertEqual(p.evaluate(cmd), result)
            self.assertEqual(p.evaluate(cmd), result)

        self.assertEqual(p.evaluate([u'c', u'stac']), ({
            'c': ({
                u'stack': ({}, [])
            }, [])
        }, []))
        self.assertEqual(p.evaluate([u'c', u'stas']), ({
            'c': ({
                u'stash': ({}, [])
            }, [])
        }, []))
        self.assertEqual(p.evaluate([u'c', u'--stac', u'foo']), ({
            'c': ({
                u'stack': u'foo'
            }, [])
        }, []))
        self.assertEqual(p.evaluate([u'c', u'--stas', u'foo']), ({
            'c': ({
                u'stash': u'foo'
            }, [])
        }, []))
Beispiel #28
0
 def make_test(self, range, o):
     p = Parser(options=dict(o=o))
     for i in range:
         self.assertEqual(p.evaluate([u'-o', unicode(i)]), ({'o': i}, []))
Beispiel #29
0
 def test_nonexisting_short_option(self):
     p = Parser(out_file=self.out_file)
     self.assertRaises(SystemExit, p.evaluate, [u'-f'])
     output = self.out_file.getvalue()
     self.assertContains(output, u'usage: script')
     self.assertContains(output, u'option "-f" does not exist')
Beispiel #30
0
 def make_test(self, range, p):
     parser = Parser(positionals=[p])
     for i in range:
         self.assertEqual(parser.evaluate([unicode(i)]), ({}, [i]))
Beispiel #31
0
 def test_nonexisting_command(self):
     p = Parser(out_file=self.out_file, takes_arguments=False)
     self.assertRaises(SystemExit, p.evaluate, [u'foo'])
     output = self.out_file.getvalue()
     self.assertContains(output, u'usage: script')
     self.assertContains(output, u'command "foo" does not exist')
Beispiel #32
0
 def make_test(self, range, p):
     parser = Parser(positionals=[p])
     for i in range:
         self.assertEqual(parser.evaluate([unicode(i)]), ({}, [i]))
Beispiel #33
0
 def test_evaluate(self):
     p = Parser(positionals=[Positional('foo')])
     self.assertEquals(p.evaluate([u'spam']), ({}, [u'spam']))
#!/usr/bin/env python
# -*- coding: utf-8 -*-

from opts import Parser, Option
import ConfigParser, os, sys, datetime, subprocess

parser = Parser(description=u"Mail autoresponse filter for postfix", options={
    "sender": Option("s", "sender",
        short_description=u"Sender of the mail"),
    "user": Option("r", "recipient",
        short_description=u"Recipient of the mail"),
    "sasl": Option("S", "sasl-username",
        short_description=u"SASL username"),
    "clientIP": Option("i", "client-ip",
        short_description=u"Client IP address (optional))"),
    "configFile": Option("c", "config",
        short_description=u"Config file to read (default '/etc/autoresponder.conf')",
        default="/etc/autoresponder.conf")
})

# parse command line
settings, arguments = parser.evaluate()
if (len(settings.keys()) == 0):
    parser.evaluate(["help"])

# user name
try:
    userName = settings["user"]
except KeyError:
    print "You have to define a user by using -r or --recipient"
    exit(1)
Beispiel #35
0
 def make_test(self, range, o):
     p = Parser(options=dict(o=o))
     for i in range:
         self.assertEqual(p.evaluate([u'-o', unicode(i)]), ({'o': i}, []))
Beispiel #36
0
 def test_only_commands(self):
     p = Parser(commands={'foo': Command()}, out_file=self.out_file)
     self.assertRaises(SystemExit, p.evaluate, [u'help'])
     output = self.out_file.getvalue()
     self.assertContains(output, u'usage: script [commands]')
Beispiel #37
0
def main():
    parser = Parser()
    config = parser.config

    for param, value in config.__dict__.items():
        print(param + '.' * (50 - len(param) - len(str(value))) + str(value))
    print()

    # Load previous checkpoint if it exists
    checkpoint = load_latest(config)

    # Create model
    model = load_model(config, checkpoint)

    # print number of parameters in the model
    n_params = sum([param.view(-1).size()[0] for param in model.parameters()])
    print('Total number of parameters: \33[91m{}\033[0m'.format(n_params))

    # Load train and test data
    train_loader, valid_loader, test_loader = Loader(config)

    n_batches = int(len(train_loader.dataset.train_data) / config.batch_size)

    # save the configuration
    with open(os.path.join(config.save, 'log.txt'), 'w') as file:
        json.dump('json_stats: ' + str(config.__dict__), file)

    # Instantiate the criterion, optimizer and learning rate scheduler
    criterion = torch.nn.CrossEntropyLoss(size_average=True)

    optimizer = torch.optim.SGD(model.parameters(),
                                lr=config.LR,
                                momentum=config.momentum,
                                weight_decay=config.weight_decay,
                                nesterov=config.nesterov)

    start_time = 0
    if checkpoint is not None:
        start_epoch = checkpoint['time'] + 1
        optimizer.load_state_dict(checkpoint['optimizer'])

    if config.lr_shape == 'multistep':
        scheduler = MultiStepLR(optimizer, milestones=[81, 122], gamma=0.1)
    elif config.lr_shape == 'cosine':
        if checkpoint is not None:
            scheduler = checkpoint['scheduler']
        else:
            scheduler = CosineAnnealingRestartsLR(optimizer,
                                                  1,
                                                  config.T_e,
                                                  T_mul=config.T_mul)

    # The trainer handles the training loop and evaluation on validation set
    trainer = Trainer(model, criterion, config, optimizer, scheduler)

    epoch = 1

    while True:
        # Train for a single epoch
        train_top1, train_loss, stop_training = trainer.train(
            epoch, train_loader)

        # Run model on the validation and test set
        valid_top1 = trainer.evaluate(epoch, valid_loader, 'valid')
        test_top1 = trainer.evaluate(epoch, test_loader, 'test')

        current_time = time.time()

        results = {
            'epoch': epoch,
            'time': current_time,
            'train_top1': train_top1,
            'valid_top1': valid_top1,
            'test_top1': test_top1,
            'train_loss': float(train_loss.data),
        }

        with open(os.path.join(config.save, 'results.txt'), 'w') as file:
            json.dump(str(results), file)
            file.write('\n')

        print(
            '==> Finished epoch %d (budget %.3f): %7.3f (train) %7.3f (validation) %7.3f (test)'
            % (epoch, config.budget, train_top1, valid_top1, test_top1))

        if stop_training:
            break

        epoch += 1

    if start_time >= config.budget:
        trainer.evaluate(epoch, test_loader, 'test')
    else:
        save_checkpoint(int(config.budget), trainer.model, trainer.optimizer,
                        trainer.scheduler, config)
Beispiel #38
0
 def test_evaluate(self):
     p = Parser(positionals=[Positional('foo')])
     self.assertEquals(p.evaluate([u'spam']), ({}, [u'spam']))