Look up existing items by thing_id (fullname) or url.

        :param url: A url to lookup.
        :param thing_id: A single thing_id, or a list of thing_ids. A thing_id
            can be any one of Comment (``t1_``), Link (``t3_``), or Subreddit
            (``t5_``) to lookup by fullname.
        :returns: When a single ``thing_id`` is provided, return the
            corresponding thing object, or ``None`` if not found. When a list
            of ``thing_id``s or a ``url`` is provided return a list of thing
            objects (up to ``limit``). ``None`` is returned if all of the
            thing_ids or the URL is invalid.

        The additional parameters are passed into :meth:`.get_content` after
        the `params` parameter is exctracted and used to update the dictionary
        of url parameters this function sends. Note: the `url` parameter
        cannot be altered.

        Also, if using thing_id and the `limit` parameter passed to
        :meth:`.get_content` is used to slice the list of retreived things
        before returning it to the user, for when `limit > 100` and
        `(limit % 100) > 0`, to ensure a maximum of `limit` thigns are
        returned.

def get_info(self, url=None, thing_id=None, *args, **kwargs):
        """Look up existing items by thing_id (fullname) or url.

        :param url: A url to lookup.
        :param thing_id: A single thing_id, or a list of thing_ids. A thing_id
            can be any one of Comment (``t1_``), Link (``t3_``), or Subreddit
            (``t5_``) to lookup by fullname.
        :returns: When a single ``thing_id`` is provided, return the
            corresponding thing object, or ``None`` if not found. When a list
            of ``thing_id``s or a ``url`` is provided return a list of thing
            objects (up to ``limit``). ``None`` is returned if all of the
            thing_ids or the URL is invalid.

        The additional parameters are passed into :meth:`.get_content` after
        the `params` parameter is exctracted and used to update the dictionary
        of url parameters this function sends. Note: the `url` parameter
        cannot be altered.

        Also, if using thing_id and the `limit` parameter passed to
        :meth:`.get_content` is used to slice the list of retreived things
        before returning it to the user, for when `limit > 100` and
        `(limit % 100) > 0`, to ensure a maximum of `limit` thigns are
        returned.

        """
        if bool(url) == bool(thing_id):
            raise TypeError('Only one of url or thing_id is required!')

        # In these cases, we will have a list of things to return.
        # Otherwise, it will just be one item.
        if isinstance(thing_id, six.string_types) and ',' in thing_id:
            thing_id = thing_id.split(',')
        return_list = bool(url) or not isinstance(thing_id, six.string_types)

        if url:
            param_groups = [{'url': url}]
        else:
            if isinstance(thing_id, six.string_types):
                thing_id = [thing_id]
            id_chunks = chunk_sequence(thing_id, 100)
            param_groups = [{'id': ','.join(id_chunk)} for
                            id_chunk in id_chunks]

        items = []
        update_with = kwargs.pop('params', {})
        for param_group in param_groups:
            param_group.update(update_with)
            kwargs['params'] = param_group
            chunk = self.get_content(self.config['info'], *args, **kwargs)
            items.extend(list(chunk))

        # if using ids, manually set the limit
        if kwargs.get('limit'):
            items = items[:kwargs['limit']]

        if return_list:
            return items if items else None
        elif items:
            return items[0]
        else:
            return None