diff --git a/Products/zms/rest_api.py b/Products/zms/rest_api.py index bf1321d11..fa8d97c75 100644 --- a/Products/zms/rest_api.py +++ b/Products/zms/rest_api.py @@ -69,7 +69,7 @@ def get_attrs(node, langs, monolang, REQUEST): data['is_page'] = node.isPage() data['is_page_element'] = node.isPageElement() data['index_html'] = node.getHref2IndexHtmlInContext(node,REQUEST=REQUEST) - data['parent_uid'] = node.breadcrumbs_obj_path()[-2] if len(node.breadcrumbs_obj_path()) > 1 else None + data['parent_uid'] = node.breadcrumbs_obj_path()[-2].get_uid() if len(node.breadcrumbs_obj_path()) > 1 else None data['home_id'] = node.getHome().id data['level'] = node.getLevel() data['restricted'] = node.hasRestrictedAccess() @@ -135,13 +135,21 @@ def __call__(self, REQUEST=None, **kw): langs = context.getLangIds() monolang = self.ids and self.ids[0] in langs langs = self.ids if monolang else langs - if self.ids == ['list_child_nodes']: + if self.ids == ['list_parent_nodes']: + id_prefix = REQUEST.get('id_prefix','e') + nodes = context.breadcrumbs_obj_path() + data = [get_meta_data(x) for x in nodes] + elif self.ids == ['list_child_nodes']: id_prefix = REQUEST.get('id_prefix','e') nodes = context.getObjChildren(id_prefix,REQUEST) data = [get_meta_data(x) for x in nodes] elif self.ids == ['list_tree_nodes']: nodes = context.getTreeNodes(REQUEST) data = [get_meta_data(x) for x in nodes] + elif self.ids == ['get_parent_nodes']: + id_prefix = REQUEST.get('id_prefix','e') + nodes = context.breadcrumbs_obj_path() + data = [get_attrs(x, langs, monolang, REQUEST) for x in nodes] elif self.ids == ['get_child_nodes']: id_prefix = REQUEST.get('id_prefix','e') nodes = context.getObjChildren(id_prefix,REQUEST) diff --git a/tests/test_rest_api.py b/tests/test_rest_api.py index 688abc69e..16bc758b4 100644 --- a/tests/test_rest_api.py +++ b/tests/test_rest_api.py @@ -75,6 +75,12 @@ def test_get(self): self.assertEqual( actual['meta_id'], 'ZMSDocument') self.assertTrue( 'title' in actual) self.assertFalse( 'title_%s'%self.lang in actual) + # list_parent_nodes + request = MockHTTPRequest({'REQUEST_METHOD':'GET','TraversalRequestNameStack':path_to_handle+['list_child_nodes'],'path_to_handle':path_to_handle+['list_parent_nodes']}) + print("path_to_handle", request.get('path_to_handle')) + actual = json.loads( self.context.__bobo_traverse__(request, name)(request)) + print(json.dumps(actual)) + self.assertEqual( len(actual), len(document.breadcrumbs_obj_path())) # list_child_nodes request = MockHTTPRequest({'REQUEST_METHOD':'GET','TraversalRequestNameStack':path_to_handle+['list_child_nodes'],'path_to_handle':path_to_handle+['list_child_nodes']}) print("path_to_handle", request.get('path_to_handle'))