47 lines
1.3 KiB
Python
47 lines
1.3 KiB
Python
"""
|
|
api_base.py: Base class for all API classes
|
|
"""
|
|
try:
|
|
from urllib.parse import quote # Python3
|
|
except ImportError:
|
|
from urllib import quote # Python2
|
|
|
|
|
|
class ApiBase(object):
|
|
""" Base class for all API objects """
|
|
def __init__(self, client):
|
|
self._client = client
|
|
|
|
def _build_option_string(self, options):
|
|
"""
|
|
:param options: dictionary containing the options
|
|
:returns: option_string formatted for an API endpoint
|
|
"""
|
|
option_string = ""
|
|
if options is not None:
|
|
for key in options:
|
|
option_string += "/%s-%s" % (key, options[key])
|
|
return self._quote_url(option_string)
|
|
|
|
@staticmethod
|
|
def _extract_id(obj):
|
|
""" Return obj.id, or obj if the object doesn't have an ID """
|
|
try:
|
|
return obj.id
|
|
except AttributeError:
|
|
return obj
|
|
|
|
@staticmethod
|
|
def _quote_url(string):
|
|
""" Make a string suitable for insertion into a URL """
|
|
return quote(string.encode('utf-8'))
|
|
|
|
@staticmethod
|
|
def _result_to_list(result):
|
|
""" Handle the case where the result contains no items """
|
|
if not result:
|
|
return []
|
|
if "totalRows" in result[0] and result[0]["totalRows"] == 0:
|
|
return []
|
|
else:
|
|
return result
|