
    ce                         d Z ddlZddlZddlZddlmZ ddlmZmZm	Z	m
Z
mZmZmZ ddlmZmZ ddlmZmZ ddlmZmZmZmZ ddlmZ dd	lmZ  G d
 de          ZdS )Logger widget.    N)Qt)QApplicationQHBoxLayoutQHeaderViewQLabelQTableWidgetQTableWidgetItemQVBoxLayout)LOG_FILENAME
LOG_FOLDER)load_log	log_files)ButtonPrimaryComboBoxBaseSpacerHorizontalSpacerVertical)
DialogBase)LineEditSearchc                   N     e Zd ZdZdeef fd	Zd Zd Zd Z	d Z
d Zd	 Z xZS )
LogViewerDialogr   Nc                 ,   t                                          |           d| _        g d| _        t	          t          t          j        | j                            | _        || _	        || _
        t          d          | _        t                      | _        t          |           | _        t#          d          | _        t'                      | _        | j                            t,          j        d           | j                                        }| j                                        }|                    d           |                    t8          j                   |                    t8          j                   | j                            t          j                   | j                             t          j!                   | "                    d           | #                    d           | $                    d	           | j        %                    d
           tM                      }|'                    | j                   |'                    tQ                                 |'                    | j                   |)                                 |'                    tQ                                 |'                    | j                   |'                    tQ                                 |'                    | j                   tU                      }|+                    |           |'                    tY                                 |'                    | j                   | -                    |           | j        j.        /                    | j0                   | j        j1        /                    | j2                   | j        j3        /                    | j4                   | 5                                 | 6                                 dS )z
        Logger widget.

        Parameters
        ----------
        log_folder: str
            Folder where logs are located
        log_filename: str
            Basic name for the rotating log files.
        )parentN)	timelevelmodulemethodlinepathmessage	exception	tracebackzSelect log file:CopyTz
