Skip to content

Commit

Permalink
Add support for v3
Browse files Browse the repository at this point in the history
 - Pass through api_path object to connection
 - Append catalog word to resource url
 - Ignore meta field when returning response
  • Loading branch information
VDuda committed May 25, 2019
1 parent af02613 commit 9063964
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 3 deletions.
3 changes: 2 additions & 1 deletion bigcommerce/api.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@


class BigcommerceApi(object):
def __init__(self, host=None, basic_auth=None,
def __init__(self, host=None, api_path=None, basic_auth=None,
client_id=None, store_hash=None, access_token=None, rate_limiting_management=None):
self.api_service = os.getenv('BC_API_ENDPOINT', 'api.bigcommerce.com')
self.auth_service = os.getenv('BC_AUTH_SERVICE', 'login.bigcommerce.com')
Expand All @@ -14,6 +14,7 @@ def __init__(self, host=None, basic_auth=None,
self.connection = connection.Connection(host, basic_auth)
elif client_id and store_hash:
self.connection = connection.OAuthConnection(client_id, store_hash, access_token, self.api_service,
api_path=api_path,
rate_limiting_management=rate_limiting_management)
else:
raise Exception("Must provide either (client_id and store_hash) or (host and basic_auth)")
Expand Down
11 changes: 9 additions & 2 deletions bigcommerce/connection.py
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,10 @@ def _run_method(self, method, url, data=None, query=None, headers=None):
if headers is None:
headers = {}

# Support v3
if self.api_path and 'v3' in self.api_path:
url = 'catalog/{}'.format(url)

# make full path if not given
if url and url[:4] != "http":
if url[0] == '/': # can call with /resource if you want
Expand Down Expand Up @@ -156,6 +160,9 @@ def _handle_response(self, url, res, suppress_empty=True):
if res.status_code in (200, 201, 202):
try:
result = res.json()
# Support v3
if self.api_path and 'v3' in self.api_path:
result = result['data'] #TODO ignore meta field for now
except Exception as e: # json might be invalid, or store might be down
e.message += " (_handle_response failed to decode JSON: " + str(res.content) + ")"
raise # TODO better exception
Expand Down Expand Up @@ -187,11 +194,11 @@ class OAuthConnection(Connection):
"""

def __init__(self, client_id, store_hash, access_token=None, host='api.bigcommerce.com',
api_path='/stores/{}/v2/{}', rate_limiting_management=None):
api_path=None, rate_limiting_management=None):
self.client_id = client_id
self.store_hash = store_hash
self.host = host
self.api_path = api_path
self.api_path = api_path if api_path else "/stores/{}/v2/{}"
self.timeout = 7.0 # can attach to session?
self.rate_limiting_management = rate_limiting_management

Expand Down

0 comments on commit 9063964

Please sign in to comment.