
    s$                         S r SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJ	r	  SS	KJ
r
  SS
KJr  SSKr\R                  (       a  SrSrSrOSrSrSrS rS rS rS r " S S\	R,                  5      rS rg)a<  The cli_tree command help document markdown generator.

This module generates command help markdown from the tree generated by:

  gcloud --quiet alpha  # make sure the alpha component is installed
  gcloud --quiet beta   # make sure the beta component is installed
  gcloud meta list-gcloud --format=json |
  python -c "
    import json
    import sys
    data = json.load(sys.stdin)
    print 'gcloud_tree =', data" > gcloud_tree.py

Usage:

  from googlecloudsdk.calliope import cli_tree_markdown
  from googlecloudsdk.command_lib.shell import gcloud_tree

  command = <command node in gcloud tree>
  flag = <flag node in gcloud tree>
  generator = cli_tree_markdown.CliTreeMarkdownGenerator(command, gcloud_tree)
  generator.PrintSynopsisSection()
  generator.PrintFlagDefinition(flag)
    ...
  markdown = generator.Edit()
    )absolute_import)division)unicode_literals)arg_parsers)base)cli_tree)markdown)
usage_text)
propertiesNs   flags
   positionals   groupflag
positionalgroupc                 P    U S:X  a  Sn [         R                  R                  U 5      $ )z-Returns the base.ReleaseTrack for release_id.INTERNALGA)r   ReleaseTrackFromId)
release_ids    0lib/googlecloudsdk/calliope/cli_tree_markdown.py_GetReleaseTrackFromIdr   B   s&    :J				!	!*	--    c                 <   [        [        [        4U 5      nSUl        U R	                  [
        R                  U R	                  SS5      5      Ul        UR                  Ul        SUl	        U R	                  [
        R                  U R	                  [
        R                  S5      5      Ul        UR                  Ul        UR                  Ul        UR                   R#                  5       R%                  SS5      Ul        UR(                  Ul        UR                   /Ul        [/        US5      (       d  SUl        UR                   S:X  a  SUl        OUR2                  S	;  a  S
Ul        UR                   S:X  a  [4        R6                  " 5       Ul         OBUR                   S:X  a  [4        R8                  " 5       Ul         OUR                   S:X  a  SUl         UR:                  R	                  [
        R<                  5      (       a  SUl        UR:                  R	                  S5      nU(       ao  [
        R@                  U;   a  SnU[
        R@                     nOSnUR                   S:X  a  SOSn[B        RD                  " U[
        RF                     5      UU4Ul$        U$ )z@Returns a flag object suitable for the calliope.markdown module.Fhidden-_defaultNboolr   )?*+   dictliststringTpropertyvalue)%typeFLAG_TYPE_NAMEobjectis_groupgetr   LOOKUP_IS_HIDDEN	is_hiddenr   is_positionalLOOKUP_IS_REQUIREDLOOKUP_REQUIREDis_requiredrequireddescriptionhelpnamelowerreplacedestr&   metavaroption_stringshasattrr   nargsr   ArgDictArgListattrLOOKUP_INVERTED_SYNOPSISinverted_synopsisLOOKUP_VALUEr   
FromStringLOOKUP_NAMEstore_property)dr   propkindr&   s        r   FlagrI   I   s   	nvi	+$$-5522AEE(E4JK$.$+$UU!!155)A)A5#I$ ""$-$)iioo''S1$)$,$	y	!	!DL	YY&DJzz(DJ	YY&##%DIyyF##%DIyyHDI	YY]]84455!D	z	"$	$d8(()eeyyF*Vdd8#7#789D 
+r   c                    [        [        [        4U 5      nUR                  Ul        SUl        SUl        SUl        UR                  S:g  Ul	        UR                  R                  5       R                  SS5      Ul        UR                  Ul        / Ul         [!        UR                  5      Ul        U$ ! ["         a     U$ f = f)zFReturns a positional object suitable for the calliope.markdown module.FTr   r   r   )r'   POSITIONAL_TYPE_NAMEr)   r3   r4   r*   r-   r.   r<   r1   r&   r6   r7   r8   r9   r:   int
ValueError)rF   r   s     r   
PositionalrN   y   s    (6)Q7****/**!*%++s2*$$**,44S#>*/!''* *	:++,J 
 
 			s   B5 5
CCc                    U R                  [        R                  S5      (       a  [        U 5      $ U R                  [        R                  S5      (       d  [        U 5      $ [        [        [        4U 5      nU R                  [        R                  / 5       Vs/ s H  n[        U5      PM     snUl        SUl        UR                  Ul        SUl        SUl        SUl        SUl        U$ s  snf )zEReturns an argument object suitable for the calliope.markdown module.FNT)r+   r   LOOKUP_IS_POSITIONALrN   LOOKUP_IS_GROUPrI   r'   GROUP_TYPE_NAMEr)   LOOKUP_ARGUMENTSArgument	argumentscategoryr3   r4   	is_globalr-   	sort_argsdisable_default_heading)rF   r   as      r   rT   rT      s    UU8((%00a=	
x''	/	/7N
	1
-%*+%%0I0I2*NO*NQXa[*NO%/%.  %*%/%/%/"'%	, Ps   C,c                   t   ^  \ rS rSrSrU 4S jrS rS rS rSS jr	SS jr
S	 rS
 rSU 4S jjrS rSrU =r$ )CliTreeMarkdownGenerator   a  cli_tree command help markdown document generator.

Attributes:
  _capsule: The help text capsule.
  _command: The tree node for command.
  _command_path: The command path list.
  _tree: The (sub)tree root.
  _sections: The help text sections indexed by SECTION name.
  _subcommands: The dict of subcommand help indexed by subcommand name.
  _subgroups: The dict of subgroup help indexed by subcommand name.
c                 B  > X l         Xl        U[        R                     U l        [
        [        U ]  U R                  [        U R                  [        R                     5      U R                  R                  [        R                  U R                  R                  SS5      5      5        U R                  [        R                     U l        U R                  [        R                     U l        U R!                  5       U l        U R%                  5       U l        SU l        g)z^Constructor.

Args:
  command: The command node in the root tree.
  tree: The (sub)tree root.
r   FTN)_tree_commandr   LOOKUP_PATH_command_pathsuperr\   __init__r   LOOKUP_RELEASEr+   r,   LOOKUP_CAPSULE_capsuleLOOKUP_SECTIONS	_sectionsGetSubCommandHelp_subcommandsGetSubGroupHelp
_subgroups_sort_top_level_args)selfcommandtree	__class__s      r   rd   !CliTreeMarkdownGenerator.__init__   s     JM !5!56D	
"D2t}}X-D-DEF%%t}}'8'85'I	
 MM("9"9:DM]]8#;#;<DN..0D**,DO $Dr   c                     U R                   [        R                     nU(       a  USS U:w  a  gUSS nU R                   nU H!  nU[        R                     nXE;  a    gXT   nM#     U$ )z*Returns the command node for command_path.Nr!   )r_   r   ra   LOOKUP_COMMANDS)ro   command_pathpathrp   r5   commandss         r   _GetCommandFromPath,CliTreeMarkdownGenerator._GetCommandFromPath   sq    ::h**+D	bq	T	!!!"%ljjG112h		g	 
 Nr   c                 L    U R                  [        R                  /U-   5      SL$ )z>Returns True if the given command path after the top is valid.N)ry   r   DEFAULT_CLI_NAME)ro   rv   s     r   IsValidSubPath'CliTreeMarkdownGenerator.IsValidSubPath   s-     	  (";";!<|!KL	r   c                     U R                  U R                  5      n U[        R                     [        R                      Vs/ s H  n[        U5      PM     sn$ s  snf ! [        [        4 a    / s $ f = f)zReturns the command arguments.)ry   rb   r   LOOKUP_CONSTRAINTSrS   rT   KeyError	TypeError)ro   rp   rZ   s      r   GetArguments%CliTreeMarkdownGenerator.GetArguments   s    &&t'9'9:G 8667''a 1+   i  is#   &A  AA  A   A54A5c                     UR                   $ )a  Returns the help text with auto-generated details for arg.

The help text was already generated on the cli_tree generation side.

Args:
  arg: The arg to auto-generate help text for.
  depth: The indentation depth at which the details should be printed. Added
    here only to maintain consistency with superclass during testing.

Returns:
  The help text with auto-generated details for arg.
)r4   )ro   argdepths      r   GetArgDetails&CliTreeMarkdownGenerator.GetArgDetails   s     88Or   c                    [         R                  " U R                  [        R                     5       VVs0 s H  u  p#U[        R
                     U:X  d  M  U[        R                  " U[        R                     UR                  [        R                  UR                  SS5      5      [        U[        R                     5      S9_M     snn$ s  snnf )zDReturns the help dict indexed by command for sub commands or groups.r   F)	help_textr-   release_track)six	iteritemsr`   r   ru   rQ   r
   HelpInforf   r+   r,   r   re   )ro   r*   r5   
subcommands       r   _GetSubHelp$CliTreeMarkdownGenerator._GetSubHelp   s     !$MM(223!
!
D h../8;	
j!! !8!89 nn)):>>(E+J 18223
 	
!
  s   CA4Cc                      U R                  SS9$ )z7Returns the subcommand help dict indexed by subcommand.Fr*   r   ro   s    r   rj   *CliTreeMarkdownGenerator.GetSubCommandHelp  s    U++r   c                      U R                  SS9$ )z3Returns the subgroup help dict indexed by subgroup.Tr   r   r   s    r   rl   (CliTreeMarkdownGenerator.GetSubGroupHelp
  s    T**r   c                 h   > [        U[        5      (       a  [        U5      n[        [        U ]  XS9  g)z$Prints a flags definition list item.)disable_headerN)
isinstancer"   rI   rc   r\   PrintFlagDefinition)ro   r   r   rr   s      r   r   ,CliTreeMarkdownGenerator.PrintFlagDefinition  s1    $$Zd	
"D= > r   c                     U$ )z7{...} references were done when the tree was generated. )ro   docs     r   _ExpandHelpText(CliTreeMarkdownGenerator._ExpandHelpText  s    Jr   )rg   r`   rb   ri   rn   rk   rm   r_   )N)F)__name__
__module____qualname____firstlineno____doc__rd   ry   r}   r   r   r   rj   rl   r   r   __static_attributes____classcell__)rr   s   @r   r\   r\      s?    
%."$,+ r   r\   c                 4    [        X5      R                  5       $ )zReturns the help markdown document string for the command node in tree.

Args:
  command: The command node in the root tree.
  tree: The (sub)tree root.

Returns:
  The markdown document string.
)r\   Generate)rp   rq   s     r   Markdownr     s     
"'	0	9	9	;;r   )r   
__future__r   r   r   googlecloudsdk.callioper   r   r   r	   r
   googlecloudsdk.corer   r   PY2r(   rK   rR   r   rI   rN   rT   MarkdownGeneratorr\   r   r   r   r   <module>r      s    6 '  ' / ( , , . * 
 77.&/.%/.-`$"|x99 |~
<r   