示例#1
0
 def create(self, request):
     form = self.model(request.POST)
     if form.is_valid():
         model = form.save()
         if hasattr(model, 'save'):
             # This is a model form so we save it and return the model.
             model.save()
             return encoder.encode(model)
         else:
             return model  # Assume this is a dict to encode.
     else:
         return encoder.encode(form.errors)
示例#2
0
 def create(self, request):
     form = self.model(request.POST)
     if form.is_valid():
         model = form.save()
         if hasattr(model, 'save'):
             # This is a model form so we save it and return the model.
             model.save()
             return encoder.encode(model)
         else:
             return model  # Assume this is a dict to encode.
     else:
         return encoder.encode(form.errors)
示例#3
0
 def test_encode(self):
     from ajax.encoders import encoder
     widget = Widget.objects.get(pk=1)
     self.assertEquals(widget.title, 'Iorem lipsum color bit amit')
     encoded = encoder.encode(widget)
     for k in ('title', 'active', 'description'):
         self.assertEquals(encoded[k], getattr(widget, k))
     widgets = Widget.objects.all()
     all_encoded = encoder.encode(widgets)
     for encoded in all_encoded:
         widget = Widget.objects.get(pk=encoded['pk'])
         for k in ('title', 'active', 'description'):
             self.assertEquals(encoded[k], getattr(widget, k))
示例#4
0
 def test_encode(self):
     from ajax.encoders import encoder
     widget = Widget.objects.get(pk=1)
     self.assertEquals(widget.title,'Iorem lipsum color bit amit')
     encoded = encoder.encode(widget)
     for k in ('title','active','description'):
         self.assertEquals(encoded[k],getattr(widget,k))
     widgets = Widget.objects.all()
     all_encoded = encoder.encode(widgets)
     for encoded in all_encoded:
         widget = Widget.objects.get(pk=encoded['pk'])
         for k in ('title','active','description'):
             self.assertEquals(encoded[k],getattr(widget,k))
示例#5
0
    def test_encode(self):
        from ajax.encoders import encoder

        widget = Widget.objects.get(pk=1)
        self.assertEquals(widget.title, "Iorem lipsum color bit amit")
        encoded = encoder.encode(widget)
        for k in ("title", "active", "description"):
            self.assertEquals(encoded[k], getattr(widget, k))
        widgets = Widget.objects.all()
        all_encoded = encoder.encode(widgets)
        for encoded in all_encoded:
            widget = Widget.objects.get(pk=encoded["pk"])
            for k in ("title", "active", "description"):
                self.assertEquals(encoded[k], getattr(widget, k))
示例#6
0
    def list(self, request):
        """
        List objects of a model. By default will show page 1 with 20 objects on it. 
        
        **Usage**::
        
            params = {"items_per_page":10,"page":2} //all params are optional
            $.post("/ajax/{app}/{model}/list.json"),params)
        
        """

        max_items_per_page = getattr(
            self, 'max_per_page', getattr(settings, 'AJAX_MAX_PER_PAGE', 100))
        requested_items_per_page = request.POST.get("items_per_page", 20)
        items_per_page = min(max_items_per_page, requested_items_per_page)
        current_page = request.POST.get("current_page", 1)

        if hasattr(self, 'get_queryset'):
            objects = self.get_queryset(request.user)
        else:
            objects = self.model.objects.all()

        paginator = Paginator(objects, items_per_page)

        try:
            page = paginator.page(current_page)
        except PageNotAnInteger:
            # If page is not an integer, deliver first page.
            page = paginator.page(1)
        except EmptyPage:
            # If page is out of range (e.g. 9999), return empty list.
            page = EmptyPageResult()

        return [encoder.encode(record) for record in page.object_list]
