
    htf                         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	 d dl
mZ d dlmZ d dlZ G d	 d
ej                        Z G d de      Z G d de      Zy)    )FieldDoesNotExist)models)Q)ObjectPermissionChecker)get_content_type)ObjectNotPersisted)
PermissionNc                   F    e Zd Zed        Zd Zd Zd Zd Zd Z	d Z
d Zy	)
BaseObjectPermissionManagerc                 n    	 | j                   j                  j                  d       y# t        $ r Y yw xY w)Nusergroupmodel_meta	get_fieldr   selfs    [/var/www/html/software/conda/envs/higlass/lib/python3.12/site-packages/guardian/managers.pyuser_or_group_fieldz/BaseObjectPermissionManager.user_or_group_field   s4    	JJ&&v.  		   %( 	44c                 n    	 | j                   j                  j                  d       y# t        $ r Y yw xY w)N	object_pkTFr   r   s    r   
is_genericz&BaseObjectPermissionManager.is_generic   s4    	JJ&&{3  		r   c                 X   t        |dd      t        d|z        t        |      }t        |t              s"t        j
                  j                  ||      }n|}d|| j                  |i}| j                         r||d<   |j                  |d<   n||d<    | j                  d	i |\  }}|S )
zf
        Assigns permission with given ``perm`` for an instance ``obj`` and
        ``user``.
        pkN%Object %s needs to be persisted firstcontent_typecodename
permissionr   r   content_object )getattrr   r   
isinstancer	   objectsgetr   r   r   get_or_create)	r   permuser_or_groupobjctyper!   kwargsobj_perm_s	            r   assign_permz'BaseObjectPermissionManager.assign_perm   s    
 3d#+$%L'*&+ , , %$
+#++//UT/RJJ
D,D,DmT??%*F>""%&&F;'*F#$(d((262!    c                 Z   t        |t              rt        |d         }nt        |j                        }t        |t              s"t        j
                  j                  ||      }n|}t        |      }|j                  |       g }|D ]z  }|j                  |j                  |      r d|| j                  |i}	| j                         r||	d<   |j                  |	d<   n||	d<   |j                   | j                  di |	       | | j                  j
                  j                  |       |S )z|
        Bulk assigns permissions with given ``perm`` for an objects in ``queryset`` and
        ``user_or_group``.
        r   r   r!   r   r   r"   r#   )r%   listr   r   r	   r&   r'   r   prefetch_permshas_permr    r   r   r   appendbulk_create)
r   r)   r*   querysetr,   r!   checkerassigned_permsinstancer-   s
             r   bulk_assign_permz,BaseObjectPermissionManager.bulk_assign_perm4   s   
 h%$Xa[1E$X^^4E$
+#++//UT/RJJ)-8x(  	<H##J$7$7B&
D4L4Lm\??$-2F>**2++F;'/7F+,%%jdjj&:6&:;	< 	

&&~6r1   c                    t        |      }t        |t              s"t        j                  j	                  ||      }n|}d|i}| j                         r||d<   |j                  |d<   n||d<   g }| j                  }|D ](  }	|	||<   |j                   | j                  di |       * | j                  j                  j                  |      S )zj
        Bulk assigns given ``perm`` for the object ``obj`` to a set of users or a set of groups.
        r   r!   r   r   r"   r#   )r   r%   r	   r&   r'   r   r   r   r6   r   r7   )
r   r)   users_or_groupsr+   r,   r!   r-   to_addfieldr   s
             r   assign_perm_to_manyz/BaseObjectPermissionManager.assign_perm_to_manyT   s     !%$
+#++//U9= 0 ?J J
+??%*F>""%&&F;'*F#$((# 	D F5MMM

$V$	 zz!!--f55r1   c                 \    t        j                  dt               | j                  |||      S )z4 Depreciated function name left in for compatibilityzUserObjectPermissionManager method 'assign' is being renamed to 'assign_perm'. Update your code accordingly as old name will be depreciated in 2.0 version.)warningswarnDeprecationWarningr0   )r   r)   r*   r+   s       r   assignz"BaseObjectPermissionManager.assignp   s1      t  vH  	ImS99r1   c                    t        |dd      t        d|z        t        di | j                  |i}t	        |t
              r|t        |      z  }n|t        |t        |            z  }| j                         r|t        |j                        z  }n|t        |j                        z  }| j                  |      j                         S )	a>  
        Removes permission ``perm`` for an instance ``obj`` and given ``user_or_group``.

        Please note that we do NOT fetch object permission from database - we
        use ``Queryset.delete`` method for removing it. Main implication of this
        is that ``post_delete`` signals would NOT be fired.
        r   Nr   r!   permission__codenamepermission__content_type)r   )content_object__pkr#   )r$   r   r   r   r%   r	   r   r   r   filterdelete)r   r)   r*   r+   filterss        r   remove_permz'BaseObjectPermissionManager.remove_permu   s     3d#+$%L'*&+ , , @t//?@dJ'qD))Gqd2B32GI IG ??q366**GqCFF33G{{7#**,,r1   c           	         t        di | j                  |i}t        |t              r|t        |      z  }n%t	        |j
                        }|t        ||      z  }| j                         r8|t        |j                  dd      D cg c]  }t        |       c}      z  }n|t        |      z  }| j                  |      j                         S c c}w )	a9  
        Removes permission ``perm`` for a ``queryset`` and given ``user_or_group``.

        Please note that we do NOT fetch object permission from database - we
        use ``Queryset.delete`` method for removing it. Main implication of this
        is that ``post_delete`` signals would NOT be fired.
        rH   rI   r   T)flat)object_pk__in)content_object__inr#   )r   r   r%   r	   r   r   r   values_liststrrM   rN   )r   r)   r*   r8   rO   r,   r   s          r   bulk_remove_permz,BaseObjectPermissionManager.bulk_remove_perm   s     @t//?@dJ'qD))G$X^^4Eqd279 9G ??q(:N:NtZ^:N:_'`BB'`aaGqH55G{{7#**,,	 (as   C
N)__name__
__module____qualname__propertyr   r   r0   r<   rA   rF   rP   rW   r#   r1   r   r   r      s8     .@68:
-4-r1   r   c                       e Zd Zy)UserObjectPermissionManagerNrX   rY   rZ   r#   r1   r   r]   r]          r1   r]   c                       e Zd Zy)GroupObjectPermissionManagerNr^   r#   r1   r   ra   ra      r_   r1   ra   )django.core.exceptionsr   	django.dbr   django.db.modelsr   guardian.corer   guardian.ctypesr   guardian.exceptionsr   django.contrib.auth.modelsr	   rC   Managerr   r]   ra   r#   r1   r   <module>rj      sJ    4   1 , 2 1 Y-&.. Y-x	"= 		#> 	r1   