<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:

def order_by(self, key_selector=identity):
        '''Sorts by a key in ascending order.

        Introduces a primary sorting order to the sequence. Additional sort
        criteria should be specified by subsequent calls to then_by() and
        then_by_descending().  Calling order_by() or order_by_descending() on
        the results of a call to order_by() will introduce a new primary
        ordering which will override any already established ordering.

        This method performs a stable sort. The order of two elements with the
        same key will be preserved.

        Note: This method uses deferred execution.

        Args:
            key_selector: A unary function which extracts a key from each
                element using which the result will be ordered.

        Returns:
            An OrderedQueryable over the sorted elements.

        Raises:
            ValueError: If the Queryable is closed.
            TypeError: If the key_selector is not callable.
        '''
        if self.closed():
            raise ValueError("Attempt to call order_by() on a "
                             "closed Queryable.")

        if not is_callable(key_selector):
            raise TypeError("order_by() parameter key_selector={key_selector} "
                    "is not callable".format(key_selector=repr(key_selector)))

        return self._create_ordered(iter(self), -1, key_selector)