
    7j                         d Z ddlZddlZddlZddlmZ ddlmZ ddlZddl	m
Z
mZ ddlmZmZ ddlmZ ddlmZ dd	lmZ d
 ZddZd Zd Zd Zd ZddZy)zHelper functions for commands.
    N)Path)cli)QMK_USERSPACEHAS_QMK_USERSPACE)	json_loadvalidate)keyboard_alias_definitions)
maybe_exit)unix_style_pathc                  z    t         j                  j                  d      } | st        j                  d      rdnd} | S )z;Returns the correct make command for this environment.
    MAKEgmakemake)osenvirongetshutilwhich)make_cmds    E/home/hanthebot/chat/keyboard/qmk_firmware/lib/python/qmk/commands.py	find_maker      s0     zz~~f%H$ll737O    c                     g }t        |       dk  r|j                  d       n+t        |       dkD  r|j                  dt        |       z          t        |       dk7  r|j                  d       |S )zMReturns the arguments for running the specified number of parallel jobs.
    r   z--jobs   z--jobs=z--output-sync=target)intappendstr)parallelparallel_argss     r   get_make_parallel_argsr       sg     M
8}X&	X	YX67
8}34r   c                 x   t        |       }	 t        |d       |j                  dd      }t               }||v r"|}||   j                  d|      }||k(  rn||v r"||d<   |S # t        j                  $ rD}t        j
                  j                  d|  d|j                          t        d       Y d}~d}~ww xY w)z.Open and parse a configurator json export
    zqmk.keymap.v1zInvalid JSON keymap: z : r   Nkeyboardtarget)r   r   
jsonschemaValidationErrorr   logerrormessager
   r   r	   )configurator_fileuser_keymaper"   aliaseslast_keyboards         r   parse_configurator_jsonr.   /   s     -.Ko. z40H(*G
g
 8$((8<}$	 g
 'K
 %% -.?-@AII;OP1s   A" "B95:B44B9c                     i }| D ]A  }d|v r|j                  dd      \  }}|||<   "t        j                  j                  d|       C |S )z'Common processing for cli.args.env
    =r   z Invalid environment variable: %s)splitr   r&   warning)argsenvsenvkeyvalues        r   parse_env_varsr8   H   sX     D E#:3*JCDIGGOO>DE Kr   c                 z    t        |       }t        r)t        t        t              j                               |d<   |S )Nr   )r8   r   r   r   r   resolve)r3   r4   s     r   build_environmentr;   U   s1    $D /]0C0K0K0M N_Kr   c                      t        t        dd      xs# t        t        dd      xs t        j                  } | t        j                  k7  S )z[Check if running inside a virtualenv.
    Based on https://stackoverflow.com/a/1883251
    base_prefixNreal_prefix)getattrsysprefix)active_prefixs    r   in_virtualenvrC   ^   s<     C5hmUY9Zh^a^h^hMCJJ&&r   c                    dj                  |      dz   }|rd|v r|j                  dd      }d|v r| r"| j                  dk7  r| j                  j	                  dd       | j                         rt        | ddd	      5 }|j                         }d
d
d
       |k(  r0|s-t        j                  j                  d| j                   d       y
| j                  | j                  | j                  dz   z         t        | ddd	      5 }|j                  |       d
d
d
       |s1t        j                  j                  d| j                   d|  d       y
y
t        |       y
# 1 sw Y   xY w# 1 sw Y   UxY w)zLHandle dumping to stdout or file
    Creates parent folders if required
    
z


z

-T)parentsexist_okrzutf-8)encodingnewlineNzNo changes to .z.bakwzWrote z to )joinreplacenameparentmkdirexistsopenreadr   r&   infowriteprint)output_filelinesquietremove_repeated_newlines	generatedfexistings          r   
dump_linesr`   f   s`    		% 4'I)#!))(F;I )#{''3.   =k3$G $1668$9$GGLL>+2B2B1C1!EF 2 2k6F6F6O PQ+sWdC 	qGGI	 GGLL6+"2"2!34}AFG  	i$ $	 	s   E#	E/#E,/E8)r   )TF)__doc__r   r@   r   pathlibr   milcr   r$   qmk.constantsr   r   qmk.json_schemar   r   qmk.keyboardr	   qmk.utilr
   qmk.pathr   r   r    r.   r8   r;   rC   r`    r   r   <module>rj      sN    	 
     : / 3  $$2
'r   