Esempio n. 1
0
def multi_args(p, cmd="celery worker", append="", prefix="", suffix=""):
    names = p.values
    options = dict(p.options)
    passthrough = p.passthrough
    ranges = len(names) == 1
    if ranges:
        try:
            noderange = int(names[0])
        except ValueError:
            pass
        else:
            names = [str(n) for n in range(1, noderange + 1)]
            prefix = "celery"
    cmd = options.pop("--cmd", cmd)
    append = options.pop("--append", append)
    hostname = options.pop("--hostname", options.pop("-n", socket.gethostname()))
    prefix = options.pop("--prefix", prefix) or ""
    suffix = options.pop("--suffix", suffix) or hostname
    if suffix in ('""', "''"):
        suffix = ""

    for ns_name, ns_opts in list(items(p.namespaces)):
        if "," in ns_name or (ranges and "-" in ns_name):
            for subns in parse_ns_range(ns_name, ranges):
                p.namespaces[subns].update(ns_opts)
            p.namespaces.pop(ns_name)

    # Numbers in args always refers to the index in the list of names.
    # (e.g. `start foo bar baz -c:1` where 1 is foo, 2 is bar, and so on).
    for ns_name, ns_opts in list(items(p.namespaces)):
        if ns_name.isdigit():
            ns_index = int(ns_name) - 1
            if ns_index < 0:
                raise KeyError("Indexes start at 1 got: %r" % (ns_name,))
            try:
                p.namespaces[names[ns_index]].update(ns_opts)
            except IndexError:
                raise KeyError("No node at index %r" % (ns_name,))

    for name in names:
        hostname = suffix
        if "@" in name:
            nodename = options["-n"] = host_format(name)
            shortname, hostname = nodesplit(nodename)
            name = shortname
        else:
            shortname = "%s%s" % (prefix, name)
            nodename = options["-n"] = host_format("{0}@{1}".format(shortname, hostname))

        expand = partial(node_format, nodename=nodename, N=shortname, d=hostname, h=nodename)
        argv = (
            [expand(cmd)]
            + [format_opt(opt, expand(value)) for opt, value in items(p.optmerge(name, options))]
            + [passthrough]
        )
        if append:
            argv.append(expand(append))
        yield multi_args_t(nodename, argv, expand, name)
Esempio n. 2
0
def _get_nodename(name, prefix, suffix, options):
        hostname = suffix
        if '@' in name:
            nodename = options['-n'] = host_format(name)
            shortname, hostname = nodesplit(nodename)
            name = shortname
        else:
            shortname = '%s%s' % (prefix, name)
            nodename = options['-n'] = host_format(
                '{0}@{1}'.format(shortname, hostname),
            )
        expand = partial(
            node_format, nodename=nodename, N=shortname, d=hostname,
            h=nodename, i='%i', I='%I',
        )
        return name, nodename, expand
Esempio n. 3
0
 def host_format(self, s, **extra):
     return host_format(s, **extra)
Esempio n. 4
0
 def host_format(self, s, **extra):
     return host_format(s, **extra)
Esempio n. 5
0
def multi_args(p, cmd='celery worker', append='', prefix='', suffix=''):
    names = p.values
    options = dict(p.options)
    passthrough = p.passthrough
    ranges = len(names) == 1
    if ranges:
        try:
            noderange = int(names[0])
        except ValueError:
            pass
        else:
            names = [str(n) for n in range(1, noderange + 1)]
            prefix = 'celery'
    cmd = options.pop('--cmd', cmd)
    append = options.pop('--append', append)
    hostname = options.pop('--hostname', options.pop('-n',
                                                     socket.gethostname()))
    prefix = options.pop('--prefix', prefix) or ''
    suffix = options.pop('--suffix', suffix) or hostname
    if suffix in ('""', "''"):
        suffix = ''

    for ns_name, ns_opts in list(items(p.namespaces)):
        if ',' in ns_name or (ranges and '-' in ns_name):
            for subns in parse_ns_range(ns_name, ranges):
                p.namespaces[subns].update(ns_opts)
            p.namespaces.pop(ns_name)

    # Numbers in args always refers to the index in the list of names.
    # (e.g. `start foo bar baz -c:1` where 1 is foo, 2 is bar, and so on).
    for ns_name, ns_opts in list(items(p.namespaces)):
        if ns_name.isdigit():
            ns_index = int(ns_name) - 1
            if ns_index < 0:
                raise KeyError('Indexes start at 1 got: %r' % (ns_name, ))
            try:
                p.namespaces[names[ns_index]].update(ns_opts)
            except IndexError:
                raise KeyError('No node at index %r' % (ns_name, ))

    for name in names:
        hostname = suffix
        if '@' in name:
            nodename = options['-n'] = host_format(name)
            shortname, hostname = nodesplit(nodename)
            name = shortname
        else:
            shortname = '%s%s' % (prefix, name)
            nodename = options['-n'] = host_format(
                '{0}@{1}'.format(shortname, hostname), )

        expand = partial(
            node_format,
            nodename=nodename,
            N=shortname,
            d=hostname,
            h=nodename,
            i='%i',
            I='%I',
        )
        argv = ([expand(cmd)] + [
            format_opt(opt, expand(value))
            for opt, value in items(p.optmerge(name, options))
        ] + [passthrough])
        if append:
            argv.append(expand(append))
        yield multi_args_t(nodename, argv, expand, name)
Esempio n. 6
0
 def hostname(self):
     return host_format(default_nodename(None))