Skip to content
This repository was archived by the owner on Feb 28, 2025. It is now read-only.

Commit c8497d2

Browse files
authored
Merge pull request #9 from coolsms/feature-message
Feature message
2 parents afd9f23 + f3640f7 commit c8497d2

10 files changed

Lines changed: 411 additions & 66 deletions

.gitignore

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
coolsms.pyc
1+
*.pyc
22
*/.idea/*
3-
*/__pycache__
3+
*__pycache__
44
test.py

examples/coolsms_unit_test.py

Lines changed: 184 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,184 @@
1+
# vi:set sw=4 ts=4 expandtab:
2+
3+
import sys
4+
import unittest
5+
sys.path.insert(0, "../")
6+
7+
from sdk.api.message import Message
8+
from sdk.api.group_message import GroupMessage
9+
from sdk.api.sender_id import SenderID
10+
from sdk.api.image import Image
11+
from sdk.coolsms import Coolsms
12+
from sdk.exceptions import CoolsmsException
13+
14+
import sys,json
15+
16+
def makeSuite(testcase,tests):
17+
return unittest.TestSuite(map(testcase,tests)) #testcase를 이용해서 testsuite생성
18+
19+
## @class CoolsmsUnitTest
20+
# @brief Coolsms Python SDK Unit Test
21+
class CoolsmsUnitTest(unittest.TestCase):
22+
23+
api_key = "NCS57A43A134D2B9"
24+
api_secret = "9BF07E949C74516A70D7C6A4D6B2B0D3"
25+
26+
def setUp(self):
27+
pass
28+
29+
## @brief python sdk 'message' resource test
30+
def test_message(self):
31+
cool = Message(self.api_key, self.api_secret)
32+
33+
## send
34+
params = {
35+
'type':'sms',
36+
'to':'01000000000',
37+
'from':'01000000000',
38+
'text':'Test Message'
39+
}
40+
try:
41+
cool.send(params)
42+
except CoolsmsException as e:
43+
# 402는 잔액부족이기 때문에 테스트 실패사유가 안됨
44+
if e.code == 402:
45+
pass
46+
47+
## status : response 가 None값이 아니라면 성공
48+
response = cool.status()
49+
self.assertIsNotNone(response[0]['registdate'])
50+
51+
## sent
52+
try:
53+
cool.sent()
54+
except CoolsmsException as e:
55+
# 404는 메시지 내역이 없는 것이기 때문에 테스트 실패사유가 안됨
56+
if e.code == 404:
57+
pass
58+
59+
## balane
60+
response = cool.balance()
61+
self.assertIsNotNone(response['deferred_payment'])
62+
63+
## cancel
64+
params = {
65+
'message_id':'TESTMESSAGEID',
66+
}
67+
self.assertIsNotNone(cool.cancel(params))
68+
69+
## @brief python sdk 'group_message' resource test
70+
def test_group_message(self):
71+
cool = GroupMessage(self.api_key, self.api_secret)
72+
73+
## create group
74+
response = cool.create_group()
75+
group_id = response['group_id']
76+
self.assertIsNotNone(group_id)
77+
78+
## group list
79+
response = cool.get_group_list()
80+
self.assertIsNotNone(response['list'][0])
81+
82+
## add messages
83+
params = {
84+
'group_id':group_id,
85+
'to':'01000000000',
86+
'from':'01000000000',
87+
'text':'TestGroupMessage'
88+
}
89+
response = cool.add_messages(params)
90+
self.assertIsNotNone(response['error_count'])
91+
92+
## add messages json
93+
params = [
94+
{"from":"01000000000", "to":"01000000001", "text":"TestGroupMessage"},
95+
{"from":"01000000000", "to":"01000000002", "text":"TestGroupMessage"}
96+
]
97+
messages = json.dumps(params)
98+
response = cool.add_messages_json(group_id, messages)
99+
self.assertIsNotNone(response[0]['error_count'])
100+
101+
## get message list
102+
params = {'group_id':group_id}
103+
try:
104+
cool.get_message_list(params)
105+
except CoolsmsException as e:
106+
# 404는 메시지 내역이 없는 것이기 때문에 테스트 실패사유가 안됨
107+
if e.code == 404:
108+
pass
109+
110+
## delete messages
111+
message_id = 'TESTMESSAGEID'
112+
response = cool.delete_messages(group_id, message_id)
113+
self.assertIsNotNone(response['error_count'])
114+
115+
## send
116+
try:
117+
cool.send(params)
118+
except CoolsmsException as e:
119+
# 402는 잔액부족이기 때문에 테스트 실패사유가 안됨
120+
if e.code == 402:
121+
pass
122+
123+
## @brief python sdk 'image' resource test
124+
def test_image(self):
125+
cool = Image(self.api_key, self.api_secret)
126+
image = 'image/test.jpg'
127+
128+
## upload image
129+
response = cool.upload_image(image)
130+
image_id = response['image_id']
131+
132+
## get image list
133+
response = cool.get_image_list()
134+
self.assertIsNotNone(response['total_count'])
135+
136+
## get image info
137+
response = cool.get_image_info(image_id)
138+
self.assertIsNotNone(response['file_name'])
139+
140+
## delete images
141+
response = cool.delete_images(image_id)
142+
self.assertIsNotNone(response['success_count'])
143+
144+
## @brief python sdk 'sender_id' resource test
145+
def test_sender_id(self):
146+
cool = SenderID(self.api_key, self.api_secret)
147+
148+
## register
149+
phone = "01000000000"
150+
response = cool.register(phone)
151+
self.assertIsNotNone(response['handle_key'])
152+
handle_key = response['handle_key']
153+
154+
## verify
155+
try:
156+
cool.verify(handle_key)
157+
except CoolsmsException as e:
158+
# 401은 대기중 상태로 테스트 실패사유가 안됨
159+
if e.code == 401:
160+
pass
161+
162+
## delete
163+
response = cool.delete(handle_key)
164+
self.assertIsNone(response)
165+
166+
## get list
167+
self.assertIsNotNone(cool.get_list())
168+
169+
## set_default
170+
self.assertIsNone(cool.set_default(handle_key))
171+
172+
## get_default
173+
try:
174+
cool.get_default()
175+
except CoolsmsException as e:
176+
# 404는 default sender id가 없는 것이므로 테스트 실패사유가 안됨
177+
if e.code == 404:
178+
pass
179+
180+
181+
if __name__ == "__main__":
182+
suite = makeSuite(CoolsmsUnitTest,['test_message', 'test_group_message', 'test_image', 'test_sender_id'])
183+
unittest.TextTestRunner(verbosity=2).run(suite)
184+
sys.exit()
-153 Bytes
Binary file not shown.
-3.84 KB
Binary file not shown.
-3.95 KB
Binary file not shown.
-287 Bytes
Binary file not shown.

