valkey-glide 2.0.1__cp310-cp310-macosx_11_0_arm64.whl → 2.1.0__cp310-cp310-macosx_11_0_arm64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of valkey-glide might be problematic. Click here for more details.

Files changed (43) hide show
  1. glide/__init__.py +95 -119
  2. glide/async_commands/cluster_commands.py +11 -11
  3. glide/async_commands/core.py +537 -414
  4. glide/async_commands/{server_modules/ft.py → ft.py} +8 -7
  5. glide/async_commands/{server_modules/glide_json.py → glide_json.py} +15 -92
  6. glide/async_commands/standalone_commands.py +31 -11
  7. glide/glide.cpython-310-darwin.so +0 -0
  8. glide/glide.pyi +1 -1
  9. glide/glide_client.py +39 -46
  10. glide/logger.py +3 -3
  11. glide/opentelemetry.py +8 -4
  12. glide_shared/__init__.py +326 -0
  13. {glide/async_commands → glide_shared/commands}/batch.py +396 -10
  14. {glide/async_commands → glide_shared/commands}/batch_options.py +1 -1
  15. glide_shared/commands/core_options.py +407 -0
  16. {glide/async_commands → glide_shared/commands}/server_modules/ft_options/ft_aggregate_options.py +3 -3
  17. {glide/async_commands → glide_shared/commands}/server_modules/ft_options/ft_create_options.py +4 -2
  18. {glide/async_commands → glide_shared/commands}/server_modules/ft_options/ft_profile_options.py +4 -4
  19. {glide/async_commands → glide_shared/commands}/server_modules/ft_options/ft_search_options.py +4 -2
  20. {glide/async_commands → glide_shared/commands}/server_modules/json_batch.py +4 -4
  21. glide_shared/commands/server_modules/json_options.py +93 -0
  22. {glide/async_commands → glide_shared/commands}/sorted_set.py +2 -2
  23. {glide/async_commands → glide_shared/commands}/stream.py +1 -1
  24. {glide → glide_shared}/config.py +83 -48
  25. {glide → glide_shared}/constants.py +3 -3
  26. {glide → glide_shared}/exceptions.py +27 -1
  27. glide_shared/protobuf/command_request_pb2.py +54 -0
  28. {glide → glide_shared}/routes.py +29 -15
  29. {valkey_glide-2.0.1.dist-info → valkey_glide-2.1.0.dist-info}/METADATA +119 -58
  30. valkey_glide-2.1.0.dist-info/RECORD +39 -0
  31. glide/protobuf/command_request_pb2.py +0 -54
  32. glide/protobuf/command_request_pb2.pyi +0 -1193
  33. glide/protobuf/connection_request_pb2.pyi +0 -299
  34. glide/protobuf/response_pb2.pyi +0 -106
  35. valkey_glide-2.0.1.dist-info/RECORD +0 -39
  36. /glide/py.typed → /glide_shared/commands/__init__.py +0 -0
  37. {glide/async_commands → glide_shared/commands}/bitmap.py +0 -0
  38. {glide/async_commands → glide_shared/commands}/command_args.py +0 -0
  39. {glide/async_commands → glide_shared/commands}/server_modules/ft_options/ft_constants.py +0 -0
  40. {glide → glide_shared}/protobuf/connection_request_pb2.py +0 -0
  41. {glide → glide_shared}/protobuf/response_pb2.py +0 -0
  42. {glide → glide_shared}/protobuf_codec.py +0 -0
  43. {valkey_glide-2.0.1.dist-info → valkey_glide-2.1.0.dist-info}/WHEEL +0 -0
@@ -6,12 +6,18 @@ from dataclasses import dataclass
6
6
  from enum import Enum, IntEnum
7
7
  from typing import Any, Callable, Dict, List, Optional, Set, Tuple, Union
8
8
 
9
- from glide.async_commands.core import CoreCommands
10
- from glide.exceptions import ConfigurationError
11
- from glide.protobuf.connection_request_pb2 import ConnectionRequest
12
- from glide.protobuf.connection_request_pb2 import ProtocolVersion as SentProtocolVersion
13
- from glide.protobuf.connection_request_pb2 import ReadFrom as ProtobufReadFrom
14
- from glide.protobuf.connection_request_pb2 import TlsMode
9
+ from glide_shared.commands.core_options import PubSubMsg
10
+ from glide_shared.exceptions import ConfigurationError
11
+ from glide_shared.protobuf.connection_request_pb2 import (
12
+ ConnectionRequest,
13
+ )
14
+ from glide_shared.protobuf.connection_request_pb2 import (
15
+ ProtocolVersion as SentProtocolVersion,
16
+ )
17
+ from glide_shared.protobuf.connection_request_pb2 import ReadFrom as ProtobufReadFrom
18
+ from glide_shared.protobuf.connection_request_pb2 import (
19
+ TlsMode,
20
+ )
15
21
 
16
22
 
17
23
  class NodeAddress:
@@ -73,7 +79,7 @@ class BackoffStrategy:
73
79
  """
74
80
  Represents the strategy used to determine how and when to reconnect, in case of connection failures.
75
81
  The time between attempts grows exponentially, to the formula rand(0 .. factor * (exponentBase ^ N)), where N
76
- is the number of failed attempts, and `rand(...)` applies a jitter of up to `jitter_percent`% to introduce randomness and reduce retry storms.
82
+ is the number of failed attempts, and rand(...) applies a jitter of up to jitter_percent% to introduce randomness and reduce retry storms.
77
83
  Once the maximum value is reached, that will remain the time between retry attempts until a reconnect attempt is
78
84
  successful.
79
85
  The client will attempt to reconnect indefinitely.
@@ -83,6 +89,7 @@ class BackoffStrategy:
83
89
  where the time between retries increases. Once the retries have reached the maximum value, the time between
84
90
  retries will remain constant until a reconnect attempt is succesful.
85
91
  factor (int): The multiplier that will be applied to the waiting time between each retry.
92
+ This value is specified in milliseconds.
86
93
  exponent_base (int): The exponent base configured for the strategy.
87
94
  jitter_percent (Optional[int]): The Jitter percent on the calculated duration. If not set, a default value will be used.
88
95
  """
@@ -223,9 +230,9 @@ class BaseClientConfiguration:
223
230
  For example::
224
231
 
225
232
  [
226
- {address:sample-address-0001.use1.cache.amazonaws.com, port:6379},
227
- {address: sample-address-0002.use2.cache.amazonaws.com, port:6379}
228
- ].
233
+ NodeAddress("sample-address-0001.use1.cache.amazonaws.com", 6379),
234
+ NodeAddress("sample-address-0002.use1.cache.amazonaws.com", 6379)
235
+ ]
229
236
 
230
237
  use_tls (bool): True if communication with the cluster should use Transport Level Security.
231
238
  Should match the TLS configuration of the server/cluster, otherwise the connection attempt will fail.
@@ -242,6 +249,8 @@ class BaseClientConfiguration:
242
249
  reconnect_strategy (Optional[BackoffStrategy]): Strategy used to determine how and when to reconnect, in case of
243
250
  connection failures.
244
251
  If not set, a default backoff strategy will be used.
252
+ database_id (Optional[int]): Index of the logical database to connect to.
253
+ Must be a non-negative integer.If not set, the client will connect to database 0.
245
254
  client_name (Optional[str]): Client name to be used for the client. Will be used with CLIENT SETNAME command
246
255
  during connection establishment.
247
256
  protocol (ProtocolVersion): Serialization protocol to be used. If not set, `RESP3` will be used.
@@ -285,6 +294,7 @@ class BaseClientConfiguration:
285
294
  read_from: ReadFrom = ReadFrom.PRIMARY,
286
295
  request_timeout: Optional[int] = None,
