LGTM, thanks.
On Mon, Feb 24, 2014 at 12:56 PM, Hrvoje Ribicic <[email protected]> wrote: > > > > On Fri, Feb 21, 2014 at 4:13 PM, Petr Pudlák <[email protected]> wrote: > >> >> >> >> On Tue, Feb 18, 2014 at 3:39 PM, Hrvoje Ribicic <[email protected]> wrote: >> >>> Aligning dictionary entries makes no difference to the YAML parser, but >>> >> Just nitpicking: I'd say "a YAML parser" >> >> > Ack. > > >> makes the output much easier to read and compare. This patch adds the >>> possibility of specifying alignment groups to ordered dictionary >>> entries. >>> >>> Signed-off-by: Hrvoje Ribicic <[email protected]> >>> --- >>> lib/cli.py | 34 +++++++++++++++++++++++++++++++++- >>> 1 file changed, 33 insertions(+), 1 deletion(-) >>> >>> diff --git a/lib/cli.py b/lib/cli.py >>> index 97c16ba..6dc415f 100644 >>> --- a/lib/cli.py >>> +++ b/lib/cli.py >>> @@ -4182,6 +4182,30 @@ def _NotAContainer(data): >>> isinstance(data, tuple)) >>> >>> >>> +def _GetAlignmentMapping(data): >>> + """ Returns info about alignment if present in an encoded ordered >>> dictionary. >>> + >>> + @type data: list of tuple >>> + @param data: The encoded ordered dictionary, as defined in >>> + L{_SerializeGenericInfo}. >>> + @rtype: dict of any to int >>> + @return: The dictionary mapping alignment groups to the maximum >>> length of the >>> + dictionary key found in the group. >>> + >>> + """ >>> + alignment_map = {} >>> + for entry in data: >>> + if len(entry) > 2: >>> + group_key = entry[2] >>> + key_length = len(entry[0]) >>> + if group_key in alignment_map: >>> + alignment_map[group_key] = max(alignment_map[group_key], >>> key_length) >>> + else: >>> + alignment_map[group_key] = key_length >>> + >>> + return alignment_map >>> + >>> + >>> def _SerializeGenericInfo(buf, data, level, afterkey=False): >>> """Formatting core of L{PrintGenericInfo}. >>> >>> @@ -4214,18 +4238,26 @@ def _SerializeGenericInfo(buf, data, level, >>> afterkey=False): >>> _SerializeGenericInfo(buf, data[key], level + 1, afterkey=True) >>> elif isinstance(data, list) and len(data) > 0 and isinstance(data[0], >>> tuple): >>> # list of tuples (an ordered dictionary) >>> + # the tuples may have two or three members - key, value, and >>> alignment group >>> + # if the alignment group is present, align all values sharing the >>> same group >>> if afterkey: >>> buf.write("\n") >>> doindent = True >>> else: >>> doindent = False >>> - for (key, val) in data: >>> + >>> + alignment_mapping = _GetAlignmentMapping(data) >>> + for entry in data: >>> + key, val = entry[0:2] >>> if doindent: >>> buf.write(baseind * level) >>> else: >>> doindent = True >>> buf.write(key) >>> buf.write(": ") >>> + if len(entry) > 2: >>> + max_key_length = alignment_mapping[entry[2]] >>> + buf.write(" " * (max_key_length - len(key))) >>> _SerializeGenericInfo(buf, val, level + 1, afterkey=True) >>> elif isinstance(data, tuple) and all(map(_NotAContainer, data)): >>> # tuples with simple content are serialized as inline lists >>> -- >>> 1.9.0.rc1.175.g0b1dcb5 >>> >>> >> Also please include the new behavior in the docs for PrintGenericInfo. >> >> Ack. > > >> Otherwise LGTM, thanks. >> > > Thanks for the review, interdiff (barring the minor commit message change) > is: > > diff --git a/lib/cli.py b/lib/cli.py > index 15dcd3f..d89042a 100644 > --- a/lib/cli.py > +++ b/lib/cli.py > @@ -4295,9 +4295,11 @@ def PrintGenericInfo(data): > can be: > - dictionaries, where keys are strings and values are of any of > the > types listed here > - - lists of pairs (key, value), where key is a string and value is > of > - any of the types listed here; it's a way to encode ordered > - dictionaries > + - lists of tuples (key, value) or (key, value, alignment_group), > where > + key is a string, value is of any of the types listed here, and > + alignment_group can be any hashable value; it's a way to encode > + ordered dictionaries; any entries sharing the same alignment > group are > + aligned by appending whitespace before the value as needed > - lists of any of the types listed here > - strings > > > >