sdk/api/image.py

Lines changed: 76 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -2,29 +2,89 @@
22
# -*- coding: utf8 -*-
33

44
import sys
5+
import base64
56
sys.path.insert(0, "../../")
67

78
from sdk.coolsms import Coolsms
8-
from sdk import exceptions
9+
from sdk.exceptions import CoolsmsException
10+
from sdk.exceptions import CoolsmsSDKException
11+
from sdk.exceptions import CoolsmsSystemException
12+
from sdk.exceptions import CoolsmsServerException
913

10-
# class Image
14+
## @class Image
15+
# @brief management image, using Rest API
1116
class Image:
12-
#
17+
# Coolsms Object
18+
cool = None
19+
20+
## @brief initialize
21+
# @param string api_key [required]
22+
# @param string api_secret [required]
1323
def __init__(self, api_key, api_secret):
14-
Coolsms(api_key, api_secret)
24+
self.cool = Coolsms(api_key, api_secret)
25+
26+
# @brief get image list( HTTP Method GET )
27+
# @param string offset [optional]
28+
# @param string limit [optional]
29+
# @return JSONObject
30+
def get_image_list(self, offset=None, limit=None):
31+
params = dict()
32+
33+
if offset:
34+
params['offset'] = offset
35+
if limit:
36+
params['limit'] = limit
37+
38+
response = self.cool.request_get('image_list', params)
39+
40+
return response
41+
42+
# @brief get image info ( HTTP Method GET )
43+
# @param string image_id [required]
44+
# @return JSONObject
45+
# @throws CoolsmsException
46+
def get_image_info(self, image_id):
47+
if image_id == None:
48+
raise CoolsmsSDKException("'image_id' is required", 201);
49+
50+
resource = "images/" + image_id;
51+
response = self.cool.request_get(resource)
52+
53+
return response
54+
55+
# @brief upload image ( HTTP Method POST )
56+
# @param string image [required]
57+
# @return JSONobject
58+
def upload_image(self, image):
59+
if image == None:
60+
raise CoolsmsSDKException("'image' is required", 201);
61+
62+
params = dict()
63+
params = {'image':image}
64+
params['image_encoding'] = 'base64'
65+
66+
files = {}
67+
try:
68+
with open(image, 'rb') as content_file:
69+
content = base64.b64encode(content_file.read())
70+
content = content.decode()
71+
except Exception as e:
72+
raise CoolsmsSystemException(e, 399)
73+
files = {'image': {'filename': image, 'content': content}}
1574

16-
#
17-
def get_image_list(self):
18-
return
75+
response = self.cool.request_post_multipart("upload_image", params, files)
1976

20-
#
21-
def get_image_info(self):
22-
return
77+
return response
2378

24-
#
25-
def upload_image(self):
26-
return
79+
# @brief delete images ( HTTP Method POST )
80+
# @param string image_ids [required]
81+
# @return JSONObject
82+
def delete_images(self, image_ids):
83+
if image_ids == None:
84+
raise CoolsmsSDKException("'image_ids' is required", 201);
85+
86+
params = dict()
87+
params = {'image_ids':image_ids}
88+
response = self.cool.request_post('delete_images', params)
2789

28-
#
29-
def delete_images(self):
30-
return
90+
return response

sdk/api/message.py

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33

44
import sys
55
import platform
6+
import base64
67
sys.path.insert(0, "../../")
78

89
from sdk.coolsms import Coolsms
@@ -58,16 +59,17 @@ def send(self, params):
5859
# type이 mms일때 image file check
5960
files = {}
6061
if 'type' in params and params['type'] == 'mms':
61-
if params['image'] is None:
62+
if 'image' not in params:
6263
raise CoolsmsSDKException('image file is required')
6364

6465
try:
6566
with open(params['image'], 'rb') as content_file:
66-
content = content_file.read()
67+
content = base64.b64encode(content_file.read())
68+
content = content.decode()
6769
except Exception as e:
6870
raise CoolsmsSystemException(e, 399)
69-
70-
files = {'image': {'filename': image, 'content': content}}
71+
files = {'image': {'filename': params['image'], 'content': content}}
72+
params['image_encoding'] = 'base64'
7173

7274
# request post multipart-form
7375
response = self.cool.request_post_multipart("send", params, files)

0 commit comments

Comments
 (0)