Code Duplication    Length = 198-198 lines in 2 locations

vtapi3/vtapi3domains.py 1 location

@@ 15-212 (lines=198) @@
12
from .vtapi3base import VirusTotalAPI
13
from .vtapi3error import VirusTotalAPIError
14
15
class VirusTotalAPIDomains(VirusTotalAPI):
16
    """The retrieving information about any domain from the VirusTotal database methods are defined
17
       in the class.
18
19
       Methods:
20
          get_report(): Retrieve information about an Internet domain.
21
          get_comments(): Retrieve comments for an Internet domain.
22
          put_comments(): Add a comment to an Internet domain.
23
          get_relationship(): Retrieve objects related to an Internet domain.
24
          get_votes(): Retrieve votes for a hostname or domain.
25
          put_votes(): Add a vote for a hostname or domain.
26
    """
27
28
    def get_report(self, domain):
29
        """Retrieve information about an Internet domain.
30
31
        Args:
32
           domain: Domain name (str).
33
34
        Return:
35
           The response from the server as a byte sequence.
36
37
        Exception
38
           VirusTotalAPIError(Connection error): In case of server connection errors.
39
           VirusTotalAPIError(Timeout error): If the response timeout from the server is exceeded.
40
        """
41
        self._last_http_error = None
42
        self._last_result = None
43
        api_url = self.base_url + '/domains/' + domain
44
        try:
45
            response = requests.get(api_url, headers=self.headers,
46
                                    timeout=self.timeout, proxies=self.proxies)
47
        except requests.exceptions.Timeout:
48
            raise VirusTotalAPIError('Timeout error', errno.ETIMEDOUT)
49
        except requests.exceptions.ConnectionError:
50
            raise VirusTotalAPIError('Connection error', errno.ECONNABORTED)
51
        else:
52
            self._last_http_error = response.status_code
53
            self._last_result = response.content
54
            return response.content
55
56
    def get_comments(self, domain, limit=10, cursor='""'):
57
        """Retrieve comments for an Internet domain.
58
59
        Args:
60
           domain: Domain name (str).
61
           limit: Maximum number of comments to retrieve (int). The default value is 10.
62
           cursor: Continuation cursor (str). The default value is ''.
63
64
        Return:
65
           The response from the server as a byte sequence.
66
67
        Exception
68
           VirusTotalAPIError(Connection error): In case of server connection errors.
69
           VirusTotalAPIError(Timeout error): If the response timeout from the server is exceeded.
70
        """
71
        self._last_http_error = None
72
        self._last_result = None
73
        query_string = {'limit': str(limit), 'cursor': cursor}
74
        api_url = self.base_url + '/domains/' + domain + '/comments'
75
        try:
76
            response = requests.get(api_url, headers=self.headers, params=query_string,
77
                                    timeout=self.timeout, proxies=self.proxies)
78
        except requests.exceptions.Timeout:
79
            raise VirusTotalAPIError('Timeout error', errno.ETIMEDOUT)
80
        except requests.exceptions.ConnectionError:
81
            raise VirusTotalAPIError('Connection error', errno.ECONNABORTED)
82
        else:
83
            self._last_http_error = response.status_code
84
            self._last_result = response.content
85
            return response.content
86
87
    def put_comments(self, domain, text):
88
        """Add a comment to an Internet domain.
89
90
        Args:
91
           domain: Domain name (str).
92
           text: Text of the comment (str).
93
94
        Return:
95
           The response from the server as a byte sequence.
96
97
        Exception
98
           VirusTotalAPIError(Connection error): In case of server connection errors.
99
           VirusTotalAPIError(Timeout error): If the response timeout from the server is exceeded.
100
        """
101
        self._last_http_error = None
102
        self._last_result = None
103
        comments = {"data": {'type': 'comment', 'attributes': {'text': text}}}
104
        api_url = self.base_url + '/domains/' + domain + '/comments'
105
        try:
106
            response = requests.post(api_url, headers=self.headers, json=comments,
107
                                     timeout=self.timeout, proxies=self.proxies)
108
        except requests.exceptions.Timeout:
109
            raise VirusTotalAPIError('Timeout error', errno.ETIMEDOUT)
110
        except requests.exceptions.ConnectionError:
111
            raise VirusTotalAPIError('Connection error', errno.ECONNABORTED)
