
    -hhP                       d dl mZ d dlZd dlZd dlZd dlZd dlZd dlmZmZ d dl	m
Z
 d dlmZmZmZm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mZ d d
lmZmZ d dlmZ d dlm Z m!Z! d dl"m#Z#m$Z$m%Z% d dl&m'Z' erd dl(m)Z) d dlm*Z*m+Z+  ej,        dd          -                                Z.	  G d dej/                  Z0dRdZ1dddddddddddddSd3Z2d4Z3dTd7Z4dUd9Z5ddddddddddddddd:dVdAZ6	 	 dWdddddddddddB
dXdNZ7dYdZdQZ8dS )[    )annotationsN)datetimetimezone)Path)IOTYPE_CHECKINGAnyCallable)debug)find_breaking_changes)JSONEncoder)ExplanationStyleParser)ExtensionErrorGitError)load_extensions)get_latest_tagget_repo_root)GriffeLoaderloadload_git)logger)Sequence)	Extension
ExtensionsGRIFFE_LOG_LEVELINFOc                  *     e Zd Zdd fdZdd
Z xZS )
_DebugInfor   nargsint | str | Nonekwargsr	   returnNonec                >     t                      j        dd|i| d S )Nr     )super__init__)selfr    r"   	__class__s      H/var/www/FlaskApp/flask-venv/lib/python3.11/site-packages/_griffe/cli.pyr(   z_DebugInfo.__init__2   s+    //u//////    argsc                T    t          j                     t          j        d           d S )Nr   )r   _print_debug_infosysexit)r)   r-   r"   s      r+   __call__z_DebugInfo.__call__5   s"    !!!r,   )r   )r    r!   r"   r	   r#   r$   )r-   r	   r"   r	   r#   r$   )__name__
__module____qualname__r(   r2   __classcell__)r*   s   @r+   r   r   1   sV        0 0 0 0 0 0 0       r,   r   datastroutput_filestr | IO | Noner#   r$   c                    t          |t                    r<t          |d          5 }t          | |           d d d            d S # 1 swxY w Y   d S |t          j        }t          | |           d S )Nwfile)
isinstancer8   openprintr0   stdout)r7   r9   fds      r+   _print_datarD   :   s    +s## &+s## 	!r$R    	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! *Kd%%%%%%s   AA	A	TF
extensionssearch_pathsdocstring_parserdocstring_optionsresolve_aliasesresolve_implicitresolve_externalallow_inspectionforce_inspectionstore_sourcefind_stubs_packagepackagesSequence[str]rF   Extensions | NonerG   Sequence[str | Path] | NonerH   Parser | NonerI   dict[str, Any] | NonerJ   boolrK   rL   bool | NonerM   rN   rO   rP   r   c          	     ^   t          ||||||	|
          }| D ]}|st          j        d           t          j        d|           	 |                    |d|           H# t
          $ r }t          j        d||           Y d }~md }~wt          $ r t          j        d|           Y w xY wt          j        d           |rit          j        d	           |	                    ||
          \  }}|r$t          j        dt          |          |           nt          j        d|           |S )N)rF   rG   rH   rI   rM   rN   rO   zEmpty package name, continuingzLoading package %sT)try_relative_pathrP   zCould not find package %s: %sz%Tried but could not import package %szFinished loading packageszStarting alias resolution)implicitexternalz4%s aliases were still unresolved after %s iterationsz-All aliases were resolved after %s iterations)r   r   r   infor   ModuleNotFoundErrorerrorImportError	exceptionrJ   len)rQ   rF   rG   rH   rI   rJ   rK   rL   rM   rN   rO   rP   loaderpackager_   
unresolved
iterationss                    r+   _load_packagesrg   D   s     !)+))!  F  
O 
O 	L9:::('222	OKK4L^K____" 	J 	J 	JL8'5IIIIIIII 	O 	O 	ODgNNNNN	O
K+,,,  U/000!'!7!7AQ\l!7!m!m
J 	UKNPST^P_P_akllllKGTTTMs   A!!
B++B"B+*B+)DEBUGr   WARNINGERRORCRITICALvalueSequence[str | dict[str, Any]]c                    	 t          j        |           S # t           j        $ r |                     d          cY S w xY w)N,)jsonloadsJSONDecodeErrorsplitrl   s    r+   _extensions_typeru   z   sM     z%         {{3 s    $==argparse.ArgumentParserc                    d} d}	 	 t          j        d| |d          }d}d|                    d	          }|                    d
dd|           |                    ddddt	          j                                |                    dt          d           dmfd}|                    ddddd          dnfd$} |d%d&          }|                    d'	          }|                    d(d)d*d+,           |                    d-d.d/dd01           |                    d2d3t          j	        d45           |                    d6d7d8d9t          d:;           |                    d<d=d>i t          j        d?;           |                    d@dAd/dB           |                    dCdDd/dE           |                    dFdGdHd/dIJ           |                    dKdHdLdMJ           |                    dNdOd/dP            ||            |dQdR          }	|	                    dS	          }
|
                    dTd)dUV           |
                    dWdXdYdZV           |
                    d[d\d]d^V           |
                    d_d`d/d9dab           |
                    dcd`dLd9ddb           |
                    dedfd/dg           dh t          D             }|
                    d-didj|d9dkl            ||	           |S )ozNReturn the CLI argument parser.

    Returns:
        An argparse parser.
    z3%(prog)s [GLOBAL_OPTS...] COMMAND [COMMAND_OPTS...]z'Signatures for entire Python programs. Fgriffe)add_helpusagedescriptionprogzKShow this help message and exit. Commands also accept the -h/--help option.z Show this help message and exit.zGlobal optionstitle-h--helphelpactionr   z-Vz	--versionversionz	%(prog)s )r   r   z--debug-infozPrint debug information.	subparserrv   r#   r$   c           	        |                      d          }|                    ddd           |                      d          }|                    dd	d
