U
    -_g5                     @   s   d Z zddlZW n ek
r,   ddlZY nX G dd dZG dd deZG dd deZd	d
 ZG dd deZG dd deZ	G dd deZ
G dd deZG dd deZG dd deZdd ZG dd dZG dd deZG dd deZdS )zS This provides a restricted tag language to define the sos report
    index/report
    Nc                   @   s    e Zd Zi Zdd Zdd ZdS )Nodec                 C   s   t | jS N)jsondumpsdataself r	   6/usr/lib/python3/dist-packages/sos/report/reporting.py__str__   s    zNode.__str__c                 C   s   dS )NFr	   r   noder	   r	   r
   can_add   s    zNode.can_addN)__name__
__module____qualname__r   r   r   r	   r	   r	   r
   r      s   r   c                   @   s   e Zd ZdZdS )Leafz0Marker class that can be added to a Section nodeN)r   r   r   __doc__r	   r	   r	   r
   r   "   s   r   c                   @   s(   e Zd ZdZdd Zdd Zdd ZdS )	Reportz?The root element of a report. This is a container for sections.c                 C   s
   i | _ d S r   )r   r   r	   r	   r
   __init__)   s    zReport.__init__c                 C   s
   t |tS r   )
isinstanceSectionr   r	   r	   r
   r   ,   s    zReport.can_addc                 G   s&   |D ]}|  |r|j| j|j< qd S r   )r   r   namer   Znodesr   r	   r	   r
   add/   s    
z
Report.addNr   r   r   r   r   r   r   r	   r	   r	   r
   r   &   s   r   c                 C   s   t | tr| S | ddS )z3returns a string text for a given unicode/str inpututf8ignorer   strdecode)sr	   r	   r
   _decode5   s    r"   c                   @   s(   e Zd ZdZdd Zdd Zdd ZdS )	r   zeA section is a container for leaf elements. Sections may be nested
    inside of Report objects only.c                 C   s   t || _i | _d S r   )r"   r   r   )r   r   r	   r	   r
   r   >   s    
zSection.__init__c                 C   s
   t |tS r   )r   r   r   r	   r	   r
   r   B   s    zSection.can_addc                 G   s0   |D ]&}|  |r| j|jg |j qd S r   )r   r   
setdefaultADDS_TOappendr   r	   r	   r
   r   E   s    
zSection.addNr   r	   r	   r	   r
   r   :   s   r   c                   @   s   e Zd ZdZdd ZdS )CommandZcommandsc                 C   s   t ||t |d| _d S )N)r   return_codehrefr"   r   )r   r   r'   r(   r	   r	   r
   r   O   s    zCommand.__init__Nr   r   r   r$   r   r	   r	   r	   r
   r&   K   s   r&   c                   @   s   e Zd ZdZdd ZdS )
CopiedFileZcopied_filesc                 C   s   t |t |d| _d S N)r   r(   r)   r   r   r(   r	   r	   r
   r   Y   s    zCopiedFile.__init__Nr*   r	   r	   r	   r
   r+   U   s   r+   c                   @   s   e Zd ZdZdd ZdS )CreatedFileZcreated_filesc                 C   s   t |t |d| _d S r,   r)   r-   r	   r	   r
   r   b   s    zCreatedFile.__init__Nr*   r	   r	   r	   r
   r.   ^   s   r.   c                   @   s   e Zd ZdZdd ZdS )AlertZalertsc                 C   s   t || _d S r   r)   r   Zcontentr	   r	   r
   r   k   s    zAlert.__init__Nr*   r	   r	   r	   r
   r/   g   s   r/   c                   @   s   e Zd ZdZdd ZdS )NoteZnotesc                 C   s   t || _d S r   r)   r0   r	   r	   r
   r   s   s    zNote.__init__Nr*   r	   r	   r	   r
   r1   o   s   r1   c                 C   s
   |  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)stringr	   r	   r
   ends_bsw   s    r5   c                   @   s   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d Zdd Zdd ZdS )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                 C   s   t t|j| _d S r   )sorteddictitemsr   report_data)r   Zreport_noder	   r	   r
   r      s    zPlainTextReport.__init__c              	   C   s   g  | _ }t| jdkr$|| j || j d}d}t| j}| jD ]>\}}|d| 7 }|d7 }|| j dkrH||k rH|| j7 }qH|| j7 }|| | jD ]H\}}|| j	 ||  | j
D ] \}}	}
}| ||j|
|	| qqt| jdkr|| j dtdd |}|S )Nr   r7   z     r8   c                 S   s   t | tr| S | ddS )Nr   r   r   )ir	   r	   r
   <lambda>   s   z)PlainTextReport.unicode.<locals>.<lambda>)line_buflenHEADERr%   PLUGLISTHEADERr=   PLUGLISTMAXITEMSPLUGLISTSEPPLUGLISTFOOTERPLUGDIVIDERsubsectionsprocess_subsectionr$   FOOTERjoinmap)r   rA   liner?   Z	plugcountZsection_name_Zsection_contentsZtype_format_headerfooteroutputr	   r	   r
   unicode   s:    




  zPlainTextReport.unicodec                 C   s\   ||krX| j | t||dd dD ]}| j ||  q*t|dkrX| j | d S )Nc                 S   s   t | tr| d S dS )Nr   r7   )r   r;   )xr	   r	   r
   r@          z4PlainTextReport.process_subsection.<locals>.<lambda>)keyr   )rA   r%   r:   getrB   )r   ZsectionrW   rQ   rP   rR   itemr	   r	   r
   rJ      s    
z"PlainTextReport.process_subsectionN)r   r   r   r   rC   rK   LEAFALERTNOTErD   PLUGLISTITEMrF   rE   rG   PLUGINFORMATrH   r&   r+   r.   r/   r1   rI   rA   r   rT   rJ   r	   r	   r	   r
   r6      s.   




"r6   c                   @   sv   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dS )
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>r9   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   rC   rK   rZ   r[   r\   rD   r]   rF   rE   rG   r^   rH   r&   r+   r.   r/   r1   rI   r	   r	   r	   r
   r_      s&   




r_   c                   @   s   e Zd ZdZdd ZdS )
JSONReportz:Will generate a JSON report from a top_level Report objectc                 C   s   t j| jddd}|S )N   F)indentZensure_ascii)r   r   r=   )r   rS   r	   r	   r
   rT      s    zJSONReport.unicodeN)r   r   r   r   rT   r	   r	   r	   r
   r`      s   r`   )r   r   ImportErrorZ
simplejsonr   r   r   r"   r   r&   r+   r.   r/   r1   r5   r6   r_   r`   r	   r	   r	   r
   <module>   s$   
		K&