redis-dict 2.7.0__tar.gz → 3.1.0__tar.gz

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,13 +1,14 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: redis-dict
3
- Version: 2.7.0
3
+ Version: 3.1.0
4
4
  Summary: Dictionary with Redis as storage backend
5
- Home-page: https://github.com/Attumm/redisdict
6
- Author: Melvin Bijman
7
- Author-email: bijman.m.m@gmail.com
5
+ Author-email: Melvin Bijman <bijman.m.m@gmail.com>
8
6
  License: MIT
9
- Keywords: redis python dictionary dict key-value key:value database caching distributed-computing dictionary-interface large-datasets scientific-computing data-persistence high-performance scalable pipelining batching big-data data-types distributed-algorithms encryption data-management
10
- Platform: any
7
+ Project-URL: Homepage, https://github.com/Attumm/redisdict
8
+ Project-URL: Documentation, https://attumm.github.io/redis-dict/
9
+ Project-URL: Repository, https://github.com/Attumm/redisdict.git
10
+ Project-URL: Changelog, https://github.com/Attumm/redisdict/releases
11
+ Keywords: redis,python,dictionary,dict,key-value,database,caching,distributed-computing,dictionary-interface,large-datasets,scientific-computing,data-persistence,high-performance,scalable,pipelining,batching,big-data,data-types,distributed-algorithms,encryption,data-management
11
12
  Classifier: Development Status :: 5 - Production/Stable
12
13
  Classifier: Intended Audience :: Developers
13
14
  Classifier: Intended Audience :: Information Technology
@@ -21,18 +22,51 @@ Classifier: Topic :: Software Development :: Object Brokering
21
22
  Classifier: Topic :: Database :: Database Engines/Servers
22
23
  Classifier: License :: OSI Approved :: MIT License
23
24
  Classifier: Programming Language :: Python :: 3
24
- Classifier: Programming Language :: Python :: 3.6
25
- Classifier: Programming Language :: Python :: 3.7
26
25
  Classifier: Programming Language :: Python :: 3.8
27
26
  Classifier: Programming Language :: Python :: 3.9
28
27
  Classifier: Programming Language :: Python :: 3.10
29
28
  Classifier: Programming Language :: Python :: 3.11
30
29
  Classifier: Programming Language :: Python :: 3.12
30
+ Classifier: Typing :: Typed
31
+ Requires-Python: >=3.8
31
32
  Description-Content-Type: text/markdown
32
33
  License-File: LICENSE
33
- Requires-Dist: redis
34
+ Requires-Dist: redis>=4.0.0
35
+ Provides-Extra: dev
36
+ Requires-Dist: coverage==5.5; extra == "dev"
37
+ Requires-Dist: hypothesis==6.70.1; extra == "dev"
38
+ Requires-Dist: mypy>=1.8.0; extra == "dev"
39
+ Requires-Dist: mypy-extensions>=1.0.0; extra == "dev"
40
+ Requires-Dist: types-pyOpenSSL>=24.0.0.0; extra == "dev"
41
+ Requires-Dist: types-redis>=4.6.0; extra == "dev"
42
+ Requires-Dist: typing_extensions>=4.5.0; extra == "dev"
43
+ Requires-Dist: pylama>=8.4.1; extra == "dev"
44
+ Requires-Dist: pycodestyle==2.10.0; extra == "dev"
45
+ Requires-Dist: pydocstyle==6.3.0; extra == "dev"
46
+ Requires-Dist: pyflakes==3.0.1; extra == "dev"
47
+ Requires-Dist: pylint==3.2.7; extra == "dev"
48
+ Requires-Dist: mccabe==0.7.0; extra == "dev"
49
+ Requires-Dist: attrs==22.2.0; extra == "dev"
50
+ Requires-Dist: cffi==1.15.1; extra == "dev"
51
+ Requires-Dist: cryptography==43.0.1; extra == "dev"
52
+ Requires-Dist: exceptiongroup==1.1.1; extra == "dev"
53
+ Requires-Dist: future==0.18.3; extra == "dev"
54
+ Requires-Dist: pycparser==2.21; extra == "dev"
55
+ Requires-Dist: snowballstemmer==2.2.0; extra == "dev"
56
+ Requires-Dist: sortedcontainers==2.4.0; extra == "dev"
57
+ Requires-Dist: tomli==2.0.1; extra == "dev"
58
+ Requires-Dist: setuptools>=68.0.0; extra == "dev"
59
+ Requires-Dist: darglint; extra == "dev"
60
+ Requires-Dist: pydocstyle; extra == "dev"
61
+ Provides-Extra: docs
62
+ Requires-Dist: sphinx; extra == "docs"
63
+ Requires-Dist: sphinx-rtd-theme; extra == "docs"
64
+ Requires-Dist: sphinx-autodoc-typehints; extra == "docs"
65
+ Requires-Dist: tomli; extra == "docs"
66
+ Requires-Dist: myst-parser; extra == "docs"
34
67
 
