Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package python-plyvel for openSUSE:Factory 
checked in at 2022-11-10 16:40:31
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-plyvel (Old)
 and      /work/SRC/openSUSE:Factory/.python-plyvel.new.1597 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-plyvel"

Thu Nov 10 16:40:31 2022 rev:12 rq:1035046 version:1.5.0

Changes:
--------
--- /work/SRC/openSUSE:Factory/python-plyvel/python-plyvel.changes      
2022-01-16 23:19:16.350377702 +0100
+++ /work/SRC/openSUSE:Factory/.python-plyvel.new.1597/python-plyvel.changes    
2022-11-10 16:40:32.395292746 +0100
@@ -1,0 +2,11 @@
+Wed Nov  9 16:29:57 UTC 2022 - Yogalakshmi Arunachalam <yarunacha...@suse.com>
+
+- Update to 1.5.0 
+  * use manylinux2014 image for building wheels
+  * Fix typo in docs (#145)
+  * update leveldb links to github
+  * clarify bloom_filter_bits in docs
+  * skip py36 wheels
+  * drop py36 from tox config
+
+-------------------------------------------------------------------

Old:
----
  plyvel-1.4.0.tar.gz

New:
----
  plyvel-1.5.0.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ python-plyvel.spec ++++++
--- /var/tmp/diff_new_pack.vzCBbD/_old  2022-11-10 16:40:32.859295346 +0100
+++ /var/tmp/diff_new_pack.vzCBbD/_new  2022-11-10 16:40:32.867295391 +0100
@@ -19,7 +19,7 @@
 %{?!python_module:%define python_module() python-%{**} python3-%{**}}
 %global skip_python2 1
 Name:           python-plyvel
-Version:        1.4.0
+Version:        1.5.0
 Release:        0
 Summary:        Python interface to LevelDB
 License:        BSD-3-Clause

++++++ plyvel-1.4.0.tar.gz -> plyvel-1.5.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/plyvel-1.4.0/Makefile new/plyvel-1.5.0/Makefile
--- old/plyvel-1.4.0/Makefile   2021-12-29 14:21:10.000000000 +0100
+++ new/plyvel-1.5.0/Makefile   2022-04-22 21:45:22.000000000 +0200
@@ -32,6 +32,7 @@
 
 release: docker-build-env
        CIBW_BUILD='cp3*-manylinux_x86_64' \
+       CIBW_SKIP='cp36-manylinux_x86_64' \
        CIBW_MANYLINUX_X86_64_IMAGE=plyvel-build \
        CIBW_BEFORE_BUILD=scripts/cibuildwheel-before-build.sh \
        CIBW_PLATFORM=linux \
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/plyvel-1.4.0/NEWS.rst new/plyvel-1.5.0/NEWS.rst
--- old/plyvel-1.4.0/NEWS.rst   2021-12-29 14:24:31.000000000 +0100
+++ new/plyvel-1.5.0/NEWS.rst   2022-10-26 18:08:46.000000000 +0200
@@ -2,6 +2,16 @@
 Version history
 ===============
 
+Plyvel 1.5.0
+============
+
+Release date: 2022-10-26
+
+* Rebuild Linux wheels, with ``manylinux_2_17`` and ``manylinux2014``
+  compatibility (``x86_64`` only). Also produce Python 3.11 wheels.
+  Still using Snappy 1.1.9 and LevelDB 1.22.
+  (`issue #148 <https://github.com/wbolster/plyvel/issues/148>`_)
+
 Plyvel 1.4.0
 ============
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/plyvel-1.4.0/PKG-INFO new/plyvel-1.5.0/PKG-INFO
--- old/plyvel-1.4.0/PKG-INFO   2021-12-29 14:26:37.297494400 +0100
+++ new/plyvel-1.5.0/PKG-INFO   2022-10-26 18:09:10.015384700 +0200
@@ -1,12 +1,11 @@
 Metadata-Version: 2.1
 Name: plyvel
-Version: 1.4.0
+Version: 1.5.0
 Summary: Plyvel, a fast and feature-rich Python interface to LevelDB
 Home-page: https://github.com/wbolster/plyvel
 Author: Wouter Bolsterlee
 Author-email: wou...@bolsterl.ee
 License: BSD License
-Platform: UNKNOWN
 Classifier: Development Status :: 5 - Production/Stable
 Classifier: Intended Audience :: Developers
 Classifier: Intended Audience :: Information Technology
@@ -42,9 +41,7 @@
 .. _Project page: https://github.com/wbolster/plyvel
 .. _Documentation: https://plyvel.readthedocs.io/
 .. _PyPI page: http://pypi.python.org/pypi/plyvel/
-.. _LevelDB: http://code.google.com/p/leveldb/
+.. _LevelDB: https://github.com/google/leveldb
 
 Note that using a released version is recommended over a checkout from version
 control. See the installation docs for more information.
-
-
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/plyvel-1.4.0/README.rst new/plyvel-1.5.0/README.rst
--- old/plyvel-1.4.0/README.rst 2021-10-20 22:24:59.000000000 +0200
+++ new/plyvel-1.5.0/README.rst 2022-04-22 21:50:25.000000000 +0200
@@ -17,7 +17,7 @@
 .. _Project page: https://github.com/wbolster/plyvel
 .. _Documentation: https://plyvel.readthedocs.io/
 .. _PyPI page: http://pypi.python.org/pypi/plyvel/
-.. _LevelDB: http://code.google.com/p/leveldb/
+.. _LevelDB: https://github.com/google/leveldb
 
 Note that using a released version is recommended over a checkout from version
 control. See the installation docs for more information.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/plyvel-1.4.0/doc/api.rst new/plyvel-1.5.0/doc/api.rst
--- old/plyvel-1.4.0/doc/api.rst        2021-10-20 22:24:59.000000000 +0200
+++ new/plyvel-1.5.0/doc/api.rst        2022-10-26 17:56:05.000000000 +0200
@@ -56,7 +56,7 @@
                                          encoding of keys
       :param bool max_file_size: maximum file size (in bytes)
       :param bool compression: whether to use Snappy compression (enabled by 
default))
-      :param int bloom_filter_bits: the number of bits to use for a bloom
+      :param int bloom_filter_bits: the number of bits to use per key for a 
bloom
                                     filter; the default of 0 means that no 
bloom
                                     filter will be used
       :param callable comparator: a custom comparator callable that takes two
@@ -168,7 +168,7 @@
       * `include_start` and `include_stop` are only used if `start` and `stop`
         are specified.
 
-      Note: due to the whay the `prefix` support is implemented, this feature
+      Note: due to the way the `prefix` support is implemented, this feature
       only works reliably when the default DB comparator is used.
 
       See the :py:class:`Iterator` API for more information about iterators.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/plyvel-1.4.0/doc/index.rst 
new/plyvel-1.5.0/doc/index.rst
--- old/plyvel-1.4.0/doc/index.rst      2021-10-20 22:24:59.000000000 +0200
+++ new/plyvel-1.5.0/doc/index.rst      2022-04-22 21:50:25.000000000 +0200
@@ -4,7 +4,7 @@
 
 **Plyvel** is a fast and feature-rich Python interface to LevelDB_.
 
-.. _LevelDB: http://code.google.com/p/leveldb/
+.. _LevelDB: https://github.com/google/leveldb
 
 Plyvel's key features are:
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/plyvel-1.4.0/doc/user.rst 
new/plyvel-1.5.0/doc/user.rst
--- old/plyvel-1.4.0/doc/user.rst       2021-10-20 22:24:59.000000000 +0200
+++ new/plyvel-1.5.0/doc/user.rst       2022-04-22 21:50:25.000000000 +0200
@@ -15,7 +15,7 @@
 Note: this document assumes basic familiarity with LevelDB; visit the `LevelDB
 homepage`_ for more information about its features and design.
 
