valkey-glide 2.0.0rc2__cp312-cp312-macosx_11_0_arm64.whl → 2.2.0rc2__cp312-cp312-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.
Files changed (45) hide show
  1. glide/__init__.py +160 -106
  2. glide/async_commands/cluster_commands.py +108 -105
  3. glide/async_commands/core.py +637 -444
  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 +27 -58
  7. glide/glide.cpython-312-darwin.so +0 -0
  8. glide/glide.pyi +26 -1
  9. glide/glide_client.py +270 -126
  10. glide/logger.py +33 -21
  11. glide/opentelemetry.py +185 -0
  12. glide_shared/__init__.py +330 -0
  13. glide_shared/commands/__init__.py +0 -0
  14. {glide/async_commands → glide_shared/commands}/batch.py +476 -64
  15. glide_shared/commands/batch_options.py +261 -0
  16. glide_shared/commands/core_options.py +407 -0
  17. {glide/async_commands → glide_shared/commands}/server_modules/ft_options/ft_aggregate_options.py +3 -3
  18. {glide/async_commands → glide_shared/commands}/server_modules/ft_options/ft_create_options.py +4 -2
  19. {glide/async_commands → glide_shared/commands}/server_modules/ft_options/ft_profile_options.py +4 -4
  20. {glide/async_commands → glide_shared/commands}/server_modules/ft_options/ft_search_options.py +4 -2
  21. {glide/async_commands → glide_shared/commands}/server_modules/json_batch.py +4 -4
  22. glide_shared/commands/server_modules/json_options.py +93 -0
  23. {glide/async_commands → glide_shared/commands}/sorted_set.py +2 -2
  24. {glide/async_commands → glide_shared/commands}/stream.py +1 -1
  25. {glide → glide_shared}/config.py +386 -61
  26. {glide → glide_shared}/constants.py +3 -3
  27. {glide → glide_shared}/exceptions.py +27 -1
  28. glide_shared/protobuf/command_request_pb2.py +56 -0
  29. glide_shared/protobuf/connection_request_pb2.py +56 -0
  30. {glide → glide_shared}/protobuf/response_pb2.py +6 -6
  31. {glide → glide_shared}/routes.py +54 -15
  32. valkey_glide-2.2.0rc2.dist-info/METADATA +210 -0
  33. valkey_glide-2.2.0rc2.dist-info/RECORD +40 -0
  34. glide/protobuf/command_request_pb2.py +0 -54
  35. glide/protobuf/command_request_pb2.pyi +0 -1187
  36. glide/protobuf/connection_request_pb2.py +0 -54
  37. glide/protobuf/connection_request_pb2.pyi +0 -320
  38. glide/protobuf/response_pb2.pyi +0 -100
  39. valkey_glide-2.0.0rc2.dist-info/METADATA +0 -127
  40. valkey_glide-2.0.0rc2.dist-info/RECORD +0 -37
  41. {glide/async_commands → glide_shared/commands}/bitmap.py +0 -0
  42. {glide/async_commands → glide_shared/commands}/command_args.py +0 -0
  43. {glide/async_commands → glide_shared/commands}/server_modules/ft_options/ft_constants.py +0 -0
  44. {glide → glide_shared}/protobuf_codec.py +0 -0
  45. {valkey_glide-2.0.0rc2.dist-info → valkey_glide-2.2.0rc2.dist-info}/WHEEL +0 -0
glide/logger.py CHANGED
@@ -2,11 +2,12 @@
2
2
 
3
3
  from __future__ import annotations
4
4
 
5
+ import traceback
5
6
  from enum import Enum
6
7
  from typing import Optional
7
8
 
8
- from .glide import Level as internalLevel
9
- from .glide import py_init, py_log
9
+ from glide.glide import Level as internalLevel
10
+ from glide.glide import py_init, py_log
10
11
 
11
12
 
12
13
  class Level(Enum):
@@ -20,13 +21,12 @@ class Level(Enum):
20
21
 
21
22
  class Logger:
