From 85f7e68b7790b5a11fdad872a479918f869024db Mon Sep 17 00:00:00 2001 From: Alex Ball Date: Fri, 22 May 2015 21:45:57 -0400 Subject: [PATCH 1/3] Add POST, HTTP Basic Auth --- WooCommerceClient.py | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) mode change 100644 => 100755 WooCommerceClient.py diff --git a/WooCommerceClient.py b/WooCommerceClient.py old mode 100644 new mode 100755 index 5fc45a2..17e1450 --- a/WooCommerceClient.py +++ b/WooCommerceClient.py @@ -29,7 +29,7 @@ class WooAuthError(Exception): pass class WooCommerceClient(object): - def __init__(self, consumer_key, consumer_secret, store_url): + def __init__(self, consumer_key, consumer_secret, store_url, oauth_enabled=True): self.ConsumerKey = consumer_key self.ConsumerSecret = consumer_secret @@ -70,7 +70,7 @@ def get_orders(self, params = {}): return self._do_request('orders', params) def get_order(self, id): - return self._do_request('order/' + str(id)) + return self._do_request('orders/' + str(id)) def get_orders_count(self): return self._do_request('orders/count') @@ -196,23 +196,24 @@ def _do_request(self, endpoint, params = {}, method = 'GET'): # TODO: If wanting to support HTTP Auth, do it here, skip OAuth stuff - parameters['oauth_consumer_key'] = self.ConsumerKey - parameters['oauth_timestamp'] = int(time.time()) - parameters['oauth_nonce'] = ''.join([str(random.randint(0, 9)) for i in range(8)]) - parameters['oauth_signature_method'] = 'HMAC-SHA256' - parameters['oauth_signature'] = self.generate_oauth_sig(parameters, method, endpoint) + if oauth_enabled: + parameters['oauth_consumer_key'] = self.ConsumerKey + parameters['oauth_timestamp'] = int(time.time()) + parameters['oauth_nonce'] = ''.join([str(random.randint(0, 9)) for i in range(8)]) + parameters['oauth_signature_method'] = 'HMAC-SHA256' + parameters['oauth_signature'] = self.generate_oauth_sig(parameters, method, endpoint) - if len(parameters) > 0: - parameter_string = '?' + urllib.urlencode(parameters) + if len(parameters) > 0: + parameter_string = '?' + urllib.urlencode(parameters) + else: + parameter_string = '?consumer_key={0}&consumer_secret={1}'.format(self.ConsumerKey, self.ConsumerSecret) - if method == "POST": - print('POST METHOD NOT IMPLEMENTED YET') - elif method == "DELETE": + if method == "DELETE": print('DELETE METHOD NOT IMPLEMENTED YET') else: # GET try: request = Request(self.StoreURL + endpoint + parameter_string) - response_body = urlopen(request).read() + response_body = urlopen(request, parameters).read() if method == "POST" else urlopen(request).read() return json.loads(response_body) except HTTPError as e: From 1a240ff5548721624c1952911f81ae042d48f900 Mon Sep 17 00:00:00 2001 From: Alex Ball Date: Fri, 22 May 2015 21:58:09 -0400 Subject: [PATCH 2/3] Attach OAuth flag to WooCommerceClient class --- WooCommerceClient.py | 5 ++--- WooCommerceClient.pyc | Bin 0 -> 11073 bytes test/test.py | 2 +- 3 files changed, 3 insertions(+), 4 deletions(-) create mode 100644 WooCommerceClient.pyc diff --git a/WooCommerceClient.py b/WooCommerceClient.py index 17e1450..2eda883 100755 --- a/WooCommerceClient.py +++ b/WooCommerceClient.py @@ -32,6 +32,7 @@ class WooCommerceClient(object): def __init__(self, consumer_key, consumer_secret, store_url, oauth_enabled=True): self.ConsumerKey = consumer_key self.ConsumerSecret = consumer_secret + self.oauth_enabled = oauth_enabled # Make sure there is a trailing slash if store_url[-1] != '/': @@ -194,9 +195,7 @@ def _do_request(self, endpoint, params = {}, method = 'GET'): parameters = params parameter_string = '' - # TODO: If wanting to support HTTP Auth, do it here, skip OAuth stuff - - if oauth_enabled: + if self.oauth_enabled: parameters['oauth_consumer_key'] = self.ConsumerKey parameters['oauth_timestamp'] = int(time.time()) parameters['oauth_nonce'] = ''.join([str(random.randint(0, 9)) for i in range(8)]) diff --git a/WooCommerceClient.pyc b/WooCommerceClient.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f2a41c5aa153d2ba8bb87033cf9b26dfdeb44083 GIT binary patch literal 11073 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 literal 0 HcmV?d00001 diff --git a/test/test.py b/test/test.py index ea3a019..5611a9c 100644 --- a/test/test.py +++ b/test/test.py @@ -3,5 +3,5 @@ from WooCommerceClient import WooCommerceClient import pprint -wc_client = WooCommerceClient('ck_5e5692af317c09ca4581be6bc5596714', 'cs_3115cf0868e4ae29117257e13cec6248', 'http://wpdev/') +wc_client = WooCommerceClient('ck_5e5692af317c09ca4581be6bc5596714', 'cs_3115cf0868e4ae29117257e13cec6248', 'http://wpdev/', oauth_enabled=False) pprint.pprint(wc_client.get_products()) \ No newline at end of file From 5d2f077272d08d0b431c7f5672883ebb6241bede Mon Sep 17 00:00:00 2001 From: Alex Ball Date: Fri, 22 May 2015 21:59:48 -0400 Subject: [PATCH 3/3] Delete .pyc --- WooCommerceClient.pyc | Bin 11073 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 WooCommerceClient.pyc diff --git a/WooCommerceClient.pyc b/WooCommerceClient.pyc deleted file mode 100644 index f2a41c5aa153d2ba8bb87033cf9b26dfdeb44083..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11073 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