-.. _`LevelDB homepage`: http://code.google.com/p/leveldb/
+.. _`LevelDB homepage`: https://github.com/google/leveldb
 
 
 Getting started
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/plyvel-1.4.0/plyvel/_plyvel.cpp 
new/plyvel-1.5.0/plyvel/_plyvel.cpp
--- old/plyvel-1.4.0/plyvel/_plyvel.cpp 2021-12-29 14:26:36.000000000 +0100
+++ new/plyvel-1.5.0/plyvel/_plyvel.cpp 2022-10-26 18:09:09.000000000 +0200
@@ -1,4 +1,4 @@
-/* Generated by Cython 0.29.26 */
+/* Generated by Cython 0.29.32 */
 
 #ifndef PY_SSIZE_T_CLEAN
 #define PY_SSIZE_T_CLEAN
@@ -9,8 +9,8 @@
 #elif PY_VERSION_HEX < 0x02060000 || (0x03000000 <= PY_VERSION_HEX && 
PY_VERSION_HEX < 0x03030000)
     #error Cython requires Python 2.6+ or Python 3.3+.
 #else
-#define CYTHON_ABI "0_29_26"
-#define CYTHON_HEX_VERSION 0x001D1AF0
+#define CYTHON_ABI "0_29_32"
+#define CYTHON_HEX_VERSION 0x001D20F0
 #define CYTHON_FUTURE_DIVISION 1
 #include <stddef.h>
 #ifndef offsetof
@@ -49,6 +49,7 @@
   #define CYTHON_COMPILING_IN_PYPY 1
   #define CYTHON_COMPILING_IN_PYSTON 0
   #define CYTHON_COMPILING_IN_CPYTHON 0
+  #define CYTHON_COMPILING_IN_NOGIL 0
   #undef CYTHON_USE_TYPE_SLOTS
   #define CYTHON_USE_TYPE_SLOTS 0
   #undef CYTHON_USE_PYTYPE_LOOKUP
@@ -85,10 +86,14 @@
   #define CYTHON_USE_DICT_VERSIONS 0
   #undef CYTHON_USE_EXC_INFO_STACK
   #define CYTHON_USE_EXC_INFO_STACK 0
+  #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC
+    #define CYTHON_UPDATE_DESCRIPTOR_DOC (PYPY_VERSION_HEX >= 0x07030900)
+  #endif
 #elif defined(PYSTON_VERSION)
   #define CYTHON_COMPILING_IN_PYPY 0
   #define CYTHON_COMPILING_IN_PYSTON 1
   #define CYTHON_COMPILING_IN_CPYTHON 0
+  #define CYTHON_COMPILING_IN_NOGIL 0
   #ifndef CYTHON_USE_TYPE_SLOTS
     #define CYTHON_USE_TYPE_SLOTS 1
   #endif
@@ -126,10 +131,59 @@
   #define CYTHON_USE_DICT_VERSIONS 0
   #undef CYTHON_USE_EXC_INFO_STACK
   #define CYTHON_USE_EXC_INFO_STACK 0
+  #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC
+    #define CYTHON_UPDATE_DESCRIPTOR_DOC 0
+  #endif
+#elif defined(PY_NOGIL)
+  #define CYTHON_COMPILING_IN_PYPY 0
+  #define CYTHON_COMPILING_IN_PYSTON 0
+  #define CYTHON_COMPILING_IN_CPYTHON 0
+  #define CYTHON_COMPILING_IN_NOGIL 1
+  #ifndef CYTHON_USE_TYPE_SLOTS
+    #define CYTHON_USE_TYPE_SLOTS 1
+  #endif
+  #undef CYTHON_USE_PYTYPE_LOOKUP
+  #define CYTHON_USE_PYTYPE_LOOKUP 0
+  #ifndef CYTHON_USE_ASYNC_SLOTS
+    #define CYTHON_USE_ASYNC_SLOTS 1
+  #endif
+  #undef CYTHON_USE_PYLIST_INTERNALS
+  #define CYTHON_USE_PYLIST_INTERNALS 0
+  #ifndef CYTHON_USE_UNICODE_INTERNALS
+    #define CYTHON_USE_UNICODE_INTERNALS 1
+  #endif
+  #undef CYTHON_USE_UNICODE_WRITER
+  #define CYTHON_USE_UNICODE_WRITER 0
+  #undef CYTHON_USE_PYLONG_INTERNALS
+  #define CYTHON_USE_PYLONG_INTERNALS 0
+  #ifndef CYTHON_AVOID_BORROWED_REFS
+    #define CYTHON_AVOID_BORROWED_REFS 0
+  #endif
+  #ifndef CYTHON_ASSUME_SAFE_MACROS
+    #define CYTHON_ASSUME_SAFE_MACROS 1
+  #endif
+  #ifndef CYTHON_UNPACK_METHODS
+    #define CYTHON_UNPACK_METHODS 1
+  #endif
+  #undef CYTHON_FAST_THREAD_STATE
+  #define CYTHON_FAST_THREAD_STATE 0
+  #undef CYTHON_FAST_PYCALL
+  #define CYTHON_FAST_PYCALL 0
+  #ifndef CYTHON_PEP489_MULTI_PHASE_INIT
+    #define CYTHON_PEP489_MULTI_PHASE_INIT 1
+  #endif
+  #ifndef CYTHON_USE_TP_FINALIZE
+    #define CYTHON_USE_TP_FINALIZE 1
+  #endif
+  #undef CYTHON_USE_DICT_VERSIONS
+  #define CYTHON_USE_DICT_VERSIONS 0
+  #undef CYTHON_USE_EXC_INFO_STACK
+  #define CYTHON_USE_EXC_INFO_STACK 0
 #else
   #define CYTHON_COMPILING_IN_PYPY 0
   #define CYTHON_COMPILING_IN_PYSTON 0
   #define CYTHON_COMPILING_IN_CPYTHON 1
+  #define CYTHON_COMPILING_IN_NOGIL 0
   #ifndef CYTHON_USE_TYPE_SLOTS
     #define CYTHON_USE_TYPE_SLOTS 1
   #endif
@@ -172,11 +226,14 @@
   #ifndef CYTHON_UNPACK_METHODS
     #define CYTHON_UNPACK_METHODS 1
   #endif
-  #ifndef CYTHON_FAST_THREAD_STATE
+  #if PY_VERSION_HEX >= 0x030B00A4
+    #undef CYTHON_FAST_THREAD_STATE
+    #define CYTHON_FAST_THREAD_STATE 0
+  #elif !defined(CYTHON_FAST_THREAD_STATE)
     #define CYTHON_FAST_THREAD_STATE 1
   #endif
   #ifndef CYTHON_FAST_PYCALL
-    #define CYTHON_FAST_PYCALL (PY_VERSION_HEX < 0x030B00A1)
+    #define CYTHON_FAST_PYCALL (PY_VERSION_HEX < 0x030A0000)
   #endif
   #ifndef CYTHON_PEP489_MULTI_PHASE_INIT
     #define CYTHON_PEP489_MULTI_PHASE_INIT (PY_VERSION_HEX >= 0x03050000)
@@ -187,9 +244,15 @@
   #ifndef CYTHON_USE_DICT_VERSIONS
     #define CYTHON_USE_DICT_VERSIONS (PY_VERSION_HEX >= 0x030600B1)
   #endif
-  #ifndef CYTHON_USE_EXC_INFO_STACK
+  #if PY_VERSION_HEX >= 0x030B00A4
+    #undef CYTHON_USE_EXC_INFO_STACK
+    #define CYTHON_USE_EXC_INFO_STACK 0
+  #elif !defined(CYTHON_USE_EXC_INFO_STACK)
     #define CYTHON_USE_EXC_INFO_STACK (PY_VERSION_HEX >= 0x030700A3)
   #endif
