def test_parse(self): x = NamespacedOptionParser(['-c:1,3', '4']) self.assertEqual(x.namespaces.get('1,3'), {'-c': '4'}) x = NamespacedOptionParser(['-c:jerry,elaine', '5', '--loglevel:kramer=DEBUG', '--flag', '--logfile=foo', '-Q', 'bar', 'a', 'b', '--', '.disable_rate_limits=1']) self.assertEqual(x.options, {'--logfile': 'foo', '-Q': 'bar', '--flag': None}) self.assertEqual(x.values, ['a', 'b']) self.assertEqual(x.namespaces.get('jerry,elaine'), {'-c': '5'}) self.assertEqual(x.namespaces.get('kramer'), {'--loglevel': 'DEBUG'}) self.assertEqual(x.passthrough, '-- .disable_rate_limits=1')
def test_getpids(self, gethostname, Pidfile): gethostname.return_value = 'e.com' self.prepare_pidfile_for_getpids(Pidfile) callback = Mock() p = NamespacedOptionParser(['foo', 'bar', 'baz']) nodes = self.t.getpids(p, 'celery worker', callback=callback) node_0, node_1 = nodes self.assertEqual(node_0[0], '*****@*****.**') self.assertEqual( sorted(node_0[1]), sorted(('celery worker', '--pidfile=foo.pid', '-n [email protected]', '')), ) self.assertEqual(node_0[2], 10) self.assertEqual(node_1[0], '*****@*****.**') self.assertEqual( sorted(node_1[1]), sorted(('celery worker', '--pidfile=bar.pid', '-n [email protected]', '')), ) self.assertEqual(node_1[2], 11) self.assertTrue(callback.called) cargs, _ = callback.call_args self.assertEqual(cargs[0], '*****@*****.**') self.assertItemsEqual( cargs[1], ['celery worker', '--pidfile=baz.pid', '-n [email protected]', ''], ) self.assertIsNone(cargs[2]) self.assertIn('DOWN', self.fh.getvalue()) # without callback, should work nodes = self.t.getpids(p, 'celery worker', callback=None)
def test_parse(self, gethostname): gethostname.return_value = 'example.com' p = NamespacedOptionParser([ '-c:jerry,elaine', '5', '--loglevel:kramer=DEBUG', '--flag', '--logfile=foo', '-Q', 'bar', 'jerry', 'elaine', 'kramer', '--', '.disable_rate_limits=1', ]) it = multi_args(p, cmd='COMMAND', append='*AP*', prefix='*P*', suffix='*S*') names = list(it) def assert_line_in(name, args): self.assertIn(name, [tup[0] for tup in names]) argv = None for item in names: if item[0] == name: argv = item[1] self.assertTrue(argv) for arg in args: self.assertIn(arg, argv) assert_line_in( '*P*jerry@*S*', ['COMMAND', '-n *P*jerry@*S*', '-Q bar', '-c 5', '--flag', '--logfile=foo', '-- .disable_rate_limits=1', '*AP*'], ) assert_line_in( '*P*elaine@*S*', ['COMMAND', '-n *P*elaine@*S*', '-Q bar', '-c 5', '--flag', '--logfile=foo', '-- .disable_rate_limits=1', '*AP*'], ) assert_line_in( '*P*kramer@*S*', ['COMMAND', '--loglevel=DEBUG', '-n *P*kramer@*S*', '-Q bar', '--flag', '--logfile=foo', '-- .disable_rate_limits=1', '*AP*'], ) expand = names[0][2] self.assertEqual(expand('%h'), '*P*jerry@*S*') self.assertEqual(expand('%n'), '*P*jerry') names2 = list(multi_args(p, cmd='COMMAND', append='', prefix='*P*', suffix='*S*')) self.assertEqual(names2[0][1][-1], '-- .disable_rate_limits=1') p2 = NamespacedOptionParser(['10', '-c:1', '5']) names3 = list(multi_args(p2, cmd='COMMAND')) self.assertEqual(len(names3), 10) self.assertEqual( names3[0][0:2], ('*****@*****.**', ['COMMAND', '-n [email protected]', '-c 5', '']), ) for i, worker in enumerate(names3[1:]): self.assertEqual( worker[0:2], ('*****@*****.**' % (i + 2), ['COMMAND', '-n celery%[email protected]' % (i + 2), '']), ) names4 = list(multi_args(p2, cmd='COMMAND', suffix='""')) self.assertEqual(len(names4), 10) self.assertEqual( names4[0][0:2], ('celery1@', ['COMMAND', '-n celery1@', '-c 5', '']), ) p3 = NamespacedOptionParser(['foo@', '-c:foo', '5']) names5 = list(multi_args(p3, cmd='COMMAND', suffix='""')) self.assertEqual( names5[0][0:2], ('foo@', ['COMMAND', '-n foo@', '-c 5', '']), )
def _get_full_names(names): options = NamespacedOptionParser(names) options.parse() return dict(zip(names, (w.name for w in MultiParser().parse(options))))