docs: def _acquire_lock(self, key: str, session_id: str, seconds_to_lock: float, metadata: Any) \
              -> Optional[ConnectedConsulLockInformation]:
          """
          Attempts to get the lock using the given session.
          :param key: name of the lock
          :param session_id: the identifier of the Consul session that should try to hold the lock
          :param seconds_to_lock: the number of seconds it took to acquire the lock
          :param metadata: metadata to add to the lock information
          :return: details about the lock if acquired, else `None`
          :raises SessionLostConsulError: if the Consul session is lost
          """
          lock_information = ConnectedConsulLockInformation(
              self, key, session_id, datetime.utcnow(), seconds_to_lock, metadata)
          value = json.dumps(lock_information, cls=ConsulLockInformationJSONEncoder, indent=4, sort_keys=True)
          logger.debug(f"Attempting to acquire lock with value: {value}")
          try:
              success = self.consul_client.kv.put(key=key, value=value, acquire=session_id)
          except ConsulException as e:
              if "invalid session" in e.args[0]:
                  raise SessionLostConsulError() from e
              raise e
          return lock_information if success else None