ó
    %ÑLj`  ã                   óD  • S r SSKrSSKrSSKrSSKrSSKrSSKrSSKrSSKrSSK	r	SSK
r
SSKrSSKrSSKJrJrJrJrJr  Sr\
R*                   " S S5      5       r\R.                  S\4S\\S	      4S
 jj5       rS\\\\   4   4S jr\
R*                   " S S5      5       rS\S\4S jrSS\4S\S\\R@                     S\S\!4S jjr"S#S jr#S\\\$4   4S jr%S\!S\\/\4   4S jr&S r'   S$S\!S\\   S\\\   \4   S\(S\\\/\(4      S\4S  jjr)S! r*S%S" jr+g)&z
Misc
é    N)ÚCallableÚAnyÚUnionÚOptionalÚLiteralé
   c                   óX   • \ rS rSr% Sr\\S'   \\\4   \S'   \S 5       r	\S 5       r
Srg)	Ú
LinkHeaderé   zJ
https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Link
ÚurlÚparamsc                 óˆ  • [         R                  " SUR                  5       SS9n[        U5      S:X  a
  Uu  p4US-  nOUS   SpCUR	                  S5      (       a  UR                  S5      (       d   eUSS	 R                  5       n0 nU(       a°  UR                  S
5       H›  nUR                  5       R                  S5      u  pxn	UR                  5       U	=(       d    SR                  5       p—U	R	                  S5      (       a+  U	R                  S5      (       d   eU	SS	 R                  5       n	U	=(       d    SXW'   M�     U " X5S9$ )z1
<uri-reference>; param1=value1; param2="value2"
z>\s*;\s*é   )Úmaxsplité   Ú>r   Ú Ú<éÿÿÿÿÚ;Ú=Ú"N)r   r   )ÚreÚsplitÚstripÚlenÚ
startswithÚendswithÚ	partition)
ÚclsÚsÚcompsr   Úsparamsr   ÚsparamÚkeyÚ_Úvalues
             Ú˜C:\Users\johnn\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\csvw/utils.pyÚfrom_stringÚLinkHeader.from_string   s  € ô
 —’˜ a§g¡g£i¸!Ñ<ˆÜˆu‹:˜‹?Ø ‰LˆCØ�3‰J‰Cà  ™8 R�Ø�~‰~˜c×"Ñ" s§|¡|°C×'8Ñ'8Ð8Ð8Ø�!�Bˆi�o‰oÓˆØˆÞØ!Ÿ-™-¨Ö,�Ø &§¡£× 8Ñ 8¸Ó =‘�˜Ø ŸY™Y›[¨5¯;°B×*=Ñ*=Ó*?�UØ×#Ñ# C×(Ñ(Ø Ÿ>™>¨#×.Ñ.Ð.Ð.Ø! ! B˜K×-Ñ-Ó/�EØ#Ÿm t�“ñ -ñ �sÑ*Ð*ó    c              #   óš   #   • [        [        R                  " SU5      5       H#  u  p#U R                  US:X  a  UOSU-   5      v •  M%     g7f)z@
A Link header might contain multiple links separated by comma.
z,\s*<r   r   N)Ú	enumerater   r   r)   )r    r!   ÚiÚsingles       r(   Ú
iter_linksÚLinkHeader.iter_links5   s>   é € ô
 #¤2§8¢8¨H°aÓ#8Ö9‰IˆAØ—/‘/¨A°«F¡&¸¸f¹ÓEÔEò :ùs   ‚A	A© N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__ÚstrÚ__annotations__ÚdictÚclassmethodr)   r0   Ú__static_attributes__r2   r+   r(   r
   r
      sD   ‡ ñð 
ƒHØ��c�‰NÓàñ+ó ð+ð. ñFó óFr+   r
   ÚGETÚmethod)ÚHEADr=   c              #   óú   #   •  " S S[         R                  R                  5      n[         R                  R                  U5      nS/Ul        UR                  [         R                  R                  XS9US9v •  g7f)zz
Open URLs
- without raising an exception on HTTP errors,
- passing a specific User-Agent header,
- specifying a timeout.
c                   ó"   • \ rS rSrSrS =rrSrg)Ú-urlopen.<locals>.NonRaisingHTTPErrorProcessoréJ   z&Don't raise exceptions on HTTP errors.c                 ó   • U$ ©Nr2   )ÚselfÚreqÚress      r(   Ú<lambda>Ú6urlopen.<locals>.NonRaisingHTTPErrorProcessor.<lambda>L   s   € Ár+   r2   N)r3   r4   r5   r6   r7   Úhttp_responseÚhttps_responser<   r2   r+   r(   ÚNonRaisingHTTPErrorProcessorrB   J   s   † Ù4Ù)CÐCˆ›r+   rM   )z
User-agentz
csvw/4.0.0)r>   )ÚtimeoutN)ÚurllibÚrequestÚHTTPErrorProcessorÚbuild_openerÚ
addheadersÚopenÚRequest)r   r>   rN   rM   Úopeners        r(   ÚurlopenrW   >   sd   é € ôD¤v§~¡~×'HÑ'Hô Dô �^‰^×(Ñ(Ð)EÓF€FØ5Ð6€FÔØ
�+‰+”f—n‘n×,Ñ,¨SÐ,Ð@È'ˆ+Ð
RÓRùs   ‚A9A;Úreturnc                 óJ  • [        U 5       n/ nUR                  5       R                  S5      =(       d    /  H'  nUR                  [        R                  U5      5        M)     UR                  5       R                  5       =(       d    SU4sSSS5        $ ! , (       d  f       g= f)z<Makes a HEAD request and returns the relevant response data.ÚLinkr   N)rW   ÚinfoÚget_allÚextendr
   r0   Úget_content_type)r   ÚresponseÚlinksÚmults       r(   Úrequest_headrb   S   sp   € ä	�Œ˜ØˆØ—M‘M“O×+Ñ+¨FÓ3×9°rÒ9ˆDØ�L‰Lœ×.Ñ.¨tÓ4Ö5ñ :à�}‰}‹×/Ñ/Ó1×7°R¸Ð>÷	 
��ús   ŒA>BÂ
B"c                   ól   • \ rS rSr% SrSr\\S'   Sr\	\S'   Sr
\\S'   S r\SS
 j5       rS	\4S jrSrg)ÚGetResponseé\   z(Relevant data from an HTTP GET response.éÈ   Ústatus_codeNÚcontentÚtextc                 ó  • U R                   (       a1  U R                  (       d   U R                   R                  S5      U l        U R                  (       a3  U R                   (       d!  U R                  R                  S5      U l         g g g )NÚutf8)rh   ri   ÚdecodeÚencode©rF   s    r(   Ú__post_init__ÚGetResponse.__post_init__c   sO   € Ø�<�< §	§	ØŸ™×+Ñ+¨FÓ3ˆDŒIØ�9�9˜TŸ\Ÿ\ØŸ9™9×+Ñ+¨FÓ3ˆD�Lð *ˆ9r+   rX   c                 ó¨   • UR                  5       nUR                  UR                  R                  5       =(       d    S5      nU " UR                  X#S9$ )z5Initialize instance with data from a urllib response.úutf-8)rg   rh   ri   )Úreadrl   ÚheadersÚget_content_charsetÚstatus)r    r_   rh   ri   s       r(   Úfrom_responseÚGetResponse.from_responsei   sB   € ð —-‘-“/ˆØ�~‰~˜h×.Ñ.×BÑBÓD×OÈÓPˆÙ˜xŸ™¸ÑKÐKr+   c                 ó\   • [         R                  " U R                  [        R                  S9$ )z+The content of the repsonse parsed as JSON.©Úobject_pairs_hook)ÚjsonÚloadsri   ÚcollectionsÚOrderedDictrn   s    r(   r|   ÚGetResponse.jsonp   s   € ä�zŠz˜$Ÿ)™)´{×7NÑ7NÑOÐOr+   )rh   ri   )rX   rd   )r3   r4   r5   r6   r7   rg   Úintr9   rh   Úbytesri   r8   ro   r;   rw   r   r|   r<   r2   r+   r(   rd   rd   \   sL   ‡ á2Ø€K�ÓØ€GˆUÓØ€Dˆ#Óò4ð óLó ðLðP�c÷ Pr+   rd   r   c                 óx   • [        U 5       n[        R                  U5      sSSS5        $ ! , (       d  f       g= f)zMakes a GET request.N)rW   rd   rw   )r   r_   s     r(   Úrequest_getr„   u   s#   € ä	�Œ˜Ü×(Ñ(¨Ó2÷ 
��ús   Œ+«
9ÚwarningÚmsgÚlogÚlevelÚexception_clsc                 óD   • U(       a  [        X5      " U 5        gU" U 5      e)z¤
Helper for error handling. In an inspection scenario, we want to list - i.e. log - all
errors. In a validation scenario, we raise an exception at the first error.
N)Úgetattr)r†   r‡   rˆ   r‰   s       r(   Úlog_or_raiserŒ   {   s   € ö Ü�Ô˜CÕ á˜CÓ Ð r+   c                 ó<   • US:X  d   e[         R                  " XUS9$ )zVOpen a text file suitable for reading JSON content, i.e. assuming it is utf-8 encoded.rr   )Úencoding)ÚiorT   )ÚfilenameÚmoderŽ   s      r(   Ú	json_openr’   Š   s!   € à�wÓÐÐÜ�7Š7�8¨HÑ5Ð5r+   c                 óü   • [        U 5      n [        U 5      (       a  [        U 5      R                  5       $ [	        U 5       n[        R
                  " U[        R                  S9sSSS5        $ ! , (       d  f       g= f)z6Retrieve JSON content from a local file or remote URL.rz   N)r8   Úis_urlr„   r|   r’   Úloadr~   r   )ÚfnameÚfs     r(   Úget_jsonr˜   �   sR   € ä�‹J€EÜˆe‡}�}Ü˜5Ó!×&Ñ&Ó(Ð(Ü	�5Ô	˜QÜ�yŠy˜¬k×.EÑ.EÑF÷ 
×	×	ús   Á #A-Á-
A;Útype_c                 ó   ^ • U 4S j$ )zFReturns a callable that casts its argument to type_ unless it is None.c                 ó   >• U c  U $ T" U 5      $ rE   r2   )Úvr™   s    €r(   rI   Úoptcast.<locals>.<lambda>›   s   ø€ ˜!™)�QÐ1©¨q«Ð1r+   r2   )r™   s   `r(   Úoptcastrž   ™   s	   ø€ ä1Ð1r+   c                 óB   • [         R                  " S[        U 5      5      $ )Nz	https?://)r   Úmatchr8   ©r!   s    r(   r”   r”   ž   s   € Ü�8Š8�L¤# a£&Ó)Ð)r+   Údefaultrœ   Ú
allow_noneÚcondc           
      óœ  • U(       aP  U [         :w  aF  [        U[         5      (       a1  U Vs/ s H  n[        U SXdS9PM     sn Vs/ s H	  o"c  M  UPM     sn$ U(       a  Uc  U$ [        X 5      (       a3  U [        :X  a  [        U[        5      (       d  U(       a(  U" U5      (       d  [
        R                  " SU 35        U$ U$ s  snf s  snf )zKCheck if a value has a certain type (with bells and whistles), warn if not.N)r¤   zInvalid value for property: )ÚlistÚ
isinstanceÚtype_checkerr�   ÚboolÚwarningsÚwarn)r™   r¢   rœ   r£   r¤   Ú
allow_listÚvvs          r(   r¨   r¨   ¢   s¨   € ö �eœt“m¬
°1´d×(;Ñ(;áOPÓQÊqÈœL¨°°bÔDÉqÒQÓcÒQ�a—ÑQÑcÐcæ�a‘iØˆô �a×Ñ E¬S£L´ZÀÄ4×5HÑ5HÎdÑ[_Ð`a×[bÑ[bÜ�ŠÐ4°Q°CÐ8Ô9ØˆØ€Hùò RùÒcs   «CÁC	ÁC	c                 ó:  • U R                  SS5      R                  SS5      R                  SS5      n U [        R                  ;   a  U S-   $ SR                  S U R	                  S5       5       5      n U (       d  Sn U S   [
        R                  S-   ;  a  SU -   n U $ )u£  Convert a string into a valid python attribute name.
This function is called to convert ASCII strings to something that can pass as
python attribute name, to be used with namedtuples.

>>> str(normalize_name('class'))
'class_'
>>> str(normalize_name('a-name'))
'a_name'
>>> str(normalize_name('a nÃ¤me'))
'a_name'
>>> str(normalize_name('Name'))
'Name'
>>> str(normalize_name(''))
'_'
>>> str(normalize_name('1'))
'_1'
Ú-r&   Ú.Ú c              3   ó6   #   • U  H  n[        US S9v •  M     g7f)F)Ú	lowercaseN)Úslug)Ú.0Ússs     r(   Ú	<genexpr>Ú!normalize_name.<locals>.<genexpr>Î   s   é € ÐB²\¨r”�b EÖ*²\ùs   ‚r   )ÚreplaceÚkeywordÚkwlistÚjoinr   ÚstringÚascii_lettersr¡   s    r(   Únormalize_namer¿   ¹   sŒ   € ð$ 	
�	‰	�#�sÓ×#Ñ# C¨Ó-×5Ñ5°c¸3Ó?€AØŒG�N‰NÓØ�3‰wˆØ�‰ÑB°Q·W±W¸S´\ÓBÓB€AÞØˆØˆ�t”6×'Ñ'¨#Ñ-Ó-Ø�!‰GˆØ€Hr+   c                 ó   • SR                  S [        R                  " SU 5       5       5      nU(       a  UR                  5       n[        R
                   H  nUR                  US5      nM     [        R                  " SU(       a  SOSU5      nUR                  SS5      R                  S5      n[        R                  " SU5      (       d   eU$ )	um   Condensed version of s, containing only lowercase alphanumeric characters.

>>> str(slug('A B. Ã¤C'))
'abac'
r   c              3   ó^   #   • U  H#  n[         R                  " U5      S :w  d  M  Uv •  M%     g7f)ÚMnN)ÚunicodedataÚcategory)rµ   Úcs     r(   r·   Úslug.<locals>.<genexpr>Ü   s,   é € ð 6Ò<˜Ü ×)Ò)¨!Ó,°Ñ4÷ ‘!Ò<ùs   ‚-¤	-ÚNFDz\s+r±   ÚasciiÚignorez[ A-Za-z0-9]*$)r¼   rÃ   Ú	normalizeÚlowerr½   Úpunctuationr¹   r   Úsubrm   rl   r    )r!   Úremove_whitespacer³   rH   rÅ   s        r(   r´   r´   Ö   s¨   € ð �'‰'ñ 6œ[×2Ò2°5¸!Ô<ó 6ó 6€CæØ�i‰i‹kˆÜ×ÔˆØ�k‰k˜!˜RÓ Šñ  ä
�&Š&�Ö0™°c¸3Ó
?€CØ
�*‰*�W˜hÓ
'×
.Ñ
.¨wÓ
7€CÜ�8Š8Ð$ c×*Ñ*Ð*Ð*Ø€Jr+   )Úrrr   )FNT)TT),r7   r�   r   r|   r½   rº   Úloggingrª   Ú
contextlibr~   ÚdataclassesrÃ   Úurllib.requestrO   Útypingr   r   r   r   r   ÚHTTP_REQUEST_TIMEOUTÚ	dataclassr
   ÚcontextmanagerrW   Útupler8   r¦   rb   rd   r„   Ú
ValueErrorÚLoggerÚtyperŒ   r’   r:   r˜   rž   r”   r©   r¨   r¿   r´   r2   r+   r(   Ú<module>rÜ      sÕ  ðñó 
Û 	Û Û Û Û Û Û Û Û Û Û ß :Õ :àÐ ð ×Ñ÷%Fð %Fó ð%FðP ×Ñð 49Ø$ñSà˜ Ñ/Ñ0ôSó ðSð(?˜˜s D¨Ñ$4Ð4Ñ5ô ?ð ×Ñ÷Pð Pó ðPð03�Sð 3˜[ô 3ð )-ØØ(ñ	!Øð!à�g—n‘nÑ%ð!ð ð!ð õ	!ô6ðG�u˜T 4˜ZÑ(ô Gð2�4ð 2˜H c U¨C ZÑ0ô 2ò
*ð !Ø04ØñØðà˜#‘ðð ��c‘˜C�Ñ ðð ð	ð
 �x   t Ñ,Ñ-ðð 	õò.õ:r+   