示例#7
0
def search(request):
    if request.method == 'POST' and len(request.POST):
        query = request.POST
        print query
        print query['lat']
        #TODO: fix the JSON in the map.html file so it doesn't wrap each value in a list...
        objs = Donation.objects.filter(
                                       time_window_end__gte=query['time_window_start'],
                                       time_window_start__lte=query['time_window_end'],
                                       location__distance_lte=(Point(float(query['lat']), float(query['lon'])), Distance(mi=query['distance'])),
                                       )

        if query['food_type']:
            objs = objs.filter(food_type__in=query['food_type'].strip().split())

        # careful here, don't want to use exclude as a donation may have both
        # options.  Note that one of these must be true!
        if not query['pickup'] or not query['dropoff']:
            objs = objs.filter(dropoff=True) if not query['pickup'] else objs.filter(pickup=True)

        if query['keywords']:
            kw_objs = Donation.objects.none()
            for kw in query['keywords'].split():
                kw_objs |= objs.filter(short_description__icontains=kw)
                kw_objs |= objs.filter(long_description__icontains=kw)
            objs = kw_objs

        return encoder.encode(objs)

    else:
        raise AJAXError(5, 'Nothing to echo back.')
示例#8
0
    def update(self, request):
        record = self._get_record()
        modified = self._get_record()

        update_record = False
        for key, val in six.iteritems(self._extract_data(request)):

            # Only setattr and save the model when a change has happened.
            if val != getattr(record, key):
                setattr(modified, key, val)
                update_record = True
 
        if self.can_update(request.user, record, modified=modified):
 
            if update_record:
                self._save(modified)

            try:
                tags = self._extract_tags(request)
                if tags:
                    modified.tags.set(*tags)
                else:
                    # If tags were in the request and set to nothing, we will
                    # clear them all out.
                    modified.tags.clear()
            except KeyError:
                pass

            ajax_updated.send(sender=record.__class__, instance=record)
            return encoder.encode(modified)
        else:
            raise AJAXError(403, _("Access to endpoint is forbidden"))
示例#9
0
    def list(self, request):
        """
        List objects of a model. By default will show page 1 with 20 objects on it.

        **Usage**::

            params = {"items_per_page":10,"page":2} //all params are optional
            $.post("/ajax/{app}/{model}/list.json"),params)

        """

        max_items_per_page = getattr(self, 'max_per_page',
                                      getattr(settings, 'AJAX_MAX_PER_PAGE', 100))
        requested_items_per_page = request.POST.get("items_per_page", 20)
        items_per_page = min(max_items_per_page, requested_items_per_page)
        current_page = request.POST.get("current_page", 1)

        if not self.can_list(request.user):
            raise AJAXError(403, _("Access to this endpoint is forbidden"))

        objects = self.get_queryset(request)

        paginator = Paginator(objects, items_per_page)

        try:
            page = paginator.page(current_page)
        except PageNotAnInteger:
            # If page is not an integer, deliver first page.
            page = paginator.page(1)
        except EmptyPage:
            # If page is out of range (e.g. 9999), return empty list.
            page = EmptyPageResult()

        data = [encoder.encode(record) for record in page.object_list]
        return EnvelopedResponse(data=data, metadata={'total': paginator.count})
示例#10
0
    def list(self,request):
        """
        List objects of a model. By default will show page 1 with 20 objects on it. 
        
        **Usage**::
        
            params = {"items_per_page":10,"page":2} //all params are optional
            $.post("/ajax/{app}/{model}/list.json"),params)
        
        """

        items_per_page = request.POST.get("items_per_page",20)
        current_page = request.POST.get("current_page",1)
        objects = self.model.objects.all()
        
        paginator = Paginator(objects, items_per_page)

        try:
            page = paginator.page(current_page)
        except PageNotAnInteger:
            # If page is not an integer, deliver first page.
            page = paginator.page(1)
        except EmptyPage:
            # If page is out of range (e.g. 9999), deliver last page of results.
            page = paginator.page(paginator.num_pages)
        
        return [encoder.encode(record) for record in page.object_list]
        return simplejson.loads(response)
