"""
deepdataspace.utils.network
Convenient functions about network.
"""
import os
import shutil
import socket
import requests
from deepdataspace.utils.string import gen_random_str
[docs]def get_output_ip_address() -> str:
"""
Acquire the default output ip address of this machine.
"""
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.settimeout(5)
s.connect(("114.114.114.114", 80))
ip = s.getsockname()[0]
s.close()
return ip
[docs]def download_by_requests(url: str, path: str, timeout: int = 5):
"""
Download the specified url to the local path.
:param url: the remote url to be downloaded
:param path: the local path of download destination
:param timeout: the timeout for download, in case of endless blocking
This function downloads the url to a temporary path during the download procedure and
move the temporary file to the destination path.
This guarantees the integrity of the downloaded file.
"""
rsp = requests.get(url, timeout=timeout)
tmp_file = f"{path}.{gen_random_str(6)}"
os.makedirs(os.path.dirname(tmp_file), exist_ok=True)
with open(tmp_file, "wb") as fp:
fp.write(rsp.content)
shutil.move(tmp_file, path)