<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def kick_drawer(self, port=0, **kwargs):
 """Kick drawer connected to the given port. In this implementation, cash drawers are identified according to the port in which they are connected. This relation between drawers and ports does not exists in the ESC/POS specification and it is just a design decision to normalize cash drawers handling. From the user application perspective, drawers are simply connected to port 0, 1, 2, and so on. If printer does not have this feature then no exception should be raised. :param int number: The port number to kick drawer (default is ``0``). :raises CashDrawerException: If given port does not exists. """

        if self.hardware_features.get(feature.CASHDRAWER_PORTS, False):
            # if feature is available assume at least one port is available
            max_ports = self.hardware_features.get(
                    feature.CASHDRAWER_AVAILABLE_PORTS, 1)

            if port not in range(max_ports):
                raise CashDrawerException('invalid cash drawer port: {!r} '
                        '(available ports are {!r})'.format(
                                port, range(max_ports)))

            return self._kick_drawer_impl(port=port, **kwargs)