coredis 5.1.0__tar.gz → 5.3.0__tar.gz

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 coredis might be problematic. Click here for more details.

Files changed (278) hide show
  1. coredis-5.3.0/.gitattributes +1 -0
  2. coredis-5.3.0/.github/FUNDING.yml +2 -0
  3. coredis-5.3.0/.github/ISSUE_TEMPLATE/bug-report.md +41 -0
  4. coredis-5.3.0/.github/ISSUE_TEMPLATE/feature.md +17 -0
  5. coredis-5.3.0/.github/dependabot.yml +11 -0
  6. coredis-5.3.0/.github/workflows/compatibility.yml +154 -0
  7. coredis-5.3.0/.github/workflows/main.yml +302 -0
  8. coredis-5.3.0/.gitignore +25 -0
  9. coredis-5.3.0/.readthedocs.yml +12 -0
  10. coredis-5.3.0/CODE_OF_CONDUCT.md +128 -0
  11. {coredis-5.1.0 → coredis-5.3.0}/HISTORY.rst +34 -0
  12. {coredis-5.1.0 → coredis-5.3.0}/MANIFEST.in +0 -2
  13. coredis-5.3.0/Makefile +29 -0
  14. {coredis-5.1.0/coredis.egg-info → coredis-5.3.0}/PKG-INFO +14 -32
  15. {coredis-5.1.0 → coredis-5.3.0}/README.md +0 -1
  16. {coredis-5.1.0 → coredis-5.3.0}/coredis/__init__.py +2 -6
  17. coredis-5.3.0/coredis/_enum.py +42 -0
  18. coredis-5.3.0/coredis/_utils.py +440 -0
  19. coredis-5.3.0/coredis/_version.py +34 -0
  20. coredis-5.3.0/coredis/_version.pyi +1 -0
  21. {coredis-5.1.0 → coredis-5.3.0}/coredis/client/basic.py +11 -2
  22. {coredis-5.1.0 → coredis-5.3.0}/coredis/commands/_key_spec.py +2 -0
  23. {coredis-5.1.0 → coredis-5.3.0}/coredis/commands/constants.py +5 -1
  24. {coredis-5.1.0 → coredis-5.3.0}/coredis/commands/core.py +87 -3
  25. {coredis-5.1.0 → coredis-5.3.0}/coredis/commands/monitor.py +1 -0
  26. {coredis-5.1.0 → coredis-5.3.0}/coredis/commands/pubsub.py +2 -1
  27. {coredis-5.1.0 → coredis-5.3.0}/coredis/modules/__init__.py +5 -1
  28. coredis-5.3.0/coredis/recipes/__init__.py +0 -0
  29. {coredis-5.1.0 → coredis-5.3.0}/coredis/tokens.py +122 -54
  30. {coredis-5.1.0 → coredis-5.3.0}/coredis/typing.py +14 -1
  31. coredis-5.3.0/docker-compose.yml +291 -0
  32. coredis-5.3.0/docs/Makefile +20 -0
  33. coredis-5.3.0/docs/make.bat +36 -0
  34. coredis-5.3.0/docs/source/_static/custom.css +10 -0
  35. coredis-5.3.0/docs/source/api/bitfield.rst +7 -0
  36. coredis-5.3.0/docs/source/api/caching.rst +24 -0
  37. coredis-5.3.0/docs/source/api/clients.rst +32 -0
  38. coredis-5.3.0/docs/source/api/connections.rst +57 -0
  39. coredis-5.3.0/docs/source/api/credentials.rst +22 -0
  40. coredis-5.3.0/docs/source/api/errors.rst +108 -0
  41. coredis-5.3.0/docs/source/api/index.rst +22 -0
  42. coredis-5.3.0/docs/source/api/modules.rst +85 -0
  43. coredis-5.3.0/docs/source/api/pipeline.rst +13 -0
  44. coredis-5.3.0/docs/source/api/pubsub.rst +21 -0
  45. coredis-5.3.0/docs/source/api/scripting.rst +21 -0
  46. coredis-5.3.0/docs/source/api/streams.rst +18 -0
  47. coredis-5.3.0/docs/source/api/typing.rst +88 -0
  48. coredis-5.3.0/docs/source/api/utilities.rst +30 -0
  49. coredis-5.3.0/docs/source/compatibility.rst +5678 -0
  50. coredis-5.3.0/docs/source/conf.py +207 -0
  51. coredis-5.3.0/docs/source/glossary.rst +68 -0
  52. coredis-5.3.0/docs/source/handbook/.cluster.rst.swp +0 -0
  53. coredis-5.3.0/docs/source/handbook/caching.rst +88 -0
  54. coredis-5.3.0/docs/source/handbook/cluster.rst +50 -0
  55. coredis-5.3.0/docs/source/handbook/connections.rst +165 -0
  56. coredis-5.3.0/docs/source/handbook/credentials.rst +38 -0
  57. coredis-5.3.0/docs/source/handbook/development.rst +22 -0
  58. coredis-5.3.0/docs/source/handbook/encoding.rst +26 -0
  59. coredis-5.3.0/docs/source/handbook/index.rst +72 -0
  60. coredis-5.3.0/docs/source/handbook/modules.rst +640 -0
  61. coredis-5.3.0/docs/source/handbook/noreply.rst +41 -0
  62. coredis-5.3.0/docs/source/handbook/optimization.rst +17 -0
  63. coredis-5.3.0/docs/source/handbook/pipelines.rst +124 -0
  64. coredis-5.3.0/docs/source/handbook/pubsub.rst +235 -0
  65. coredis-5.3.0/docs/source/handbook/response.rst +18 -0
  66. coredis-5.3.0/docs/source/handbook/scripting.rst +230 -0
  67. coredis-5.3.0/docs/source/handbook/sentinel.rst +47 -0
  68. coredis-5.3.0/docs/source/handbook/streams.rst +203 -0
  69. coredis-5.3.0/docs/source/handbook/typing.rst +92 -0
  70. coredis-5.3.0/docs/source/history.rst +45 -0
  71. coredis-5.3.0/docs/source/index.rst +200 -0
  72. coredis-5.3.0/docs/source/recipes/credentials.rst +23 -0
  73. coredis-5.3.0/docs/source/recipes/index.rst +18 -0
  74. coredis-5.3.0/docs/source/recipes/locks.rst +26 -0
  75. coredis-5.3.0/docs/source/release_notes.rst +1 -0
  76. coredis-5.3.0/docs/source/theme_config.py +51 -0
  77. coredis-5.3.0/push-release.sh +8 -0
  78. coredis-5.3.0/pyproject.toml +223 -0
  79. coredis-5.3.0/pytest.ini +46 -0
  80. coredis-5.3.0/scripts/RedisJSON.json +535 -0
  81. coredis-5.3.0/scripts/benchmark.sh +16 -0
  82. coredis-5.3.0/scripts/bloom.json +1024 -0
  83. coredis-5.3.0/scripts/code_gen.py +2576 -0
  84. coredis-5.3.0/scripts/commands.json +20146 -0
  85. coredis-5.3.0/scripts/countmin.json +1024 -0
  86. coredis-5.3.0/scripts/cuckoo.json +1024 -0
  87. coredis-5.3.0/scripts/github_release_notes.sh +8 -0
  88. coredis-5.3.0/scripts/graph.json +147 -0
  89. coredis-5.3.0/scripts/search.json +1902 -0
  90. coredis-5.3.0/scripts/suggestion.json +1902 -0
  91. coredis-5.3.0/scripts/tdigest.json +1024 -0
  92. coredis-5.3.0/scripts/test_data_gen.py +63 -0
  93. coredis-5.3.0/scripts/timeseries.json +1519 -0
  94. coredis-5.3.0/scripts/topk.json +1024 -0
  95. coredis-5.3.0/tag.sh +26 -0
  96. coredis-5.3.0/tests/__init__.py +0 -0
  97. coredis-5.3.0/tests/cluster/__init__.py +0 -0
  98. coredis-5.3.0/tests/cluster/conftest.py +47 -0
  99. coredis-5.3.0/tests/cluster/test_cluster_connection_pool.py +532 -0
  100. coredis-5.3.0/tests/cluster/test_node_manager.py +372 -0
  101. coredis-5.3.0/tests/cluster/test_non_atomic_commands.py +63 -0
  102. coredis-5.3.0/tests/cluster/test_pipeline.py +403 -0
  103. coredis-5.3.0/tests/cluster/test_pubsub.py +570 -0
  104. coredis-5.3.0/tests/cluster/test_scripting.py +133 -0
  105. coredis-5.3.0/tests/commands/__init__.py +0 -0
  106. coredis-5.3.0/tests/commands/test_acl.py +96 -0
  107. coredis-5.3.0/tests/commands/test_bitmap.py +175 -0
  108. coredis-5.3.0/tests/commands/test_cluster.py +219 -0
  109. coredis-5.3.0/tests/commands/test_connection.py +262 -0
  110. coredis-5.3.0/tests/commands/test_functions.py +279 -0
  111. coredis-5.3.0/tests/commands/test_generic.py +604 -0
  112. coredis-5.3.0/tests/commands/test_geo.py +745 -0
  113. coredis-5.3.0/tests/commands/test_hash.py +356 -0
  114. coredis-5.3.0/tests/commands/test_hyperloglog.py +46 -0
  115. coredis-5.3.0/tests/commands/test_list.py +309 -0
  116. coredis-5.3.0/tests/commands/test_modules.py +74 -0
  117. coredis-5.3.0/tests/commands/test_server.py +382 -0
  118. coredis-5.3.0/tests/commands/test_set.py +151 -0
  119. coredis-5.3.0/tests/commands/test_sorted_set.py +750 -0
  120. coredis-5.3.0/tests/commands/test_streams.py +552 -0
  121. coredis-5.3.0/tests/commands/test_string.py +294 -0
  122. coredis-5.3.0/tests/commands/test_vector_sets.py +203 -0
  123. coredis-5.3.0/tests/conftest.py +1245 -0
  124. coredis-5.3.0/tests/experimental/__init__.py +0 -0
  125. coredis-5.3.0/tests/modules/__init__.py +0 -0
  126. coredis-5.3.0/tests/modules/data/city_index.json +39102 -0
  127. coredis-5.3.0/tests/modules/data/vss_queries.json +1 -0
  128. coredis-5.3.0/tests/modules/data/worldcities.csv +44692 -0
  129. coredis-5.3.0/tests/modules/test_autocomplete.py +84 -0
  130. coredis-5.3.0/tests/modules/test_bloom_filter.py +102 -0
  131. coredis-5.3.0/tests/modules/test_compatibilty.py +21 -0
  132. coredis-5.3.0/tests/modules/test_count_min_sketch.py +106 -0
  133. coredis-5.3.0/tests/modules/test_cuckoo_filter.py +98 -0
  134. coredis-5.3.0/tests/modules/test_graph.py +233 -0
  135. coredis-5.3.0/tests/modules/test_json.py +858 -0
  136. coredis-5.3.0/tests/modules/test_search.py +874 -0
  137. coredis-5.3.0/tests/modules/test_tdigest.py +98 -0
  138. coredis-5.3.0/tests/modules/test_timeseries.py +726 -0
  139. coredis-5.3.0/tests/modules/test_topk.py +56 -0
  140. coredis-5.3.0/tests/recipes/__init__.py +0 -0
  141. coredis-5.3.0/tests/recipes/credentials/__init__.py +0 -0
  142. coredis-5.3.0/tests/recipes/credentials/test_elasticache_iam_provider.py +14 -0
  143. coredis-5.3.0/tests/recipes/locks/__init__.py +0 -0
  144. coredis-5.3.0/tests/recipes/locks/test_lua_lock.py +175 -0
  145. coredis-5.3.0/tests/test_authentication.py +157 -0
  146. coredis-5.3.0/tests/test_cache.py +80 -0
  147. coredis-5.3.0/tests/test_client.py +317 -0
  148. coredis-5.3.0/tests/test_connection.py +114 -0
  149. coredis-5.3.0/tests/test_connection_pool.py +627 -0
  150. coredis-5.3.0/tests/test_credentials.py +24 -0
  151. coredis-5.3.0/tests/test_encoding.py +44 -0
  152. coredis-5.3.0/tests/test_lru_cache.py +24 -0
  153. coredis-5.3.0/tests/test_monitor.py +47 -0
  154. coredis-5.3.0/tests/test_parsers.py +395 -0
  155. coredis-5.3.0/tests/test_pipeline.py +398 -0
  156. coredis-5.3.0/tests/test_pubsub.py +486 -0
  157. coredis-5.3.0/tests/test_retry.py +117 -0
  158. coredis-5.3.0/tests/test_scripting.py +225 -0
  159. coredis-5.3.0/tests/test_sentinel.py +313 -0
  160. coredis-5.3.0/tests/test_sidecar.py +60 -0
  161. coredis-5.3.0/tests/test_stream_consumers.py +323 -0
  162. coredis-5.3.0/tests/test_tracking_cache.py +316 -0
  163. coredis-5.3.0/tests/test_type_adapters.py +174 -0
  164. coredis-5.3.0/tests/test_utils.py +29 -0
  165. coredis-5.3.0/tests/tls/ca.crt +32 -0
  166. coredis-5.3.0/tests/tls/ca.key +52 -0
  167. coredis-5.3.0/tests/tls/ca.txt +1 -0
  168. coredis-5.3.0/tests/tls/client.crt +26 -0
  169. coredis-5.3.0/tests/tls/client.key +28 -0
  170. coredis-5.3.0/tests/tls/invalid-ca.crt +29 -0
  171. coredis-5.3.0/tests/tls/invalid-client.crt +24 -0
  172. coredis-5.3.0/tests/tls/invalid-client.key +27 -0
  173. coredis-5.3.0/tests/tls/openssl.cnf +7 -0
  174. coredis-5.3.0/tests/tls/redis.crt +23 -0
  175. coredis-5.3.0/tests/tls/redis.dh +8 -0
  176. coredis-5.3.0/tests/tls/redis.key +28 -0
  177. coredis-5.3.0/tests/tls/server.crt +26 -0
  178. coredis-5.3.0/tests/tls/server.key +28 -0
  179. coredis-5.3.0/uv.lock +3192 -0
  180. coredis-5.1.0/PKG-INFO +0 -229
  181. coredis-5.1.0/coredis/_utils.py +0 -480
  182. coredis-5.1.0/coredis/_version.py +0 -21
  183. coredis-5.1.0/coredis/speedups.c +0 -146
  184. coredis-5.1.0/coredis/speedups.pyi +0 -4
  185. coredis-5.1.0/coredis.egg-info/SOURCES.txt +0 -111
  186. coredis-5.1.0/coredis.egg-info/dependency_links.txt +0 -1
  187. coredis-5.1.0/coredis.egg-info/requires.txt +0 -10
  188. coredis-5.1.0/coredis.egg-info/top_level.txt +0 -1
  189. coredis-5.1.0/pyproject.toml +0 -68
  190. coredis-5.1.0/requirements/ci.txt +0 -3
  191. coredis-5.1.0/requirements/dev.txt +0 -9
  192. coredis-5.1.0/requirements/dev_extra.txt +0 -2
  193. coredis-5.1.0/requirements/docs.txt +0 -16
  194. coredis-5.1.0/requirements/main.txt +0 -6
  195. coredis-5.1.0/requirements/publishing.txt +0 -6
  196. coredis-5.1.0/requirements/recipes.txt +0 -3
  197. coredis-5.1.0/requirements/test.txt +0 -17
  198. coredis-5.1.0/setup.cfg +0 -4
  199. coredis-5.1.0/setup.py +0 -159
  200. coredis-5.1.0/versioneer.py +0 -2264
  201. /coredis-5.1.0/coredis/modules/response/__init__.py → /coredis-5.3.0/.gitmodules +0 -0
  202. {coredis-5.1.0 → coredis-5.3.0}/LICENSE +0 -0
  203. {coredis-5.1.0 → coredis-5.3.0}/coredis/_json.py +0 -0
  204. {coredis-5.1.0 → coredis-5.3.0}/coredis/_packer.py +0 -0
  205. {coredis-5.1.0 → coredis-5.3.0}/coredis/_protocols.py +0 -0
  206. {coredis-5.1.0 → coredis-5.3.0}/coredis/_py_311_typing.py +0 -0
  207. {coredis-5.1.0 → coredis-5.3.0}/coredis/_py_312_typing.py +0 -0
  208. {coredis-5.1.0 → coredis-5.3.0}/coredis/_sidecar.py +0 -0
  209. {coredis-5.1.0 → coredis-5.3.0}/coredis/cache.py +0 -0
  210. {coredis-5.1.0 → coredis-5.3.0}/coredis/client/__init__.py +0 -0
  211. {coredis-5.1.0 → coredis-5.3.0}/coredis/client/cluster.py +0 -0
  212. {coredis-5.1.0 → coredis-5.3.0}/coredis/commands/__init__.py +0 -0
  213. {coredis-5.1.0 → coredis-5.3.0}/coredis/commands/_utils.py +0 -0
  214. {coredis-5.1.0 → coredis-5.3.0}/coredis/commands/_validators.py +0 -0
  215. {coredis-5.1.0 → coredis-5.3.0}/coredis/commands/_wrappers.py +0 -0
  216. {coredis-5.1.0 → coredis-5.3.0}/coredis/commands/bitfield.py +0 -0
  217. {coredis-5.1.0 → coredis-5.3.0}/coredis/commands/function.py +0 -0
  218. {coredis-5.1.0 → coredis-5.3.0}/coredis/commands/request.py +0 -0
  219. {coredis-5.1.0 → coredis-5.3.0}/coredis/commands/script.py +0 -0
  220. {coredis-5.1.0 → coredis-5.3.0}/coredis/commands/sentinel.py +0 -0
  221. {coredis-5.1.0 → coredis-5.3.0}/coredis/config.py +0 -0
  222. {coredis-5.1.0 → coredis-5.3.0}/coredis/connection.py +0 -0
  223. {coredis-5.1.0 → coredis-5.3.0}/coredis/constants.py +0 -0
  224. {coredis-5.1.0 → coredis-5.3.0}/coredis/credentials.py +0 -0
  225. {coredis-5.1.0 → coredis-5.3.0}/coredis/exceptions.py +0 -0
  226. {coredis-5.1.0 → coredis-5.3.0}/coredis/experimental/__init__.py +0 -0
  227. {coredis-5.1.0 → coredis-5.3.0}/coredis/globals.py +0 -0
  228. {coredis-5.1.0 → coredis-5.3.0}/coredis/modules/autocomplete.py +0 -0
  229. {coredis-5.1.0 → coredis-5.3.0}/coredis/modules/base.py +0 -0
  230. {coredis-5.1.0 → coredis-5.3.0}/coredis/modules/filters.py +0 -0
  231. {coredis-5.1.0 → coredis-5.3.0}/coredis/modules/graph.py +0 -0
  232. {coredis-5.1.0 → coredis-5.3.0}/coredis/modules/json.py +0 -0
  233. {coredis-5.1.0/coredis/modules/response/_callbacks → coredis-5.3.0/coredis/modules/response}/__init__.py +0 -0
  234. {coredis-5.1.0/coredis/recipes → coredis-5.3.0/coredis/modules/response/_callbacks}/__init__.py +0 -0
  235. {coredis-5.1.0 → coredis-5.3.0}/coredis/modules/response/_callbacks/autocomplete.py +0 -0
  236. {coredis-5.1.0 → coredis-5.3.0}/coredis/modules/response/_callbacks/graph.py +0 -0
  237. {coredis-5.1.0 → coredis-5.3.0}/coredis/modules/response/_callbacks/json.py +0 -0
  238. {coredis-5.1.0 → coredis-5.3.0}/coredis/modules/response/_callbacks/search.py +0 -0
  239. {coredis-5.1.0 → coredis-5.3.0}/coredis/modules/response/_callbacks/timeseries.py +0 -0
  240. {coredis-5.1.0 → coredis-5.3.0}/coredis/modules/response/types.py +0 -0
  241. {coredis-5.1.0 → coredis-5.3.0}/coredis/modules/search.py +0 -0
  242. {coredis-5.1.0 → coredis-5.3.0}/coredis/modules/timeseries.py +0 -0
  243. {coredis-5.1.0 → coredis-5.3.0}/coredis/parser.py +0 -0
  244. {coredis-5.1.0 → coredis-5.3.0}/coredis/pipeline.py +0 -0
  245. {coredis-5.1.0 → coredis-5.3.0}/coredis/pool/__init__.py +0 -0
  246. {coredis-5.1.0 → coredis-5.3.0}/coredis/pool/basic.py +0 -0
  247. {coredis-5.1.0 → coredis-5.3.0}/coredis/pool/cluster.py +0 -0
  248. {coredis-5.1.0 → coredis-5.3.0}/coredis/pool/nodemanager.py +0 -0
  249. {coredis-5.1.0 → coredis-5.3.0}/coredis/py.typed +0 -0
  250. {coredis-5.1.0 → coredis-5.3.0}/coredis/recipes/credentials/__init__.py +0 -0
  251. {coredis-5.1.0 → coredis-5.3.0}/coredis/recipes/credentials/iam_provider.py +0 -0
  252. {coredis-5.1.0 → coredis-5.3.0}/coredis/recipes/locks/__init__.py +0 -0
  253. {coredis-5.1.0 → coredis-5.3.0}/coredis/recipes/locks/extend.lua +0 -0
  254. {coredis-5.1.0 → coredis-5.3.0}/coredis/recipes/locks/lua_lock.py +0 -0
  255. {coredis-5.1.0 → coredis-5.3.0}/coredis/recipes/locks/release.lua +0 -0
  256. {coredis-5.1.0 → coredis-5.3.0}/coredis/response/__init__.py +0 -0
  257. {coredis-5.1.0 → coredis-5.3.0}/coredis/response/_callbacks/__init__.py +0 -0
  258. {coredis-5.1.0 → coredis-5.3.0}/coredis/response/_callbacks/acl.py +0 -0
  259. {coredis-5.1.0 → coredis-5.3.0}/coredis/response/_callbacks/cluster.py +0 -0
  260. {coredis-5.1.0 → coredis-5.3.0}/coredis/response/_callbacks/command.py +0 -0
  261. {coredis-5.1.0 → coredis-5.3.0}/coredis/response/_callbacks/connection.py +0 -0
  262. {coredis-5.1.0 → coredis-5.3.0}/coredis/response/_callbacks/geo.py +0 -0
  263. {coredis-5.1.0 → coredis-5.3.0}/coredis/response/_callbacks/hash.py +0 -0
  264. {coredis-5.1.0 → coredis-5.3.0}/coredis/response/_callbacks/keys.py +0 -0
  265. {coredis-5.1.0 → coredis-5.3.0}/coredis/response/_callbacks/module.py +0 -0
  266. {coredis-5.1.0 → coredis-5.3.0}/coredis/response/_callbacks/script.py +0 -0
  267. {coredis-5.1.0 → coredis-5.3.0}/coredis/response/_callbacks/sentinel.py +0 -0
  268. {coredis-5.1.0 → coredis-5.3.0}/coredis/response/_callbacks/server.py +0 -0
  269. {coredis-5.1.0 → coredis-5.3.0}/coredis/response/_callbacks/sets.py +0 -0
  270. {coredis-5.1.0 → coredis-5.3.0}/coredis/response/_callbacks/sorted_set.py +0 -0
  271. {coredis-5.1.0 → coredis-5.3.0}/coredis/response/_callbacks/streams.py +0 -0
  272. {coredis-5.1.0 → coredis-5.3.0}/coredis/response/_callbacks/strings.py +0 -0
  273. {coredis-5.1.0 → coredis-5.3.0}/coredis/response/_callbacks/vector_sets.py +0 -0
  274. {coredis-5.1.0 → coredis-5.3.0}/coredis/response/_utils.py +0 -0
  275. {coredis-5.1.0 → coredis-5.3.0}/coredis/response/types.py +0 -0
  276. {coredis-5.1.0 → coredis-5.3.0}/coredis/retry.py +0 -0
  277. {coredis-5.1.0 → coredis-5.3.0}/coredis/sentinel.py +0 -0
  278. {coredis-5.1.0 → coredis-5.3.0}/coredis/stream.py +0 -0
