@@ -5475,11 +5475,7 @@ def __init__(self, registered_client: "redis.client.Redis", script: ScriptTextT)
5475
5475
if isinstance (script , str ):
5476
5476
# We need the encoding from the client in order to generate an
5477
5477
# 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 ()
5483
5479
script = encoder .encode (script )
5484
5480
self .sha = hashlib .sha1 (script ).hexdigest ()
5485
5481
@@ -5510,6 +5506,24 @@ def __call__(
5510
5506
self .sha = client .script_load (self .script )
5511
5507
return client .evalsha (self .sha , len (keys ), * args )
5512
5508
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
+
5513
5527
5514
5528
class AsyncScript :
5515
5529
"""
@@ -6293,62 +6307,6 @@ def command(self) -> ResponseT:
6293
6307
return self .execute_command ("COMMAND" )
6294
6308
6295
6309
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
-
6352
6310
class AsyncModuleCommands (ModuleCommands ):
6353
6311
async def command_info (self ) -> None :
6354
6312
return super ().command_info ()
0 commit comments