
    7jJ                         d dl mZ d dlm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mZ d dlmZmZ d d	lmZmZ d d
l	mZmZ  ed      Zd Zd Zd Zd Zd ZddZd Zy)    )dotty)date)PathN)git_get_username)validate)keyboardkeymaps)MCU2BOOTLOADERLEGACY_KEYCODES)InfoJSONEncoderKeymapJSONEncoder)deep_update	json_loadzdata/templates/keyboard/c                     | j                         }|j                         D ]  \  }}|j                  d| d|      } |j                  |       y)z;Replaces the given placeholders in each template file.
    %N)	read_textitemsreplace
write_text)srcdesttokenscontentkeyvalues         F/home/hanthebot/chat/keyboard/qmk_firmware/lib/python/qmk/importers.pyreplace_placeholdersr      sN     mmoGlln 5
U//AcU!*e45 	OOG    c                     |d   j                         ^\  }}}t        |d         }| |t        d|      D cg c]  }d c}gd}|S c c}w )Nlayoutslayoutr   KC_NOr   r!   layers)r   lenrange)name	info_datalayout_namelayout_data_layout_lengthkeymap_datas          r   _gen_dummy_keymapr.      sb    %.y%9%?%?%A"[+H-.M %*1m%<=G=>K  >s   	Ac                     g }| d   D ]Y  }|d   |d   g|d   d   |d   d   d}|d   d   d	k7  r|d   d   |d<   |d   d
   d	k7  r|d   d
   |d
<   |j                  |       [ |S )Nkeyboard.keysrowcolstatexy)matrixr4   r5   w   h)append)kbf_datar!   r   items       r   _extract_kbfirmware_layoutr=   (   s    F( 
5z3u:.Wc"Wc"

 w<!GS)DIw<!GS)DId
 Mr   c           	         | d   j                         dg d}t        d      D ]  }g }| d   D ]y  }|d   |   d   }t        j                  ||      }d|v rA|d   |   d	   }|j	                  d
      d    dj                  t        t        |             d
}|j                  |       { t        |      dhk(  r |S |d   j                  |        |S )Nkeyboard.settings.nameLAYOUTr#      r0   keycodesidz()fields)r   ,KC_TRNSr$   )
lowerr&   r   getsplitjoinmapstrr:   set)r;   r-   ilayerr   keycoderD   s          r   _extract_kbfirmware_keymaprR   9   s   56<<>K 2Y ,O, 	"C*oa(.G%))'7;GwZ+H5$]]3/23CHHSf=M4N3OqQLL!	" u:)$  	H$$U+, r   c                     t        | d       | d   }| d   }t        |      d   |z  }|dz  }|j                  j                  dd       |j	                  t        j                  | t        d             ||fS )	Nzqmk.keymap.v1r   keymapr   keymap.jsonTparentsexist_okcls	sort_keys)r   r	   parentmkdirr   jsondumpsr   )r-   kb_namekm_name	km_folderkeyboard_keymaps        r   import_keymaprd   P   s    [/**%G(#G #g-I-/O    = tzz+;LX\]^Wr   c                     t         d       t         fddD              st        d       d   }t        |      }|j	                         rt        d| d      |st        |       }|dz  }|d	z  d
z  dz  }|j                  j                  dd       t               }|sd}t        t        j                         j                        |||d}t        t        j                               D ]  }t!        |||j"                  z  |        t%        |      }	t'        |	        |j)                  t+        j,                  |	t.        d             |j)                  t+        j,                  |t0        d             |S )Nzqmk.api.keyboard.v1c              3   &   K   | ]  }|v  
 y wN ).0r   r(   s     r   	<genexpr>z"import_keyboard.<locals>.<genexpr>h   s     HCsiHs   )keyboard_namer    zinvalid json configrk   zKeyboard {fg_cyan}z:{fg_reset} already exists! Please choose a different name.zkeyboard.jsonr	   defaultrU   TrV   TODO)YEARKEYBOARD	USER_NAME	REAL_NAMErY   )r   all
ValueErrorr   existsr.   r\   r]   r   rM   r   todayyearlistTEMPLATEiterdirr   r'   r   r   r   r^   r_   r   r   )
r(   r-   r`   	kb_folderkeyboard_jsonrc   	user_namer   filetemps
   `         r   import_keyboardr   c   sj   Y-. H+GHH.//(G !I/y8tuvv';/M)+i7-GO    = "I	 DJJL%%&	F X%%'( BT9tyy#8&AB ]#Di TZZ/TRStzz+;LX\]^Nr   c           
         t        |       }ddg|d      }g d|d      }t        j                  |d      }t        |      }t	        |      }t        |d   j                         ||||d   |d	   d
dd|iid      }|d   s
|d   s|d   r'|d   r|d   |d<   |d   r|d   |d<   |d   r|d   |d<   |d   rdddddddd|d<   |d   |d<   |d   |d<   |d   r|d   |d<   |d   |d<   t        |j                         |      S )NCOL2ROWROW2COLz keyboard.settings.diodeDirection)
atmega32u2
atmega32u4at90usb1286zkeyboard.controllercustomr?   zkeyboard.pins.colzkeyboard.pins.row)colsrowsr@   r!   )rk   	processor
bootloaderdiode_directionmatrix_pinsr    zkeyboard.pins.numzkeyboard.pins.capszkeyboard.pins.scrollzindicators.num_lockzindicators.caps_lockzindicators.scroll_lockzkeyboard.pins.rgbT)	breathingrainbow_moodrainbow_swirlsnakeknightstatic_gradienttwinklezrgblight.animationszkeyboard.settings.rgbNumzrgblight.led_countz
ws2812.pinzkeyboard.pins.ledz!keyboard.settings.backlightLevelszbacklight.levelszbacklight.pin)r   r
   rI   r=   rR   rH   r   to_dict)kbfirmware_datar;   r   mcur   r!   r-   r(   s           r   import_kbfirmwarer      s   _%H ),X6X-YZO
5h?T6U
VC##C2J'1F,X6K !":;AAC *0101

 &
 I  #$1E(F(SiJj'(/78K/LI+,()089M0NI,-*+2:;Q2RI./#$ !#,
	'( +33M*N	&'"*+>"?	,#$(01T(U	$%%-.A%B	/" 9,,.<<r   rg   )
dotty_dictr   datetimer   pathlibr   r^   qmk.gitr   qmk.json_schemar   qmk.pathr   r	   qmk.constantsr
   r   qmk.json_encodersr   r   r   r   rx   r   r.   r=   rR   rd   r   r   rh   r   r   <module>r      sR        $ $ & 9 @ 2*+".&.b5=r   