
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 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   I/tmp/pip-build-8lau8j11/django/django/contrib/auth/management/__init__.py_get_all_permissions   s    r   c             C   sG   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)Zdefault_permissionsappendr   Zverbose_name_raw)r
   permsactionr   r   r   r      s    r      Tc                s  |  j  s d  St |  d | d | d | d | | |  j } y7 | j |  }  | j d d  } | j d d    Wn t k
 r d  SYn Xt j |    s d  Sg  } t   }	 xo |  j	   D]a }
 | j
 j |  j |
 d	 d
 } |	 j |  x* t |
 j  D] } | j | | f  qWq Wt   j
 j |  j d |	  j d d       f d d   | D }   j
 j |  j |  | d k rx | D] } t d |  qWd  S)N	verbosityinteractiveusingr   ZcontenttypesContentTypeauth
PermissionZfor_concrete_modelFZcontent_type__incontent_typecodenamec          	      sL   g  |  ]B \ } \ } } | j  | f  k r   d  | d | 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')Zmodels_moduler   labelZget_app_configZ	get_modelLookupErrorr   Zallow_migrate_modelsetZ
get_modelsZobjectsZ
db_managerZget_for_modeladdr   _metar   r   filterZvalues_listZbulk_createprint)Z
app_configr   r   r   r   kwargsZ	app_labelr   Zsearched_permsctypesklassctypeZpermr   r   )r   r   r   create_permissions#   s8    	%			!	
r+   c              C   s3   y t  j   }  Wn t t f k
 r. d SYn X|  S)zt
    Return the current system user's username, or an empty string if the
    username could not be determined.
     )getpassgetuserImportErrorKeyError)resultr   r   r   get_system_usernameY   s
    	r2   c             C   s  d d l  m } | j j j r# d St   } y= t j d |  j d d  j	 d  j
 d d  j   } Wn t k
 r d SYn Xy  | j j j d  j |  Wn t j k
 r d SYn X|  r| ry | j j j d |  Wn | j j k
 r Yn Xd 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,   ZNFKDasciiignore username)django.contrib.authr3   ZUserr$   Zswappedr2   unicodedata	normalizeencodedecodereplacelowerUnicodeDecodeError	get_fieldZrun_validatorsr   ZValidationErrorZ_default_managergetZDoesNotExist)Zcheck_dbZauth_appZdefault_usernamer   r   r   get_default_usernameh   s*    
		 	rB   )__doc__r-   r9   Zdjango.appsr   Zglobal_appsr8   r   Z&django.contrib.contenttypes.managementr   Zdjango.corer   Z	django.dbr   r   r   r   r+   r2   rB   r   r   r   r   <module>   s   6