3
v^J                 @   s   d Z ddl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 dd	 Zd
d ZddeefddZdd ZdddZdS )zC
Creates permissions for all installed apps that need permissions.
    N)apps)get_permission_codename)create_contenttypes)
exceptions)DEFAULT_DB_ALIASrouterc             C   s   t | | jS )zH
    Return (codename, name) for all permissions in the given opts.
    )_get_builtin_permissionspermissions)opts r   K/usr/lib/python3.6/site-packages/django/contrib/auth/management/__init__.py_get_all_permissions   s    r   c             C   s6   g }x,| j D ]"}|jt|| d|| jf f qW |S )z
    Return (codename, name) for all autogenerated permissions.
    By default, this is ('add', 'change', 'delete', 'view')
    z	Can %s %s)default_permissionsappendr   verbose_name_raw)r
   permsactionr   r   r   r      s    r      Tc                sD  | j s
d S t| f||||d| | j}y&|j|} |jdd}|jdd W n tk
rd   d S X tj| svd S g }t }	xR| j	 D ]F}
|j
j|j|
dd}|	j| x t|
jD ]}|j||f qW qW t j
j|j|	djd	d
 fdd|D } j
j|j| |dkr@x|D ]}td|  q*W d S )N)	verbosityinteractiveusingr   ZcontenttypesContentTypeauth
PermissionF)for_concrete_model)Zcontent_type__incontent_typecodenamec                s0   g | ](\}\}}|j |fkr |||d qS ))r   namer   )pk).0ctr   r   )r   	all_permsr   r   
<listcomp>O   s   
z&create_permissions.<locals>.<listcomp>r   zAdding permission '%s')models_moduler   labelget_app_config	get_modelLookupErrorr   allow_migrate_modelset
get_modelsobjects
db_managerget_for_modeladdr   _metar   r   filtervalues_listbulk_createprint)
app_configr   r   r   r   kwargs	app_labelr   Zsearched_permsctypesklassctypepermr   r   )r   r!   r   create_permissions#   s8    




r;   c              C   s*   yt j } W n ttfk
r$   dS X | S )zt
    Return the current system user's username, or an empty string if the
    username could not be determined.
     )getpassZgetuserImportErrorKeyError)resultr   r   r   get_system_usernameY   s
    rA   c             C   s   ddl m} |jjjrdS t }y*tjd|jddj	dj
ddj }W n tk
r^   dS X y|jjjdj| W n tjk
r   dS X | r|ry|jjj|d	 W n |jjk
r   Y nX dS |S )
a?  
    Try to determine the current system user's username to use as a default.

    :param check_db: If ``True``, requires that the username does not match an
        existing ``auth.User`` (otherwise returns an empty string).
    :returns: The username, or an empty string if no username can be
        determined.
    r   )modelsr<   NFKDasciiignore username)rG   )django.contrib.authrB   ZUserr/   swappedrA   unicodedata	normalizeencodedecodereplacelowerUnicodeDecodeError	get_fieldrun_validatorsr   ValidationError_default_managergetDoesNotExist)Zcheck_dbZauth_appZdefault_usernamer   r   r   get_default_usernameh   s*    

rW   )T)__doc__r=   rJ   django.appsr   Zglobal_appsrH   r   Z&django.contrib.contenttypes.managementr   django.corer   	django.dbr   r   r   r   r;   rA   rW   r   r   r   r   <module>   s   6