
    +h                        d Z ddlZddlmZ ddlmZ ddlmZ ddlm	Z	 ddl
mZ ddlmZ 	 ddlZddlZddlZd	Zn# e$ r d
ZY nw xY wd Zd ZddZddddddZd ZddZerKej        j        j                            de           e                                D ]\  ZZ  eee             ed          Z! ed          Z"d Z#d Z$dS )zBMisc. utility functions/classes for admin documentation generator.    N)HeaderParseError)HeaderParser)cleandoc)reverse)_lazy_re_compile)	mark_safeTFc                     t          | d          r| j        }|j         d|j         S | j        }t	          | d| j        j                  }|dz   |z   S )N
view_class.__qualname__)hasattrr
   
__module__r   getattr	__class____name__)	view_funcklassmod_name	view_names       b/var/www/html/e360mart/e360mart_env/lib/python3.11/site-packages/django/contrib/admindocs/utils.pyget_view_namer      sd    y,'' :$"99U%7999#H	>93F3OPPIc>I%%    c                    | sddi fS t          |           } t          j        d|           }|d         }t          |          dk    rd}i }nt	                      }	 |                    |d                   }t          |                                          }|rd                    |dd                   }nMd                    |dd                   }n/# t          $ r" i }d                    |dd                   }Y nw xY w|||fS )zN
    Parse out the parts of a docstring.  Return (title, body, metadata).
     z\n{2,}r      z

N)
r   resplitlenr   parsestrdictitemsjoinr   )	docstringpartstitlebodymetadataparsers         r   parse_docstringr*      s"     2rz##IHY	**E!HE
5zzQ
	.uRy11H
 HNN,,--H .{{52;//{{59--   	* 	* 	*H;;uQRRy))DDD	* $  s   C )D Dc                     dd|t          d                              d          ddd}|od|z  }d}t          j                            || z  |d	d
|          }t          |d                   S )z<
    Convert the string from reST to an XHTML fragment.
    T   zdjango-admindocs-docroot/F)doctitle_xforminitial_header_leveldefault_reference_context	link_baseraw_enabledfile_insertion_enabledz<%s>z7
.. default-role:: cmsreference

%s

