Skip to content

Commit

Permalink
feat(apiclient): review useragent support
Browse files Browse the repository at this point in the history
review default useragent header and provide a possibility to customize the client
  • Loading branch information
KaiSchwarz-cnic committed Mar 29, 2019
1 parent b78d1fc commit 4b4d9a7
Show file tree
Hide file tree
Showing 3 changed files with 82 additions and 38 deletions.
24 changes: 24 additions & 0 deletions hexonet/apiconnector/apiclient.py
Expand Up @@ -17,6 +17,7 @@
from six.moves.urllib.request import urlopen, Request
from six.moves.urllib.parse import urlparse, urlencode
import copy
import platform

rtm = RTM()

Expand All @@ -33,6 +34,8 @@ def __init__(self):
# API connection timeout setting
self.__socketTimeout = 300000
self.useLIVESystem()
# user agent setting
self.__ua = ""

def enableDebugMode(self):
"""
Expand Down Expand Up @@ -72,6 +75,27 @@ def getURL(self):
"""
return self.__socketURL

def getUserAgent(self):
"""
Get the User Agent
"""
if (len(self.__ua) == 0):
pid = "PYTHON-SDK"
pyv = platform.python_version()
pf = platform.system()
arch = platform.architecture()[0]
self.__ua = "%s (%s %s rv:%s) python/%s" % (pid, pf, arch, self.getVersion(), pyv)
return self.__ua

def setUserAgent(self, pid, rv):
"""
Possibility to customize default user agent to fit your needs by given string and revision
"""
pyv = platform.python_version()
pf = platform.system()
arch = platform.architecture()[0]
self.__ua = "%s (%s %s rv:%s) python-sdk/%s python/%s" % (pid, pf, arch, rv, self.getVersion(), pyv)