287
296
  reconnect_strategy: Optional[BackoffStrategy] = None,
297
+ database_id: Optional[int] = None,
288
298
  client_name: Optional[str] = None,
289
299
  protocol: ProtocolVersion = ProtocolVersion.RESP3,
290
300
  inflight_requests_limit: Optional[int] = None,
@@ -298,6 +308,7 @@ class BaseClientConfiguration:
298
308
  self.read_from = read_from
299
309
  self.request_timeout = request_timeout
300
310
  self.reconnect_strategy = reconnect_strategy
311
+ self.database_id = database_id
301
312
  self.client_name = client_name
302
313
  self.protocol = protocol
303
314
  self.inflight_requests_limit = inflight_requests_limit
@@ -315,6 +326,39 @@ class BaseClientConfiguration:
315
326
  "client_az must be set when read_from is set to AZ_AFFINITY_REPLICAS_AND_PRIMARY"
316
327
  )
317
328
 
329
+ def _set_addresses_in_request(self, request: ConnectionRequest) -> None:
330
+ """Set addresses in the protobuf request."""
331
+ for address in self.addresses:
332
+ address_info = request.addresses.add()
333
+ address_info.host = address.host
334
+ address_info.port = address.port
335
+
336
+ def _set_reconnect_strategy_in_request(self, request: ConnectionRequest) -> None:
337
+ """Set reconnect strategy in the protobuf request."""
338
+ if not self.reconnect_strategy:
339
+ return
340
+
341
+ request.connection_retry_strategy.number_of_retries = (
342
+ self.reconnect_strategy.num_of_retries
343
+ )
344
+ request.connection_retry_strategy.factor = self.reconnect_strategy.factor
345
+ request.connection_retry_strategy.exponent_base = (
346
+ self.reconnect_strategy.exponent_base
347
+ )
348
+ if self.reconnect_strategy.jitter_percent is not None:
349
+ request.connection_retry_strategy.jitter_percent = (
350
+ self.reconnect_strategy.jitter_percent
351
+ )
352
+
353
+ def _set_credentials_in_request(self, request: ConnectionRequest) -> None:
354
+ """Set credentials in the protobuf request."""
355
+ if not self.credentials:
356
+ return
357
+
358
+ if self.credentials.username:
359
+ request.authentication_info.username = self.credentials.username
360
+ request.authentication_info.password = self.credentials.password
361
+
318
362
  def _create_a_protobuf_conn_request(
319
363
  self, cluster_mode: bool = False
320
364
  ) -> ConnectionRequest:
@@ -328,44 +372,34 @@ class BaseClientConfiguration:
328
372
  ConnectionRequest: Protobuf ConnectionRequest.
