def clean(self): asin = asin_from_url(self.cleaned_data['url']) try: self.cleaned_data['resource'] = self.amazon.item_lookup(asin) except: exc_class, exc, tb = sys.exc_info() raise forms.ValidationError('Error looking up item, "%s"' % exc) return self.cleaned_data
def add_view(self, request): form = ResourceForm(request.POST or None) if request.method == 'POST': if form.is_valid(): url = form.cleaned_data['url'] asin = asin_from_url(url) amazon_item = amazon_client.item_lookup(asin) media_type, _ = MediaType.objects.get_or_create( title=amazon_item['productgroup']) resource = Resource.objects.create( asin=asin, title=amazon_item['title'], author=amazon_item['author'], media_type=media_type, pub_date=amazon_item['publicationdate'], pages=amazon_item['numberofpages'] or 0, ) img_url = amazon_item['image'] if img_url: img_name, extension = img_url.rsplit('.', 1) # download the image and store it in memory image_data, _ = urllib.urlretrieve(img_url) resource.cover_image.save( '%s.%s' % (slugify(resource.title)[:30], extension), File(open(image_data)) ) # resize the newly created image image_resize( resource.cover_image.path, resource.cover_image.path, THUMB_WIDTH, THUMB_HEIGHT) resource.save() return HttpResponseRedirect(reverse("admin:amazon_resources_resource_change", args=[resource.pk])) return render_to_response('admin/amazon_resources/add_amazon_resource.html', {'title': 'Add a resource', 'form': form}, context_instance=RequestContext(request))
def clean_url(self): url = self.cleaned_data.get('url') if asin_from_url(url): return url else: raise forms.ValidationError('Could not determine ASIN from url')