Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package python-configshell-fb for openSUSE:Factory checked in at 2021-02-04 20:22:00 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-configshell-fb (Old) and /work/SRC/openSUSE:Factory/.python-configshell-fb.new.28504 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-configshell-fb" Thu Feb 4 20:22:00 2021 rev:14 rq:868030 version:1.1.28 Changes: -------- --- /work/SRC/openSUSE:Factory/python-configshell-fb/python-configshell-fb.changes 2020-03-05 23:22:04.457304055 +0100 +++ /work/SRC/openSUSE:Factory/.python-configshell-fb.new.28504/python-configshell-fb.changes 2021-02-04 20:22:01.690639356 +0100 @@ -1,0 +2,11 @@ +Sat Jan 30 21:39:26 UTC 2021 - Lee Duncan <ldun...@suse.com> + +- Update to version v1.1.28 from v1.1.27 (jre#SLE-17360): + * version 1.1.28 + * Ensure that all output reaches the client when daemonized + * Remove Epydoc markup from command messages + * Remove epydoc imports and epydoc calls + Which removed the need for patch: + * Ensure-that-all-output-reaches-the-client-when-daemo.patch + +------------------------------------------------------------------- Old: ---- Ensure-that-all-output-reaches-the-client-when-daemo.patch python-configshell-fb-v1.1.27.tar.xz New: ---- python-configshell-fb-1.1.28.tar.xz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-configshell-fb.spec ++++++ --- /var/tmp/diff_new_pack.xoIYyQ/_old 2021-02-04 20:22:02.426640477 +0100 +++ /var/tmp/diff_new_pack.xoIYyQ/_new 2021-02-04 20:22:02.430640483 +0100 @@ -1,7 +1,7 @@ # # spec file for package python-configshell-fb # -# Copyright (c) 2020 SUSE LLC +# Copyright (c) 2021 SUSE LLC # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -18,17 +18,17 @@ %{?!python_module:%define python_module() python-%{**} python3-%{**}} Name: python-configshell-fb -Version: 1.1.27 +Version: 1.1.28 Release: 0%{?dist} Summary: A Python library for building configuration shells License: Apache-2.0 Group: Development/Libraries/Python URL: https://github.com/open-iscsi/configshell-fb -Source: %{name}-v%{version}.tar.xz -Patch1: Ensure-that-all-output-reaches-the-client-when-daemo.patch +Source: %{name}-%{version}.tar.xz BuildRequires: %{python_module pyparsing} BuildRequires: %{python_module setuptools} BuildRequires: %{python_module six} +BuildRequires: %{pythons} BuildRequires: fdupes BuildRequires: python-rpm-macros Requires: %{_bindir}/env @@ -65,8 +65,7 @@ no longer strictly compatible. %prep -%setup -q -n %{name}-v%{version} -%patch1 -p1 +%setup -q -n %{name}-%{version} %build %python_build ++++++ _service ++++++ --- /var/tmp/diff_new_pack.xoIYyQ/_old 2021-02-04 20:22:02.458640525 +0100 +++ /var/tmp/diff_new_pack.xoIYyQ/_new 2021-02-04 20:22:02.458640525 +0100 @@ -5,10 +5,9 @@ <param name="subdir"></param> <param name="filename">python-configshell-fb</param> <param name="versionformat">@PARENT_TAG@</param> - <param name="versionrewrite-pattern">v(\d*\.\d*\.)fb(\d*)</param> + <param name="versionrewrite-pattern">v(\d*\.\d*\.)(\d*)</param> <param name="versionrewrite-replacement">\1\2</param> - <param name="revision">v1.1.27</param> - <param name="changesgenerate">enable</param> + <param name="revision">v1.1.28</param> </service> <service name="recompress" mode="disabled"> <param name="file">*configshell-fb*.tar</param> ++++++ python-configshell-fb-v1.1.27.tar.xz -> python-configshell-fb-1.1.28.tar.xz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-configshell-fb-v1.1.27/configshell/__init__.py new/python-configshell-fb-1.1.28/configshell/__init__.py --- old/python-configshell-fb-v1.1.27/configshell/__init__.py 2019-11-06 13:37:40.000000000 +0100 +++ new/python-configshell-fb-1.1.28/configshell/__init__.py 2020-04-06 10:24:13.000000000 +0200 @@ -26,7 +26,7 @@ from .prefs import Prefs from .shell import ConfigShell -__version__ = '1.1.27' +__version__ = '1.1.28' __url__ = 'http://github.com/open-iscsi/configshell-fb' __description__ = 'A framework to implement simple but nice CLIs.' __license__ = 'Apache 2.0' diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-configshell-fb-v1.1.27/configshell/console.py new/python-configshell-fb-1.1.28/configshell/console.py --- old/python-configshell-fb-v1.1.27/configshell/console.py 2019-11-06 13:37:40.000000000 +0100 +++ new/python-configshell-fb-1.1.28/configshell/console.py 2020-04-06 10:24:13.000000000 +0200 @@ -26,12 +26,6 @@ from .prefs import Prefs -# avoid requiring epydoc at runtime -try: - import epydoc.markup.epytext -except ImportError: - pass - class Console(object): ''' Implements various utility methods providing a console UI support toolkit, @@ -166,20 +160,6 @@ Renders and print and epytext-formatted text on the console. ''' text = self.dedent(text) - try: - dom_tree = epydoc.markup.epytext.parse(text, None) - except NameError: - # epydoc not installed, strip markup - dom_tree = text - dom_tree = dom_tree.replace("B{", "") - dom_tree = dom_tree.replace("I{", "") - dom_tree = dom_tree.replace("C{", "") - dom_tree = dom_tree.replace("}", "") - dom_tree += "\n" - except: - self.display(text) - raise - text = self.render_domtree(dom_tree) # We need to remove the last line feed, but there might be # escape characters after it... clean_text = '' @@ -191,7 +171,7 @@ break else: clean_text = text - self.raw_write(clean_text) + self.raw_write(clean_text, output=self._stdout) def indent(self, text, margin=2): ''' @@ -264,7 +244,7 @@ that any lines that are longer than terminal width or max_width are broken into shorter lines (at the first whitespace sequence that occurs before the limit. If the given string contains newlines, they - will I{not} be removed. Any lines that begin with whitespace will not + will not be removed. Any lines that begin with whitespace will not be wordwrapped. This version takes into account ANSI escape characters: @@ -275,14 +255,14 @@ @param indent: If specified, then indent each line by this number of spaces. - @type indent: C{int} + @type indent: int @param startindex: If specified, then assume that the first line - is already preceeded by C{startindex} characters. - @type startindex: C{int} + is already preceded by startindex characters. + @type startindex: int @param splitchars: A list of non-whitespace characters which can be used to split a line. (E.g., use '/\\' to allow path names to be split over multiple lines.) - @rtype: C{str} + @rtype: str ''' right = self.get_width() if splitchars: @@ -322,104 +302,3 @@ current_style = next_style.split(self._ansi_reset)[-1] return ''.join(result).rstrip()+'\n' - - def render_domtree(self, tree, indent=0, seclevel=0): - ''' - Convert a DOM document encoding epytext to an 8-bits ascii string with - ANSI formating for simpler styles. - - @param tree: A DOM document encoding of an epytext string. - @type tree: C{Element} - @param indent: The indentation for the string representation of - C{tree}. Each line of the returned string will begin with - C{indent} space characters. - @type indent: C{int} - @param seclevel: The section level that C{tree} appears at. This - is used to generate section headings. - @type seclevel: C{int} - @return: The formated string. - @rtype: C{string} - ''' - if isinstance(tree, six.string_types): - return tree - - if tree.tag == 'section': - seclevel += 1 - - # Figure out the child indent level. - if tree.tag == 'epytext': - cindent = indent - elif tree.tag == 'li' and tree.attribs.get('bullet'): - cindent = indent + 1 + len(tree.attribs.get('bullet')) - else: - cindent = indent + 2 - - variables = [self.render_domtree(c, cindent, seclevel) - for c in tree.children] - childstr = ''.join(variables) - - if tree.tag == 'para': - text = self.render_text(childstr) - text = self.wordwrap(text, indent)+'\n' - elif tree.tag == 'li': - # We should be able to use getAttribute here; but there's no - # convenient way to test if an element has an attribute.. - bullet = tree.attribs.get('bullet') or '-' - text = indent*' ' + bullet + ' ' + childstr.lstrip() - elif tree.tag == 'heading': - text = ((indent-2)*' ' + self.render_text( - childstr, styles=['bold'], todefault=True) \ - + '\n') - elif tree.tag == 'doctestblock': - lines = [(indent+2)*' '+line for line in childstr.split('\n')] - text = '\n'.join(lines) + '\n\n' - elif tree.tag == 'literalblock': - lines = [(indent+1)*' '+ self.render_text( - line, todefault=True) - for line in childstr.split('\n')] - text = '\n'.join(lines) + '\n\n' - elif tree.tag == 'fieldlist': - text = childstr - elif tree.tag == 'field': - numargs = 0 - while tree.children[numargs+1].tag == 'arg': - numargs += 1 - args = variables[1:1+numargs] - body = variables[1+numargs:] - text = (indent)*' '+'@'+variables[0] - if args: - text += '(' + ', '.join(args) + ')' - text = text + ':\n' + ''.join(body) - elif tree.tag == 'uri': - if len(variables) != 2: - raise ValueError('Bad URI ') - elif variables[0] == variables[1]: - text = self.render_text( - '%s' % variables[1], - 'blue', styles=['underline'], todefault=True) - else: - text = '%r<%s>' % (variables[0], variables[1]) - elif tree.tag == 'link': - if len(variables) != 2: - raise ValueError('Bad Link') - text = '%s' % variables[0] - elif tree.tag in ('olist', 'ulist'): - text = childstr.replace('\n\n', '\n')+'\n' - elif tree.tag == 'bold': - text = self.render_text( - childstr, styles=['bold'], todefault=True) - elif tree.tag == 'italic': - text = self.render_text( - childstr, styles=['underline'], todefault=True) - elif tree.tag == 'symbol': - text = '%s' \ - % epydoc.markup.epytext.SYMBOL_TO_PLAINTEXT.get( - childstr, childstr) - elif tree.tag == 'graph': - text = '<<%s graph: %s>>' \ - % (variables[0], ', '.join(variables[1:])) - else: - # Assume that anything else can be passed through. - text = self.render_text(childstr) - - return text diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-configshell-fb-v1.1.27/configshell/node.py new/python-configshell-fb-1.1.28/configshell/node.py --- old/python-configshell-fb-v1.1.27/configshell/node.py 2019-11-06 13:37:40.000000000 +0100 +++ new/python-configshell-fb-1.1.28/configshell/node.py 2020-04-06 10:24:13.000000000 +0200 @@ -47,31 +47,31 @@ The available commands depend on the current path or target path you want to run a command in: different path have different sets of available commands, i.e. a path pointing at - an iscsi target will not have the same availaible commands as, + an iSCSI target will not have the same available commands as, say, a path pointing at a storage object. The prompt that starts each command line indicates your current path. Alternatively (useful if the prompt displays an abbreviated path to save space), you can run the - B{pwd} command to display the complete current path. + `pwd` command to display the complete current path. - Navigating the tree is done using the B{cd} command. Without - any argument, B{cd} will present you with the full objects + Navigating the tree is done using the `cd` command. Without + any argument, `cd` presents you with the full objects tree. Just use arrows to select the destination path, and - enter will get you there. Please try B{help cd} for navigation + enter will get you there. Please try `help cd` for navigation tips. COMMAND SYNTAX ============== Commands are built using the following syntax: - [I{TARGET_PATH}] B{COMMAND_NAME} [I{OPTIONS}] + [TARGET_PATH] COMMAND_NAME [OPTIONS] - The I{TARGET_PATH} indicates the path to run the command from. - If ommited, the command will be run from your current path. + TARGET_PATH indicates the path to run the command from. + If omitted, the command is run from your current path. - The I{OPTIONS} depend on the command. Please use B{help - COMMAND} to get more information. + OPTIONS depend on the command. Please use `help` to + get more information. ''' def __init__(self, name, parent=None, shell=None): @@ -410,7 +410,7 @@ def ui_getgroup_global(self, parameter): ''' This is the backend method for getting configuration parameters out of - the B{global} configuration group. It gets the values from the Prefs() + the global configuration group. It gets the values from the Prefs() backend. Eventual casting to str for UI display is handled by the ui get command, for symmetry with the pendant ui_setgroup method. Existence of the parameter in the group should have already been @@ -464,14 +464,14 @@ def ui_command_set(self, group=None, **parameter): ''' Sets one or more configuration parameters in the given group. - The B{global} group contains all global CLI preferences. + The "global" group contains all global CLI preferences. Other groups are specific to the current path. Run with no parameter nor group to list all available groups, or with just a group name to list all available parameters within that group. - Example: B{set global color_mode=true loglevel_console=info} + Example: set global color_mode=true loglevel_console=info SEE ALSO ======== @@ -493,7 +493,7 @@ for p_name in self.list_group_params(group, writable=True): p_def = self.get_group_param(group, p_name) type_method = self.get_type_method(p_def['type']) - p_name = "%s=I{%s}" % (p_def['name'], p_def['type']) + p_name = "%s=%s" % (p_def['name'], p_def['type']) underline2 = ''.ljust(len(p_name), '-') parameters += '%s\n%s\n%s\n\n' \ % (p_name, underline2, p_def['description']) @@ -579,7 +579,7 @@ with just a group name to list all available parameters within that group. - Example: B{get global color_mode loglevel_console} + Example: get global color_mode loglevel_console SEE ALSO ======== @@ -679,14 +679,14 @@ PARAMETERS ========== - I{path} - ------- - The I{path} to display the nodes tree of. Can be an absolute path, a + path + ---- + The path to display the nodes tree of. Can be an absolute path, a relative path or a bookmark. - I{depth} - -------- - The I{depth} parameter limits the maximum depth of the tree to display. + depth + ----- + The depth parameter limits the maximum depth of the tree to display. If set to 0, then the complete tree will be displayed (the default). SEE ALSO @@ -929,10 +929,10 @@ ''' Change current path to path. - The path is constructed just like a unix path, with B{/} as separator - character, B{.} for the current node, B{..} for the parent node. + The path is constructed just like a unix path, with "/" as separator + character, "." for the current node, ".." for the parent node. - Suppose the nodes tree looks like this:: + Suppose the nodes tree looks like this: +-/ +-a0 (1) | +-b0 (*) @@ -944,17 +944,17 @@ Suppose the current node is the one marked (*) at the beginning of all the following examples: - - B{cd ..} takes you to the node marked (1) - - B{cd .} makes you stay in (*) - - B{cd /a1/b0/c0/d0} takes you to the node marked (2) - - B{cd ../../a1} takes you to the node marked (3) - - B{cd /a1} also takes you to the node marked (3) - - B{cd /} takes you to the root node B{/} - - B{cd /a0/b0/./c0/../../../a1/.} takes you to the node marked (3) - - You can also navigate the path history with B{<} and B{>}: - - B{cd <} takes you back one step in the path history - - B{cd >} takes you one step forward in the path history + - `cd ..` takes you to the node marked (1) + - `cd .` makes you stay in (*) + - `cd /a1/b0/c0/d0` takes you to the node marked (2) + - `cd ../../a1` takes you to the node marked (3) + - `cd /a1` also takes you to the node marked (3) + - `cd /` takes you to the root node "/" + - `cd /a0/b0/./c0/../../../a1/.` takes you to the node marked (3) + + You can also navigate the path history with "<" and ">": + - `cd <` takes you back one step in the path history + - `cd >` takes you one step forward in the path history SEE ALSO ======== @@ -1192,32 +1192,32 @@ Manage your bookmarks. Note that you can also access your bookmarks with the - B{cd} command. For instance, the following commands + `cd` command. For instance, the following commands are equivalent: - - B{cd mybookmark} - - C{bookmarks go mybookmark} + - `cd @mybookmark` + - `bookmarks go mybookmark`` You can also use bookmarks anywhere where you would use a normal path: - - B{@mybookmark ls} would perform the B{ls} command + - `@mybookmark ls` performs the `ls` command in the bookmarked path. - - B{ls @mybookmark} would show you the objects tree from + - `ls @mybookmark` shows you the objects tree from the bookmarked path. PARAMETERS ========== - I{action} - --------- - The I{action} is one of: - - B{add} adds the current path to your bookmarks. - - B{del} deletes a bookmark. - - B{go} takes you to a bookmarked path. - - B{show} shows you all your bookmarks. + action + ------ + The "action" parameter is one of: + - `add` adds the current path to your bookmarks. + - `del` deletes a bookmark. + - `go` takes you to a bookmarked path. + - `show` shows you all your bookmarks. - I{bookmark} - ----------- + bookmark + -------- This is the name of the bookmark. SEE ALSO @@ -1425,23 +1425,23 @@ if spec.defaults is None: nb_opt_params = 0 else: - nb_opt_params = len(spec.defaults) + nb_opt_params = len(spec.defaults) nb_max_params = len(args) nb_min_params = nb_max_params - nb_opt_params - + req_params = args[:nb_min_params] opt_params = args[nb_min_params:] - + unexpected_keywords = sorted(set(kparams) - set(args)) missing_params = sorted(set(args[len(pparams):]) - set(opt_params) - set(kparams.keys())) - + nb_params = len(pparams) + len(kparams) nb_standard_params = len(pparams) \ + len([param for param in kparams if param in args]) nb_extended_params = nb_params - nb_standard_params - + self.shell.log.debug("Min params: %d" % nb_min_params) self.shell.log.debug("Max params: %d" % nb_max_params) self.shell.log.debug("Required params: %s" % ", ".join(req_params)) @@ -1450,7 +1450,7 @@ self.shell.log.debug("Got %s extended params." % nb_extended_params) self.shell.log.debug("Variable positional params: %s" % pp) self.shell.log.debug("Variable keyword params: %s" % kw) - + if len(missing_params) == 1: raise ExecutionError( "Missing required parameter %s" @@ -1459,7 +1459,7 @@ raise ExecutionError( "Missing required parameters %s" % ", ".join("'%s'" % missing for missing in missing_params)) - + if spec.keywords is None: if len(unexpected_keywords) == 1: raise ExecutionError( @@ -1476,19 +1476,19 @@ raise ExecutionError( "Duplicate parameter %s." % param) - + if nb_opt_params == 0 \ and nb_standard_params != nb_min_params \ and pp is None: raise ExecutionError( "Got %d positionnal parameters, expected exactly %d." % (nb_standard_params, nb_min_params)) - + if nb_standard_params > nb_max_params and pp is None: raise ExecutionError( "Got %d positionnal parameters, expected at most %d." % (nb_standard_params, nb_max_params)) - + def list_commands(self): ''' @return: The list of user commands available for this node. @@ -1592,44 +1592,23 @@ self.shell.log.debug("Required: %s" % str(required_parameters)) self.shell.log.debug("Optional: %s" % str(optional_parameters)) - syntax = "B{%s} " % command + syntax = "%s " % command required_parameters_str = '' for param in required_parameters: - required_parameters_str += "I{%s} " % param + required_parameters_str += "%s " % param syntax += required_parameters_str optional_parameters_str = '' for param in optional_parameters: - optional_parameters_str += "[I{%s}] " % param + optional_parameters_str += "[%s] " % param syntax += optional_parameters_str comments = [] - #if optional_parameters: - # comments.append(self.shell.con.dedent( - # ''' - # %s - These are optional parameters that can either be - # specified in the above order as positional parameters, or in - # any order at the end of the line as keyword=value parameters. - # ''' % optional_parameters_str[:-1])) - if args is not None: - syntax += "[I{%s}...] " % args - # comments.append(self.shell.con.dedent( - # ''' - # [I{%s}...] - This command accepts an arbitrary number of - # parameters before any keyword=value parameter. In order to use - # them, you must fill in all previous positional parameters if - # any. See B{DESCRIPTION} below. - # ''' % args)) - + syntax += "[%s...] " % args if kwargs is not None: - syntax += "[I{%s=value}...] " % (kwargs) - # comments.append(self.shell.con.dedent( - # ''' - # This command also accepts an arbitrary number of - # keyword=value parameters. See B{DESCRIPTION} below. - # ''')) + syntax += "[%s=value...] " % (kwargs) default_values = '' if num_defaults > 0: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-configshell-fb-v1.1.27/setup.py new/python-configshell-fb-1.1.28/setup.py --- old/python-configshell-fb-v1.1.27/setup.py 2019-11-06 13:37:40.000000000 +0100 +++ new/python-configshell-fb-1.1.28/setup.py 2020-04-06 10:24:13.000000000 +0200 @@ -34,7 +34,7 @@ setup( name = 'configshell-fb', - version = '1.1.25', + version = '1.1.28', description = 'A framework to implement simple but nice CLIs.', license = 'Apache 2.0', maintainer = 'Andy Grover',