X7ROOT File Manager
Current Path:
/lib/python2.7/site-packages/pip/_vendor/cachecontrol
lib
/
python2.7
/
site-packages
/
pip
/
_vendor
/
cachecontrol
/
??
..
??
__init__.py
(302 B)
??
__init__.pyc
(583 B)
??
__init__.pyo
(583 B)
??
_cmd.py
(1.29 KB)
??
_cmd.pyc
(2.01 KB)
??
_cmd.pyo
(2.01 KB)
??
adapter.py
(4.5 KB)
??
adapter.pyc
(3.44 KB)
??
adapter.pyo
(3.44 KB)
??
cache.py
(790 B)
??
cache.pyc
(2.34 KB)
??
cache.pyo
(2.34 KB)
??
caches
??
compat.py
(380 B)
??
compat.pyc
(618 B)
??
compat.pyo
(618 B)
??
controller.py
(12.72 KB)
??
controller.pyc
(8.87 KB)
??
controller.pyo
(8.87 KB)
??
filewrapper.py
(2.47 KB)
??
filewrapper.pyc
(2.6 KB)
??
filewrapper.pyo
(2.6 KB)
??
heuristics.py
(4.04 KB)
??
heuristics.pyc
(5.8 KB)
??
heuristics.pyo
(5.8 KB)
??
serialize.py
(6.38 KB)
??
serialize.pyc
(5.95 KB)
??
serialize.pyo
(5.95 KB)
??
wrapper.py
(498 B)
??
wrapper.pyc
(696 B)
??
wrapper.pyo
(696 B)
Editing: filewrapper.py
from io import BytesIO class CallbackFileWrapper(object): """ Small wrapper around a fp object which will tee everything read into a buffer, and when that file is closed it will execute a callback with the contents of that buffer. All attributes are proxied to the underlying file object. This class uses members with a double underscore (__) leading prefix so as not to accidentally shadow an attribute. """ def __init__(self, fp, callback): self.__buf = BytesIO() self.__fp = fp self.__callback = callback def __getattr__(self, name): # The vaguaries of garbage collection means that self.__fp is # not always set. By using __getattribute__ and the private # name[0] allows looking up the attribute value and raising an # AttributeError when it doesn't exist. This stop thigns from # infinitely recursing calls to getattr in the case where # self.__fp hasn't been set. # # [0] https://docs.python.org/2/reference/expressions.html#atom-identifiers fp = self.__getattribute__('_CallbackFileWrapper__fp') return getattr(fp, name) def __is_fp_closed(self): try: return self.__fp.fp is None except AttributeError: pass try: return self.__fp.closed except AttributeError: pass # We just don't cache it then. # TODO: Add some logging here... return False def _close(self): if self.__callback: self.__callback(self.__buf.getvalue()) # We assign this to None here, because otherwise we can get into # really tricky problems where the CPython interpreter dead locks # because the callback is holding a reference to something which # has a __del__ method. Setting this to None breaks the cycle # and allows the garbage collector to do it's thing normally. self.__callback = None def read(self, amt=None): data = self.__fp.read(amt) self.__buf.write(data) if self.__is_fp_closed(): self._close() return data def _safe_read(self, amt): data = self.__fp._safe_read(amt) if amt == 2 and data == b'\r\n': # urllib executes this read to toss the CRLF at the end # of the chunk. return data self.__buf.write(data) if self.__is_fp_closed(): self._close() return data
Upload File
Create Folder