[Buildroot] [PATCH 06/11 RFC] support/scripts: introduce a symbol formatter to generate package lists

Samuel Martin s.martin49 at gmail.com
Sun Jun 1 15:45:06 UTC 2014


Yann,

On Sun, Jun 1, 2014 at 1:09 AM, Yann E. MORIN <yann.morin.1998 at free.fr> wrote:
> Samuel, All,
>
> On 2014-05-31 23:20 +0200, Samuel Martin spake thusly:
>> On Thu, May 29, 2014 at 10:38 PM, Yann E. MORIN <yann.morin.1998 at free.fr> wrote:
> [--SNIP--]
>
> Typoes fixed.
>
>> > What the formatter should ouput depends on its arguments:
>> >   - if none are passed, the layout is returned,
>> >   - if no symbol is passed, but the header label is, it returns
>> >     the header line,
>> >   - otherwise, it returns the formatted line for a symbol.
>>
>> The more I think about this, the more I feel it fragile (i.e. using 2
>> variables for a tristate) :-/
>> In the end, the header argument and the symbol one are just some data
>> processed by the formatter.
>> Maybe we should just replace the header and symbol kwargs by a data
>> one, and add another argument telling what should return the
>> formatter: either the layout, the header line or a symbol line.
>
> OK, I see what you mean. Something like the following?
>
>     format_symbol_prompt(self, what=None, symbol=None, header=None,
>                          root=None, enable_choice=False, header=None,
>                          get_label_func=lambda x: "?"):
>         if what is None:
>             throw an exception
>         if what == "layout":
>             return ("bla","bla")
>         if what == "header":
>             return formated_header(header)
>         if what == "symbol":
>             return formated_symbol(symbol)
>         throw an exception
>
> However, I don;t get what you mean by "a data argument". Do you mean a
> kind of casting the arg whether we're asked to render a header or a
> symbol? How does one casts in Python?

By "a data argument" I mean:

    format_symbol_prompt(self, what=None, data=None,
                         root=None, enable_choice=False,
                         get_label_func=lambda x: "?"):
        if what is None:
            throw an exception
        if what == "layout":
            return ("bla","bla")
        if what == "header":
            return formated_header(data)
        if what == "symbol":
            return formated_symbol(data)
        raise Exception("Unsupported argument 'what': %s" % what)

For the cast, python does magics with its PyObjects.
If you want to be sure to return a string from any object, you can do:
return str(data)

>
> Oh wait, duck-typing, right?
>
> [--SNIP--]
>> > diff --git a/support/scripts/gen-manual-lists.py b/support/scripts/gen-manual-lists.py
>> > index 7144ca3..8311929 100644
>> > --- a/support/scripts/gen-manual-lists.py
>> > +++ b/support/scripts/gen-manual-lists.py
>> > @@ -109,50 +109,33 @@ def get_symbol_parents(item, root=None, enable_choice=False):
>> >
>> >
>> >  def format_asciidoc_table(root, get_label_func, filter_func=lambda x: True,
>> > -                          enable_choice=False, sorted=True, sub_menu=True,
>> > +                          format_func=lambda x: "",
>>
>> usually for default lambda function, I set: lambda x: x
>
> But I do not want it to return anything, I want it to return a string.

See above ;-)

>
> Or do you expect that an exception would be thrown out in case an object
> is used that is not a string later in the call chain? I don't like that
> too much...
>
> Alternatively, as Maxime said on IRC, I coiuld just set it to None, and
> get an exception if it is no passed by the caller.
>
> Except (aha!) setting it to a lambda makes it explicit it has to be a
> function.
>
> So, OK, I'll use your default lambda. At least, we'd get an exception if
> someone forgets to pass the function.
>
>> > @@ -180,22 +163,22 @@ class Buildroot:
>> >              'filename': "package-list",
>> >              'root_menu': "Target packages",
>> >              'filter': "_is_real_package",
>> > +            'format': '_format_symbol_prompt_location',
>>
>> For dictionary, usually, single-quotes are used for the key and
>> double-quotes for the value (when it's a string), though both single
>> and double quote can be used in both cases (key and value).
>> Here my point is more about consistency with the rest of the file.
>
> Yep, fixed the three.
>
> Regards,
> Yann E. MORIN.
>
> --
> .-----------------.--------------------.------------------.--------------------.
> |  Yann E. MORIN  | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
> | +33 662 376 056 | Software  Designer | \ / CAMPAIGN     |  ___               |
> | +33 223 225 172 `------------.-------:  X  AGAINST      |  \e/  There is no  |
> | http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL    |   v   conspiracy.  |
> '------------------------------^-------^------------------^--------------------'

Regards,

-- 
Samuel


More information about the buildroot mailing list