
    11iX                          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 rSS jrS rS rSS jrS rSS jrS	 rSS
\4S jjrg)    Nc                 B    [         R                  " S[        U 5      5      $ )Nz	https?://)rematchstrss    D/home/james-whalen/.local/lib/python3.13/site-packages/csvw/utils.pyis_urlr
      s    88L#a&))    c           
         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	  owc  M  UPM     sn$ U(       a  Uc  U$ [        X 5      (       a3  U [        :X  a  [        U[        5      (       d  U(       a4  U" U5      (       d'  [
        R                  " SR                  U5      5        U$ U$ s  snf s  snf )N)condzInvalid value for property: {})list
isinstance	converterintboolwarningswarnformat)type_defaultr   
allow_noner   
allow_listssvs           r	   r   r      s    etm
1d(;(;LMNAbIeT2AAN`NaN``aiaESLZ45H5Hd[_`a[b[b6==a@AH O`s   CCCc                     [        U [        R                  5      (       d-  [        U [        5      (       d   e[        R                  " U 5      $ U $ N)r   pathlibPathr   )fnames    r	   ensure_pathr!      s:    eW\\**%%%%%||E""Lr   c                     [         R                  " 5       n[        R                  " U 5       HL  nUR                  n[        U[        R                  5      (       a  UR                  5       nX1UR                  '   MN     U$ r   )	collectionsOrderedDictattrfieldsr   r   Factoryfactoryname)clsresfieldr   s       r	   attr_defaultsr-   &   s[    

!
!
#CS!--gt||,,oo'G!EJJ	 "
 Jr   c                    [        U R                  5      n[        R                  " 5       n[        R
                  " U R                  5       H  nU(       a"  UR                  R                  S5      (       a  M,  [        XR                  5      nU(       a  XcUR                     :X  a  M\  [        US5      (       a  UR                  SS9nXdUR                  '   M     U$ )N_asdictT)omit_defaults)r-   	__class__r#   r$   r%   r&   r)   
startswithgetattrhasattrr0   )objr1   omit_privatedefsr+   r,   values          r	   attr_asdictr:   0   s    'D

!
!
#CS]]+!6!6s!;!;C,E!eEJJ/?&?5(++!LLtL<E"'EJJ , Jr   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).0r   s     r	   	<genexpr>!normalize_name.<locals>.<genexpr>R   s     B\rbE*\s   r   )replacekeywordkwlistjoinsplitstringascii_lettersr   s    r	   normalize_namerL   =   s    $ 	
		#s##C-55c3?AGNN3wBQWWS\BBAt6''#--!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'
 c              3   ^   #    U  H#  n[         R                  " U5      S :w  d  M  Uv   M%     g7f)MnN)unicodedatacategory)rB   cs     r	   rC   slug.<locals>.<genexpr>`   s,      6< ))!,4 !<s   -	-NFDz\s+r>   asciiignorez[ A-Za-z0-9]*$)rH   rQ   	normalizelowerrJ   punctuationrE   r   subencodedecoder   )r   remove_whitespacer@   r+   rS   s        r	   rA   rA   Z   s     '' 6[225!< 6 6Ciikkk!R   
&&0c3
?C
**Wh
'
.
.w
7C88$c****Jr   c                     SSSSSSSS.R                  5        H5  u  pU R                  US	-   5      (       d  M   U R                  US	-   U5      s  $    g )
Nzhttp://www.w3.org/ns/csvw#z+http://www.w3.org/1999/02/22-rdf-syntax-ns#z%http://www.w3.org/2000/01/rdf-schema#z!http://www.w3.org/2001/XMLSchema#zhttp://purl.org/dc/terms/zhttp://www.w3.org/ns/dcat#zhttp://www.w3.org/ns/prov#)csvwrdfrdfsxsddcdcatprov:)itemsr3   rE   )qnameprefixuris      r	   	qname2urlrl   l   s_    ,<72),, eg FSL))==#s33r   returnc           
      
  ^^ SS jmSUU4S jjmUU4S jnS nSR                  U R                  R                  SS5      5      /nU R                  (       a;  U(       a4  UR	                  SR                  U R                  R
                  5      5        UR	                  U" U R                  R                  5        VVs0 s H  u  pVUS:w  d  M  XV_M     snn5      5        U R                   GHy  nUR                  R                   Vs0 s He  n[        UR                  5      S	:X  d  M  UR                  S
   UR                  R                  S
   UR                  R                  R                  4_Mg     n	nSR                  [        UR                   R                  5      5      n
U(       a  U R                  (       au  U R                  R"                  R%                  UR                   R                  5      R'                  5       (       a)  U
SR                  UR                   R                  5      -  n
OXR                   R                  -  n
UR	                  SU
-   S-   5        UR	                  U" UR                  5      5        UR)                  S5      nUR+                  5       (       aB  UR	                  SR                  [,        R.                  " UR+                  5       5      5      5        UR	                  S5        UR	                  S5        UR	                  S5        UR                  R0                   H/  nUR	                  U" XUR                  R2                  5      5        M1     GM|     SR5                  U5      $ s  snnf s  snf )z
Render the metadata of a dataset as markdown.

:param link_files: If True, links to data files will be added, assuming the markdown is stored     in the same directory as the metadata file.
:return: `str` with markdown formatted text
c                 |    [        U 5      nU(       a)  U(       a  SR                  X 5      $ SR                  X5      $ U $ )Nz<a href="{}">{}</a>[{}]({}))rl   r   )ri   htmlurls      r	   
qname2link%metadata2markdown.<locals>.qname2link   s9    ,33C??$$U00r   c                   >^ [        U [        5      (       a+  SR                  SR                  UU4S jU  5       5      5      $ [        U [        5      (       a~  / nU R                  5        HH  u  p4UR                  SR                  T" USS9[        R                  " [        U5      5      5      5        MJ     SR                  SR                  U5      5      $ [        U 5      $ )z5
For inclusion in tables we must use HTML for lists.
z<ol>{}</ol>rN   c              3   P   >#    U  H  nS R                  T" UTS95      v   M     g7f)z<li>{}</li>keyNr   )rB   itemhtmlifyrx   s     r	   rC   5metadata2markdown.<locals>.htmlify.<locals>.<genexpr>   s(     UQT,,WTs-CDDQTs   #&z<dt>{}</dt><dd>{}</dd>T)rq   z<dl>{}</dl>)
r   r   r   rH   dictrh   appendrq   escaper   )r6   rx   rh   kr   r{   rs   s    `   r	   r{   "metadata2markdown.<locals>.htmlify   s     c4   ''UQTUUW Wc4  E		5<<qt,dkk#a&.AC D $ !''773xr   c                   > [         R                  " U 5      R                  5        VVs0 s H  u  pU(       d  M  X_M     n nn/ nU R                  SS 5      nU(       a  UR	                  US-   5        U R                  SS 5      nU(       aa  [        U[        5      (       a  SU0nUR	                  SR                  UR                  S5      =(       d    SUR                  S5      5      5        U (       aU  UR	                  S	5        U R                  5        H0  u  pUR	                  S
R                  T" U5      T" X!S95      5        M2     SR                  U5      S-   $ s  snnf )Ndc:description
zhttps://schema.org/image
contentUrlz
![{}]({})
zhttps://schema.org/captionrN   zhttps://schema.org/contentUrlzproperty | value
 --- | ---z{} | {}rw   )
copydeepcopyrh   popr~   r   r   r   getrH   )propsr   r   r+   descimgr{   rs   s         r	   
properties%metadata2markdown.<locals>.properties   s   "&--"6"<"<">D">$!!">Dyy)40JJtd{#ii2D9#s###S)JJ}++45;78: ; JJ56

9++JqM71;LMN &yy~$$! Es
   EEc           	         SR                  U R                  (       a  U R                  R                  OS5      nU R                  (       GaW  U R                  R                   (       a  [        R                  " SU R                  R                   5      (       aD  US-  nUSR                  S U R                  R                   R                  S5       5       5      -  nOBU R                  R                  S:X  a(  USR                  U R                  R                   5      -  nU R                  R                  (       a(  US	R                  U R                  R                  5      -  nU R                  R                  (       a(  US
R                  U R                  R                  5      -  nU R                  (       a  SR                  X0R                  5      nU R                  R                  SS5      R                  SS5      nU(       a#  U R                  U;   a  U(       a  US-   OUnUS-  nU R                  U;   aZ  U(       a  US-   OUnUSR                  XR                     S   XR                     S   [        XR                     S   5      5      -  nSR                  U R                  (       a&  SR                  U R                  U R                  5      OSR                  U R                  5      UU/5      $ )Nz`{}`rJ   z[\w\s]+(\|[\w\s]+)*z<br>Valid choices:<br>rN   c              3   D   #    U  H  nS R                  U5      v   M     g7f)z `{}`Nry   )rB   ws     r	   rC   4metadata2markdown.<locals>.colrow.<locals>.<genexpr>   s     !\=['.."3"3=[s    |z<br>Regex: `{}`z<br>&ge; {}z<br>&le; {}zlist of {} (separated by `{}`)r   r   r>   z<br>zPrimary keyzReferences [{}::{}](#table-{})   r   z | rp   )r   datatypebaser   	fullmatchrH   rI   minimummaximum	separatorcommon_propsr   rE   r)   rA   propertyUrl)colfkspkdtr   s        r	   colrow!metadata2markdown.<locals>.colrow   s+   ]]3<<,,(K<<<||""<< 68K8KLL22B"''!\S\\=P=P=V=VWZ=[!\\\B\\&&(2+223<<3F3FGGB||##m**3<<+?+?@@||##m**3<<+?+?@@==188]]KB##$4b9AA$L#((b.&*D6MDM!D88s?&*D6MD4;;HHa #hh-"2DXXq9I4JL LD zz chh8$*MM#(($;	
  	r   z# {}
zdc:titleDatasetz%> [!NOTE]
> Described by [{0}]({0}).
r   r   z ## <a name="table-{}"></a>Table z[{0}]({0})
r   dialectz
**CSV dialect**: `{}`
z
### Columns
z&Name/Property | Datatype | Descriptionz --- | --- | --- Fr   )r   r   r   _fnamer~   r)   rh   tablestableSchemaforeignKeyslencolumnReference	referenceresourcerJ   rA   rr   parentjoinpathexistsinheritr0   jsondumpscolumns
primaryKeyrH   )tg
link_filesr   r   r+   r   r   tablefkr   headerr   r   r{   rs   s                @@r	   metadata2markdownr   z   s    %&B ??2??..z9EF
GC	yyZ

<CCBIINNSTJJzBOO,A,A,CW,CDAqJ414,CWXY ''33U3s2;M;M7NRS7S cBq!BLL$@$@$CR\\EZEZEaEa#bb3 	 U 4::4		@P@P;QR"))		(8(8(A(A%))BRBR(S(Z(Z(\(\n++EII,<,<==Fii&&&F

4&=4'(

:e0012--	*>>JJ299$**W^^EU:VWX

$%

;<

&'$$,,CJJvc(9(9(D(DEF -# & 99S>+ XUs   =M:M:N (AN )FNT)TTr   )r   r   rq   r   rJ   rF   r   r   r#   rQ   r%   r
   r   r!   r-   r:   rL   rA   rl   r   r    r   r	   <module>r      s\    	          *	
:$4ls lr   