
    پh                     h    d dl mZmZmZmZ d dlZddlmZmZm	Z	m
Z
mZmZ  ed      Z G d d      Zy)    )ListSequenceSetTupleN   )DEFAULT_ALPHABETDEFAULT_BLOCKLISTDEFAULT_MIN_LENGTH_exact_match_match_at_ends_match_anywhere
0123456789c                       e Zd Zeeefdededee   fdZ	de
e   defdZdde
e   dedefd	Zd
edee   fdZdedefdZdededefdZd
ededefdZd
edefdZy)Sqidsalphabet
min_length	blocklistc                    t        d |D              rt        d      t        |      dk  rt        d      t        t        |            t        |      k7  rt        d      t	        |t
              rt	        |t              rt        d      d}|dk  s||kD  rt        d	|       |t        u r*|t        u r"t        | _        t        | _        t        | _        nt        |j!                               }t               }t               }t               }|D ]  }	t        |	      dk  r|	j!                         }
t        |
      }||z  |k7  r6t        |	      dk(  r |j#                  |	j!                                d|t$        z  r|j#                  |
       |j#                  |
        || _        t'        |      | _        || _        | j)                  |      | _        || _        y )
Nc              3   8   K   | ]  }t        |      d kD    yw)   N)ord).0chars     G/var/www/Befach/backend/env/lib/python3.12/site-packages/sqids/sqids.py	<genexpr>z!Sqids.__init__.<locals>.<genexpr>   s     44s4y34s   z,Alphabet cannot contain multibyte characters   z"Alphabet length must be at least 3z'Alphabet must contain unique characterszMinimum length must be an int   r   z'Minimum length has to be between 0 and )any
ValueErrorlenset
isinstanceintbool	TypeErrorr	   r   r   _Sqids__blocklist_exact_matchr   _Sqids__blocklist_match_at_endsr    _Sqids__blocklist_match_anywhereloweraddDIGITStuple_Sqids__shuffle_Sqids__alphabet_Sqids__min_length)selfr   r   r   MIN_LENGTH_LIMITalphabet_lowerexact_matchmatch_at_endsmatch_anywhereword
word_lowerword_lower_sets               r   __init__zSqids.__init__   s    4844KLLx=1ABBs8}X.FGG*c*jT.J;<<>Z*::9:J9KL 
 ))h:J.J5AD(>LD*8GD+ !12N$'EK&)eM'*uN!t9q=!ZZ\
!$Z!N2nDt9>OODJJL1#f,!%%j1"&&z2 " ,7D(-2=-AD*.<D+..2&    numbersreturnc                     |syt        d |D              st        dt        j                         | j	                  |d      S )N c              3   X   K   | ]"  }d |cxk  xr t         j                  k  nc  $ yw)r   N)sysmaxsize)r   numbers     r   r   zSqids.encode.<locals>.<genexpr>M   s!     D&1-#++--Ds   (*z(Encoding supports numbers between 0 and r   )allr   r@   rA   _Sqids__encode_numbers)r0   r;   s     r   encodezSqids.encodeI   s@    DGDDG}UVV$$Wa00r:   	incrementc           	          |t         j                        kD  rt        d      t         fdt	        |      D              }|t        |      z   t         j                        z  }||z   t         j                        z  } j                  |d   j                  d | z   }|d   }|d d d   }|g}t	        |      D ]`  \  }}|j                   j                  ||dd               |t        |      dz
  k\  r<|j                  |d           j                  |      }b dj                  |      }	 j                  t        |	      kD  r|	|d   z  }	 j                  t        |	      z
  dkD  r^ j                  |      }|	|d t         j                  t        |	      z
  t        |             z  }	 j                  t        |	      z
  dkD  r^t        |	      dk\  r& j                  |	      r j                  ||dz         }	|	S )Nz*Reached max attempts to re-generate the IDc              3      K   | ]8  \  }}t        j                  |t        j                        z           |z    : y wN)r   r.   r    )r   ivr0   s      r   r   z)Sqids.__encode_numbers.<locals>.<genexpr>W   s>      Aq DOOADOO(<$<=>Bs   >Ar   r   r>   r   )r    r.   r   sum	enumerateappend_Sqids__to_idr-   joinr/   min_Sqids__is_blocked_idrD   )