示例#11
0
    def list(self,request):
        """
        List objects of a model. By default will show page 1 with 20 objects on it. 
        
        **Usage**::
        
            params = {"items_per_page":10,"page":2} //all params are optional
            $.post("/ajax/{app}/{model}/list.json"),params)
        
        """

        max_items_per_page = getattr(self, 'max_per_page',
                                      getattr(settings, 'AJAX_MAX_PER_PAGE', 100))
        requested_items_per_page = request.POST.get("items_per_page", 20)
        items_per_page = min(max_items_per_page, requested_items_per_page)
        current_page = request.POST.get("current_page", 1)

        if hasattr(self, 'get_queryset'):
            objects = self.get_queryset(request.user)
        else:
            objects = self.model.objects.all()
        
        paginator = Paginator(objects, items_per_page)

        try:
            page = paginator.page(current_page)
        except PageNotAnInteger:
            # If page is not an integer, deliver first page.
            page = paginator.page(1)
        except EmptyPage:
            # If page is out of range (e.g. 9999), return empty list.
            page = EmptyPageResult()
        
        return [encoder.encode(record) for record in page.object_list]        
示例#12
0
    def update(self, request):
        record = self._get_record()
        modified = self._get_record()

        update_record = False
        for key, val in six.iteritems(self._extract_data(request)):

            # Only setattr and save the model when a change has happened.
            if val != getattr(record, key):
                setattr(modified, key, val)
                update_record = True

        if self.can_update(request.user, record, modified=modified):

            if update_record:
                self._save(modified)

            try:
                tags = self._extract_tags(request)
                if tags:
                    modified.tags.set(*tags)
                else:
                    # If tags were in the request and set to nothing, we will
                    # clear them all out.
                    modified.tags.clear()
            except KeyError:
                pass

            ajax_updated.send(sender=record.__class__, instance=record)
            return encoder.encode(modified)
        else:
            raise AJAXError(403, _("Access to endpoint is forbidden"))
示例#13
0
 def create(self, request):
     record = self.model(**self._extract_data(request))
     if self.can_create(request.user, record):
         record = self._save(record)
         self._set_tags(request, record)
         return encoder.encode(record)
     else:
         raise AJAXError(403, _("Access to endpoint is forbidden"))
示例#14
0
 def create(self, request):
     record = self.model(**self._extract_data(request))
     if self.can_create(request.user, record):
         record = self._save(record)
         self._set_tags(request, record)
         return encoder.encode(record)
     else:
         raise AJAXError(403, _("Access to endpoint is forbidden"))
示例#15
0
    def update(self, request):
        record = self._get_record()
        if self.can_update(request.user, record):
            for key, val in self._extract_data(request).iteritems():
                setattr(record, key, val)

            return encoder.encode(self._save(record))
        else:
            raise AJAXError(403, _("Access to endpoint is forbidden"))
示例#16
0
 def update(self, request):
     record = self._get_record()
     if self.can_update(request.user, record):
         for key, val in self._extract_data(request).iteritems():
             setattr(record, key, val)
         if 'tags' in request.POST:
             self._set_tags(request, record)
         return encoder.encode(self._save(record))
     else:
         raise AJAXError(403, _("Access to endpoint is forbidden"))
示例#17
0
 def create(self, request):
     record = self.model(**self._extract_data(request))
     if self.can_create(request.user, record):
         record = self._save(record)
         try:
             tags = self._extract_tags(request)
             record.tags.set(*tags)
         except KeyError:
             pass
         return encoder.encode(record)
     else:
         raise AJAXError(403, _("Access to endpoint is forbidden"))
示例#18
0
 def create(self, request):
     record = self.model(**self._extract_data(request))
     if self.can_create(request.user, record):
         record = self._save(record)
         try:
             tags = self._extract_tags(request)
             record.tags.set(*tags)
         except KeyError:
             pass
         return encoder.encode(record)
     else:
         raise AJAXError(403, _("Access to endpoint is forbidden"))
示例#19
0
    def tags(self, request):
        cmd = self.options.get('taggit_command', None)
        if not cmd:
            raise AJAXError(400, _("Invalid or missing taggit command."))

        record = self._get_record()
        if cmd == 'similar':
            result = record.tags.similar_objects()
        else:
            tags = self._extract_tags(request)
            getattr(record.tags, cmd)(*tags)
            result = record.tags.all()

        return encoder.encode(result)
