Coverage for tld/tests/base.py: 91%
47 statements
« prev ^ index » next coverage.py v7.2.7, created at 2024-05-26 22:29 +0000
« prev ^ index » next coverage.py v7.2.7, created at 2024-05-26 22:29 +0000
1# -*- coding: utf-8 -*-
3import logging
4import socket
5from functools import lru_cache
7__author__ = "Artur Barseghyan"
8__copyright__ = "2013-2023 Artur Barseghyan"
9__license__ = "MPL-1.1 OR GPL-2.0-only OR LGPL-2.1-or-later"
10__all__ = (
11 "internet_available_only",
12 "log_info",
13)
15LOG_INFO = True
16LOGGER = logging.getLogger(__name__)
19def log_info(func):
20 """Log some useful info."""
21 if not LOG_INFO:
22 return func
24 def inner(self, *args, **kwargs):
25 """Inner."""
26 result = func(self, *args, **kwargs)
28 LOGGER.debug("\n\n%s", func.__name__)
29 LOGGER.debug("============================")
30 if func.__doc__:
31 LOGGER.debug('""" %s """', func.__doc__.strip())
32 LOGGER.debug("----------------------------")
33 if result is not None:
34 LOGGER.debug(result)
35 LOGGER.debug("\n++++++++++++++++++++++++++++")
37 return result
39 return inner
42@lru_cache(maxsize=32)
43def is_internet_available(host="8.8.8.8", port=53, timeout=3):
44 """Check if internet is available.
46 Host: 8.8.8.8 (google-public-dns-a.google.com)
47 OpenPort: 53/tcp
48 Service: domain (DNS/TCP)
49 """
50 try:
51 socket.setdefaulttimeout(timeout)
52 socket.socket(socket.AF_INET, socket.SOCK_STREAM).connect((host, port))
53 return True
54 except socket.error as ex:
55 print(ex)
56 return False
59def internet_available_only(func):
60 def inner(self, *args, **kwargs):
61 """Inner."""
62 if not is_internet_available():
63 LOGGER.debug("\n\n%s", func.__name__)
64 LOGGER.debug("============================")
65 if func.__doc__:
66 LOGGER.debug('""" %s """', func.__doc__.strip())
67 LOGGER.debug("----------------------------")
68 LOGGER.debug("Skipping because no Internet connection available.")
69 LOGGER.debug("\n++++++++++++++++++++++++++++")
70 return None
72 result = func(self, *args, **kwargs)
73 return result
75 return inner