docs: def cache(self, con):
          """Put a dedicated connection back into the idle cache."""
          if self._maxusage and con.usage_count > self._maxusage:
              self._connections -=1
              logging.debug('dropping connection %s uses past max usage %s' % (con.usage_count, self._maxusage))
              con._close()
              return
          self._condition.acquire()
          if con in self._idle_cache:
              # called via socket close on a connection in the idle cache
              self._condition.release()
              return
          try:
              if not self._maxcached or len(self._idle_cache) < self._maxcached:
                  # the idle cache is not full, so put it there
                  self._idle_cache.append(con)
              else: # if the idle cache is already full,
                  logging.debug('dropping connection. connection pool (%s) is full. maxcached %s' % (len(self._idle_cache), self._maxcached))
                  con._close() # then close the connection
              self._condition.notify()
          finally:
              self._connections -= 1
              self._condition.release()