
    ghP                       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jX                  dd      j[                         Z.	  G d dej^                        Z0d"dZ1dddddddddddd	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d#dZ2dZ3d$dZ4d%dZ5ddddddddddddddd	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d&dZ6	 	 d'ddddddddddd
	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d(d Z7d)d*d!Z8y)+    )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 )
_DebugInfoc                (    t        |   dd|i| y )Nnargs )super__init__)selfr!   kwargs	__class__s      @/var/www/openai/venv/lib/python3.12/site-packages/_griffe/cli.pyr$   z_DebugInfo.__init__2   s    /u//    c                V    t        j                          t        j                  d       y )Nr   )r   _print_debug_infosysexit)r%   argsr&   s      r(   __call__z_DebugInfo.__call__5   s    !r)   )r   )r!   zint | str | Noner&   r	   returnNone)r.   r	   r&   r	   r0   r1   )__name__
__module____qualname__r$   r/   __classcell__)r'   s   @r(   r   r   1   s    0r)   r   c                    t        |t              r#t        |d      5 }t        | |       d d d        y |t        j
                  }t        | |       y # 1 sw Y   y xY w)Nwfile)
isinstancestropenprintr,   stdout)dataoutput_filefds      r(   _print_datarB   :   sN    +s#+s#r$R  $# **Kd% $#s   AATF
extensionssearch_pathsdocstring_parserdocstring_optionsresolve_aliasesresolve_implicitresolve_externalallow_inspectionforce_inspectionstore_sourcefind_stubs_packagec          	     R   t        ||||||	|
      }| D ]E  }|st        j                  d       t        j                  d|       	 |j	                  |d|       G t        j                  d       |ret        j                  d	       |j                  ||
      \  }}|r"t        j                  dt        |      |       |S t        j                  d|       |S # t
        $ r!}t        j                  d||       Y d }~d }~wt        $ r t        j                  d|       Y w xY w)N)rD   rE   rF   rG   rK   rL   rM   zEmpty package name, continuingzLoading package %sT)try_relative_pathrN   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	exceptionrH   len)packagesrD   rE   rF   rG   rH   rI   rJ   rK   rL   rM   rN   loaderpackagerU   
unresolved
iterationss                    r(   _load_packagesr^   D   s"     !)+))!F LL9:('2	OKK4L^K_  KK+, /0!'!7!7AQ\l!7!m
JKKNPST^P_akl M KKGTM # 	JLL8'5II 	ODgN	Os   C	D&$D  "D&%D&)DEBUGr   WARNINGERRORCRITICALc                    	 t        j                  |       S # t         j                  $ r | j                  d      cY S w xY w)N,)jsonloadsJSONDecodeErrorsplit)values    r(   _extensions_typerj   z   s:     zz%    {{3 s    $>>c                 R   d} d}	 	 t        j                  d| |d      }d}d|j                  d	      }|j                  d
dd|       |j                  ddddt	        j
                                 |j                  dt        d       dcfd}|j                  ddddd      ddfd} |dd      }|j                  d	      }|j                  dd d!d"#       |j                  d$d%d&dd'(       |j                  d)d*t        j                  d+,       |j                  d-d.d/d0t        d12       |j                  d3d4d5i t        j                  d62       |j                  d7d8d&d9       |j                  d:d;d&d<       |j                  d=d>d?d&d@A       |j                  dBd?dCdDA       |j                  dEdFd&dG        ||        |dHdI      }	|	j                  dJ	      }
