def file_stream( self, remotepath: str, max_chunk_size: int = DEFAULT_MAX_CHUNK_SIZE, callback: Callable[..., None] = None, encrypt_password: bytes = b"", pcs: bool = False, ) -> Optional[RangeRequestIO]: url = self.download_link(remotepath, pcs=pcs) if not url: return None headers = { "Cookie": "; ".join([ f"{k}={v if v is not None else ''}" for k, v in self._cookies.items() ]), "User-Agent": PCS_UA, "Connection": "Keep-Alive", } return RangeRequestIO( Method.Get.value, url, headers=headers, max_chunk_size=max_chunk_size, callback=callback, encrypt_password=encrypt_password, )
def file_stream( self, remotepath: str, max_chunk_size: int = DEFAULT_MAX_CHUNK_SIZE, callback: Callable[..., None] = None, encrypt_key=Optional[str], ) -> RangeRequestIO: info = self.download_link(remotepath) url = info["urls"][0]["url"] headers = { "Cookie": "; ".join([ f"{k}={v if v is not None else ''}" for k, v in self._cookies.items() ]), "User-Agent": PCS_UA, "Connection": "Keep-Alive", } return RangeRequestIO( Method.Get.value, url, headers=headers, max_chunk_size=max_chunk_size, callback=callback, encrypt_key=encrypt_key, )
def fake_io(io: RangeRequestIO, start: int = 0, end: int = -1): while True: length = len(io) io.seek(start, 0) size = length if end < 0 else end - start + 1 ranges = io._split_chunk(size) for _range in ranges: with io._request(_range) as resp: stream = resp.raw while True: b = stream.read(READ_SIZE) if not b: break yield b return
def test_rangerequestio(): url = "http://mirror.arizona.edu/ubuntu/dists/xenial/Release.gpg" io = RangeRequestIO("GET", url, max_chunk_size=300) b = b"" while True: cn = io.read(300) if not cn: break b += cn o = requests.get(url).content assert b == o