MCPcopy
hub / github.com/brightio/penelope / download

Method download

penelope.py:3356–3640  ·  view source on GitHub ↗
(self, remote_items)

Source from the content-addressed store, hash-verified

3354 return True
3355
3356 def download(self, remote_items):
3357 # Initialization
3358 try:
3359 shlex.split(remote_items) # Early check for shlex errors
3360 except ValueError as e:
3361 logger.error(e)
3362 return []
3363
3364 local_download_folder = self.directory / "downloads"
3365 try:
3366 local_download_folder.mkdir(parents=True, exist_ok=True)
3367 except Exception as e:
3368 logger.error(e)
3369 return []
3370
3371 if self.OS == 'Unix':
3372 # Check for local available space
3373 available_bytes = shutil.disk_usage(local_download_folder).free
3374 if self.agent:
3375 block_size = os.statvfs(local_download_folder).f_frsize
3376 response = self.exec(f"{GET_GLOB_SIZE}"
3377 f"stdout_stream << str(get_glob_size({repr(remote_items)}, {block_size}, {repr(options.link_dereference)})).encode()",
3378 python=True,
3379 value=True
3380 )
3381 try:
3382 remote_size = int(float(response))
3383 except Exception:
3384 logger.error(response)
3385 return []
3386 else:
3387 cmd = f"du -ck {remote_items}"
3388 response = self.exec(cmd, timeout=None, value=True)
3389 if not response:
3390 logger.error("Cannot determine remote size")
3391 return []
3392 #errors = [line[4:] for line in response.splitlines() if line.startswith('du: ')]
3393 #for error in errors:
3394 # logger.error(error)
3395 remote_size = int(response.splitlines()[-1].split()[0]) * 1024
3396
3397 need = remote_size - available_bytes
3398
3399 if need > 0:
3400 logger.error(
3401 f"--- Not enough space to download... {paint('We need ').blue}"
3402 f"{paint().yellow}{need:,}{paint().blue} more bytes..."
3403 )
3404 return []
3405
3406 # Packing and downloading
3407 if self.agent:
3408 stdin_stream = self.new_streamID
3409 stdout_stream = self.new_streamID
3410 stderr_stream = self.new_streamID
3411
3412 if not all([stdout_stream, stderr_stream]):
3413 return []

Callers 3

do_downloadMethod · 0.80
do_openMethod · 0.80
_handleFunction · 0.80

Calls 15

execMethod · 0.95
terminateMethod · 0.95
updateMethod · 0.95
addMethod · 0.95
startMethod · 0.95
stopMethod · 0.95
paintClass · 0.85
PBarClass · 0.85
safe_tar_extractallFunction · 0.85
FileServerClass · 0.85
traceMethod · 0.80
removeMethod · 0.80

Tested by

no test coverage detected