
    +{Bi                          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mZmZ ddlmZ dd	lmZ d
 Zd ZddeefdZ G d dej0                        ZddeefdZd ZdefdZy)zC
Creates permissions for all installed apps that need permissions.
    N)apps)get_permission_codename)create_contenttypes)
exceptions)DEFAULT_DB_ALIAS
migrationsroutertransaction)IntegrityError)camel_case_to_spacesc                 4    g t        |       | j                  S )zH
    Return (codename, name) for all permissions in the given opts.
    )_get_builtin_permissionspermissions)optss    \/var/www/python/venv/lib/python3.12/site-packages/django/contrib/auth/management/__init__.py_get_all_permissionsr      s!     @%d+?d.>.>??    c                     g }| j                   D ]/  }|j                  t        ||       d|d| j                  f       1 |S )z
    Return (codename, name) for all autogenerated permissions.
    By default, this is ('add', 'change', 'delete', 'view')
    Can  )default_permissionsappendr   verbose_name_raw)r   permsactions      r   r   r      sN    
 E** 
'5%t'<'<=	

 Lr      Tc                    | j                   sy 	 |j                  dd      }t        j                  ||      sy t        | f||||d| | j                  }	 |j                  |      } |j                  dd      }t        | j                               }	 |j                  j                  |      j                  |	ddi}
t        |j                  j                  |      j                  t        |
j!                                     j#                  d	d
            }g }|	D ]s  }|
|   }t%        |j&                        D ]T  \  }}|j(                  |f|vs |       }||j*                  _        ||_        ||_        ||_        |j5                  |       V u |j                  j                  |      j7                  |       |dk\  r|D ]  }t9        d|z          y y # t        $ r Y y w xY w# t        $ r Y y w xY w)Nauth
Permission)	verbosityinteractiveusingr   contenttypesContentTypefor_concrete_modelsF)content_type__incontent_typecodenamer   zAdding permission '%s')models_module	get_modelLookupErrorr	   allow_migrate_modelr   labelget_app_configlist
get_modelsobjects
db_managerget_for_modelssetr"   filtervaluesvalues_listr   _metapk_statedbr(   namer'   r   bulk_createprint)
app_configr    r!   r"   r   kwargsr   	app_labelr$   modelsctypes	all_permsr   modelctyper(   r<   
permissionperms                      r   create_permissionsrI   (   s    ##^^FL9
 %%eZ8
     I((3
nn^]C *'')*F B[  ++E2AA	%*F   '	 1 
 

 
^Z	0I E 	)u25;;? 	)NHd(#94'\
',
!!$&.
#"&
*/
'Z(	)	) U#//6A~ 	3D*T12	3 o  *  s#   G #G' 	G$#G$'	G32G3c                   0     e Zd Z fdZd Zd Zd Z xZS )RenamePermissionc                     || _         || _        || _        t        t        |   | j                  | j                         y N)rA   	old_model	new_modelsuperrK   __init__rename_forwardrename_backward)selfrA   rN   rO   	__class__s       r   rQ   zRenamePermission.__init__r   s9    """.!5!5	
r   c                    |j                  dd      }ddlm} |j                  j                  }|j
                  j                  |      j                  | j                  |j                               }|j
                  j                  |      j                  |j                  d            D ]  }	|	j                  j                  d      d   }
t        |      }|
 d|j                          }d	|
 d
| }|	j                  |k7  s|	j                  |k7  sh||	_        ||	_        	 t        j                   |      5  |	j#                  ddh       d d d         y # 1 sw Y   xY w# t$        $ r Y w xY w)Nr#   r$   r   )r   )rA   model__icontainsid)content_type_id__in_r   r   )r"   r<   r(   )update_fields)r*   django.contrib.auth.modelsr   
connectionaliasr1   r"   r5   rA   lowerr6   r(   splitr   r<   r
   atomicsaver   )rT   r   schema_editorrN   rO   r$   r   r;   rC   rG   prefixdefault_verbose_namenew_codenamenew_names                 r   _renamezRenamePermission._renamez   si   nn^]C 	:%%++$$**2.55nny7H 6 
 %,,2226== &d 3 > 
 	J  ((..s3A6F#7	#B $XQy'8&9:LfXQ';&<=H""l2joo6Q&2
#"*
$++"5 L"vz6JKL	L L% s*   $E&:EE&E#	E&&	E21E2c                 T    | j                  ||| j                  | j                         y rM   )rh   rN   rO   rT   r   rc   s      r   rR   zRenamePermission.rename_forward       T=$..$..Ir   c                 T    | j                  ||| j                  | j                         y rM   )rh   rO   rN   rj   s      r   rS   z RenamePermission.rename_backward   rk   r   )__name__
__module____qualname__rQ   rh   rR   rS   __classcell__)rU   s   @r   rK   rK   q   s    
8JJr   rK   c                    	 |j                  dd      }t        j                  ||      sy| D ]  \  }}g }	t	        |j
                        D ]a  \  }
}t        |t        j                        s!t        |j                  |j                  |j                        }|	j                  |
dz   |f       c t	        |	      D ]'  \  }\  }
}|j
                  j                  ||
z   |       )  y# t        $ r Y yw xY w)zd
    Insert a `RenamePermissionType` operation after every planned `RenameModel`
    operation.
    r   r   N   )r*   r	   r,   r+   	enumerate
operations
isinstancer   RenameModelrK   rA   old_namerg   r   insert)planr    r!   r"   r   r@   r   	migrationbackwardinsertsindex	operationinserteds                r   rename_permissionsr      s   ^^FL9
 ))%<# E	8 ))*>*> ? 	7E9)Z%;%;<,''&&&&	
 	956	7 -6g,> 	E(H(ui  ''5(8)D	EE  s   C& &	C21C2c                  d    	 t        j                         } | S # t        t        t        f$ r Y yw xY w)zt
    Return the current system user's username, or an empty string if the
    username could not be determined.
     )getpassgetuserImportErrorKeyErrorOSError)results    r   get_system_usernamer      s7    
" M 7+  s    //c                    ddl m} |j                  j                  j                  ryt               }	 t        j                  d|      j                  dd      j                  d      j                  dd      j                         }	 |j                  j                  j                  d      j                  |       | r9|r7	 |j                  j"                  j%                  |      j'                  |	       y|S # t        $ r Y yw xY w# t        j                   $ r Y yw xY w# |j                  j(                  $ r Y |S w xY w)
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).
    :param database: The database where the unique check will be performed.
    :returns: The username, or an empty string if no username can be
        determined or the suggested username is already taken.
    r   )rB   r   NFKDasciiignorer   username)r   )django.contrib.authrB   Userr8   swappedr   unicodedata	normalizeencodedecodereplacer_   UnicodeDecodeError	get_fieldrun_validatorsr   ValidationError_default_managerr2   getDoesNotExist)check_dbdatabaseauth_appdefault_usernames       r   get_default_usernamer      s*    7 }}""*,	!!&*:;VGX&VG_WS"UW 	%%j1@@AQR
 $	MM**55h?CC) D  '   %%  }})) 	 		s6   AC8 4D  5D  8	DDDD D=<D=)__doc__r   r   django.appsr   global_appsr   r   &django.contrib.contenttypes.managementr   django.corer   	django.dbr   r   r	   r
   django.db.utilsr   django.utils.textr   r   r   rI   	RunPythonrK   r   r   r    r   r   <module>r      s      + 7 F " G G * 2@$ 
	F3R)Jz++ )J\ 
	ED" #'1A .r   