def SaveAndPackImage(response, data, recipe=None): img = Image() img.data = db.Blob(data) if recipe != None: img.recipe = recipe img.put() response.headers["Content-Type"] = "text/javascript" response.out.write(simplejson.dumps(img.to_dict()))
def post(self, album_id): """POST handler for a gallery image. URL pattern: /albums/${album_id}/images POST data must be of type multipart/form and contain image as 'file'. POST data must also contain image metadata: 'name'. Image filename must include an extension. Returns 201 CREATED with JSON data structure describing new image. Returns Content-type: application/json. Also returns Location header pointing to API URL for image details. Include 'wrapjson' parameter in POST to wrap returns JSON in a <textarea>. This also changes the returned Content-type to text/html. If album doesn't exist, returns 404 NOT FOUND. If request is poorly formatted returns 400 BAD REQUEST. Returns 401 UNAUTHORIZED to all calls if authorization fails. """ q = Album.all().filter('album_id =', album_id) album = q.get() if not album: return self.error(404) try: data = dict(((str(k), v) for k, v in self.request.POST.items())) if 'file' in data: data['extension'] = data['file'].filename.split('.')[-1].lower() if data['extension'] == data['file'].filename: data['extension'] = '' else: data['extension'] = '.' + data['extension'] data['image_data'] = data['file'].file.read() image = Image(image_id=config.IMAGE_ID_GENERATOR(), album=album, **data) except: data = {} self.error(400) else: if not config.DEMO_MODE: image.put() data = image.to_dict() self.response.headers['Location'] = data['url'] self.response.set_status(201) write_json(self, data, wrapjson='wrapjson' in self.request.POST)