VL it+(dZddlmZddlZddlZddlZddlZddlZddl Z ddl m Z ddl m Z ddl mZddl mZddlmZdd lmZdd lmZdd lmZej.eZed Zd ddZGddeZGddeZGddeZGddeZ GddeZ! d&dZ" d'dZ# d(dZ$d)dZ% d*dZ& d+dZ' d,d Z(d-d!Z)d.d"Z* d/d#Z+ d0d$Z, d1d%Z-y)2z1Functions related to finding and loading plugins.) annotationsN) Generator)Iterable)Any) NamedTuple)utils)VALID_CODE_PREFIX)ExecutionError)FailedToLoadPlugin)zflake8.extension flake8.reportz5.0z3.7)z flake8-colorszflake8-per-file-ignoresc0eZdZUdZded<ded<ded<y)PluginzA plugin before loading.strpackageversionzimportlib.metadata.EntryPoint entry_pointN__name__ __module__ __qualname____doc____annotations__[/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/flake8/plugins/finder.pyrrs" L L..rrcTeZdZUdZded<ded<ded<ed dZed d Zy ) LoadedPluginz)Represents a plugin after being imported.rpluginrobjdict[str, bool] parameterscB|jjjS)z0Return the name given in the packaging metadata.)rrnameselfs r entry_namezLoadedPlugin.entry_name-s{{&&+++rcN|jjd|jdS)z8Return the name for use in user-facing / error messages.[])rrr&r$s r display_namezLoadedPlugin.display_name2s'++%%&a'8::rNreturnr)rrrrrpropertyr&r*rrrrr&s;3 N H ,,;;rrc0eZdZUdZded<ded<ded<y)Checkersz'Classified plugins needed for checking.list[LoadedPlugin]tree logical_line physical_lineNrrrrr/r/8s1 $$%%rr/c@eZdZUdZded<ded<ded<d dZd d Zy ) PluginszClassified plugins.r/checkerszdict[str, LoadedPlugin] reportersr0disabledc#K|jjEd{|jjEd{|jjEd{|jj Ed{y7c7G7+7 w)z3Return an iterator over all :class:`LoadedPlugin`s.N)r6r1r2r3r7valuesr$s r all_pluginszPlugins.all_pluginsGsf==%%%%==----==....>>((*** &-.*sCBBBBBB!B:B;BBBBc djt|jDchc]I}|jjdvr/|jjd|jj Kc}Scc}w)z0Return a user-displayed list of plugin versions., >localflake8z: )joinsortedr;rrr)r%loadeds r versions_strzPlugins.versions_strNsuyy #'"2"2"4}},,4GG}},,-R 0E0E/FG   sAA< N)r,zGenerator[LoadedPlugin]r+)rrrrrr;rCrrrr5r5@s!&&  +  rr5cBeZdZUdZded<ded<ded<ed dZy) PluginOptionsz"Options related to plugin loading.ztuple[str, ...]local_plugin_pathsfrozenset[str]enable_extensionsrequire_pluginsc8|dttS)z2Make a blank PluginOptions, mostly used for tests.rrFrHrI) frozenset)clss rblankzPluginOptions.blankbs!'k%K  rN)r,rE)rrrrr classmethodrNrrrrErE[s),''%%##  rrEc|tj|S||jddfD]/}|jd|d}|tj|cSgS)N_-r?fallback)rparse_comma_separated_listreplaceget)cfg cfg_opt_nameoptopt_namevals r _parse_optionr]lsn  //44&|';';C'EF H''(Ht'v. i0H"M M WW_  (*:9*Er w+ +,sCCc#Kt}tjjD]}|j}t d|Ds"|j}|d|vr6|j |d|dtvr%tjd|dt|dz|ddk(rt||d|dEd{|D]*}|jtvst|d|d|,y77w)Nc3@K|]}|jtvywN)rprq).0rus r z*_find_importlib_plugins..s;288},;sr#z#%s plugin is obsolete in flake8>=%sr?r)setrmrn distributions entry_pointsanyaddBANNED_PLUGINSLOGwarningrvrprqr)seendistrrmetarus r_find_importlib_pluginsrs  5D""002@;s;; }} <4   HHT&\ " <> ) KK5V tF|,   &\X %'sDL$y/J J J  @Bxx=(T&\4 ?B?? @;@4 KsCC=C;C=!C=c#KdD]}d|}tj|jd|djtjD]g}|j d\}}}|j|j}}t jj|||}tdd|iyw) N) extensionreportzflake8.r_rarS)regexp=r>) rrUrWrbLOCAL_PLUGIN_LIST_RE partitionrmrn EntryPointr)rX plugin_typerpplugin_sr#rQ entry_strrus r_find_local_pluginsrs/ / +'88 GG*K"G E K K M--  /H"*!3!3C!8 D!Y"jjlIOO,=)D##..tYFB'2. . / /sB=B?c z|Dchc]!}tj|j#}}|Dchc]}tj|}}||z }|r\tddj t |ddj t |ddj t |ycc}wcc}w)Nz2required plugins were not installed! - installed: r=z - expected: z - missing: )rnormalize_pypi_namerr r@rA)pluginsexpectedr plugin_namesr#expected_namesmissing_pluginss r_check_required_pluginsrs AH6<!!&..1LCKK$e//5KNK$|3O IIf\&:;<=99VN%;<=>))F?$;<= ?   Ls &B3B8cgtt|}|jt||j|S)z/Discovers all plugins (but does not load them).)rrsortrrI)rXoptsrets r find_pluginsrs> B # % A(;C(@ ACHHJC!5!56 Jrctj| }|r |j}tj|jj Dcic]Y}|j tjjur1|j|jtjju[}}|r|jdd|Scc}w)aReturn the parameters for the plugin. This will inspect the plugin and return either the function parameters if the plugin is a function or the parameters for ``__init__`` after ``self`` if the plugin is a class. :returns: A dictionary mapping the parameter name to whether or not it is required (a.k.a., is positional only/does not have a default). r%N) inspect isfunction__init__ signaturer!r:kind ParameterPOSITIONAL_OR_KEYWORDr#defaultemptypop)funcis_class parameterr!s r_parameters_forrs%%d++H}}!**40;;BBD  >>W..DD D  ))W->->-D-DDDJ vt$ sAC c  |jj}t |s!t d}t|j|t||t|S#t$r}t|j|d}~wwxYw)Nz%expected loaded plugin to be callable) rload Exceptionr rcallable TypeErrorrr)rreerrs r _load_pluginr!sw4  %%' C=?@ 55 _S%9 :: 4 334sA B'A==Bctjj|j|Dcgc] }t |c}Scc}wry)syspathextendrFr)rrps r_import_pluginsr.s2HHOOD++,%, -LO -- -sAc g}g}g}i}g}|D]}t|jddr>|jjj|j vr|j |X|jjjdk(r|||j<d|jvr|j |d|jvr|j |d|jvr|j |td|tj|||D]J}tj|jr#td|j d tj"t%t'||| || S) Noff_by_defaultFr r1r2r3zwhat plugin type? zplugin code for `z` does not match )r1r2r3)r6r7r8)getattrrrrr#rHappendrpr&r!NotImplementedError itertoolschainr matchr r*patternr5r/)rrr1r2r3r7r8rBs r_classify_pluginsr6s DLMIHE FJJ 0% 8 ))..d6L6LL OOF # ]] & & , , ?+1If'' ( v(( ( KK  v00 0    '  1 1 1   (%(:6(&CD DE"//$ mD &&v'8'89 #F$7$7#88I$,,-/  %'  rc.tt|||S)zLoad and classify all flake8 plugins. - first: extends ``sys.path`` with ``paths`` (to import local plugins) - next: converts the ``Plugin``s to ``LoadedPlugins`` - finally: classifies plugins into their specific types )rr)rrs r load_pluginsrcs _Wd;T BBr)rXconfigparser.RawConfigParserrYrrZ str | Noner,z list[str]) rXrrerrHrrIrr,rE)rrz'Iterable[importlib.metadata.EntryPoint]r#rrrr,Generator[Plugin])r,r)rXrr,r)r list[Plugin]rrGr,None)rXrrrEr,r)rrr,r )rrr,r)rrrrEr,r0)rr0rrEr,r5)rrrrEr,r5).r __future__r configparserimportlib.metadatarmrrloggingrcollections.abcrrtypingrrr?rflake8.defaultsr flake8.exceptionsr r getLoggerrrrLrqrrrr/r5rEr]rgrvrrrrrrrrrrrrrs7" %$-,0g!?@ $ /Z/;:;$&z& j 6 J " %  & % "     ., 0, ,, ,4"@J / % / /     &  %    6 ;. . ..* * * *Z C  C  C  Cr