def getVersion(self):
"""
Get the current module version
Expand Down
2 changes: 1 addition & 1 deletion requirements.txt
Expand Up @@ -10,4 +10,4 @@ Sphinx==1.8.5
sphinxcontrib-log-cabinet==1.0.0
sphinxcontrib-websupport==1.1.0
pip==19.0.3
twine==1.13.0
twine==1.13.0
94 changes: 57 additions & 37 deletions tests/test_apiclient.py
Expand Up @@ -2,17 +2,18 @@
from hexonet.apiconnector.response import Response as R
from hexonet.apiconnector.responsetemplatemanager import ResponseTemplateManager as RTM
import pytest
import platform


def test_apiclientmethods():
cl = AC()
rtm = RTM.getInstance()
rtm.addTemplate(
'login200',
'[RESPONSE]\r\nPROPERTY[SESSION][0]=h8JLZZHdF2WgWWXlwbKWzEG3XrzoW4y' +
'shhvtqyg0LCYiX55QnhgYX9cB0W4mlpbx\r\nDESCRIPTION=Command completed' +
' successfully\r\nCODE=200\r\nQUEUETIME=0\r\nRUNTIME=0.169\r\nEOF\r' +
'\n'
'[RESPONSE]\r\nPROPERTY[SESSION][0]=h8JLZZHdF2WgWWXlwbKWzEG3XrzoW4y'
+ 'shhvtqyg0LCYiX55QnhgYX9cB0W4mlpbx\r\nDESCRIPTION=Command completed'
+ ' successfully\r\nCODE=200\r\nQUEUETIME=0\r\nRUNTIME=0.169\r\nEOF\r'
+ '\n'
)
rtm.addTemplate(
'login500',
Expand All @@ -24,50 +25,50 @@ def test_apiclientmethods():
)
rtm.addTemplate(
'listP0',
'[RESPONSE]\r\nPROPERTY[TOTAL][0]=2701\r\nPROPERTY[FIRST][0]=0\r\nP' +
'ROPERTY[DOMAIN][0]=0-60motorcycletimes.com\r\nPROPERTY[DOMAIN][1]=' +
'0-be-s01-0.com\r\nPROPERTY[COUNT][0]=2\r\nPROPERTY[LAST][0]=1\r\nP' +
'ROPERTY[LIMIT][0]=2\r\nDESCRIPTION=Command completed successfully' +
'\r\nCODE=200\r\nQUEUETIME=0\r\nRUNTIME=0.023\r\nEOF\r\n'
'[RESPONSE]\r\nPROPERTY[TOTAL][0]=2701\r\nPROPERTY[FIRST][0]=0\r\nP'
+ 'ROPERTY[DOMAIN][0]=0-60motorcycletimes.com\r\nPROPERTY[DOMAIN][1]='
+ '0-be-s01-0.com\r\nPROPERTY[COUNT][0]=2\r\nPROPERTY[LAST][0]=1\r\nP'
+ 'ROPERTY[LIMIT][0]=2\r\nDESCRIPTION=Command completed successfully'
+ '\r\nCODE=200\r\nQUEUETIME=0\r\nRUNTIME=0.023\r\nEOF\r\n'
)
rtm.addTemplate(
'listP1',
'[RESPONSE]\r\nPROPERTY[TOTAL][0]=2701\r\nPROPERTY[FIRST][0]=2\r\nP' +
'ROPERTY[DOMAIN][0]=0-qas-ao17-0.org\r\nPROPERTY[DOMAIN][1]=0-sunny' +
'da222y.com\r\nPROPERTY[COUNT][0]=2\r\nPROPERTY[LAST][0]=3\r\nPROPE' +
'RTY[LIMIT][0]=2\r\nDESCRIPTION=Command completed successfully\r\nC' +
'ODE=200\r\nQUEUETIME=0\r\nRUNTIME=0.032\r\nEOF\r\n'
'[RESPONSE]\r\nPROPERTY[TOTAL][0]=2701\r\nPROPERTY[FIRST][0]=2\r\nP'
+ 'ROPERTY[DOMAIN][0]=0-qas-ao17-0.org\r\nPROPERTY[DOMAIN][1]=0-sunny'
+ 'da222y.com\r\nPROPERTY[COUNT][0]=2\r\nPROPERTY[LAST][0]=3\r\nPROPE'
+ 'RTY[LIMIT][0]=2\r\nDESCRIPTION=Command completed successfully\r\nC'
+ 'ODE=200\r\nQUEUETIME=0\r\nRUNTIME=0.032\r\nEOF\r\n'
)
rtm.addTemplate(
'listFP0',
'[RESPONSE]\r\nPROPERTY[TOTAL][0]=3\r\nPROPERTY[FIRST][0]=0\r\nPROP' +
'ERTY[DOMAIN][0]=0-60motorcycletimes.com\r\nPROPERTY[COUNT][0]=1\r' +
'\nPROPERTY[LAST][0]=1\r\nPROPERTY[LIMIT][0]=1\r\nDESCRIPTION=Comma' +
'nd completed successfully\r\nCODE=200\r\nQUEUETIME=0\r\nRUNTIME=0.' +
'023\r\nEOF\r\n'
'[RESPONSE]\r\nPROPERTY[TOTAL][0]=3\r\nPROPERTY[FIRST][0]=0\r\nPROP'
+ 'ERTY[DOMAIN][0]=0-60motorcycletimes.com\r\nPROPERTY[COUNT][0]=1\r'
+ '\nPROPERTY[LAST][0]=1\r\nPROPERTY[LIMIT][0]=1\r\nDESCRIPTION=Comma'
+ 'nd completed successfully\r\nCODE=200\r\nQUEUETIME=0\r\nRUNTIME=0.'
+ '023\r\nEOF\r\n'
)
rtm.addTemplate(
'listFP1',
'[RESPONSE]\r\nPROPERTY[TOTAL][0]=3\r\nPROPERTY[FIRST][0]=1\r\nPROP' +
'ERTY[DOMAIN][0]=0-be-s01-0.com\r\nPROPERTY[COUNT][0]=1\r\nPROPERTY' +
'[LAST][0]=2\r\nPROPERTY[LIMIT][0]=1\r\nDESCRIPTION=Command complet' +
'ed successfully\r\nCODE=200\r\nQUEUETIME=0\r\nRUNTIME=0.032\r\nEOF' +
'\r\n'
'[RESPONSE]\r\nPROPERTY[TOTAL][0]=3\r\nPROPERTY[FIRST][0]=1\r\nPROP'
+ 'ERTY[DOMAIN][0]=0-be-s01-0.com\r\nPROPERTY[COUNT][0]=1\r\nPROPERTY'
+ '[LAST][0]=2\r\nPROPERTY[LIMIT][0]=1\r\nDESCRIPTION=Command complet'
+ 'ed successfully\r\nCODE=200\r\nQUEUETIME=0\r\nRUNTIME=0.032\r\nEOF'
+ '\r\n'
)
rtm.addTemplate(
'listFP2',
'[RESPONSE]\r\nPROPERTY[TOTAL][0]=3\r\nPROPERTY[FIRST][0]=2\r\nPROP' +
'ERTY[DOMAIN][0]=0-qas-ao17-0.org\r\nPROPERTY[COUNT][0]=2\r\nPROPER' +
'TY[LAST][0]=3\r\nPROPERTY[LIMIT][0]=1\r\nDESCRIPTION=Command compl' +
'eted successfully\r\nCODE=200\r\nQUEUETIME=0\r\nRUNTIME=0.032\r\nE' +
'OF\r\n'
'[RESPONSE]\r\nPROPERTY[TOTAL][0]=3\r\nPROPERTY[FIRST][0]=2\r\nPROP'
+ 'ERTY[DOMAIN][0]=0-qas-ao17-0.org\r\nPROPERTY[COUNT][0]=2\r\nPROPER'
+ 'TY[LAST][0]=3\r\nPROPERTY[LIMIT][0]=1\r\nDESCRIPTION=Command compl'
+ 'eted successfully\r\nCODE=200\r\nQUEUETIME=0\r\nRUNTIME=0.032\r\nE'
+ 'OF\r\n'
)

# #.getPOSTData()
# test object input with special chars
validate = (
's_entity=54cd&s_command=COMMAND%3DModifyDomain%0AAUTH%3Dgwrgwqg%25' +
'%26%5C44t3%2A'
's_entity=54cd&s_command=COMMAND%3DModifyDomain%0AAUTH%3Dgwrgwqg%25'
+ '%26%5C44t3%2A'
)
enc = cl.getPOSTData({
'COMMAND': 'ModifyDomain',
Expand Down Expand Up @@ -105,6 +106,25 @@ def test_apiclientmethods():
# #.getURL()
assert cl.getURL() == 'https://coreapi.1api.net/api/call.cgi'

# #.getUserAgent()
pid = "PYTHON-SDK"
pyv = platform.python_version()
pf = platform.system()
arch = platform.architecture()[0]
ua = "%s (%s %s rv:%s) python/%s" % (pid, pf, arch, cl.getVersion(), pyv)
assert cl.getUserAgent() == ua

# #.setUserAgent()
pid = "WHMCS"
rv = "7.7.0"
pid2 = "python-sdk"
pyv = platform.python_version()
pf = platform.system()
arch = platform.architecture()[0]
ua = "%s (%s %s rv:%s) %s/%s python/%s" % (pid, pf, arch, rv, pid2, cl.getVersion(), pyv)
cl.setUserAgent(pid, rv)
assert cl.getUserAgent() == ua

# #.setURL()
tmp = 'http://coreapi.1api.net/api/call.cgi'
url = cl.setURL(tmp).getURL()
Expand Down Expand Up @@ -173,8 +193,8 @@ def test_apiclientmethods():
'COMMAND': 'StatusAccount'
})
exp = (
's_entity=54cd&s_remoteaddr=10.10.10.10&s_command=COMMAND%3DStatusA' +
'ccount'
's_entity=54cd&s_remoteaddr=10.10.10.10&s_command=COMMAND%3DStatusA'
+ 'ccount'
)
assert tmp == exp

Expand All @@ -192,8 +212,8 @@ def test_apiclientmethods():
'COMMAND': 'StatusAccount'
})
exp = (
's_entity=54cd&s_login=myaccountid&s_pw=mypassword&s_command=COMMAN' +
'D%3DStatusAccount'
's_entity=54cd&s_login=myaccountid&s_pw=mypassword&s_command=COMMAN'
+ 'D%3DStatusAccount'
)
assert tmp == exp

Expand All @@ -211,8 +231,8 @@ def test_apiclientmethods():
'COMMAND': 'StatusAccount'
})
exp = (
's_entity=54cd&s_login=myaccountid%21myroleid&s_pw=mypassword&s_com' +
'mand=COMMAND%3DStatusAccount'
's_entity=54cd&s_login=myaccountid%21myroleid&s_pw=mypassword&s_com'
+ 'mand=COMMAND%3DStatusAccount'
)
assert tmp == exp

Expand Down

0 comments on commit 4b4d9a7

Please sign in to comment.