summaryrefslogtreecommitdiff
path: root/redis/client.py
Commit message (Collapse)AuthorAgeFilesLines
* Return index 4 as the command if not a listIan Bucad2021-05-181-1/+6
| | | | command is always a list. If index 3 is not a list, assume Redis Enterprise and return index 4 instead
* Add support for the ABSTTL option of the RESTORE command. (#1423)Simon Charette2020-11-221-1/+10
| | | Add support for the ABSTTL option of the RESTORE command.
* Add optional exception handler to PubSubWorkerThread (#1395)Abhimanyu Deora2020-10-261-5/+18
| | | | | Add optional exception handler to PubSubWorkerThread Co-authored-by: Abhimanyu Deora <adeora@drwholdings.com>
* Fixing #1390 modules key in info command (#1393)2014bduck2020-09-031-1/+7
| | | | | When modules are present, INFO's response will contain a `modules` key which will be a list of dicts describing each module. Co-authored-by: jiekun.zhu <jiekun.zhu@shopee.com>
* Added the ACL LOG command available in Redis 6Andy McCurdy2020-08-191-0/+61
| | | | | | | | | `acl_log()` returns a list of dictionaries, each describing a log entry. `acl_log_reset()` instructs the server to truncate the log. Thanks @2014BDuck Fixes #1307
* All values within Redis URLs are url-unquoted via default.Andy McCurdy2020-08-151-18/+25
| | | | | | | | Prior versions of redis-py supported this by specifying the ``decode_components`` flag to the ``from_url`` functions. This is now done by default and cannot be disabled. Fixes #589
* Remove support for end-of-life Python 2.7 (#1318)Jon Dufresne2020-08-061-226/+194
| | | | | | | | | | | | | | | | | | | | | | | | | | | | Remove support for end-of-life Python 2.7 Python 2.7 is end of life. It is no longer receiving bug fixes, including for security issues. Python 2.7 went EOL on 2020-01-01. For additional details on support Python versions, see: Supported: https://devguide.python.org/#status-of-python-branches EOL: https://devguide.python.org/devcycle/#end-of-life-branches Removing support for EOL Pythons will reduce testing and maintenance resources while allowing the library to move towards a modern Python 3 style. Python 2.7 users can continue to use the previous version of redis-py. Was able to simplify the code: - Removed redis._compat module - Removed __future__ imports - Removed object from class definition (all classes are new style) - Removed long (Python 3 unified numeric types) - Removed deprecated __nonzero__ method - Use simpler Python 3 super() syntax - Use unified OSError exception - Use yield from syntax Co-authored-by: Andy McCurdy <andy@andymccurdy.com>
* LPOS: add new command (#1354)Paul Spooren2020-07-221-0/+36
| | | | | Added the LPOS command from Redis 6.0.6 Fixes #1353
* Support for loading, unloading and listing Redis Modules (#1360)Roey Prat2020-07-131-0/+33
| | | | | | | | | | | * Support for loading, unloading and listing Redis Modules * minor fixes for flake * unit test for module list - only the empty use case * ModuleError should inherit from ResponseError rather than RedisError Co-authored-by: Vamsi Atluri <vamc19@gmail.com>
* Fix acl_setuser docstringAndrew Brookins2020-06-291-1/+1
| | | Fix the docstring for acl_setuser() so that it refers to the correct parameter name,`passwords`.
* Do not un-escape \ characters when parsing MONITOR outputAndy McCurdy2020-06-081-1/+4
| | | | | | | Prior to this, escaped slashes ("\\") were un-escaped. This caused the strings "foo\x92" and "foo\\x92" to be represented the same way in the output. Fixes #1349
* Restore try/except in __del__ methodsAndy McCurdy2020-05-201-5/+11
| | | | Fixed #1339
* Fix for HSET argument validation to allow any non-None keyAleksMat2020-05-091-4/+4
| | | | | Fixes #1337 Fixes #1341
* Switch to flake8 for static code analysis (#1328)Jon Dufresne2020-04-161-1/+0
| | | | | | | | | flake8 catches a wider net of mistakes than pycodestyle and is more commonly used by the larger community. For example, it catches unused imports, a few of which existed. These have since been removed. Two "noqa" comments were added. One ignores the _compat.py file as it has a large amount of Python version specific code. The second is in utils.py which intentionally does not use an import.
* Simplify exception handlers (#1319)Jon Dufresne2020-04-111-9/+8
| | | | | | | | | Use the "as" keyword to capture the exception in a variable instead of sys.exc_info(). Re-raise exception with the bare "raise" syntax. Avoid "# noqa: E722" by catching BaseException, which includes all exceptions including SystemExit.
* Fix typo: occured → occurred (#1315)Jon Dufresne2020-04-091-4/+4
|
* add keepttl option to set command.laixintao2020-03-121-1/+9
| | | | | fixes #1304 fixes #1280
* Clear pipeline watch state after execNick Gaya2020-03-101-0/+3
|
* Don't send DISCARD after ExecAbortError in pipelineNick Gaya2020-03-101-2/+0
| | | | | | | The `EXECABORT` error type was added in Redis 2.6.5 and is returned from an `EXEC` command to indicate that the transaction was aborted due to an invalid command. It is not necessary to call `DISCARD` after this error, and doing so causes a "DISCARD without MULTI" error.
* add support for the MEMORY STATS commandAndy McCurdy2020-02-251-3/+31
| | | | Fixes #1268
* Stop hiding errors that occur inside __del__ methodsJon Dufresne2020-02-121-11/+5
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | If an exception occurs inside the __del__ method, it should be reported to the developer. Not doing so could hide bugs. Python automatically handles exceptions inside __del__ methods, for example: class A: def __del__(self): 1 / 0 A() print("after del") Results in the output: $ python3 ~/blah.py Exception ignored in: <function A.__del__ at 0x7fbbf2bbfc20> Traceback (most recent call last): File "/home/jon/test.py", line 3, in __del__ 1 / 0 ZeroDivisionError: division by zero after del From this example, we can see the bug was not hidden and the code after __del__ still executed. fixes #1281
* Improve Redis.hmset() warning messageJon Dufresne2020-02-121-1/+6
| | | | | | | | | It now describe what is deprecated and displays for the callers line by using stacklevel=2. The warning is now tested and not emitted during normal test runs. Fixes #1282
* Make hset support multiple field/value pairs. (#1271)赖信涛2020-02-071-4/+16
| | | | | | | | | | | | * make `hset` command support multi field/value pairs. see: https://redis.io/commands/hset close https://github.com/andymccurdy/redis-py/issues/1269 deprecated: hmset Co-authored-by: Alan Mai <0110amai@gmail.com>
* remove Redis and ConnectionPool __eq__ comparisonAndy McCurdy2020-02-011-6/+0
| | | | | | | | | | | | | After further thought this was a bad idea. Just because two connection pools share the same connection arguments does not make them equal. It would seem quite odd if pool_a == pool_b yet pool_a.disconnect() doesn't close all of pool_b's connections. Ref #1240 Fixes #1277 Fixes #1275 Fixes #1267 Fixes #1273
* Move the username argument in the Redis and Connection classes to the endAndy McCurdy2020-01-311-2/+2
| | | | | | | This helps those poor souls that specify all their connection options as non-keyword arguments. Fixes #1276
* Fix spelling in docstring (#1272)Damon Jablons2020-01-301-1/+1
|
* add type filter to scan functionnetocp2020-01-301-5/+20
| | | | Fixed #1220
* Added the 'ssl_check_hostname' option.Andy McCurdy2019-12-291-0/+2
| | | | | | | | 'ssl_check_hostname' tells SSL Connections to whether to require the TCP hostname to match the hostname specified in the SSL Cert. By default 'ssl_check_hostname' is False to maintain backwards compatibility. Fixed #1196
* Allow setting client_name during connection construction.Peter van Dijk2019-12-291-1/+2
| | | | | | Client instances and Connection pools now accept "client_name" as an optional argument. If supplied, all connections created will be named via CLIENT SETNAME once the connection to the server is established.
* 'with' statement for PubSub (#765)Dmitry Kuragin2019-12-291-0/+6
| | | PubSub objects are now context managers.
* Testing the boolean nature of Pipeline instance should always return True.Andy McCurdy2019-12-291-0/+8
| | | | | | | | Prior to this, pipeline instances used __len__() which returns the number of queued commands on the pipeline. When there were no queued commands, the pipeline instance would evaluate to 0 or False. Fixes #994
* Added support for ACL commandsAndy McCurdy2019-12-281-4/+245
|
* Fix TypeError by passing optional decode_responses keyword argument d… (#1239)Jakob Keller2019-11-111-2/+5
| | | | * Fix TypeError by passing optional decode_responses keyword argument down to parse_slowlog_get()
* Add equality test on Redis client and conn pool (#1240)Rajiv Bakulesh Shah2019-11-111-0/+6
| | | Add equality test on Redis client and connection pool
* Fix misplaced space (#1237)Thomas Matecki2019-10-271-1/+1
| | | Sorry, I'm a pendant.
* Allow Pipeline.execute() to execute on empty command stack if it is watching ↵Brian Maissy2019-10-241-1/+1
| | | | keys
* version 3.3.8, fix MONITOR output to account for all types of clients3.3.8huangwei-ds52019-08-191-2/+16
| | | | | | | | | | The client section of MONITOR output varies for TCP connections, unix socket connections and commands executed from Lua scripts. Account for each of these cases by including an additional key `client_type` in the MONITOR output. `client_type` will be one of ('tcp', 'unix', 'lua'). `client_address` and `client_port` vary based on the `client_type`. Fixes #1201
* Pipelines shouldn't retry ConnectionErrors implicitlyAndy McCurdy2019-07-281-15/+24
|
* Add an Event parameter to PubSubWorkerThread and run_in_thread so (#1195)Timothy Rule2019-07-281-5/+5
| | | | The PubSubWorkerThread now uses a `threading.Event` to control its life cycle.
* PING/PONG health checksAndy McCurdy2019-07-281-11/+42
| | | | | | | | | | | | | | | | | | | | | | The `Redis` class and the `ConnectionPool` class now support the "health_check_interval=N" option. By default N=0, which turns off health checks. `N` should be an integer, and when greater than 0, ensures that a health check is performed just before command execution anytime the underlying connection has been idle for more than N seconds. A health check is a full PING/PONG round trip to the Redis server. If a health check encounters a ConnectionError or TimeoutError, the connection is disconnected and reconnected and the health check is retried exactly once. Any error during the retry is raised to the caller. Health check retries are not governed by any other options such as `retry_on_timeout`. In systems where idle times are common, these health checks are the intended way to reconnect to the Redis server without harming any user data. When this option is enabled for PubSub connections, calling `get_message()` or `listen()` will send a health check anytime a message has not been read on the PubSub connection for `health_check_interval` seconds. Users should call `get_message()` or `listen()` at least every `health_check_interval` seconds in order to keep the connection open.
* Ability to create a client that uses a single connectionAndy McCurdy2019-07-231-10/+32
| | | | | | | | | | | | | This has multiple uses: * Single connection clients will not be considered threadsafe. This means certain settings could temporarily be adjusted. For example, a context manager could temporarily modify the encoding behavior for a set of commands. * We can introduce more thorough health checks that only happen when a connection is handed out from the connection pool. * Workloads that issue many commands to Redis should be slightly faster. Prior to this change, the client must retrieve a connection from the pool for each command.
* Handle removed claimed messages without an exceptionThomas Daskalakis2019-07-171-1/+7
| | | | Fixes #1191
* Add READONLY and READWRITE commandsTheo Despoudis2019-07-091-2/+10
|
* case insensitive response callbacks.Andy McCurdy2019-05-281-1/+29
| | | | | | | this change allows users to call client.execute_command('info') or client.execute_command('INFO') and get the same parsed result. Fixes #1168
* remove Token class in favor of bytestringremove_tokenAndy McCurdy2019-05-281-79/+81
| | | | | | | The Token class was needed when supporting Python 2.6. Now that we've dropped support for 2.6, we don't need it anymore. Fixes #1066
* add tests for encoding issues and fix bugs foundAndy McCurdy2019-05-261-1/+1
|
* monitor command now has full command text. test suite improvedAndy McCurdy2019-05-261-4/+8
|
* Merge branch 'master' into monitorAndy McCurdy2019-05-261-2/+4
|\
| * Merge pull request #1152 from aachurin/masterAndy McCurdy2019-04-291-2/+4
| |\ | | | | | | Fix for https://github.com/andymccurdy/redis-py/issues/1135
| | * Update client.pyaachurin2019-03-161-2/+4
| | | | | | | | | Fix for https://github.com/andymccurdy/redis-py/issues/1135