@@ -5055,6 +5055,64 @@ def hsetnx(self, name: str, key: str, value: str) -> Union[Awaitable[bool], bool
50555055 """
50565056 return self .execute_command ("HSETNX" , name , key , value )
50575057
5058+ def hsetex (
5059+ self ,
5060+ name : str ,
5061+ key : Optional [str ] = None ,
5062+ value : Optional [str ] = None ,
5063+ mapping : Optional [dict ] = None ,
5064+ items : Optional [list ] = None ,
5065+ ex : Union [ExpiryT , None ] = None ,
5066+ px : Union [ExpiryT , None ] = None ,
5067+ exat : Union [AbsExpiryT , None ] = None ,
5068+ pxat : Union [AbsExpiryT , None ] = None ,
5069+ nx : bool = False ,
5070+ xx : bool = False ,
5071+ fnx : bool = False ,
5072+ fxx : bool = False ,
5073+ ) -> Union [Awaitable [bool ], bool ]:
5074+ """
5075+ Set key to value within hash ``name``,
5076+ ``mapping`` accepts a dict of key/value pairs to be added to hash ``name``.
5077+ ``items`` accepts a list of key/value pairs to be added to hash ``name``.
5078+ Set expiration options for the hash fields.
5079+ """
5080+
5081+ if key is None and not mapping and not items :
5082+ raise DataError ("'hsetex' with no key value pairs" )
5083+ pieces = []
5084+ if ex is not None :
5085+ pieces .extend (["EX" , ex ])
5086+ if px is not None :
5087+ pieces .extend (["PX" , px ])
5088+ if exat is not None :
5089+ pieces .extend (["EXAT" , exat ])
5090+ if pxat is not None :
5091+ pieces .extend (["PXAT" , pxat ])
5092+ if nx :
5093+ pieces .append ("NX" )
5094+ if xx :
5095+ pieces .append ("XX" )
5096+ if fnx :
5097+ pieces .append ("FNX" )
5098+ if fxx :
5099+ pieces .append ("FXX" )
5100+ pieces .append ("FIELDS" )
5101+ if key is not None and value is not None :
5102+ pieces .append (1 ) # for one field
5103+ pieces .append (key )
5104+ pieces .append (value )
5105+ if mapping :
5106+ pieces .append (len (mapping ))
5107+ for key , value in mapping .items ():
5108+ pieces .append (key )
5109+ pieces .append (value )
5110+ if items :
5111+ pieces .append (len (items ) // 2 )
5112+ pieces .extend (items )
5113+
5114+ return self .execute_command ("HSETEX" , name , * pieces )
5115+
50585116 def hmset (self , name : str , mapping : dict ) -> Union [Awaitable [str ], str ]:
50595117 """
50605118 Set key to value within hash ``name`` for each corresponding
0 commit comments