+  #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC
+    #define CYTHON_UPDATE_DESCRIPTOR_DOC 1
+  #endif
 #endif
 #if !defined(CYTHON_FAST_PYCCALL)
 #define CYTHON_FAST_PYCCALL  (CYTHON_FAST_PYCALL && PY_VERSION_HEX >= 
0x030600B1)
@@ -655,8 +718,10 @@
     } __Pyx_PyAsyncMethodsStruct;
 #endif
 
-#if defined(WIN32) || defined(MS_WINDOWS)
-  #define _USE_MATH_DEFINES
+#if defined(_WIN32) || defined(WIN32) || defined(MS_WINDOWS)
+  #if !defined(_USE_MATH_DEFINES)
+    #define _USE_MATH_DEFINES
+  #endif
 #endif
 #include <math.h>
 #ifdef NAN
@@ -1333,6 +1398,12 @@
 #if CYTHON_FAST_PYCALL
   static size_t __pyx_pyframe_localsplus_offset = 0;
   #include "frameobject.h"
+#if PY_VERSION_HEX >= 0x030b00a6
+  #ifndef Py_BUILD_CORE
+    #define Py_BUILD_CORE 1
+  #endif
+  #include "internal/pycore_frame.h"
+#endif
   #define __Pxy_PyFrame_Initialize_Offsets()\
     ((void)__Pyx_BUILD_ASSERT_EXPR(sizeof(PyFrameObject) == 
offsetof(PyFrameObject, f_localsplus) + Py_MEMBER_SIZE(PyFrameObject, 
f_localsplus)),\
      (void)(__pyx_pyframe_localsplus_offset = 
((size_t)PyFrame_Type.tp_basicsize) - Py_MEMBER_SIZE(PyFrameObject, 
f_localsplus)))
@@ -1697,6 +1768,12 @@
                                       PyObject *module, PyObject *globals,
                                       PyObject* code);
 
+/* PySequenceContains.proto */
+static CYTHON_INLINE int __Pyx_PySequence_ContainsTF(PyObject* item, PyObject* 
seq, int eq) {
+    int result = PySequence_Contains(seq, item);
+    return unlikely(result < 0) ? result : (result == (eq == Py_EQ));
+}
+
 /* Import.proto */
 static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level);
 
@@ -1975,7 +2052,7 @@
 static const char __pyx_k_db[] = "db";
 static const char __pyx_k_id[] = "id";
 static const char __pyx_k_st[] = "st";
-static const char __pyx_k__27[] = ".";
+static const char __pyx_k__28[] = ".";
 static const char __pyx_k_doc[] = "__doc__";
 static const char __pyx_k_get[] = "get";
 static const char __pyx_k_hex[] = "hex";
@@ -2113,7 +2190,7 @@
 static const char __pyx_k_self__iter_self_comparator_self[] = 
"self._iter,self.comparator,self.start_slice,self.stop_slice cannot be 
converted to a Python object for pickling";
 static const char __pyx_k_Cannot_convert_unicode_name_to_a[] = "Cannot convert 
unicode 'name' to a file system name: %s";
 static const char __pyx_k_Cannot_operate_on_closed_LevelDB[] = "Cannot operate 
on closed LevelDB database";
-static const char __pyx_k_Incompatible_checksums_s_vs_0x11[] = "Incompatible 
checksums (%s vs 0x11ea7f1 = (db, prefix))";
+static const char __pyx_k_Incompatible_checksums_0x_x_vs_0[] = "Incompatible 
checksums (0x%x vs (0x11ea7f1, 0xe9c0b3a, 0x8ba9a5d) = (db, prefix))";
 static const char __pyx_k_custom_comparator_object_must_be[] = "custom 
comparator object must be callable";
 static const char __pyx_k_self__iter_cannot_be_converted_t[] = "self._iter 
cannot be converted to a Python object for pickling";
 static const char __pyx_k_self__snapshot_cannot_be_convert[] = "self._snapshot 
cannot be converted to a Python object for pickling";
@@ -2128,7 +2205,7 @@
 static PyObject *__pyx_kp_u_Database_or_snapshot_is_closed;
 static PyObject *__pyx_n_s_Error;
 static PyObject *__pyx_n_s_IOError;
-static PyObject *__pyx_kp_s_Incompatible_checksums_s_vs_0x11;
+static PyObject *__pyx_kp_s_Incompatible_checksums_0x_x_vs_0;
 static PyObject *__pyx_n_s_Iterator;
 static PyObject *__pyx_n_s_IteratorInvalidError;
 static PyObject *__pyx_n_s_Lock;
@@ -2145,7 +2222,7 @@
 static PyObject *__pyx_n_s_UnicodeEncodeError;
 static PyObject *__pyx_n_s_ValueError;
 static PyObject *__pyx_n_s_WriteBatch;
-static PyObject *__pyx_kp_u__27;
+static PyObject *__pyx_kp_u__28;
 static PyObject *__pyx_kp_u__7;
 static PyObject *__pyx_kp_u__8;
 static PyObject *__pyx_n_s_approximate_sizes;
@@ -2367,6 +2444,8 @@
 static PyObject 
*__pyx_tp_new_6plyvel_7_plyvel___pyx_scope_struct____init__(PyTypeObject *t, 
PyObject *a, PyObject *k); /*proto*/
 static __Pyx_CachedCFunction __pyx_umethod_PyDict_Type_pop = {0, 
&__pyx_n_s_pop, 0, 0, 0};
 static PyObject *__pyx_int_18786289;
+static PyObject *__pyx_int_146446941;
+static PyObject *__pyx_int_245107514;
 static PyObject *__pyx_tuple_;
 static PyObject *__pyx_tuple__2;
 static PyObject *__pyx_tuple__3;
@@ -2391,12 +2470,13 @@
 static PyObject *__pyx_tuple__24;
 static PyObject *__pyx_tuple__25;
 static PyObject *__pyx_tuple__26;
-static PyObject *__pyx_tuple__28;
-static PyObject *__pyx_tuple__30;
-static PyObject *__pyx_tuple__32;
-static PyObject *__pyx_codeobj__29;
-static PyObject *__pyx_codeobj__31;
-static PyObject *__pyx_codeobj__33;
+static PyObject *__pyx_tuple__27;
+static PyObject *__pyx_tuple__29;
+static PyObject *__pyx_tuple__31;
+static PyObject *__pyx_tuple__33;
+static PyObject *__pyx_codeobj__30;
+static PyObject *__pyx_codeobj__32;
+static PyObject *__pyx_codeobj__34;
 /* Late includes */
 
 /* "plyvel/_plyvel.pyx":83
@@ -13837,7 +13917,7 @@
 /* Python wrapper */
 static PyObject *__pyx_pw_6plyvel_7_plyvel_8Iterator_5__next__(PyObject 
*__pyx_v_self); /*proto*/
 static char __pyx_doc_6plyvel_7_plyvel_8Iterator_4__next__[] = "Return the 