112
        else:
113
            self._last_http_error = response.status_code
114
            self._last_result = response.content
115
            return response.content
116
117
    def get_relationship(self, domain, relationship='/resolutions', limit=10, cursor='""'):
118
        """Retrieve objects related to an Internet domain.
119
120
        Args:
121
           domain: Domain name (str).
122
           relationship: Relationship name (str). The default value is '/resolutions'.
123
           limit: Maximum number of comments to retrieve (int). The default value is 10.
124
           cursor: Continuation cursor (str). The default value is ''.
125
126
        Return:
127
           The response from the server as a byte sequence.
128
129
        Exception
130
           VirusTotalAPIError(Connection error): In case of server connection errors.
131
           VirusTotalAPIError(Timeout error): If the response timeout from the server is exceeded.
132
        """
133
        self._last_http_error = None
134
        self._last_result = None
135
        query_string = {'limit': str(limit), 'cursor': cursor}
136
        api_url = self.base_url + '/domains/' + domain + relationship
137
        try:
138
            response = requests.get(api_url, headers=self.headers, params=query_string,
139
                                    timeout=self.timeout, proxies=self.proxies)
140
        except requests.exceptions.Timeout:
141
            raise VirusTotalAPIError('Timeout error', errno.ETIMEDOUT)
142
        except requests.exceptions.ConnectionError:
143
            raise VirusTotalAPIError('Connection error', errno.ECONNABORTED)
144
        else:
145
            self._last_http_error = response.status_code
146
            self._last_result = response.content
147
            return response.content
148
149
    def get_votes(self, domain, limit=10, cursor='""'):
150
        """Retrieve votes for a hostname or domain.
151
152
        Args:
153
           domain: Domain name (str).
154
           limit: Maximum number of comments to retrieve (int). The default value is 10.
155
           cursor: Continuation cursor (str). The default value is ''.
156
157
        Return:
158
           The response from the server as a byte sequence.
159
160
        Exception
161
           VirusTotalAPIError(Connection error): In case of server connection errors.
162
           VirusTotalAPIError(Timeout error): If the response timeout from the server is exceeded.
163
        """
164
        self._last_http_error = None
165
        self._last_result = None
166
        query_string = {'limit': str(limit), 'cursor': cursor}
167
        api_url = self.base_url + '/domains/' + domain + '/votes'
168
        try:
169
            response = requests.get(api_url, headers=self.headers, params=query_string,
170
                                    timeout=self.timeout, proxies=self.proxies)
171
        except requests.exceptions.Timeout:
172
            raise VirusTotalAPIError('Timeout error', errno.ETIMEDOUT)
173
        except requests.exceptions.ConnectionError:
174
            raise VirusTotalAPIError('Connection error', errno.ECONNABORTED)
175
        else:
176
            self._last_http_error = response.status_code
177
            self._last_result = response.content
178
            return response.content
179
180
    def put_votes(self, domain, malicious=False):
181
        """Add a vote for a hostname or domain.
182
183
        Args:
184
           domain: Domain name (str).
185
           malicious: Determines a malicious (True) or harmless (False) domain (bool).
186
187
        Return:
188
           The response from the server as a byte sequence.
189
190
        Exception
191
           VirusTotalAPIError(Connection error): In case of server connection errors.
192
           VirusTotalAPIError(Timeout error): If the response timeout from the server is exceeded.
193
        """
194
        self._last_http_error = None
195
        self._last_result = None
196
        if malicious:
197
            verdict = 'malicious'
198
        else:
199
            verdict = 'harmless'
200
        votes = {'data': {'type': 'vote', 'attributes': {'verdict': verdict}}}
201
        api_url = self.base_url + '/domains/' + domain + '/votes'
202
        try:
203
            response = requests.post(api_url, headers=self.headers, json=votes,
204
                                     timeout=self.timeout, proxies=self.proxies)
205
        except requests.exceptions.Timeout:
206
            raise VirusTotalAPIError('Timeout error', errno.ETIMEDOUT)
207
        except requests.exceptions.ConnectionError:
208
            raise VirusTotalAPIError('Connection error', errno.ECONNABORTED)
209
        else:
210
            self._last_http_error = response.status_code
211
            self._last_result = response.content
212
            return response.content
213

