Skip to content

Commit 4b4d9a7

Browse files
feat(apiclient): review useragent support
review default useragent header and provide a possibility to customize the client
1 parent b78d1fc commit 4b4d9a7

File tree

3 files changed

+82
-38
lines changed

3 files changed

+82
-38
lines changed

hexonet/apiconnector/apiclient.py

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
from six.moves.urllib.request import urlopen, Request
1818
from six.moves.urllib.parse import urlparse, urlencode
1919
import copy
20+
import platform
2021

2122
rtm = RTM()
2223

@@ -33,6 +34,8 @@ def __init__(self):
3334
# API connection timeout setting
3435
self.__socketTimeout = 300000
3536
self.useLIVESystem()
37+
# user agent setting
38+
self.__ua = ""
3639

3740
def enableDebugMode(self):
3841
"""
@@ -72,6 +75,27 @@ def getURL(self):
7275
"""
7376
return self.__socketURL
7477

78+
def getUserAgent(self):
79+
"""
80+
Get the User Agent
81+
"""
82+
if (len(self.__ua) == 0):
83+
pid = "PYTHON-SDK"
84+
pyv = platform.python_version()
85+
pf = platform.system()
86+
arch = platform.architecture()[0]
87+
self.__ua = "%s (%s %s rv:%s) python/%s" % (pid, pf, arch, self.getVersion(), pyv)
88+
return self.__ua
89+
90+
def setUserAgent(self, pid, rv):
91+
"""
92+
Possibility to customize default user agent to fit your needs by given string and revision
93+
"""
94+
pyv = platform.python_version()
95+
pf = platform.system()
96+
arch = platform.architecture()[0]
97+
self.__ua = "%s (%s %s rv:%s) python-sdk/%s python/%s" % (pid, pf, arch, rv, self.getVersion(), pyv)
98+
7599
def getVersion(self):
76100
"""
77101
Get the current module version

requirements.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,4 +10,4 @@ Sphinx==1.8.5
1010
sphinxcontrib-log-cabinet==1.0.0
1111
sphinxcontrib-websupport==1.1.0
1212
pip==19.0.3
13-
twine==1.13.0
13+
twine==1.13.0

tests/test_apiclient.py

Lines changed: 57 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,18 @@
22
from hexonet.apiconnector.response import Response as R
33
from hexonet.apiconnector.responsetemplatemanager import ResponseTemplateManager as RTM
44
import pytest
5+
import platform
56

67

78
def test_apiclientmethods():
89
cl = AC()
910
rtm = RTM.getInstance()
1011
rtm.addTemplate(
1112
'login200',
12-
'[RESPONSE]\r\nPROPERTY[SESSION][0]=h8JLZZHdF2WgWWXlwbKWzEG3XrzoW4y' +
13-
'shhvtqyg0LCYiX55QnhgYX9cB0W4mlpbx\r\nDESCRIPTION=Command completed' +
14-
' successfully\r\nCODE=200\r\nQUEUETIME=0\r\nRUNTIME=0.169\r\nEOF\r' +
15-
'\n'
13+
'[RESPONSE]\r\nPROPERTY[SESSION][0]=h8JLZZHdF2WgWWXlwbKWzEG3XrzoW4y'
14+
+ 'shhvtqyg0LCYiX55QnhgYX9cB0W4mlpbx\r\nDESCRIPTION=Command completed'
15+
+ ' successfully\r\nCODE=200\r\nQUEUETIME=0\r\nRUNTIME=0.169\r\nEOF\r'
16+
+ '\n'
1617
)
1718
rtm.addTemplate(
1819
'login500',
@@ -24,50 +25,50 @@ def test_apiclientmethods():
2425
)
2526
rtm.addTemplate(
2627
'listP0',
27-
'[RESPONSE]\r\nPROPERTY[TOTAL][0]=2701\r\nPROPERTY[FIRST][0]=0\r\nP' +
28-
'ROPERTY[DOMAIN][0]=0-60motorcycletimes.com\r\nPROPERTY[DOMAIN][1]=' +
29-
'0-be-s01-0.com\r\nPROPERTY[COUNT][0]=2\r\nPROPERTY[LAST][0]=1\r\nP' +
30-
'ROPERTY[LIMIT][0]=2\r\nDESCRIPTION=Command completed successfully' +
31-
'\r\nCODE=200\r\nQUEUETIME=0\r\nRUNTIME=0.023\r\nEOF\r\n'
28+
'[RESPONSE]\r\nPROPERTY[TOTAL][0]=2701\r\nPROPERTY[FIRST][0]=0\r\nP'
29+
+ 'ROPERTY[DOMAIN][0]=0-60motorcycletimes.com\r\nPROPERTY[DOMAIN][1]='
30+
+ '0-be-s01-0.com\r\nPROPERTY[COUNT][0]=2\r\nPROPERTY[LAST][0]=1\r\nP'
31+
+ 'ROPERTY[LIMIT][0]=2\r\nDESCRIPTION=Command completed successfully'
32+
+ '\r\nCODE=200\r\nQUEUETIME=0\r\nRUNTIME=0.023\r\nEOF\r\n'
3233
)
3334
rtm.addTemplate(
3435
'listP1',
35-
'[RESPONSE]\r\nPROPERTY[TOTAL][0]=2701\r\nPROPERTY[FIRST][0]=2\r\nP' +
36-
'ROPERTY[DOMAIN][0]=0-qas-ao17-0.org\r\nPROPERTY[DOMAIN][1]=0-sunny' +
37-
'da222y.com\r\nPROPERTY[COUNT][0]=2\r\nPROPERTY[LAST][0]=3\r\nPROPE' +
38-
'RTY[LIMIT][0]=2\r\nDESCRIPTION=Command completed successfully\r\nC' +
39-
'ODE=200\r\nQUEUETIME=0\r\nRUNTIME=0.032\r\nEOF\r\n'
36+
'[RESPONSE]\r\nPROPERTY[TOTAL][0]=2701\r\nPROPERTY[FIRST][0]=2\r\nP'
37+
+ 'ROPERTY[DOMAIN][0]=0-qas-ao17-0.org\r\nPROPERTY[DOMAIN][1]=0-sunny'
38+
+ 'da222y.com\r\nPROPERTY[COUNT][0]=2\r\nPROPERTY[LAST][0]=3\r\nPROPE'
39+
+ 'RTY[LIMIT][0]=2\r\nDESCRIPTION=Command completed successfully\r\nC'
40+
+ 'ODE=200\r\nQUEUETIME=0\r\nRUNTIME=0.032\r\nEOF\r\n'
4041
)
4142
rtm.addTemplate(
4243
'listFP0',
43-
'[RESPONSE]\r\nPROPERTY[TOTAL][0]=3\r\nPROPERTY[FIRST][0]=0\r\nPROP' +
44-
'ERTY[DOMAIN][0]=0-60motorcycletimes.com\r\nPROPERTY[COUNT][0]=1\r' +
45-
'\nPROPERTY[LAST][0]=1\r\nPROPERTY[LIMIT][0]=1\r\nDESCRIPTION=Comma' +
46-
'nd completed successfully\r\nCODE=200\r\nQUEUETIME=0\r\nRUNTIME=0.' +
47-
'023\r\nEOF\r\n'
44+
'[RESPONSE]\r\nPROPERTY[TOTAL][0]=3\r\nPROPERTY[FIRST][0]=0\r\nPROP'
45+
+ 'ERTY[DOMAIN][0]=0-60motorcycletimes.com\r\nPROPERTY[COUNT][0]=1\r'
46+
+ '\nPROPERTY[LAST][0]=1\r\nPROPERTY[LIMIT][0]=1\r\nDESCRIPTION=Comma'
47+
+ 'nd completed successfully\r\nCODE=200\r\nQUEUETIME=0\r\nRUNTIME=0.'
48+
+ '023\r\nEOF\r\n'
4849
)
4950
rtm.addTemplate(
5051
'listFP1',
51-
'[RESPONSE]\r\nPROPERTY[TOTAL][0]=3\r\nPROPERTY[FIRST][0]=1\r\nPROP' +
52-
'ERTY[DOMAIN][0]=0-be-s01-0.com\r\nPROPERTY[COUNT][0]=1\r\nPROPERTY' +
53-
'[LAST][0]=2\r\nPROPERTY[LIMIT][0]=1\r\nDESCRIPTION=Command complet' +
54-
'ed successfully\r\nCODE=200\r\nQUEUETIME=0\r\nRUNTIME=0.032\r\nEOF' +
55-
'\r\n'
52+
'[RESPONSE]\r\nPROPERTY[TOTAL][0]=3\r\nPROPERTY[FIRST][0]=1\r\nPROP'
53+
+ 'ERTY[DOMAIN][0]=0-be-s01-0.com\r\nPROPERTY[COUNT][0]=1\r\nPROPERTY'
54+
+ '[LAST][0]=2\r\nPROPERTY[LIMIT][0]=1\r\nDESCRIPTION=Command complet'
55+
+ 'ed successfully\r\nCODE=200\r\nQUEUETIME=0\r\nRUNTIME=0.032\r\nEOF'
56+
+ '\r\n'
5657
)
5758
rtm.addTemplate(
5859
'listFP2',
59-
'[RESPONSE]\r\nPROPERTY[TOTAL][0]=3\r\nPROPERTY[FIRST][0]=2\r\nPROP' +
60-
'ERTY[DOMAIN][0]=0-qas-ao17-0.org\r\nPROPERTY[COUNT][0]=2\r\nPROPER' +
61-
'TY[LAST][0]=3\r\nPROPERTY[LIMIT][0]=1\r\nDESCRIPTION=Command compl' +
62-
'eted successfully\r\nCODE=200\r\nQUEUETIME=0\r\nRUNTIME=0.032\r\nE' +
63-
'OF\r\n'
60+
'[RESPONSE]\r\nPROPERTY[TOTAL][0]=3\r\nPROPERTY[FIRST][0]=2\r\nPROP'
61+
+ 'ERTY[DOMAIN][0]=0-qas-ao17-0.org\r\nPROPERTY[COUNT][0]=2\r\nPROPER'
62+
+ 'TY[LAST][0]=3\r\nPROPERTY[LIMIT][0]=1\r\nDESCRIPTION=Command compl'
63+
+ 'eted successfully\r\nCODE=200\r\nQUEUETIME=0\r\nRUNTIME=0.032\r\nE'
64+
+ 'OF\r\n'
6465
)
6566

6667
# #.getPOSTData()
6768
# test object input with special chars
6869
validate = (
69-
's_entity=54cd&s_command=COMMAND%3DModifyDomain%0AAUTH%3Dgwrgwqg%25' +
70-
'%26%5C44t3%2A'
70+
's_entity=54cd&s_command=COMMAND%3DModifyDomain%0AAUTH%3Dgwrgwqg%25'
71+
+ '%26%5C44t3%2A'
7172
)
7273
enc = cl.getPOSTData({
7374
'COMMAND': 'ModifyDomain',
@@ -105,6 +106,25 @@ def test_apiclientmethods():
105106
# #.getURL()
106107
assert cl.getURL() == 'https://coreapi.1api.net/api/call.cgi'
107108

109+
# #.getUserAgent()
110+
pid = "PYTHON-SDK"
111+
pyv = platform.python_version()
112+
pf = platform.system()
113+
arch = platform.architecture()[0]
114+
ua = "%s (%s %s rv:%s) python/%s" % (pid, pf, arch, cl.getVersion(), pyv)
115+
assert cl.getUserAgent() == ua
116+
117+
# #.setUserAgent()
118+
pid = "WHMCS"
119+
rv = "7.7.0"
120+
pid2 = "python-sdk"
121+
pyv = platform.python_version()
122+
pf = platform.system()
123+
arch = platform.architecture()[0]
124+
ua = "%s (%s %s rv:%s) %s/%s python/%s" % (pid, pf, arch, rv, pid2, cl.getVersion(), pyv)
125+
cl.setUserAgent(pid, rv)
126+
assert cl.getUserAgent() == ua
127+
108128
# #.setURL()
109129
tmp = 'http://coreapi.1api.net/api/call.cgi'
110130
url = cl.setURL(tmp).getURL()
@@ -173,8 +193,8 @@ def test_apiclientmethods():
173193
'COMMAND': 'StatusAccount'
174194
})
175195
exp = (
176-
's_entity=54cd&s_remoteaddr=10.10.10.10&s_command=COMMAND%3DStatusA' +
177-
'ccount'
196+
's_entity=54cd&s_remoteaddr=10.10.10.10&s_command=COMMAND%3DStatusA'
197+
+ 'ccount'
178198
)
179199
assert tmp == exp
180200

@@ -192,8 +212,8 @@ def test_apiclientmethods():
192212
'COMMAND': 'StatusAccount'
193213
})
194214
exp = (
195-
's_entity=54cd&s_login=myaccountid&s_pw=mypassword&s_command=COMMAN' +
196-
'D%3DStatusAccount'
215+
's_entity=54cd&s_login=myaccountid&s_pw=mypassword&s_command=COMMAN'
216+
+ 'D%3DStatusAccount'
197217
)
198218
assert tmp == exp
199219

@@ -211,8 +231,8 @@ def test_apiclientmethods():
211231
'COMMAND': 'StatusAccount'
212232
})
213233
exp = (
214-
's_entity=54cd&s_login=myaccountid%21myroleid&s_pw=mypassword&s_com' +
215-
'mand=COMMAND%3DStatusAccount'
234+
's_entity=54cd&s_login=myaccountid%21myroleid&s_pw=mypassword&s_com'
235+
+ 'mand=COMMAND%3DStatusAccount'
216236
)
217237
assert tmp == exp
218238

0 commit comments

Comments
 (0)