next iterator entry.\n\n        Note: Cython will also create a .next() method 
that does the\n        same as this method.\n        ";
-#if CYTHON_COMPILING_IN_CPYTHON
+#if CYTHON_UPDATE_DESCRIPTOR_DOC
 struct wrapperbase __pyx_wrapperbase_6plyvel_7_plyvel_8Iterator_4__next__;
 #endif
 static PyObject *__pyx_pw_6plyvel_7_plyvel_8Iterator_5__next__(PyObject 
*__pyx_v_self) {
@@ -19316,12 +19396,12 @@
   PyObject *__pyx_v___pyx_result = 0;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  int __pyx_t_1;
-  PyObject *__pyx_t_2 = NULL;
-  PyObject *__pyx_t_3 = NULL;
+  PyObject *__pyx_t_1 = NULL;
+  int __pyx_t_2;
+  int __pyx_t_3;
   PyObject *__pyx_t_4 = NULL;
   PyObject *__pyx_t_5 = NULL;
-  int __pyx_t_6;
+  PyObject *__pyx_t_6 = NULL;
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
@@ -19330,114 +19410,118 @@
   /* "(tree fragment)":4
  *     cdef object __pyx_PickleError
  *     cdef object __pyx_result
- *     if __pyx_checksum != 0x11ea7f1:             # <<<<<<<<<<<<<<
+ *     if __pyx_checksum not in (0x11ea7f1, 0xe9c0b3a, 0x8ba9a5d):             
# <<<<<<<<<<<<<<
  *         from pickle import PickleError as __pyx_PickleError
- *         raise __pyx_PickleError("Incompatible checksums (%s vs 0x11ea7f1 = 
(db, prefix))" % __pyx_checksum)
+ *         raise __pyx_PickleError("Incompatible checksums (0x%x vs 
(0x11ea7f1, 0xe9c0b3a, 0x8ba9a5d) = (db, prefix))" % __pyx_checksum)
  */
-  __pyx_t_1 = ((__pyx_v___pyx_checksum != 0x11ea7f1) != 0);
-  if (__pyx_t_1) {
+  __pyx_t_1 = __Pyx_PyInt_From_long(__pyx_v___pyx_checksum); if 
(unlikely(!__pyx_t_1)) __PYX_ERR(1, 4, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_2 = (__Pyx_PySequence_ContainsTF(__pyx_t_1, __pyx_tuple__27, 
Py_NE)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(1, 4, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_3 = (__pyx_t_2 != 0);
+  if (__pyx_t_3) {
 
     /* "(tree fragment)":5
  *     cdef object __pyx_result
- *     if __pyx_checksum != 0x11ea7f1:
+ *     if __pyx_checksum not in (0x11ea7f1, 0xe9c0b3a, 0x8ba9a5d):
  *         from pickle import PickleError as __pyx_PickleError             # 
<<<<<<<<<<<<<<
- *         raise __pyx_PickleError("Incompatible checksums (%s vs 0x11ea7f1 = 
(db, prefix))" % __pyx_checksum)
+ *         raise __pyx_PickleError("Incompatible checksums (0x%x vs 
(0x11ea7f1, 0xe9c0b3a, 0x8ba9a5d) = (db, prefix))" % __pyx_checksum)
  *     __pyx_result = PrefixedDB.__new__(__pyx_type)
  */
-    __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5, 
__pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_2);
+    __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 5, 
__pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_1);
     __Pyx_INCREF(__pyx_n_s_PickleError);
     __Pyx_GIVEREF(__pyx_n_s_PickleError);
-    PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_PickleError);
-    __pyx_t_3 = __Pyx_Import(__pyx_n_s_pickle, __pyx_t_2, 0); if 
(unlikely(!__pyx_t_3)) __PYX_ERR(1, 5, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_3);
-    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-    __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_PickleError); if 
(unlikely(!__pyx_t_2)) __PYX_ERR(1, 5, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_2);
-    __Pyx_INCREF(__pyx_t_2);
-    __pyx_v___pyx_PickleError = __pyx_t_2;
-    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+    PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_PickleError);
+    __pyx_t_4 = __Pyx_Import(__pyx_n_s_pickle, __pyx_t_1, 0); if 
(unlikely(!__pyx_t_4)) __PYX_ERR(1, 5, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_4);
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+    __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_4, __pyx_n_s_PickleError); if 
(unlikely(!__pyx_t_1)) __PYX_ERR(1, 5, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_1);
+    __Pyx_INCREF(__pyx_t_1);
+    __pyx_v___pyx_PickleError = __pyx_t_1;
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
     /* "(tree fragment)":6
- *     if __pyx_checksum != 0x11ea7f1:
+ *     if __pyx_checksum not in (0x11ea7f1, 0xe9c0b3a, 0x8ba9a5d):
  *         from pickle import PickleError as __pyx_PickleError
- *         raise __pyx_PickleError("Incompatible checksums (%s vs 0x11ea7f1 = 
(db, prefix))" % __pyx_checksum)             # <<<<<<<<<<<<<<
+ *         raise __pyx_PickleError("Incompatible checksums (0x%x vs 
(0x11ea7f1, 0xe9c0b3a, 0x8ba9a5d) = (db, prefix))" % __pyx_checksum)            
 # <<<<<<<<<<<<<<
  *     __pyx_result = PrefixedDB.__new__(__pyx_type)
  *     if __pyx_state is not None:
  */
-    __pyx_t_2 = __Pyx_PyInt_From_long(__pyx_v___pyx_checksum); if 
(unlikely(!__pyx_t_2)) __PYX_ERR(1, 6, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_4 = 
__Pyx_PyString_Format(__pyx_kp_s_Incompatible_checksums_s_vs_0x11, __pyx_t_2); 
if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 6, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_4);
-    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+    __pyx_t_1 = __Pyx_PyInt_From_long(__pyx_v___pyx_checksum); if 
(unlikely(!__pyx_t_1)) __PYX_ERR(1, 6, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_1);
+    __pyx_t_5 = 
__Pyx_PyString_Format(__pyx_kp_s_Incompatible_checksums_0x_x_vs_0, __pyx_t_1); 
if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 6, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_5);
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     __Pyx_INCREF(__pyx_v___pyx_PickleError);
-    __pyx_t_2 = __pyx_v___pyx_PickleError; __pyx_t_5 = NULL;
-    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
-      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_2);
-      if (likely(__pyx_t_5)) {
-        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
-        __Pyx_INCREF(__pyx_t_5);
+    __pyx_t_1 = __pyx_v___pyx_PickleError; __pyx_t_6 = NULL;
+    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
+      __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_1);
+      if (likely(__pyx_t_6)) {
+        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
+        __Pyx_INCREF(__pyx_t_6);
         __Pyx_INCREF(function);
-        __Pyx_DECREF_SET(__pyx_t_2, function);
+        __Pyx_DECREF_SET(__pyx_t_1, function);
       }
     }
-    __pyx_t_3 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_5, 
__pyx_t_4) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_4);
-    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
+    __pyx_t_4 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_6, 
__pyx_t_5) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_5);
+    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
+    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+    if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 6, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_4);
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+    __Pyx_Raise(__pyx_t_4, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-    if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 6, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_3);
-    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-    __Pyx_Raise(__pyx_t_3, 0, 0, 0);
-    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __PYX_ERR(1, 6, __pyx_L1_error)
 
     /* "(tree fragment)":4
  *     cdef object __pyx_PickleError
  *     cdef object __pyx_result
- *     if __pyx_checksum != 0x11ea7f1:             # <<<<<<<<<<<<<<
+ *     if __pyx_checksum not in (0x11ea7f1, 0xe9c0b3a, 0x8ba9a5d):             
# <<<<<<<<<<<<<<
  *         from pickle import PickleError as __pyx_PickleError
- *         raise __pyx_PickleError("Incompatible checksums (%s vs 0x11ea7f1 = 
(db, prefix))" % __pyx_checksum)
+ *         raise __pyx_PickleError("Incompatible checksums (0x%x vs 
(0x11ea7f1, 0xe9c0b3a, 0x8ba9a5d) = (db, prefix))" % __pyx_checksum)
  */
   }
 
   /* "(tree fragment)":7
  *         from pickle import PickleError as __pyx_PickleError
- *         raise __pyx_PickleError("Incompatible checksums (%s vs 0x11ea7f1 = 
(db, prefix))" % __pyx_checksum)
+ *         raise __pyx_PickleError("Incompatible checksums (0x%x vs 
(0x11ea7f1, 0xe9c0b3a, 0x8ba9a5d) = (db, prefix))" % __pyx_checksum)
  *     __pyx_result = PrefixedDB.__new__(__pyx_type)             # 
<<<<<<<<<<<<<<
  *     if __pyx_state is not None:
  *         __pyx_unpickle_PrefixedDB__set_state(<PrefixedDB> __pyx_result, 
__pyx_state)
  */
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject 
*)__pyx_ptype_6plyvel_7_plyvel_PrefixedDB), __pyx_n_s_new); if 
(unlikely(!__pyx_t_2)) __PYX_ERR(1, 7, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_4 = NULL;
-  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
-    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2);
-    if (likely(__pyx_t_4)) {
-      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
-      __Pyx_INCREF(__pyx_t_4);
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject 
*)__pyx_ptype_6plyvel_7_plyvel_PrefixedDB), __pyx_n_s_new); if 
(unlikely(!__pyx_t_1)) __PYX_ERR(1, 7, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_5 = NULL;
+  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
+    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_1);
+    if (likely(__pyx_t_5)) {
+      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
+      __Pyx_INCREF(__pyx_t_5);
       __Pyx_INCREF(function);
-      __Pyx_DECREF_SET(__pyx_t_2, function);
+      __Pyx_DECREF_SET(__pyx_t_1, function);
     }
   }
