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)
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))
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))
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))
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]
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.')
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"))
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})
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)
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]
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"))
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"))
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"))
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"))
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)
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"))
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"))
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})
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"))