Log Vieweri   i  z	Search...)7super__init___data_columnslistmapstr
capitalize_headers_log_filename_log_folderr   labelr   comboboxr	   
table_logsr   button_copyr   text_searchsetAttributer   WA_LayoutUsesWidgetRecthorizontalHeaderverticalHeadersetStretchLastSectionsetSectionResizeModer   FixedsetSelectionBehavior
SelectRowssetEditTriggersNoEditTriggerssetWindowTitlesetMinimumWidthsetMinimumHeightsetPlaceholderTextr   	addWidgetr   
addStretchr   	addLayoutr   	setLayoutcurrentIndexChangedconnectupdate_textclicked	copy_itemtextChangedfilter_textsetupupdate_style_sheet)	selfr   
log_folderlog_filenamehorizontal_headervertical_header
top_layoutlayout	__class__s	           Ilib/python3.11/site-packages/anaconda_navigator/widgets/dialogs/logger.pyr%   zLogViewerDialog.__init__   sc     	'''
/
 /
 /
 /33s~t}3U3U.V.V)% .//
$&t,,(00)++ 	$$R%?FFF O<<>>/88:://555..{/@AAA,,[->???,,\-DEEE''(CDDDL)))S!!!c"""++K888 !]]
TZ(((-//000T]+++-//000T-...-//000T-...$$$))***)))v 	)11$2BCCC ((888$,,T-=>>> 	

!!!!!    c                     dS )zUpdate custom CSS stylesheet.N )rP   s    rX   rO   z"LogViewerDialog.update_style_sheetg   s      rY   c                     | j                                          t          | j        | j                  }t          t          t          j        j	        |                    }| j         
                    |           dS )zSetup widget content.)rQ   rR   N)r0   clearr   r.   r-   r(   r)   osr   basenameaddItems)rP   pathsfiless      rX   rN   zLogViewerDialog.setupj   sp    '+
 
 
 S)51122u%%%%%rY   c                 V   | j                                                                         t          | j                  D ]g\  }}t          fd|                                D                       r| j                            |           M| j        	                    |           hdS )z)Search for text in the selected log file.c              3   ^   K   | ]'}t          |                                          v V  (d S N)r*   lower).0valuesearchs     rX   	<genexpr>z.LogViewerDialog.filter_text.<locals>.<genexpr>y   s:      KKE6SZZ--///KKKKKKrY   N)
r3   textrf   	enumerater&   anyvaluesr1   showRowhideRow)rP   indexdatari   s      @rX   rM   zLogViewerDialog.filter_textt   s     &++--3355$TZ00 	/ 	/KE4KKKKT[[]]KKKKK /''....''....		/ 	/rY   c                 z    i }| j         r1t          | j                   }d|cxk    r|k     rn n| j         |         }|S )z3Give the current row data concatenated with spaces.r   )r&   len)rP   rowrr   lengths       rX   row_datazLogViewerDialog.row_data~   sP    : 	'__FC    &     z#rY   c                    t           j                            | j        | j                                                  }t          |          | _        | j        	                                 | j        
                    d           | j                            t          | j                             | j                            t          | j                             | j                            | j                   t#          | j                  D ]m\  }}t#          | j                  D ]S\  }}|                    |d          }t'          t)          |                    }| j                            |||           Tnt-          | j                                                  D ]}	| j                            |	           | j                                         | j        
                    d           | j                                         | j                                         | j                            dt:          j                   | j                            dd           dS )z(Update logs based on combobox selection.F T   r   N) r^   r   joinr.   r0   currentTextr   r&   r1   r]   setSortingEnabledsetRowCountrt   setColumnCountr'   setHorizontalHeaderLabelsr,   rl   getr
   r*   setItemrangecolumnCountresizeColumnToContentsresizeRowsToContentsscrollToBottomscrollToTopsortByColumnr   AscendingOrdersetCurrentCell)
rP   rq   r   ru   rr   colcol_keyrh   itemcolumn_indexs
             rX   rI   zLogViewerDialog.update_text   s   w||D,dm.G.G.I.IJJd^^
))%000##C
OO444&&s4='9'9:::11$-@@@"4:.. 	8 	8IC )$- 8 8 8 8W"--'E

33''S$77778
 "$/"="="?"?@@ 	A 	ALO22<@@@@,,...))$///&&(((##%%%$$Q(9::: 	&&q!,,,,,rY   c                 j    t          j                    } j                                        }|rt	          t          d |D                                 } j        rV fd|D             }t          j        |dd          }|	                                
                    d|z   dz              dS dS dS )	z3Copy selected item to clipboard in markdown format.c              3   >   K   | ]}|                                 V  d S re   )ru   )rg   r   s     rX   rj   z,LogViewerDialog.copy_item.<locals>.<genexpr>   s*      ;;Tdhhjj;;;;;;rY   c                 *    g | ]}j         |         S r[   )r&   )rg   ru   rP   s     rX   
<listcomp>z-LogViewerDialog.copy_item.<locals>.<listcomp>   s    <<<DJsO<<<rY   T   )	sort_keysindentz```json
z
```N)r   instancer1   selectedIndexessetsortedr&   jsondumps	clipboardsetText)rP   appitemsrowsall_datadumps   `     rX   rK   zLogViewerDialog.copy_item   s    #%%//11 	Fv;;U;;;;;<<Dz F<<<<t<<<z(d1EEE''d(:W(DEEEEE	F 	FF FrY   )__name__
__module____qualname____doc__r   r   r%   rO   rN   rM   rw   rI   rK   __classcell__)rW   s   @rX   r   r      s         !	H" H" H" H" H" H"T, , ,& & &/ / /  - - -:	F 	F 	F 	F 	F 	F 	FrY   r   )r   r   r^   typingqtpy.QtCorer   qtpy.QtWidgetsr   r   r   r   r	   r
   r   anaconda_navigator.configr   r   anaconda_navigator.utils.logsr   r   anaconda_navigator.widgetsr   r   r   r   "anaconda_navigator.widgets.dialogsr   (anaconda_navigator.widgets.helperwidgetsr   r   r[   rY   rX   <module>r      s0      				        v v v v v v v v v v v v v v v v v v > > > > > > > > = = = = = = = = d d d d d d d d d d d d 9 9 9 9 9 9 C C C C C CRF RF RF RF RFj RF RF RF RF RFrY   