-  __pyx_t_3 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_4, 
__pyx_v___pyx_type) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v___pyx_type);
-  __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
-  if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 7, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_3);
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_v___pyx_result = __pyx_t_3;
-  __pyx_t_3 = 0;
+  __pyx_t_4 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_5, 
__pyx_v___pyx_type) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_v___pyx_type);
+  __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
+  if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 7, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_v___pyx_result = __pyx_t_4;
+  __pyx_t_4 = 0;
 
   /* "(tree fragment)":8
- *         raise __pyx_PickleError("Incompatible checksums (%s vs 0x11ea7f1 = 
(db, prefix))" % __pyx_checksum)
+ *         raise __pyx_PickleError("Incompatible checksums (0x%x vs 
(0x11ea7f1, 0xe9c0b3a, 0x8ba9a5d) = (db, prefix))" % __pyx_checksum)
  *     __pyx_result = PrefixedDB.__new__(__pyx_type)
  *     if __pyx_state is not None:             # <<<<<<<<<<<<<<
  *         __pyx_unpickle_PrefixedDB__set_state(<PrefixedDB> __pyx_result, 
__pyx_state)
  *     return __pyx_result
  */
-  __pyx_t_1 = (__pyx_v___pyx_state != Py_None);
-  __pyx_t_6 = (__pyx_t_1 != 0);
-  if (__pyx_t_6) {
+  __pyx_t_3 = (__pyx_v___pyx_state != Py_None);
+  __pyx_t_2 = (__pyx_t_3 != 0);
+  if (__pyx_t_2) {
 
     /* "(tree fragment)":9
  *     __pyx_result = PrefixedDB.__new__(__pyx_type)
@@ -19447,12 +19531,12 @@
  * cdef __pyx_unpickle_PrefixedDB__set_state(PrefixedDB __pyx_result, tuple 
__pyx_state):
  */
     if 
(!(likely(PyTuple_CheckExact(__pyx_v___pyx_state))||((__pyx_v___pyx_state) == 
Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", 
Py_TYPE(__pyx_v___pyx_state)->tp_name), 0))) __PYX_ERR(1, 9, __pyx_L1_error)
-    __pyx_t_3 = 
__pyx_f_6plyvel_7_plyvel___pyx_unpickle_PrefixedDB__set_state(((struct 
__pyx_obj_6plyvel_7_plyvel_PrefixedDB *)__pyx_v___pyx_result), 
((PyObject*)__pyx_v___pyx_state)); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 9, 
__pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_3);
-    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+    __pyx_t_4 = 
__pyx_f_6plyvel_7_plyvel___pyx_unpickle_PrefixedDB__set_state(((struct 
__pyx_obj_6plyvel_7_plyvel_PrefixedDB *)__pyx_v___pyx_result), 
((PyObject*)__pyx_v___pyx_state)); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 9, 
__pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_4);
+    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
     /* "(tree fragment)":8
- *         raise __pyx_PickleError("Incompatible checksums (%s vs 0x11ea7f1 = 
(db, prefix))" % __pyx_checksum)
+ *         raise __pyx_PickleError("Incompatible checksums (0x%x vs 
(0x11ea7f1, 0xe9c0b3a, 0x8ba9a5d) = (db, prefix))" % __pyx_checksum)
  *     __pyx_result = PrefixedDB.__new__(__pyx_type)
  *     if __pyx_state is not None:             # <<<<<<<<<<<<<<
  *         __pyx_unpickle_PrefixedDB__set_state(<PrefixedDB> __pyx_result, 
__pyx_state)
@@ -19480,10 +19564,10 @@
 
   /* function exit code */
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_XDECREF(__pyx_t_1);
   __Pyx_XDECREF(__pyx_t_4);
   __Pyx_XDECREF(__pyx_t_5);
+  __Pyx_XDECREF(__pyx_t_6);
   __Pyx_AddTraceback("plyvel._plyvel.__pyx_unpickle_PrefixedDB", 
__pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
@@ -20110,13 +20194,13 @@
   #if PY_VERSION_HEX >= 0x030400a1
   0, /*tp_finalize*/
   #endif
-  #if PY_VERSION_HEX >= 0x030800b1
+  #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || 
PYPY_VERSION_NUM >= 0x07030800)
   0, /*tp_vectorcall*/
   #endif
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PYPY_VERSION_NUM+0 >= 0x06000000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -20255,13 +20339,13 @@
   #if PY_VERSION_HEX >= 0x030400a1
   0, /*tp_finalize*/
   #endif
-  #if PY_VERSION_HEX >= 0x030800b1
+  #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || 
PYPY_VERSION_NUM >= 0x07030800)
   0, /*tp_vectorcall*/
   #endif
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PYPY_VERSION_NUM+0 >= 0x06000000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -20388,13 +20472,13 @@
   #if PY_VERSION_HEX >= 0x030400a1
   0, /*tp_finalize*/
   #endif
-  #if PY_VERSION_HEX >= 0x030800b1
+  #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || 
PYPY_VERSION_NUM >= 0x07030800)
   0, /*tp_vectorcall*/
   #endif
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PYPY_VERSION_NUM+0 >= 0x06000000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -20524,13 +20608,13 @@
   #if PY_VERSION_HEX >= 0x030400a1
   0, /*tp_finalize*/
   #endif
-  #if PY_VERSION_HEX >= 0x030800b1
+  #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || 
PYPY_VERSION_NUM >= 0x07030800)
   0, /*tp_vectorcall*/
   #endif
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PYPY_VERSION_NUM+0 >= 0x06000000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -20636,13 +20720,13 @@
   #if PY_VERSION_HEX >= 0x030400a1
   0, /*tp_finalize*/
   #endif
-  #if PY_VERSION_HEX >= 0x030800b1
+  #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || 
PYPY_VERSION_NUM >= 0x07030800)
   0, /*tp_vectorcall*/
   #endif
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PYPY_VERSION_NUM+0 >= 0x06000000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -20737,13 +20821,13 @@
   #if PY_VERSION_HEX >= 0x030400a1
   0, /*tp_finalize*/
   #endif
-  #if PY_VERSION_HEX >= 0x030800b1
+  #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || 
PYPY_VERSION_NUM >= 0x07030800)
   0, /*tp_vectorcall*/
   #endif
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PYPY_VERSION_NUM+0 >= 0x06000000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -20869,13 +20953,13 @@
   #if PY_VERSION_HEX >= 0x030400a1
   0, /*tp_finalize*/
   #endif
