
    >/i                         S r SSKrSSKrSSKrSSKrSSKrSSKJr  \R                  " \	5      r
 " S S\5      r\R                  SS j5       rg)a  
================
Custom Formatter
================

This formatter outputs the issues in custom machine-readable format.

default template: ``{abspath}:{line}: {test_id}[bandit]: {severity}: {msg}``

:Example:

.. code-block:: none

    /usr/lib/python3.6/site-packages/openlp/core/utils/__init__.py:405: B310[bandit]: MEDIUM: Audit url open for permitted schemes. Allowing use of file:/ or custom schemes is often unexpected.

.. versionadded:: 1.5.0

.. versionchanged:: 1.7.3
    New field `CWE` added to output

    N)test_propertiesc                   (    \ rS rSrSr\S 5       rSrg)
SafeMapper'   z'Safe mapper to handle format key errorsc                     SU-  $ )Nz{%s} )clskeys     R/home/james-whalen/.local/lib/python3.13/site-packages/bandit/formatters/custom.py__missing__SafeMapper.__missing__*   s    |    r   N)__name__
__module____qualname____firstlineno____doc__classmethodr   __static_attributes__r   r   r   r   r   '   s    1 r   r   c                   ^"^# / / S.nU R                  5        H  u  pgUS   R                  XgS.5        M     U R                  X#S9nUn	Uc  Sn	S S S	 S
 S S S S S S S S.n
U
R                  5        VVs0 s H  u  pU[	        U5      _M     snnm# [        [        R                  " 5       R                  U	5      5      n[        R                  " 5       R                  U	S[        SS95        W Vs1 s H  oS   c  M
  US   iM     nnU(       d+  [        R                  S5        [        R                   " S5        U#4S jn/ nU H/  nX;  d  M
  U" U5      n[        R#                  SUU5        UU/-  nM1     / nU H  u  nnnnU(       aA  [$        R&                  " SSU5      n[$        R&                  " SSU5      nUR                  U5        Uc  MU  UU;   a  UR                  U5        Mn  UUU/n/ S QnUR                  S/[)        UU5       VVs/ s H  u  nnU(       a  UU-    OS!PM     snn-   S/-   5        M     S!R+                  U VVs/ s H  nU  H  nUPM     M     snn5      S"-   nU   U HI  m"[        U"4S# jU
R                  5        5       5      n UR,                  " S0 U D6n!UR/                  U!5        MK     SSS5        UR0                  [        R2                  R0                  :w  a!  [        R5                  S$UR0                  5        ggs  snnf ! [         aD  n[        R                  SUR                  S   5        [        R                   " S5         SnAGNtSnAff = fs  snf s  snnf s  snnf ! , (       d  f       N= f)%a  Prints issues in custom format

:param manager: the bandit manager object
:param fileobj: The output file object, which may be sys.stdout
:param sev_level: Filtering severity level
:param conf_level: Filtering confidence level
:param template: Output template with non-terminal tags <N>
                (default: '{abspath}:{line}:
                {test_id}[bandit]: {severity}: {msg}')
)resultserrorsr   )filenamereason)	sev_level
conf_levelNz6{abspath}:{line}: {test_id}[bandit]: {severity}: {msg}c                 T    [         R                  R                  U R                  5      $ N)ospathabspathfnameissues    r   <lambda>report.<locals>.<lambda>J       !=r   c                 T    [         R                  R                  U R                  5      $ r   )r   r    relpathr"   r#   s    r   r%   r&   K   r'   r   c                     U R                   $ r   )linenor#   s    r   r%   r&   L   s    ellr   c                     U R                   $ r   )
col_offsetr#   s    r   r%   r&   M   s
    U--r   c                     U R                   $ r   )end_col_offsetr#   s    r   r%   r&   N   s
    !5!5r   c                     U R                   $ r   )test_idr#   s    r   r%   r&   O   s    r   c                     U R                   $ r   )severityr#   s    r   r%   r&   P   s    %..r   c                     U R                   $ r   )textr#   s    r   r%   r&   Q   s    UZZr   c                     U R                   $ r   )
confidencer#   s    r   r%   r&   R   s
    E$4$4r   c                     U R                   $ r   )	lineranger#   s    r   r%   r&   S   s    ur   c                     U R                   $ r   )cwer#   s    r   r%   r&   T   s    UYYr   )r!   r)   linecolend_colr1   r3   msgr7   ranger;   r   r   )r<   z#Template is not in valid format: %s      z9No tags were found in the template. Are you missing '{}'?c           	         > TR                  5        VVs/ s H  u  p[        [        U 5      U-  5      U4PM      nnn[        U5      S   S   $ s  snnf )NrB   )itemslensetsorted)tagtt_setsimilarity_listtag_sim_dicts       r   get_similar_tagreport.<locals>.get_similar_tagj   sZ    7C7I7I7K
7K81SSE!"A&7K 	 
 o&r*1--
s   %AzJTag '%s' was not recognized and will be skipped, did you mean to use '%s'?{z{{}z}}) :!rR   
c              3   :   >#    U  H  u  pX" T5      4v   M     g 7fr   r   ).0kvdefects      r   	<genexpr>report.<locals>.<genexpr>   s      (+=41AfI+=s   zResult written to file: %s)get_skippedappendget_issue_listrE   rG   liststring	Formatterparsevformatr   
ValueErrorLOGerrorargssysexitwarningresubzipjoinformatwritenamestdoutinfo)$managerfileobjr   r   templatemachine_outputr"   r   r   msg_template
tag_mapperrI   _parsed_template_origerJ   tag_setrN   tag_blacklistsimilar_tagmsg_parsed_template_listliteral_text
field_namefmt_spec
conversionparamsmarkersmplstitemmsg_parsed_templateevaluated_tagsoutputrZ   rM   s$                                     @@r   reportr   /   sh    "$r2N ,,.x ''U(MN / $$ % G LO >=*-5.0'4.&J 1;0@0@0BC0BfcCSM0BCL#F$4$4$6$<$<\$JK 	""<ZQ5GH
 2F1qTtqt1GF		MN. M )#.KKK,	 cU"M   ":N6j(J66#t\:L66#t\:L$++L9!]*(//
; (J7F$G$++7:7F7KL7Ktq!a!eW*7KLM% ;O* 	!9J!9#cdc!9JK
	  
F' (+5+;+;+=( N )//A.AFMM&!  
 ||szz&-w||< 'Q D  		7C GT M
 K 
sD   9LAL 4	M,	M,M1M7
3AM=
M)%9M$$M)=
Nr   )r   loggingr   rl   ra   ri   bandit.corer   	getLoggerr   rf   dictr   accepts_baseliner   r   r   r   <module>r      sV   
.  	 	  
 '!  !!q= "q=r   