8000 Merge pull request #34 from timjen3/master · Evert-Arends/wc-api-python@502b211 · GitHub
[go: up one dir, main page]

Skip to content

Commit 502b211

Browse files
Merge pull request woocommerce#34 from timjen3/master
api accepts url params and additional keyword args for requests module
2 parents bffe8d7 + 7873912 commit 502b211

File tree

2 files changed

+50
-15
lines changed

2 files changed

+50
-15
lines changed

tests.py

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,31 @@ def woo_test_mock(*args, **kwargs):
7979
status = self.api.get("products").status_code
8080
self.assertEqual(status, 200)
8181

82+
def test_get_with_parameters(self):
83+
""" Test GET requests w/ url params """
84+
@all_requests
85+
def woo_test_mock(*args, **kwargs):
86+
return {'status_code': 200,
87+
'content': 'OK'}
88+
89+
with HTTMock(woo_test_mock):
90+
# call requests
91+
status = self.api.get("products", params={"per_page": 10, "page": 1, "offset": 0}).status_code
92+
self.assertEqual(status, 200)
93+
94+
def test_get_with_requests_kwargs(self):
95+
""" Test GET requests w/ optional requests-module kwargs """
96+
97+
@all_requests
98+
def woo_test_mock(*args, **kwargs):
99+
return {'status_code': 200,
100+
'content': 'OK'}
101+
102+
with HTTMock(woo_test_mock):
103+
# call requests
104+
status = self.api.get("products", allow_redirects=True).status_code
105+
self.assertEqual(status, 200)
106+
82107
def test_post(self):
83108
""" Test POST requests """
84109
@all_requests

woocommerce/api.py

Lines changed: 25 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,11 @@
1313
from json import dumps as jsonencode
1414
from woocommerce.oauth import OAuth
1515

16+
try:
17+
from urllib.parse import urlencode
18+
except ImportError:
19+
from urllib import urlencode
20+
1621

1722
class API(object):
1823
""" API Class """
@@ -57,11 +62,12 @@ def __get_oauth_url(self, url, method):
5762

5863
return oauth.get_oauth_url()
5964

60-
def __request(self, method, endpoint, data):
65+
def __request(self, method, endpoint, data, params=None, **kwargs):
6166
""" Do requests """
67+
if params is None:
68+
params = {}
6269
url = self.__get_url(endpoint)
6370
auth = None
64-
params = {}
6571
headers = {
6672
"user-agent": "WooCommerce API Client-Python/%s" % __version__,
6773
"accept": "application/json"
@@ -70,11 +76,13 @@ def __request(self, method, endpoint, data):
7076
if self.is_ssl is True and self.query_string_auth is False:
7177
auth = (self.consumer_key, self.consumer_secret)
7278
elif self.is_ssl is True and self.query_string_auth is True:
73-
params = {
79+
params.update({
7480
"consumer_key": self.consumer_key,
7581
"consumer_secret": self.consumer_secret
76-
}
82+
})
7783
else:
84+
encoded_params = urlencode(params)
85+
url = "%s?%s" % (url, encoded_params)
7886
url = self.__get_oauth_url(url, method)
7987

8088
if data is not None:
@@ -89,25 +97,27 @@ def __request(self, method, endpoint, data):
8997
params=params,
9098
data=data,
9199
timeout=self.timeout,
92-
headers=headers
100+
headers=headers,
101+
**kwargs
93102
)
94103

95-
def get(self, endpoint):
104+
def get(self, endpoint, **kwargs):
96105
""" Get requests """
97-
return self.__request("GET", endpoint, None)
106+
return self.__request("GET", endpoint, None, **kwargs)
98107

99-
def post(self, endpoint, data):
108+
def post(self, endpoint, data, **kwargs):
100109
""" POST requests """
101-
return self.__request("POST", endpoint, data)
110+
return self.__request("POST", endpoint, data, **kwargs)
102111

103-
def put(self, endpoint, data):
112+
def put(self, endpoint, data, **kwargs):
104113
""" PUT requests """
105-
return self.__request("PUT", endpoint, data)
114+
return self.__request("PUT", endpoint, data, **kwargs)
106115

107-
def delete(self, endpoint):
116+
def delete(self, endpoint, **kwargs):
108117
""" DELETE requests """
109-
return self.__request("DELETE", endpoint, None)
118+
return self.__request("DELETE", endpoint, None, **kwargs)
110119

111-
def options(self, endpoint):
120+
def options(self, endpoint, **kwargs):
112121
""" OPTIONS requests """
113-
return self.__request("OPTIONS", endpoint, None)
122+
return self.__request("OPTIONS", endpoint, None, **kwargs)
123+

0 commit comments

Comments
 (0)
0