@@ -0,0 +1 @@
1
+ coredis/_version.py export-subst
@@ -0,0 +1,2 @@
1
+ github: alisaifee
2
+ open_collective: coredis
@@ -0,0 +1,41 @@
1
+ ---
2
+ name: Bug Report
3
+ about: Submit a bug report
4
+ labels: 'bug'
5
+
6
+ ---
7
+
8
+ <!--- Provide a general summary of the issue in the Title above -->
9
+
10
+ ## Expected Behaviour
11
+
12
+ <!--- What should happen -->
13
+
14
+ ## Current Behaviour
15
+
16
+ <!--- What happens instead of the expected behaviour -->
17
+
18
+ ## Steps to Reproduce
19
+
20
+ <!---
21
+ Provide a link to an example, or an unambiguous set of steps to
22
+ reproduce this bug. Include code to reproduce, if relevant
23
+ --->
24
+ 1.
25
+ 1.
26
+ 1.
27
+ 1.
28
+
29
+ ## Your Environment
30
+
31
+ <!--- Include as many relevant details about the environment you experienced the bug in -->
32
+
33
+ - coredis version:
34
+ - Redis version:
35
+ - Operating system:
36
+ - Python version:
37
+
38
+ <!--
39
+ You can freely edit this text. Remove any lines you believe are unnecessary.
40
+ -->
41
+
@@ -0,0 +1,17 @@
1
+ ---
2
+ name: Feature or Enhancement
3
+ about: Propose a new feature or enhancement
4
+ labels: 'enhancement'
5
+
6
+ ---
7
+
8
+ <!--- Provide a general summary of the proposal in the Title above -->
9
+
10
+ ## Expected Behaviour
11
+
12
+ <!--- How should this new feature work -->
13
+
14
+ <!--
15
+ You can freely edit this text. Remove any lines you believe are unnecessary.
16
+ -->
17
+
@@ -0,0 +1,11 @@
1
+ # To get started with Dependabot version updates, you'll need to specify which
2
+ # package ecosystems to update and where the package manifests are located.
3
+ # Please see the documentation for all configuration options:
4
+ # https://help.github.com/github/administering-a-repository/configuration-options-for-dependency-updates
5
+
6
+ version: 2
7
+ updates:
8
+ - package-ecosystem: "uv" # See documentation for possible values
9
+ directory: "/" # Location of package manifests
10
+ schedule:
11
+ interval: "daily"
@@ -0,0 +1,154 @@
1
+ name: Compatibility
2
+
3
+ on:
4
+ push:
5
+ branches: ['master']
6
+ tags: ['*']
7
+ schedule:
8
+ - cron: 0 23 * * *
9
+
10
+ jobs:
11
+ lint:
12
+ name: Lint (Python ${{ matrix.python-version }})
13
+ runs-on: ubuntu-latest
14
+ strategy:
15
+ matrix:
16
+ python-version: ["3.10", "3.11", "3.12", "3.13", "3.14"]
17
+ steps:
18
+ - uses: actions/checkout@v3
19
+ - name: Install uv and Python
20
+ uses: astral-sh/setup-uv@v6
21
+ with:
22
+ enable-cache: true
23
+ python-version: ${{ matrix.python-version }}
24
+ - name: Setup uv venv
25
+ run: |
26
+ uv sync --locked --all-extras --group dev
27
+ - name: Lint with ruff
28
+ run: |
29
+ uv run ruff check --select I coredis tests
30
+ uv run ruff check coredis tests
31
+ - name: Check types
32
+ run: |
33
+ uv run mypy coredis
34
+ - name: Check auto generated sources
35
+ run: |
36
+ make templated-sources
37
+ if [ ! -z "$(git diff coredis)" ];
38
+ then
39
+ echo "Auto-generated source are not up to date"
40
+ git diff
41
+ exit 1
42
+ fi;
43
+ test:
44
+ name: Test (Python ${{ matrix.python-version }}, Redis ${{ matrix.redis-version }}${{ matrix.uvloop == 'True' && ', uvloop' || ''}}${{ matrix.orjson == 'True' && ', orjson' || ''}}${{ matrix.extensions == 'True' && ', compiled' || ''}}${{ matrix.label && format(', {0}', matrix.label) || '' }})
45
+ runs-on: ubuntu-latest
46
+ continue-on-error: ${{ matrix.redis-version == 'next' }}
47
+ strategy:
48
+ fail-fast: false
49
+ matrix:
50
+ python-version: ["3.10", "3.11", "3.12", "3.13", "3.14"]
51
+ redis-version: ["7.0", "7.2", "7.4", "8.0", "8.2", "latest"]
52
+ test_params: ["-m '(not (dragonfly or valkey or redict))'"]
53
+ orjson: ["False"]
54
+ uvloop: ["False"]
55
+ runtime_type_checks: ["True"]
56
+ extensions: ["True"]
57
+ label: [""]
58
+ include:
59
+ - python-version: "3.13"
60
+ redis-version: "8.2"
61
+ test_params: "-m '(not (dragonfly or valkey or redict))'"
62
+ runtime_type_checks: "True"
63
+ label: ""
64
+ - python-version: "3.13"
65
+ redis-version: next
66
+ test_params: "-m '(not (dragonfly or valkey or redict))'"
67
+ runtime_type_checks: "True"
68
+ label: ""
69
+ - python-version: "3.13"
70
+ redis-version: latest
71
+ test_params: "-m '(not (dragonfly or valkey or redict))'"
72
+ extensions: "False"
73
+ runtime_type_checks: "True"
74
+ label: ""
75
+ - python-version: "3.13"
76
+ redis-version: latest
77
+ test_params: "-m '(not (dragonfly or valkey or redict))'"
78
+ runtime_type_checks: "True"
79
+ orjson: "True"
80
+ label: ""
81
+ - python-version: "3.13"
82
+ redis-version: latest
83
+ test_params: "-m '(not (dragonfly or valkey or redict))'"
84
+ runtime_type_checks: "True"
85
+ uvloop: "True"
86
+ label: ""
87
+ - python-version: "3.13"
88
+ redis-version: 7.4
89
+ test_params: "-m '(not (dragonfly or valkey or redict))'"
90
+ runtime_type_checks: "False"
91
+ label: ""
92
+ - python-version: "3.13"
93
+ redis-version: latest
94
+ test_params: "-m dragonfly"
95
+ label: "Dragonfly"
96
+ - python-version: "3.13"
97
+ redis-version: 7.0
98
+ test_params: "-m valkey"
99
+ label: "Valkey"
100
+ - python-version: "3.13"
101
+ redis-version: 8.0
102
+ test_params: "-m valkey"
103
+ label: "Valkey"
104
+ - python-version: "3.13"
105
+ redis-version: "7.0"
106
+ test_params: "-m redict"
107
+ label: "Redict"
108
+ - python-version: "pypy-3.10"
109
+ redis-version: 8.0
110
+ test_params: "-m '(not (dragonfly or valkey or redict))' tests/commands tests/test_tracking_cache.py"
111
+ runtime_type_checks: "False"
112
+ extensions: "False"
113
+ uvloop: "False"
114
+ label: ""
115
+
116
+ steps:
117
+ - uses: actions/checkout@v3
118
+ - name: Install uv and Python
119
+ uses: astral-sh/setup-uv@v6
120
+ with:
121
+ enable-cache: true
122
+ python-version: ${{ matrix.python-version }}
123
+ - name: Setup uv venv
124
+ run: |
125
+ uv sync --locked --all-extras --group ci
126
+ - name: Compile extensions
127
+ if: ${{ matrix.extensions == 'True' }}
128
+ run: uv run mypyc coredis/constants.py coredis/parser.py coredis/_packer.py coredis/_utils.py
129
+ - name: Install uvloop
130
+ if: ${{ matrix.uvloop == 'True' }}
131
+ run:
132
+ uv pip install uvloop
133
+ - name: Install orjson
134
+ if: ${{ matrix.orjson == 'True' }}
135
+ run:
136
+ uv pip install orjson
137
+ - name: Tests with coverage
138
+ env:
139
+ COREDIS_UVLOOP: ${{ matrix.uvloop }}
140
+ HOST_OS: linux
141
+ CI: "True"
142
+ COREDIS_REDIS_VERSION: ${{matrix.redis-version}}
143
+ COREDIS_RUNTIME_CHECKS: ${{matrix.runtime_type_checks}}
144
+ PYTEST_SENTRY_DSN: ${{ matrix.extensions != 'True' && secrets.SENTRY_DSN || ''}}
145
+ COMPOSE_PARALLEL_LIMIT: 1
146
+ run: |
147
+ echo "Runtime checks: $COREDIS_RUNTIME_CHECKS"
148
+ echo "UVLoop: $COREDIS_UVLOOP"
149
+ echo "CI: $CI"
150
+ uv run pytest --reverse --reruns 2 --cov=coredis --cov-report=xml ${{ matrix.test_params }}
151
+ - name: Upload coverage to Codecov
152
+ uses: codecov/codecov-action@v4.2.0
153
+ env:
154
+ CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
@@ -0,0 +1,302 @@
1
+ name: CI
2
+
3
+ on: [push, pull_request]
4
+
5
+ jobs:
6
+ lint:
7
+ name: Lint (Python ${{ matrix.python-version }})
8
+ runs-on: ubuntu-latest
9
+ strategy:
10
+ matrix:
11
+ python-version: ["3.10", "3.11", "3.12", "3.13", "3.14"]
12
+ steps:
13
+ - uses: actions/checkout@v3
14
+ - name: Install uv and Python
15
+ uses: astral-sh/setup-uv@v6
16
+ with:
17
+ enable-cache: true
18
+ python-version: ${{ matrix.python-version }}
19
+ - name: Setup uv venv
20
+ run: |
21
+ uv sync --locked --all-extras --group dev
22
+ - name: Lint with ruff
23
+ run: |
24
+ uv run ruff check --select I coredis tests
25
+ uv run ruff check coredis tests
26
+ - name: Check types
27
+ run: |
28
+ uv run mypy coredis
29
+ - name: Check auto generated sources
30
+ run: |
31
+ make templated-sources
32
+ if [ ! -z "$(git diff coredis)" ];
33
+ then
34
+ echo "Auto-generated source are not up to date"
35
+ git diff
36
+ exit 1
37
+ fi;
38
+ test:
39
+ name: Test (Python ${{ matrix.python-version }}, Redis ${{ matrix.redis-version }}${{ matrix.uvloop == 'True' && ', uvloop' || ''}}${{ matrix.orjson == 'True' && ', orjson' || ''}}${{ matrix.extensions == 'True' && ', compiled' || ''}}${{ matrix.label && format(', {0}', matrix.label) || '' }})
40
+ runs-on: ubuntu-latest
41
+ continue-on-error: ${{ matrix.redis-version == 'next' }}
42
+ strategy:
43
+ fail-fast: false
44
+ matrix:
45
+ python-version: ["3.11", "3.12", "3.13", "3.14"]
46
+ redis-version: ["7.0", "7.2", "7.4", "8.0", "8.2", "latest"]
47
+ test_params: ["-m '(not (dragonfly or valkey or redict))'"]
48
+ uvloop: ["False"]
49
+ orjson: ["False"]
50
+ runtime_type_checks: ["True"]
51
+ extensions: ["True"]
52
+ label: [""]
53
+ include:
54
+ - python-version: "3.13"
55
+ redis-version: next
56
+ test_params: "-m '(not (dragonfly or valkey or redict))'"
57
+ runtime_type_checks: "True"
58
+ label: ""
59
+ - python-version: "3.13"
60
+ redis-version: "latest"
61
+ test_params: "-m '(not (dragonfly or valkey or redict))'"
62
+ runtime_type_checks: "True"
63
+ extensions: "False"
64
+ - python-version: "3.13"
65
+ redis-version: "latest"
66
+ test_params: "-m '(not (dragonfly or valkey or redict))'"
67
+ runtime_type_checks: "True"
68
+ uvloop: "True"
69
+ - python-version: "3.13"
70
+ redis-version: "latest"
71
+ test_params: "-m dragonfly"
72
+ label: "Dragonfly"
73
+ - python-version: "3.13"
74
+ redis-version: "7.0"
75
+ test_params: "-m valkey"
76
+ label: "Valkey"
77
+ - python-version: "3.13"
78
+ redis-version: "8.0"
79
+ test_params: "-m valkey"
80
+ label: "Valkey"
81
+ - python-version: "3.13"
82
+ redis-version: "7.0"
83
+ test_params: "-m redict"
84
+ label: "Redict"
85
+ - python-version: "pypy-3.10"
86
+ redis-version: "8.0"
87
+ test_params: "-m '(not (dragonfly or valkey or redict))' tests/commands tests/test_tracking_cache.py"
88
+ runtime_type_checks: "False"
89
+ extensions: "False"
90
+ uvloop: "False"
91
+ label: ""
92
+ steps:
93
+ - uses: actions/checkout@v3
94
+ - name: Install uv and Python
95
+ uses: astral-sh/setup-uv@v6
96
+ with:
97
+ enable-cache: true
98
+ python-version: ${{ matrix.python-version }}
99
+ - name: Setup uv venv
100
+ run: |
101
+ uv sync --locked --all-extras --group ci
102
+ - name: Compile extensions
103
+ if: ${{ matrix.extensions == 'True' }}
104
+ run: uv run mypyc coredis/constants.py coredis/parser.py coredis/_packer.py coredis/_utils.py
105
+ - name: Install uvloop
106
+ if: ${{ matrix.uvloop == 'True' }}
107
+ run:
108
+ uv pip install uvloop
109
+ - name: Install orjson
110
+ if: ${{ matrix.orjson == 'True' }}
111
+ run:
112
+ uv pip install orjson
113
+ - name: Tests
114
+ env:
115
+ COREDIS_UVLOOP: ${{ matrix.uvloop }}
116
+ HOST_OS: linux
117
+ CI: "True"
118
+ COREDIS_REDIS_VERSION: ${{matrix.redis-version}}
119
+ COREDIS_RUNTIME_CHECKS: ${{matrix.runtime_type_checks}}
120
+ PYTEST_SENTRY_DSN: ${{ matrix.extensions != 'True' && secrets.SENTRY_DSN || ''}}
121
+ COMPOSE_PARALLEL_LIMIT: 1
122
+ run: |
123
+ echo "Runtime checks: $COREDIS_RUNTIME_CHECKS"
124
+ echo "UVLoop: $COREDIS_UVLOOP"
125
+ echo "CI: $CI"
126
+ uv run pytest --reverse --reruns 2 --cov=coredis --cov-report=xml ${{ matrix.test_params }}
127
+ - name: Upload coverage to Codecov
128
+ uses: codecov/codecov-action@v4.2.0
129
+ env:
130
+ CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
131
+ generate_wheels_matrix:
132
+ name: Generate wheels matrix
133
+ runs-on: ubuntu-latest
134
+ outputs:
135
+ include: ${{ steps.set-matrix.outputs.include }}
136
+ steps:
137
+ - uses: actions/checkout@v3
138
+ with:
139
+ fetch-depth: 0
140
+ - name: Install cibuildwheel and pypyp
141
+ run: |
142
+ pipx install cibuildwheel==3.2.0
143
+ pipx install pypyp==1.3
144
+ - id: set-matrix
145
+ run: |
146
+ MATRIX=$(
147
+ {
148
+ cibuildwheel --print-build-identifiers --platform linux . \
149
+ | pyp 'json.dumps({"only": x, "os": "ubuntu-latest"})' \
150
+ && cibuildwheel --print-build-identifiers --platform macos . \
151
+ | pyp 'json.dumps({"only": x, "os": "macos-latest"})'
152
+ } | pyp 'json.dumps(list(map(json.loads, lines)))'
153
+ )
154
+ echo "include=$MATRIX" | tee -a $GITHUB_OUTPUT
155
+ env:
156
+ CIBW_ARCHS_LINUX: auto aarch64
157
+ CIBW_ARCHS_MACOS: auto arm64
158
+ CIBW_SKIP: '*musllinux* pp*'
159
+ build_wheels:
160
+ needs: [generate_wheels_matrix]
161
+ name: Build wheel on ${{ matrix.only }}
162
+ runs-on: ${{ matrix.os }}
163
+ strategy:
164
+ fail-fast: false
165
+ matrix:
166
+ include:
167
+ ${{ fromJson(needs.generate_wheels_matrix.outputs.include) }}
168
+ steps:
169
+ - uses: actions/checkout@v3
170
+ with:
171
+ fetch-depth: 0
172
+ - name: Install uv and Python
173
+ uses: astral-sh/setup-uv@v6
174
+ with:
175
+ enable-cache: true
176
+ - name: Setup uv venv
177
+ run: |
178
+ uv sync --locked --all-extras --group dev
179
+ - name: Set up QEMU
180
+ if: runner.os == 'Linux'
181
+ uses: docker/setup-qemu-action@v2
182
+ - name: Build wheel
183
+ uses: pypa/cibuildwheel@v3.2.0
184
+ with:
185
+ only: ${{ matrix.only }}
186
+ env:
187
+ CIBW_BUILD_VERBOSITY: 3
188
+ CIBW_BUILD_FRONTEND: "build[uv]"
189
+ CIBW_TEST_COMMAND: "uv run python -c 'import coredis'"
190
+ - uses: actions/upload-artifact@v4
191
+ with:
192
+ name: wheels-${{matrix.only}}
193
+ path: ./wheelhouse/*.whl
194
+ build_pure_wheel:
195
+ needs: [lint]
196
+ name: Build pure python wheel
197
+ runs-on: ubuntu-latest
198
+ steps:
199
+ - uses: actions/checkout@v3
200
+ with:
201
+ fetch-depth: 0
202
+ - name: Install uv and Python
203
+ uses: astral-sh/setup-uv@v6
204
+ with:
205
+ enable-cache: true
206
+ - name: Build wheels
207
+ env:
208
+ PURE_PYTHON: true
209
+ run: |
210
+ uv build
211
+ - uses: actions/upload-artifact@v4
212
+ with:
213
+ name: pure_wheels
214
+ path: ./dist/*.whl
215
+ build_sdist:
216
+ name: Build source distribution
217
+ runs-on: ubuntu-latest
218
+ steps:
219
+ - uses: actions/checkout@v3
220
+ with:
221
+ fetch-depth: 0
222
+ - name: Install uv and Python
223
+ uses: astral-sh/setup-uv@v6
224
+ with:
225
+ enable-cache: true
226
+ - name: Build sdist
227
+ run: |
228
+ uv build --sdist
229
+ - uses: actions/upload-artifact@v4
230
+ with:
231
+ name: src_dist
232
+ path: dist/*.tar.gz
233
+ upload_pypi:
234
+ needs: [test, build_wheels, build_pure_wheel, build_sdist]
235
+ runs-on: ubuntu-latest
236
+ if: github.ref == 'refs/heads/master'
237
+ permissions:
238
+ id-token: write
239
+ steps:
240
+ - uses: actions/download-artifact@v4
241
+ with:
242
+ pattern: "*wheels*"
243
+ merge-multiple: true
244
+ path: dist
245
+ - uses: actions/download-artifact@v4
246
+ with:
247
+ name: src_dist
248
+ path: dist
249
+ - uses: pypa/gh-action-pypi-publish@release/v1
250
+ with:
251
+ repository_url: https://test.pypi.org/legacy/
252
+ skip_existing: true
253
+ verbose: true
254
+ upload_pypi_release:
255
+ needs: [test, build_wheels, build_sdist]
256
+ runs-on: ubuntu-latest
257
+ if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/')
258
+ permissions:
259
+ id-token: write
260
+ steps:
261
+ - uses: actions/download-artifact@v4
262
+ with:
263
+ pattern: "*wheels*"
264
+ merge-multiple: true
265
+ path: dist
266
+ - uses: actions/download-artifact@v4
267
+ with:
268
+ name: src_dist
269
+ path: dist
270
+ - uses: pypa/gh-action-pypi-publish@release/v1
271
+
272
+ github_release:
273
+ needs: [upload_pypi_release]
274
+ name: Create Release
275
+ runs-on: ubuntu-latest
276
+ if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/')
277
+ steps:
278
+ - name: Checkout code
279
+ uses: actions/checkout@v3
280
+ with:
281
+ fetch-depth: 0
282
+ - name: Download wheels
283
+ uses: actions/download-artifact@v4
284
+ with:
285
+ pattern: "*wheels*"
286
+ merge-multiple: true
287
+ path: dist
288
+ - name: Download source dist
289
+ uses: actions/download-artifact@v4
290
+ with:
291
+ name: src_dist
292
+ path: dist
293
+ - name: Generate release notes
294
+ run: |
295
+ ./scripts/github_release_notes.sh > release_notes.md
296
+ - name: Create Release
297
+ uses: ncipollo/release-action@v1
298
+ with:
299
+ artifacts: "dist/*"
300
+ bodyFile: release_notes.md
301
+ token: ${{ secrets.GITHUB_TOKEN }}
302
+
@@ -0,0 +1,25 @@
1
+ *.pyc
2
+ *.so
3
+ .eggs
4
+ coredis/_version.py
5
+ python-redis-benchmark
6
+ coredis.egg-info
7
+ build/
8
+ dist/
9
+ wheelhouse/
10
+ .idea/
11
+ .benchmarks/
12
+ .tool-versions
13
+ env/
14
+ env3.6/
15
+ dump.rdb
16
+ /.tox
17
+ _build
18
+ vagrant/.vagrant
19
+ .python-version
20
+ .cache/
21
+ .vscode/
22
+ *.iml
23
+ .pytest_cache/
24
+ .coverage*
25
+ .DS_Store
@@ -0,0 +1,12 @@
1
+ version: 2
2
+ build:
3
+ os: ubuntu-20.04
4
+ tools:
5
+ python: "3.13"
6
+ commands:
7
+ - pip install uv
8
+ - cd docs
9
+ - uv run --group docs python -m sphinx docs/source $READTHEDOCS_OUTPUT/html -b html
10
+ sphinx:
11
+ configuration: docs/source/conf.py
12
+