Team Ai
Datasetpublic

codekingpro/portable-devtools

sourceHugging Faceupdated 5mo agoView on Hugging Face
1likes14kdownloads
loaders.cpython-313.pyc299 linesDownload Raw Back to __pycache__
1�

2��j�]��\�SrSSKrSSKrSSKrSSKrSSKrSSKrSSK	r	SSK3Jr SSKJ
r
 SSKJr SSKJr SSKJr SS	KJr \R*(aSS4KJr SSKJr S\S
\R4\4Sjr"SS5r"SS\5r\R<S:�a#S\R>S
\R@\\!44Sjr"O"S\R>S
\R@\\!44Sjr""SS\5r#"SS\5r$"SS\5r%"SS\5r&"SS \5r'"S!S"\5r("S#S$\5r)g)%zKAPI and implementations for loading templates from different data5sources.6�N)�abc)�sha1)�
import_module)�7ModuleType�)�TemplateNotFound)�internalcode)�Environment)�Template�template�returnc��/nURS5H�n[RRU;d[[RR(a[RRU;dU[RR8:Xa[
U5eU(dM�US:wdM�URU5 M� U$)z�Split a path into segments and perform a sanity check.  If it detects9'..' in the path it will raise a `TemplateNotFound` error.10�/�.)�split�os�path�sep�altsep�pardirr�append)r�pieces�pieces   �TD:\code\apps\devtools\python\user_packages\Python313\site-packages\jinja2/loaders.py�split_template_pathrs���F�����$���G�G�K�K�5� ������2�7�7�>�>�U�#:�������&�"�8�,�,�
�U�u��|��M�M�%� �%��M�c�B�\rSrSrSrSrSSS\S\R\\R\\R\R/\444SjrS\R\4S	jr\SSSS\S\R\R \\R"4SS
4Sjj5rSrg11)�12BaseLoader�*aqBaseclass for all loaders.  Subclass this and override `get_source` to13implement a custom loading mechanism.  The environment provides a14`get_template` method that calls the loader's `load` method to get the15:class:`Template` object.16 17A very basic example for a loader that looks up templates on the file18system could look like this::19 20    from jinja2 import BaseLoader, TemplateNotFound21    from os.path import join, exists, getmtime22 23    class MyLoader(BaseLoader):24 25        def __init__(self, path):26            self.path = path27 28        def get_source(self, environment, template):29            path = join(self.path, template)30            if not exists(path):31                raise TemplateNotFound(template)32            mtime = getmtime(path)33            with open(path) as f:34                source = f.read()35            return source, path, lambda: mtime == getmtime(path)36T�environmentr37rr
c�|�UR(d![[U5RS35e[	U5e)a?Get the template source, filename and reload helper for a template.38It's passed the environment and template name and has to return a39tuple in the form ``(source, filename, uptodate)`` or raise a40`TemplateNotFound` error if it can't locate the template.41 42The source part of the returned tuple must be the source of the43template as a string. The filename should be the name of the44file on the filesystem if it was loaded from there, otherwise45``None``. The filename is used by Python for the tracebacks46if no loader extension is used.47 48The last item in the tuple is the `uptodate` function.  If auto49reloading is enabled it's always called to check if the template50changed.  No arguments are passed so the function must store the51old state somewhere (for example in a closure).  If it returns `False`52the template will be reloaded.53z$ cannot provide access to the source)�has_source_access�RuntimeError�type�__name__r)�selfr rs   r�54get_source�BaseLoader.get_sourceKs=��(�%�%����:�&�&�'�'K�L��
��x�(�(rc��[S5e)z�Iterates over all templates.  If the loader does not support that55it should raise a :exc:`TypeError` which is the default behavior.56z-this loader cannot iterate over all templates)�	TypeError�r&s r�list_templates�BaseLoader.list_templateses���G�H�HrN�name�globalsrc�B�SnUc0nURX5upVnURnUbURXXe5n	U	RnUcUR	XRU5nUb$W	RcXIlURU	5 URRXX75$)a;Loads a template.  This method looks up the template in the cache57or loads one by calling :meth:`get_source`.  Subclasses should not58override this method as loaders working on collections of other59loaders (such as :class:`PrefixLoader` or :class:`ChoiceLoader`)60will not call this method but `get_source` directly.61N)r'�bytecode_cache�62get_bucket�code�compile�63set_bucket�template_class�	from_code)64r&r r.r/r3�source�filename�uptodate�bcc�buckets65          r�load�BaseLoader.loadks������?��G�&*�_�_�[�%G�"��(��(�(���?��^�^�K�x�H�F��;�;�D��<��&�&�v�X�>�D�66�?�v�{�{�2��K��N�N�6�"��)�)�3�3��w�67�	68r��N)r%�69__module__�__qualname__�__firstlineno__�__doc__r"�str�t�Tuple�Optional�Callable�boolr'�Listr,r	�MutableMapping�Anyr=�__static_attributes__r?rrrr*s����<��)�(�)�47�)�	70����a�j�j��o�q�z�z�!�*�*�R��X�2F�'G�G�	H�)�4I����s��I��71=A�	)72�"�)73��)74����A�,�,�S�!�%�%�Z�8�9�	)75�7677�)78��)79rrc��\rSrSrSrSS\R\S\R\R\S44S\S\	SS4S	jjr80S81SS\S\R\\\R/\	444S
jr
S\R\4SjrSrg)�FileSystemLoader�a�Load templates from a directory in the file system.82 83The path can be relative or absolute. Relative paths are relative to84the current working directory.85 86.. code-block:: python87 88    loader = FileSystemLoader("templates")89 90A list of paths can be given. The directories will be searched in91order, stopping at the first matching template.92 93.. code-block:: python94 95    loader = FileSystemLoader(["/override/templates", "/default/templates"])96 97:param searchpath: A path, or list of paths, to the directory that98    contains the templates.99:param encoding: Use this encoding to read the text from template100    files.101:param followlinks: Follow symbolic links in the path.102 103.. versionchanged:: 2.8104    Added the ``followlinks`` parameter.105�106searchpath�os.PathLike[str]�encoding�followlinksr
Nc���[U[R5(a[U[5(aU/nUVs/sHn[R107"U5PM snUlX lX0lgs snfr@)	�108isinstancer�IterablerEr�fspathrRrTrU)r&rRrTrU�ps     r�__init__�FileSystemLoader.__init__�sV���*�c�l�l�3�3�z�*�c�7R�7R�$��J�1;�<��A�2�9�9�Q�<��<��� �
�&���=s� A1r r109rc�^110^�[U5nURH@n[R"U/UQ76m111[R112R
T1135(dM@ OV [UR5S:XaSOSnSRSUR55n[UU<SUSU35e[T114URS9nUR5nSSS5 [R115RT1165mS	[4U117U4S118jjn	W[R119RT1205U	4$!,(df   N^=f)Nrr�pathsz, c3�8# �UHn[U5v� M g7fr@)�repr)�.0rZs  r�	<genexpr>�.FileSystemLoader.get_source.<locals>.<genexpr>�s���!C�?�a�$�q�'�'�?�s�z not found in search z: )rTr
c�j>�[RRT5T:H$![a gf=f)NF)rr�getmtime�OSError)r9�mtimes��rr:�-FileSystemLoader.get_source.<locals>.uptodate�s4���
��w�w�'�'��1�U�:�:���
��
�s�!%�1212�2)rrR�	posixpath�joinrr�isfile�lenr�openrT�readrerJ�normpath)r&r rrrR�plural�	paths_str�f�contentsr:r9rgs          @@rr'�FileSystemLoader.get_source�s���%�X�.���/�/�J�!�~�~�j�:�6�:�H��w�w�~�~�h�'�'��
*� #�4�?�?�3�q�8�V�g�F��	�	�!C�4�?�?�!C�C�I�"���,�3�F�8�2�i�[�I��
�122�(�T�]�]�
3�q��v�v�x�H�4���� � ��*��	�$�	�	�����)�)�(�3�X�=�=�4�
3�s�D/�/123D=c���[5nURH�n[R"X RS9nUH�upEnUH�n[R124R
XG5[U5SR[R125R5R[R126RS5nUSSS:XaUSSnX�;dM�URU5 M� M� M� [U5$)N)rUr�z./)
�setrRr�walkrUrrjrl�stripr�replace�add�sorted)	r&�foundrR�walk_dir�dirpath�_�	filenamesr9rs	         rr,�FileSystemLoader.list_templates�s�������/�/�J��w�w�z�7G�7G�H�H�)1�%��I� )�H������W�7��J��8I�J���r�w�w�{�{�+� �������c�2��127 ���|�t�+�#+�A�B�<���,��	�	�(�+�!*�*2�*��e�}�r)rTrUrR)�utf-8F)r%rArBrCrDrF�UnionrE�SequencerJr[rGrIr'rKr,rNr?rrrPrP�s����> �!�

'��G�G��#�Q�Z�Z�����=O�8O�0P�%Q�Q�128�
'�129�
'��

'�130�
'� >�(� >�47� >�	131����c�1�:�:�b�$�h�/�/�	0� >�D����s��rrP)��
�zc�f�URnU"5$![an[S5UeSnAff=f�NzFThis zip import does not have the required metadata to list templates.)�132_get_files�AttributeErrorr*)r��	get_files�es   r�_get_zipimporter_filesr��sC��	����I��{����	��/���
��	�s��1330�+�0c�\�URnU$![an[S5UeSnAff=fr�)�_filesr�r*)r��filesr�s   rr�r�s@��	��H�H�E�����	��/���
��	�s��134+�&�+c���\rSrSrSrSS\SSS\SS4S	jjrS135SS\S\R\\\R\R/\444S
jrS\R\4SjrSrg)�
PackageLoaderiaLoad templates from a directory in a Python package.136 137:param package_name: Import name of the package that contains the138    template directory.139:param package_path: Directory within the imported package that140    contains the templates.141:param encoding: Encoding of template files.142 143The following example looks up templates in the ``pages`` directory144within the ``project.ui`` package.145 146.. code-block:: python147 148    loader = PackageLoader("project.ui", "pages")149 150Only packages installed as directories (standard pip behavior) or151zip/egg files (less common) are supported. The Python API for152introspecting data in packages is too limited to support other153installation methods the way this loader requires.154 155There is limited support for :pep:`420` namespace packages. The156template directory is assumed to only be in one namespace157contributor. Zip files contributing to a namespace are not158supported.159 160.. versionchanged:: 3.0161    No longer uses ``setuptools`` as a dependency.162 163.. versionchanged:: 3.0164    Limited PEP 420 namespace package support.165�package_name�package_pathrErTr
Nc�:�[RRU5R[RR5nU[RR166:XaSnOAUSS[RR167[RR-:XaUSSnX lXlX0l[U5 [RRU5nUcS5eURnUcS5eXPlSUl[!U["R$5(avUR&Ul[)[+UR,55n[RR/Xb5R[RR5nO�/nUR,(aUR1UR,5 OEUR2b8UR5[RR7UR255 U(d[9SU<S35eUHJn	[RR/X�5n	[RR;U	5(dMHU	n O [9SU<SU<S	35eXplg)168N�rvz-An import spec was not found for the package.z'A loader was not found for the package.zThe zC package was not installed in a way that PackageLoader understands.zPackageLoader could not find a z directory in the z	 package.)rrro�rstripr�curdirr�r�rTr�	importlib�util�	find_spec�loader�_loader�_archiverW�	zipimport�zipimporter�archive�next�iter�submodule_search_locationsrj�extend�originr�dirname�169ValueError�isdir�_template_root)170r&r�r�rT�specr��pkgdir�
template_root�roots�roots171          rr[�PackageLoader.__init__/s���w�w�'�'��5�<�<�R�W�W�[�[�I���2�7�7�>�>�)��L�
�"�1�
������"�'�'�+�+�!=�
=�'���+�L�(��(�� �
�	�l�#��~�~�'�'��5����P�!P�P�������!�L�#L�L�!�����
��f�i�3�3�4�4�"�N�N�D�M��$�t�>�>�?�@�F��G�G�L�L��>�E�E�b�g�g�k�k�R�M�!#�E��.�.����T�<�<�=����(����R�W�W�_�_�T�[�[�9�:�� ��<�*�+;�;���172���w�w�|�|�D�7���7�7�=�=��&�&�$(�M���!�5�l�5E�F�+�.�i�9���173,�rr r174rc�^^�[RR[R"UR175/[
U5Q765mURc�[RRT5(d[U5e[TS5nUR5nSSS5 [RRT5mS[4UU4SjjnOURRT5nSnWR#UR$5TU4$!,(df   Ny=f![ an[U5UeSnAff=f)N�rbr
c�>�[RRT5=(a" [RRT5T:H$r@)rrrkre)rgrZs��r�176up_to_date�,PackageLoader.get_source.<locals>.up_to_date�s/����w�w�~�~�a�(�I�R�W�W�-=�-=�a�-@�E�-I�Ir)rrrorirjr�rr�rkrrmrnrerJr��get_datarf�decoderT)	r&r rrrr8r�r�rgrZs	       @@rr'�PackageLoader.get_sourcens���
�G�G����N�N�4�.�.�O�1D�X�1N�O�
177��178�=�=� ��7�7�>�>�!�$�$�&�x�0�0��a���!��������G�G�$�$�Q�'�E�
J��
J�
J�179
8����.�.�q�1���J��}�}�T�]�]�+�Q�180�:�:�)����
8�&�x�0�a�7��
8�s$�D�D'�181D$�'182E�1D=�=Ec�\^�/nURc�[UR5n[R"UR5HMump4TUSR[RR5mURU4SjU55 MO GO[UR5nUR[UR5SR[RR5[RR-n[U5nUHynURU5(dMUS[RR:wdM>URXrSR[RRS55 M{ UR5 U$)Nc3�># �UHMn[RRTU5R[RRS5v� MO g7f)rN)rrrjrzr)rar.rs  �rrb�/PackageLoader.list_templates.<locals>.<genexpr>�s?����� )���G�G�L�L��$�/�7�7������S�I�I� )�s�AA�����r)r�rlr�rrx�lstriprrr�r�r��183startswithrrz�sort)	r&�results�offsetr�r�r��prefixr.rs	        @rr,�PackageLoader.list_templates�s9���!���=�=� ���,�,�-�F�)+����1D�1D�)E�%���!�&�'�*�1�1�"�'�'�+�+�>������ )���*F�+�4�<�<�8�E��#�#�C��
�
�$6�$8�9�@�@������M��'�'�+�+��
���[�F����?�?�6�*�*�t�B�x�2�7�7�;�;�/F��N�N�4��=�#8�#8������c�#J�K��184	�����r)r�r�r�rTr�r�)�	templatesr�)r%rArBrCrDrEr[rFrGrHrIrJr'rKr,rNr?rrr�r�s����F*��	=,��=,��=,��	=,�185186�=,�~$;�(�$;�47�$;�	187����c�1�:�:�a�j�j��T��&:�;�;�	<�$;�L����s��rr�c���\rSrSrSrS\R\\4SS4SjrSSS	\S\R\S\R/\444S188jrS\R\4SjrSrg)
�189DictLoaderi�z�Loads a template from a Python dict mapping template names to190template source.  This loader is useful for unittesting:191 192>>> loader = DictLoader({'index.html': 'source here'})193 194Because auto reloading is rarely useful this is disabled by default.195�mappingr
Nc��Xlgr@�r�)r&r�s  rr[�DictLoader.__init__�����rr r196rc�r^^^�TTR;aTRTmTSUUU4Sj4$[T5e)Nc�@>�TTRRT5:H$r@)r��get)r&r8rs���r�<lambda>�'DictLoader.get_source.<locals>.<lambda>�s����4�<�<�3C�3C�H�3M�)Mr)r�r)r&r rr8s` `@rr'�DictLoader.get_source�s8����t�|�|�#��\�\�(�+�F��4�!M�M�M��x�(�(rc�,�[UR5$r@)r|r�r+s rr,�DictLoader.list_templates�s���d�l�l�#�#rr�)r%rArBrCrDrF�MappingrEr[rGrIrJr'rKr,rNr?rrr�r��su�����	�	�#�s�(� 3����)�(�)�47�)�	197����d�A�J�J�r�4�x�0�0�	1�)�$����s��$rr�c
�|�\rSrSrSrS\R\/\R\R\\R\\R\\R\R/\4444SS4SjrSSS	\S\R\\R\\R\R/\444S198jr
Srg)�FunctionLoaderi�ayA loader that is passed a function which does the loading.  The199function receives the name of the template and has to return either200a string with the template source, a tuple in the form ``(source,201filename, uptodatefunc)`` or `None` if the template does not exist.202 203>>> def load_template(name):204...     if name == 'index.html':205...         return '...'206...207>>> loader = FunctionLoader(load_template)208 209The `uptodatefunc` is a function that is called if autoreload is enabled210and has to return `True` if the template is still up to date.  For more211details have a look at :meth:`BaseLoader.get_source` which has the same212return value.213�	load_funcr
Nc��Xlgr@�r�)r&r�s  rr[�FunctionLoader.__init__�s	��#�rr r214rc�x�URU5nUc[U5e[U[5(aUSS4$U$r@)r�rrWrE)r&r r�rvs    rr'�FunctionLoader.get_source�s@���^�^�H�
%��
�:�"�8�,�,��b�#����t�T�>�!��	rr�)r%rArBrCrDrFrIrErHr�rGrJr[r'rNr?rrr�r��s����"#��:�:�
�E�
�J�J���������a�j�j��o�q�z�z�!�*�*�R�QU�X�BV�7W�!W�X�X��
�
�215�#�216�#��(��47��	217����a�j�j��o�q�z�z�!�*�*�R��X�2F�'G�G�	H�rr�c��\rSrSrSrSS\R\\4S\SS4Sjjr	S\S\R\\44S	jrS218SS\S\R\\R\\R\R/\444Sjr\SS219SS
\S\R\R"\\R$4SS4Sjj5rS\R(\4SjrSrg)�PrefixLoaderi�a�A loader that is passed a dict of loaders where each loader is bound220to a prefix.  The prefix is delimited from the template by a slash per221default, which can be changed by setting the `delimiter` argument to222something else::223 224    loader = PrefixLoader({225        'app1':     PackageLoader('mypackage.app1'),226        'app2':     PackageLoader('mypackage.app2')227    })228 229By loading ``'app1/index.html'`` the file from the app1 package is loaded,230by loading ``'app2/index.html'`` the file from the second.231r��	delimiterr
Nc��XlX lgr@)r�r�)r&r�r�s   rr[�PrefixLoader.__init__s����"�rrc��URURS5up#URUnXC4$![[4an[U5UeSnAff=f)Nr)rr�r�r��KeyErrorr)r&rr�r.r�r�s      r�232get_loader�PrefixLoader.get_loadersY��	4�#�>�>�$�.�.�!�<�L�F��\�\�&�)�F��|����H�%�	4�"�8�,�!�3��	4�s�-2�A�A�Ar r233c��URU5up4URX5$![an[U5UeSnAff=fr@)r�r'r)r&r rr�r.r�s      rr'�PrefixLoader.get_sourcesI�����x�0���	4��$�$�[�7�7���	4�#�8�,�!�3��	4�s�&�234A�<�Ar.r/rc��URU5upEURXU5$![an[U5UeSnAff=fr@)r�r=r)r&r r.r/r��235local_namer�s       rr=�PrefixLoader.load!sJ��"�_�_�T�2���	0��;�;�{��@�@���	0�#�4�(�a�/��	0�s�'�236A�=�Ac��/nURR5H<up#UR5H#nURX R-U-5 M% M> U$r@)r��itemsr,rr�)r&�resultr�r�rs     rr,�PrefixLoader.list_templates0sR����"�l�l�0�0�2�N�F�"�1�1�3���
�
�f�~�~�5��@�A�4�3��
r)r�r�)rr@)r%rArBrCrDrFr�rErr[rGr�rHrIrJr'r	rLrMr=rKr,rNr?rrr�r��s���EH�#��y�y��j��1�#�>A�#�	
�#��3��1�7�7�:�s�?�+C��	4�(�	4�47�	4�	237����a�j�j��o�q�z�z�!�*�*�R��X�2F�'G�G�	H�	4��238=A�	0�"�0��0����A�,�,�S�!�%�%�Z�8�9�	0�239240�0��0�����s��rr�c�j�\rSrSrSrS\R\SS4SjrSSS	\	S\R\	\R\	\R\R/\
444S241jr\SSSS\	S\R\R \	\R"4SS
4Sjj5rS\R&\	4SjrSrg)�ChoiceLoaderi8a�This loader works like the `PrefixLoader` just that no prefix is242specified.  If a template could not be found by one loader the next one243is tried.244 245>>> loader = ChoiceLoader([246...     FileSystemLoader('/path/to/user/templates'),247...     FileSystemLoader('/path/to/system/templates')248... ])249 250This is useful if you want to allow users to override builtin templates251from a different location.252�loadersr
Nc��Xlgr@�r�)r&r�s  rr[�ChoiceLoader.__init__Fr�rr r253rc��URHnURX5s $ [U5e![a M1f=fr@)r�r'r)r&r rr�s    rr'�ChoiceLoader.get_sourceIsI���l�l�F�
��(�(��?�?�#�254�x�(�(��$�
��
�s�1�255?�?r.r/rc��URHnURXU5s $ [U5e![a M2f=fr@)r�r=r)r&r r.r/r�s     rr=�ChoiceLoader.loadSsI���l�l�F�
��{�{�;�g�>�>�#�256�t�$�$��$�
��
�s�2�257A�Ac��[5nURH"nURUR55 M$ [	U5$r@)rwr��updater,r|)r&r}r�s   rr,�ChoiceLoader.list_templatesas6������l�l�F��L�L��.�.�0�1�#��e�}�rr�r@)r%rArBrCrDrFr�rr[rErGrHrIrJr'r	rLrMr=rKr,rNr?rrr�r�8s������258�259�:� 6��4��)�(�)�47�)�	260����a�j�j��o�q�z�z�!�*�*�R��X�2F�'G�G�	H�)��261=A�	%�"�%��%����A�,�,�S�!�%�%�Z�8�9�	%�262263�%��%�����s��rr�c��\rSrSrSrSrg)�_TemplateModuleihz9Like a normal module but with support for weak referencesr?N)r%rArBrCrDrNr?rrrrhs��Crrc�4�\rSrSrSrSrS\R\S\R\R\S44SS4Sjr264\S	\S\4S265j5r\S	\S\4Sj5r
\SSS
S	\S\R\R \\R"4SS4Sjj5rSrg)�ModuleLoaderilz�This loader loads templates from precompiled templates.266 267Example usage:268 269>>> loader = ModuleLoader('/path/to/compiled/templates')270 271Templates can be precompiled with :meth:`Environment.compile_templates`.272FrrSr
Nc�|^�S[U5S3m[T5n[U[R5(a[U[2735(aU/nUVs/sHn[R"U5PM snUl[R"UU4Sj5[RT'X l
TUlgs snf)N�_jinja2_module_templates_�xc�D>�[RRTS5$r@)�sys�modules�pop)rr�s �rr��'ModuleLoader.__init__.<locals>.<lambda>�s���3�;�;�?�?�<��>r)�idrrWrrXrErrY�__path__�weakref�proxyrr�moduler�)r&r�modrZr�s    @rr[�ModuleLoader.__init__xs����3�2�d�8�A�,�?���l�+���$����-�-��D�#�1F�1F��6�D�.2�3�d���	�	�!��d�3���$+�M�M��>�%274����L�!���(����4s� B9r.c�X�S[URS55R5-$)N�tmpl_r�)r�encode�	hexdigest�r.s r�get_template_key�ModuleLoader.get_template_key�s$����d�k�k�'�2�3�=�=�?�?�?rc�2�[RU5S-$)Nz.py)rrrs r�get_module_filename� ModuleLoader.get_module_filename�s���,�,�T�2�U�:�:rr r275r/rc�l�URU5nURSU3n[URUS5nUc0[	USSS/5n[RRUS5 Uc0nURRXRU5$![276an[
U5UeSnAff=f)Nrr�)
rr��getattrr�277__import__�ImportErrorrrrr	r6�from_module_dict�__dict__)r&r r.r/�keyrrr�s        rr=�ModuleLoader.load�s����#�#�D�)���%�%�&�a��u�-���d�k�k�6�4�0���;�
4� ���t�f�X�>��
�K�K�O�O�F�D�)��?��G��)�)�:�:����w�278�	279���
4�&�t�,�!�3��
4�s�B�280B3�"B.�.B3)rr�r@)r%rArBrCrDr"rFr�rEr�r[�staticmethodrrr	rHrLrMr=rNr?rrrrls������)��g�g��#�Q�Z�Z�����=O�8O�0P�%Q�Q�281�)�282283�)�6�@�s�@�s�@��@��;�#�;�#�;��;��284=A�	285�"�286��287����A�,�,�S�!�%�%�Z�8�9�	288�289290�291��292rr)*rD�importlib.utilr�rrir�typingrFr
r��collectionsr�hashlibrr�typesr�293exceptionsr�utilsr	�
TYPE_CHECKINGr r294rrErKrrrP�version_inforM�Dict�objectr�r�r�r�r�r�rrr?rr�<module>r0s-����	��295������#��(���?�?�(�%��#��!�&�&��+��"k296�k297�\[�z�[�|���w���!�%�%��A�F�F�3��;�,?���!�%�%��A�F�F�3��;�,?��c�J�c�L$��$�0*�Z�*�Z<�:�<�~-�:�-�`D�j�D�I298�:�I299r
codekingpro/portable-devtools · Team Ai