def fetch(self, callback):
        """
        Perform a full synchronization flow.

        .. code-block:: python
            :linenos:

            >>> client = basecrm.Client(access_token='<YOUR_PERSONAL_ACCESS_TOKEN>')
            >>> sync = basecrm.Sync(client=client, device_uuid='<YOUR_DEVICES_UUID>')
            >>> sync.fetch(lambda meta, data: basecrm.Sync.ACK)

        :param callback: Callback that will be called for every item in a queue.
            Takes two input arguments: synchronization meta data and assodicated data.
            It must return either ack or nack.
        """

        # Set up a new synchronization session for a given device's UUID
        session = self.client.sync.start(self.device_uuid)

        # Check if there is anything to synchronize
        if session is None or 'id' not in session:
            return

        # Drain the main queue until there is no more data (empty array)
        while True:
            # Fetch the main queue
            queue_items = self.client.sync.fetch(self.device_uuid, session['id'])

            # nothing more to synchronize ?
            if not queue_items:
                break

            # let client know about both data and meta
            ack_keys = []

            for item in queue_items:
                if callback(item['meta'], item['data']):
                    ack_keys.append(item['meta']['sync']['ack_key'])

            # As we fetch new data, we need to send acknowledgement keys
            # if any ..
            if ack_keys:
                self.client.sync.ack(self.device_uuid, ack_keys)
Perform a full synchronization flow.

        .. code-block:: python
            :linenos:

            >>> client = basecrm.Client(access_token='<YOUR_PERSONAL_ACCESS_TOKEN>')
            >>> sync = basecrm.Sync(client=client, device_uuid='<YOUR_DEVICES_UUID>')
            >>> sync.fetch(lambda meta, data: basecrm.Sync.ACK)

        :param callback: Callback that will be called for every item in a queue.
            Takes two input arguments: synchronization meta data and assodicated data.
            It must return either ack or nack.