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