Esempio n. 1
0
 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)
Esempio n. 2
0
    def _get(self):
        upload_url = blobstore.create_upload_url('/image/submit')
        page = self.request.get("page")
        try:
            page = int(page) - 1
        except:
            page = 0

        query = ImageAsset.all().order('-created_at')
        images = query.fetch(1000)
        if (self.PAGESIZE * page)/1000 > 0:
            cursor_iterations = (self.PAGESIZE * page)/1000
            for i in range(0, cursor_iterations):
                logging.info("Iterating though images %d/%d" % (i,cursor_iterations))
                cursor = query.cursor()
                query.with_cursor()
                images = query.fetch(1000)
        paginator = ObjectPaginator(images, self.PAGESIZE)
        #if page>=paginator.pages:
        #    page = paginator.pages - 1
        #if page < 0:
        #    page = 0
        self.template_values = {
              "images" : paginator.get_page(page),
              "pages" : range(page+1,page+paginator.pages+1),
              "page" : page+1,
              "upload_url" : upload_url
        }
        self.page_display(self,"templates/gallery.html")
Esempio n. 3
0
 def get(self):
     query = ImageAsset.all(keys_only=True)
     i = 0
     while True:
         result = query.fetch(1000)
         i = i + len(result)
         if len(result) < 1000:
             break
         cursor = query.cursor()
         query.with_cursor(cursor)
     self.response.out.write(simplejson.dumps({ 'count': i }))
Esempio n. 4
0
 def get(self):
     upload_url = blobstore.create_upload_url('/image/submit')
     page = self.request.get("page")
     try:
         page = int(page) - 1
     except:
         page = 0
     images = ImageAsset.all().order('-created_at')
     paginator = ObjectPaginator(images, self.PAGESIZE)
     if page>=paginator.pages:
         page = paginator.pages - 1
     if page < 0:
         page = 0
     self.template_values = {
           "images" : paginator.get_page(page),
           "pages" : range(1,paginator.pages+1),
           "page" : page+1,
           "upload_url" : upload_url
     }
     self.page_display(self,"templates/gallery.html")
Esempio n. 5
0
# /opt/google_appengine/remote_api_shell.py -s image-hulk-stage.appspot.com image-hulk-stage
import sys
sys.path.append('/image_hulk')
from bb.hulk.models import ImageAsset
from google.appengine.ext import blobstore
query = ImageAsset.all().order('created_at')
images = query.fetch(1000)
while len(images) > 0:
    for image in images:
        print "deleting image %s" % image.handle
        blobstore.delete(image.blob_key.key())
        image.delete()
    cursor = query.cursor()
    query.with_cursor()
    images = query.fetch(1000)