Hide keyboard shortcuts

Hot-keys on this page

r m x p   toggle line displays

j k   next/prev highlighted chunk

0   (zero) top of page

1   (one) first highlighted chunk

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

import os 

import logging 

import socket 

 

__author__ = 'Artur Barseghyan' 

__copyright__ = '2019 Artur Barseghyan' 

__license__ = 'GPL-2.0-only OR LGPL-2.0-or-later' 

__all__ = ( 

'internet_available_only', 

'internet_available_or_is_travis_only', 

'is_internet_available', 

'is_travis', 

'log_info', 

'travis_only', 

) 

 

LOG_INFO = True 

TRACK_TIME = False 

 

LOGGER = logging.getLogger(__name__) 

 

 

def log_info(func): 

"""Log some useful info.""" 

if not LOG_INFO: 

return func 

 

def inner(self, *args, **kwargs): 

"""Inner.""" 

if TRACK_TIME: 

import simple_timer 

timer = simple_timer.Timer() # Start timer 

 

result = func(self, *args, **kwargs) 

 

if TRACK_TIME: 

timer.stop() # Stop timer 

 

LOGGER.debug('\n\n%s', func.__name__) 

LOGGER.debug('============================') 

if func.__doc__: 

LOGGER.debug('""" %s """', func.__doc__.strip()) 

LOGGER.debug('----------------------------') 

if result is not None: 

LOGGER.debug(result) 

if TRACK_TIME: 

LOGGER.debug('done in %s seconds', timer.duration) 

LOGGER.debug('\n++++++++++++++++++++++++++++') 

 

return result 

return inner 

 

 

def is_internet_available(host: str = "8.8.8.8", 

port: int = 53, 

timeout: int = 3) -> bool: 

"""Check if internet is available. 

 

Host: 8.8.8.8 (google-public-dns-a.google.com) 

OpenPort: 53/tcp 

Service: domain (DNS/TCP) 

""" 

try: 

socket.setdefaulttimeout(timeout) 

socket.socket(socket.AF_INET, socket.SOCK_STREAM).connect((host, port)) 

return True 

except socket.error as ex: 

print(ex) 

return False 

 

 

def internet_available_only(func): 

"""Is internet available decorator. 

 

:param func: 

:return: 

""" 

def inner(self, *args, **kwargs): 

"""Inner.""" 

if not is_internet_available(): 

LOGGER.debug('\n\n%s', func.__name__) 

LOGGER.debug('============================') 

if func.__doc__: 

LOGGER.debug('""" %s """', func.__doc__.strip()) 

LOGGER.debug('----------------------------') 

LOGGER.debug("Skipping because no Internet connection available.") 

LOGGER.debug('\n++++++++++++++++++++++++++++') 

return None 

 

result = func(self, *args, **kwargs) 

return result 

 

return inner 

 

 

def is_travis() -> bool: 

"""Is travis. 

 

:return: 

""" 

return os.environ.get('TRAVIS') == 'true' 

 

 

def travis_only(func): 

"""Is on Travis CI decorator. 

 

:param func: 

:return: 

""" 

def inner(self, *args, **kwargs): 

"""Inner.""" 

if not is_travis(): 

LOGGER.debug('\n\n%s', func.__name__) 

LOGGER.debug('============================') 

if func.__doc__: 

LOGGER.debug('""" %s """', func.__doc__.strip()) 

LOGGER.debug('----------------------------') 

LOGGER.debug("Skipping because this test is Travis CI only.") 

LOGGER.debug('\n++++++++++++++++++++++++++++') 

return None 

 

result = func(self, *args, **kwargs) 

return result 

 

return inner 

 

 

def internet_available_or_is_travis_only(func): 

"""Is internet available or is Travis only decorator. 

 

:param func: 

:return: 

""" 

def inner(self, *args, **kwargs): 

"""Inner.""" 

if not is_internet_available() and not is_travis(): 

LOGGER.debug('\n\n%s', func.__name__) 

LOGGER.debug('============================') 

if func.__doc__: 

LOGGER.debug('""" %s """', func.__doc__.strip()) 

LOGGER.debug('----------------------------') 

LOGGER.debug( 

"Skipping because nor Internet connection available, " 

"neither the test is being executed on Travis CI." 

) 

LOGGER.debug('\n++++++++++++++++++++++++++++') 

return None 

 

result = func(self, *args, **kwargs) 

return result 

 

return inner