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
>
>
>
>

Reply via email to