@@ -5475,11 +5475,7 @@ def __init__(self, registered_client: "redis.client.Redis", script: ScriptTextT)
54755475        if  isinstance (script , str ):
54765476            # We need the encoding from the client in order to generate an 
54775477            # accurate byte representation of the script 
5478-             try :
5479-                 encoder  =  registered_client .connection_pool .get_encoder ()
5480-             except  AttributeError :
5481-                 # Cluster 
5482-                 encoder  =  registered_client .get_encoder ()
5478+             encoder  =  self .get_encoder ()
54835479            script  =  encoder .encode (script )
54845480        self .sha  =  hashlib .sha1 (script ).hexdigest ()
54855481
@@ -5510,6 +5506,24 @@ def __call__(
55105506            self .sha  =  client .script_load (self .script )
55115507            return  client .evalsha (self .sha , len (keys ), * args )
55125508
5509+     def  get_encoder (self ):
5510+         """Get the encoder to encode string scripts into bytes.""" 
5511+         try :
5512+             return  self .registered_client .get_encoder ()
5513+         except  AttributeError :
5514+             # DEPRECATED 
5515+             # In version <=4.1.2, this was the code we used to get the encoder. 
5516+             # However, after 4.1.2 we added support for scripting in clustered 
5517+             # redis. ClusteredRedis doesn't have a `.connection_pool` attribute 
5518+             # so we changed the Script class to use 
5519+             # `self.registered_client.get_encoder` (see above). 
5520+             # However, that is technically a breaking change, as consumers who 
5521+             # use Scripts directly might inject a `registered_client` that 
5522+             # doesn't have a `.get_encoder` field. This try/except prevents us 
5523+             # from breaking backward-compatibility. Ideally, it would be 
5524+             # removed in the next major release. 
5525+             return  self .registered_client .connection_pool .get_encoder ()
5526+ 
55135527
55145528class  AsyncScript :
55155529    """ 
@@ -6293,62 +6307,6 @@ def command(self) -> ResponseT:
62936307        return  self .execute_command ("COMMAND" )
62946308
62956309
6296- class  Script :
6297-     """ 
6298-     An executable Lua script object returned by ``register_script`` 
6299-     """ 
6300- 
6301-     def  __init__ (self , registered_client , script ):
6302-         self .registered_client  =  registered_client 
6303-         self .script  =  script 
6304-         # Precalculate and store the SHA1 hex digest of the script. 
6305- 
6306-         if  isinstance (script , str ):
6307-             # We need the encoding from the client in order to generate an 
6308-             # accurate byte representation of the script 
6309-             encoder  =  self .get_encoder ()
6310-             script  =  encoder .encode (script )
6311-         self .sha  =  hashlib .sha1 (script ).hexdigest ()
6312- 
6313-     def  __call__ (self , keys = [], args = [], client = None ):
6314-         "Execute the script, passing any required ``args``" 
6315-         if  client  is  None :
6316-             client  =  self .registered_client 
6317-         args  =  tuple (keys ) +  tuple (args )
6318-         # make sure the Redis server knows about the script 
6319-         from  redis .client  import  Pipeline 
6320- 
6321-         if  isinstance (client , Pipeline ):
6322-             # Make sure the pipeline can register the script before executing. 
6323-             client .scripts .add (self )
6324-         try :
6325-             return  client .evalsha (self .sha , len (keys ), * args )
6326-         except  NoScriptError :
6327-             # Maybe the client is pointed to a different server than the client 
6328-             # that created this instance? 
6329-             # Overwrite the sha just in case there was a discrepancy. 
6330-             self .sha  =  client .script_load (self .script )
6331-             return  client .evalsha (self .sha , len (keys ), * args )
6332- 
6333-     def  get_encoder (self ):
6334-         """Get the encoder to encode string scripts into bytes.""" 
6335-         try :
6336-             return  self .registered_client .get_encoder ()
6337-         except  AttributeError :
6338-             # DEPRECATED 
6339-             # In version <=4.1.2, this was the code we used to get the encoder. 
6340-             # However, after 4.1.2 we added support for scripting in clustered 
6341-             # redis. ClusteredRedis doesn't have a `.connection_pool` attribute 
6342-             # so we changed the Script class to use 
6343-             # `self.registered_client.get_encoder` (see above). 
6344-             # However, that is technically a breaking change, as consumers who 
6345-             # use Scripts directly might inject a `registered_client` that 
6346-             # doesn't have a `.get_encoder` field. This try/except prevents us 
6347-             # from breaking backward-compatibility. Ideally, it would be 
6348-             # removed in the next major release. 
6349-             return  self .registered_client .connection_pool .get_encoder ()
6350- 
6351- 
63526310class  AsyncModuleCommands (ModuleCommands ):
63536311    async  def  command_info (self ) ->  None :
63546312        return  super ().command_info ()
0 commit comments