def _setup_rest_action(config, action, clazz, view_mapping): """Setup a route and a view for given action and clazz. The routes will have the follwoing following name and url: * Name: $modulname-$actionname * Url: $modulname/$actionurl Note, that the actionname can be configured only as admin. Further a clazz specific factory will be added to the route which is later used to setup the ACL of items of the modul. :config: Configuration :action: Action item :clazz: clazz item :view_mapping: Dictionary with action items :returns: @todo """ action_method_mapping = { "list": "GET", "create": "POST", "read": "GET", "update": "PUT", "delete": "DELETE" } name = clazz.__tablename__ action_name = action.name.lower() view_func = get_action_view(view_mapping, action_name, name) if not view_func: return route_name = get_action_routename(clazz, action_name, prefix="rest") tmpurl = action.url.split("/") if len(tmpurl) > 1: route_url = "rest/%s/%s" % (name, tmpurl[1]) else: route_url = "rest/%s" % (name) log.debug("Adding REST route: %s, %s" % (route_name, route_url)) method = action_method_mapping[action_name] config.add_route(route_name, route_url, request_method=method, factory=get_resource_factory(clazz)) log.debug("Adding REST view: %s, %s, %s" % (view_func, route_name, method)) settings = config.registry.settings http_cache = settings.get('security.page_http_cache', '0') config.add_view(view_func, route_name=route_name, request_method=method, renderer='json', permission=action.permission or action_name, http_cache=int(http_cache))
def _setup_web_action(config, action, clazz, view_mapping): """Setup a route and a view for given action and clazz. The routes will have the follwoing following name and url: * Name: $modulname-$actionname * Url: $modulname/$actionurl Note, that the actionname can be configured only as admin. Further a clazz specific factory will be added to the route which is later used to setup the ACL of items of the modul. :config: Configuration :action: Action item :clazz: clazz item :view_mapping: Dictionary with action items :returns: @todo """ name = clazz.__tablename__ action_name = action.name.lower() route_name = get_action_routename(clazz, action_name) route_url = "%s/%s" % (name, action.url) log.debug("Adding WEB route: %s, %s" % (route_name, route_url)) config.add_route(route_name, route_url, factory=get_resource_factory(clazz)) settings = config.registry.settings http_cache = settings.get('security.page_http_cache', '0') view_func = get_action_view(view_mapping, action_name, name) if view_func: if action_name == "delete": template = "confirm" renderer = '/default/%s.mako' % template elif action_name == "download": renderer = None else: template = action_name renderer = '/default/%s.mako' % template config.add_view(view_func, route_name=route_name, renderer=renderer, permission=action.permission or action_name, http_cache=int(http_cache)) ## Add bundle action. if action_name == "list": action_name = "bundle" route_name = "%s-%s" % (name, action_name) route_url = "%s/%s" % (name, action_name) view_func = get_action_view(view_mapping, action_name, name) log.debug("Adding route: %s, %s" % (route_name, route_url)) config.add_route(route_name, route_url, factory=get_resource_factory(clazz)) config.add_view(view_func, route_name=route_name, renderer='/default/bundle.mako', permission='list') ## Add permission action. if action_name == "read": action_name = "ownership" route_name = "%s-%s" % (name, action_name) route_url = "%s/%s/{id}" % (name, action_name) view_func = get_action_view(view_mapping, action_name, name) log.debug("Adding route: %s, %s" % (route_name, route_url)) config.add_route(route_name, route_url, factory=get_resource_factory(clazz)) config.add_view(view_func, route_name=route_name, renderer='/default/update.mako', permission='read')