22
23
  """
23
- A singleton class that allows logging which is consistent with logs from the internal rust core.
24
+ A singleton class that allows logging which is consistent with logs from the internal GLIDE core.
24
25
  The logger can be set up in 2 ways -
25
26
  1. By calling Logger.init, which configures the logger only if it wasn't previously configured.
26
27
  2. By calling Logger.set_logger_config, which replaces the existing configuration, and means that new logs will not be
27
28
  saved with the logs that were sent before the call.
28
- If set_logger_config wasn't called, the first log attempt will initialize a new logger with default configuration decided
29
- by the Rust core.
29
+ If none of these functions are called, the first log attempt will initialize a new logger with default configuration.
30
30
  """
31
31
 
32
32
  _instance = None
@@ -38,48 +38,60 @@ class Logger:
38
38
 
39
39
  @classmethod
40
40
  def init(cls, level: Optional[Level] = None, file_name: Optional[str] = None):
41
- """_summary_
41
+ """
42
42
  Initialize a logger if it wasn't initialized before - this method is meant to be used when there is no intention to
43
- replace an existing logger.
44
- The logger will filter all logs with a level lower than the given level,
45
- If given a fileName argument, will write the logs to files postfixed with fileName. If fileName isn't provided,
43
+ replace an existing logger. Otherwise, use `set_logger_config` for overriding the existing logger configs.
44
+ The logger will filter all logs with a level lower than the given level.
45
+ If given a file_name argument, will write the logs to files postfixed with file_name. If file_name isn't provided,
46
46
  the logs will be written to the console.
47
+
47
48
  Args:
48
49
  level (Optional[Level]): Set the logger level to one of [ERROR, WARN, INFO, DEBUG, TRACE, OFF].
49
- If log level isn't provided, the logger will be configured with default configuration decided by the Rust core.
50
- file_name (Optional[str]): If provided the target of the logs will be the file mentioned.
51
- Otherwise, logs will be printed to the console.
52
- To turn off logging completely, set the level to Level.OFF.
50
+ If log level isn't provided, the logger will be configured with default configuration.
51
+ To turn off logging completely, set the level to Level.OFF.
52
+ file_name (Optional[str]): If provided the target of the logs will be the file mentioned.
53
+ Otherwise, logs will be printed to the console.
53
54
  """
54
55
  if cls._instance is None:
55
56
  cls._instance = cls(level, file_name)
56
57
 
57
58
  @classmethod
58
- def log(cls, log_level: Level, log_identifier: str, message: str):
59
- """Logs the provided message if the provided log level is lower then the logger level.
59
+ def log(
60
+ cls,
61
+ log_level: Level,
62
+ log_identifier: str,
63
+ message: str,
64
+ err: Optional[Exception] = None,
65
+ ):
66
+ """
67
+ Logs the provided message if the provided log level is lower then the logger level.
60
68
 
61
69
  Args:
62
- log_level (Level): The log level of the provided message
70
+ log_level (Level): The log level of the provided message.
63
71
  log_identifier (str): The log identifier should give the log a context.
64
72
  message (str): The message to log.
73
+ err (Optional[Exception]): The exception or error to log.
65
74
  """
66
75
  if not cls._instance:
67
76
  cls._instance = cls(None)
68
77
  if not log_level.value.is_lower(Logger.logger_level):
69
78
  return
79
+ if err:
80
+ message = f"{message}: {traceback.format_exception(err)}"
70
81
  py_log(log_level.value, log_identifier, message)
71
82
 
72
83
  @classmethod
73
84
  def set_logger_config(
74
85
  cls, level: Optional[Level] = None, file_name: Optional[str] = None
75
86
  ):
76
- """Creates a new logger instance and configure it with the provided log level and file name.
87
+ """
88
+ Creates a new logger instance and configure it with the provided log level and file name.
77
89
 
78
90
  Args:
79
91
  level (Optional[Level]): Set the logger level to one of [ERROR, WARN, INFO, DEBUG, TRACE, OFF].
