def _upload(self, package): data = package.metadata_dictionary() data.update({ # action ":action": "file_upload", "protocol_version": "1", }) data_to_send = self._convert_data_to_list_of_tuples(data) print("Uploading {0}".format(package.basefilename)) with open(package.filename, "rb") as fp: data_to_send.append(( "content", (package.basefilename, fp, "application/octet-stream"), )) encoder = MultipartEncoder(data_to_send) with ProgressBar(total=encoder.len, unit='B', unit_scale=True, unit_divisor=1024, miniters=1, file=sys.stdout) as bar: monitor = MultipartEncoderMonitor( encoder, lambda monitor: bar.update_to(monitor.bytes_read)) resp = self.session.post( self.url, data=monitor, allow_redirects=False, headers={'Content-Type': monitor.content_type}, ) return resp
def _upload(self, package): data = package.metadata_dictionary() data.update({ # action ":action": "file_upload", "protcol_version": "1", }) data_to_send = self._convert_data_to_list_of_tuples(data) print("Uploading {0}".format(package.basefilename)) with open(package.filename, "rb") as fp: data_to_send.append(( "content", (package.basefilename, fp, "application/octet-stream"), )) encoder = MultipartEncoder(data_to_send) bar = ProgressBar(expected_size=encoder.len, filled_char='=') monitor = MultipartEncoderMonitor( encoder, lambda monitor: bar.show(monitor.bytes_read)) resp = self.session.post( self.url, data=monitor, allow_redirects=False, headers={'Content-Type': monitor.content_type}, ) bar.done() return resp
def _upload_file( self, session, url, file, dry_run=False ): # type: (requests.Session, str, Path, Optional[bool]) -> requests.Response data = self.post_data(file) data.update({ # action ":action": "file_upload", "protocol_version": "1", }) data_to_send = self._prepare_data(data) with file.open("rb") as fp: data_to_send.append( ("content", (file.name, fp, "application/octet-stream"))) encoder = MultipartEncoder(data_to_send) bar = self._io.progress_bar(encoder.len) bar.set_format( " - Uploading <c1>{0}</c1> <b>%percent%%</b>".format( file.name)) monitor = MultipartEncoderMonitor( encoder, lambda monitor: bar.set_progress(monitor.bytes_read)) bar.start() resp = None try: if not dry_run: resp = session.post( url, data=monitor, allow_redirects=False, headers={"Content-Type": monitor.content_type}, ) if dry_run or resp.ok: bar.set_format( " - Uploading <c1>{0}</c1> <fg=green>%percent%%</>". format(file.name)) bar.finish() except (requests.ConnectionError, requests.HTTPError) as e: if self._io.output.supports_ansi(): self._io.overwrite( " - Uploading <c1>{0}</c1> <error>{1}</>".format( file.name, "FAILED")) raise UploadError(e) finally: self._io.write_line("") return resp
def _upload_file(self, session, url, file): data = self.post_data(file) data.update( { # action ":action": "file_upload", "protocol_version": "1", } ) data_to_send = self._prepare_data(data) with file.open("rb") as fp: data_to_send.append( ("content", (file.name, fp, "application/octet-stream")) ) encoder = MultipartEncoder(data_to_send) bar = self._io.progress_bar(encoder.len) bar.set_format( " - Uploading <info>{0}</> <comment>%percent%%</>".format(file.name) ) monitor = MultipartEncoderMonitor( encoder, lambda monitor: bar.set_progress(monitor.bytes_read) ) bar.start() resp = session.post( url, data=monitor, allow_redirects=False, headers={"Content-Type": monitor.content_type}, ) if resp.ok: bar.finish() self._io.write_line("") else: if self._io.output.supports_ansi(): self._io.overwrite( " - Uploading <info>{0}</> <error>{1}%</>".format( file.name, int(math.floor(bar._percent * 100)) ) ) self._io.write_line("") return resp
def _upload_file(self, session, url, file): data = self.post_data(file) data.update({ # action ":action": "file_upload", "protocol_version": "1", }) data_to_send = self._convert_data_to_list_of_tuples(data) with file.open('rb') as fp: data_to_send.append(( "content", (file.name, fp, "application/octet-stream"), )) encoder = MultipartEncoder(data_to_send) bar = self._io.create_progress_bar(encoder.len) bar.set_format( " - Uploading <info>{0}</> <comment>%percent%%</>".format( file.name ) ) monitor = MultipartEncoderMonitor( encoder, lambda monitor: bar.set_progress(monitor.bytes_read) ) bar.start() resp = session.post( url, data=monitor, allow_redirects=False, headers={'Content-Type': monitor.content_type} ) if resp.ok: bar.finish() self._io.writeln('') else: self._io.overwrite('') return resp
def _upload(self, package): data = package.metadata_dictionary() data.update({ # action ":action": "file_upload", "protocol_version": "1", }) data_to_send = self._convert_data_to_list_of_tuples(data) with open(package.filename, "rb") as fp: data_to_send.append(( "content", (package.basefilename, fp, "application/octet-stream"), )) encoder = MultipartEncoder(data_to_send) bar = self._output.create_progress_bar(encoder.len) bar.set_format( " - Uploading <info>{0}</> <comment>%percent%%</>".format( package.basefilename)) monitor = MultipartEncoderMonitor( encoder, lambda monitor: bar.set_progress(monitor.bytes_read / encoder.len)) resp = self.session.post( self.url, data=monitor, allow_redirects=False, headers={'Content-Type': monitor.content_type}, ) if resp.ok: bar.finish() self._output.writeln('') else: self._output.overwrite('') return resp
def _upload_file( self, session: requests.Session, url: str, file: Path, dry_run: Optional[bool] = False, ) -> requests.Response: from cleo.ui.progress_bar import ProgressBar data = self.post_data(file) data.update({ # action ":action": "file_upload", "protocol_version": "1", }) data_to_send = self._prepare_data(data) with file.open("rb") as fp: data_to_send.append( ("content", (file.name, fp, "application/octet-stream"))) encoder = MultipartEncoder(data_to_send) bar = ProgressBar(self._io, max=encoder.len) bar.set_format( f" - Uploading <c1>{file.name}</c1> <b>%percent%%</b>") monitor = MultipartEncoderMonitor( encoder, lambda monitor: bar.set_progress(monitor.bytes_read)) bar.start() resp = None try: if not dry_run: resp = session.post( url, data=monitor, allow_redirects=False, headers={"Content-Type": monitor.content_type}, ) if dry_run or 200 <= resp.status_code < 300: bar.set_format( f" - Uploading <c1>{file.name}</c1> <fg=green>%percent%%</>" ) bar.finish() elif resp.status_code == 301: if self._io.output.is_decorated(): self._io.overwrite( f" - Uploading <c1>{file.name}</c1> <error>FAILED</>" ) raise UploadError("Redirects are not supported. " "Is the URL missing a trailing slash?") except (requests.ConnectionError, requests.HTTPError) as e: if self._io.output.is_decorated(): self._io.overwrite( f" - Uploading <c1>{file.name}</c1> <error>FAILED</>") raise UploadError(e) finally: self._io.write_line("") return resp
def _upload_file( self, session: requests.Session, url: str, file: Path, dry_run: bool = False, skip_existing: bool = False, ) -> None: from cleo.ui.progress_bar import ProgressBar data = self.post_data(file) data.update({ # action ":action": "file_upload", "protocol_version": "1", }) data_to_send: list[tuple[str, Any]] = self._prepare_data(data) with file.open("rb") as fp: data_to_send.append( ("content", (file.name, fp, "application/octet-stream"))) encoder = MultipartEncoder(data_to_send) bar = ProgressBar(self._io, max=encoder.len) bar.set_format( f" - Uploading <c1>{file.name}</c1> <b>%percent%%</b>") monitor = MultipartEncoderMonitor( encoder, lambda monitor: bar.set_progress(monitor.bytes_read)) bar.start() resp = None try: if not dry_run: resp = session.post( url, data=monitor, allow_redirects=False, headers={"Content-Type": monitor.content_type}, timeout=REQUESTS_TIMEOUT, ) if resp is None or 200 <= resp.status_code < 300: bar.set_format( f" - Uploading <c1>{file.name}</c1> <fg=green>%percent%%</>" ) bar.finish() elif resp.status_code == 301: if self._io.output.is_decorated(): self._io.overwrite( f" - Uploading <c1>{file.name}</c1> <error>FAILED</>" ) raise UploadError("Redirects are not supported. " "Is the URL missing a trailing slash?") elif resp.status_code == 400 and "was ever registered" in resp.text: self._register(session, url) resp.raise_for_status() elif skip_existing and self._is_file_exists_error(resp): bar.set_format( f" - Uploading <c1>{file.name}</c1> <warning>File exists." " Skipping</>") bar.display() else: resp.raise_for_status() except (requests.ConnectionError, requests.HTTPError) as e: if self._io.output.is_decorated(): self._io.overwrite( f" - Uploading <c1>{file.name}</c1> <error>FAILED</>") raise UploadError(e) finally: self._io.write_line("")