329
373
  """
330
374
  request = ConnectionRequest()
331
- for address in self.addresses:
332
- address_info = request.addresses.add()
333
- address_info.host = address.host
334
- address_info.port = address.port
375
+
376
+ # Set basic configuration
377
+ self._set_addresses_in_request(request)
335
378
  request.tls_mode = TlsMode.SecureTls if self.use_tls else TlsMode.NoTls
336
379
  request.read_from = self.read_from.value
380
+ request.cluster_mode_enabled = cluster_mode
381
+ request.protocol = self.protocol.value
382
+
383
+ # Set optional configuration
337
384
  if self.request_timeout:
338
385
  request.request_timeout = self.request_timeout
339
- if self.reconnect_strategy:
340
- request.connection_retry_strategy.number_of_retries = (
341
- self.reconnect_strategy.num_of_retries
342
- )
343
- request.connection_retry_strategy.factor = self.reconnect_strategy.factor
344
- request.connection_retry_strategy.exponent_base = (
345
- self.reconnect_strategy.exponent_base
346
- )
347
- if self.reconnect_strategy.jitter_percent is not None:
348
- request.connection_retry_strategy.jitter_percent = (
349
- self.reconnect_strategy.jitter_percent
350
- )
351
386
 
352
- request.cluster_mode_enabled = True if cluster_mode else False
353
- if self.credentials:
354
- if self.credentials.username:
355
- request.authentication_info.username = self.credentials.username
356
- request.authentication_info.password = self.credentials.password
387
+ self._set_reconnect_strategy_in_request(request)
388
+ self._set_credentials_in_request(request)
389
+
357
390
  if self.client_name:
358
391
  request.client_name = self.client_name
359
- request.protocol = self.protocol.value
360
392
  if self.inflight_requests_limit:
361
393
  request.inflight_requests_limit = self.inflight_requests_limit
362
394
  if self.client_az:
363
395
  request.client_az = self.client_az
396
+ if self.database_id is not None:
397
+ request.database_id = self.database_id
364
398
  if self.advanced_config:
365
399
  self.advanced_config._create_a_protobuf_conn_request(request)
366
-
367
400
  if self.lazy_connect is not None:
368
401
  request.lazy_connect = self.lazy_connect
402
+
369
403
  return request
370
404
 
371
405
  def _is_pubsub_configured(self) -> bool:
@@ -373,7 +407,7 @@ class BaseClientConfiguration:
373
407
 
374
408
  def _get_pubsub_callback_and_context(
375
409
  self,
376
- ) -> Tuple[Optional[Callable[[CoreCommands.PubSubMsg, Any], None]], Any]:
410
+ ) -> Tuple[Optional[Callable[[PubSubMsg, Any], None]], Any]:
377
411
  return None, None
378
412
 
379
413
 
@@ -397,12 +431,12 @@ class GlideClientConfiguration(BaseClientConfiguration):
397
431
 
398
432
  Attributes:
399
433
  addresses (List[NodeAddress]): DNS Addresses and ports of known nodes in the cluster.
400
- Only nodes whose addresses were provided will be used by the client.
434
+ Only nodes whose addresses were provided will be used by the client.
401
435
  For example::
402
436
 
403
437
  [
404
- {address:sample-address-0001.use1.cache.amazonaws.com, port:6379},
405
- {address: sample-address-0002.use2.cache.amazonaws.com, port:6379}
438
+ NodeAddress("sample-address-0001.use1.cache.amazonaws.com", 6379),
439
+ NodeAddress("sample-address-0002.use1.cache.amazonaws.com", 6379)
406
440
  ]
407
441
 
408
442
  use_tls (bool): True if communication with the cluster should use Transport Level Security.
@@ -418,7 +452,7 @@ class GlideClientConfiguration(BaseClientConfiguration):
418
452
  reconnect_strategy (Optional[BackoffStrategy]): Strategy used to determine how and when to reconnect, in case of
419
453
  connection failures.
420
454
  If not set, a default backoff strategy will be used.
421
- database_id (Optional[int]): index of the logical database to connect to.
455
+ database_id (Optional[int]): Index of the logical database to connect to.
422
456
  client_name (Optional[str]): Client name to be used for the client. Will be used with CLIENT SETNAME command during
423
457
  connection establishment.
424
458
  protocol (ProtocolVersion): The version of the RESP protocol to communicate with the server.
@@ -457,7 +491,7 @@ class GlideClientConfiguration(BaseClientConfiguration):
457
491
  Attributes:
458
492
  channels_and_patterns (Dict[GlideClientConfiguration.PubSubChannelModes, Set[str]]):
459
493
  Channels and patterns by modes.
460
- callback (Optional[Callable[[CoreCommands.PubSubMsg, Any], None]]):
494
+ callback (Optional[Callable[[PubSubMsg, Any], None]]):
461
495
  Optional callback to accept the incomming messages.
462
496
  context (Any):
463
497
  Arbitrary context to pass to the callback.
@@ -466,7 +500,7 @@ class GlideClientConfiguration(BaseClientConfiguration):
466
500
  channels_and_patterns: Dict[
467
501
  GlideClientConfiguration.PubSubChannelModes, Set[str]
468
502
  ]
469
- callback: Optional[Callable[[CoreCommands.PubSubMsg, Any], None]]
503
+ callback: Optional[Callable[[PubSubMsg, Any], None]]
470
504
  context: Any
471
505
 
472
506
  def __init__(
@@ -493,6 +527,7 @@ class GlideClientConfiguration(BaseClientConfiguration):
493
527
  read_from=read_from,
494
528
  request_timeout=request_timeout,
495
529
  reconnect_strategy=reconnect_strategy,
530
+ database_id=database_id,
496
531
  client_name=client_name,
497
532
  protocol=protocol,
498
533
  inflight_requests_limit=inflight_requests_limit,
@@ -500,7 +535,6 @@ class GlideClientConfiguration(BaseClientConfiguration):
500
535
  advanced_config=advanced_config,
501
536
  lazy_connect=lazy_connect,
502
537
  )
503
- self.database_id = database_id
504
538
  self.pubsub_subscriptions = pubsub_subscriptions
505
539
 
506
540
  def _create_a_protobuf_conn_request(
@@ -508,8 +542,6 @@ class GlideClientConfiguration(BaseClientConfiguration):
508
542
  ) -> ConnectionRequest:
509
543
  assert cluster_mode is False
510
544
  request = super()._create_a_protobuf_conn_request(cluster_mode)
511
- if self.database_id:
512
- request.database_id = self.database_id
513
545
 
514
546
  if self.pubsub_subscriptions:
515
547
  if self.protocol == ProtocolVersion.RESP2:
@@ -540,7 +572,7 @@ class GlideClientConfiguration(BaseClientConfiguration):
540
572
 
541
573
  def _get_pubsub_callback_and_context(
542
574
  self,
543
- ) -> Tuple[Optional[Callable[[CoreCommands.PubSubMsg, Any], None]], Any]:
575
+ ) -> Tuple[Optional[Callable[[PubSubMsg, Any], None]], Any]:
544
576
  if self.pubsub_subscriptions:
545
577
  return self.pubsub_subscriptions.callback, self.pubsub_subscriptions.context
546
578
  return None, None
@@ -569,7 +601,7 @@ class GlideClusterClientConfiguration(BaseClientConfiguration):
569
601
  For example::
570
602
 
571
603
  [
572
- {address:configuration-endpoint.use1.cache.amazonaws.com, port:6379}
604
+ NodeAddress("sample-address-0001.use1.cache.amazonaws.com", 6379),
573
605
  ]
574
606
 
575
607
  use_tls (bool): True if communication with the cluster should use Transport Level Security.
@@ -585,6 +617,7 @@ class GlideClusterClientConfiguration(BaseClientConfiguration):
585
617
  reconnect_strategy (Optional[BackoffStrategy]): Strategy used to determine how and when to reconnect, in case of
586
618
  connection failures.
587
619
  If not set, a default backoff strategy will be used.
620
+ database_id (Optional[int]): Index of the logical database to connect to.
588
621
  client_name (Optional[str]): Client name to be used for the client. Will be used with CLIENT SETNAME command during
589
622
  connection establishment.
590
623
  protocol (ProtocolVersion): The version of the RESP protocol to communicate with the server.
@@ -634,7 +667,7 @@ class GlideClusterClientConfiguration(BaseClientConfiguration):
634
667
  Attributes:
635
668
  channels_and_patterns (Dict[GlideClusterClientConfiguration.PubSubChannelModes, Set[str]]):
636
669
  Channels and patterns by modes.
637
- callback (Optional[Callable[[CoreCommands.PubSubMsg, Any], None]]):
670
+ callback (Optional[Callable[[PubSubMsg, Any], None]]):
638
671
  Optional callback to accept the incoming messages.
639
672
  context (Any):
640
673
  Arbitrary context to pass to the callback.
@@ -643,7 +676,7 @@ class GlideClusterClientConfiguration(BaseClientConfiguration):
643
676
  channels_and_patterns: Dict[
644
677
  GlideClusterClientConfiguration.PubSubChannelModes, Set[str]
645
678
  ]
646
- callback: Optional[Callable[[CoreCommands.PubSubMsg, Any], None]]
679
+ callback: Optional[Callable[[PubSubMsg, Any], None]]
647
680
  context: Any
648
681
 
649
682
  def __init__(
@@ -654,6 +687,7 @@ class GlideClusterClientConfiguration(BaseClientConfiguration):
654
687
  read_from: ReadFrom = ReadFrom.PRIMARY,
655
688
  request_timeout: Optional[int] = None,
656
689
  reconnect_strategy: Optional[BackoffStrategy] = None,
690
+ database_id: Optional[int] = None,
657
691
  client_name: Optional[str] = None,
658
692
  protocol: ProtocolVersion = ProtocolVersion.RESP3,
659
693
  periodic_checks: Union[
@@ -672,6 +706,7 @@ class GlideClusterClientConfiguration(BaseClientConfiguration):
672
706
  read_from=read_from,
673
707
  request_timeout=request_timeout,
674
708
  reconnect_strategy=reconnect_strategy,
709
+ database_id=database_id,
675
710
  client_name=client_name,
676
711
  protocol=protocol,
677
712
  inflight_requests_limit=inflight_requests_limit,
@@ -725,7 +760,7 @@ class GlideClusterClientConfiguration(BaseClientConfiguration):
725
760
 
726
761
  def _get_pubsub_callback_and_context(
727
762
  self,
728
- ) -> Tuple[Optional[Callable[[CoreCommands.PubSubMsg, Any], None]], Any]:
763
+ ) -> Tuple[Optional[Callable[[PubSubMsg, Any], None]], Any]:
729
764
  if self.pubsub_subscriptions:
730
765
  return self.pubsub_subscriptions.callback, self.pubsub_subscriptions.context
731
766
  return None, None
@@ -2,9 +2,9 @@
2
2
 
3
3
  from typing import Any, Dict, List, Literal, Mapping, Optional, Set, TypeVar, Union
4
4
 
5
- from glide.protobuf.command_request_pb2 import CommandRequest
6
- from glide.protobuf.connection_request_pb2 import ConnectionRequest
7
- from glide.routes import ByAddressRoute, RandomNode, SlotIdRoute, SlotKeyRoute
5
+ from glide_shared.protobuf.command_request_pb2 import CommandRequest
6
+ from glide_shared.protobuf.connection_request_pb2 import ConnectionRequest
7
+ from glide_shared.routes import ByAddressRoute, RandomNode, SlotIdRoute, SlotKeyRoute
8
8
 
9
9
  OK: str = "OK"
10
10
  DEFAULT_READ_BYTES_SIZE: int = pow(2, 16)
@@ -1,6 +1,8 @@
1
1
  # Copyright Valkey GLIDE Project Contributors - SPDX Identifier: Apache-2.0
2
2
 
3
- from typing import Optional
3
+ from typing import Optional, Type
4
+
5
+ from glide_shared.protobuf.response_pb2 import RequestErrorType
4
6
 
5
7
 
6
8
  class GlideError(Exception):
@@ -60,3 +62,27 @@ class ConfigurationError(RequestError):
60
62
  """
61
63
  Errors that are thrown when a request cannot be completed in current configuration settings.
