Source code for hal.internet.utils
# -*- coding: utf-8 -*-
"""Internet tools """
import socket
import time
import urllib.parse as urlparse
from urllib.parse import urlencode
import requests
from hal.wrappers.errors import true_false_returns, none_returns
[docs]def add_params_to_url(url, params):
"""Adds params to url
:param url: Url
:param params: Params to add
:return: original url with new params
"""
url_parts = list(urlparse.urlparse(url)) # get url parts
query = dict(urlparse.parse_qsl(url_parts[4])) # get url query
query.update(params) # add new params
url_parts[4] = urlencode(query)
return urlparse.urlunparse(url_parts)
[docs]@true_false_returns
def is_internet_on(host="8.8.8.8", port=53, timeout=3):
"""Checks if machine has internet connection
:param host: hostname to test
:param port: port of hostname
:param timeout: seconds before discarding connection
:return: True iff machine has internet connection
"""
socket.setdefaulttimeout(timeout)
socket.socket(socket.AF_INET, socket.SOCK_STREAM).connect((host, port))
[docs]def wait_until_internet(time_between_attempts=3, max_attempts=10):
"""Waits until machine has internet
:param time_between_attempts: seconds between 2 consecutive attempts
:param max_attempts: max number of attempts to try
:return: True iff there is internet connection
"""
counter = 0
while not is_internet_on():
time.sleep(time_between_attempts) # wait until internet is on
counter += 1
if counter > max_attempts:
return False
return True
[docs]@none_returns
def get_my_external_ip():
"""Gets external IP
:return: external IP
"""
resp = requests.get(url="https://jsonip.com/")
data = resp.json()
return data["ip"]