35
68
  # Redis-dict
69
+ [![PyPI](https://img.shields.io/pypi/v/redis-dict.svg)](https://pypi.org/project/redis-dict/)
36
70
  [![CI](https://github.com/Attumm/redis-dict/actions/workflows/ci.yml/badge.svg)](https://github.com/Attumm/redis-dict/actions/workflows/ci.yml)
37
71
  [![codecov](https://codecov.io/gh/Attumm/redis-dict/graph/badge.svg?token=Lqs7McQGEs)](https://codecov.io/gh/Attumm/redis-dict)
38
72
  [![Downloads](https://static.pepy.tech/badge/redis-dict/month)](https://pepy.tech/project/redis-dict)
@@ -86,7 +120,6 @@ In Redis our example looks like this.
86
120
 
87
121
  ### Namespaces
88
122
  Acting as an identifier for your dictionary across different systems, RedisDict employs namespaces for organized data management. When a namespace isn't specified, "main" becomes the default. Thus allowing for data organization across systems and projects with the same redis instance.
89
-
90
123
  This approach also minimizes the risk of key collisions between different applications, preventing hard-to-debug issues. By leveraging namespaces, RedisDict ensures a cleaner and more maintainable data management experience for developers working on multiple projects.
91
124
 
92
125
  ## Advanced Features
@@ -135,7 +168,6 @@ dic['gone'] = 'gone in 5 seconds'
135
168
  Efficiently batch your requests using the Pipeline feature, which can be easily utilized with a context manager.
136
169
 
137
170
  ```python
138
- from redis_dict import RedisDict
139
171
  dic = RedisDict(namespace="example")
140
172
 
141
173
  # one round trip to redis
@@ -263,14 +295,11 @@ This approach optimizes Redis database performance and efficiency by ensuring th
263
295
  Following types are supported:
264
296
  `str, int, float, bool, NoneType, list, dict, tuple, set, datetime, date, time, timedelta, Decimal, complex, bytes, UUID, OrderedDict, defaultdict, frozenset`
265
297
  ```python
266
- from redis_dict import RedisDict
267
-
268
298
  from uuid import UUID
269
299
  from decimal import Decimal
270
300
  from collections import OrderedDict, defaultdict
271
301
  from datetime import datetime, date, time, timedelta
272
302
 
273
-
274
303
  dic = RedisDict()
275
304
 
276
305
  dic["string"] = "Hello World"
@@ -299,6 +328,32 @@ dic["default"] = defaultdict(int, {'a': 1, 'b': 2})
299
328
  dic["frozen"] = frozenset([1, 2, 3])
300
329
  ```
301
330
 
331
+
332
+
333
+ ### Nested types
334
+ Nested Types
335
+ RedisDict supports nested structures with mixed types through JSON serialization. The feature works by utilizing JSON encoding and decoding under the hood. While this represents an upgrade in functionality, the feature is not fully implemented and should be used with caution. For optimal performance, using shallow dictionaries is recommended.
336
+ ```python
337
+ from datetime import datetime, timedelta
338
+
339
+ dic["mixed"] = [1, "foobar", 3.14, [1, 2, 3], datetime.now()]
340
+
341
+ dic['dic'] = {"elapsed_time": timedelta(hours=60)}
342
+ ```
343
+
344
+ ### JSON Encoding - Decoding
345
+ The nested type support in RedisDict is implemented using custom JSON encoders and decoders. These JSON encoders and decoders are built on top of RedisDict's own encoding and decoding functionality, extending it for JSON compatibility. Since JSON serialization was a frequently requested feature, these enhanced encoders and decoders are available for use in other projects:
346
+ ```python
347
+ import json
348
+ from datetime import datetime
349
+ from redis_dict import RedisDictJSONDecoder, RedisDictJSONEncoder
350
+
351
+ data = [1, "foobar", 3.14, [1, 2, 3], datetime.now()]
352
+ encoded = json.dumps(data, cls=RedisDictJSONEncoder)
353
+ result = json.loads(encoded, cls=RedisDictJSONDecoder)
354
+ ```
355
+
356
+
302
357
  ### Extending RedisDict with Custom Types
303
358
 
304
359
  RedisDict supports custom type serialization. Here's how to add a new type:
@@ -306,7 +361,6 @@ RedisDict supports custom type serialization. Here's how to add a new type:
306
361
 
307
362
  ```python
308
363
  import json
309
- from redis_dict import RedisDict
310
364
 
311
365
  class Person:
312
366
  def __init__(self, name, age):
@@ -335,23 +389,13 @@ assert result.name == person.name
335
389
  assert result.age == person.age
336
390
  ```
337
391
 
338
- ```python
339
- >>> from datetime import datetime
340
- >>> redis_dict.extends_type(datetime, datetime.isoformat, datetime.fromisoformat)
341
- >>> redis_dict["now"] = datetime.now()
342
- >>> redis_dict
343
- {'now': datetime.datetime(2024, 10, 14, 18, 41, 53, 493775)}
344
- >>> redis_dict["now"]
345
- datetime.datetime(2024, 10, 14, 18, 41, 53, 493775)
346
- ```
347
-
348
- For more information on [extending types](https://github.com/Attumm/redis-dict/blob/main/extend_types_tests.py).
392
+ For more information on [extending types](https://github.com/Attumm/redis-dict/blob/main/tests/unit/extend_types_tests.py).
349
393
  ### Redis Encryption
350
394
  Setup guide for configuring and utilizing encrypted Redis TLS for redis-dict.
351
- [Setup guide](https://github.com/Attumm/redis-dict/blob/main/encrypted_redis.MD)
395
+ [Setup guide](https://github.com/Attumm/redis-dict/blob/main/docs/tutorials/encrypted_redis.MD)
352
396
 
353
397
  ### Redis Storage Encryption
354
- For storing encrypted data values, it's possible to use extended types. Take a look at this [encrypted test](https://github.com/Attumm/redis-dict/blob/main/encrypt_tests.py).
398
+ For storing encrypted data values, it's possible to use extended types. Take a look at this [encrypted test](https://github.com/Attumm/redis-dict/blob/main/tests/unit/encrypt_tests.py).
355
399
 
356
400
  ### Tests
357
401
  The RedisDict library includes a comprehensive suite of tests that ensure its correctness and resilience. The test suite covers various data types, edge cases, and error handling scenarios. It also employs the Hypothesis library for property-based testing, which provides fuzz testing to evaluate the implementation
@@ -359,19 +403,16 @@ The RedisDict library includes a comprehensive suite of tests that ensure its co
359
403
  ### Redis config
360
404
  To configure RedisDict using your Redis config.
361
405
 
362
- Configure both the host and port.
406
+ Configure both the host and port. Or configuration with a setting dictionary.
363
407
  ```python
364
408
  dic = RedisDict(host='127.0.0.1', port=6380)
365
- ```
366
409
 
367
- Configuration with a dictionary.
368
- ```python
369
410
  redis_config = {
370
411
  'host': '127.0.0.1',
371
412
  'port': 6380,
372
413
  }
373
414
 
374
- dic = RedisDict(**redis_config)
415
+ confid_dic = RedisDict(**redis_config)
375
416
  ```
376
417
 
377
418
  ## Installation
@@ -382,4 +423,3 @@ pip install redis-dict
382
423
  ### Note
383
424
  * Please be aware that this project is currently being utilized by various organizations in their production environments. If you have any questions or concerns, feel free to raise issues
384
425
  * This project only uses redis as dependency
385
-
@@ -1,4 +1,5 @@
1
1
  # Redis-dict
2
+ [![PyPI](https://img.shields.io/pypi/v/redis-dict.svg)](https://pypi.org/project/redis-dict/)
2
3
  [![CI](https://github.com/Attumm/redis-dict/actions/workflows/ci.yml/badge.svg)](https://github.com/Attumm/redis-dict/actions/workflows/ci.yml)
3
4
  [![codecov](https://codecov.io/gh/Attumm/redis-dict/graph/badge.svg?token=Lqs7McQGEs)](https://codecov.io/gh/Attumm/redis-dict)
4
5
  [![Downloads](https://static.pepy.tech/badge/redis-dict/month)](https://pepy.tech/project/redis-dict)
@@ -52,7 +53,6 @@ In Redis our example looks like this.
52
53
 
53
54
  ### Namespaces
54
55
  Acting as an identifier for your dictionary across different systems, RedisDict employs namespaces for organized data management. When a namespace isn't specified, "main" becomes the default. Thus allowing for data organization across systems and projects with the same redis instance.
55
-
56
56
  This approach also minimizes the risk of key collisions between different applications, preventing hard-to-debug issues. By leveraging namespaces, RedisDict ensures a cleaner and more maintainable data management experience for developers working on multiple projects.
57
57
 
58
58
  ## Advanced Features
@@ -101,7 +101,6 @@ dic['gone'] = 'gone in 5 seconds'
101
101
  Efficiently batch your requests using the Pipeline feature, which can be easily utilized with a context manager.
102
102
 
103
103
  ```python
104
- from redis_dict import RedisDict
105
104
  dic = RedisDict(namespace="example")
106
105
 
107
106
  # one round trip to redis
@@ -229,14 +228,11 @@ This approach optimizes Redis database performance and efficiency by ensuring th
229
228
  Following types are supported:
230
229
  `str, int, float, bool, NoneType, list, dict, tuple, set, datetime, date, time, timedelta, Decimal, complex, bytes, UUID, OrderedDict, defaultdict, frozenset`
231
230
  ```python
232
- from redis_dict import RedisDict
233
-
234
231
  from uuid import UUID
235
232
  from decimal import Decimal
236
233
  from collections import OrderedDict, defaultdict
237
234
  from datetime import datetime, date, time, timedelta
238
235
 
239
-
240
236
  dic = RedisDict()
241
237
 
242
238
  dic["string"] = "Hello World"
@@ -265,6 +261,32 @@ dic["default"] = defaultdict(int, {'a': 1, 'b': 2})
265
261
  dic["frozen"] = frozenset([1, 2, 3])
266
262
  ```
267
263
 
264
+
265
+
266
+ ### Nested types
267
+ Nested Types
268
+ RedisDict supports nested structures with mixed types through JSON serialization. The feature works by utilizing JSON encoding and decoding under the hood. While this represents an upgrade in functionality, the feature is not fully implemented and should be used with caution. For optimal performance, using shallow dictionaries is recommended.
269
+ ```python
270
+ from datetime import datetime, timedelta
271
+
272
+ dic["mixed"] = [1, "foobar", 3.14, [1, 2, 3], datetime.now()]
273
+
274
+ dic['dic'] = {"elapsed_time": timedelta(hours=60)}
275
+ ```
276
+
277
+ ### JSON Encoding - Decoding
278
+ The nested type support in RedisDict is implemented using custom JSON encoders and decoders. These JSON encoders and decoders are built on top of RedisDict's own encoding and decoding functionality, extending it for JSON compatibility. Since JSON serialization was a frequently requested feature, these enhanced encoders and decoders are available for use in other projects:
279
+ ```python
280
+ import json
281
+ from datetime import datetime
282
+ from redis_dict import RedisDictJSONDecoder, RedisDictJSONEncoder
283
+
284
+ data = [1, "foobar", 3.14, [1, 2, 3], datetime.now()]
285
+ encoded = json.dumps(data, cls=RedisDictJSONEncoder)
286
+ result = json.loads(encoded, cls=RedisDictJSONDecoder)
287
+ ```
288
+
289
+
268
290
  ### Extending RedisDict with Custom Types
269
291
 
270
292
  RedisDict supports custom type serialization. Here's how to add a new type:
@@ -272,7 +294,6 @@ RedisDict supports custom type serialization. Here's how to add a new type:
272
294
 
273
295
  ```python
274
296
  import json
275
- from redis_dict import RedisDict
276
297
 
277
298
  class Person:
278
299
  def __init__(self, name, age):
@@ -301,23 +322,13 @@ assert result.name == person.name
301
322
  assert result.age == person.age
302
323
  ```
303
324
 
304
- ```python
305
- >>> from datetime import datetime
306
- >>> redis_dict.extends_type(datetime, datetime.isoformat, datetime.fromisoformat)
307
- >>> redis_dict["now"] = datetime.now()
308
- >>> redis_dict
309
- {'now': datetime.datetime(2024, 10, 14, 18, 41, 53, 493775)}
310
- >>> redis_dict["now"]
311
- datetime.datetime(2024, 10, 14, 18, 41, 53, 493775)
312
- ```
313
-
314
- For more information on [extending types](https://github.com/Attumm/redis-dict/blob/main/extend_types_tests.py).
325
+ For more information on [extending types](https://github.com/Attumm/redis-dict/blob/main/tests/unit/extend_types_tests.py).
315
326
  ### Redis Encryption
316
327
  Setup guide for configuring and utilizing encrypted Redis TLS for redis-dict.
317
- [Setup guide](https://github.com/Attumm/redis-dict/blob/main/encrypted_redis.MD)
328
+ [Setup guide](https://github.com/Attumm/redis-dict/blob/main/docs/tutorials/encrypted_redis.MD)
318
329
 
319
330
  ### Redis Storage Encryption
320
- For storing encrypted data values, it's possible to use extended types. Take a look at this [encrypted test](https://github.com/Attumm/redis-dict/blob/main/encrypt_tests.py).
331
+ For storing encrypted data values, it's possible to use extended types. Take a look at this [encrypted test](https://github.com/Attumm/redis-dict/blob/main/tests/unit/encrypt_tests.py).
321
332
 
322
333
  ### Tests
323
334
  The RedisDict library includes a comprehensive suite of tests that ensure its correctness and resilience. The test suite covers various data types, edge cases, and error handling scenarios. It also employs the Hypothesis library for property-based testing, which provides fuzz testing to evaluate the implementation
@@ -325,19 +336,16 @@ The RedisDict library includes a comprehensive suite of tests that ensure its co
325
336
  ### Redis config
326
337
  To configure RedisDict using your Redis config.
327
338
 
328
- Configure both the host and port.
339
+ Configure both the host and port. Or configuration with a setting dictionary.
329
340
  ```python
330
341
  dic = RedisDict(host='127.0.0.1', port=6380)
331
- ```
332
342
 
333
- Configuration with a dictionary.
334
- ```python
335
343
  redis_config = {
336
344
  'host': '127.0.0.1',
337
345
  'port': 6380,
338
346
  }
339
347
 
340
- dic = RedisDict(**redis_config)
348
+ confid_dic = RedisDict(**redis_config)
341
349
  ```
342
350
 
343
351
  ## Installation
@@ -348,4 +356,3 @@ pip install redis-dict
348
356
  ### Note
349
357
  * Please be aware that this project is currently being utilized by various organizations in their production environments. If you have any questions or concerns, feel free to raise issues
350
358
  * This project only uses redis as dependency
351
-
@@ -0,0 +1,133 @@
1
+ [build-system]
2
+ requires = ["setuptools>=68.0", "wheel"]
3
+ build-backend = "setuptools.build_meta"
4
+
5
+ [project]
6
+ name = "redis-dict"
7
+ version = "3.1.0"
8
+ description = "Dictionary with Redis as storage backend"
9
+ authors = [
10
+ {name = "Melvin Bijman", email = "bijman.m.m@gmail.com"},
11
+ ]
12
+ readme = "README.md"
13
+
14
+ requires-python = ">=3.8"
15
+ license = {text = "MIT"}
16
+ dependencies = [
17
+ "redis>=4.0.0",
18
+ ]
19
+ classifiers = [
20
+ "Development Status :: 5 - Production/Stable",
21
+ "Intended Audience :: Developers",
22
+ "Intended Audience :: Information Technology",
23
+ "Intended Audience :: Science/Research",
24
+ "Topic :: Internet",
25
+ "Topic :: Scientific/Engineering",
26
+ "Topic :: Database",
27
+ "Topic :: System :: Distributed Computing",
28
+ "Topic :: Software Development :: Libraries :: Python Modules",
29
+ "Topic :: Software Development :: Object Brokering",
30
+ "Topic :: Database :: Database Engines/Servers",
31
+ "License :: OSI Approved :: MIT License",
32
+ "Programming Language :: Python :: 3",
33
+ "Programming Language :: Python :: 3.8",
34
+ "Programming Language :: Python :: 3.9",
35
+ "Programming Language :: Python :: 3.10",
36
+ "Programming Language :: Python :: 3.11",
37
+ "Programming Language :: Python :: 3.12",
38
+ "Typing :: Typed",
39
+ ]
40
+
41
+ keywords = [
42
+ "redis", "python", "dictionary", "dict", "key-value",
43
+ "database", "caching", "distributed-computing",
44
+ "dictionary-interface", "large-datasets",
45
+ "scientific-computing", "data-persistence",
46
+ "high-performance", "scalable", "pipelining",
47
+ "batching", "big-data", "data-types",
48
+ "distributed-algorithms", "encryption",
49
+ "data-management",
50
+ ]
51
+
52
+ [project.optional-dependencies]
53
+ dev = [
54
+ "coverage==5.5",
55
+ "hypothesis==6.70.1",
56
+
57
+ "mypy>=1.8.0",
58
+ "mypy-extensions>=1.0.0",
59
+ "types-pyOpenSSL>=24.0.0.0",
60
+ "types-redis>=4.6.0",
61
+ "typing_extensions>=4.5.0",
62
+
63
+ "pylama>=8.4.1",
64
+ "pycodestyle==2.10.0",
65
+ "pydocstyle==6.3.0",
66
+ "pyflakes==3.0.1",
67
+ "pylint==3.2.7",
68
+ "mccabe==0.7.0",
69
+
70
+ "attrs==22.2.0",
71
+ "cffi==1.15.1",
72
+ "cryptography==43.0.1",
73
+ "exceptiongroup==1.1.1",
74
+ "future==0.18.3",
75
+ "pycparser==2.21",
76
+ "snowballstemmer==2.2.0",
77
+ "sortedcontainers==2.4.0",
78
+ "tomli==2.0.1",
79
+ "setuptools>=68.0.0",
80
+ "darglint",
81
+ "pydocstyle",
82
+ ]
83
+
84
+ docs = [
85
+ "sphinx",
86
+ "sphinx-rtd-theme",
87
+ "sphinx-autodoc-typehints",
88
+ "tomli",
89
+ "myst-parser",
90
+ ]
91
+
92
+
93
+ [tool.setuptools]
94
+ package-dir = {"" = "src"}
95
+ packages = ["redis_dict"]
96
+
97
+ [tool.setuptools.package-data]
98
+ redis_dict = ["py.typed"]
99
+
100
+ [tool.coverage.run]
101
+ source = ["redis_dict"]
102
+ branch = true
103
+
104
+ [tool.coverage.report]
105
+ exclude_lines = [
106
+ "pragma: no cover",
107
+ "def __repr__",
108
+ "if __name__ == .__main__.:",
109
+ "raise NotImplementedError",
110
+ "if TYPE_CHECKING:",
111
+ ]
112
+ show_missing = true
113
+
114
+ [tool.mypy]
115
+ python_version = "3.8"
116
+ strict = true
117
+ mypy_path = "src"
118
+ files = ["src"]
119
+ namespace_packages = true
120
+ explicit_package_bases = true
121
+
122
+ [tool.pylama]
123
+ ignore = "E501,E231"
124
+ skip = "*/.tox/*,*/.env/*,build/*"
125
+ linters = "pycodestyle,pyflakes,mccabe"
126
+ max_line_length = 120
127
+ paths = ["src/redis_dict"]
128
+
129
+ [project.urls]
130
+ Homepage = "https://github.com/Attumm/redisdict"
131
+ Documentation = "https://attumm.github.io/redis-dict/"
132
+ Repository = "https://github.com/Attumm/redisdict.git"
133
+ Changelog = "https://github.com/Attumm/redisdict/releases"
@@ -0,0 +1,17 @@
1
+ """__init__ module for redis dict."""
2
+ from importlib.metadata import version, PackageNotFoundError
3
+
4
+ from .core import RedisDict
5
+ from .type_management import decoding_registry, encoding_registry, RedisDictJSONEncoder, RedisDictJSONDecoder
6
+
7
+ __all__ = [
8
+ 'RedisDict',
9
+ 'decoding_registry',
10
+ 'encoding_registry',
11
+ 'RedisDictJSONEncoder',
12
+ 'RedisDictJSONDecoder',
13
+ ]
14
+ try:
15
+ __version__ = version("redis-dict")
16
+ except PackageNotFoundError:
17
+ __version__ = "0.0.0"