[Freeipa-devel] [PATCH] Add more sophisticated help interface. Split commands into 'topics'.

Rob Crittenden rcritten at redhat.com
Fri Apr 17 15:47:21 UTC 2009


Pavel Zuna wrote:
> David O'Brien wrote:
>> Pavel Zuna wrote:
>>> Rob Crittenden wrote:
>>>> Pavel Zuna wrote:
>>>>> This is more of a suggestion than a real patch. I thought it might 
>>>>> be easier to actually show what I had in mind than explaining it. 
>>>>> Sometimes code is more than words. :)
>>>>>
>>>>> Pavel
>>>>
>>>> I think this is a good start. The output looks like:
>>>>
>>>> $ ipa
>>>> Usage: ipa [global-options] COMMAND ...
>>>>
>>>> Use `ipa help TOPIC` for command listings.
>>>>
>>>> Topics:
>>>>   general      General IPA management.
>>>>   aci          ACI object.
>>>>   application  Application object
>>>>   automount    Automount object.
>>>>   delegation   Delegation object.
>>>>   group        group object.
>>>>   host         Host object.
>>>>   hostgroup    hostgroup object.
>>>>   netgroup     netgroup object.
>>>>   rolegroup    rolegroup object.
>>>>   service      Service object.
>>>>   taskgroup    taskgroup object.
>>>>   user         User object.
>>>>
>>>> Try `ipa --help` for a list of global options.
>>>>
>>>> It looks like you dumped things that aren't related to a top-level 
>>>> class into general (things like passwd, the cert commands, and a few 
>>>> others). I guess they have to go somewhere, just not sure I'd know 
>>>> to look in general if I was a new user.
>>>>
>>>> Should we mandate an Object for every plugin? Or include the list of 
>>>> these general commands in the main topics list? That might be 
>>>> confusing too because that would mean that 'env' is on the same 
>>>> level as 'user'.
>>>>
>>>> Any suggestions?
>>>>
>>>> The patch is good and we could easily just apply this but I don't 
>>>> want to forget about these issues. In any case we'll want to go into 
>>>> each plugin and set the Object documentation to be more descriptive.
>>>>
>>>> rob
>>> I wrote another version of the help interface today taking into 
>>> consideration the issues you mentioned. It's based on plugins this 
>>> time instead of objects.
>>>
>>> The output looks like this:
>>>
>>> $ ipa
>>> Usage: ipa [global-options] COMMAND ...
>>>
>>> Built-in commands:
>>>   console         Start the IPA interactive Python console.
>>>   help            Display help for a command or topic.
>>>
>>> Help topics:
>>>   aci             Frontend plugins for managing DS ACIs
>>>   application     Frontend plugins for application policy containers.
>>>   automount       Frontend plugins for automount.
>>>   defaultoptions  Frontend plugin for default options in IPA.
>>>   delegation      Frontend plugins for delegations.
>>>   dns             Frontend plugin for DNS management.
>>>   group           Frontend plugins for groups.
>>>   hbac            Frontend plugin for HBAC management.
>>>   host            Frontend plugins for host/machine Identity.
>>>   hostgroup       Frontend plugins for hostgroups.
>>>   join            Machine join
>>>   misc            Misc frontend plugins.
>>>   netgroup        Frontend plugins for netgroups.
>>>   passwd          Frontend plugins for password changes.
>>>   pwpolicy        Frontend plugins for password policy.
>>>   rolegroup       Frontend plugins for rolegroups.
>>>   service         Frontend plugins for service (Identity).
>>>   taskgroup       Frontend plugins for taskgroups.
>>>   user            Frontend plugins for user (Identity).
>>>
>>> Try `ipa --help` for a list of global options.
>>>
>>> Commands not originating from plugins are listed as built-ins. The 
>>> short description for topics is taken from the first line of the 
>>> module's docstring.
>>>
>>> The code itself is a bit hacky, because I just couldn't find any 
>>> better way to get every plugin module, it's docstring a list of 
>>> commands it implements. I'll rewrite it if necessary.
>>>
>>> Pavel
>>> ------------------------------------------------------------------------
>>>
>>> _______________________________________________
>>> Freeipa-devel mailing list
>>> Freeipa-devel at redhat.com
>>> https://www.redhat.com/mailman/listinfo/freeipa-devel
>> How much work is involved in editing the first line of a module's 
>> docstring? Is it developer-only territory or straight-forward enough 
>> that I could do it?
>>
>> I ask because I'm interested in keeping everything related to doc, 
>> help, etc., on an even keel and consistent, which in this case means:
>> s/plugin/plug-in
>> s/backend/back-end
>> s/frontend/front-end
>>
>> I would also review the use of terms like "host/machine", because in 
>> IPA 2.0 "host" refers to the host object specifically created to 
>> represent the host *machine*, and which exists as a new object in DS. 
>> "Machine", on the other hand, refers to the computer itself. (This 
>> gets trickier when we start talking about the "host" where a virtual 
>> machine is running.) Hopefully my understanding of host objects and 
>> machines is correct here.
>>
>> So, in the case of "host : Frontend plugins for host/machine 
>> Identity." I'd suggest a change to "host : Front-end plug-ins for 
>> machine identity."
>>
>> 1. front-end (as per style guide)
>> 2. plug-ins (as per style guide)
>> 3. machine (we're identifying the machine, and using the host object 
>> to do it)
>> 4. identity (lower case)
>>
>> regards,
>>
> Docstrings are a feature of python for associating documentation with 
> objects like modules, classes, function, etc. in the code. They are 
> meant for developers, but are easy to spot and edit. They are always 
> surrounded with 3 double quotes on both sides, like this:
> 
> """docstring - this is the first line containing text, short help"""
> 
> """
> docstring - this is the first line containing text, short help
> 
> blablabla
> """
> 
> Module docstrings are always located at the top of the file before any 
> code, usually just after the authors/license comments (staring with #).
> 
> Command docstrings can be found at the beginning of it's class 
> definition. For example, if we have a command named Foo in plugin module 
> Bar:
> 
> (contents of ipalib/plugins/Bar.py)
> ...
> 
> class Foo(Command):
>     """
>     docstring - first line, short description of what the command does
> 
>     more information displayed on `ipa help Foo`
>     """
> 
> ...
> 
> The current text in module's docstrings were not meant to be displayed 
> as help for topics. If we're going to use this help scheme, they'll have 
> to be rewritten.
> 
> For topics, I think the first line should say what the topic is, so the 
> output look something like this:
> 
> Topics:
>   aci     Directory Server Access Control Instructions
>   hbac    Host-Based Access Control
>   ...
> 
> Additional lines should offer more in depth information, possibly with 
> links to online docs.
> 
> Pavel

Pavel, can you update the topic descriptions along with this patch. Then 
I'll ack both. I think we're going to have to get this in place and use 
it a while to see what fine-tuning it needs. I think this is the right 
approach though.

rob




More information about the Freeipa-devel mailing list