
    -_g5                     @   d Z 	 ddlZ G d d      Z G d de      Z G d de      Zd	 Z G d
 de      Z G d de      Z	 G d de      Z
 G d de      Z G d de      Z G d de      Zd Z G d d      Z G d de      Z G d de      Zy# e$ r ddlZY w xY w)zS This provides a restricted tag language to define the sos report
    index/report
    Nc                       e Zd Zi Zd Zd Zy)Nodec                 @    t        j                  | j                        S N)jsondumpsdataselfs    6/usr/lib/python3/dist-packages/sos/report/reporting.py__str__zNode.__str__   s    zz$))$$    c                      y)NF r   nodes     r   can_addzNode.can_add   s    r   N)__name__
__module____qualname__r	   r   r   r   r   r   r   r      s    D%r   r   c                       e Zd ZdZy)Leafz0Marker class that can be added to a Section nodeN)r   r   r   __doc__r   r   r   r   r   "   s    :r   r   c                   "    e Zd ZdZd Zd Zd Zy)Reportz?The root element of a report. This is a container for sections.c                     i | _         y r   )r	   r
   s    r   __init__zReport.__init__)   s	    	r   c                 "    t        |t              S r   )
isinstanceSectionr   s     r   r   zReport.can_add,   s    $((r   c                 |    |D ]7  }| j                  |      s|j                  | j                  |j                  <   9 y r   )r   r	   namer   nodesr   s      r   addz
Report.add/   s3     	1D||D!'+yy		$))$	1r   Nr   r   r   r   r   r   r%   r   r   r   r   r   &   s    I)1r   r   c                 J    t        | t              r| S | j                  dd      S )z3returns a string text for a given unicode/str inpututf8ignorer   strdecode)ss    r   _decoder.   5   s!    As#AD&()CDr   c                   "    e Zd ZdZd Zd Zd Zy)r    zeA section is a container for leaf elements. Sections may be nested
    inside of Report objects only.c                 2    t        |      | _        i | _        y r   )r.   r"   r	   )r   r"   s     r   r   zSection.__init__>   s    DM		r   c                 "    t        |t              S r   )r   r   r   s     r   r   zSection.can_addB   s    $%%r   c                     |D ]S  }| j                  |      s| j                  j                  |j                  g       j	                  |j                         U y r   )r   r	   
setdefaultADDS_TOappendr#   s      r   r%   zSection.addE   sF     	ID||D!		$$T\\26==diiH	Ir   Nr&   r   r   r   r    r    :   s    &&Ir   r    c                       e Zd ZdZd Zy)Commandcommandsc                 >    t        |      |t        |      d| _        y )N)r"   return_codehrefr.   r	   )r   r"   r:   r;   s       r   r   zCommand.__init__O   s    $T]$/$T],	r   Nr   r   r   r4   r   r   r   r   r7   r7   K   s    G,r   r7   c                       e Zd ZdZd Zy)
CopiedFilecopied_filesc                 <    t        |      t        |      d| _        y N)r"   r;   r<   r   r"   r;   s      r   r   zCopiedFile.__init__Y       $T]$T],	r   Nr=   r   r   r   r?   r?   U   s    G,r   r?   c                       e Zd ZdZd Zy)CreatedFilecreated_filesc                 <    t        |      t        |      d| _        y rB   r<   rC   s      r   r   zCreatedFile.__init__b   rD   r   Nr=   r   r   r   rF   rF   ^   s    G,r   rF   c                       e Zd ZdZd Zy)Alertalertsc                 $    t        |      | _        y r   r<   r   contents     r   r   zAlert.__init__k       G$	r   Nr=   r   r   r   rJ   rJ   g   s    G%r   rJ   c                       e Zd ZdZd Zy)Notenotesc                 $    t        |      | _        y r   r<   rM   s     r   r   zNote.__init__s   rO   r   Nr=   r   r   r   rQ   rQ   o   s    G%r   rQ   c                 $    | j                  d      S )a   Return True if 'string' ends with a backslash, and False otherwise.

        Define this as a named function for no other reason than that pep8
        now forbids binding of a lambda expression to a name:

        'E731 do not assign a lambda expression, use a def'
    \)endswith)strings    r   ends_bsrX   w   s     ??4  r   c                       e Zd ZdZdZdZdZdZdZdZ	dZ
dZd	ZdZd
ZdZeeddfeeddfeeddfeeddfeeddffZg Zd Zd Zd Zy)PlainTextReportz@Will generate a plain text report from a top_level Report object z  * %(name)sz  ! %sz  * %szLoaded Plugins:z  {name}
   z{name}zH========================================================================z-  commands executed:z-  files copied:z-  files created:z
