
    htf                          d dl mZ d dlmZ d dlmZmZmZm	Z	m
Z
  G d dej                        Z G d de      Z G d d	e      Zy
)    )forms)gettext)assign_permget_group_permsget_perms_for_modelget_user_permsremove_permc                   X     e Zd ZdZ fdZd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Z xZS )BaseObjectPermissionsFormzs
    Base form for object permissions management. Needs to be extended for usage
    with users and/or groups.
    c                     || _         t        |   |i | | j                         }| j	                         | j
                  |<   y)z
        Constructor for BaseObjectPermissionsForm.

        :param obj: Any instance which form would use to manage object
          permissions"
        N)objsuper__init__get_obj_perms_field_nameget_obj_perms_fieldfields)selfr   argskwargs
field_name	__class__s        X/var/www/html/software/conda/envs/higlass/lib/python3.12/site-packages/guardian/forms.pyr   z"BaseObjectPermissionsForm.__init__   sC     $)&)224
"&":":"<J    c                     | j                         } || j                         | j                         t        | j	                               | j                         | j                               }|S )zm
        Returns field instance for object permissions management. May be
        replaced entirely.
        )labelchoicesinitialwidgetrequired)get_obj_perms_field_classget_obj_perms_field_labelget_obj_perms_field_choiceslistget_obj_perms_field_initialget_obj_perms_field_widgetare_obj_perms_required)r   field_classfields      r   r   z-BaseObjectPermissionsForm.get_obj_perms_field   sd    
 44600244699;<224002
 r   c                      y)zk
        Returns name of the object permissions management field. Default:
        ``permission``.
        permissions r   s    r   r   z2BaseObjectPermissionsForm.get_obj_perms_field_name'   s    
 r   c                     t        d      S )z
        Returns label of the object permissions management field. Defualt:
        ``_("Permissions")`` (marked to be translated).
        Permissions)_r,   s    r   r!   z3BaseObjectPermissionsForm.get_obj_perms_field_label.   s    
 r   c                     t        | j                        D cg c]  }|j                  |j                  f }}|S c c}w )z
        Returns choices for object permissions management field. Default:
        list of tuples ``(codename, name)`` for each ``Permission`` instance
        for the managed object.
        )r   r   codenamename)r   pr   s      r   r"   z5BaseObjectPermissionsForm.get_obj_perms_field_choices5   s9     2ETXX1NOAAJJ'OO Ps   ;c                     g S )zt
        Returns initial object permissions management field choices. Default:
        ``[]`` (empty list).
        r+   r,   s    r   r$   z5BaseObjectPermissionsForm.get_obj_perms_field_initial>   s	    
 	r   c                 "    t         j                  S )z
        Returns object permissions management field's base class. Default:
        ``django.forms.MultipleChoiceField``.
        )r   MultipleChoiceFieldr,   s    r   r    z3BaseObjectPermissionsForm.get_obj_perms_field_classE   s    
 (((r   c                 "    t         j                  S )z
        Returns object permissions management field's widget base class.
        Default: ``django.forms.SelectMultiple``.
        )r   SelectMultipler,   s    r   r%   z4BaseObjectPermissionsForm.get_obj_perms_field_widgetL   s    
 ###r   c                      y)zm
        Indicates if at least one object permission should be required. Default:
        ``False``.
        Fr+   r,   s    r   r&   z0BaseObjectPermissionsForm.are_obj_perms_requiredS   s    
 r   c                     t         )z{
        Must be implemented in concrete form class. This method should store
        selected object permissions.
        )NotImplementedErrorr,   s    r   save_obj_permsz(BaseObjectPermissionsForm.save_obj_permsZ   s
    
 "!r   )__name__
__module____qualname____doc__r   r   r   r!   r"   r$   r    r%   r&   r<   __classcell__r   s   @r   r   r      s:    

= )$"r   r   c                   .     e Zd ZdZ fdZd Zd Z xZS )UserObjectPermissionsForma  
    Object level permissions management form for usage with ``User`` instances.

    Example usage::

        from django.shortcuts import get_object_or_404
        from myapp.models import Post
        from guardian.forms import UserObjectPermissionsForm
        from django.contrib.auth.models import User

        def my_view(request, post_slug, user_id):
            user = get_object_or_404(User, id=user_id)
            post = get_object_or_404(Post, slug=post_slug)
            form = UserObjectPermissionsForm(user, post, request.POST or None)
            if request.method == 'POST' and form.is_valid():
                form.save_obj_perms()
            ...

    c                 2    || _         t        |   |i | y N)userr   r   )r   rG   r   r   r   s       r   r   z"UserObjectPermissionsForm.__init__w   s    	$)&)r   c                 F    t        | j                  | j                        }|S rF   )r   rG   r   r   permss     r   r$   z5UserObjectPermissionsForm.get_obj_perms_field_initial{   s    tyy$((3r   c                    t        | j                  | j                                  }| j                         D ch c]  }|d   	 }}t        | j	                               }||z
  |z  }|D ]#  }t        || j                  | j                         % ||z
  D ]#  }t        || j                  | j                         % yc c}w z
        Saves selected object permissions by creating new ones and removing
        those which were not selected but already exists.

        Should be called *after* form is validated.
        r   N)	setcleaned_datar   r"   r$   r	   rG   r   r   r   rJ   cmodel_perms
init_perms	to_removeperms          r   r<   z(UserObjectPermissionsForm.save_obj_perms   s     D%%d&C&C&EFG%)%E%E%GHqtHH99;<
 5(J6	 	3Ddii2	3 J& 	3Ddii2	3 I   B<r=   r>   r?   r@   r   r$   r<   rA   rB   s   @r   rD   rD   b   s    (*3r   rD   c                   .     e Zd ZdZ fdZd Zd Z xZS )GroupObjectPermissionsForma  
    Object level permissions management form for usage with ``Group`` instances.

    Example usage::

        from django.shortcuts import get_object_or_404
        from myapp.models import Post
        from guardian.forms import GroupObjectPermissionsForm
        from guardian.models import Group

        def my_view(request, post_slug, group_id):
            group = get_object_or_404(Group, id=group_id)
            post = get_object_or_404(Post, slug=post_slug)
            form = GroupObjectPermissionsForm(group, post, request.POST or None)
            if request.method == 'POST' and form.is_valid():
                form.save_obj_perms()
            ...

    c                 2    || _         t        |   |i | y rF   )groupr   r   )r   rZ   r   r   r   s       r   r   z#GroupObjectPermissionsForm.__init__   s    
$)&)r   c                 F    t        | j                  | j                        }|S rF   )r   rZ   r   rI   s     r   r$   z6GroupObjectPermissionsForm.get_obj_perms_field_initial   s    

DHH5r   c                    t        | j                  | j                                  }| j                         D ch c]  }|d   	 }}t        | j	                               }||z
  |z  }|D ]#  }t        || j                  | j                         % ||z
  D ]#  }t        || j                  | j                         % yc c}w rL   )	rM   rN   r   r"   r$   r	   rZ   r   r   rO   s          r   r<   z)GroupObjectPermissionsForm.save_obj_perms   s     D%%d&C&C&EFG%)%E%E%GHqtHH99;<
 5(J6	 	4Ddjj$((3	4 J& 	4Ddjj$((3	4 IrU   rV   rB   s   @r   rX   rX      s    (*4r   rX   N)djangor   django.utils.translationr   r/   guardian.shortcutsr   r   r   r   r	   Formr   rD   rX   r+   r   r   <module>ra      s?     1 m mY"

 Y"x-3 9 -3`-4!: -4r   