for node in keyset: tree.add(node, content) except ValueError, ex: raise ValueError("%s (\"%s\")" % (ex, linestripped)) if fast_mode: # Messages per node have been aggregated, now add to tree one # full msg per node for key, wholemsg in preload_msgs.iteritems(): tree.add(key, '\n'.join(wholemsg)) # Display results try: disp = Display(options) if options.debug: RESOLVER_STD_GROUP.set_verbosity(1) print >> sys.stderr, \ "clubak: line_mode=%s gather=%s tree_depth=%d" % \ (bool(options.line_mode), bool(disp.gather), tree._depth()) display(tree, disp, disp.gather or disp.regroup, \ options.trace_mode, enable_nodeset_key is not False) except ValueError, exc: parser.error("option mismatch (%s)" % exc) def main(): """main script function""" try: clubak() except GENERIC_ERRORS, ex: sys.exit(handle_generic_error(ex)) except ValueError, ex:
nodeset_base = NodeSet.fromlist(options.nodes) if options.exclude: nodeset_exclude = NodeSet.fromlist(options.exclude) if options.groupsource: # Be sure -a/g -s source work as espected. RESOLVER_STD_GROUP.default_sourcename = options.groupsource # FIXME: add public API to enforce engine Task._std_default['engine'] = options.engine # Do we have nodes group? task = task_self() task.set_info("debug", config.verbosity >= VERB_DEBUG) if config.verbosity == VERB_DEBUG: RESOLVER_STD_GROUP.set_verbosity(1) if options.nodes_all: all_nodeset = NodeSet.fromall() display.vprint(VERB_DEBUG, "Adding nodes from option -a: %s" % \ all_nodeset) nodeset_base.add(all_nodeset) if options.group: grp_nodeset = NodeSet.fromlist(options.group, resolver=RESOLVER_NOGROUP) for grp in grp_nodeset: addingrp = NodeSet("@" + grp) display.vprint(VERB_DEBUG, \ "Adding nodes from option -g %s: %s" % (grp, addingrp)) nodeset_base.update(addingrp)
def nodeset(): """script subroutine""" class_set = NodeSet usage = "%prog [COMMAND] [OPTIONS] [ns1 [-ixX] ns2|...]" parser = OptionParser(usage) parser.install_nodeset_commands() parser.install_nodeset_operations() parser.install_nodeset_options() (options, args) = parser.parse_args() if options.debug: RESOLVER_STD_GROUP.set_verbosity(1) # Check for command presence cmdcount = int(options.count) + int(options.expand) + \ int(options.fold) + int(bool(options.list)) + \ int(options.regroup) + int(options.groupsources) if not cmdcount: parser.error("No command specified.") elif cmdcount > 1: parser.error("Multiple commands not allowed.") if options.rangeset: class_set = RangeSet if options.all or options.regroup: if class_set != NodeSet: parser.error("-a/-r only supported in NodeSet mode") if options.maxsplit is not None and options.contiguous: parser.error("incompatible splitting options (split, contiguous)") if options.maxsplit is None: options.maxsplit = 1 if options.groupsource and not options.quiet and \ (class_set == RangeSet or options.groupsources): print >> sys.stderr, "WARNING: option group source \"%s\" ignored" \ % options.groupsource # The groupsources command simply lists group sources. if options.groupsources: if options.quiet: dispdefault = "" # don't show (default) if quiet is set else: dispdefault = " (default)" for src in RESOLVER_STD_GROUP.sources(): print "%s%s" % (src, dispdefault) dispdefault = "" return # We want -s <groupsource> to act as a substition of default groupsource # (ie. it's not necessary to prefix group names by this group source). if options.groupsource: RESOLVER_STD_GROUP.default_sourcename = options.groupsource # Instantiate RangeSet or NodeSet object xset = class_set(autostep=options.autostep) if options.all: # Include all nodes from external node groups support. xset.update(NodeSet.fromall()) # uses default_sourcename if not args and not options.all and not options.list: # No need to specify '-' to read stdin in these cases process_stdin(xset.update, xset.__class__, options.autostep) # Apply first operations (before first non-option) for nodes in options.and_nodes: if nodes == '-': process_stdin(xset.intersection_update, xset.__class__, options.autostep) else: xset.intersection_update(class_set(nodes, autostep=options.autostep)) for nodes in options.sub_nodes: if nodes == '-': process_stdin(xset.difference_update, xset.__class__, options.autostep) else: xset.difference_update(class_set(nodes, autostep=options.autostep)) for nodes in options.xor_nodes: if nodes == '-': process_stdin(xset.symmetric_difference_update, xset.__class__, options.autostep) else: xset.symmetric_difference_update(class_set(nodes, \ autostep=options.autostep)) # Finish xset computing from args compute_nodeset(xset, args, options.autostep) # The list command has a special handling if options.list > 0: return command_list(options, xset) # Interprete special characters (may raise SyntaxError) separator = eval('\'%s\'' % options.separator, {"__builtins__":None}, {}) if options.slice_rangeset: _xset = class_set() for sli in RangeSet(options.slice_rangeset).slices(): _xset.update(xset[sli]) xset = _xset # Display result according to command choice if options.expand: xsubres = lambda x: separator.join(x.striter()) elif options.fold: xsubres = lambda x: x elif options.regroup: xsubres = lambda x: x.regroup(options.groupsource, \ noprefix=options.groupbase) else: xsubres = len if not xset or options.maxsplit <= 1 and not options.contiguous: print xsubres(xset) else: if options.contiguous: xiterator = xset.contiguous() else: xiterator = xset.split(options.maxsplit) for xsubset in xiterator: print xsubres(xsubset)
def nodeset(): """script subroutine""" class_set = NodeSet usage = "%prog [COMMAND] [OPTIONS] [ns1 [-ixX] ns2|...]" parser = OptionParser(usage) parser.install_nodeset_commands() parser.install_nodeset_operations() parser.install_nodeset_options() (options, args) = parser.parse_args() if options.debug: RESOLVER_STD_GROUP.set_verbosity(1) # Check for command presence cmdcount = int(options.count) + int(options.expand) + \ int(options.fold) + int(bool(options.list)) + \ int(options.regroup) + int(options.groupsources) if not cmdcount: parser.error("No command specified.") elif cmdcount > 1: parser.error("Multiple commands not allowed.") if options.rangeset: class_set = RangeSet if options.all or options.regroup: if class_set != NodeSet: parser.error("-a/-r only supported in NodeSet mode") if options.maxsplit is not None and options.contiguous: parser.error("incompatible splitting options (split, contiguous)") if options.maxsplit is None: options.maxsplit = 1 if options.groupsource and not options.quiet and \ (class_set == RangeSet or options.groupsources): print >> sys.stderr, "WARNING: option group source \"%s\" ignored" \ % options.groupsource # The groupsources command simply lists group sources. if options.groupsources: if options.quiet: dispdefault = "" # don't show (default) if quiet is set else: dispdefault = " (default)" for src in RESOLVER_STD_GROUP.sources(): print "%s%s" % (src, dispdefault) dispdefault = "" return # We want -s <groupsource> to act as a substition of default groupsource # (ie. it's not necessary to prefix group names by this group source). if options.groupsource: RESOLVER_STD_GROUP.default_sourcename = options.groupsource # Instantiate RangeSet or NodeSet object xset = class_set(autostep=options.autostep) if options.all: # Include all nodes from external node groups support. xset.update(NodeSet.fromall()) # uses default_sourcename if not args and not options.all and not options.list: # No need to specify '-' to read stdin in these cases process_stdin(xset.update, xset.__class__, options.autostep) # Apply first operations (before first non-option) for nodes in options.and_nodes: if nodes == '-': process_stdin(xset.intersection_update, xset.__class__, options.autostep) else: xset.intersection_update( class_set(nodes, autostep=options.autostep)) for nodes in options.sub_nodes: if nodes == '-': process_stdin(xset.difference_update, xset.__class__, options.autostep) else: xset.difference_update(class_set(nodes, autostep=options.autostep)) for nodes in options.xor_nodes: if nodes == '-': process_stdin(xset.symmetric_difference_update, xset.__class__, options.autostep) else: xset.symmetric_difference_update(class_set(nodes, \ autostep=options.autostep)) # Finish xset computing from args compute_nodeset(xset, args, options.autostep) # The list command has a special handling if options.list > 0: return command_list(options, xset) # Interprete special characters (may raise SyntaxError) separator = eval('\'%s\'' % options.separator, {"__builtins__": None}, {}) if options.slice_rangeset: _xset = class_set() for sli in RangeSet(options.slice_rangeset).slices(): _xset.update(xset[sli]) xset = _xset # Display result according to command choice if options.expand: xsubres = lambda x: separator.join(x.striter()) elif options.fold: xsubres = lambda x: x elif options.regroup: xsubres = lambda x: x.regroup(options.groupsource, \ noprefix=options.groupbase) else: xsubres = len if not xset or options.maxsplit <= 1 and not options.contiguous: print xsubres(xset) else: if options.contiguous: xiterator = xset.contiguous() else: xiterator = xset.split(options.maxsplit) for xsubset in xiterator: print xsubres(xsubset)