def test_remove_expired_tickets(): lock = TicketLock("random id 1") # issue one long- and one short-lived ticket _ = list(map(lock.issue_ticket, [k for k in [0.01, 10]])) # both tickets are there assert len(lock.tickets) == 2 # sleep and only one ticket should be left time.sleep(0.02) lock.remove_expired_tickets() assert len(lock.tickets) == 1
def get_lock(self, conversation_id: Text) -> Optional[TicketLock]: """Retrieves lock (see parent docstring for more information).""" serialised_lock = self.red.get(self.key_prefix + conversation_id) if serialised_lock: return TicketLock.from_dict(json.loads(serialised_lock)) return None
def test_issue_ticket(): lock = TicketLock("random id 0") # no lock issued assert lock.last_issued == -1 assert lock.now_serving == 0 # no one is waiting assert not lock.is_someone_waiting() # issue ticket ticket = lock.issue_ticket(1) assert ticket == 0 assert lock.last_issued == 0 assert lock.now_serving == 0 # someone is waiting assert lock.is_someone_waiting()
def create_lock(conversation_id: Text) -> TicketLock: """Create a new `TicketLock` for `conversation_id`.""" return TicketLock(conversation_id)
def save_lock(self, lock: TicketLock) -> None: self.red.set(lock.conversation_id, lock.dumps())
def get_lock(self, conversation_id: Text) -> Optional[TicketLock]: serialised_lock = self.red.get(conversation_id) if serialised_lock: return TicketLock.from_dict(json.loads(serialised_lock))