[google-appengine] Re: Retrieving image from a Blob

2010-10-06 Thread Raymond
Dear Both,

Thanks a lot for your time.
I have been away for a couple of weeks and did not have the time to
follow up until today.
I'll have a serious look at your info and will let you know if I
manage to crack this nut.

Thanks again

-R

On Sep 15, 2:29 am, John McLaughlin johnmclaugh...@massanimation.com
wrote:
 @Robert.  Right you are.  I checked the docs and db.get is a magic get
 anything function.  Sorry for the noise.

 So I'm going for door #2 now.  In ServePhoto photo must be the
 correctly returned key.  Otherwise accessing photo.photo would give
 an error.  So photo.photo must truly be a false value.  This means to
 me that although photo is a valid object, the photo.photo property
 never got set properly.  This takes us back to UploadPhoto.  It's
 unlikely that photo.put() failed.   And it's likely that db.Blob
 created a valid db.Blob object.  However accessing photo.photo
 doesn't return the db.Blob object, but rather the underlying data that
 came into it.  Therefore I think your original hunch that the incoming
 data for db.Blob is an empty string is correct.  I've struggled with
 multi-part posts so I'm not 100% sure about the html.  One thing that
 looks suspicious is the hard coding of the hostname:port in the post
 action.  Are you sure you don't want simply /uploadphoto?   That
 could send the uploads to the wrong place, for example different ports
 use different datastores on the Dev Server.

 On Sep 14, 9:17 am, Robert Kluin robert.kl...@gmail.com wrote:



  db.get() will grab an entity of _any_ kind.  Model.get checks that the
  key is for the correct kind of entity before fetching it.  Either will
  work.  When I use db.get I usually include a check to make sure the
  keys are the correct kind.

  The key he posted in his initial thread is a Photo.

  Robert

  On Tue, Sep 14, 2010 at 11:34, John McLaughlin

  johnmclaugh...@massanimation.com wrote:
   The one thing that looked off to me is that the line in ServePhoto

       photo = db.get(self.request.get(photo_id))

   might want to be

       photo = Photo.get(self.request.get(photo_id))

   I think db.get is a datastore method, not an inherited method from
   db.Model

   On Sep 13, 8:09 pm, Robert Kluin robert.kl...@gmail.com wrote:
   I glanced over your code, nothing really major jumped out at me.  If
   you are not getting an exception in ServePhoto then the model is
   clearly getting created and successfully fetched.

   So, here are my first thoughts:
   Have you tried logging some debug info in the UploadPhoto and
   ServePhoto handlers?    Specifically are you sure data is actually in
   the photo property and it is not just an empty string or something?
   Maybe you could try logging len(photo.photo) right before saving it,
   then again right after fetching it.

   What happens when you remove the if and simply return photo.photo?

   Robert

   class ServePhoto (webapp.RequestHandler):
      def get(self):
        photo = db.get(self.request.get(photo_id))
        if photo.photo:
            self.response.headers['Content-Type'] = image/jpg
            self.response.out.write(photo.photo)
        else:
            self.error(404)

   --
   Robert Kluin
   Ezox Systems, LLC

   On Sun, Sep 12, 2010 at 22:03, Raymond

   raymond.othenin-gir...@raydropin.com wrote:
Hi All,

I have been trying to understand how to upload and download images
from to a Blobstore and have hit a wall.
I have essentially made a modified version of the Guestbook example
provided by google and modified it to suit my needs, I have tested the
guestbook app as is and got it working, somehow somewhere I am making
a simple mistake that frustrate every attempt at getting it working in
my own code.
I have stripped down my code to the essential in the hope of
understanding what is wrong, but I am still stuck.

What am I attempting to do ?
Upload in a blobstore an image and display it in a web page.

What is my code ?

1) My upload form served from a static page

...
form action=http://192.168.0.196:8083/uploadphoto;
enctype=multipart/form-data method=post
       divlabelAttempt at uploading a picture using a 
form/label/
deiv
       divinput type=file name=photo //div
       divinput type=submit value=Upload Photo //div
/form
...

2) My db model :

class Photo(db.Model):
       photo = db.BlobProperty()
       date = db.DateTimeProperty(auto_now_add=True)

3) The code uploading the photo and saving it in the blobstore

class UploadPhoto(webapp.RequestHandler):
       def post(self):
               photo = Photo()
               img = self.request.get('photo')
               photo.photo = db.Blob(img)
               photo.put()

4) The code creating the web page displaying the images :

class PhotoPage(webapp.RequestHandler):
       def get(self):
               

[google-appengine] Re: Retrieving image from a Blob

