예제 #1
0
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())
예제 #2
0
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())
예제 #3
0
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())
예제 #4
0
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())
예제 #5
0
    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
예제 #6
0
    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
예제 #7
0
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)
예제 #8
0
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)
예제 #9
0
    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
예제 #10
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}')
예제 #11
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}')
예제 #12
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
예제 #13
0
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
예제 #14
0
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
예제 #15
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
예제 #16
0
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)
예제 #17
0
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)
예제 #18
0
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())
예제 #19
0
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())