vtapi3/vtapi3ipaddresses.py 1 location

@@ 15-212 (lines=198) @@
12
from .vtapi3base import VirusTotalAPI
13
from .vtapi3error import VirusTotalAPIError
14
15
class VirusTotalAPIIPAddresses(VirusTotalAPI):
16
    """The retrieving information about any IP addresses from the VirusTotal database methods are
17
       defined in the class.
18
19
       Methods:
20
          get_report(): Retrieve information about an IP address.
21
          get_comments(): Retrieve comments for an IP address.
22
          put_comments(): Add a comment to an IP address.
23
          get_relationship(): Retrieve objects related to an IP address.
24
          get_votes(): Retrieve votes for an IP address.
25
          put_votes(): Add a vote for an IP address.
26
    """
27
28
    def get_report(self, ip_address):
29
        """Retrieve information about an IP address.
30
31
        Args:
32
           ip_address: IP address (str).
33
34
        Return:
35
           The response from the server as a byte sequence.
36
37
        Exception
38
           VirusTotalAPIError(Connection error): In case of server connection errors.
39
           VirusTotalAPIError(Timeout error): If the response timeout from the server is exceeded.
40
        """
41
        self._last_http_error = None
42
        self._last_result = None
43
        api_url = self.base_url + '/ip_addresses/' + ip_address
44
        try:
45
            response = requests.get(api_url, headers=self.headers,
46
                                    timeout=self.timeout, proxies=self.proxies)
47
        except requests.exceptions.Timeout:
48
            raise VirusTotalAPIError('Timeout error', errno.ETIMEDOUT)
49
        except requests.exceptions.ConnectionError:
50
            raise VirusTotalAPIError('Connection error', errno.ECONNABORTED)
51
        else:
52
            self._last_http_error = response.status_code
53
            self._last_result = response.content
54
            return response.content
55
56
    def get_comments(self, ip_address, limit=10, cursor='""'):
57
        """Retrieve comments for an IP address.
58
59
        Args:
60
           ip_address: IP address (str).
61
           limit: Maximum number of comments to retrieve (int). The default value is 10.
62
           cursor: Continuation cursor (str). The default value is ''.
63
64
        Return:
65
           The response from the server as a byte sequence.
66
67
        Exception
68
           VirusTotalAPIError(Connection error): In case of server connection errors.
69
           VirusTotalAPIError(Timeout error): If the response timeout from the server is exceeded.
70
        """
71
        self._last_http_error = None
72
        self._last_result = None
73
        query_string = {'limit': str(limit), 'cursor': cursor}
74
        api_url = self.base_url + '/ip_addresses/' + ip_address + '/comments'
75
        try:
76
            response = requests.get(api_url, headers=self.headers, params=query_string,
77
                                    timeout=self.timeout, proxies=self.proxies)
78
        except requests.exceptions.Timeout:
79
            raise VirusTotalAPIError('Timeout error', errno.ETIMEDOUT)
80
        except requests.exceptions.ConnectionError:
81
            raise VirusTotalAPIError('Connection error', errno.ECONNABORTED)
82
        else:
83
            self._last_http_error = response.status_code
84
            self._last_result = response.content
85
            return response.content
86
87
    def put_comments(self, ip_address, text):
88
        """Add a comment to an IP address.
89
90
        Args:
91
           ip_address: IP address (str).
92
           text: Text of the comment (str).
93
94
        Return:
95
           The response from the server as a byte sequence.
96
97
        Exception
98
           VirusTotalAPIError(Connection error): In case of server connection errors.
99
           VirusTotalAPIError(Timeout error): If the response timeout from the server is exceeded.
100
        """
101
        self._last_http_error = None
102
        self._last_result = None
103
        comments = {"data": {'type': 'comment', 'attributes': {'text': text}}}
104
        api_url = self.base_url + '/ip_addresses/' + ip_address + '/comments'
105
        try:
106
            response = requests.post(api_url, headers=self.headers, json=comments,
107
                                     timeout=self.timeout, proxies=self.proxies)
108
        except requests.exceptions.Timeout:
109
            raise VirusTotalAPIError('Timeout error', errno.ETIMEDOUT)
110
        except requests.exceptions.ConnectionError:
111
            raise VirusTotalAPIError('Connection error', errno.ECONNABORTED)
