
    j                        d Z ddlmZ ddlZddlZddlmZmZ dZ G d dej	                  Z
 G d d	ej	                  Zdd
dddZdS )a>  
Helpers for safer and/or more explicit pickle usage in NLTK.

- RestrictedUnpickler: blocks unpickling of *any* globals (classes/functions).
  Intended for loading NLTK data packages where we control the serialization.
- WarningUnpickler: emits a security warning before unpickling (does not make
  unpickling safe).
    )annotationsN)AnyBinaryIOzSecurity warning: loading pickles can execute arbitrary code. Only load pickle files from trusted sources and never from untrusted or unauthenticated locations.c                      e Zd ZdZd	dZdS )
RestrictedUnpicklerzW
    Unpickler that prevents any class or function from being used during loading.
    modulestrnamereturnr   c                8    t          j        d| d| d          )Nzglobal '.z' is forbidden)pickleUnpicklingError)selfr   r
   s      X/lsinfo/ai/hellotax_ai/base_platform/venv/lib/python3.11/site-packages/nltk/picklesec.py
find_classzRestrictedUnpickler.find_class$   s'    $%M%M%M%M%M%MNNN    N)r   r	   r
   r	   r   r   )__name__
__module____qualname____doc__r    r   r   r   r      s8         O O O O O Or   r   c                  6     e Zd ZdZddd fd
Zd fdZ xZS )WarningUnpicklerz6Unpickler that emits PICKLE_WARNING once per instance.Ncontextfiler   r   
str | Nonekwargsr   c               X     t                      j        |fi | || _        d| _        d S )NF)super__init___context_warned)r   r   r   r   	__class__s       r   r"   zWarningUnpickler.__init__,   s4    (((((r   r   c                    | j         sC| j        t          nt           d| j         d}t          j        |t
          d           d| _         t                                                      S )Nz ()   )
stacklevelT)r$   r#   PICKLE_WARNINGwarningswarnRuntimeWarningr!   load)r   msgr%   s     r   r.   zWarningUnpickler.load1   sk    | 	  =( &::$-::: 
 M#~!<<<<DLww||~~r   )r   r   r   r   r   r   )r   r   )r   r   r   r   r"   r.   __classcell__)r%   s   @r   r   r   )   sn        @@@D        
	 	 	 	 	 	 	 	 	 	r   r   F)r   
restrictedr   r   r   r   r1   boolr   r   c                   |r!t          |                                           S t          | |                                          S )z
    Convenience wrapper similar to pickle.load(file).

    - If restricted=True, uses RestrictedUnpickler (no warning by default).
    - If restricted=False, uses WarningUnpickler and emits a warning.
    r   )r   r.   r   )r   r   r1   s      r   pickle_loadr4   =   sE      0"4((--///D'22277999r   )r   r   r   r   r1   r2   r   r   )r   
__future__r   r   r+   typingr   r   r*   	Unpicklerr   r   r4   r   r   r   <module>r8      s     # " " " " "                  $ O O O O O&* O O O    v'   * .2e: : : : : : : :r   