62
64
  """
65
+
66
+ pass
67
+
68
+
69
+ class LoggerError(GlideError):
70
+ """
71
+ Errors that are thrown when the logger has an error initializing.
72
+ """
73
+
74
+ pass
75
+
76
+
77
+ def get_request_error_class(
78
+ error_type: Optional[RequestErrorType.ValueType],
79
+ ) -> Type[RequestError]:
80
+ if error_type == RequestErrorType.Disconnect:
81
+ return ConnectionError
82
+ if error_type == RequestErrorType.ExecAbort:
83
+ return ExecAbortError
84
+ if error_type == RequestErrorType.Timeout:
85
+ return TimeoutError
86
+ if error_type == RequestErrorType.Unspecified:
87
+ return RequestError
88
+ return RequestError
@@ -0,0 +1,54 @@
1
+ # -*- coding: utf-8 -*-
2
+ # Generated by the protocol buffer compiler. DO NOT EDIT!
3
+ # source: protobuf/command_request.proto
4
+ # Protobuf Python Version: 4.25.1
5
+ """Generated protocol buffer code."""
6
+ from google.protobuf import descriptor as _descriptor
7
+ from google.protobuf import descriptor_pool as _descriptor_pool
8
+ from google.protobuf import symbol_database as _symbol_database
9
+ from google.protobuf.internal import builder as _builder
10
+ # @@protoc_insertion_point(imports)
11
+
12
+ _sym_db = _symbol_database.Default()
13
+
14
+
15
+
16
+
17
+ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1eprotobuf/command_request.proto\x12\x0f\x63ommand_request\"M\n\x0bSlotIdRoute\x12-\n\tslot_type\x18\x01 \x01(\x0e\x32\x1a.command_request.SlotTypes\x12\x0f\n\x07slot_id\x18\x02 \x01(\x05\"O\n\x0cSlotKeyRoute\x12-\n\tslot_type\x18\x01 \x01(\x0e\x32\x1a.command_request.SlotTypes\x12\x10\n\x08slot_key\x18\x02 \x01(\t\",\n\x0e\x42yAddressRoute\x12\x0c\n\x04host\x18\x01 \x01(\t\x12\x0c\n\x04port\x18\x02 \x01(\x05\"\xf6\x01\n\x06Routes\x12\x36\n\rsimple_routes\x18\x01 \x01(\x0e\x32\x1d.command_request.SimpleRoutesH\x00\x12\x37\n\x0eslot_key_route\x18\x02 \x01(\x0b\x32\x1d.command_request.SlotKeyRouteH\x00\x12\x35\n\rslot_id_route\x18\x03 \x01(\x0b\x32\x1c.command_request.SlotIdRouteH\x00\x12;\n\x10\x62y_address_route\x18\x04 \x01(\x0b\x32\x1f.command_request.ByAddressRouteH\x00\x42\x07\n\x05value\"\xb6\x01\n\x07\x43ommand\x12\x32\n\x0crequest_type\x18\x01 \x01(\x0e\x32\x1c.command_request.RequestType\x12\x38\n\nargs_array\x18\x02 \x01(\x0b\x32\".command_request.Command.ArgsArrayH\x00\x12\x1a\n\x10\x61rgs_vec_pointer\x18\x03 \x01(\x04H\x00\x1a\x19\n\tArgsArray\x12\x0c\n\x04\x61rgs\x18\x01 \x03(\x0c\x42\x06\n\x04\x61rgs\"\x80\x01\n\x18ScriptInvocationPointers\x12\x0c\n\x04hash\x18\x01 \x01(\t\x12\x19\n\x0ckeys_pointer\x18\x02 \x01(\x04H\x00\x88\x01\x01\x12\x19\n\x0c\x61rgs_pointer\x18\x03 \x01(\x04H\x01\x88\x01\x01\x42\x0f\n\r_keys_pointerB\x0f\n\r_args_pointer\"<\n\x10ScriptInvocation\x12\x0c\n\x04hash\x18\x01 \x01(\t\x12\x0c\n\x04keys\x18\x02 \x03(\x0c\x12\x0c\n\x04\x61rgs\x18\x03 \x03(\x0c\"\x90\x02\n\x05\x42\x61tch\x12\x11\n\tis_atomic\x18\x01 \x01(\x08\x12*\n\x08\x63ommands\x18\x02 \x03(\x0b\x32\x18.command_request.Command\x12\x1b\n\x0eraise_on_error\x18\x03 \x01(\x08H\x00\x88\x01\x01\x12\x14\n\x07timeout\x18\x04 \x01(\rH\x01\x88\x01\x01\x12\x1f\n\x12retry_server_error\x18\x05 \x01(\x08H\x02\x88\x01\x01\x12#\n\x16retry_connection_error\x18\x06 \x01(\x08H\x03\x88\x01\x01\x42\x11\n\x0f_raise_on_errorB\n\n\x08_timeoutB\x15\n\x13_retry_server_errorB\x19\n\x17_retry_connection_error\"\xb4\x01\n\x0b\x43lusterScan\x12\x0e\n\x06\x63ursor\x18\x01 \x01(\t\x12\x1a\n\rmatch_pattern\x18\x02 \x01(\x0cH\x00\x88\x01\x01\x12\x12\n\x05\x63ount\x18\x03 \x01(\x03H\x01\x88\x01\x01\x12\x18\n\x0bobject_type\x18\x04 \x01(\tH\x02\x88\x01\x01\x12\x1f\n\x17\x61llow_non_covered_slots\x18\x05 \x01(\x08\x42\x10\n\x0e_match_patternB\x08\n\x06_countB\x0e\n\x0c_object_type\"V\n\x18UpdateConnectionPassword\x12\x15\n\x08password\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x16\n\x0eimmediate_auth\x18\x02 \x01(\x08\x42\x0b\n\t_password\"\xfc\x03\n\x0e\x43ommandRequest\x12\x14\n\x0c\x63\x61llback_idx\x18\x01 \x01(\r\x12\x32\n\x0esingle_command\x18\x02 \x01(\x0b\x32\x18.command_request.CommandH\x00\x12\'\n\x05\x62\x61tch\x18\x03 \x01(\x0b\x32\x16.command_request.BatchH\x00\x12>\n\x11script_invocation\x18\x04 \x01(\x0b\x32!.command_request.ScriptInvocationH\x00\x12O\n\x1ascript_invocation_pointers\x18\x05 \x01(\x0b\x32).command_request.ScriptInvocationPointersH\x00\x12\x34\n\x0c\x63luster_scan\x18\x06 \x01(\x0b\x32\x1c.command_request.ClusterScanH\x00\x12O\n\x1aupdate_connection_password\x18\x07 \x01(\x0b\x32).command_request.UpdateConnectionPasswordH\x00\x12&\n\x05route\x18\x08 \x01(\x0b\x32\x17.command_request.Routes\x12\x1a\n\rroot_span_ptr\x18\t \x01(\x04H\x01\x88\x01\x01\x42\t\n\x07\x63ommandB\x10\n\x0e_root_span_ptr*:\n\x0cSimpleRoutes\x12\x0c\n\x08\x41llNodes\x10\x00\x12\x10\n\x0c\x41llPrimaries\x10\x01\x12\n\n\x06Random\x10\x02*%\n\tSlotTypes\x12\x0b\n\x07Primary\x10\x00\x12\x0b\n\x07Replica\x10\x01*\xea\x30\n\x0bRequestType\x12\x12\n\x0eInvalidRequest\x10\x00\x12\x11\n\rCustomCommand\x10\x01\x12\x0c\n\x08\x42itCount\x10\x65\x12\x0c\n\x08\x42itField\x10\x66\x12\x14\n\x10\x42itFieldReadOnly\x10g\x12\t\n\x05\x42itOp\x10h\x12\n\n\x06\x42itPos\x10i\x12\n\n\x06GetBit\x10j\x12\n\n\x06SetBit\x10k\x12\x0b\n\x06\x41sking\x10\xc9\x01\x12\x14\n\x0f\x43lusterAddSlots\x10\xca\x01\x12\x19\n\x14\x43lusterAddSlotsRange\x10\xcb\x01\x12\x15\n\x10\x43lusterBumpEpoch\x10\xcc\x01\x12\x1f\n\x1a\x43lusterCountFailureReports\x10\xcd\x01\x12\x1b\n\x16\x43lusterCountKeysInSlot\x10\xce\x01\x12\x14\n\x0f\x43lusterDelSlots\x10\xcf\x01\x12\x19\n\x14\x43lusterDelSlotsRange\x10\xd0\x01\x12\x14\n\x0f\x43lusterFailover\x10\xd1\x01\x12\x16\n\x11\x43lusterFlushSlots\x10\xd2\x01\x12\x12\n\rClusterForget\x10\xd3\x01\x12\x19\n\x14\x43lusterGetKeysInSlot\x10\xd4\x01\x12\x10\n\x0b\x43lusterInfo\x10\xd5\x01\x12\x13\n\x0e\x43lusterKeySlot\x10\xd6\x01\x12\x11\n\x0c\x43lusterLinks\x10\xd7\x01\x12\x10\n\x0b\x43lusterMeet\x10\xd8\x01\x12\x10\n\x0b\x43lusterMyId\x10\xd9\x01\x12\x15\n\x10\x43lusterMyShardId\x10\xda\x01\x12\x11\n\x0c\x43lusterNodes\x10\xdb\x01\x12\x14\n\x0f\x43lusterReplicas\x10\xdc\x01\x12\x15\n\x10\x43lusterReplicate\x10\xdd\x01\x12\x11\n\x0c\x43lusterReset\x10\xde\x01\x12\x16\n\x11\x43lusterSaveConfig\x10\xdf\x01\x12\x1a\n\x15\x43lusterSetConfigEpoch\x10\xe0\x01\x12\x13\n\x0e\x43lusterSetslot\x10\xe1\x01\x12\x12\n\rClusterShards\x10\xe2\x01\x12\x12\n\rClusterSlaves\x10\xe3\x01\x12\x11\n\x0c\x43lusterSlots\x10\xe4\x01\x12\r\n\x08ReadOnly\x10\xe5\x01\x12\x0e\n\tReadWrite\x10\xe6\x01\x12\t\n\x04\x41uth\x10\xad\x02\x12\x12\n\rClientCaching\x10\xae\x02\x12\x12\n\rClientGetName\x10\xaf\x02\x12\x13\n\x0e\x43lientGetRedir\x10\xb0\x02\x12\r\n\x08\x43lientId\x10\xb1\x02\x12\x0f\n\nClientInfo\x10\xb2\x02\x12\x15\n\x10\x43lientKillSimple\x10\xb3\x02\x12\x0f\n\nClientKill\x10\xb4\x02\x12\x0f\n\nClientList\x10\xb5\x02\x12\x12\n\rClientNoEvict\x10\xb6\x02\x12\x12\n\rClientNoTouch\x10\xb7\x02\x12\x10\n\x0b\x43lientPause\x10\xb8\x02\x12\x10\n\x0b\x43lientReply\x10\xb9\x02\x12\x12\n\rClientSetInfo\x10\xba\x02\x12\x12\n\rClientSetName\x10\xbb\x02\x12\x13\n\x0e\x43lientTracking\x10\xbc\x02\x12\x17\n\x12\x43lientTrackingInfo\x10\xbd\x02\x12\x12\n\rClientUnblock\x10\xbe\x02\x12\x12\n\rClientUnpause\x10\xbf\x02\x12\t\n\x04\x45\x63ho\x10\xc0\x02\x12\n\n\x05Hello\x10\xc1\x02\x12\t\n\x04Ping\x10\xc2\x02\x12\t\n\x04Quit\x10\xc3\x02\x12\n\n\x05Reset\x10\xc4\x02\x12\x0b\n\x06Select\x10\xc5\x02\x12\t\n\x04\x43opy\x10\x91\x03\x12\x08\n\x03\x44\x65l\x10\x92\x03\x12\t\n\x04\x44ump\x10\x93\x03\x12\x0b\n\x06\x45xists\x10\x94\x03\x12\x0b\n\x06\x45xpire\x10\x95\x03\x12\r\n\x08\x45xpireAt\x10\x96\x03\x12\x0f\n\nExpireTime\x10\x97\x03\x12\t\n\x04Keys\x10\x98\x03\x12\x0c\n\x07Migrate\x10\x99\x03\x12\t\n\x04Move\x10\x9a\x03\x12\x13\n\x0eObjectEncoding\x10\x9b\x03\x12\x0f\n\nObjectFreq\x10\x9c\x03\x12\x13\n\x0eObjectIdleTime\x10\x9d\x03\x12\x13\n\x0eObjectRefCount\x10\x9e\x03\x12\x0c\n\x07Persist\x10\x9f\x03\x12\x0c\n\x07PExpire\x10\xa0\x03\x12\x0e\n\tPExpireAt\x10\xa1\x03\x12\x10\n\x0bPExpireTime\x10\xa2\x03\x12\t\n\x04PTTL\x10\xa3\x03\x12\x0e\n\tRandomKey\x10\xa4\x03\x12\x0b\n\x06Rename\x10\xa5\x03\x12\r\n\x08RenameNX\x10\xa6\x03\x12\x0c\n\x07Restore\x10\xa7\x03\x12\t\n\x04Scan\x10\xa8\x03\x12\t\n\x04Sort\x10\xa9\x03\x12\x11\n\x0cSortReadOnly\x10\xaa\x03\x12\n\n\x05Touch\x10\xab\x03\x12\x08\n\x03TTL\x10\xac\x03\x12\t\n\x04Type\x10\xad\x03\x12\x0b\n\x06Unlink\x10\xae\x03\x12\t\n\x04Wait\x10\xaf\x03\x12\x0c\n\x07WaitAof\x10\xb0\x03\x12\x0b\n\x06GeoAdd\x10\xf5\x03\x12\x0c\n\x07GeoDist\x10\xf6\x03\x12\x0c\n\x07GeoHash\x10\xf7\x03\x12\x0b\n\x06GeoPos\x10\xf8\x03\x12\x0e\n\tGeoRadius\x10\xf9\x03\x12\x16\n\x11GeoRadiusReadOnly\x10\xfa\x03\x12\x16\n\x11GeoRadiusByMember\x10\xfb\x03\x12\x1e\n\x19GeoRadiusByMemberReadOnly\x10\xfc\x03\x12\x0e\n\tGeoSearch\x10\xfd\x03\x12\x13\n\x0eGeoSearchStore\x10\xfe\x03\x12\t\n\x04HDel\x10\xd9\x04\x12\x0c\n\x07HExists\x10\xda\x04\x12\t\n\x04HGet\x10\xdb\x04\x12\x0c\n\x07HGetAll\x10\xdc\x04\x12\x0c\n\x07HIncrBy\x10\xdd\x04\x12\x11\n\x0cHIncrByFloat\x10\xde\x04\x12\n\n\x05HKeys\x10\xdf\x04\x12\t\n\x04HLen\x10\xe0\x04\x12\n\n\x05HMGet\x10\xe1\x04\x12\n\n\x05HMSet\x10\xe2\x04\x12\x0f\n\nHRandField\x10\xe3\x04\x12\n\n\x05HScan\x10\xe4\x04\x12\t\n\x04HSet\x10\xe5\x04\x12\x0b\n\x06HSetNX\x10\xe6\x04\x12\x0c\n\x07HStrlen\x10\xe7\x04\x12\n\n\x05HVals\x10\xe8\x04\x12\x0b\n\x06HSetEx\x10\xe9\x04\x12\x0b\n\x06HGetEx\x10\xea\x04\x12\x0c\n\x07HExpire\x10\xeb\x04\x12\x0e\n\tHExpireAt\x10\xec\x04\x12\r\n\x08HPExpire\x10\xed\x04\x12\x0f\n\nHPExpireAt\x10\xee\x04\x12\r\n\x08HPersist\x10\xef\x04\x12\t\n\x04HTtl\x10\xf0\x04\x12\n\n\x05HPTtl\x10\xf1\x04\x12\x10\n\x0bHExpireTime\x10\xf2\x04\x12\x11\n\x0cHPExpireTime\x10\xf3\x04\x12\n\n\x05PfAdd\x10\xbd\x05\x12\x0c\n\x07PfCount\x10\xbe\x05\x12\x0c\n\x07PfMerge\x10\xbf\x05\x12\x0b\n\x06\x42LMove\x10\xa1\x06\x12\x0b\n\x06\x42LMPop\x10\xa2\x06\x12\n\n\x05\x42LPop\x10\xa3\x06\x12\n\n\x05\x42RPop\x10\xa4\x06\x12\x0f\n\nBRPopLPush\x10\xa5\x06\x12\x0b\n\x06LIndex\x10\xa6\x06\x12\x0c\n\x07LInsert\x10\xa7\x06\x12\t\n\x04LLen\x10\xa8\x06\x12\n\n\x05LMove\x10\xa9\x06\x12\n\n\x05LMPop\x10\xaa\x06\x12\t\n\x04LPop\x10\xab\x06\x12\t\n\x04LPos\x10\xac\x06\x12\n\n\x05LPush\x10\xad\x06\x12\x0b\n\x06LPushX\x10\xae\x06\x12\x0b\n\x06LRange\x10\xaf\x06\x12\t\n\x04LRem\x10\xb0\x06\x12\t\n\x04LSet\x10\xb1\x06\x12\n\n\x05LTrim\x10\xb2\x06\x12\t\n\x04RPop\x10\xb3\x06\x12\x0e\n\tRPopLPush\x10\xb4\x06\x12\n\n\x05RPush\x10\xb5\x06\x12\x0b\n\x06RPushX\x10\xb6\x06\x12\x0f\n\nPSubscribe\x10\x85\x07\x12\x0c\n\x07Publish\x10\x86\x07\x12\x13\n\x0ePubSubChannels\x10\x87\x07\x12\x11\n\x0cPubSubNumPat\x10\x88\x07\x12\x11\n\x0cPubSubNumSub\x10\x89\x07\x12\x18\n\x13PubSubShardChannels\x10\x8a\x07\x12\x16\n\x11PubSubShardNumSub\x10\x8b\x07\x12\x11\n\x0cPUnsubscribe\x10\x8c\x07\x12\r\n\x08SPublish\x10\x8d\x07\x12\x0f\n\nSSubscribe\x10\x8e\x07\x12\x0e\n\tSubscribe\x10\x8f\x07\x12\x11\n\x0cSUnsubscribe\x10\x90\x07\x12\x10\n\x0bUnsubscribe\x10\x91\x07\x12\t\n\x04\x45val\x10\xe9\x07\x12\x11\n\x0c\x45valReadOnly\x10\xea\x07\x12\x0c\n\x07\x45valSha\x10\xeb\x07\x12\x14\n\x0f\x45valShaReadOnly\x10\xec\x07\x12\n\n\x05\x46\x43\x61ll\x10\xed\x07\x12\x12\n\rFCallReadOnly\x10\xee\x07\x12\x13\n\x0e\x46unctionDelete\x10\xef\x07\x12\x11\n\x0c\x46unctionDump\x10\xf0\x07\x12\x12\n\rFunctionFlush\x10\xf1\x07\x12\x11\n\x0c\x46unctionKill\x10\xf2\x07\x12\x11\n\x0c\x46unctionList\x10\xf3\x07\x12\x11\n\x0c\x46unctionLoad\x10\xf4\x07\x12\x14\n\x0f\x46unctionRestore\x10\xf5\x07\x12\x12\n\rFunctionStats\x10\xf6\x07\x12\x10\n\x0bScriptDebug\x10\xf7\x07\x12\x11\n\x0cScriptExists\x10\xf8\x07\x12\x10\n\x0bScriptFlush\x10\xf9\x07\x12\x0f\n\nScriptKill\x10\xfa\x07\x12\x0f\n\nScriptLoad\x10\xfb\x07\x12\x0f\n\nScriptShow\x10\xfc\x07\x12\x0b\n\x06\x41\x63lCat\x10\xcd\x08\x12\x0f\n\nAclDelUser\x10\xce\x08\x12\x0e\n\tAclDryRun\x10\xcf\x08\x12\x0f\n\nAclGenPass\x10\xd0\x08\x12\x0f\n\nAclGetUser\x10\xd1\x08\x12\x0c\n\x07\x41\x63lList\x10\xd2\x08\x12\x0c\n\x07\x41\x63lLoad\x10\xd3\x08\x12\x0b\n\x06\x41\x63lLog\x10\xd4\x08\x12\x0c\n\x07\x41\x63lSave\x10\xd5\x08\x12\x0f\n\nAclSetSser\x10\xd6\x08\x12\r\n\x08\x41\x63lUsers\x10\xd7\x08\x12\x0e\n\tAclWhoami\x10\xd8\x08\x12\x11\n\x0c\x42gRewriteAof\x10\xd9\x08\x12\x0b\n\x06\x42gSave\x10\xda\x08\x12\r\n\x08\x43ommand_\x10\xdb\x08\x12\x11\n\x0c\x43ommandCount\x10\xdc\x08\x12\x10\n\x0b\x43ommandDocs\x10\xdd\x08\x12\x13\n\x0e\x43ommandGetKeys\x10\xde\x08\x12\x1b\n\x16\x43ommandGetKeysAndFlags\x10\xdf\x08\x12\x10\n\x0b\x43ommandInfo\x10\xe0\x08\x12\x10\n\x0b\x43ommandList\x10\xe1\x08\x12\x0e\n\tConfigGet\x10\xe2\x08\x12\x14\n\x0f\x43onfigResetStat\x10\xe3\x08\x12\x12\n\rConfigRewrite\x10\xe4\x08\x12\x0e\n\tConfigSet\x10\xe5\x08\x12\x0b\n\x06\x44\x42Size\x10\xe6\x08\x12\r\n\x08\x46\x61ilOver\x10\xe7\x08\x12\r\n\x08\x46lushAll\x10\xe8\x08\x12\x0c\n\x07\x46lushDB\x10\xe9\x08\x12\t\n\x04Info\x10\xea\x08\x12\r\n\x08LastSave\x10\xeb\x08\x12\x12\n\rLatencyDoctor\x10\xec\x08\x12\x11\n\x0cLatencyGraph\x10\xed\x08\x12\x15\n\x10LatencyHistogram\x10\xee\x08\x12\x13\n\x0eLatencyHistory\x10\xef\x08\x12\x12\n\rLatencyLatest\x10\xf0\x08\x12\x11\n\x0cLatencyReset\x10\xf1\x08\x12\x0b\n\x06Lolwut\x10\xf2\x08\x12\x11\n\x0cMemoryDoctor\x10\xf3\x08\x12\x16\n\x11MemoryMallocStats\x10\xf4\x08\x12\x10\n\x0bMemoryPurge\x10\xf5\x08\x12\x10\n\x0bMemoryStats\x10\xf6\x08\x12\x10\n\x0bMemoryUsage\x10\xf7\x08\x12\x0f\n\nModuleList\x10\xf8\x08\x12\x0f\n\nModuleLoad\x10\xf9\x08\x12\x11\n\x0cModuleLoadEx\x10\xfa\x08\x12\x11\n\x0cModuleUnload\x10\xfb\x08\x12\x0c\n\x07Monitor\x10\xfc\x08\x12\n\n\x05PSync\x10\xfd\x08\x12\r\n\x08ReplConf\x10\xfe\x08\x12\x0e\n\tReplicaOf\x10\xff\x08\x12\x12\n\rRestoreAsking\x10\x80\t\x12\t\n\x04Role\x10\x81\t\x12\t\n\x04Save\x10\x82\t\x12\r\n\x08ShutDown\x10\x83\t\x12\x0c\n\x07SlaveOf\x10\x84\t\x12\x0f\n\nSlowLogGet\x10\x85\t\x12\x0f\n\nSlowLogLen\x10\x86\t\x12\x11\n\x0cSlowLogReset\x10\x87\t\x12\x0b\n\x06SwapDb\x10\x88\t\x12\t\n\x04Sync\x10\x89\t\x12\t\n\x04Time\x10\x8a\t\x12\t\n\x04SAdd\x10\xb1\t\x12\n\n\x05SCard\x10\xb2\t\x12\n\n\x05SDiff\x10\xb3\t\x12\x0f\n\nSDiffStore\x10\xb4\t\x12\x0b\n\x06SInter\x10\xb5\t\x12\x0f\n\nSInterCard\x10\xb6\t\x12\x10\n\x0bSInterStore\x10\xb7\t\x12\x0e\n\tSIsMember\x10\xb8\t\x12\r\n\x08SMembers\x10\xb9\t\x12\x0f\n\nSMIsMember\x10\xba\t\x12\n\n\x05SMove\x10\xbb\t\x12\t\n\x04SPop\x10\xbc\t\x12\x10\n\x0bSRandMember\x10\xbd\t\x12\t\n\x04SRem\x10\xbe\t\x12\n\n\x05SScan\x10\xbf\t\x12\x0b\n\x06SUnion\x10\xc0\t\x12\x10\n\x0bSUnionStore\x10\xc1\t\x12\x0b\n\x06\x42ZMPop\x10\x95\n\x12\r\n\x08\x42ZPopMax\x10\x96\n\x12\r\n\x08\x42ZPopMin\x10\x97\n\x12\t\n\x04ZAdd\x10\x98\n\x12\n\n\x05ZCard\x10\x99\n\x12\x0b\n\x06ZCount\x10\x9a\n\x12\n\n\x05ZDiff\x10\x9b\n\x12\x0f\n\nZDiffStore\x10\x9c\n\x12\x0c\n\x07ZIncrBy\x10\x9d\n\x12\x0b\n\x06ZInter\x10\x9e\n\x12\x0f\n\nZInterCard\x10\x9f\n\x12\x10\n\x0bZInterStore\x10\xa0\n\x12\x0e\n\tZLexCount\x10\xa1\n\x12\n\n\x05ZMPop\x10\xa2\n\x12\x0c\n\x07ZMScore\x10\xa3\n\x12\x0c\n\x07ZPopMax\x10\xa4\n\x12\x0c\n\x07ZPopMin\x10\xa5\n\x12\x10\n\x0bZRandMember\x10\xa6\n\x12\x0b\n\x06ZRange\x10\xa7\n\x12\x10\n\x0bZRangeByLex\x10\xa8\n\x12\x12\n\rZRangeByScore\x10\xa9\n\x12\x10\n\x0bZRangeStore\x10\xaa\n\x12\n\n\x05ZRank\x10\xab\n\x12\t\n\x04ZRem\x10\xac\n\x12\x13\n\x0eZRemRangeByLex\x10\xad\n\x12\x14\n\x0fZRemRangeByRank\x10\xae\n\x12\x15\n\x10ZRemRangeByScore\x10\xaf\n\x12\x0e\n\tZRevRange\x10\xb0\n\x12\x13\n\x0eZRevRangeByLex\x10\xb1\n\x12\x15\n\x10ZRevRangeByScore\x10\xb2\n\x12\r\n\x08ZRevRank\x10\xb3\n\x12\n\n\x05ZScan\x10\xb4\n\x12\x0b\n\x06ZScore\x10\xb5\n\x12\x0b\n\x06ZUnion\x10\xb6\n\x12\x10\n\x0bZUnionStore\x10\xb7\n\x12\t\n\x04XAck\x10\xf9\n\x12\t\n\x04XAdd\x10\xfa\n\x12\x0f\n\nXAutoClaim\x10\xfb\n\x12\x0b\n\x06XClaim\x10\xfc\n\x12\t\n\x04XDel\x10\xfd\n\x12\x11\n\x0cXGroupCreate\x10\xfe\n\x12\x19\n\x14XGroupCreateConsumer\x10\xff\n\x12\x16\n\x11XGroupDelConsumer\x10\x80\x0b\x12\x12\n\rXGroupDestroy\x10\x81\x0b\x12\x10\n\x0bXGroupSetId\x10\x82\x0b\x12\x13\n\x0eXInfoConsumers\x10\x83\x0b\x12\x10\n\x0bXInfoGroups\x10\x84\x0b\x12\x10\n\x0bXInfoStream\x10\x85\x0b\x12\t\n\x04XLen\x10\x86\x0b\x12\r\n\x08XPending\x10\x87\x0b\x12\x0b\n\x06XRange\x10\x88\x0b\x12\n\n\x05XRead\x10\x89\x0b\x12\x0f\n\nXReadGroup\x10\x8a\x0b\x12\x0e\n\tXRevRange\x10\x8b\x0b\x12\x0b\n\x06XSetId\x10\x8c\x0b\x12\n\n\x05XTrim\x10\x8d\x0b\x12\x0b\n\x06\x41ppend\x10\xdd\x0b\x12\t\n\x04\x44\x65\x63r\x10\xde\x0b\x12\x0b\n\x06\x44\x65\x63rBy\x10\xdf\x0b\x12\x08\n\x03Get\x10\xe0\x0b\x12\x0b\n\x06GetDel\x10\xe1\x0b\x12\n\n\x05GetEx\x10\xe2\x0b\x12\r\n\x08GetRange\x10\xe3\x0b\x12\x0b\n\x06GetSet\x10\xe4\x0b\x12\t\n\x04Incr\x10\xe5\x0b\x12\x0b\n\x06IncrBy\x10\xe6\x0b\x12\x10\n\x0bIncrByFloat\x10\xe7\x0b\x12\x08\n\x03LCS\x10\xe8\x0b\x12\t\n\x04MGet\x10\xe9\x0b\x12\t\n\x04MSet\x10\xea\x0b\x12\x0b\n\x06MSetNX\x10\xeb\x0b\x12\x0b\n\x06PSetEx\x10\xec\x0b\x12\x08\n\x03Set\x10\xed\x0b\x12\n\n\x05SetEx\x10\xee\x0b\x12\n\n\x05SetNX\x10\xef\x0b\x12\r\n\x08SetRange\x10\xf0\x0b\x12\x0b\n\x06Strlen\x10\xf1\x0b\x12\x0b\n\x06Substr\x10\xf2\x0b\x12\x0c\n\x07\x44iscard\x10\xc1\x0c\x12\t\n\x04\x45xec\x10\xc2\x0c\x12\n\n\x05Multi\x10\xc3\x0c\x12\x0c\n\x07UnWatch\x10\xc4\x0c\x12\n\n\x05Watch\x10\xc5\x0c\x12\x12\n\rJsonArrAppend\x10\xd1\x0f\x12\x11\n\x0cJsonArrIndex\x10\xd2\x0f\x12\x12\n\rJsonArrInsert\x10\xd3\x0f\x12\x0f\n\nJsonArrLen\x10\xd4\x0f\x12\x0f\n\nJsonArrPop\x10\xd5\x0f\x12\x10\n\x0bJsonArrTrim\x10\xd6\x0f\x12\x0e\n\tJsonClear\x10\xd7\x0f\x12\x0e\n\tJsonDebug\x10\xd8\x0f\x12\x0c\n\x07JsonDel\x10\xd9\x0f\x12\x0f\n\nJsonForget\x10\xda\x0f\x12\x0c\n\x07JsonGet\x10\xdb\x0f\x12\r\n\x08JsonMGet\x10\xdc\x0f\x12\x12\n\rJsonNumIncrBy\x10\xdd\x0f\x12\x12\n\rJsonNumMultBy\x10\xde\x0f\x12\x10\n\x0bJsonObjKeys\x10\xdf\x0f\x12\x0f\n\nJsonObjLen\x10\xe0\x0f\x12\r\n\x08JsonResp\x10\xe1\x0f\x12\x0c\n\x07JsonSet\x10\xe2\x0f\x12\x12\n\rJsonStrAppend\x10\xe3\x0f\x12\x0f\n\nJsonStrLen\x10\xe4\x0f\x12\x0f\n\nJsonToggle\x10\xe5\x0f\x12\r\n\x08JsonType\x10\xe6\x0f\x12\x0b\n\x06\x46tList\x10\xb5\x10\x12\x10\n\x0b\x46tAggregate\x10\xb6\x10\x12\x0f\n\nFtAliasAdd\x10\xb7\x10\x12\x0f\n\nFtAliasDel\x10\xb8\x10\x12\x10\n\x0b\x46tAliasList\x10\xb9\x10\x12\x12\n\rFtAliasUpdate\x10\xba\x10\x12\r\n\x08\x46tCreate\x10\xbb\x10\x12\x10\n\x0b\x46tDropIndex\x10\xbc\x10\x12\x0e\n\tFtExplain\x10\xbd\x10\x12\x11\n\x0c\x46tExplainCli\x10\xbe\x10\x12\x0b\n\x06\x46tInfo\x10\xbf\x10\x12\x0e\n\tFtProfile\x10\xc0\x10\x12\r\n\x08\x46tSearch\x10\xc1\x10\x62\x06proto3')
18
+
19
+ _globals = globals()
20
+ _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
21
+ _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'protobuf.command_request_pb2', _globals)
22
+ if _descriptor._USE_C_DESCRIPTORS == False:
23
+ DESCRIPTOR._options = None
24
+ _globals['_SIMPLEROUTES']._serialized_start=1941
25
+ _globals['_SIMPLEROUTES']._serialized_end=1999
26
+ _globals['_SLOTTYPES']._serialized_start=2001
27
+ _globals['_SLOTTYPES']._serialized_end=2038
28
+ _globals['_REQUESTTYPE']._serialized_start=2041
29
+ _globals['_REQUESTTYPE']._serialized_end=8291
30
+ _globals['_SLOTIDROUTE']._serialized_start=51
31
+ _globals['_SLOTIDROUTE']._serialized_end=128
32
+ _globals['_SLOTKEYROUTE']._serialized_start=130
33
+ _globals['_SLOTKEYROUTE']._serialized_end=209
34
+ _globals['_BYADDRESSROUTE']._serialized_start=211
35
+ _globals['_BYADDRESSROUTE']._serialized_end=255
36
+ _globals['_ROUTES']._serialized_start=258
37
+ _globals['_ROUTES']._serialized_end=504
38
+ _globals['_COMMAND']._serialized_start=507
39
+ _globals['_COMMAND']._serialized_end=689
40
+ _globals['_COMMAND_ARGSARRAY']._serialized_start=656
41
+ _globals['_COMMAND_ARGSARRAY']._serialized_end=681
42
+ _globals['_SCRIPTINVOCATIONPOINTERS']._serialized_start=692
43
+ _globals['_SCRIPTINVOCATIONPOINTERS']._serialized_end=820
44
+ _globals['_SCRIPTINVOCATION']._serialized_start=822
45
+ _globals['_SCRIPTINVOCATION']._serialized_end=882
46
+ _globals['_BATCH']._serialized_start=885
47
+ _globals['_BATCH']._serialized_end=1157
48
+ _globals['_CLUSTERSCAN']._serialized_start=1160
49
+ _globals['_CLUSTERSCAN']._serialized_end=1340
50
+ _globals['_UPDATECONNECTIONPASSWORD']._serialized_start=1342
51
+ _globals['_UPDATECONNECTIONPASSWORD']._serialized_end=1428
52
+ _globals['_COMMANDREQUEST']._serialized_start=1431
53
+ _globals['_COMMANDREQUEST']._serialized_end=1939
54
+ # @@protoc_insertion_point(module_scope)
@@ -3,9 +3,13 @@
3
3
  from enum import Enum
4
4
  from typing import Optional
5
5
 
6
- from glide.exceptions import RequestError
7
- from glide.protobuf.command_request_pb2 import CommandRequest, SimpleRoutes
8
- from glide.protobuf.command_request_pb2 import SlotTypes as ProtoSlotTypes
6
+ from glide_shared.exceptions import RequestError
7
+ from glide_shared.protobuf.command_request_pb2 import (
8
+ CommandRequest,
9
+ Routes,
10
+ SimpleRoutes,
11
+ )
12
+ from glide_shared.protobuf.command_request_pb2 import SlotTypes as ProtoSlotTypes
9
13
 
10
14
 
11
15
  class SlotType(Enum):
@@ -125,23 +129,33 @@ def to_protobuf_slot_type(slot_type: SlotType) -> ProtoSlotTypes.ValueType:
125
129
  )
126
130
 
127
131
 
128
- def set_protobuf_route(request: CommandRequest, route: Optional[Route]) -> None:
132
+ def build_protobuf_route(route: Optional[Route]) -> Optional[Routes]:
129
133
  if route is None:
130
- return
131
- elif isinstance(route, AllNodes):
132
- request.route.simple_routes = SimpleRoutes.AllNodes
134
+ return None
135
+
136
+ protobuf_route = Routes()
137
+ if isinstance(route, AllNodes):
138
+ protobuf_route.simple_routes = SimpleRoutes.AllNodes
133
139
  elif isinstance(route, AllPrimaries):
134
- request.route.simple_routes = SimpleRoutes.AllPrimaries
140
+ protobuf_route.simple_routes = SimpleRoutes.AllPrimaries
135
141
  elif isinstance(route, RandomNode):
136
- request.route.simple_routes = SimpleRoutes.Random
142
+ protobuf_route.simple_routes = SimpleRoutes.Random
137
143
  elif isinstance(route, SlotKeyRoute):
138
- request.route.slot_key_route.slot_type = to_protobuf_slot_type(route.slot_type)
139
- request.route.slot_key_route.slot_key = route.slot_key
144
+ protobuf_route.slot_key_route.slot_type = to_protobuf_slot_type(route.slot_type)
145
+ protobuf_route.slot_key_route.slot_key = route.slot_key
140
146
  elif isinstance(route, SlotIdRoute):
141
- request.route.slot_id_route.slot_type = to_protobuf_slot_type(route.slot_type)
142
- request.route.slot_id_route.slot_id = route.slot_id
147
+ protobuf_route.slot_id_route.slot_type = to_protobuf_slot_type(route.slot_type)
148
+ protobuf_route.slot_id_route.slot_id = route.slot_id
143
149
  elif isinstance(route, ByAddressRoute):
144
- request.route.by_address_route.host = route.host
145
- request.route.by_address_route.port = route.port
150
+ protobuf_route.by_address_route.host = route.host
151
+ protobuf_route.by_address_route.port = route.port
146
152
  else:
147
153
  raise RequestError(f"Received invalid route type: {type(route)}")
154
+
155
+ return protobuf_route
156
+
157
+
158
+ def set_protobuf_route(request: CommandRequest, route: Optional[Route]) -> None:
159
+ protobuf_route = build_protobuf_route(route)
160
+ if protobuf_route:
161
+ request.route.CopyFrom(protobuf_route)