2010-09-14 Thread John McLaughlin
The one thing that looked off to me is that the line in ServePhoto

 photo = db.get(self.request.get(photo_id))

might want to be

 photo = Photo.get(self.request.get(photo_id))

I think db.get is a datastore method, not an inherited method from
db.Model


On Sep 13, 8:09 pm, Robert Kluin robert.kl...@gmail.com wrote:
 I glanced over your code, nothing really major jumped out at me.  If
 you are not getting an exception in ServePhoto then the model is
 clearly getting created and successfully fetched.

 So, here are my first thoughts:
 Have you tried logging some debug info in the UploadPhoto and
 ServePhoto handlers?    Specifically are you sure data is actually in
 the photo property and it is not just an empty string or something?
 Maybe you could try logging len(photo.photo) right before saving it,
 then again right after fetching it.

 What happens when you remove the if and simply return photo.photo?

 Robert

 class ServePhoto (webapp.RequestHandler):
    def get(self):
      photo = db.get(self.request.get(photo_id))
      if photo.photo:
          self.response.headers['Content-Type'] = image/jpg
          self.response.out.write(photo.photo)
      else:
          self.error(404)

 --
 Robert Kluin
 Ezox Systems, LLC

 On Sun, Sep 12, 2010 at 22:03, Raymond



 raymond.othenin-gir...@raydropin.com wrote:
  Hi All,

  I have been trying to understand how to upload and download images
  from to a Blobstore and have hit a wall.
  I have essentially made a modified version of the Guestbook example
  provided by google and modified it to suit my needs, I have tested the
  guestbook app as is and got it working, somehow somewhere I am making
  a simple mistake that frustrate every attempt at getting it working in
  my own code.
  I have stripped down my code to the essential in the hope of
  understanding what is wrong, but I am still stuck.

  What am I attempting to do ?
  Upload in a blobstore an image and display it in a web page.

  What is my code ?

  1) My upload form served from a static page

  ...
  form action=http://192.168.0.196:8083/uploadphoto;
  enctype=multipart/form-data method=post
         divlabelAttempt at uploading a picture using a form/label/
  deiv
         divinput type=file name=photo //div
         divinput type=submit value=Upload Photo //div
  /form
  ...

  2) My db model :

  class Photo(db.Model):
         photo = db.BlobProperty()
         date = db.DateTimeProperty(auto_now_add=True)

  3) The code uploading the photo and saving it in the blobstore

  class UploadPhoto(webapp.RequestHandler):
         def post(self):
                 photo = Photo()
                 img = self.request.get('photo')
                 photo.photo = db.Blob(img)
                 photo.put()

  4) The code creating the web page displaying the images :

  class PhotoPage(webapp.RequestHandler):
         def get(self):
                 self.response.out.write('htmlpre')
                 self.response.out.write('h1DateTime  Photo/h1')
                 photos = db.GqlQuery(SELECT * FROM Photo ORDER BY date DESC 
  LIMIT
  10)
                 for photo in photos:
                         self.response.out.write('p%s  ' % photo.date)
                         self.response.out.write('img 
  src=servephoto?photo_id=%s //p'
  % photo.key())
                 self.response.out.write('/pre/body/html')

  5) The code serving the images :

  class ServePhoto (webapp.RequestHandler):
     def get(self):
       photo = db.get(self.request.get(photo_id))
       if photo.photo:
           self.response.headers['Content-Type'] = image/jpg
           self.response.out.write(photo.photo)
       else:
           self.error(404)

  Everything seem to work until this last stage, I can select an image
  in my form, upload it, Something is written in Binary in the
  Blobstore.
  When I visit the page supposed to display the image I see all info but
  a broken image icon.
  I checked the source code and the HTML seem to be just fine, here it
  is with one record in the blobstore, I get the blob key which mena
  that there is a record with some binary stuff in it.

  htmlpreh1DateTime        Photo/h1p2010-09-13 00:31:14.477698 img
  src=servephoto?photo_id=agt0ZXN0cmF5c3Bvc3ILCxIFUGhvdG8YWww //p/
  pre/body/html

  I also know that the ServePhoto class is called and executed but it if
  photo.photo always return false and execute self-eror(404).
  I tried replacing this with a different error code and it always
  display the error code so I am sure the if statement get a false.

  My questions is, why would the if statement get a false if there is
  effectively an image in the blobstore (Proved by the fact that I can
  retrieve it's key) ?

  I am sorry for the long post, and hope I am not too confusing.

  Thanks for any hint that would get me on the right way and forgive me
  if the answer is obvious, I probably need new eyes.

  Raymond

  --
  You received this message because you are subscribed to 

Re: [google-appengine] Re: Retrieving image from a Blob

2010-09-14 Thread Robert Kluin
db.get() will grab an entity of _any_ kind.  Model.get checks that the
key is for the correct kind of entity before fetching it.  Either will
work.  When I use db.get I usually include a check to make sure the
keys are the correct kind.

The key he posted in his initial thread is a Photo.

Robert






On Tue, Sep 14, 2010 at 11:34, John McLaughlin
johnmclaugh...@massanimation.com wrote:
 The one thing that looked off to me is that the line in ServePhoto

     photo = db.get(self.request.get(photo_id))

 might want to be

     photo = Photo.get(self.request.get(photo_id))

 I think db.get is a datastore method, not an inherited method from
 db.Model


 On Sep 13, 8:09 pm, Robert Kluin robert.kl...@gmail.com wrote:
 I glanced over your code, nothing really major jumped out at me.  If
 you are not getting an exception in ServePhoto then the model is
 clearly getting created and successfully fetched.

 So, here are my first thoughts:
 Have you tried logging some debug info in the UploadPhoto and
 ServePhoto handlers?    Specifically are you sure data is actually in
 the photo property and it is not just an empty string or something?
 Maybe you could try logging len(photo.photo) right before saving it,
 then again right after fetching it.

 What happens when you remove the if and simply return photo.photo?

 Robert

 class ServePhoto (webapp.RequestHandler):
    def get(self):
      photo = db.get(self.request.get(photo_id))
      if photo.photo:
          self.response.headers['Content-Type'] = image/jpg
          self.response.out.write(photo.photo)
      else:
          self.error(404)

 --
 Robert Kluin
 Ezox Systems, LLC

 On Sun, Sep 12, 2010 at 22:03, Raymond



 raymond.othenin-gir...@raydropin.com wrote:
  Hi All,

  I have been trying to understand how to upload and download images
  from to a Blobstore and have hit a wall.
  I have essentially made a modified version of the Guestbook example
  provided by google and modified it to suit my needs, I have tested the
  guestbook app as is and got it working, somehow somewhere I am making
  a simple mistake that frustrate every attempt at getting it working in
  my own code.
  I have stripped down my code to the essential in the hope of
  understanding what is wrong, but I am still stuck.

  What am I attempting to do ?
  Upload in a blobstore an image and display it in a web page.

  What is my code ?

  1) My upload form served from a static page

  ...
  form action=http://192.168.0.196:8083/uploadphoto;
  enctype=multipart/form-data method=post
         divlabelAttempt at uploading a picture using a form/label/
  deiv
         divinput type=file name=photo //div
         divinput type=submit value=Upload Photo //div
  /form
  ...

  2) My db model :

  class Photo(db.Model):
         photo = db.BlobProperty()
         date = db.DateTimeProperty(auto_now_add=True)

  3) The code uploading the photo and saving it in the blobstore

  class UploadPhoto(webapp.RequestHandler):
         def post(self):
                 photo = Photo()
                 img = self.request.get('photo')
                 photo.photo = db.Blob(img)
                 photo.put()

  4) The code creating the web page displaying the images :

  class PhotoPage(webapp.RequestHandler):
         def get(self):
                 self.response.out.write('htmlpre')
                 self.response.out.write('h1DateTime  Photo/h1')
                 photos = db.GqlQuery(SELECT * FROM Photo ORDER BY date 
  DESC LIMIT
  10)
                 for photo in photos:
                         self.response.out.write('p%s  ' % photo.date)
                         self.response.out.write('img 
  src=servephoto?photo_id=%s //p'
  % photo.key())
                 self.response.out.write('/pre/body/html')

  5) The code serving the images :

  class ServePhoto (webapp.RequestHandler):
     def get(self):
       photo = db.get(self.request.get(photo_id))
       if photo.photo:
           self.response.headers['Content-Type'] = image/jpg
           self.response.out.write(photo.photo)
       else:
           self.error(404)

  Everything seem to work until this last stage, I can select an image
  in my form, upload it, Something is written in Binary in the
  Blobstore.
  When I visit the page supposed to display the image I see all info but
  a broken image icon.
  I checked the source code and the HTML seem to be just fine, here it
  is with one record in the blobstore, I get the blob key which mena
  that there is a record with some binary stuff in it.

  htmlpreh1DateTime        Photo/h1p2010-09-13 00:31:14.477698 
  img
  src=servephoto?photo_id=agt0ZXN0cmF5c3Bvc3ILCxIFUGhvdG8YWww //p/
  pre/body/html

  I also know that the ServePhoto class is called and executed but it if
  photo.photo always return false and execute self-eror(404).
  I tried replacing this with a different error code and it always
  display the error code so I am sure the if statement get a false.

  My questions is, why would the 