|
j                  dKd dLM       |
j                  dNdOdPdQM       |
j                  dRdSdTdUM       |
j                  dVdWd&d0dXY       |
j                  dZdWdCd0d[Y       |
j                  d\d]d&d^       t        D cg c]  }|j                   }}|
j                  d$d_d`|d0dab        ||	       |S c c}w )ezNReturn 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actionru   z-Vz	--versionversionz	%(prog)s )rw   rx   z--debug-infozPrint debug information.c           	     <   | j                  d      }|j                  ddd       | j                  d      }|j                  dd	d
dt        d       |j                  ddddd       | j                  d      }|j                  dddddd       |j                  ddi t        d       |j                  dd d!d"d#d$       |j                  d%d&d'ddd(       | j                  d)      }|j                  d*d+d,t        t
        t        j                  d-.       y )/NzCommon optionsrq   rs   rt   ru   rv   zSearch optionsz-sz--searchrE   appendzPaths to search packages into.)destrw   typeru   z-yz
--sys-pathappend_sys_path
store_truezAWhether to append `sys.path` to search paths specified with `-s`.r{   rw   ru   zLoading optionsz-Bz--find-stubs-packagesrN   FzJWhether to look for stubs-only packages and merge them with concrete ones.r{   rw   defaultru   z-ez--extensionszA list of extensions to use.)r   r|   ru   z-Xz--no-inspectionrK   store_falseTz:Disallow inspection of builtin/compiled/not found modules.z-xz--force-inspectionrL   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|   ru   )add_argument_groupadd_argumentr   rj   DEFAULT_LOG_LEVEL_level_choicesr;   upper)	subparsercommon_optionssearch_optionsloading_optionsdebug_optionssubcommand_helps        r(   add_common_optionsz&get_parser.<locals>.add_common_options   sz   "55<L5M##D(6#X"55<L5M##1 	$ 	
 	##"T 	$ 	
 $66=N6O$$#%] 	% 	
 	$$!/ 	% 	
 	$$# M 	% 	
 	$$ #O 	% 	
 "44;N4O""%"V 	# 	
r)   
subcommandCommandsCOMMANDT)r{   rr   r   rp   requiredc                2     j                   | fd||d|S )NF)rm   ru   ro   )
add_parser)commandtextr&   
subparserss      r(   add_subparserz!get_parser.<locals>.add_subparser   s&    $z$$Wdu4UYd]cddr)   dumpz.Load package-signatures and dump them as JSON.zDump optionsrY   PACKAGE+z Packages to find, load and dump.)r   r!   ru   z-fz--fullr~   z"Whether to dump full data in JSON.)rw   r   ru   z-oz--outputzZOutput file. Supports templating to output each package in its own file, with `{package}`.)r   ru   z-dz
--docstylerF   NzThe docstring style to parse.)r{   r   r|   ru   z-Dz	--docoptsrG   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-externalrJ   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 optionsr[   z)Package to find, load and check, as path.)r   ru   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.z--formatstylezOutput format.)r{   r   r   ru   )r   argparse.ArgumentParserr0   r1   )r   r;   r   r;   r&   r	   r0   r   )argparseArgumentParserr   r   r   _get_versionr   add_subparsersr,   r>   r   re   rf   r   ri   )rn   ro   parser	main_helpglobal_optionsr   r   dump_parserdump_optionscheck_parsercheck_optionsfmtformatsr   r   s                @@r(   
get_parserr      s    BE;KFI$$e5k`hiF]I8O..5E.FNhvINk)yY^YkYkYmXnMopzHbc<
~ && ' Je  (XYK111GLj)3Mop1   

i	   ,    ZZ4   *	   E	   _   _	   *	   {# !*]^L 33/3JMy)Bmnd	   X	   1   2   t[L]^$45$4Ssyy$4G5tZgwX\cst|$M	 6s   .J$)outputfullrF   rG   rD   rH   rI   rJ   rE   rN   r}   rK   rL   statsc                  d}t        |t              r|j                  d      |k7  rd}|	rt        |	      ng }	|r|	j	                  t
        j                         	 t        |xs d }t        | ||	|||||||d|
      }|j                  j                  }t        j                  t         j"                  	      }|rI|j%                         D ]5  \  }}|j'                  d
|d      }t)        ||j                  |             7 n*t+        j,                  |t.        d
|d      }t)        ||       t        j                  t         j"                  	      |z
  }|rD|j1                         }|j2                  |_        t        j6                  |j9                                t;        |      t;        |       k(  rdS dS # t        $ r t        j                  d       Y yw xY w)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.
    Fr[   )r[   Tr"   Could not load extensions   rC   )tz   )indentr   	sort_keys)clsr   r   r   r   )r:   r;   formatlistextendr,   pathr   r   r   rW   r^   modules_collectionmembersr   nowr   utcitemsas_jsonrB   re   dumpsr   r   microsecondstime_spent_serializingrS   as_textrX   )rY   r   r   rF   rG   rD   rH   rI   rJ   rE   rN   r}   rK   rL   r   per_package_outputloaded_extensionsrZ   data_packagesstartedpackage_namer?   
serializedelapsedloader_statss                            r(   r   r   J  s   X &#6===#Cv#M!)54%2LCHH%+j.>B@ $!)+'))))-F --55M llhll+G"/"5"5"7L$QTTJJ
FMM,M$GH #8 ZZ;qt_cd
J'llhll+g5G||~.5.B.B+L((*+M"c(m31::K  45s   F5 5GG)
base_refrD   rE   r}   rN   rK   rL   verboser   r   c       
           |rt        |      ng }|r|j                  t        j                         	 |xs t	        |       }|xs | }t        |      }	 t        |xs d }t        |||||||	dd		      }|rt        | ||||||	|dd

      }nt        | d||||	|dd	      }t        t        ||            }|*t!        j"                  dd      x}|j%                         dv }t'        j(                          t'        j*                  ||n|        |#|
