def create(request, tree_context_path): logger.info(request.tree_context.path) from ftree.utils import get_content_type create_content_type_name = request.GET.get("ct") or request.POST.get("ct") if not create_content_type_name: logger.error("ct not set") raise Http404 # XXX actually this should Invalid Request error create_content_type = get_content_type(*create_content_type_name.split(".")) if not create_content_type: logger.error("invalid ct: %s" % create_content_type_name) raise Http404 # XXX this should be Invalid Request error logger.debug("creating content of type %s" % create_content_type_name) create_factory = get_component("CreateFactory", component_name=create_content_type_name) request_kwargs = _request_kwargs(request) new_object_node = create_factory(request, create_content_type, **request_kwargs) logger.debug("looking up Json Detail View for request, object: %s" % new_object_node.content_object) detail_view = get_component("JsonDetailView", (request, new_object_node.content_object)) logger.debug("returning Json Detail View %s" % detail_view) return HttpResponse(detail_view())
def create(request, tree_context_path): logger.info(request.tree_context.path) from ftree.utils import get_content_type create_content_type_name = request.GET.get('ct') or request.POST.get('ct') if not create_content_type_name: logger.error('ct not set') raise Http404 #XXX actually this should Invalid Request error create_content_type = get_content_type( *create_content_type_name.split('.')) if not create_content_type: logger.error("invalid ct: %s" % create_content_type_name) raise Http404 #XXX this should be Invalid Request error logger.debug("creating content of type %s" % create_content_type_name) create_factory = get_component('CreateFactory', component_name=create_content_type_name) request_kwargs = _request_kwargs(request) new_object_node = create_factory(request, create_content_type, **request_kwargs) logger.debug("looking up Json Detail View for request, object: %s" % new_object_node.content_object) detail_view = get_component('JsonDetailView', (request, new_object_node.content_object)) logger.debug("returning Json Detail View %s" % detail_view) return HttpResponse(detail_view())
def update(request, tree_context_path): logger.info(request.tree_context.path) # XXX error if authenticated_username not set?? content_object = request.tree_context.node.content_object update_factory = get_component("UpdateFactory", (content_object,)) request_kwargs = _request_kwargs(request) updated_node = update_factory(request, content_object, **request_kwargs) logger.debug("looking up Json Detail View for request, object: %s" % content_object) detail_view = get_component("JsonDetailView", (request, content_object)) logger.debug("returning Json Detail View %s" % detail_view) return HttpResponse(detail_view())
def update(request, tree_context_path): logger.info(request.tree_context.path) #XXX error if authenticated_username not set?? content_object = request.tree_context.node.content_object update_factory = get_component('UpdateFactory', (content_object, )) request_kwargs = _request_kwargs(request) updated_node = update_factory(request, content_object, **request_kwargs) logger.debug("looking up Json Detail View for request, object: %s" % content_object) detail_view = get_component('JsonDetailView', (request, content_object)) logger.debug("returning Json Detail View %s" % detail_view) return HttpResponse(detail_view())
def __call__(self, request, content_object, **kwargs): logger.debug('Updating object: "%s"' % str(content_object)) try: # specific update factory component hook update_factory = get_component('TreeContentUpdateFactory', (content_object,)) update_factory(request, content_object, **kwargs) except ComponentDoesNotExist: # generic content object update filtered_data = filter_and_clean_fields(request.tree_context.node.content_type, **kwargs) logger.debug("filtered_data: " + str(filtered_data) ) content_object.__dict__.update(**filtered_data) content_object.save() if hasattr(request, 'user'): username = request.user.username else: # if serving backend tree web service, no auth and no request.user username = kwargs.get('authenticated_username') #XXX do we need to recalculate slug?? # probably not as it changes node absolute_path # any cached urls to the page.. #XXX send signal updated node, do we need this, this possibly the only place # node upated, could invoke it directly #tree_content_updated.send(sender=content_object, username=username) updated_node = update_node_factory(content_object.node, username=username) #return request.tree_context.node return updated_node
def __call__(self, request, create_content_type, **kwargs): logger.debug('creating obj of type: "%s"' % str(create_content_type)) create_content_type_name = create_content_type.app_label + '.' + create_content_type.model try: create_factory = get_component('TreeContentCreateFactory', name=create_content_type_name) new_content_object = create_factory(request, create_content_type, **kwargs) except ComponentDoesNotExist: # generic content creation filtered_data = filter_and_clean_fields(create_content_type, **kwargs) model_class = create_content_type.model_class() new_content_object = model_class(**filtered_data) new_content_object.save() ## need to create tree node ## # calc node slug try: slugutil = get_component('SlugUtil', name=create_content_type_name) slug = slugutil.calc_slug(new_content_object, request, **kwargs) except ComponentDoesNotExist: # generic slug slug = SlugUtil.calc_slug(new_content_object, request, **kwargs) # node can also be ordered by seq_num seq_num = kwargs.get('seq_num') parent_node = request.tree_context.node if hasattr(request, 'user'): username = request.user.username else: # if serving backend tree web service, no auth and no request.user username = kwargs.get('authenticated_username') #XXX send signal creating node, do we need this, this possibly the only place # node created, could invoke it directly #tree_content_created.send(sender=new_content_object, parent_node=parent_node, username=username, slug=slug, seq_num=seq_num) new_node = create_node_factory(new_content_object, parent_node=parent_node, username=username, slug=slug, seq_num=seq_num) #logger.debug("object created") #XXX is signal processing asynchronos, node might not be created, # is it expensive referencing it here, do we need to return # aNSwER: yes we need to check node created to rollback if it didn't # or during node creating we need to raise some kind of exception which would # trigger rollback #return new_content_object.node return new_node
def update(request, tree_context_path, *args, **kwargs): content_object = request.tree_context.node.content_object update_view_cls = get_component('UpdateView', context=(content_object,)) logger.debug("Update View class: %s" % update_view_cls) request.view_component = update_view_cls view_func = update_view_cls.as_view(content_object=content_object, **kwargs) return view_func(request)
def delete(request, tree_context_path, *args, **kwargs): logger.info('Delete request: %s, %s' % (request.method, request.tree_context.path)) content_object = request.tree_context.node.content_object delete_view_cls = get_component('DeleteView', context=(content_object,)) logger.debug("Delete View class: %s" % delete_view_cls) request.view_component = delete_view_cls view_func = delete_view_cls.as_view(content_object=content_object, **kwargs) return view_func(request)
def __call__(self, request, content_object, **kwargs): logger.info('Deleting object: "%s"' % str(content_object)) try: # specific delete factory component hook delete_factory = get_component('TreeContentDeleteFactory', (content_object,)) delete_factory(request, content_object, **kwargs) except ComponentDoesNotExist: content_object.delete() request.tree_context.node.delete() return 1
def delete(request, tree_context_path): logger.info(request.tree_context.path) content_object = request.tree_context.node.content_object delete_factory = get_component("DeleteFactory", (content_object,)) request_kwargs = _request_kwargs(request) # XXX error if authenticated_username not set?? resp = delete_factory(request, content_object, **request_kwargs) if resp: return HttpResponse('{"status": 1}') return HttpResponse('{"status": 0}')
def delete(request, tree_context_path): logger.info(request.tree_context.path) content_object = request.tree_context.node.content_object delete_factory = get_component('DeleteFactory', (content_object, )) request_kwargs = _request_kwargs(request) #XXX error if authenticated_username not set?? resp = delete_factory(request, content_object, **request_kwargs) if resp: return HttpResponse('{"status": 1}') return HttpResponse('{"status": 0}')
def _json_list_view(request, parent_content_object=None): logger.debug("looking up Json List View for (request, parent %s)" % parent_content_object) list_view = None if parent_content_object: # hook for specific list view for parent_content_object list_view = query_component("JsonListView", (request, parent_content_object)) # generic node list json view if not list_view: list_view = get_component("JsonListView", (request,)) logger.debug("Json List View found: %s" % list_view) return list_view
def lookup(request, tree_context_path="/"): logger.info(request.tree_context.path) request_kwargs = _request_kwargs(request) node = tqm.lookup(request.tree_context.path, **request_kwargs) # node = tqm.lookup(context_path=request.tree_context.path, **request_kwargs) if node: logger.debug("looking up Json Detail View for request, object: %s" % node.content_object) view = get_component("JsonDetailView", (request, node.content_object)) logger.debug("returning Json Detail View %s" % view) return HttpResponse(view()) raise Http404
def lookup(request, tree_context_path='/'): logger.info(request.tree_context.path) request_kwargs = _request_kwargs(request) node = tqm.lookup(request.tree_context.path, **request_kwargs) #node = tqm.lookup(context_path=request.tree_context.path, **request_kwargs) if node: logger.debug("looking up Json Detail View for request, object: %s" % node.content_object) view = get_component('JsonDetailView', (request, node.content_object)) logger.debug("returning Json Detail View %s" % view) return HttpResponse(view()) raise Http404
def _json_list_view(request, parent_content_object=None): logger.debug("looking up Json List View for (request, parent %s)" % parent_content_object) list_view = None if parent_content_object: # hook for specific list view for parent_content_object list_view = query_component('JsonListView', (request, parent_content_object)) # generic node list json view if not list_view: list_view = get_component('JsonListView', (request, )) logger.debug("Json List View found: %s" % list_view) return list_view
def detail(request, tree_context_path, *args, **kwargs): context_objects = [] if request.tree_context.path == '/': detail_view_cls = SiteHomeView view_func = detail_view_cls.as_view(**kwargs) else: # not at site root, should have a content object being viewed content_object = request.tree_context.node.content_object detail_view_cls = get_component('DetailView', context=(content_object,)) view_func = detail_view_cls.as_view(content_object=content_object, **kwargs) logger.debug('Detail View class: %s' % detail_view_cls) #hacky, needed for portlets (portlet context_processors.py) request.view_component = detail_view_cls return view_func(request)
def detail(request, tree_context_path, *args, **kwargs): context_objects = [] if request.tree_context.path == '/': detail_view_cls = SiteHomeView view_func = detail_view_cls.as_view(**kwargs) else: # not at site root, should have a content object being viewed content_object = request.tree_context.node.content_object detail_view_cls = get_component('DetailView', context=(content_object, )) view_func = detail_view_cls.as_view(content_object=content_object, **kwargs) logger.debug('Detail View class: %s' % detail_view_cls) #hacky, needed for portlets (portlet context_processors.py) request.view_component = detail_view_cls return view_func(request)
def detail(request, tree_context_path): logger.info(request.tree_context.path) ####### # IS prob comment below still relevant?? ### # problem here invalid url like '/get_group' (valid is '/get_groups') not caught and # 500 happens below as node == None, this should be a 404 # if not hasattr(request, 'tree_context') or not hasattr(request.tree_context, 'node'): # fix to 500 above: # (in other words - we shouldn't get to a Detail controller for non TreeContent) if not request.tree_context.node: # probably invalid request (invalid tree context path) logger.error("invalid path - " + request.tree_context.path) raise Http404 content_obj = request.tree_context.node.content_object logger.debug("looking up Json Detail View for request, object: %s" % content_obj) detail_view = get_component("JsonDetailView", (request, content_obj)) logger.debug("returning Json Detail View %s" % detail_view) return HttpResponse(detail_view())
def detail(request, tree_context_path): logger.info(request.tree_context.path) ####### # IS prob comment below still relevant?? ### # problem here invalid url like '/get_group' (valid is '/get_groups') not caught and # 500 happens below as node == None, this should be a 404 #if not hasattr(request, 'tree_context') or not hasattr(request.tree_context, 'node'): # fix to 500 above: # (in other words - we shouldn't get to a Detail controller for non TreeContent) if not request.tree_context.node: # probably invalid request (invalid tree context path) logger.error("invalid path - " + request.tree_context.path) raise Http404 content_obj = request.tree_context.node.content_object logger.debug("looking up Json Detail View for request, object: %s" % content_obj) detail_view = get_component('JsonDetailView', (request, content_obj)) logger.debug("returning Json Detail View %s" % detail_view) return HttpResponse(detail_view())