code: def kick_drawer(self, port=0, **kwargs):
          
          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)
docs: 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.