-  #if PY_VERSION_HEX >= 0x030800b1
+  #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || 
PYPY_VERSION_NUM >= 0x07030800)
   0, /*tp_vectorcall*/
   #endif
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PYPY_VERSION_NUM+0 >= 0x06000000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -20994,13 +21078,13 @@
   #if PY_VERSION_HEX >= 0x030400a1
   0, /*tp_finalize*/
   #endif
-  #if PY_VERSION_HEX >= 0x030800b1
+  #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || 
PYPY_VERSION_NUM >= 0x07030800)
   0, /*tp_vectorcall*/
   #endif
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY && PYPY_VERSION_NUM+0 >= 0x06000000
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
   0, /*tp_pypy_flags*/
   #endif
 };
@@ -21061,7 +21145,7 @@
   {&__pyx_kp_u_Database_or_snapshot_is_closed, 
__pyx_k_Database_or_snapshot_is_closed, 
sizeof(__pyx_k_Database_or_snapshot_is_closed), 0, 1, 0, 0},
   {&__pyx_n_s_Error, __pyx_k_Error, sizeof(__pyx_k_Error), 0, 0, 1, 1},
   {&__pyx_n_s_IOError, __pyx_k_IOError, sizeof(__pyx_k_IOError), 0, 0, 1, 1},
-  {&__pyx_kp_s_Incompatible_checksums_s_vs_0x11, 
__pyx_k_Incompatible_checksums_s_vs_0x11, 
sizeof(__pyx_k_Incompatible_checksums_s_vs_0x11), 0, 0, 1, 0},
+  {&__pyx_kp_s_Incompatible_checksums_0x_x_vs_0, 
__pyx_k_Incompatible_checksums_0x_x_vs_0, 
sizeof(__pyx_k_Incompatible_checksums_0x_x_vs_0), 0, 0, 1, 0},
   {&__pyx_n_s_Iterator, __pyx_k_Iterator, sizeof(__pyx_k_Iterator), 0, 0, 1, 
1},
   {&__pyx_n_s_IteratorInvalidError, __pyx_k_IteratorInvalidError, 
sizeof(__pyx_k_IteratorInvalidError), 0, 0, 1, 1},
   {&__pyx_n_s_Lock, __pyx_k_Lock, sizeof(__pyx_k_Lock), 0, 0, 1, 1},
@@ -21078,7 +21162,7 @@
   {&__pyx_n_s_UnicodeEncodeError, __pyx_k_UnicodeEncodeError, 
sizeof(__pyx_k_UnicodeEncodeError), 0, 0, 1, 1},
   {&__pyx_n_s_ValueError, __pyx_k_ValueError, sizeof(__pyx_k_ValueError), 0, 
0, 1, 1},
   {&__pyx_n_s_WriteBatch, __pyx_k_WriteBatch, sizeof(__pyx_k_WriteBatch), 0, 
0, 1, 1},
-  {&__pyx_kp_u__27, __pyx_k__27, sizeof(__pyx_k__27), 0, 1, 0, 0},
+  {&__pyx_kp_u__28, __pyx_k__28, sizeof(__pyx_k__28), 0, 1, 0, 0},
   {&__pyx_kp_u__7, __pyx_k__7, sizeof(__pyx_k__7), 0, 1, 0, 0},
   {&__pyx_kp_u__8, __pyx_k__8, sizeof(__pyx_k__8), 0, 1, 0, 0},
   {&__pyx_n_s_approximate_sizes, __pyx_k_approximate_sizes, 
sizeof(__pyx_k_approximate_sizes), 0, 0, 1, 1},
@@ -21470,6 +21554,9 @@
   __pyx_tuple__26 = PyTuple_Pack(1, 
__pyx_kp_s_self__snapshot_cannot_be_convert); if (unlikely(!__pyx_tuple__26)) 
__PYX_ERR(1, 4, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__26);
   __Pyx_GIVEREF(__pyx_tuple__26);
+  __pyx_tuple__27 = PyTuple_Pack(3, __pyx_int_18786289, __pyx_int_245107514, 
__pyx_int_146446941); if (unlikely(!__pyx_tuple__27)) __PYX_ERR(1, 4, 
__pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__27);
+  __Pyx_GIVEREF(__pyx_tuple__27);
 
   /* "plyvel/_plyvel.pyx":515
  * 
@@ -21478,10 +21565,10 @@
  *               max_open_files=None, lru_cache_size=None, block_size=None,
  *               block_restart_interval=None, max_file_size=None,
  */
-  __pyx_tuple__28 = PyTuple_Pack(17, __pyx_n_s_name, 
__pyx_n_s_paranoid_checks, __pyx_n_s_write_buffer_size, 
__pyx_n_s_max_open_files, __pyx_n_s_lru_cache_size, __pyx_n_s_block_size, 
__pyx_n_s_block_restart_interval, __pyx_n_s_max_file_size, 
__pyx_n_s_compression, __pyx_n_s_bloom_filter_bits, __pyx_n_s_comparator, 
__pyx_n_s_comparator_name, __pyx_n_s_options, __pyx_n_s_st, __pyx_n_s_fsname, 
__pyx_n_s_create_if_missing, __pyx_n_s_error_if_exists); if 
(unlikely(!__pyx_tuple__28)) __PYX_ERR(0, 515, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__28);
-  __Pyx_GIVEREF(__pyx_tuple__28);
-  __pyx_codeobj__29 = (PyObject*)__Pyx_PyCode_New(1, 11, 17, 0, 
CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, 
__pyx_empty_tuple, __pyx_tuple__28, __pyx_empty_tuple, __pyx_empty_tuple, 
__pyx_kp_s_plyvel__plyvel_pyx, __pyx_n_s_repair_db, 515, __pyx_empty_bytes); if 
(unlikely(!__pyx_codeobj__29)) __PYX_ERR(0, 515, __pyx_L1_error)
+  __pyx_tuple__29 = PyTuple_Pack(17, __pyx_n_s_name, 
__pyx_n_s_paranoid_checks, __pyx_n_s_write_buffer_size, 
__pyx_n_s_max_open_files, __pyx_n_s_lru_cache_size, __pyx_n_s_block_size, 
__pyx_n_s_block_restart_interval, __pyx_n_s_max_file_size, 
__pyx_n_s_compression, __pyx_n_s_bloom_filter_bits, __pyx_n_s_comparator, 
__pyx_n_s_comparator_name, __pyx_n_s_options, __pyx_n_s_st, __pyx_n_s_fsname, 
__pyx_n_s_create_if_missing, __pyx_n_s_error_if_exists); if 
(unlikely(!__pyx_tuple__29)) __PYX_ERR(0, 515, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__29);
+  __Pyx_GIVEREF(__pyx_tuple__29);
+  __pyx_codeobj__30 = (PyObject*)__Pyx_PyCode_New(1, 11, 17, 0, 
CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, 
__pyx_empty_tuple, __pyx_tuple__29, __pyx_empty_tuple, __pyx_empty_tuple, 
__pyx_kp_s_plyvel__plyvel_pyx, __pyx_n_s_repair_db, 515, __pyx_empty_bytes); if 
(unlikely(!__pyx_codeobj__30)) __PYX_ERR(0, 515, __pyx_L1_error)
 
   /* "plyvel/_plyvel.pyx":537
  * 
@@ -21490,20 +21577,20 @@
  *     cdef Options options = Options()
  *     cdef Status st
  */
