Skip to content

Commit 208a81b

Browse files
authored
Merge pull request #159 from Nexmo/cleanup-verify-class
client cleanup and adding verify class
2 parents e50fc5b + a40392d commit 208a81b

File tree

4 files changed

+76
-237
lines changed

4 files changed

+76
-237
lines changed

src/nexmo/__init__.py

Lines changed: 4 additions & 180 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
from .errors import *
33
from .voice import *
44
from .sms import *
5+
from .verify import *
56
from datetime import datetime
67
import logging
78
from platform import python_version
@@ -126,6 +127,9 @@ def __init__(
126127
self.application_v2 = ApplicationV2(api_server)
127128

128129
self.session = requests.Session()
130+
131+
# Internal Verify Object - a method that return a verify instance, just for cool definitions
132+
self.Verify = Verify(self)
129133

130134
# Get and Set __host attribute
131135
def host(self, value=None):
@@ -148,20 +152,6 @@ def api_host(self, value=None):
148152
def auth(self, params=None, **kwargs):
149153
self.auth_params = params or kwargs
150154

151-
def send_message(self, params):
152-
"""
153-
Send an SMS message.
154-
Requires a client initialized with `key` and either `secret` or `signature_secret`.
155-
::
156-
client.send_message({
157-
"to": MY_CELLPHONE,
158-
"from": MY_NEXMO_NUMBER,
159-
"text": "Hello From Nexmo!",
160-
})
161-
:param dict params: A dict of values described at `Send an SMS <https://developer.nexmo.com/api/sms#send-an-sms>`_
162-
"""
163-
return self.post(self.host(), "/sms/json", params, supports_signature_auth=True)
164-
165155
def get_balance(self):
166156
return self.get(self.host(), "/account/get-balance")
167157

@@ -226,24 +216,6 @@ def send_ussd_prompt_message(self, params=None, **kwargs):
226216
def send_2fa_message(self, params=None, **kwargs):
227217
return self.post(self.host(), "/sc/us/2fa/json", params or kwargs)
228218

229-
def submit_sms_conversion(self, message_id, delivered=True, timestamp=None):
230-
"""
231-
Notify Nexmo that an SMS was successfully received.
232-
233-
:param message_id: The `message-id` str returned by the send_message call.
234-
:param delivered: A `bool` indicating that the message was or was not successfully delivered.
235-
:param timestamp: A `datetime` object containing the time the SMS arrived.
236-
:return: The parsed response from the server. On success, the bytestring b'OK'
237-
"""
238-
params = {
239-
"message-id": message_id,
240-
"delivered": delivered,
241-
"timestamp": timestamp or datetime.now(pytz.utc),
242-
}
243-
# Ensure timestamp is a string:
244-
_format_date_param(params, "timestamp")
245-
return self.post(self.api_host(), "/conversions/sms", params)
246-
247219
def send_event_alert_message(self, params=None, **kwargs):
248220
return self.post(self.host(), "/sc/us/alert/json", params or kwargs)
249221

@@ -256,82 +228,6 @@ def get_event_alert_numbers(self):
256228
def resubscribe_event_alert_number(self, params=None, **kwargs):
257229
return self.post(self.host(), "/sc/us/alert/opt-in/manage/json", params or kwargs)
258230

259-
def initiate_call(self, params=None, **kwargs):
260-
return self.post(self.host(), "/call/json", params or kwargs)
261-
262-
def initiate_tts_call(self, params=None, **kwargs):
263-
return self.post(self.api_host(), "/tts/json", params or kwargs)
264-
265-
def initiate_tts_prompt_call(self, params=None, **kwargs):
266-
return self.post(self.api_host(), "/tts-prompt/json", params or kwargs)
267-
268-
def start_verification(self, params=None, **kwargs):
269-
return self.post(self.api_host(), "/verify/json", params or kwargs)
270-
271-
def send_verification_request(self, params=None, **kwargs):
272-
warnings.warn(
273-
"nexmo.Client#send_verification_request is deprecated (use #start_verification instead)",
274-
DeprecationWarning,
275-
stacklevel=2,
276-
)
277-
278-
return self.post(self.api_host(), "/verify/json", params or kwargs)
279-
280-
def check_verification(self, request_id, params=None, **kwargs):
281-
return self.post(
282-
self.api_host(),
283-
"/verify/check/json",
284-
dict(params or kwargs, request_id=request_id),
285-
)
286-
287-
def check_verification_request(self, params=None, **kwargs):
288-
warnings.warn(
289-
"nexmo.Client#check_verification_request is deprecated (use #check_verification instead)",
290-
DeprecationWarning,
291-
stacklevel=2,
292-
)
293-
294-
return self.post(self.api_host(), "/verify/check/json", params or kwargs)
295-
296-
def get_verification(self, request_id):
297-
return self.get(
298-
self.api_host(), "/verify/search/json", {"request_id": request_id}
299-
)
300-
301-
def get_verification_request(self, request_id):
302-
warnings.warn(
303-
"nexmo.Client#get_verification_request is deprecated (use #get_verification instead)",
304-
DeprecationWarning,
305-
stacklevel=2,
306-
)
307-
308-
return self.get(
309-
self.api_host(), "/verify/search/json", {"request_id": request_id}
310-
)
311-
312-
def cancel_verification(self, request_id):
313-
return self.post(
314-
self.api_host(),
315-
"/verify/control/json",
316-
{"request_id": request_id, "cmd": "cancel"},
317-
)
318-
319-
def trigger_next_verification_event(self, request_id):
320-
return self.post(
321-
self.api_host(),
322-
"/verify/control/json",
323-
{"request_id": request_id, "cmd": "trigger_next_event"},
324-
)
325-
326-
def control_verification_request(self, params=None, **kwargs):
327-
warnings.warn(
328-
"nexmo.Client#control_verification_request is deprecated",
329-
DeprecationWarning,
330-
stacklevel=2,
331-
)
332-
333-
return self.post(self.api_host(), "/verify/control/json", params or kwargs)
334-
335231
def get_basic_number_insight(self, params=None, **kwargs):
336232
return self.get(self.api_host(), "/ni/basic/json", params or kwargs)
337233

@@ -410,41 +306,6 @@ def delete_application(self, application_id):
410306
"/v1/applications/{application_id}".format(application_id=application_id),
411307
)
412308