rt,        j.                  nt,        j0                  }nt-        |      }|D ]-  }t        |j3                  |      t        j                         / |ryy# t
        $ r(}t        d| t        j                         Y d}~yd}~ww xY w# t        $ r t        j                  d       Y yw xY w)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: r8   Nr   r"   r   r   T)refreporD   rE   rK   rL   rH   rJ   )	r   r   rD   rE   rK   rL   rN   rH   rJ   )rP   rD   rE   rK   rL   rN   rH   rJ   FORCE_COLOR>   1yonyestrue)strip)r   r   )r   r   r,   r   r   r   r=   stderrr   r   r   r   rW   r   r   r   osgetenvlowercoloramadeinitinitr   VERBOSEONE_LINEexplain)r[   againstagainst_pathr   rD   rE   r}   rN   rK   rL   r   r   r   rU   
repositoryr   old_packagenew_package	breakagesforce_colorbreakages                        r(   r   r     s   D *64%2LCHH%4^G4  *7L|,J+j.>B@ $!))
K (%--1 !
 "(%--1 !

 *;DEI}=$)GG+T!!#'FFOOMMI>},3 ((9I9R9R 'hU+#**=  G  w'cjj9  45s)   E5 F) 5	F&>F!!F&)G
	G
c                   t               }|j                  |       }|j                  }|j                  d       |j                  d      }|j                  dt              }	 t        t        |      }t        j                  d|       t        t        d} ||   di |S # t        $ r: dj                  t              }t        d| d| d	t        j                  
       Y yw xY w)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')r8   r   )r   r   r"   )r   
parse_args__dict__popr   getattrloggingbasicConfigAttributeErrorjoinr   r=   r,   r   r   r   )	r.   r   opts	opts_dictr   r   r   r   commandss	            r(   mainr    s     \F%006DIMM,|,J k+<=I
P+ 	#AO 9>t.LH8J,),,  ++n-0;KG9TVW	
 s   !B   A C#"C#)r?   r;   r@   str | IO | Noner0   r1   )rY   Sequence[str]rD   zExtensions | NonerE   Sequence[str | Path] | NonerF   Parser | NonerG   dict[str, Any] | NonerH   boolrI   r  rJ   bool | NonerK   r  rL   r  rM   r  rN   r  r0   r   )ri   r;   r0   zSequence[str | dict[str, Any]])r0   r   ) rY   r  r   r  r   r  rF   r  rG   r  rD   CSequence[str | dict[str, Any] | Extension | type[Extension]] | NonerH   r  rI   r  rJ   r  rE   r  rN   r  r}   r  rK   r  rL   r  r   r  r0   int)NN)r[   z
str | Pathr   
str | Noner   zstr | Path | Noner   r  rD   r	  rE   r  r}   r  rN   r  rK   r  rL   r  r   r  r   r  r   zstr | ExplanationStyle | Noner0   r
  )N)r.   zlist[str] | Noner0   r
  )9
__future__r   r   re   r   r   r,   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   rB   r^   r   rj   r   r   r   r  r"   r)   r(   <module>r     s   #    	 
 '  3 3   . ( 9 7 3 5 7 7 !(= BII0&9??A  & %)04&*/3 "$(!"$00 "0 .	0
 $0 -0 0 0 "0 0 0 0 0 0f C FX #&*/3VZ!"$(04$!!"![;[; [; 	[;
 $[; -[; T[; [; [; "[; .[; [; [; [; [;  ![;" 	#[;@ &*k
  VZ04!$!"+/kkk $k
 k Tk .k k k k k k k )k 	k\"-r)   