ó ātÚ_c@s^dZddlZddlZddlmZdefd„ƒYZdefd„ƒYZdS(sEThis module implements token buckets used for client side throttling.iĸĸĸĸN(tCapacityNotAvailableErrortClockcBs#eZd„Zd„Zd„ZRS(cCsdS(N((tself((sB/opt/awscli/lib/python2.7/site-packages/botocore/retries/bucket.pyt__init__ scCstj|ƒdS(N(ttimetsleep(Rtamount((sB/opt/awscli/lib/python2.7/site-packages/botocore/retries/bucket.pyR scCs tjƒS(N(R(R((sB/opt/awscli/lib/python2.7/site-packages/botocore/retries/bucket.pyt current_times(t__name__t __module__RRR(((sB/opt/awscli/lib/python2.7/site-packages/botocore/retries/bucket.pyRs  t TokenBucketcBsƒeZdZed„Zed„ƒZejd„ƒZed„ƒZed„ƒZde d„Z d„Z d „Z d „Z RS( gā?cCsgd|_d|_d|_||_d|_||_tjƒ|_ tj |j ƒ|_ ||_ dS(Ni( tNonet _fill_ratet _max_capacityt_current_capacityt_clockt_last_timestampt _min_ratet threadingtLockt_lockt Conditiont_new_fill_rate_conditiontmax_rate(RRtclocktmin_rate((sB/opt/awscli/lib/python2.7/site-packages/botocore/retries/bucket.pyRs      cCs|jS(N(R (R((sB/opt/awscli/lib/python2.7/site-packages/botocore/retries/bucket.pyR"scCsy|jj|jƒt||jƒ|_|dkrA||_n d|_t|j|jƒ|_|jjƒWdQXdS(Ni( Rt_refilltmaxRR R tminRtnotify(Rtvalue((sB/opt/awscli/lib/python2.7/site-packages/botocore/retries/bucket.pyR&s      cCs|jS(N(R (R((sB/opt/awscli/lib/python2.7/site-packages/botocore/retries/bucket.pyt max_capacity:scCs|jS(N(R(R((sB/opt/awscli/lib/python2.7/site-packages/botocore/retries/bucket.pytavailable_capacity>sic Cs*|j|jd|d|ƒSWdQXdS(sJAcquire token or return amount of time until next token available. If block is True, then this method will block until there's sufficient capacity to acquire the desired amount. If block is False, then this method will return True is capacity was successfully acquired, False otherwise. RtblockN(Rt_acquire(RRR!((sB/opt/awscli/lib/python2.7/site-packages/botocore/retries/bucket.pytacquireBs cCs |jƒ||jkr,|j|8_tS|s>tƒ‚n|j|ƒ}x9|dkrˆ|jj|ƒ|jƒ|j|ƒ}qPW|j|8_tSdS(Ni(RRtTrueRt _sleep_amountRtwait(RRR!t sleep_amount((sB/opt/awscli/lib/python2.7/site-packages/botocore/retries/bucket.pyR"Os   cCs||j|jS(N(RR (RR((sB/opt/awscli/lib/python2.7/site-packages/botocore/retries/bucket.pyR%fscCst|jjƒ}|jdkr+||_dS|j}||j|j}t|j||ƒ}||_||_dS(N(RRRR RR RR (Rt timestamptcurrent_capacityt fill_amountt new_capacity((sB/opt/awscli/lib/python2.7/site-packages/botocore/retries/bucket.pyRis   (RR t _MIN_RATERtpropertyRtsetterRR R$R#R"R%R(((sB/opt/awscli/lib/python2.7/site-packages/botocore/retries/bucket.pyR s   (t__doc__RRtbotocore.exceptionsRtobjectRR (((sB/opt/awscli/lib/python2.7/site-packages/botocore/retries/bucket.pyts