def test_default_views(self, root, config): config.add_view( context=IContent, name='folder_view', permission='view', renderer='kotti:templates/view/folder.pt', ) context = root request = DummyRequest() view = DefaultViewSelection(context, request) sviews = view.default_view_selector() assert 'selectable_default_views' in sviews # the root should have at least the default view and the folder_view assert len(sviews['selectable_default_views']) > 1 # the first view is always the default view assert sviews['selectable_default_views'][0]['is_current'] is True assert sviews['selectable_default_views'][0]['name'] == 'default' assert sviews['selectable_default_views'][0]['title'] == 'Default view' assert sviews['selectable_default_views'][1]['is_current'] is False # set the default view to folder_view view request = DummyRequest(GET={'view_name': 'folder_view'}) view = DefaultViewSelection(context, request) assert type(view.set_default_view()) == HTTPFound assert context.default_view == 'folder_view' # set back to default request = DummyRequest(GET={'view_name': 'default'}) view = DefaultViewSelection(context, request) assert type(view.set_default_view()) == HTTPFound assert context.default_view is None # try to set non existing view request = DummyRequest(GET={'view_name': 'nonexisting'}) view = DefaultViewSelection(context, request) assert type(view.set_default_view()) == HTTPFound assert context.default_view is None
def test_default_views(self, root, config): config.add_view( context=IContent, name="folder_view", permission="view", renderer="kotti:templates/view/folder.pt", ) context = root request = DummyRequest() view = DefaultViewSelection(context, request) sviews = view.default_view_selector() assert "selectable_default_views" in sviews # the root should have at least the default view and the folder_view assert len(sviews["selectable_default_views"]) > 1 # the first view is always the default view assert sviews["selectable_default_views"][0]["is_current"] is True assert sviews["selectable_default_views"][0]["name"] == "default" assert sviews["selectable_default_views"][0]["title"] == "Default view" assert sviews["selectable_default_views"][1]["is_current"] is False # set the default view to folder_view view request = DummyRequest(GET={"view_name": "folder_view"}) view = DefaultViewSelection(context, request) assert type(view.set_default_view()) == HTTPFound assert context.default_view == "folder_view" # set back to default request = DummyRequest(GET={"view_name": "default"}) view = DefaultViewSelection(context, request) assert type(view.set_default_view()) == HTTPFound assert context.default_view is None # try to set non existing view request = DummyRequest(GET={"view_name": "nonexisting"}) view = DefaultViewSelection(context, request) assert type(view.set_default_view()) == HTTPFound assert context.default_view is None
def relational_metadata(obj, request, get_user=True, get_type_info=True, get_permissions=True, get_extra_info=True): # some of this is just to mimick templates relmeta = dict() api = JSONTemplateAPI(obj, request) if get_user: relmeta['current_user'] = serialize_user(obj, request, api=api) if get_type_info: # type info type_info = dict() for attr in ['selectable_default_views', 'title', 'name', 'addable_to', 'add_permission']: type_info[attr] = getattr(obj.type_info, attr) if type_info['name'] == 'Image': for span in ['span1', 'span4']: key = 'image_%s_url' % span type_info[key] = request.resource_url(obj, 'image', span) relmeta['type_info'] = type_info if get_permissions: # permissions has_permission = dict() for key in ['add', 'edit', 'state_change']: has_permission[key] = bool(api.has_permission(key).boolval) has_permission['admin'] = bool( api.has_permission('admin', api.root).boolval) relmeta['has_permission'] = has_permission if not get_extra_info: return relmeta # for top navbar navitems = list() for item in api.list_children(api.navigation_root): if item.in_navigation: idata = dict(inside=api.inside(obj, item), url=api.url(item), path=api.path(item), description=item.description, title=item.title) navitems.append(idata) relmeta['navitems'] = navitems relmeta['application_url'] = request.application_url relmeta['site_title'] = api.site_title relmeta['root_url'] = api.url(api.root) # for edit bar wf = get_workflow(obj, request) if wf['current_state'] is not None: if 'callback' in wf['current_state'].get('data', dict()): del wf['current_state']['data']['callback'] for state in wf['states']: sdata = wf['states'][state].get('data', dict()) if 'callback' in sdata: del sdata['callback'] relmeta['workflow'] = wf relmeta['request_url'] = request.url relmeta['api_url'] = api.url() edit_links = list() link_parent = None for link in api.edit_links: if type(link) is not LinkParent: link_info = get_link_info(link, obj, request) path = api.path(obj, request) resource, command = os.path.split(path) link_info['resource'] = resource link_info['command'] = command edit_links.append(link_info) else: link_parent = handle_link_parent(link, obj, request, api) relmeta['edit_links'] = edit_links relmeta['link_parent'] = link_parent dfs = DefaultViewSelection(obj, request) key = 'selectable_default_views' relmeta[key] = dfs.default_view_selector()[key] del dfs del key # add-dropdown factories = get_content_type_factories(obj, request)['factories'] flist = list() for f in factories: path = api.path(obj, f.type_info.add_view) flist.append(dict( url=api.url(obj, f.type_info.add_view), resource=os.path.dirname(path), command=os.path.basename(path), title=f.type_info.title, )) relmeta['content_type_factories'] = flist relmeta['upload_url'] = api.url(obj, 'upload') # site_setup_linke site_setup_links = list() for link in api.site_setup_links: site_setup_links.append(get_link_info(link, obj, request)) # FIXME this fixes a problem where a plugin seems to define an # extra settings link site_setup_urls = list() setup_links = list() for link in site_setup_links: if link['url'] not in site_setup_urls: site_setup_urls.append(link['url']) setup_links.append(link) relmeta['site_setup_links'] = setup_links relmeta['navigate_url'] = api.url(obj, '@@navigate') relmeta['logout_url'] = api.url(api.root, '@@logout', query=dict(came_from=request.url)) # page content relmeta['has_location_context'] = api.is_location(obj) relmeta['view_needed'] = api.view_needed breadcrumbs = list() for bc in api.breadcrumbs: breadcrumbs.append(dict(id=bc.id, name=bc.name, description=bc.description, url=api.url(bc), path=api.path(bc), title=bc.title)) relmeta['breadcrumbs'] = breadcrumbs lineage = list() for node in api.lineage: lineage.append(dict(id=node.id, name=node.name, description=node.description, url=api.url(node), path=api.path(node), title=node.title)) relmeta['lineage'] = lineage # FIXME - do this client side #http://stackoverflow.com/questions/3705670/best-way-to-create-a-reversed-list-in-python #relmeta['lineage_reversed'] = lineage[::-1] # FIXME figure out what to do about page_slots #relmeta['page_slots'] = api.slots relmeta['paths'] = { 'this_path': request.resource_path(obj), 'child_paths': [request.resource_path(child) for child in obj.children_with_permission(request)], 'childnames': [child.__name__ for child in obj.children_with_permission(request)], } # contents_buttons cbuttons = [get_button_info(b, obj, request) for b in get_contents_buttons(obj, request)] relmeta['contents_buttons'] = cbuttons return relmeta
def relational_metadata(obj, request): # some of this is just to mimick templates relmeta = dict() api = TemplateAPI(obj, request) navitems = list() for item in api.list_children(api.navigation_root): if item.in_navigation: idata = dict(inside=api.inside(obj, item), url=api.url(item), description=item.description, title=item.title) navitems.append(idata) relmeta['navitems'] = navitems # type info type_info = dict() for attr in ['selectable_default_views', 'title', 'addable_to', 'add_permission']: type_info[attr] = getattr(obj.type_info, attr) relmeta['type_info'] = type_info # permissions has_permission = dict() for key in ['add', 'edit', 'state_change']: has_permission[key] = bool(api.has_permission(key).boolval) has_permission['admin'] = bool(api.has_permission('admin', api.root).boolval) relmeta['has_permission'] = has_permission # for top navbar relmeta['application_url'] = request.application_url relmeta['site_title'] = api.site_title relmeta['root_url'] = api.url(api.root) # for edit bar wf = get_workflow(obj, request) if wf['current_state'] is not None: if 'callback' in wf['current_state'].get('data', dict()): del wf['current_state']['data']['callback'] for state in wf['states']: sdata = wf['states'][state].get('data', dict()) if 'callback' in sdata: del sdata['callback'] relmeta['workflow'] = wf relmeta['request_url'] = request.url relmeta['api_url'] = api.url() edit_links = list() link_parent = None for link in api.edit_links: if type(link) is not LinkParent: edit_links.append(get_link_info(link, obj, request)) else: link_parent = handle_link_parent(link, obj, request) relmeta['edit_links'] = edit_links relmeta['link_parent'] = link_parent dfs = DefaultViewSelection(obj, request) key = 'selectable_default_views' relmeta[key] = dfs.default_view_selector()[key] del dfs del key # add-dropdown factories = get_content_type_factories(obj, request)['factories'] flist = list() for f in factories: flist.append(dict( url=api.url(obj, f.type_info.add_view), title=f.type_info.title, )) relmeta['content_type_factories'] = flist relmeta['upload_url'] = api.url(obj, 'upload') # site_setup_linke site_setup_links = list() for link in api.site_setup_links: site_setup_links.append(get_link_info(link, obj, request)) # FIXME this fixes a problem where a plugin seems to define an # extra settings link site_setup_urls = list() setup_links = list() for link in site_setup_links: if link['url'] not in site_setup_urls: site_setup_urls.append(link['url']) setup_links.append(link) relmeta['site_setup_links'] = setup_links relmeta['navigate_url'] = api.url(obj, '@@navigate') relmeta['logout_url'] = api.url(api.root, '@@logout', query=dict(came_from=request.url)) # page content relmeta['has_location_context'] = api.is_location(obj) relmeta['view_needed'] = api.view_needed breadcrumbs = list() for bc in api.breadcrumbs: breadcrumbs.append(dict(id=bc.id, name=bc.name, description=bc.description, url=api.url(bc), title=bc.title)) relmeta['breadcrumbs'] = breadcrumbs # FIXME figure out what to do about page_slots #relmeta['page_slots'] = api.slots relmeta['paths'] = { 'this_path': request.resource_path(obj), 'child_paths': [request.resource_path(child) for child in obj.children_with_permission(request)], 'childnames': [child.__name__ for child in obj.children_with_permission(request)], } relmeta['current_user'] = serialize_user(obj, request, api=api) #import pdb ; pdb.set_trace() return relmeta