a
    Kcòf,  ã                   @   s`   d dl Z d dlmZ d dlmZmZmZ d dlmZ dZ	ddd„Z
d	d
„ ZG dd„ dejƒZdS )é    N)Úcolor_style)ÚIntegrityErrorÚ
migrationsÚtransaction)ÚQzÐ
    A problem arose migrating proxy model permissions for {old} to {new}.

      Permission(s) for {new} already existed.
      Codenames Q: {query}

    Ensure to audit ALL permissions for {old} and {new}.
Fc                    sj  t ƒ }|  dd¡}|  dd¡}|jj}|  ¡ D �]4}|j‰ ˆ jsBq.‡ fdd„ˆ jD ƒ}t|d�}	ˆ j	D ]\}
}|	t|
|d�O }	qf|j
 |¡}|j|d	d
�}|j|dd
�}|r°|n|}|r¼|n|}zPtj|d��. |j
 |¡j|	|d�j|d� W d  ƒ n1 �s0    Y  W q. t�yb   d |j|j¡}d |j|j¡}tj | tj|||	d�¡¡ Y q.0 q.dS )zk
    Update the content_type of proxy model permissions to use the ContentType
    of the proxy model.
    ÚauthÚ
PermissionÚcontenttypesÚContentTypec                    s   g | ]}d |ˆ j f ‘qS )z%s_%s)Z
model_name)Ú.0Úaction©Úopts© úy/home/httpd/docs/test/DocsMgr/lib/python3.9/site-packages/django/contrib/auth/migrations/0011_update_proxy_permissions.pyÚ
<listcomp>   s   z2update_proxy_model_permissions.<locals>.<listcomp>)Zcodename__in)ÚcodenameÚnameT)Zfor_concrete_modelF)Úusing)Úcontent_typeNz{}_{})ÚoldÚnewÚquery)r   Z	get_modelÚ
connectionÚaliasZ
get_modelsÚ_metaÚproxyZdefault_permissionsr   ZpermissionsÚobjectsZ
db_managerZget_for_modelr   Zatomicr   ÚfilterÚupdater   ÚformatZ	app_labelÚmodelÚsysÚstdoutÚwriteÚWARNING)ÚappsÚschema_editorÚreverseÚstyler   r
   r   ZModelZ#proxy_default_permissions_codenamesZpermissions_queryr   r   Zcontent_type_managerZconcrete_content_typeZproxy_content_typeZold_content_typeZnew_content_typer   r   r   r   r   Úupdate_proxy_model_permissions   sJ    
ÿ
ÿÿþý*ÿr*   c                 C   s   t | |dd� dS )zn
    Update the content_type of proxy model permissions to use the ContentType
    of the concrete model.
    T)r(   N)r*   )r&   r'   r   r   r   Úrevert_proxy_model_permissions;   s    r+   c                   @   s"   e Zd ZddgZe ee¡gZdS )Ú	Migration)r   Z 0010_alter_group_name_max_length)r	   Z0002_remove_content_type_nameN)	Ú__name__Ú
__module__Ú__qualname__Údependenciesr   Z	RunPythonr*   r+   Ú
operationsr   r   r   r   r,   C   s   þÿÿr,   )F)r"   Zdjango.core.management.colorr   Z	django.dbr   r   r   Zdjango.db.modelsr   r%   r*   r+   r,   r   r   r   r   Ú<module>   s   

*