dt          d           |                    ddddd           |                      d          }|                    dddddd           |                    ddi t          d           |                    dd d!d"d#d$           |                    d%d&d'ddd(           |                      d)          }|                    d*d+d,t          t
          t          j        d-.           d S )/NzCommon optionsr}   r   r   r   r   zSearch optionsz-sz--searchrG   appendzPaths to search packages into.)destr   typer   z-yz
--sys-pathappend_sys_path
store_truezAWhether to append `sys.path` to search paths specified with `-s`.r   r   r   zLoading optionsz-Bz--find-stubs-packagesrP   FzJWhether to look for stubs-only packages and merge them with concrete ones.r   r   defaultr   z-ez--extensionszA list of extensions to use.)r   r   r   z-Xz--no-inspectionrM   store_falseTz:Disallow inspection of builtin/compiled/not found modules.z-xz--force-inspectionrN   z<Force inspection of everything, even when sources are found.zDebugging optionsz-Lz--log-levelLEVELzCSet the log level: `DEBUG`, `INFO`, `WARNING`, `ERROR`, `CRITICAL`.)metavarr   choicesr   r   )add_argument_groupadd_argumentr   ru   DEFAULT_LOG_LEVEL_level_choicesr8   upper)r   common_optionssearch_optionsloading_optionsdebug_optionssubcommand_helps        r+   add_common_optionsz&get_parser.<locals>.add_common_options   s   "55<L5MM##D(6#XXX"55<L5MM##1 	$ 	
 	
 	
 	##"T 	$ 	
 	
 	
 $66=N6OO$$#%] 	% 	
 	
 	
 	$$!/ 	% 	
 	
 	
 	$$# M 	% 	
 	
 	
 	$$ #O 	% 	
 	
 	
 "44;N4OO""%"V 	# 	
 	
 	
 	
 	