112
        else:
113
            self._last_http_error = response.status_code
114
            self._last_result = response.content
115
            return response.content
116
117
    def get_relationship(self, ip_address, relationship='/resolutions', limit=10, cursor='""'):
118
        """Retrieve objects related to an IP address.
119
120
        Args:
121
           ip_address: IP address (str).
122
           relationship: Relationship name (str). The default value is '/resolutions'.
123
           limit: Maximum number of comments to retrieve (int). The default value is 10.
124
           cursor: Continuation cursor (str). The default value is ''.
125
126
        Return:
127
           The response from the server as a byte sequence.
128
129
        Exception
130
           VirusTotalAPIError(Connection error): In case of server connection errors.
131
           VirusTotalAPIError(Timeout error): If the response timeout from the server is exceeded.
132
        """
133
        self._last_http_error = None
134
        self._last_result = None
135
        query_string = {'limit': str(limit), 'cursor': cursor}
136
        api_url = self.base_url + '/ip_addresses/' + ip_address + relationship
137
        try:
138
            response = requests.get(api_url, headers=self.headers, params=query_string,
139
                                    timeout=self.timeout, proxies=self.proxies)
140
        except requests.exceptions.Timeout:
141
            raise VirusTotalAPIError('Timeout error', errno.ETIMEDOUT)
142
        except requests.exceptions.ConnectionError:
143
            raise VirusTotalAPIError('Connection error', errno.ECONNABORTED)
144
        else:
145
            self._last_http_error = response.status_code
146
            self._last_result = response.content
147
            return response.content
148
149
    def get_votes(self, ip_address, limit=10, cursor='""'):
150
        """Retrieve votes for an IP address.
151
152
        Args:
153
           domain: Domain name (str).
154
           limit: Maximum number of comments to retrieve (int). The default value is 10.
155
           cursor: Continuation cursor (str). The default value is ''.
156
157
        Return:
158
           The response from the server as a byte sequence.
159
160
        Exception
161
           VirusTotalAPIError(Connection error): In case of server connection errors.
162
           VirusTotalAPIError(Timeout error): If the response timeout from the server is exceeded.
163
        """
164
        self._last_http_error = None
165
        self._last_result = None
166
        query_string = {'limit': str(limit), 'cursor': cursor}
167
        api_url = self.base_url + '/ip_addresses/' + ip_address + '/votes'
168
        try:
169
            response = requests.get(api_url, headers=self.headers, params=query_string,
170
                                    timeout=self.timeout, proxies=self.proxies)
171
        except requests.exceptions.Timeout:
172
            raise VirusTotalAPIError('Timeout error', errno.ETIMEDOUT)
173
        except requests.exceptions.ConnectionError:
174
            raise VirusTotalAPIError('Connection error', errno.ECONNABORTED)
175
        else:
176
            self._last_http_error = response.status_code
177
            self._last_result = response.content
178
            return response.content
179
180
    def put_votes(self, ip_address, malicious=False):
181
        """Add a vote for an IP address.
182
183
        Args:
184
           domain: IP address (str).
185
           malicious: Determines a malicious (True) or harmless (False) domain (bool).
186
187
        Return:
188
           The response from the server as a byte sequence.
189
190
        Exception
191
           VirusTotalAPIError(Connection error): In case of server connection errors.
192
           VirusTotalAPIError(Timeout error): If the response timeout from the server is exceeded.
193
        """
194
        self._last_http_error = None
195
        self._last_result = None
196
        if malicious:
197
            verdict = 'malicious'
198
        else:
199
            verdict = 'harmless'
200
        votes = {'data': {'type': 'vote', 'attributes': {'verdict': verdict}}}
201
        api_url = self.base_url + '/ip_addresses/' + ip_address + '/votes'
202
        try:
203
            response = requests.post(api_url, headers=self.headers, json=votes,
204
                                     timeout=self.timeout, proxies=self.proxies)
205
        except requests.exceptions.Timeout:
206
            raise VirusTotalAPIError('Timeout error', errno.ETIMEDOUT)
207
        except requests.exceptions.ConnectionError:
208
            raise VirusTotalAPIError('Connection error', errno.ECONNABORTED)
209
        else:
210
            self._last_http_error = response.status_code
211
            self._last_result = response.content
212
            return response.content
213