File: dragonfly_mixin.py

package info (click to toggle)
python-fakeredis 2.29.0-4
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 1,772 kB
  • sloc: python: 19,002; sh: 8; makefile: 5
file content (24 lines) | stat: -rw-r--r-- 894 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
from typing import Callable

from fakeredis._commands import command, Key, Int, CommandItem
from fakeredis._helpers import Database, current_time
from fakeredis.model import ExpiringMembersSet


class DragonflyCommandsMixin(object):
    _expireat: Callable[[CommandItem, int], int]

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self._db: Database

    @command(name="SADDEX", fixed=(Key(ExpiringMembersSet), Int, bytes), repeat=(bytes,), server_types=("dragonfly",))
    def saddex(self, key: CommandItem, seconds: int, *members: bytes) -> int:
        val = key.value
        old_size = len(val)
        new_members = set(members) - set(val)
        expire_at_ms = current_time() + seconds * 1000
        for member in new_members:
            val.set_member_expireat(member, expire_at_ms)
        key.updated()
        return len(val) - old_size