From 2cbe97aa9c5281fe18e618ae1a1c72915a909037 Mon Sep 17 00:00:00 2001
From: Romain Courteaud <romain@nexedi.com>
Date: Fri, 15 Jan 2016 12:48:08 +0000
Subject: [PATCH] [erp5_hal_json_style] Search: do not fail if some select
 value can not be calculated

Follow listbox behaviour: http://git.erp5.org/gitweb/erp5.git/blob/9abfc6c412eb8635f6ab805d0af1b5d9f3e3facd:/product/ERP5Form/ListBox.py?js=1#l2321
---
 .../ERP5Document_getHateoas.xml                  | 16 +++++++++++++---
 1 file changed, 13 insertions(+), 3 deletions(-)

diff --git a/bt5/erp5_hal_json_style/SkinTemplateItem/portal_skins/erp5_hal_json_style/ERP5Document_getHateoas.xml b/bt5/erp5_hal_json_style/SkinTemplateItem/portal_skins/erp5_hal_json_style/ERP5Document_getHateoas.xml
index 3c091456a8..3ba5cc2389 100644
--- a/bt5/erp5_hal_json_style/SkinTemplateItem/portal_skins/erp5_hal_json_style/ERP5Document_getHateoas.xml
+++ b/bt5/erp5_hal_json_style/SkinTemplateItem/portal_skins/erp5_hal_json_style/ERP5Document_getHateoas.xml
@@ -62,6 +62,8 @@ from ZTUtils import make_query\n
 import json\n
 from base64 import urlsafe_b64encode, urlsafe_b64decode\n
 from DateTime import DateTime\n
+from ZODB.POSException import ConflictError\n
+\n
 if REQUEST is None:\n
   REQUEST = context.REQUEST\n
   # raise Unauthorized\n
@@ -79,6 +81,14 @@ def byteify(string):\n
   else:\n
     return string\n
 \n
+def getProtectedProperty(document, select):\n
+  try:\n
+    return document.getProperty(select, d=None)\n
+  except (ConflictError, RuntimeError):\n
+    raise\n
+  except:\n
+    return None\n
+\n
 url_template_dict = {\n
   "form_action": "%(traversed_document_url)s/%(action_id)s",\n
   "traverse_generator": "%(root_url)s/%(script_id)s?mode=traverse" + \\\n
@@ -1024,7 +1034,7 @@ def calculateHateoas(is_portal=None, is_site_root=None, traversed_document=None,
       except AttributeError:\n
         # XXX ERP5 Site is not an ERP5 document\n
         document = sql_document\n
-      document_uid = document.getUid()\n
+      document_uid = sql_document.uid\n
       document_result = {\n
   #       \'_relative_url\': sql_document.path[length:],\n
         \'_links\': {\n
@@ -1050,7 +1060,7 @@ def calculateHateoas(is_portal=None, is_site_root=None, traversed_document=None,
           if (\'default\' in editable_field_dict[select].tales):\n
             tmp_value = None\n
           else:\n
-            tmp_value = document.getProperty(select, d=None)\n
+            tmp_value = getProtectedProperty(document, select)\n
   \n
           property_value = renderField(traversed_document, editable_field_dict[select], form_relative_url,\n
                                        tmp_value,\n
@@ -1058,7 +1068,7 @@ def calculateHateoas(is_portal=None, is_site_root=None, traversed_document=None,
                                        document_uid))\n
           REQUEST.other.pop(\'cell\', None)\n
         else:\n
-          property_value = document.getProperty(select, d=None)\n
+          property_value = getProtectedProperty(document, select)\n
         if property_value is not None:\n
           if same_type(property_value, DateTime()):\n
             # Serialize DateTime\n
-- 
2.30.9