
    Qg                         d dl Z d dlZd dlZd dlZd dlZd dlZdZdZ G d d          Zda	i a
d ZddZddZdd	Zdd
ZdS )    Nzemde-b2b.myshopify.comz2025-01c                       e Zd Zd Zd ZdS )RateLimiterc                 `    || _         || _        g | _        t          j                    | _        d S N)	max_callsperiodcallsasyncioLocklock)selfr   r   s      $/var/www/sites/EMDE/api/customers.py__init__zRateLimiter.__init__   s(    "
LNN			    c                    K    j         4 d {V  t          j                     fd j        D              _        t	           j                   j        k    r^ j         j        d         z
  z
  }t          j        |           d {V  t          j                     fd j        D              _         j        	                               d d d           d {V  d S # 1 d {V swxY w Y   d S )Nc                 0    g | ]}|z
  j         k     |S  r   .0tnowr   s     r   
<listcomp>z'RateLimiter.acquire.<locals>.<listcomp>   s)    III37T[3H3H!3H3H3Hr   r   c                 0    g | ]}|z
  j         k     |S r   r   r   s     r   r   z'RateLimiter.acquire.<locals>.<listcomp>   s)    MMMAsQw7L7La7L7L7Lr   )
r   time	monotonicr	   lenr   r   r
   sleepappend)r   
sleep_timer   s   ` @r   acquirezRateLimiter.acquire   s     9 		# 		# 		# 		# 		# 		# 		# 		#.""CIIIIITZIIIDJ4:$.00![C$*Q-,?@
mJ/////////n&&MMMMMMMM
Jc"""		# 		# 		# 		# 		# 		# 		# 		# 		# 		# 		# 		# 		# 		# 		# 		# 		# 		# 		# 		# 		# 		# 		# 		# 		# 		# 		# 		# 		# 		#s   CC''
C14C1N)__name__
__module____qualname__r   r!   r   r   r   r   r      s2        # # #
# 
# 
# 
# 
#r   r   c                     t           j                            t           j                            t           j                            t
                              d          } t           j                            | d          }t          |dd          5 }t          j        |          a	d d d            n# 1 swxY w Y   t          
                                D ]}t          dd          t          |<   d S )	Nz..ztokens.jsonrzutf-8)encoding   g      ?)r   r   )ospathjoindirnameabspath__file__openjsonload_tokenskeysr   _rate_limiters)base_dirtokens_filefkeys       r   load_tokensr9   #   s    w||BGOOBGOOH,E,EFFMMH',,x77K	k3	1	1	1 Q)A,,               ||~~ C C)AcBBBsC Cs   B33B7:B7c                     t           t                       t          t                                                     }|| t	          |          z           }t           |         |fS r   )r2   r9   listr3   r   )token_index
token_keysselected_keys      r   get_access_tokenr?   -   sJ    gllnn%%JkC
OO;<L< ,..r   c                 t  K   t          |          \  }}t          |                                          d {V  dt           dt           d}d|d}t          j        |           }t          j                    4 d {V }	 |	                    |||          4 d {V }|
                                 d {V }	|j        dk    rd}
|                     d	i                               d
g           }t          |t                    rJ|D ]G}|                    d          r0|                    dd          d                                         }
 nHt%          d|j        |	           |	|
dcd d d           d {V  cd d d           d {V  S t%          d           |                                 d {V cd d d           d {V  cd d d           d {V  S # 1 d {V swxY w Y   n'# t&          $ r}t%          d|           Y d }~nd }~ww xY wd d d           d {V  n# 1 d {V swxY w Y   d S )Nhttps:///admin/api/z/customers.jsonapplication/jsonzContent-TypezX-Shopify-Access-Tokenheadersdatai  u   Non définicustomertagszCompany Id::   zHTTP Error:)error	companyIdu   Client créé avec succès.z!Exception during create_customer:)r?   r4   r!   	SHOP_LINKAPI_VERSIONr0   dumpsaiohttpClientSessionposttextstatusget
isinstancer;   
startswithsplitstripprint	Exception)customer_datar<   access_token	token_keyurlrF   payloadsessionresponseresponse_text
company_idrI   tages                 r   create_customerrh   7   s"     .{;;L)

#
+
+
-
--------
GY
G
G;
G
G
GC*". G j''G$&& : : : : : : :'	:||Cw|GG - - - - - - -8&.mmoo 5 5 5 5 5 5?c))!.J(,,Z<<@@LLD!$-- &#' & &C"~~m<< &-0YYsA->->q-A-G-G-I-I
 %& --HHH%2LL- - - - - - - - - - - - -: : : : : : : : : : : : : : 3444%]]__,,,,,,- - - - - - - - - - - - -: : : : : : : : : : : : : :- - - - - - - - - - - - - - -  	: 	: 	:5q99999999	:!: : : : : : : : : : : : : : : : : : : : : : : : : : :$ 4sm   ?H'G.CG*G.(G7G.
G&	&G.)G&	*G.-H'.
H8HH'HH''
H14H1c                 0  K   t          |          \  }}t          |                                          d {V  dt           dt           d|  d}d|d}t          j        |          }t          j                    4 d {V }	 |	                    |||          4 d {V }	|	
                                 t          d|  d	           |	                                 d {V cd d d           d {V  cd d d           d {V  S # 1 d {V swxY w Y   nY# t          j        $ r%}
t          d
|
j        |
j                   Y d }
~
n*d }
~
wt          $ r}
t          d|
           Y d }
~
nd }
~
ww xY wd d d           d {V  n# 1 d {V swxY w Y   d S )NrA   rB   z/customers/z.jsonrC   rD   rE   zClient u    mis à jour avec succès.zHTTP Error (PUT):z!Exception during update_customer:)r?   r4   r!   rN   rO   r0   rP   rQ   rR   putraise_for_statusr[   ClientResponseErrorrU   messager\   )shopify_customer_idupdated_datar<   r^   r_   r`   rF   ra   rb   rc   rg   s              r   update_customerrp   U   s%     .{;;L)

#
+
+
-
--------
]Y
]
];
]
]CV
]
]
]C*". G j&&G$&& 
: 
: 
: 
: 
: 
: 
:'		:{{3g{FF - - - - - - -())+++O 3OOOPPP%]]__,,,,,,- - - - - - - - - - - - -
: 
: 
: 
: 
: 
: 
: 
: 
: 
: 
: 
: 
: 
:- - - - - - - - - - - - - - - * 	< 	< 	<%qx;;;;;;;; 	: 	: 	:5q99999999	:
: 
: 
: 
: 
: 
: 
: 
: 
: 
: 
: 
: 
: 
: 
: 
: 
: 
: 
: 
: 
: 
: 
: 
: 
: 
: 
: 4ss   FD"AD#D
D	DD	DFE0)E	F	E0E+&F+E00F
FFc                   K   t          |           \  }}t          |                                          d {V  dt           dt           d}d|d}g }t          j                    4 d {V }|r7t          |                                          d {V  	 |                    ||          4 d {V }|                                 |	                                 d {V }|
                    |                    dg                      |j                            d          }	|	r/t          j        d	|	          }
|
r|
                    d
          nd }nd }	 d d d           d {V  n# 1 d {V swxY w Y   n'# t          $ r}t!          d|           Y d }~nd }~ww xY w|7	 d d d           d {V  n# 1 d {V swxY w Y   |S )NrA   rB   z/customers.json?limit=250rC   rD   )rF   	customersLinkz<([^>]+)>;\s*rel="next"rK   z#Exception during get_all_customers:)r?   r4   r!   rN   rO   rQ   rR   rV   rk   r0   extendrF   researchgroupr\   r[   )r<   r^   r_   r`   rF   rr   rb   rc   rG   link_headermatchrg   s               r   get_all_customersrz   l   s     .{;;L)

#
+
+
-
--------
QY
Q
Q;
Q
Q
QC*". G I$&&       ' 	 +33555555555";;sG;<< 	# 	# 	# 	# 	# 	# 	#--///!)000000D$$TXXk2%>%>???"*"2"6"6v">">K" # "	*Dk R R05?ekk!nnn4"
	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	#    ;Q???  	 	                          " sa   -)F;E>4B%E,E>,
E6	6E>9E6	:E>=F;>
F"FF;F""F;;
GG)r   )r)   r0   ru   r   r
   rQ   rN   rO   r   r2   r4   r9   r?   rh   rp   rz   r   r   r   <module>r{      s    				  				   $	# # # # # # # #( C C C/ / / /   <   .     r   