
    7j               	          d Z ddlmZ ddlZddlZddl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 dd	lmZmZmZ dd
lmZmZmZ  ed      Zedz  Z ed      Zd Zd Zd Zd Z ej@                  ddddd       ej@                  ddddg d       ejB                  dejD                  jF                  jH                  rdnd      d                       Z%y)!z:This script automates the generation of the QMK API data.
    )PathN)cli)current_datetime)	info_json)	json_load)list_keymaps)find_readmelist_keyboardskeyboard_alias_definitions)	load_speclist_versionslist_languagesdataztemplates/api/z.build/api_data/c                     i }| dz  j                  d      D ]>  }|j                  j                  dd      \  }}||vrg ||<   ||   j                  |       @ |D ]  }t	        ||         ||<    |S )z)Produce a map of available constants
    	constantsz**/*_[0-9].[0-9].[0-9].json_   )globstemrsplitappendsorted)output_folderretfilenameversions        M/home/hanthebot/chat/keyboard/qmk_firmware/lib/python/qmk/cli/generate/api.py_list_constantsr      s     C,223PQ "		((a0gs?CID	!	"  &3t9%D	& J    c                    t               D ]>  }t        |      }| d| dz  }|j                  t        j                  |d      d       @ t               D ]R  }t        |      D ]B  }t        ||      }| d| d| dz  }|j                  t        j                  |d      d       D T t        j                  | dz         y	)
zCTo make it easier for consumers, publish pre-merged spec files
    zconstants/keycodes_.json,:
separatorsutf-8encodingr   zconstants/keycodes/N)r   r   
write_textjsondumpsr   shutilrmtree)r   r   overalloutput_filelangs        r   _resolve_keycode_specsr3   '   s     !? ]G$#(;G9E&JJtzz'jIT[\	]   a$T* 	aG.G',?vQwiu*UUK""4::g*#MX_"`		aa MM-"778r    c                    t        |       } t        |      }|j                  dk(  rFt        |       }|j                  d      }|j	                  t        j                  |d      d       |S |j                  dk(  r3t        |       }|j	                  t        j                  |      d       |S t        j                  | |      S )Nz.hjsonr"   r#   r&   r(   r)   z.jsonschema)	r   suffixr   with_suffixr+   r,   r-   r.   copy2)srcdstr   s      r   _filtered_copyr:   ;   s    
s)C
s)C
zzX~oog&tzz$:>Q

zz]"~tzz$'':
<<S!!r    c                      t               } t        j                  j                  rIg }| D ]@  t	        fdt        j                  j                  D              s0|j                         B |} | S )z.Perform basic filtering of list_keyboards
    c              3   &   K   | ]  }|v  
 y w)N ).0ikeyboard_names     r   	<genexpr>z*_filtered_keyboard_list.<locals>.<genexpr>V   s     ?!1%?s   )r
   r   argsfilteranyr   )keyboard_listkb_listr@   s     @r   _filtered_keyboard_listrG   O   s[     #$M
xx* 	.M?sxx??}-	.  r    z-nz	--dry-runT
store_truezDon't write the data to disk.)arg_onlyactionhelpz-fz--filterr   zlFilter the list of keyboards based on partial name matches the supplied value. May be passed multiple times.)rI   rJ   defaultrK   zGenerate QMK API dataF)hiddenc                 :	   t         dz  }|dz  }|dz  }|dz  }|dz  }|dz  }|dz  }t         j                         rt        j                  t                t        j                  t
        t                t        j                  t        |t               t               }i }	i }
|D ]s  }t        |      }||	|<   |d	z  |z  }|d
z  }|dz  }t        |      }t        |dd      D ]  }t        j                  j                  |      }|| j                  j!                  d|       A|dz  j                         r| j                  j!                  d|       qd| d|dz  j#                         d|d   |j$                  <    |j'                  dd       t)        j*                  t-               ||idd      }| j.                  j0                  s|j3                  |d       | j                  j!                  d|       |r3t        j4                  ||       | j                  j!                  d||       |d   D ]  }|d   |   d    }||z  }|j6                  j'                  dd       |j3                  t)        j*                  t9        t;        |            d      d       | j                  j!                  d!|        d"|v s |d"   }d#|v r|d#   |
vri |
|d#   <   d$|v r|d$   |
|d#      vri |
|d#      |d$   <   d#|v s]d$|v sc||
|d#      |d$      |<   v t=        |	      }t?               }t-               |||
d%}tA        |       t)        j*                  t-               |	dd      }t)        j*                  t-               |
d&d      }t)        j*                  t-               |dd      }t)        j*                  t-               |d'd      }t)        j*                  |d      }t)        j*                  t-               tC        |      d(d      }| j.                  j0                  ss|j3                  |d       |j3                  |d       |j3                  |d       |j3                  |d       |j3                  |d       |j3                  |d       yy))z Generates the QMK API data.
    v1zkeyboards.jsonzkeyboard_list.jsonzkeyboard_aliases.jsonzkeyboard_metadata.jsonzconstants_metadata.jsonzusb.json)copy_function	keyboardsz	info.jsonz	readme.mdFT)cfullpathNz(Skipping keymap %s (not in qmk_firmware)zkeymap.cz'Skipping keymap %s (not pure dd keymap)z:https://raw.githubusercontent.com/qmk/qmk_firmware/master/z/keymap.jsonzkeymap.json)urlpathkeymaps)parentsexist_ok)last_updatedrQ   r#   r&   r(   r)   zWrote file %szCopied %s -> %srU   zWrote keymap %susbvidpid)rY   rQ   keyboard_aliasesrZ   )rY   rZ   )rY   r]   )rY   r   )"BUILD_API_PATHexistsr.   r/   copytreeTEMPLATE_PATH	DATA_PATHr:   rG   r   r	   r   qmkrU   under_qmk_firmwarelogdebugas_posixr   mkdirr,   r-   r   rB   dry_runr+   copyfileparentr   r   r   r   r3   r   )r   v1_dirkeyboard_all_filekeyboard_list_filekeyboard_aliases_filekeyboard_metadata_fileconstants_metadata_fileusb_filerE   kb_allusb_listr@   kb_jsonkeyboard_dirkeyboard_infokeyboard_readmekeyboard_readme_srckeymap
keymap_relkeyboard_jsonkeymap_hjsonkeymap_jsonrZ   r]   keyboard_metadatakeyboard_all_jsonusb_jsonkeyboard_list_jsonkeyboard_aliases_jsonkeyboard_metadata_jsonconstants_metadata_jsons                                  r   generate_apir   \   s    d"F!11"66"%<<#&>>$'@@
"Hn%
OOM>2
OOIv^D ,-MFH ' 8FM* '}+m;${2&4)-8 #=EDI 	F44V<J!H&QZ'//1GP TT^S__kl $m3==?/GIv{{+	$ 	4$7

4D4FVcelUm#n  |F  Gxx$$]W$EGGMM/=9" 3_E/1DoV "), >&y1&9&A$|3""(((E&&tzz)D<N2O\f'gry&z/=> G%.C|E
( :')U$|E
(3u:2F F35U$SZ0|BEU$SZ0?q8Fv 6NM13(*",	 6" 

4D4FU[#\istzz+;+=hO\fgH5E5GVc$dq{| JJ8H8J`p'q  I  J!ZZ(9jQ"jj:J:L[jkq[r)s  AK  L88$$%6$IHw7%%&87%K(()>(Q))*@7)S**+BW*U r    )&__doc__pathlibr   r.   r,   milcr   qmk.pathrc   qmk.datetimer   qmk.infor   qmk.json_schemar   
qmk.keymapr   qmk.keyboardr	   r
   r   qmk.keycodesr   r   r   rb   ra   r^   r   r3   r:   rG   argument
subcommandconfiguser	developerr   r=   r    r   <module>r      s         )  % # P P A AL	,,()"9("(
 dK$|JijdJh  R@  A'9R9RX\]mV ^ A kmVr    