コード例 #1
0
ファイル: handlers.py プロジェクト: spidaman/image_hulk
 def post(self):
     """
     Note: BlobstoreUploadHandler POSTs must return a redirect
     """
     logging.info("starting post")
     upload_files = self.get_uploads()
     handle = self.request.get("handle")
     signature = self.request.get("signature")
     logging.info("Handling post for handle=%s signature=%s" % (handle, signature))
     try:
         if len(upload_files) > 0:
             blob_info = upload_files[0]
             data = blobstore.fetch_data(blob_info.key(), 0, blob_info.size) 
             imgtemp = images.Image(image_data=data)
             width = imgtemp.width
             height = imgtemp.height
             logging.info("Got upload %s => handle=%s size=%dx%d" % (blob_info.__dict__, handle, width, height))
             
             if is_alphanumeric(handle) and \
                 is_alphanumeric(signature) and \
                 is_signature_valid(handle, signature):
                 image = find_image_by_handle(handle)
                 api_response = "/image/info?handle=%s&signature=%s" % (handle, signature)
                 if image is not None:
                     # TODO: add an option to clobber an existing image
                     response = { 'handle': image.handle, 'created_at': image.created_at.isoformat(), 'status': image.status }
                     logging.info("Image already exists: %s" % response)
                     self.redirect(api_response)
                     return
                 image = ImageAsset(handle=handle, status="done", width=width, height=height, blob_key=blob_info.key())
                 image.put()
                 if (self.request.get("return")):
                     # this was submitted by the Gallery form
                     self.redirect(self.request.get("return"))
                 else:
                     # this was submitted by an API client
                     logging.info("Created image: %s" % image)
                     # TODO: callback to the BC API to update that the image submission completed
                     self.redirect(api_response)
                 return
             else:
                 logging.error("Invalid params: handle=%s signature=%s" % (handle, signature))
         else:
             media = self.request.get("media")
             logging.error("Nothing uploaded? %s" % upload_files)
             logging.error("media = %s" % media)
             logging.error("Request data: %s" % self.request.__dict__)
     #except blobstore.BlobFetchSizeTooLargeError, e:
     #    self.redirect("/image/error?handle=%s&signature=%s&error=%s" % (handle, signature, urllib.quote(str(e)))
     #    return
     #except DeadlineExceededError, e:
     #    self.redirect("/image/error?handle=%s&signature=%s&error=%s" % (handle, signature, urllib.quote(str(e)))
     #    return
     except:
         logging.error("Request data: %s" % self.request.__dict__)
         logging.error("Image upload failed: ", exc_info=1)
     # TODO (maybe): redirect to an error handler
     self.error(500)
コード例 #2
0
ファイル: handlers.py プロジェクト: spidaman/image_hulk
 def post(self):
     status = self.request.get("status")
     handle = self.request.get("handle")
     signature = self.request.get("signature")
     check_param(self.response, "handle", handle)
     check_param(self.response, "signature", signature)
     check_signature(self.response, handle, signature)
     if status:
         image = find_image_by_handle(handle)
         image.put()
コード例 #3
0
ファイル: handlers.py プロジェクト: spidaman/image_hulk
 def get(self):
     handle = self.request.get("handle")
     signature = self.request.get("signature")
     check_param(self.response, "handle", handle)
     check_param(self.response, "signature", signature)
     check_signature(self.response, handle, signature)
     image = find_image_by_handle(handle)
     self.response.headers['Content-Type'] = 'application/json'
     response = { 'handle': image.handle, 'created_at': image.created_at.isoformat(), 'status': image.status }
     self.response.out.write(simplejson.dumps(response))
コード例 #4
0
ファイル: handlers.py プロジェクト: spidaman/image_hulk
 def get(self):
     handle = self.request.get("handle")
     signature = self.request.get("signature")
     check_param(self.response, "handle", handle)
     check_param(self.response, "signature", signature)
     check_signature(self.response, handle, signature)
     image = find_image_by_handle(handle)
     if image:
         blobstore.delete(image.blob_key.key())
         response = { 'handle': handle, 'created_at': image.created_at.isoformat(), 'status': 'deleted' }
         image.delete()
     else:
         response = { 'handle': handle, 'status': 'not found' }
     self.response.headers['Content-Type'] = 'application/json'
     self.response.out.write(simplejson.dumps(response))
コード例 #5
0
ファイル: handlers.py プロジェクト: spidaman/image_hulk
 def get(self, handle, size):
     image = find_image_by_handle(handle)
     inflate = self.request.get("inflate")
     direct = self.request.get("direct")
     logging.info("Got image %s for handle %s" % (image, handle))
     if image:
         try:
             self.response.headers["Cache-Control"] = 'public,max-age=%d' % int(60*24*60*60)
             self.response.headers["Expires"] = (datetime.datetime.today()+datetime.timedelta(days=60)).strftime('%a, %d %b %Y %H:%M:%S GMT')
             self.response.headers["X-Image-Dimensions"] = "%sx%s" % (image.width, image.height)
             if size == 'full':
                 image_url = images.get_serving_url(str(image.blob_key.key()))
                 if direct == '1':
                     return self.direct(image_url)
                 self.redirect(image_url, permanent=True)
                 return
             else:
                 requested_width, requested_height = parse_dimension_string(size)
                 if requested_width == requested_height:
                     crop = True
                 else:
                     crop = False
                 image_size = image.width if image.width > image.height else image.height
                 requested_size = requested_width if requested_width > requested_height else requested_height
                 if inflate != '1' and requested_size > image_size:
                     serving_size = image_size
                 else:
                     serving_size = requested_size
                 logging.info("Serving %s scaled to %s with crop=%s" % (handle, serving_size, crop))
                 image_url = images.get_serving_url(str(image.blob_key.key()), size=serving_size, crop=crop)
                 if direct == '1':
                     return self.direct(image_url)
                 self.redirect(image_url, permanent=True)
                 return
         except images.BadImageError, images.NotImageError:
             logging.error("Image request failed: ", exc_info=1)
             self.error(500)