
    Ngb                       d Z ddlmZ ddlZddlZddlmZ ddlmZm	Z	 ddl
mZ ddlmZ er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Z	 	 	 	 	 	 	 	 ddZ	 	 	 	 ddZ	 	 	 	 ddZddZ e eej:                        eej<                        Z e eej@                        eej<                        Z! e eej:                        ejD                  ej<                        Z# e eej@                        ejD                  ej<                        Z$ ee      Z% ee!      Z& ee#      Z' ee$      Z( eejR                        Z) eejT                        Z*y)z
Scheduler queues
    )annotationsN)Path)TYPE_CHECKINGAny)queue)request_from_dict)Callable)PathLike)Self)Request)Crawlerc                     G d d|       }|S )Nc                        e Zd Zd fdZ xZS )'_with_mkdir.<locals>.DirectoriesCreatedc                    t        |      j                  }|j                         s|j                  dd       t	        |   |g|i | y )NT)parentsexist_ok)r   parentexistsmkdirsuper__init__)selfpathargskwargsdirname	__class__s        .lib/python3.12/site-packages/scrapy/squeues.pyr   z0_with_mkdir.<locals>.DirectoriesCreated.__init__   sC    4j''G>>#dT:GT3D3F3    )r   zstr | PathLiker   r   r   r   )__name__
__module____qualname__r   __classcell__r   s   @r   DirectoriesCreatedr      s    	4 	4r    r&    )queue_classr&   s     r   _with_mkdirr)      s    4[ 4 r    c                &     G fdd|       }|S )Nc                  @     e Zd Zd fdZd fdZd fdZ xZS )._serializable_queue.<locals>.SerializableQueuec                4     |      }t         |   |       y N)r   push)r   objsr   	serializes      r   r/   z3_serializable_queue.<locals>.SerializableQueue.push,   s    #AGLOr    c                6    t         |          }|r |      S y r.   )r   pop)r   r1   r   deserializes     r   r4   z2_serializable_queue.<locals>.SerializableQueue.pop0   s    A"1~%r    c                r    	 t         |          }|r |      S y# t        $ r}t        d      |d}~ww xY w  Returns the next object to be returned by :meth:`pop`,
            but without removing it from the queue.

            Raises :exc:`NotImplementedError` if the underlying queue class does
            not implement a ``peek`` method, which is optional for queues.
            z4The underlying queue class does not implement 'peek'Nr   peekAttributeErrorNotImplementedError)r   r1   exr   r5   s      r   r:   z3_serializable_queue.<locals>.SerializableQueue.peek6   sJ    GLN
 "1~% " )Js    	616)r0   r   returnNoner>   z
Any | None)r!   r"   r#   r/   r4   r:   r$   )r   r5   r2   s   @r   SerializableQueuer,   +   s    			 	r    rA   r'   )r(   r2   r5   rA   s    `` r   _serializable_queuerB   &   s    
K 8 r    c                     G d d|       }|S )Nc                  j     e Zd Zd fdZe	 	 	 	 	 	 	 	 	 	 dd       Zd fdZd	 fdZd	 fdZ xZ	S )
7_scrapy_serialization_queue.<locals>.ScrapyRequestQueuec                F    |j                   | _         t        | 	  |       y r.   )spiderr   r   )r   crawlerkeyr   s      r   r   z@_scrapy_serialization_queue.<locals>.ScrapyRequestQueue.__init__N   s    !..DKGS!r    c                     | ||      S r.   r'   )clsrH   rI   r   r   s        r   from_crawlerzD_scrapy_serialization_queue.<locals>.ScrapyRequestQueue.from_crawlerR   s     w$$r    c                \    |j                  | j                        }t        |   |       y NrG   )to_dictrG   r   r/   )r   requestrequest_dictr   s      r   r/   z<_scrapy_serialization_queue.<locals>.ScrapyRequestQueue.pushX   s#    "??$++?>LGL&r    c                T    t         |          }|sy t        || j                        S rN   )r   r4   r   rG   r   rQ   r   s     r   r4   z;_scrapy_serialization_queue.<locals>.ScrapyRequestQueue.pop\   s%    gkmG$WT[[AAr    c                T    t         |          }|syt        || j                        S )r8   NrO   )r   r:   r   rG   rT   s     r   r:   z<_scrapy_serialization_queue.<locals>.ScrapyRequestQueue.peekb   s'     glnG$WT[[AAr    )rH   r   rI   str)
rH   r   rI   rV   r   r   r   r   r>   r   )rQ   r   r>   r?   )r>   zRequest | None)
r!   r"   r#   r   classmethodrL   r/   r4   r:   r$   r%   s   @r   ScrapyRequestQueuerE   M   s[    	" 
	%!	%(+	%47	%CF	%	% 
	%
	'	B
	B 
	Br    rX   r'   r(   rX   s     r   _scrapy_serialization_queuerZ   J   s    B[ BB r    c                     G d d|       }|S )Nc                  2     e Zd Zedd       Zd fdZ xZS );_scrapy_non_serialization_queue.<locals>.ScrapyRequestQueuec                     |        S r.   r'   )rK   rH   r   r   s       r   rL   zH_scrapy_non_serialization_queue.<locals>.ScrapyRequestQueue.from_crawleru   s	    5Lr    c                `    	 t         |          }|S # t        $ r}t        d      |d}~ww xY wr7   r9   )r   r1   r=   r   s      r   r:   z@_scrapy_non_serialization_queue.<locals>.ScrapyRequestQueue.peeky   s?    GLN
 H	 " )Js    	-(-)rH   r   r   r   r   r   r>   r   r@   )r!   r"   r#   rW   rL   r:   r$   r%   s   @r   rX   r]   t   s    		 
		 	r    rX   r'   rY   s     r   _scrapy_non_serialization_queuer`   q   s    [ ( r    c                    	 t        j                  | d      S # t         j                  t        t        f$ r}t        t        |            |d }~ww xY w)N   )protocol)pickledumpsPicklingErrorr;   	TypeError
ValueErrorrV   )r0   es     r   _pickle_serializerj      sH    (||C!,,   .)< (Q a'(s    AAA)r(   type[queue.BaseQueue]r>   rk   )r(   rk   r2   zCallable[[Any], bytes]r5   zCallable[[bytes], Any]r>   rk   )r0   r   r>   bytes)+__doc__
__future__r   marshalrd   pathlibr   typingr   r   queuelibr   scrapy.utils.requestr   collections.abcr	   osr
   typing_extensionsr   scrapyr   scrapy.crawlerr   r)   rB   rZ   r`   rj   FifoDiskQueueloads!_PickleFifoSerializationDiskQueueLifoDiskQueue!_PickleLifoSerializationDiskQueuere   "_MarshalFifoSerializationDiskQueue"_MarshalLifoSerializationDiskQueuePickleFifoDiskQueuePickleLifoDiskQueueMarshalFifoDiskQueueMarshalLifoDiskQueueFifoMemoryQueueLifoMemoryQueuer'   r    r   <module>r      s|   #    %  2( '&!&!%! (! 	!H$&$$N&4( %8##$&7% ! %8##$&7% ! &9##$gmmW]]& " &9##$gmmW]]& "
 22ST 12ST 23UV 23UV 1%2G2GH1%2G2GHr    