docs: def acquire(self, uuid_path, subnet=None):
          """
          Lease a free subnet for the given uuid path.
          If subnet is given, try to lease that subnet, otherwise try to lease a
          free subnet.
  
          Args:
              uuid_path (str): Path to the uuid file of a :class:`lago.Prefix`
              subnet (str): A subnet to lease.
          Returns:
              netaddr.IPAddress: An object which represents the subnet.
  
          Raises:
              LagoSubnetLeaseException:
                  1. If this store is full
                  2. If the requested subnet is already taken.
              LagoSubnetLeaseLockException:
                  If the lock to self.path can't be acquired.
          """
          try:
              with self._create_lock():
                  if subnet:
                      LOGGER.debug('Trying to acquire subnet {}'.format(subnet))
                      acquired_subnet = self._acquire_given_subnet(
                          uuid_path, subnet
                      )
                  else:
                      LOGGER.debug('Trying to acquire a free subnet')
                      acquired_subnet = self._acquire(uuid_path)
  
                  return acquired_subnet
          except (utils.TimerException, IOError):
              raise LagoSubnetLeaseLockException(self.path)