r,   
subcommandCommandsCOMMANDT)r   r~   r   r|   requiredcommandr8   textr"   r	   c                (     j         | fd||d|S )NF)ry   r   r{   )
add_parser)r   r   r"   
subparserss      r+   add_subparserz!get_parser.<locals>.add_subparser   s)    $z$Wdu4UYdd]cdddr,   dumpz.Load package-signatures and dump them as JSON.zDump optionsrQ   PACKAGE+z Packages to find, load and dump.)r   r    r   z-fz--fullr   z"Whether to dump full data in JSON.)r   r   r   z-oz--outputzZOutput file. Supports templating to output each package in its own file, with `{package}`.)r   r   z-dz
--docstylerH   NzThe docstring style to parse.)r   r   r   r   z-Dz	--docoptsrI   z%The options for the docstring parser.z-rz--resolve-aliaseszWhether to resolve aliases.z-Iz--resolve-implicitzrWhether to resolve implicitly exported aliases as well. Aliases are explicitly exported when defined in `__all__`.z-Uz--resolve-externalrL   zAlways resolve aliases pointing to external/unknown modules (not loaded directly).Default is to resolve only from one module to its private sibling (`ast` -> `_ast`).r   z--no-resolve-externalr   zNever resolve aliases pointing to external/unknown modules (not loaded directly).Default is to resolve only from one module to its private sibling (`ast` -> `_ast`).z-Sz--statszShow statistics at the end.checkz1Check for API breakages or possible improvements.zCheck optionsrd   z)Package to find, load and check, as path.)r   r   z-az	--againstREFzUOlder Git reference (commit, branch, tag) to check against. Default: load latest tag.z-bz
--base-refBASE_REFzIGit reference (commit, branch, tag) to check. Default: load current code.z--colorcolorz"Force enable colors in the output.r   z
--no-colorz#Force disable colors in the output.z-vz	--verbosezVerbose output.c                    g | ]	}|j         
S r&   rt   ).0fmts     r+   
<listcomp>zget_parser.<locals>.<listcomp>C  s    555Ssy555r,   z--formatstylezOutput format.)r   r   r   r   )r   rv   r#   r$   )r   r8   r   r8   r"   r	   r#   rv   )argparseArgumentParserr   r   r   _get_versionr   add_subparsersr0   rB   r   rp   rq   r   )rz   r{   parser	main_helpglobal_optionsr   r   dump_parserdump_optionscheck_parsercheck_optionsformatsr   r   s               @@r+   
get_parserr      s    BE;KFI$e5k`hiiiF]I8O..5E.FFNhvINNNk)MoY^YkYmYmMoMopppzHbccc<
 <
 <
 <
 <
 <
~ && '  Je e e e e e  -(XYYK111GGLj)3Moppp1     
i	     ,      Z4     *	     E	     _     _	     *	     {### !=*]^^L 33/3JJMy)Bmnnnd	     X	     1     2     t[L]^^^55$4555GtZgwX\csttt|$$$Mr,   )outputfullrH   rI   rF   rJ   rK   rL   rG   rP   r   rM   rN   statsr   r   CSequence[str | dict[str, Any] | Extension | type[Extension]] | Noner   r   intc                  d}t          |t                    r|                    d          |k    rd}|	rt          |	          ng }	|r|	                    t
          j                   	 t          |pd }n%# t          $ r t          j
        d           Y dS w xY wt          | ||	|||||||d|
          }|j        j        }t          j        t           j        	          }|rW|                                D ]A\  }}|                    d
|d          }t)          ||                    |                     Bn.t+          j        |t.          d
|d          }t)          ||           t          j        t           j        	          |z
  }|rF|                                }|j        |_        t          j        |                                           t;          |          t;          |           k    rdndS )a  Load packages data and dump it as JSON.

    Parameters:
        packages: The packages to load and dump.
        output: Where to output the JSON-serialized data.
        full: Whether to output full or minimal data.
        docstring_parser: The docstring parser to use. By default, no parsing is done.
        docstring_options: Additional docstring parsing options.
        resolve_aliases: Whether to resolve aliases (indirect objects references).
        resolve_implicit: Whether to resolve every alias or only the explicitly exported ones.
        resolve_external: Whether to load additional, unspecified modules to resolve aliases.
            Default is to resolve only from one module to its private sibling (`ast` -> `_ast`).
        extensions: The extensions to use.
        search_paths: The paths to search into.
        find_stubs_package: Whether to search for stubs-only packages.
            If both the package and its stubs are found, they'll be merged together.
            If only the stubs are found, they'll be used as the package itself.
        append_sys_path: Whether to append the contents of `sys.path` to the search paths.
        allow_inspection: Whether to allow inspecting modules when visiting them is not possible.
        force_inspection: Whether to force using dynamic analysis when loading data.
        stats: Whether to compute and log stats about loading.

    Returns:
        `0` for success, `1` for failure.
    Frd   )rd   Tr&   Could not load extensions   rE   )tz   )indentr   	sort_keys)clsr   r   r   r   )r?   r8   formatlistextendr0   pathr   r   r   ra   rg   modules_collectionmembersr   nowr   utcitemsas_jsonrD   rp   dumpsr   r   microsecondstime_spent_serializingr]   as_textrb   )rQ   r   r   rH   rI   rF   rJ   rK   rL   rG   rP   r   rM   rN   r   per_package_outputloaded_extensionsrc   data_packagesstartedpackage_namer7   
serializedelapsedloader_statss                            r+   r   r   J  s%   X &# "6===#C#Cv#M#M!)5=4%%%2L &CH%%%+j.>B@   4555qq
 $!)+'))))-  F -5M lhl+++G ("/"5"5"7"7 	I 	IL$QTTJJJ
FMM,M$G$GHHHH	I Z;qt_cddd
J'''lhl+++g5G ,||~~.5.B+L((**+++M""c(mm3311:s   )A5 5BB)
base_refrF   rG   r   rP   rM   rN   verboser   r   rd   
str | Pathagainst
str | Noneagainst_pathstr | Path | Noner   r   r   r   str | ExplanationStyle | Nonec       
           |rt          |          ng }|r|                    t          j                   	 |pt	          |           }n6# t
          $ r)}t          d| t          j                   Y d}~dS d}~ww xY w|p| }t          |          }	 t          |pd }n%# t          $ r t          j        d           Y dS w xY wt          |||||||	dd		  	        }|rt          | ||||||	|dd

  
        }nt          | d||||	|dd	  	        }t          t          ||                    }|-t!          j        dd          x}|                                dv }t'          j                     t'          j        ||n|            ||
rt,          j        nt,          j        }nt-          |          }|D ]1}t          |                    |          t          j                   2|rdS dS )a*  Check for API breaking changes in two versions of the same package.

    Parameters:
        package: The package to load and check.
        against: Older Git reference (commit, branch, tag) to check against.
        against_path: Path when the "against" reference is checked out.
        base_ref: Git reference (commit, branch, tag) to check.
        extensions: The extensions to use.
        search_paths: The paths to search into.
        append_sys_path: Whether to append the contents of `sys.path` to the search paths.
        allow_inspection: Whether to allow inspecting modules when visiting them is not possible.
        force_inspection: Whether to force using dynamic analysis when loading data.
        verbose: Use a verbose output.

    Returns:
        `0` for success, `1` for failure.
    zgriffe: error: r=   Nr   r&   r   r   T)refreporF   rG   rM   rN   rJ   rL   )	r   r   rF   rG   rM   rN   rP   rJ   rL   )rZ   rF   rG   rM   rN   rP   rJ   rL   FORCE_COLOR>   1yonyestrue)strip)r   r   )r   r   r0   r   r   r   rA   stderrr   r   r   r   ra   r   r   r   osgetenvlowercoloramadeinitinitr   VERBOSEONE_LINEexplain)rd   r   r   r   rF   rG   r   rP   rM   rN   r   r   r   r_   
repositoryr   old_packagenew_package	breakagesforce_colorbreakages                        r+   r   r     s   D *6=4%%%2L &CH%%%4^G44   '''cj9999qqqqq  *7L|,,J+j.>B@   4555qq
 $!))
 
 
K  
(%--1 !
 
 
 "(%--1 !

 

 

 *;DDEEI}=$)G)GG+T!!##'FFOMI>>>>},3R ((9I9R '' > >hU++#*===== q1s)   A 
A;A66A;B C ?C r-   list[str] | Nonec                   t                      }|                    |           }|j        }|                    d           |                    d          }|                    dt                    }	 t          t          |          }t          j        d|           nM# t          $ r@ d	                    t                    }t          d| d| d	t          j        
           Y dS w xY wt          t          d} ||         di |S )zRun the main program.

    This function is executed when you type `griffe` or `python -m griffe`.

    Parameters:
        args: Arguments passed from the command line.

    Returns:
        An exit code.
    
debug_infor   	log_levelz%(levelname)-10s %(message)s)r   levelz', 'z"griffe: error: invalid log level 'z' (choose from 'z')r=   r   )r   r   r&   )r   
parse_args__dict__popr   getattrloggingbasicConfigAttributeErrorjoinr   rA   r0   r   r   r   )	r-   r   opts	opts_dictr   r	  r
  r   commandss	            r+   mainr    s$    \\F%0066DIMM,|,,J k+<==I
P++ 	#AOOOOO    ++n--WWWGWWW	
 	
 	
 	
 qq 9>t.L.LH8J,,),,,s   1B AC'&C')r7   r8   r9   r:   r#   r$   )rQ   rR   rF   rS   rG   rT   rH   rU   rI   rV   rJ   rW   rK   rW   rL   rX   rM   rW   rN   rW   rO   rW   rP   rW   r#   r   )rl   r8   r#   rm   )r#   rv   ) rQ   rR   r   r:   r   rW   rH   rU   rI   rV   rF   r   rJ   rW   rK   rW   rL   rX   rG   rT   rP   rW   r   rW   rM   rW   rN   rW   r   rW   r#   r   )NN)rd   r   r   r   r   r   r   r   rF   r   rG   rT   r   rW   rP   rW   rM   rW   rN   rW   r   rW   r   rX   r   r   r#   r   )N)r-   r  r#   r   )9
__future__r   r   rp   r  r   r0   r   r   pathlibr   typingr   r   r	   r
   r   _griffer   _griffe.diffr   _griffe.encodersr   _griffe.enumerationsr   r   _griffe.exceptionsr   r   _griffe.extensions.baser   _griffe.gitr   r   _griffe.loaderr   r   r   _griffe.loggerr   collections.abcr   r   r   r   r   r   Actionr   rD   rg   r   ru   r   r   r   r  r&   r,   r+   <module>r%     s5   # " " " " "    				 



 ' ' ' ' ' ' ' '       3 3 3 3 3 3 3 3 3 3 3 3        . . . . . . ( ( ( ( ( ( 9 9 9 9 9 9 9 9 7 7 7 7 7 7 7 7 3 3 3 3 3 3 5 5 5 5 5 5 5 5 7 7 7 7 7 7 7 7 7 7 ! ! ! ! ! ! >((((((======== BI0&99??AA        & & & & %)04&*/3 "$(!"$0 0 0 0 0 0f C       F F F FX #&*/3VZ!"$(04$!!"![; [; [; [; [; [;@ &*k
  VZ04!$!"+/k k k k k k\"- "- "- "- "- "- "-r,   