# Path: zenpy/lib/exception.py
# class ZenpyException(Exception):
#     """
#     A ``ZenpyException`` is raised for internal errors.
#     """
# 
# Path: zenpy/lib/util.py
# def is_iterable_but_not_string(obj):
#     """
#     Determine whether or not obj is iterable but not a string (eg, a list, set, tuple etc).
#     """
#     return hasattr(obj, '__iter__') and not isinstance(
#         obj, str) and not isinstance(obj, bytes)
# 
# def to_unix_ts(start_time):
#     """Given a datetime object, returns its value as a unix timestamp"""
#     if isinstance(start_time, datetime):
#         if is_timezone_aware(start_time):
#             start_time = start_time.astimezone(pytz.utc)
#         else:
#             log.warning(
#                 "Non timezone-aware datetime object passed to IncrementalEndpoint. "
#                 "The Zendesk API expects UTC time, if this is not the case results will be incorrect!"
#             )
#         unix_time = calendar.timegm(start_time.timetuple())
#     else:
#         unix_time = start_time
# 
#     return int(unix_time)


import logging
from datetime import date
from datetime import datetime
from requests.utils import quote
from zenpy.lib.exception import ZenpyException
from zenpy.lib.util import is_iterable_but_not_string, to_unix_ts
    from urllib import urlencode
    from urlparse import urlunsplit, SplitResult
    from urllib.parse import urlencode
    from urllib.parse import urlunsplit, SplitResult
    """
    def __call__(self, **kwargs):
        parameters = {}
        path = self.endpoint
        for key, value in kwargs.items():
            if key == 'id':
                path += "/{}.json".format(value)
            elif key == 'ids':
                path += '/show_many.json'
                parameters[key] = ",".join(map(str, value))
            elif key == 'destroy_ids':
                path += '/destroy_many.json'
                parameters['ids'] = ",".join(map(str, value))
            elif key == 'create_many':
                path += '/create_many.json'
            elif key == '/create_or_update_many':
                path = self.endpoint
            elif key == 'recover_ids':
                path += '/recover_many.json'
                parameters[key] = ",".join(map(str, value))
            elif key == 'update_many':
                path += '/update_many.json'
            elif key == 'count_many':
                path += '/count_many.json'
                parameters[key] = ",".join(map(str, value))
            elif key == 'external_id' and path == 'tickets':
                parameters[key] = value
            elif key in ('external_id', 'external_ids'):
                external_ids = [
                    value

# Path: zenpy/lib/exception.py
# class ZenpyException(Exception):
#     """
#     A ``ZenpyException`` is raised for internal errors.
#     """
# 
# Path: zenpy/lib/util.py
# def is_iterable_but_not_string(obj):
#     """
#     Determine whether or not obj is iterable but not a string (eg, a list, set, tuple etc).
#     """
#     return hasattr(obj, '__iter__') and not isinstance(
#         obj, str) and not isinstance(obj, bytes)
# 
# def to_unix_ts(start_time):
#     """Given a datetime object, returns its value as a unix timestamp"""
#     if isinstance(start_time, datetime):
#         if is_timezone_aware(start_time):
#             start_time = start_time.astimezone(pytz.utc)
#         else:
#             log.warning(
#                 "Non timezone-aware datetime object passed to IncrementalEndpoint. "
#                 "The Zendesk API expects UTC time, if this is not the case results will be incorrect!"
#             )
#         unix_time = calendar.timegm(start_time.timetuple())
#     else:
#         unix_time = start_time
# 
#     return int(unix_time)


# Path: zenpy/lib/endpoint.py
import logging
from datetime import date
from datetime import datetime
from requests.utils import quote
from zenpy.lib.exception import ZenpyException
from zenpy.lib.util import is_iterable_but_not_string, to_unix_ts
    from urllib import urlencode
    from urlparse import urlunsplit, SplitResult
    from urllib.parse import urlencode
    from urllib.parse import urlunsplit, SplitResult

    """
    def __call__(self, **kwargs):
        parameters = {}
        path = self.endpoint
        for key, value in kwargs.items():
            if key == 'id':
                path += "/{}.json".format(value)
            elif key == 'ids':
                path += '/show_many.json'
                parameters[key] = ",".join(map(str, value))
            elif key == 'destroy_ids':
                path += '/destroy_many.json'
                parameters['ids'] = ",".join(map(str, value))
            elif key == 'create_many':
                path += '/create_many.json'
            elif key == '/create_or_update_many':
                path = self.endpoint
            elif key == 'recover_ids':
                path += '/recover_many.json'
                parameters[key] = ",".join(map(str, value))
            elif key == 'update_many':
                path += '/update_many.json'
            elif key == 'count_many':
                path += '/count_many.json'
                parameters[key] = ",".join(map(str, value))
            elif key == 'external_id' and path == 'tickets':
                parameters[key] = value
            elif key in ('external_id', 'external_ids'):
                external_ids = [
                    value

                ] if not is_iterable_but_not_string(value) else value