Ë
    ¸2Úi   ã                   óŽ   — 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        €úE/var/www/html/acx/venv/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ÀTÇXÁXÓ1NÖO¨A�A—J‘J §¡Ò'Ð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   € Ü˜tŸy™y¨$¯(©(Ó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ˆ	Øò 	3ˆDÜ˜˜dŸi™i¨¯©Õ2ð	3ð ˜JÑ&ò 	3ˆDÜ˜˜dŸi™i¨¯©Õ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   € Ü §
¡
¨D¯H©HÓ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ˆ	Øò 	4ˆDÜ˜˜dŸj™j¨$¯(©(Õ3ð	4ð ˜JÑ&ò 	4ˆDÜ˜˜dŸj™j¨$¯(©(Õ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   