413-
def create_call(self, params=None, **kwargs):
414-
return self._jwt_signed_post("/v1/calls", params or kwargs)
415-
416-
def get_calls(self, params=None, **kwargs):
417-
return self._jwt_signed_get("/v1/calls", params or kwargs)
418-
419-
def get_call(self, uuid):
420-
return self._jwt_signed_get("/v1/calls/{uuid}".format(uuid=uuid))
421-
422-
def update_call(self, uuid, params=None, **kwargs):
423-
return self._jwt_signed_put(
424-
"/v1/calls/{uuid}".format(uuid=uuid), params or kwargs
425-
)
426-
427-
def send_audio(self, uuid, params=None, **kwargs):
428-
return self._jwt_signed_put(
429-
"/v1/calls/{uuid}/stream".format(uuid=uuid), params or kwargs
430-
)
431-
432-
def stop_audio(self, uuid):
433-
return self._jwt_signed_delete("/v1/calls/{uuid}/stream".format(uuid=uuid))
434-
435-
def send_speech(self, uuid, params=None, **kwargs):
436-
return self._jwt_signed_put(
437-
"/v1/calls/{uuid}/talk".format(uuid=uuid), params or kwargs
438-
)
439-
440-
def stop_speech(self, uuid):
441-
return self._jwt_signed_delete("/v1/calls/{uuid}/talk".format(uuid=uuid))
442-
443-
def send_dtmf(self, uuid, params=None, **kwargs):
444-
return self._jwt_signed_put(
445-
"/v1/calls/{uuid}/dtmf".format(uuid=uuid), params or kwargs
446-
)
447-
448309
def get_recording(self, url):
449310
hostname = urlparse(url).hostname
450311
return self.parse(hostname, self.session.get(url, headers=self._headers()))
@@ -679,43 +540,6 @@ def parse(self, host, response):
679540
)
680541
raise ServerError(message)
681542

