Releases: brainix/pottery
v3.0.0
Breaking Change: Redlock
now consistently uses seconds for all time units
In particular:
- The
auto_release_time
argument toRedlock.__init__()
andsynchronize()
is now in seconds (was previously milliseconds) Redlock.locked()
now returns how much longer you'll hold the lease in seconds (or 0 if you don't hold the lock; and was also previously milliseconds)
What's Changed
- Remove superfluous return statement by @brainix in #626
- In Redlock, consistently measure time in seconds by @brainix in #627
Full Changelog: v2.3.7...v3.0.0
v2.3.7
Optimization: CachedOrderedDict.__init__()
Dramatically improve the performance of CachedOrderedDict.__init__()
. Prior to this release, we were making multiple round trips to Redis, one per dict_key
. As of this release, we make a single bulk call to Redis.
What's Changed
- Document NextId.init() kwargs in docstring by @brainix in #592
- Upgrade requirements by @brainix in #593
- Comment which Redis versions introduced commands by @brainix in #594
- Use dataclasses to define exception classes by @brainix in #595
- Share the same logger between monkey and base by @brainix in #596
- Upgrade Python to 3.10.2 by @brainix in #597
- Improve test coverage by @brainix in #598
- Check for security vulnerabilities by @brainix in #599
- Upgrade requirements by @brainix in #600
- Check for security vulnerabilities on local dev by @brainix in #601
- Upgrade requirements by @brainix in #602
- Upgrade requirements by @brainix in #603
- Implement RedisSet.contains() using SISMEMBER by @brainix in #604
- Lint on file save with Bandit by @brainix in #605
- Upgrade requirements by @brainix in #606
- Upgrade requirements by @brainix in #607
- Write union types as X | Y by @brainix in #608
- Tighten up type checking and type annotations by @brainix in #609
- Upgrade requirements by @brainix in #610
- Upgrade requirements by @brainix in #611
- Configure Bandit to not warn on asserts in tests by @brainix in #612
- Add emojis to README by @brainix in #613
- Write union types as X | Y by @brainix in #614
- Use protocol instead of making _Clearable an ABC by @brainix in #615
- Upgrade requirements by @brainix in #616
- Rename Base class to Container by @brainix in #617
- Refactor _Common class by @brainix in #618
- Clean up formatting by @brainix in #619
- Upgrade requirements by @brainix in #620
- Improve Redlock usage documentation by @brainix in #621
- Upgrade requirements by @brainix in #622
- Create a proper Pottery JSON encoder by @brainix in #623
- Refactor json.dumps() monkey patch by @brainix in #624
- Dramatically speed up CachedOrderedDict.init() by @brainix in #625
Full Changelog: v2.3.6...v2.3.7
v2.3.6
- Bug Fix: Properly configure logging for the Pottery library
- Optimization: Prefer Redis
UNLINK
overDEL
;UNLINK
is faster and non-blocking
What's Changed
- Happy new year! by @brainix in #577
- Upgrade requirements by @brainix in #578
- Prefer Redis UNLINK over DEL by @brainix in #579
- Comment which Redis versions introduced commands by @brainix in #580
- Upgrade requirements by @brainix in #581
- Preserve Open-Closed Principle with name mangling by @brainix in #582
- Upgrade requirements by @brainix in #583
- Define ABCs by subclassing abc.ABC by @brainix in #584
- Unit test that ABCs can't be instantiated by @brainix in #585
- Upgrade requirements by @brainix in #586
- Upgrade requirements by @brainix in #587
- Document Redlock.init() kwargs in docstrings by @brainix in #588
- Use isinstance() to provide a hint to Mypy by @brainix in #589
- Don't specify 'utf-8' argument to bytes.decode() by @brainix in #590
- Properly configure logging for the Pottery library by @brainix in #591
Full Changelog: v2.3.5...v2.3.6
v2.3.5
Bug Fix: Don't allow a RedisDeque
to equal a RedisList
...
...even if they're both on the same Redis instance and have the same key.
Before this release:
>>> from pottery import RedisDeque, RedisList
>>> RedisDeque(key='videos:dicts') == RedisList(key='videos:dicts')
True
As of this release:
>>> from pottery import RedisDeque, RedisList
>>> RedisDeque(key='videos:dicts') == RedisList(key='videos:dicts')
False
What's Changed
- Make minor code cleanups by @brainix in #575
- Don't allow a RedisDeque to equal a RedisList... by @brainix in #576
Full Changelog: v2.3.4...v2.3.5
v2.3.4
Bug Fix: Don't allow RedisDeque
s to equal Python lists...
...even when they contain the same elements. Observe:
>>> import collections
>>> collections.deque([1, 2, 3]) == [1, 2, 3]
False
What's Changed
Full Changelog: v2.3.3...v2.3.4
v2.3.3
Bug Fix: Don't allow RedisDeque
s to equal RedisList
s...
...even when they contain the same elements. Observe:
>>> import collections
>>> collections.deque([1, 2, 3]) == [1, 2, 3]
False
What's Changed
Full Changelog: v2.3.2...v2.3.3
v2.3.2
Bug Fix: Properly compare RedisList
s on different Redis databases
Prior to this release, list1 == list2
would fail if both were RedisList
s but on different Redis databases. This is because we'd try to use the same Redis pipeline for both lists. Fixed in #572.
What's Changed
- Reuse the ._same_redis() helper method by @brainix in #561
- Reorder methods in Primitive ABC to help subclass by @brainix in #562
- Use redis-py's .hscan_iter() and .sscan_iter() by @brainix in #563
- Preserve Open-Closed Principle with name mangling by @brainix in #564
- Simplify code using chunking and aliasing by @brainix in #565
- Name variables more consistently by @brainix in #566
- Use whitespace to make code more clear by @brainix in #567
- Preserve Open-Closed Principle with name mangling by @brainix in #568
- Refactor code in RedisCounter methods for clarity by @brainix in #569
- Simplify RedisDict._populate() by @brainix in #570
- Factor our RedisDict._encode_dict() by @brainix in #571
- Properly compare RedisLists on different Redis dbs by @brainix in #572
Full Changelog: v2.3.1...v2.3.2
v2.3.1
Bug Fix: More robustly test if two Redis clients talk to the same database
Previously, we were comparing the two clients' connection_kwargs
, but connection_kwargs
contains more than just host
, port
, and db
:
>>> from redis import Redis
>>> redis = Redis()
>>> redis.connection_pool.connection_kwargs
{'db': 0, 'username': None, 'password': None, 'socket_timeout': None, 'encoding': 'utf-8', 'encoding_errors': 'strict', 'decode_responses': False, 'retry_on_error': [], 'retry': None, 'health_check_interval': 0, 'client_name': None, 'redis_connect_func': None, 'host': 'localhost', 'port': 6379, 'socket_connect_timeout': None, 'socket_keepalive': None, 'socket_keepalive_options': None}
This PR allows Pottery to recognize that two Redis clients are connected to the same database even if their socket timeout our retry policies are different.
Bug Fix: Make RedisSet.contains_many()
work for non-JSONifyable objects
v2.3.0
New Feature: RedisSimpleQueue
RedisSimpleQueue
is a Redis-backed multi-producer, multi-consumer FIFO queue compatible with Python’s queue.SimpleQueue
. In general, use a Python queue.Queue
if you’re using it in one or more threads, use multiprocessing.Queue
if you’re using it between processes, and use RedisSimpleQueue
if you’re sharing it across machines or if you need for your queue to persist across application crashes or restarts.
What's Changed
Full Changelog: v2.2.2...v2.3.0
v2.2.2
Bug Fix: Import Script
from the correct place
Reported in #552, fixed in #554.
What's Changed
- Use common logger object across entire library by @brainix in #547
- Postpone evaluation of annotations by @brainix in #548
- Upgrade requirements by @brainix in #549
- Write HyperLogLog doctests by @brainix in #550
- Consistently name UUID variable by @brainix in #551
- Fix #552: Import Script from the correct place by @brainix in #554
Full Changelog: v2.2.1...v2.2.2