-  __pyx_tuple__30 = PyTuple_Pack(4, __pyx_n_s_name, __pyx_n_s_options, 
__pyx_n_s_st, __pyx_n_s_fsname); if (unlikely(!__pyx_tuple__30)) __PYX_ERR(0, 
537, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__30);
-  __Pyx_GIVEREF(__pyx_tuple__30);
-  __pyx_codeobj__31 = (PyObject*)__Pyx_PyCode_New(1, 0, 4, 0, 
CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, 
__pyx_empty_tuple, __pyx_tuple__30, __pyx_empty_tuple, __pyx_empty_tuple, 
__pyx_kp_s_plyvel__plyvel_pyx, __pyx_n_s_destroy_db, 537, __pyx_empty_bytes); 
if (unlikely(!__pyx_codeobj__31)) __PYX_ERR(0, 537, __pyx_L1_error)
+  __pyx_tuple__31 = PyTuple_Pack(4, __pyx_n_s_name, __pyx_n_s_options, 
__pyx_n_s_st, __pyx_n_s_fsname); if (unlikely(!__pyx_tuple__31)) __PYX_ERR(0, 
537, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__31);
+  __Pyx_GIVEREF(__pyx_tuple__31);
+  __pyx_codeobj__32 = (PyObject*)__Pyx_PyCode_New(1, 0, 4, 0, 
CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, 
__pyx_empty_tuple, __pyx_tuple__31, __pyx_empty_tuple, __pyx_empty_tuple, 
__pyx_kp_s_plyvel__plyvel_pyx, __pyx_n_s_destroy_db, 537, __pyx_empty_bytes); 
if (unlikely(!__pyx_codeobj__32)) __PYX_ERR(0, 537, __pyx_L1_error)
 
   /* "(tree fragment)":1
  * def __pyx_unpickle_PrefixedDB(__pyx_type, long __pyx_checksum, 
__pyx_state):             # <<<<<<<<<<<<<<
  *     cdef object __pyx_PickleError
  *     cdef object __pyx_result
  */
-  __pyx_tuple__32 = PyTuple_Pack(5, __pyx_n_s_pyx_type, 
__pyx_n_s_pyx_checksum, __pyx_n_s_pyx_state, __pyx_n_s_pyx_PickleError, 
__pyx_n_s_pyx_result); if (unlikely(!__pyx_tuple__32)) __PYX_ERR(1, 1, 
__pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__32);
-  __Pyx_GIVEREF(__pyx_tuple__32);
-  __pyx_codeobj__33 = (PyObject*)__Pyx_PyCode_New(3, 0, 5, 0, 
CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, 
__pyx_empty_tuple, __pyx_tuple__32, __pyx_empty_tuple, __pyx_empty_tuple, 
__pyx_kp_s_stringsource, __pyx_n_s_pyx_unpickle_PrefixedDB, 1, 
__pyx_empty_bytes); if (unlikely(!__pyx_codeobj__33)) __PYX_ERR(1, 1, 
__pyx_L1_error)
+  __pyx_tuple__33 = PyTuple_Pack(5, __pyx_n_s_pyx_type, 
__pyx_n_s_pyx_checksum, __pyx_n_s_pyx_state, __pyx_n_s_pyx_PickleError, 
__pyx_n_s_pyx_result); if (unlikely(!__pyx_tuple__33)) __PYX_ERR(1, 1, 
__pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__33);
+  __Pyx_GIVEREF(__pyx_tuple__33);
+  __pyx_codeobj__34 = (PyObject*)__Pyx_PyCode_New(3, 0, 5, 0, 
CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, 
__pyx_empty_tuple, __pyx_tuple__33, __pyx_empty_tuple, __pyx_empty_tuple, 
__pyx_kp_s_stringsource, __pyx_n_s_pyx_unpickle_PrefixedDB, 1, 
__pyx_empty_bytes); if (unlikely(!__pyx_codeobj__34)) __PYX_ERR(1, 1, 
__pyx_L1_error)
   __Pyx_RefNannyFinishContext();
   return 0;
   __pyx_L1_error:;
@@ -21515,6 +21602,8 @@
   __pyx_umethod_PyDict_Type_pop.type = (PyObject*)&PyDict_Type;
   if (__Pyx_InitStrings(__pyx_string_tab) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
   __pyx_int_18786289 = PyInt_FromLong(18786289L); if 
(unlikely(!__pyx_int_18786289)) __PYX_ERR(0, 1, __pyx_L1_error)
+  __pyx_int_146446941 = PyInt_FromLong(146446941L); if 
(unlikely(!__pyx_int_146446941)) __PYX_ERR(0, 1, __pyx_L1_error)
+  __pyx_int_245107514 = PyInt_FromLong(245107514L); if 
(unlikely(!__pyx_int_245107514)) __PYX_ERR(0, 1, __pyx_L1_error)
   return 0;
   __pyx_L1_error:;
   return -1;
@@ -21619,7 +21708,7 @@
   if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && 
likely(!__pyx_type_6plyvel_7_plyvel_Iterator.tp_dictoffset && 
__pyx_type_6plyvel_7_plyvel_Iterator.tp_getattro == PyObject_GenericGetAttr)) {
     __pyx_type_6plyvel_7_plyvel_Iterator.tp_getattro = 
__Pyx_PyObject_GenericGetAttrNoDict;
   }