示例#20
0
    def tags(self, request):
        cmd = self.options.get('taggit_command', None)
        if not cmd:
            raise AJAXError(400, _("Invalid or missing taggit command."))

        record = self._get_record()
        if cmd == 'similar':
            result = record.tags.similar_objects()
        else:
            tags = self._extract_tags(request)
            getattr(record.tags, cmd)(*tags)
            result = record.tags.all()

        return encoder.encode(result)
示例#21
0
    def update(self, request):
        record = self._get_record()
        if self.can_update(request.user, record):
            for key, val in self._extract_data(request).iteritems():
                setattr(record, key, val)

            self._save(record)

            try:
                tags = self._extract_tags(request)
                if tags:
                    record.tags.set(*tags)
                else:
                    # If tags were in the request and set to nothing, we will
                    # clear them all out.
                    record.tags.clear()
            except KeyError:
                pass

            return encoder.encode(record)
        else:
            raise AJAXError(403, _("Access to endpoint is forbidden"))
示例#22
0
    def update(self, request):
        record = self._get_record()
        if self.can_update(request.user, record):
            for key, val in self._extract_data(request).iteritems():
                setattr(record, key, val)

            self._save(record)

            try:
                tags = self._extract_tags(request)
                if tags:
                    record.tags.set(*tags)
                else:
                    # If tags were in the request and set to nothing, we will
                    # clear them all out.
                    record.tags.clear()
            except KeyError:
                pass

            return encoder.encode(record)
        else:
            raise AJAXError(403, _("Access to endpoint is forbidden"))
示例#23
0
    def update(self, request):
        record = self._get_record()
        modified = self._get_record()
        for key, val in list(self._extract_data(request).items()):
            setattr(modified, key, val)
        if self.can_update(request.user, record, modified=modified):

            self._save(modified)

            try:
                tags = self._extract_tags(request)
                if tags:
                    modified.tags.set(*tags)
                else:
                    # If tags were in the request and set to nothing, we will
                    # clear them all out.
                    modified.tags.clear()
            except KeyError:
                pass

            ajax_updated.send(sender=record.__class__, instance=record)
            return encoder.encode(modified)
        else:
            raise AJAXError(403, _("Access to endpoint is forbidden"))
示例#24
0
    def list(self, request):
        """
        List objects of a model. By default will show page 1 with 20 objects on it. 
        
        **Usage**::
        
            params = {"items_per_page":10,"page":2} //all params are optional
            $.post("/ajax/{app}/{model}/list.json"),params)
        
        """

        max_items_per_page = getattr(
            self, 'max_per_page', getattr(settings, 'AJAX_MAX_PER_PAGE', 100))
        requested_items_per_page = request.POST.get("items_per_page", 20)
        items_per_page = min(max_items_per_page, requested_items_per_page)
        current_page = request.POST.get("current_page", 1)

        if not self.can_list(request.user):
            raise AJAXError(403, _("Access to this endpoint is forbidden"))

        objects = self.get_queryset(request)

        paginator = Paginator(objects, items_per_page)

        try:
            page = paginator.page(current_page)
        except PageNotAnInteger:
            # If page is not an integer, deliver first page.
            page = paginator.page(1)
        except EmptyPage:
            # If page is out of range (e.g. 9999), return empty list.
            page = EmptyPageResult()

        data = [encoder.encode(record) for record in page.object_list]
        return EnvelopedResponse(data=data,
                                 metadata={'total': paginator.count})
示例#25
0
 def get(self, request):
     record = self._get_record()
     if self.can_get(request.user, record):
         return encoder.encode(record)
     else:
         raise AJAXError(403, _("Access to endpoint is forbidden"))
示例#26
0
 def get(self, request):
     record = self._get_record()
     if self.can_get(request.user, record):
         return encoder.encode(record)
     else:
         raise AJAXError(403, _("Access to endpoint is forbidden"))