Insert all the specified values at the head of the list stored at key.

        :param key: The list's key
        :type key: :class:`str`, :class:`bytes`
        :param values: One or more positional arguments to insert at the
            beginning of the list.  Each value is inserted at the beginning
            of the list individually (see discussion below).
        :returns: the length of the list after push operations
        :rtype: int
        :raises: :exc:`~tredis.exceptions.TRedisException`

        If `key` does not exist, it is created as empty list before
        performing the push operations. When key holds a value that is not a
        list, an error is returned.

        It is possible to push multiple elements using a single command call
        just specifying multiple arguments at the end of the command.
        Elements are inserted one after the other to the head of the list,
        from the leftmost element to the rightmost element. So for instance
        ``client.lpush('mylist', 'a', 'b', 'c')`` will result into a list
        containing ``c`` as first element, ``b`` as second element and ``a``
        as third element.

        .. note::

           **Time complexity**: ``O(1)``

def lpush(self, key, *values):
        """
        Insert all the specified values at the head of the list stored at key.

        :param key: The list's key
        :type key: :class:`str`, :class:`bytes`
        :param values: One or more positional arguments to insert at the
            beginning of the list.  Each value is inserted at the beginning
            of the list individually (see discussion below).
        :returns: the length of the list after push operations
        :rtype: int
        :raises: :exc:`~tredis.exceptions.TRedisException`

        If `key` does not exist, it is created as empty list before
        performing the push operations. When key holds a value that is not a
        list, an error is returned.

        It is possible to push multiple elements using a single command call
        just specifying multiple arguments at the end of the command.
        Elements are inserted one after the other to the head of the list,
        from the leftmost element to the rightmost element. So for instance
        ``client.lpush('mylist', 'a', 'b', 'c')`` will result into a list
        containing ``c`` as first element, ``b`` as second element and ``a``
        as third element.

        .. note::

           **Time complexity**: ``O(1)``

        """
        return self._execute([b'LPUSH', key] + list(values))