682-
def _jwt_signed_get(self, request_uri, params=None):
683-
uri = "https://{api_host}{request_uri}".format(
684-
api_host=self.api_host(), request_uri=request_uri
685-
)
686-
687-
return self.parse(
688-
self.api_host(),
689-
self.session.get(uri, params=params or {}, headers=self._headers()),
690-
)
691-
692-
def _jwt_signed_post(self, request_uri, params):
693-
uri = "https://{api_host}{request_uri}".format(
694-
api_host=self.api_host(), request_uri=request_uri
695-
)
696-
697-
return self.parse(
698-
self.api_host(), self.session.post(uri, json=params, headers=self._headers())
699-
)
700-
701-
def _jwt_signed_put(self, request_uri, params):
702-
uri = "https://{api_host}{request_uri}".format(
703-
api_host=self.api_host(), request_uri=request_uri
704-
)
705-
706-
return self.parse(
707-
self.api_host(), self.session.put(uri, json=params, headers=self._headers())
708-
)
709-
710-
def _jwt_signed_delete(self, request_uri):
711-
uri = "https://{api_host}{request_uri}".format(
712-
api_host=self.api_host(), request_uri=request_uri
713-
)
714-
715-
return self.parse(
716-
self.api_host(), self.session.delete(uri, headers=self._headers())
717-
)
718-
719543
def _headers(self):
720544
token = self.generate_application_jwt()
721545
return dict(self.headers, Authorization=b"Bearer " + token)

src/nexmo/verify.py

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
import nexmo
2+
import warnings
3+
4+
class Verify:
5+
def __init__(
6+
self,
7+
client=None,
8+
key=None,
9+
secret=None
10+
):
11+
try:
12+
self._client = client
13+
if self._client is None:
14+
self._client = nexmo.Client(
15+
key=key,
16+
secret=secret
17+
)
18+
except Exception as e:
19+
print('Error: {error_message}'.format(error_message=str(e)))
20+
21+
def start_verification(self, params=None, **kwargs):
22+
return self._client.post(self._client.api_host(), "/verify/json", params or kwargs)
23+
24+
def check(self, request_id, params=None, **kwargs):
25+
return self._client.post(
26+
self._client.api_host(),
27+
"/verify/check/json",
28+
dict(params or kwargs, request_id=request_id),
29+
)
30+
31+
def search(self, request_id):
32+
return self._client.get(
33+
self._client.api_host(), "/verify/search/json", {"request_id": request_id}
34+
)
35+
36+
def cancel(self, request_id):
37+
return self._client.post(
38+
self._client.api_host(),
39+
"/verify/control/json",
40+
{"request_id": request_id, "cmd": "cancel"},
41+
)
42+
43+
def trigger_next_event(self, request_id):
44+
return self._client.post(
45+
self._client.api_host(),
46+
"/verify/control/json",
47+
{"request_id": request_id, "cmd": "trigger_next_event"},
48+
)
49+
50+
def psd2(self, params=None, **kwargs):
51+
return self._client.post(self._client.api_host(), "/verify/psd2/json", params or kwargs)

tests/conftest.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,4 +63,13 @@ def sms(client, dummy_data):
6363

6464
return nexmo.Sms(
6565
client
66+
)
67+
68+
#Represents an instance of the Verify class for testing
69+
@pytest.fixture
70+
def verify(client, dummy_data):
71+
import nexmo
72+
73+
return nexmo.Verify(
74+
client
6675
)

0 commit comments

Comments
 (0)