From eac3a34d162aa83c3094cbab80d535ca92fdf972 Mon Sep 17 00:00:00 2001 From: dogukanteber <47397379+dogukanteber@users.noreply.github.com> Date: Mon, 14 Mar 2022 16:03:06 +0300 Subject: Add support for EXPIREAT command's options (#2024) * Add support for EXPIREAT command's options * Fix linter errors * Make changes on method arguments * Fix linter errors * add variables to the function header Co-authored-by: Chayim Co-authored-by: dvora-h --- redis/commands/core.py | 34 ++++++++++++++++++++++++++++++---- 1 file changed, 30 insertions(+), 4 deletions(-) (limited to 'redis/commands/core.py') diff --git a/redis/commands/core.py b/redis/commands/core.py index 108da1b..5b6d42b 100644 --- a/redis/commands/core.py +++ b/redis/commands/core.py @@ -1538,16 +1538,42 @@ class BasicKeyCommands(CommandsProtocol): return self.execute_command("EXPIRE", name, time, *exp_option) - def expireat(self, name: KeyT, when: AbsExpiryT) -> ResponseT: + def expireat( + self, + name: KeyT, + when: AbsExpiryT, + nx: bool = False, + xx: bool = False, + gt: bool = False, + lt: bool = False, + ) -> ResponseT: """ - Set an expire flag on key ``name``. ``when`` can be represented - as an integer indicating unix time or a Python datetime object. + Set an expire flag on key ``name`` with given ``option``. ``when`` + can be represented as an integer indicating unix time or a Python + datetime object. + + Valid options are: + -> NX -- Set expiry only when the key has no expiry + -> XX -- Set expiry only when the key has an existing expiry + -> GT -- Set expiry only when the new expiry is greater than current one + -> LT -- Set expiry only when the new expiry is less than current one For more information check https://redis.io/commands/expireat """ if isinstance(when, datetime.datetime): when = int(time.mktime(when.timetuple())) - return self.execute_command("EXPIREAT", name, when) + + exp_option = list() + if nx: + exp_option.append("NX") + if xx: + exp_option.append("XX") + if gt: + exp_option.append("GT") + if lt: + exp_option.append("LT") + + return self.execute_command("EXPIREAT", name, when, *exp_option) def expiretime(self, key: str) -> int: """ -- cgit v1.2.1