[google-appengine] Re: Retrieving image from a Blob

2010-09-14 Thread John McLaughlin
@Robert.  Right you are.  I checked the docs and db.get is a magic get
anything function.  Sorry for the noise.

So I'm going for door #2 now.  In ServePhoto photo must be the
correctly returned key.  Otherwise accessing photo.photo would give
an error.  So photo.photo must truly be a false value.  This means to
me that although photo is a valid object, the photo.photo property
never got set properly.  This takes us back to UploadPhoto.  It's
unlikely that photo.put() failed.   And it's likely that db.Blob
created a valid db.Blob object.  However accessing photo.photo
doesn't return the db.Blob object, but rather the underlying data that
came into it.  Therefore I think your original hunch that the incoming
data for db.Blob is an empty string is correct.  I've struggled with
multi-part posts so I'm not 100% sure about the html.  One thing that
looks suspicious is the hard coding of the hostname:port in the post
action.  Are you sure you don't want simply /uploadphoto?   That
could send the uploads to the wrong place, for example different ports
use different datastores on the Dev Server.

On Sep 14, 9:17 am, Robert Kluin robert.kl...@gmail.com wrote:
 db.get() will grab an entity of _any_ kind.  Model.get checks that the
 key is for the correct kind of entity before fetching it.  Either will
 work.  When I use db.get I usually include a check to make sure the
 keys are the correct kind.

 The key he posted in his initial thread is a Photo.

 Robert

 On Tue, Sep 14, 2010 at 11:34, John McLaughlin



 johnmclaugh...@massanimation.com wrote:
  The one thing that looked off to me is that the line in ServePhoto

      photo = db.get(self.request.get(photo_id))

  might want to be

      photo = Photo.get(self.request.get(photo_id))

  I think db.get is a datastore method, not an inherited method from
  db.Model

  On Sep 13, 8:09 pm, Robert Kluin robert.kl...@gmail.com wrote:
  I glanced over your code, nothing really major jumped out at me.  If
  you are not getting an exception in ServePhoto then the model is
  clearly getting created and successfully fetched.

  So, here are my first thoughts:
  Have you tried logging some debug info in the UploadPhoto and
  ServePhoto handlers?    Specifically are you sure data is actually in
  the photo property and it is not just an empty string or something?
  Maybe you could try logging len(photo.photo) right before saving it,
  then again right after fetching it.

  What happens when you remove the if and simply return photo.photo?

  Robert

  class ServePhoto (webapp.RequestHandler):
     def get(self):
       photo = db.get(self.request.get(photo_id))
       if photo.photo:
           self.response.headers['Content-Type'] = image/jpg
           self.response.out.write(photo.photo)
       else:
           self.error(404)

  --
  Robert Kluin
  Ezox Systems, LLC

  On Sun, Sep 12, 2010 at 22:03, Raymond

  raymond.othenin-gir...@raydropin.com wrote:
   Hi All,

   I have been trying to understand how to upload and download images
   from to a Blobstore and have hit a wall.
   I have essentially made a modified version of the Guestbook example
   provided by google and modified it to suit my needs, I have tested the
   guestbook app as is and got it working, somehow somewhere I am making
   a simple mistake that frustrate every attempt at getting it working in
   my own code.
   I have stripped down my code to the essential in the hope of
   understanding what is wrong, but I am still stuck.

   What am I attempting to do ?
   Upload in a blobstore an image and display it in a web page.

   What is my code ?

   1) My upload form served from a static page

   ...
   form action=http://192.168.0.196:8083/uploadphoto;
   enctype=multipart/form-data method=post
          divlabelAttempt at uploading a picture using a form/label/
   deiv
          divinput type=file name=photo //div
          divinput type=submit value=Upload Photo //div
   /form
   ...

   2) My db model :

   class Photo(db.Model):
          photo = db.BlobProperty()
          date = db.DateTimeProperty(auto_now_add=True)

   3) The code uploading the photo and saving it in the blobstore

   class UploadPhoto(webapp.RequestHandler):
          def post(self):
                  photo = Photo()
                  img = self.request.get('photo')
                  photo.photo = db.Blob(img)
                  photo.put()

   4) The code creating the web page displaying the images :

   class PhotoPage(webapp.RequestHandler):
          def get(self):
                  self.response.out.write('htmlpre')
                  self.response.out.write('h1DateTime  Photo/h1')
                  photos = db.GqlQuery(SELECT * FROM Photo ORDER BY date 
   DESC LIMIT
   10)
                  for photo in photos:
                          self.response.out.write('p%s  ' % photo.date)
                          self.response.out.write('img 
   src=servephoto?photo_id=%s //p'
   % photo.key())