From 723fcb24f606d853b1d5aebbfbd4b4c0887b21c8 Mon Sep 17 00:00:00 2001
From: Julien Muchembled <jm@nexedi.com>
Date: Wed, 16 Nov 2016 16:04:07 +0100
Subject: [PATCH] Compatibility with recent BTrees

Same as for commit c3450f1411efcd96e29f8e9d5902c70e48a679b5:
BTrees don't accept None as key anymore.
---
 product/ERP5/Tool/PasswordTool.py    | 2 +-
 product/ERP5/Tool/UrlRegistryTool.py | 6 ++++++
 2 files changed, 7 insertions(+), 1 deletion(-)

diff --git a/product/ERP5/Tool/PasswordTool.py b/product/ERP5/Tool/PasswordTool.py
index f35ea5ac95..e1604898e4 100644
--- a/product/ERP5/Tool/PasswordTool.py
+++ b/product/ERP5/Tool/PasswordTool.py
@@ -266,7 +266,7 @@ class PasswordTool(BaseTool):
     try:
       register_user_login, expiration_date = self._password_request_dict[
         password_key]
-    except KeyError:
+    except (KeyError, TypeError):
       # XXX: incorrect grammar and not descriptive enough
       return error('Key not known. Please ask reset password.')
     if user_login is not None and register_user_login != user_login:
diff --git a/product/ERP5/Tool/UrlRegistryTool.py b/product/ERP5/Tool/UrlRegistryTool.py
index 5e1aad0182..80448bbc9e 100644
--- a/product/ERP5/Tool/UrlRegistryTool.py
+++ b/product/ERP5/Tool/UrlRegistryTool.py
@@ -209,18 +209,24 @@ class BTreeMappingDict(Implicit):
     return self._getStorage().items()
 
   def __getitem__(self, key):
+    if key is None:
+      raise KeyError(key)
     return self._getStorage()[key]
 
   def __contains__(self, key):
     return key in self._getStorage().keys()
 
   def get(self, key, default=None):
+    if key is None:
+      return default
     return self._getStorage().get(key, default)
 
   def __setitem__(self, key, value):
     self._getStorage()[key] = value
 
   def __delitem__(self, key):
+    if key is None:
+      raise KeyError(key)
     del self._getStorage()[key]
 
 InitializeClass(UrlRegistryTool)
-- 
2.30.9