.. default-role::
Nhtml)source_pathdestination_pathwriter_namesettings_overridesfragment)r   rstripdocutilscorepublish_partsr   )textr0   thing_being_parsed	overridessourcer%   s         r   	parse_rstrB   ;   s    
  !%>788??DD"' I ,K9K0KF M''&y (  E
 U:&'''r   z%s/models/%s/z%s/views/%s/z%s/templates/%s/z%s/filters/#%sz%s/tags/#%s)modelviewtemplatefiltertagc                 h    dfd	}t           j        j        j                            | |           d S )Nc                     |i }t          j        j        ||fd|j        j        j        |                                fz  i|}|gg fS Nrefuri)r;   nodes	referencedocumentsettingsr1   lower)	namerawtextr>   linenoinlineroptionscontentnodeurlbases	           r   _rolez$create_reference_role.<locals>._rolef   so    ?G~'
 
  )3

 
 
 
 vrzr   NN)r;   parsersrstrolesregister_canonical_role)rolenamerX   rY   s    ` r   create_reference_roler`   e   sH          66xGGGGGr   c                     |i }|j         j        j        }t          j        j        ||fdt          |         |j         j        j        |                                fz  i|}|gg fS rJ   )	rN   rO   r0   r;   rL   rM   ROLESr1   rP   )	rQ   rR   r>   rS   rT   rU   rV   contextrW   s	            r   default_reference_rolerd   v   s    'AG>#  g%/JJLL"
 
  D 62:r   cmsreferencez\(\?P(<\w+>)z\(c                    d t                               |           D             }g }|D ]z\  }}}d\  }}t          | |d                   D ]W\  }}	|	dk    r|dk    r|dz  }n|	dk    r|dk    r|dz  }|	}|dk    r'|                    | |||z   dz            |f            nX{|D ]\  }
}|                     |
|          } | S )	a  
    Find named groups in `pattern` and replace them with the group name. E.g.,
    1. ^(?P<a>\w+)/b/(\w+)$ ==> ^<a>/b/(\w+)$
    2. ^(?P<a>\w+)/b/(?P<c>\w+)/$ ==> ^<a>/b/<c>/$
    3. ^(?P<a>\w+)/b/(\w+) ==> ^<a>/b/(\w+)
    4. ^(?P<a>\w+)/b/(?P<c>\w+) ==> ^<a>/b/<c>
    c                 p    g | ]3}|                     d           |                    d           |d         f4S )r   r   )startend.0ms     r   
<listcomp>z(replace_named_groups.<locals>.<listcomp>   sG        
QUU1XXqt$  r   r   NN(\r   )r   )named_group_matcherfinditer	enumerateappendreplace)patternnamed_group_indicesgroup_pattern_and_namerh   ri   
group_nameunmatched_open_brackets	prev_charidxvalgroup_patterns              r   replace_named_groupsr      s4    $--g66  
  "5  sJ-4*!'#$$-00 	 	HC czzi4//'1,''	T 1 1'1,'I '!++&--wuS3Y]7J/KZ.XYYY ,
 &< = =!z//-<<Nr   c                    d t                               |           D             }g }|D ]q}d\  }}t          | |dz   d                   D ]O\  }}|dk    r|dk    r|dz  }n|dk    r|dk    r|dz  }|}|dk    r|                    ||d	z   |z   f            nPrg }d}	|D ](\  }}
|	r||	k    s|	s|                    ||
f           |
}	)|rg d}	}|D ]F\  }}
|	r|                    | |	|                    |                    | d|         d
z              |
}	G|                    | |	d                    d                    |          S | S )a)  
    Find unnamed groups in `pattern` and replace them with '<var>'. E.g.,
    1. ^(?P<a>\w+)/b/(\w+)$ ==> ^(?P<a>\w+)/b/<var>$
    2. ^(?P<a>\w+)/b/((x|y)\w+)$ ==> ^(?P<a>\w+)/b/<var>$
    3. ^(?P<a>\w+)/b/(\w+) ==> ^(?P<a>\w+)/b/<var>
    4. ^(?P<a>\w+)/b/((x|y)\w+) ==> ^(?P<a>\w+)/b/<var>
    c                 8    g | ]}|                     d           S )r   )rh   rj   s     r   rm   z*replace_unnamed_groups.<locals>.<listcomp>   s"    YYYAQWWQZZYYYr   rn   r   Nro   rp   rq   r      z<var>r   )unnamed_group_matcherrs   rt   ru   r#   )rw   unnamed_group_indicesgroup_indicesrh   r{   r|   r}   r~   group_start_end_indicesprev_endri   final_patterns               r   replace_unnamed_groupsr      s    ZY1F1O1OPW1X1XYYYM&  -4*!'%!)**"566 	 	HC czzi4//'1,''	T 1 1'1,'I&!++$$eUQY_%=>>> , !H#  
s 	9(((#**E3<888  #%dx1 	 	JE3 >$$WXe^%<===  %7!:;;;HHWXYY/000ww}%%%r   )NrZ   )%__doc__r   email.errorsr   email.parserr   inspectr   django.urlsr   django.utils.regex_helperr   django.utils.safestringr   docutils.corer;   docutils.nodesdocutils.parsers.rst.rolesdocutils_is_availableImportErrorr   r*   rB   rb   r`   rd   r[   r\   r]   r^   r"   rQ   rX   rr   r   r   r    r   r   <module>r      s   D D 				 ) ) ) ) ) ) % % % % % %             6 6 6 6 6 6 - - - - - -!%%%% !  " " "!"& & &! ! !8( ( ( (D "	 	H H H"      -66~G]^^^ - -gdG,,,, '&77 ((// # # #L0 0 0 0 0s   ; AA