3 M(Y@s\ddlmZddlZddlZddlmZGdddeZGdddeZGd d d eZ dS) )absolute_importN)Cachec@s*eZdZd Zd ddZdd Zd d ZdS)_LinkkeyexpirenextprevNcCs||_||_dS)N)rr)selfrrr sz'TTLCache.__setstate__..)r) __dict__updater"r rsortedr%valuesrr&)r stater,r.r r r r __setstate__s   zTTLCache.__setstate__c Cs$|j}|j|||SQRXdS)N)r&r)r Z cache_reprrr r r __repr__s zTTLCache.__repr__c s(|j}|j|tt|jSQRXdS)N)r&rsuperr!currsize)r r) __class__r r rGs zTTLCache.currsizecCs|jS)z%The timer function used by the cache.)r&)r r r r rszTTLCache.timercCs|jS)z,The time-to-live value of the cache's items.)r')r r r r r)sz TTLCache.ttlcCsj|dkr|j}|j}|j}|j}tj}x<||k rd|j|krd|||j||j=|j}|j|}q*WdS)z$Remove expired items from the cache.N) r&r"rr%rr7rrr)r rr,r8linksr6rr r r rs zTTLCache.expirec Cs*|j}|j|tj|WdQRXdS)N)r&rrclear)r rr r r rJs zTTLCache.clearc Os$|jtj|f||SQRXdS)N)r&rget)r argskwargsr r r rKsz TTLCache.getc Os$|jtj|f||SQRXdS)N)r&rr5)r rLrMr r r r5sz TTLCache.popc Os$|jtj|f||SQRXdS)N)r&r setdefault)r rLrMr r r rNszTTLCache.setdefaultcCsf|jV}|j|ytt|j}Wn$tk rHtd|jjYnX||j |fSWdQRXdS)zmRemove and return the `(key, value)` pair least recently used that has not already expired. z %s is emptyN) r&rriterr% StopIterationr-rHrr5)r rrr r r popitems zTTLCache.popitem move_to_endcCs|j|}|jj||S)N)r%rR)r rr3r r r __getlinks  zTTLCache.__getlinkcCs|jj|}||j|<|S)N)r%r5)r rr3r r r rSs  )N)rrr__doc__rr r/rr2r4r7r9r<rDrEpropertyrGrr)rrJrKr5rNrQhasattrr#r$r0 __classcell__r r )rHr r!9s.          r!) __future__rr#rcacherobjectrrr!r r r r s