r0   r;   rF   offsetr   prefixretrJ   numid_s
   `         r   __encode_numberszSqids.__encode_numbersR   s   s4??++IJJ%g.
 3w<'3t+??9$DOO(<<??67+doogv.FF!DbD>h(FAsJJt||C!"67CL1$$JJx{#~~h/H ) ggcls3x'8A;C##c#h.2>>(3x R#d&7&7#c(&BCM"RSS ##c#h.2 s8q=T11#6''Q?C
r:   rX   c                    g }|s|S t        | j                        t        fd|D              r|S |d   }| j                  j                  |      }| j                  |d  | j                  d | z   }|d d d   }|dd  }|rz|d   }|j	                  |      }|d   s|S |j                  | j                  |d   |dd               t        |      dkD  r| j                  |      }|j                  |dd        }|rz|S )Nc              3   &   K   | ]  }|v 
 y wrI    )r   calphabet_charss     r   r   zSqids.decode.<locals>.<genexpr>   s     41q&4s   r   rL   r   )
listr.   r   indexsplitrO   _Sqids__to_numberr    r-   rQ   )	r0   rX   rV   rU   rT   r   	separatorchunksr^   s	           @r   decodezSqids.decode{   s   Jdoo.444JQ&&v.??67+doogv.FFDbD>!"g IYYy)F!9
JJt''q	8AB<@A6{Q>>(3..,C  
r:   c                    t        |      }d}t        |      dz
  }|dkD  rP||z  t        ||         z   t        ||         z   t        |      z  }||   ||   c||<   ||<   |dz  }|dz  }|dkD  rPdj                  |      S )Nr   r   r>   )r_   r    r   rQ   )r0   r   charsrJ   jrs         r   	__shufflezSqids.__shuffle   s    XJN!eQU1X&U1X6#e*DA!&q58E!HeAhFAFA	 !e wwu~r:   rW   c                     g }|}t        |      }	 |j                  d|||z            ||z  }|sn!dj                  |      S )Nr   r>   )r    insertrQ   )r0   rW   r   id_charsresultalphabet_lengths         r   __to_idzSqids.__to_id   sV     h-OOAx(@AB.F	  wwx  r:   c           	      `    t        |      t        fdt        |d d d         D              S )Nc              3   d   K   | ]'  \  }}j                  |      t              |z  z   ) y wrI   )r`   r    )r   rJ   r]   rg   s      r   r   z$Sqids.__to_number.<locals>.<genexpr>   s*     W$!Q5;;q>SZ1_5Ws   -0rL   )r_   rM   rN   )r0   rX   r   rg   s      @r   __to_numberzSqids.__to_number   s-    XW)CPTRTPTIBVWWWr:   c                     |j                         }t        |      dk(  r|| j                  v S |j                  | j                        s|j                  | j                        ry| j                  D ]  }||v s y y)Nr   TF)r)   r    r&   
startswithr'   endswithr(   )r0   rX   r6   s      r   __is_blocked_idzSqids.__is_blocked_id   sq    iiks8q=$6666 NN499:||D::;33Ds{ 4 r:   N)r   )__name__
__module____qualname__r   r
   r	   strr#   r   r9   r   rE   rD   re   r-   rP   rb   r$   rS   r\   r:   r   r   r      s     ),0	7'7' 7' 9	7'r1hsm 1 1' '# 'c 'R# $s) <# # !3 !# !# !Xs Xc Xc X3 4 r:   r   )typingr   r   r   r   r@   	constantsr   r	   r
   r   r   r   r!   r+   r   r\   r:   r   <module>r~      s0    - - 
  
\	x xr:   