-  #if CYTHON_COMPILING_IN_CPYTHON
+  #if CYTHON_UPDATE_DESCRIPTOR_DOC
   {
     PyObject *wrapper = PyObject_GetAttrString((PyObject 
*)&__pyx_type_6plyvel_7_plyvel_Iterator, "__next__"); if (unlikely(!wrapper)) 
__PYX_ERR(0, 715, __pyx_L1_error)
     if (Py_TYPE(wrapper) == &PyWrapperDescr_Type) {
@@ -21999,10 +22088,10 @@
   __Pyx_GIVEREF(__pyx_t_1);
   PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);
   __pyx_t_1 = 0;
-  __Pyx_INCREF(__pyx_kp_u__27);
+  __Pyx_INCREF(__pyx_kp_u__28);
   __pyx_t_3 += 1;
-  __Pyx_GIVEREF(__pyx_kp_u__27);
-  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_kp_u__27);
+  __Pyx_GIVEREF(__pyx_kp_u__28);
+  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_kp_u__28);
 
   /* "plyvel/_plyvel.pyx":60
  * 
@@ -23028,7 +23117,7 @@
             return (equals == Py_EQ);
         } else {
             int result;
-#if CYTHON_USE_UNICODE_INTERNALS
+#if CYTHON_USE_UNICODE_INTERNALS && (PY_VERSION_HEX < 0x030B0000)
             Py_hash_t hash1, hash2;
             hash1 = ((PyBytesObject*)s1)->ob_shash;
             hash2 = ((PyBytesObject*)s2)->ob_shash;
@@ -24372,6 +24461,9 @@
         self = PyTuple_GetItem(args, 0);
         if (unlikely(!self)) {
             Py_DECREF(new_args);
+            PyErr_Format(PyExc_TypeError,
+                         "unbound method %.200S() needs an argument",
+                         cyfunc->func_qualname);
             return NULL;
         }
         result = __Pyx_CyFunction_CallMethod(func, self, new_args, kw);
@@ -24440,13 +24532,13 @@
 #if PY_VERSION_HEX >= 0x030400a1
     0,
 #endif
-#if PY_VERSION_HEX >= 0x030800b1
+#if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || 
PYPY_VERSION_NUM >= 0x07030800)
     0,
 #endif
 #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
     0,
 #endif
-#if CYTHON_COMPILING_IN_PYPY && PYPY_VERSION_NUM+0 >= 0x06000000
+#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
     0,
 #endif
 };
@@ -24693,17 +24785,35 @@
 static int __Pyx_setup_reduce(PyObject* type_obj) {
     int ret = 0;
     PyObject *object_reduce = NULL;
+    PyObject *object_getstate = NULL;
     PyObject *object_reduce_ex = NULL;
     PyObject *reduce = NULL;
     PyObject *reduce_ex = NULL;
     PyObject *reduce_cython = NULL;
     PyObject *setstate = NULL;
     PyObject *setstate_cython = NULL;
+    PyObject *getstate = NULL;
+#if CYTHON_USE_PYTYPE_LOOKUP
+    getstate = _PyType_Lookup((PyTypeObject*)type_obj, __pyx_n_s_getstate);
+#else
+    getstate = __Pyx_PyObject_GetAttrStrNoError(type_obj, __pyx_n_s_getstate);
+    if (!getstate && PyErr_Occurred()) {
+        goto __PYX_BAD;
+    }
+#endif
+    if (getstate) {
 #if CYTHON_USE_PYTYPE_LOOKUP
-    if (_PyType_Lookup((PyTypeObject*)type_obj, __pyx_n_s_getstate)) goto 
__PYX_GOOD;
+        object_getstate = _PyType_Lookup(&PyBaseObject_Type, 
__pyx_n_s_getstate);
 #else
-    if (PyObject_HasAttr(type_obj, __pyx_n_s_getstate)) goto __PYX_GOOD;
+        object_getstate = 
__Pyx_PyObject_GetAttrStrNoError((PyObject*)&PyBaseObject_Type, 
__pyx_n_s_getstate);
+        if (!object_getstate && PyErr_Occurred()) {
+            goto __PYX_BAD;
+        }
 #endif
+        if (object_getstate != getstate) {
+            goto __PYX_GOOD;
+        }
+    }
 #if CYTHON_USE_PYTYPE_LOOKUP
     object_reduce_ex = _PyType_Lookup(&PyBaseObject_Type, 
__pyx_n_s_reduce_ex); if (!object_reduce_ex) goto __PYX_BAD;
 #else
@@ -24748,6 +24858,8 @@
 #if !CYTHON_USE_PYTYPE_LOOKUP
     Py_XDECREF(object_reduce);
     Py_XDECREF(object_reduce_ex);
+    Py_XDECREF(object_getstate);
+    Py_XDECREF(getstate);
 #endif
     Py_XDECREF(reduce);
     Py_XDECREF(reduce_ex);
@@ -24897,7 +25009,7 @@
                 padding = PyUnicode_FromOrdinal(padding_char);
                 if (likely(padding) && uoffset > prepend_sign + 1) {
                     PyObject *tmp;
-                    PyObject *repeat = PyInt_FromSize_t(uoffset - 
prepend_sign);
+                    PyObject *repeat = PyInt_FromSsize_t(uoffset - 
prepend_sign);
                     if (unlikely(!repeat)) goto done_or_error;
                     tmp = PyNumber_Multiply(padding, repeat);
                     Py_DECREF(repeat);
@@ -25237,6 +25349,12 @@
 #include "compile.h"
 #include "frameobject.h"
 #include "traceback.h"
+#if PY_VERSION_HEX >= 0x030b00a6
+  #ifndef Py_BUILD_CORE
+    #define Py_BUILD_CORE 1
+  #endif
+  #include "internal/pycore_frame.h"
+#endif
 static PyCodeObject* __Pyx_CreateCodeObjectForTraceback(
             const char *funcname, int c_line,
             int py_line, const char *filename) {
@@ -25300,14 +25418,24 @@
     PyCodeObject *py_code = 0;
     PyFrameObject *py_frame = 0;
     PyThreadState *tstate = __Pyx_PyThreadState_Current;
+    PyObject *ptype, *pvalue, *ptraceback;
     if (c_line) {
         c_line = __Pyx_CLineForTraceback(tstate, c_line);
     }
     py_code = __pyx_find_code_object(c_line ? -c_line : py_line);
     if (!py_code) {
+        __Pyx_ErrFetchInState(tstate, &ptype, &pvalue, &ptraceback);
         py_code = __Pyx_CreateCodeObjectForTraceback(
             funcname, c_line, py_line, filename);
-        if (!py_code) goto bad;
+        if (!py_code) {
+            /* If the code object creation fails, then we should clear the
+               fetched exception references and propagate the new exception */
+            Py_XDECREF(ptype);
+            Py_XDECREF(pvalue);
+            Py_XDECREF(ptraceback);
+            goto bad;
+        }
+        __Pyx_ErrRestoreInState(tstate, ptype, pvalue, ptraceback);
         __pyx_insert_code_object(c_line ? -c_line : py_line, py_code);
     }
     py_frame = PyFrame_New(
@@ -26150,11 +26278,33 @@
 
 /* CheckBinaryVersion */
 static int __Pyx_check_binary_version(void) {
-    char ctversion[4], rtversion[4];
-    PyOS_snprintf(ctversion, 4, "%d.%d", PY_MAJOR_VERSION, PY_MINOR_VERSION);
-    PyOS_snprintf(rtversion, 4, "%s", Py_GetVersion());
-    if (ctversion[0] != rtversion[0] || ctversion[2] != rtversion[2]) {
+    char ctversion[5];
+    int same=1, i, found_dot;
+    const char* rt_from_call = Py_GetVersion();
+    PyOS_snprintf(ctversion, 5, "%d.%d", PY_MAJOR_VERSION, PY_MINOR_VERSION);
+    found_dot = 0;
+    for (i = 0; i < 4; i++) {
+        if (!ctversion[i]) {
+            same = (rt_from_call[i] < '0' || rt_from_call[i] > '9');
+            break;
+        }
+        if (rt_from_call[i] != ctversion[i]) {
+            same = 0;
+            break;
+        }
+    }
+    if (!same) {
+        char rtversion[5] = {'\0'};
         char message[200];
+        for (i=0; i<4; ++i) {
+            if (rt_from_call[i] == '.') {
+                if (found_dot) break;
+                found_dot = 1;
+            } else if (rt_from_call[i] < '0' || rt_from_call[i] > '9') {
+                break;
+            }
+            rtversion[i] = rt_from_call[i];
+        }
         PyOS_snprintf(message, sizeof(message),
                       "compiletime version %s of module '%.100s' "
                       "does not match runtime version %s",
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/plyvel-1.4.0/plyvel/_version.py 
new/plyvel-1.5.0/plyvel/_version.py
--- old/plyvel-1.4.0/plyvel/_version.py 2021-12-29 14:21:10.000000000 +0100
+++ new/plyvel-1.5.0/plyvel/_version.py 2022-10-26 18:08:46.000000000 +0200
@@ -5,4 +5,4 @@
 # Note: don't add any non-trivial logic here; this file is also loaded
 # from setup.py file when the module has not yet been compiled!
 
-__version__ = '1.4.0'
+__version__ = '1.5.0'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/plyvel-1.4.0/plyvel.egg-info/PKG-INFO 
new/plyvel-1.5.0/plyvel.egg-info/PKG-INFO
--- old/plyvel-1.4.0/plyvel.egg-info/PKG-INFO   2021-12-29 14:26:37.000000000 
+0100
+++ new/plyvel-1.5.0/plyvel.egg-info/PKG-INFO   2022-10-26 18:09:09.000000000 
+0200
@@ -1,12 +1,11 @@
 Metadata-Version: 2.1
 Name: plyvel
-Version: 1.4.0
+Version: 1.5.0
 Summary: Plyvel, a fast and feature-rich Python interface to LevelDB
 Home-page: https://github.com/wbolster/plyvel
 Author: Wouter Bolsterlee
 Author-email: wou...@bolsterl.ee
 License: BSD License
-Platform: UNKNOWN
 Classifier: Development Status :: 5 - Production/Stable
 Classifier: Intended Audience :: Developers
 Classifier: Intended Audience :: Information Technology
@@ -42,9 +41,7 @@
 .. _Project page: https://github.com/wbolster/plyvel
 .. _Documentation: https://plyvel.readthedocs.io/
 .. _PyPI page: http://pypi.python.org/pypi/plyvel/
-.. _LevelDB: http://code.google.com/p/leveldb/
+.. _LevelDB: https://github.com/google/leveldb
 
 Note that using a released version is recommended over a checkout from version
 control. See the installation docs for more information.
-
-

Reply via email to