
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
3
\¼meü&  ã               @   sJ   d dl Z d dlmZmZ e jeƒZdd„ Zddd„Zdd„ Z	dd	d
„Z
dS )é    N)Ú
type_utilsÚutilc             C   s$  t | tƒr| jƒ jdƒ} t | tƒrØi }x¬| D ]¤}t |tƒr¢x”|jƒ D ]X\}}t |ttfƒsltdtj	|ƒ ƒ‚t |tƒrŠ|j
|g ƒj|ƒ qD|j
|g ƒj|ƒ qDW q,t |tƒr¾||krÐg ||< q,tdtj	|ƒ ƒ‚q,W |} i }t | tƒ�rx6| jƒ D ]\}}tj|ƒ||< qòW ntdtj	| ƒ ƒ‚|S )Nú,zBad group member type %szUnknown group name type %sz@Group config must be list, dict or string type only but found %s)Ú
isinstanceÚstrÚstripÚsplitÚlistÚdictÚitemsÚ	TypeErrorr   Úobj_nameÚ
setdefaultÚextendÚappendr   Úuniq_merge_sorted)Zgrp_cfgZ	c_grp_cfgÚiÚkÚvÚgroupsZgrp_nameZgrp_members© r   ú/usr/lib/python3.6/ug_util.pyÚ_normalize_groups   s8    






r   c             C   sX  t | tƒrŠg }xt| jƒ D ]h\}}t |ttttfƒrLtj|ƒr€|j	t|ƒƒ qt |tƒrj||d< |j	|ƒ qt
dtj|ƒ|f ƒ‚qW |} nt | tƒržtj| ƒ} i }x’| D ]Š}t |ttfƒräxvtj|ƒD ]}|rÆ||krÆi ||< qÆW q¨t |tƒ�r |jddƒ}|j|ƒ�p
i }	tj|	|gƒ||< q¨t
dtj|ƒ ƒ‚q¨W |�rži }
xX|jƒ D ]L\}}i }x4|jƒ D ](\}}|jddƒjƒ }|�r`|||< �q`W ||
|< �qJW |
}d }|�r&d|k�r&|jdƒ}|�r&|jƒ }|jdƒ}|jdg ƒ}|j|i ƒ}|jdg ƒ}tj||ƒ}dj|ƒ|d< tj|||gƒ||< x,|jƒ D ] \}}|�rF||knd	|d< �q0W |S )
NÚnamez(Unmappable user value type %s for key %sÚdefaultzDUser config must be dictionary/list or string  types only and not %sú-Ú_r   r   F)r   r
   r   ÚboolÚintÚfloatr   r   Zis_truer   r   r   r   r   r	   Z
uniq_mergeÚpopÚgetÚmergemanydictÚreplacer   ÚcopyÚjoin)Zu_cfgZdef_user_cfgZad_ucfgr   r   ÚusersZuser_configÚuÚnZprev_configZc_usersÚunameZuconfigZ	c_uconfigZdef_userZ
def_configZ
def_groupsZparsed_configZparsed_groupsZusers_groupsr   r   r   Ú_normalize_usersI   sl    







r*   c             C   s‚  | si } i }d| krh| d rh| d }t |tƒrHd|i}tjdddd� n t |tƒshtjdtj|ƒƒ i }i }y|j	ƒ }W n t
k
r–   tjdƒ Y nX tj||gƒ}| jd	g ƒ}t |ttfƒrÜtjd
t|ƒ› �ddd� n"t |tƒ� sþtjdtj|ƒƒ g }|�rVt |tƒ�r |jddiƒ n6t |tƒ�rBt|ƒjddƒ|d< nt |tƒ�rV|d7 }i }d| k�rpt| d ƒ}t||ƒ}||fS )NÚuserr   z'user' of type stringz22.2zUse 'users' list instead.)Z
deprecatedZdeprecated_versionZextra_messagez?Format for 'user' key must be a string or dictionary and not %sziDistro has not implemented default user access. No distribution provided default user will be normalized.r&   z'users' of type zUse 'users' as a list.z^Format for 'users' key must be a comma-separated string or a dictionary or a list but found %sr   Tz,defaultr   )r   r   r   Z	deprecater
   ÚLOGZwarningr   r   Zget_default_userÚNotImplementedErrorr"   r!   Útyper	   r   r   r*   )ZcfgZdistroZold_userZdistro_user_configZdefault_user_configZ
base_usersr   r&   r   r   r   Únormalize_users_groups¥   s\    





r/   c             C   sZ   | s||fS dd„ }t t|| jƒ ƒƒ}|s2||fS t|ƒd }|| }|jdd ƒ ||fS )Nc             S   s"   | d }| sd|krdS |d S )Né   r   Fr   )ÚentryÚconfigr   r   r   Ú	safe_find÷   s    z"extract_default.<locals>.safe_findr   r   )r
   Úfilterr   r	   r    )r&   Zdefault_nameZdefault_configr3   Z	tmp_usersr   r2   r   r   r   Úextract_defaultó   s    r5   )N)NN)ZloggingZ	cloudinitr   r   Z	getLoggerÚ__name__r,   r   r*   r/   r5   r   r   r   r   Ú<module>   s   
1
\N