
    h              
           S SK r S SKJrJrJrJrJrJrJrJ	r	  S SK
Jr  S\\   S\\   4S jrS\\   S\\   4S jrS\S\4S jr SS	\\\\   4   S
\S\S\\   4S jjrSS
\S\S\S\4S jjrg)    N)AnyIterableIteratorListMatchPatternUnioncast)replace_entitiesxreturnc                 *    [        [        U 5      5      $ )a  flatten(sequence) -> list
Returns a single, flat list which contains all elements retrieved
from the sequence and all recursively contained sub-sequences
(iterables).
Examples:
>>> [1, 2, [3,4], (5,6)]
[1, 2, [3, 4], (5, 6)]
>>> flatten([[[1,2,3], (42,None)], [4,5], [6], 7, (8,9,10)])
[1, 2, 3, 42, None, 4, 5, 6, 7, 8, 9, 10]
>>> flatten(["foo", "bar"])
['foo', 'bar']
>>> flatten(["foo", ["baz", 42], "bar"])
['foo', 'baz', 42, 'bar']
)listiflattenr   s    S/root/1688_scrapy/alibaba-scraper/venv/lib/python3.13/site-packages/parsel/utils.pyflattenr      s         c              #   t   #    U  H,  n[        U5      (       a  [        U5       Sh  vN   M(  Uv   M.     g N7f)zViflatten(sequence) -> Iterator
Similar to ``.flatten()``, but returns iterator insteadN)_is_listliker   )r   els     r   r   r      s1      r{""H	 "s   $868c                 ^    [        U S5      =(       a    [        U [        [        45      (       + $ )a  
>>> _is_listlike("foo")
False
>>> _is_listlike(5)
False
>>> _is_listlike(b"foo")
False
>>> _is_listlike([b"foo"])
True
>>> _is_listlike((b"foo",))
True
>>> _is_listlike({})
True
>>> _is_listlike(set())
True
>>> _is_listlike((x for x in range(3)))
True
>>> _is_listlike(range(5))
True
__iter__)hasattr
isinstancestrbytesr   s    r   r   r   #   s$    * 1j!E*Qe*E&EEr   regextextr   c                    [        U [        5      (       a%  [        R                  " U [        R                  5      n SU R
                  ;   a?   [        [        [           U R                  U5      5      R                  S5      nUb  U/O/ nOU R                  U5      n[        U5      nU(       d  U$ U Vs/ s H  n[        USS/S9PM     sn$ ! [         a    / n N?f = fs  snf )aJ  Extract a list of strings from the given text/encoding using the following policies:
* if the regex contains a named group called "extract" that will be returned
* if the regex contains multiple numbered groups, all those will be returned (flattened)
* if the regex doesn't contain any group the entire regex matching is returned
extractltamp)keep)r   r   recompileUNICODE
groupindexr
   r   searchgroupAttributeErrorfindallr   w3lib_replace_entities)r   r   r   	extractedstringsss         r   extract_regexr1   ;   s     %

5"**-E$$$	CU3Zd);<BB9MI &/%:ykG --%gGCJK7a"1D%=97KK  	G	 Ls   5C 3CCCwidthsuffixc                     [        U 5      U::  a  U $ U[        U5      :  a  U SU[        U5      -
   U-   $ US:  a  U[        U5      U-
  S $ [        S5      e)z2Truncate the given text to fit in the given width.Nr   z%width must be equal or greater than 0)len
ValueError)r   r2   r3   s      r   shortenr7   X   se    
4yEs6{)ec&k)*V33zc&kE)+,,
<
==r   )T)z...)r%   typingr   r   r   r   r   r   r	   r
   
w3lib.htmlr   r-   r   r   boolr   r   r1   intr7    r   r   <module>r=      s    	 M M M Ax} c $ (3- FC FD F2 JNLgcl"#L+.LBFL	#YL:># >c >3 >3 >r   