-  alerts:z	-  notes:c                 ^    t        t        j                  |j                              | _        y r   )sorteddictitemsr	   report_data)r   report_nodes     r   r   zPlainTextReport.__init__   s    !$**[-=-=">?r   c           	      B   g x| _         }t        | j                        dkD  r|j                  | j                         |j                  | j                         d}d}t        | j
                        }| j
                  D ]:  \  }}|d| z  }|dz  }|| j                  z  dk(  s&||k  s,|| j                  z  }< || j                  z  }|j                  |       | j
                  D ]g  \  }}|j                  | j                         |j                  |        | j                  D ]&  \  }}	}
}| j                  ||j                  |
|	|       ( i t        | j                        dkD  r|j                  | j                         dj                  t        d |            }|S )Nr   r[   z     r\   c                 J    t        | t              r| S | j                  dd      S )Nr(   r)   r*   )is    r   <lambda>z)PlainTextReport.unicode.<locals>.<lambda>   s"    z!S/A! /0xx/I r   )line_buflenHEADERr5   PLUGLISTHEADERrb   PLUGLISTMAXITEMSPLUGLISTSEPPLUGLISTFOOTERPLUGDIVIDERsubsectionsprocess_subsectionr4   FOOTERjoinmap)r   ri   linerg   	plugcountsection_name_section_contentstype_format_headerfooteroutputs                r   unicodezPlainTextReport.unicode   s   #%%t{{aOODKK( 	++,(()	#// 	)OL!b''DFAD)))Q.Q](((		)
 	###.2.>.> 	A*L*OOD,,-OO|n.262B2B A.w''(8%--(.AA	A t{{aOODKK(3  K') * r   c                    ||v r| j                   j                  |       t        |j                  |      d       D ]   }| j                   j                  ||z         " t	        |      dkD  r| j                   j                  |       y y y )Nc                 0    t        | t              r| d   S dS )Nr"   r[   )r   r`   )xs    r   rh   z4PlainTextReport.process_subsection.<locals>.<lambda>   s    z!T/B!F)  r   )keyr   )ri   r5   r_   getrj   )r   sectionr   r}   r|   r~   items          r   rr   z"PlainTextReport.process_subsection   s    '>MM  (KK$J 5 $$Wt^4	5
 6{Q$$V,  r   N)r   r   r   r   rk   rs   LEAFALERTNOTErl   PLUGLISTITEMrn   rm   ro   PLUGINFORMATrp   r7   r?   rF   rJ   rQ   rq   ri   r   r   rr   r   r   r   rZ   rZ      s    JFFDED&NLKNLK 
$4b9	T/b9	d0b9	\b9	t[b9K H@ D	-r   rZ   c                   v    e Zd ZdZdZdZdZdZdZdZ	dZ
dZd	Zd
ZdZdZeeddfeeddfeeddfeeddfeeddffZy)
HTMLReportz:Will generate a HTML report from a top_level Report objecta  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
         "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
        <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
        <head>
            <meta http-equiv="Content-Type" content="text/html;
                  charset=utf-8" />
            <title>Sos System Report</title>
            <style type="text/css">
                td {
                    padding: 0 5px;
                   }
            </style>
        </head>
        <body>
z</body></html>z(<li><a href="%(href)s">%(name)s</a></li>z<li>%s</li>z#<h3>Loaded Plugins:</h3><table><tr>z&<td><a href="#{name}">{name}</a></td>
z
</tr>
<tr>r]   z</tr></table>z+<h2 id="{name}">Plugin <em>{name}</em></h2>z<hr/>
z<p>Commands executed:</p><ul>z</ul>z<p>Files copied:</p><ul>z<p>Files created:</p><ul>z<p>Alerts:</p><ul>z<p>Notes:</p><ul>N)r   r   r   r   rk   rs   r   r   r   rl   r   rn   rm   ro   r   rp   r7   r?   rF   rJ   rQ   rq   r   r   r   r   r      s    DF F5DED:N<LK$N@LK 
$<gF	T7gF	d8gF	1gF	t0gFKr   r   c                       e Zd ZdZd Zy)
JSONReportz:Will generate a JSON report from a top_level Report objectc                 J    t        j                  | j                  dd      }|S )N   F)indentensure_ascii)r   r   rb   )r   r   s     r   r   zJSONReport.unicode   s    D,,QUKr   N)r   r   r   r   r   r   r   r   r   r      s
    Dr   r   )r   r   ImportError
simplejsonr   r   r   r.   r    r7   r?   rF   rJ   rQ   rX   rZ   r   r   r   r   r   <module>r      s   
	 	;4 ;1T 1E
Id I",d ,, ,,$ ,%D %%4 %!H- H-V# #L C  s   B 	BB