80
- If log level isn't provided, the logger will be configured with default configuration decided by the Rust core.
81
- file_name (Optional[str]): If provided the target of the logs will be the file mentioned.
82
- Otherwise, logs will be printed to the console.
83
- To turn off logging completely, set the level to OFF.
92
+ If log level isn't provided, the logger will be configured with default configuration.
93
+ To turn off logging completely, set the level to OFF.
94
+ file_name (Optional[str]): If provided the target of the logs will be the file mentioned.
95
+ Otherwise, logs will be printed to the console.
84
96
  """
85
97
  Logger._instance = Logger(level, file_name)
glide/opentelemetry.py ADDED
@@ -0,0 +1,185 @@
1
+ # Copyright Valkey GLIDE Project Contributors - SPDX Identifier: Apache-2.0
2
+
3
+ """
4
+ ⚠️ OpenTelemetry can only be initialized once per process. Calling `OpenTelemetry.init()` more than once will be ignored.
5
+ If you need to change configuration, restart the process with new settings.
6
+
7
+ ### OpenTelemetry
8
+
9
+ - **openTelemetryConfig**: Use this object to configure OpenTelemetry exporters and options.
10
+ - **traces**: (optional) Configure trace exporting.
11
+ - **endpoint**: The collector endpoint for traces. Supported protocols:
12
+ - `http://` or `https://` for HTTP/HTTPS
13
+ - `grpc://` for gRPC
14
+ - `file://` for local file export (see below)
15
+ - **sample_percentage**: (optional) The percentage of requests to sample and create a span for, used to measure command duration. Must be between 0 and 100. Defaults to 1 if not specified.
16
+ Note: There is a tradeoff between sampling percentage and performance. Higher sampling percentages will provide more detailed telemetry data but will impact performance.
17
+ It is recommended to keep this number low (1-5%) in production environments unless you have specific needs for higher sampling rates.
18
+ - **metrics**: (optional) Configure metrics exporting.
19
+ - **endpoint**: The collector endpoint for metrics. Same protocol rules as above.
20
+ - **flush_interval_ms**: (optional) Interval in milliseconds for flushing data to the collector. Must be a positive integer. Defaults to 5000ms if not specified.
21
+
22
+ #### File Exporter Details
23
+ - For `file://` endpoints:
24
+ - The path must start with `file://` (e.g., `file:///tmp/otel` or `file:///tmp/otel/traces.json`).
25
+ - If the path is a directory or lacks a file extension, data is written to `signals.json` in that directory.
26
+ - If the path includes a filename with an extension, that file is used as-is.
27
+ - The parent directory must already exist; otherwise, initialization will fail with an InvalidInput error.
28
+ - If the target file exists, new data is appended (not overwritten).
29
+
30
+ #### Validation Rules
31
+ - `flush_interval_ms` must be a positive integer.
32
+ - `sample_percentage` must be between 0 and 100.
33
+ - File exporter paths must start with `file://` and have an existing parent directory.
34
+ - Invalid configuration will throw an error synchronously when calling `OpenTelemetry.init()`.
35
+ """
36
+
37
+ import random
38
+ from typing import Optional
39
+
40
+ from glide.glide import (
41
+ OpenTelemetryConfig,
42
+ OpenTelemetryTracesConfig,
43
+ init_opentelemetry,
44
+ )
45
+ from glide_shared.exceptions import ConfigurationError
46
+
47
+ from .logger import Level, Logger
48
+
49
+
50
+ class OpenTelemetry:
51
+ """
52
+ Singleton class for managing OpenTelemetry configuration and operations.
53
+
54
+ This class provides a centralized way to initialize OpenTelemetry and control
55
+ sampling behavior at runtime.
56
+
57
+ Example usage:
58
+ ```python
59
+ from glide import OpenTelemetry, OpenTelemetryConfig, OpenTelemetryTracesConfig, OpenTelemetryMetricsConfig
60
+
61
+ OpenTelemetry.init(OpenTelemetryConfig(
62
+ traces=OpenTelemetryTracesConfig(
63
+ endpoint="http://localhost:4318/v1/traces",
64
+ sample_percentage=10 # Optional, defaults to 1. Can also be changed at runtime via set_sample_percentage().
65
+ ),
66
+ metrics=OpenTelemetryMetricsConfig(
67
+ endpoint="http://localhost:4318/v1/metrics"
68
+ ),
69
+ flush_interval_ms=1000 # Optional, defaults to 5000
70
+ ))
71
+ ```
72
+
73
+ Note:
74
+ OpenTelemetry can only be initialized once per process. Subsequent calls to
75
+ init() will be ignored. This is by design, as OpenTelemetry is a global
76
+ resource that should be configured once at application startup.
77
+ """
78
+
79
+ _instance: Optional["OpenTelemetry"] = None
80
+ _config: Optional[OpenTelemetryConfig] = None
81
+
82
+ @classmethod
83
+ def init(cls, config: OpenTelemetryConfig) -> None:
84
+ """
85
+ Initialize the OpenTelemetry instance.
86
+
87
+ Args:
88
+ config: The OpenTelemetry configuration
89
+
90
+ Note:
91
+ OpenTelemetry can only be initialized once per process.
92
+ Subsequent calls will be ignored and a warning will be logged.
93
+ """
94
+ if not cls._instance:
95
+ cls._config = config
96
+ # Initialize the underlying OpenTelemetry implementation
97
+ init_opentelemetry(config)
98
+ cls._instance = OpenTelemetry()
99
+ Logger.log(
100
+ Level.INFO,
101
+ "GlideOpenTelemetry",
102
+ "OpenTelemetry initialized successfully",
103
+ )
104
+ return
105
+
106
+ Logger.log(
107
+ Level.WARN,
108
+ "GlideOpenTelemetry",
109
+ "OpenTelemetry already initialized - ignoring new configuration",
110
+ )
111
+
112
+ @classmethod
113
+ def is_initialized(cls) -> bool:
114
+ """
115
+ Check if the OpenTelemetry instance is initialized.
116
+
117
+ Returns:
118
+ bool: True if the OpenTelemetry instance is initialized, False otherwise
119
+ """
120
+ return cls._instance is not None
121
+
122
+ @classmethod
123
+ def get_sample_percentage(cls) -> Optional[int]:
124
+ """
125
+ Get the sample percentage for traces.
126
+
127
+ Returns:
128
+ Optional[int]: The sample percentage for traces only if OpenTelemetry is initialized
129
+ and the traces config is set, otherwise None.
130
+ """
131
+ if cls._config:
132
+ traces_config = cls._config.get_traces()
133
+ if traces_config:
134
+ return traces_config.get_sample_percentage()
135
+ return None
136
+
137
+ @classmethod
138
+ def should_sample(cls) -> bool:
139
+ """
140
+ Determines if the current request should be sampled for OpenTelemetry tracing.
141
+ Uses the configured sample percentage to randomly decide whether to create a span for this request.
142
+
143
+ Returns:
144
+ bool: True if the request should be sampled, False otherwise
145
+ """
146
+ percentage = cls.get_sample_percentage()
147
+ return (
148
+ cls.is_initialized()
149
+ and percentage is not None
150
+ and random.random() * 100 < percentage
151
+ )
152
+
153
+ @classmethod
154
+ def set_sample_percentage(cls, percentage: int) -> None:
155
+ """
156
+ Set the percentage of requests to be sampled and traced. Must be a value between 0 and 100.
157
+ This setting only affects traces, not metrics.
158
+
159
+ Args:
160
+ percentage: The sample percentage 0-100
161
+
162
+ Raises:
163
+ ConfigurationError: If OpenTelemetry is not initialized or traces config is not set
164
+
165
+ Remarks:
166
+ This method can be called at runtime to change the sampling percentage
167
+ without reinitializing OpenTelemetry.
168
+ """
169
+ if not cls._config or not cls._config.get_traces():
170
+ raise ConfigurationError("OpenTelemetry config traces not initialized")
171
+
172
+ if percentage < 0 or percentage > 100:
173
+ raise ConfigurationError("Sample percentage must be between 0 and 100")
174
+
175
+ # Create a new traces config with the updated sample_percentage
176
+ # This is necessary because the PyO3 binding doesn't properly handle direct assignment to Option<u32>
177
+ traces_config = cls._config.get_traces()
178
+ if traces_config:
179
+ endpoint = traces_config.get_endpoint()
180
+ new_traces_config = OpenTelemetryTracesConfig(
181
+ endpoint=endpoint, sample_percentage=percentage
182
+ )
183
+
184
+ # Replace the traces config
185
+ cls._config.set_traces(new_traces_config)
@@ -0,0 +1,330 @@
1
+ # Copyright Valkey GLIDE Project Contributors - SPDX Identifier: Apache-2.0
2
+
3
+ from .commands.batch import Batch, ClusterBatch, ClusterTransaction, TBatch, Transaction
4
+ from .commands.batch_options import (
5
+ BatchOptions,
6
+ BatchRetryStrategy,
7
+ ClusterBatchOptions,
8
+ )
9
+ from .commands.bitmap import (
10
+ BitEncoding,
11
+ BitFieldGet,
12
+ BitFieldIncrBy,
13
+ BitFieldOffset,
14
+ BitFieldOverflow,
15
+ BitFieldSet,
16
+ BitFieldSubCommands,
17
+ BitmapIndexType,
18
+ BitOffset,
19
+ BitOffsetMultiplier,
20
+ BitOverflowControl,
21
+ BitwiseOperation,
22
+ OffsetOptions,
23
+ SignedEncoding,
24
+ UnsignedEncoding,
25
+ )
26
+ from .commands.command_args import Limit, ListDirection, ObjectType, OrderBy
27
+ from .commands.core_options import (
28
+ ConditionalChange,
29
+ ExpireOptions,
30
+ ExpiryGetEx,
31
+ ExpirySet,
32
+ ExpiryType,
33
+ ExpiryTypeGetEx,
34
+ FlushMode,
35
+ FunctionRestorePolicy,
36
+ HashFieldConditionalChange,
37
+ InfoSection,
38
+ InsertPosition,
39
+ OnlyIfEqual,
40
+ PubSubMsg,
41
+ UpdateOptions,
42
+ )
43
+ from .commands.server_modules import json_batch
44
+ from .commands.server_modules.ft_options.ft_aggregate_options import (
45
+ FtAggregateApply,
46
+ FtAggregateClause,
47
+ FtAggregateFilter,
48
+ FtAggregateGroupBy,
49
+ FtAggregateLimit,
50
+ FtAggregateOptions,
51
+ FtAggregateReducer,
52
+ FtAggregateSortBy,
53
+ FtAggregateSortProperty,
54
+ )
55
+ from .commands.server_modules.ft_options.ft_create_options import (
56
+ DataType,
57
+ DistanceMetricType,
58
+ Field,
59
+ FieldType,
60
+ FtCreateOptions,
61
+ NumericField,
62
+ TagField,
63
+ TextField,
64
+ VectorAlgorithm,
65
+ VectorField,
66
+ VectorFieldAttributes,
67
+ VectorFieldAttributesFlat,
68
+ VectorFieldAttributesHnsw,
69
+ VectorType,
70
+ )
71
+ from .commands.server_modules.ft_options.ft_profile_options import (
72
+ FtProfileOptions,
73
+ QueryType,
74
+ )
75
+ from .commands.server_modules.ft_options.ft_search_options import (
76
+ FtSearchLimit,
77
+ FtSearchOptions,
78
+ ReturnField,
79
+ )
80
+ from .commands.server_modules.json_options import (
81
+ JsonArrIndexOptions,
82
+ JsonArrPopOptions,
83
+ JsonGetOptions,
84
+ )
85
+ from .commands.sorted_set import (
86
+ AggregationType,
87
+ GeoSearchByBox,
88
+ GeoSearchByRadius,
89
+ GeoSearchCount,
90
+ GeospatialData,
91
+ GeoUnit,
92
+ InfBound,
93
+ LexBoundary,
94
+ RangeByIndex,
95
+ RangeByLex,
96
+ RangeByScore,
97
+ ScoreBoundary,
98
+ ScoreFilter,
99
+ )
100
+ from .commands.stream import (
101
+ ExclusiveIdBound,
102
+ IdBound,
103
+ MaxId,
104
+ MinId,
105
+ StreamAddOptions,
106
+ StreamClaimOptions,
107
+ StreamGroupOptions,
108
+ StreamPendingOptions,
109
+ StreamRangeBound,
110
+ StreamReadGroupOptions,
111
+ StreamReadOptions,
112
+ StreamTrimOptions,
113
+ TrimByMaxLen,
114
+ TrimByMinId,
115
+ )
116
+ from .config import (
117
+ AdvancedGlideClientConfiguration,
118
+ AdvancedGlideClusterClientConfiguration,
119
+ BackoffStrategy,
120
+ GlideClientConfiguration,
121
+ GlideClusterClientConfiguration,
122
+ IamAuthConfig,
123
+ NodeAddress,
124
+ PeriodicChecksManualInterval,
125
+ PeriodicChecksStatus,
126
+ ProtocolVersion,
127
+ ReadFrom,
128
+ ServerCredentials,
129
+ ServiceType,
130
+ TlsAdvancedConfiguration,
131
+ )
132
+ from .constants import (
133
+ OK,
134
+ TOK,
135
+ FtAggregateResponse,
136
+ FtInfoResponse,
137
+ FtProfileResponse,
138
+ FtSearchResponse,
139
+ TClusterResponse,
140
+ TEncodable,
141
+ TFunctionListResponse,
142
+ TFunctionStatsFullResponse,
143
+ TFunctionStatsSingleNodeResponse,
144
+ TJsonResponse,
145
+ TJsonUniversalResponse,
146
+ TResult,
147
+ TSingleNodeRoute,
148
+ TXInfoStreamFullResponse,
149
+ TXInfoStreamResponse,
150
+ )
151
+ from .exceptions import (
152
+ ClosingError,
153
+ ConfigurationError,
154
+ ConnectionError,
155
+ ExecAbortError,
156
+ GlideError,
157
+ LoggerError,
158
+ RequestError,
159
+ TimeoutError,
160
+ )
161
+ from .routes import (
162
+ AllNodes,
163
+ AllPrimaries,
164
+ ByAddressRoute,
165
+ RandomNode,
166
+ Route,
167
+ SlotIdRoute,
168
+ SlotKeyRoute,
169
+ SlotType,
170
+ )
171
+
172
+ __all__ = [
173
+ # Client
174
+ "Batch",
175
+ "ClusterBatch",
176
+ "ClusterTransaction",
177
+ "Transaction",
178
+ "TBatch",
179
+ # Batch Options
180
+ "BatchOptions",
181
+ "BatchRetryStrategy",
182
+ "ClusterBatchOptions",
183
+ # Config
184
+ "AdvancedGlideClientConfiguration",
185
+ "AdvancedGlideClusterClientConfiguration",
186
+ "GlideClientConfiguration",
187
+ "GlideClusterClientConfiguration",
188
+ "BackoffStrategy",
189
+ "ReadFrom",
190
+ "ServerCredentials",
191
+ "ServiceType",
192
+ "IamAuthConfig",
193
+ "NodeAddress",
194
+ "ProtocolVersion",
195
+ "PeriodicChecksManualInterval",
196
+ "PeriodicChecksStatus",
197
+ "TlsAdvancedConfiguration",
198
+ # Response
199
+ "OK",
200
+ "TClusterResponse",
201
+ "TEncodable",
202
+ "TFunctionListResponse",
203
+ "TFunctionStatsFullResponse",
204
+ "TFunctionStatsSingleNodeResponse",
205
+ "TJsonResponse",
206
+ "TJsonUniversalResponse",
207
+ "TOK",
208
+ "TResult",
209
+ "TXInfoStreamFullResponse",
210
+ "TXInfoStreamResponse",
211
+ "FtAggregateResponse",
212
+ "FtInfoResponse",
213
+ "FtProfileResponse",
214
+ "FtSearchResponse",
215
+ # Commands
216
+ "BitEncoding",
217
+ "BitFieldGet",
218
+ "BitFieldIncrBy",
219
+ "BitFieldOffset",
220
+ "BitFieldOverflow",
221
+ "BitFieldSet",
222
+ "BitFieldSubCommands",
223
+ "BitmapIndexType",
224
+ "BitOffset",
225
+ "BitOffsetMultiplier",
226
+ "BitOverflowControl",
227
+ "BitwiseOperation",
228
+ "OffsetOptions",
229
+ "SignedEncoding",
230
+ "UnsignedEncoding",
231
+ "ScoreBoundary",
232
+ "ConditionalChange",
233
+ "HashFieldConditionalChange",
234
+ "OnlyIfEqual",
235
+ "ExpireOptions",
236
+ "ExpiryGetEx",
237
+ "ExpirySet",
238
+ "ExpiryType",
239
+ "ExpiryTypeGetEx",
240
+ "FlushMode",
241
+ "FunctionRestorePolicy",
242
+ "GeoSearchByBox",
243
+ "GeoSearchByRadius",
244
+ "GeoSearchCount",
245
+ "GeoUnit",
246
+ "GeospatialData",
247
+ "AggregationType",
248
+ "InfBound",
249
+ "InfoSection",
250
+ "InsertPosition",
251
+ "LexBoundary",
252
+ "Limit",
253
+ "ListDirection",
254
+ "RangeByIndex",
255
+ "RangeByLex",
256
+ "RangeByScore",
257
+ "ScoreFilter",
258
+ "ObjectType",
259
+ "OrderBy",
260
+ "ExclusiveIdBound",
261
+ "IdBound",
262
+ "MaxId",
263
+ "MinId",
264
+ "StreamAddOptions",
265
+ "StreamClaimOptions",
266
+ "StreamGroupOptions",
267
+ "StreamPendingOptions",
268
+ "StreamReadGroupOptions",
269
+ "StreamRangeBound",
270
+ "StreamReadOptions",
271
+ "StreamTrimOptions",
272
+ "TrimByMaxLen",
273
+ "TrimByMinId",
274
+ "UpdateOptions",
275
+ # PubSub
276
+ "PubSubMsg",
277
+ # Json
278
+ "json_batch",
279
+ "JsonGetOptions",
280
+ "JsonArrIndexOptions",
281
+ "JsonArrPopOptions",
282
+ # Routes
283
+ "Route",
284
+ "SlotType",
285
+ "AllNodes",
286
+ "AllPrimaries",
287
+ "ByAddressRoute",
288
+ "RandomNode",
289
+ "SlotKeyRoute",
290
+ "SlotIdRoute",
291
+ "TSingleNodeRoute",
292
+ # Exceptions
293
+ "ClosingError",
294
+ "ConfigurationError",
295
+ "ConnectionError",
296
+ "ExecAbortError",
297
+ "GlideError",
298
+ "RequestError",
299
+ "TimeoutError",
300
+ "LoggerError",
301
+ # Ft
302
+ "DataType",
303
+ "DistanceMetricType",
304
+ "Field",
305
+ "FieldType",
306
+ "FtCreateOptions",
307
+ "NumericField",
308
+ "TagField",
309
+ "TextField",
310
+ "VectorAlgorithm",
311
+ "VectorField",
312
+ "VectorFieldAttributes",
313
+ "VectorFieldAttributesFlat",
314
+ "VectorFieldAttributesHnsw",
315
+ "VectorType",
316
+ "FtSearchLimit",
317
+ "ReturnField",
318
+ "FtSearchOptions",
319
+ "FtAggregateApply",
320
+ "FtAggregateFilter",
321
+ "FtAggregateClause",
322
+ "FtAggregateLimit",
323
+ "FtAggregateOptions",
324
+ "FtAggregateGroupBy",
325
+ "FtAggregateReducer",
326
+ "FtAggregateSortBy",
327
+ "FtAggregateSortProperty",
328
+ "FtProfileOptions",
329
+ "QueryType",
330
+ ]
File without changes