[google-appengine] Change to blobstore/get_serving_url?
Hello, I have a function that takes a user image upload and saves both the blob key and a serving URL. After upgrading to 1.7.1, I now get an error trying to save the updated entity to the datastore. The property pictures is an ndb.StringProperty(repeated=True, indexed=False) and the property picture_keys is an ndb.BlobKeyProperty(repeated=True) where the former will hold the image serving URLs for the blob keys in the latter. In a transaction, I read the uploaded file and generate a serving URL and save the blob key and the serving URL. This worked last night before upgrading to 1.7.1, but now I get an error on: article.pictures.append(get_serving_url(blob_info.key())) AttributeError: 'Entity' object has no attribute '_to_pb' Without fail on the development server, this line now generates that error. Was there a change to the API and I should be doing something differently? If so, what? Thanks, Richard -- You received this message because you are subscribed to the Google Groups "Google App Engine" group. To view this discussion on the web visit https://groups.google.com/d/msg/google-appengine/-/Bg4zC34iDOcJ. To post to this group, send email to google-appengine@googlegroups.com. To unsubscribe from this group, send email to google-appengine+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/google-appengine?hl=en.
Re: [google-appengine] Change to blobstore/get_serving_url?
Can you show me the whole stacktrace? What is your app-id? On Wed, Aug 22, 2012 at 7:14 AM, Richard Arrano wrote: > Hello, > I have a function that takes a user image upload and saves both the blob > key and a serving URL. After upgrading to 1.7.1, I now get an error trying > to save the updated entity to the datastore. The property pictures is an > ndb.StringProperty(repeated=True, indexed=False) and the property > picture_keys is an ndb.BlobKeyProperty(repeated=True) where the former will > hold the image serving URLs for the blob keys in the latter. In a > transaction, I read the uploaded file and generate a serving URL and save > the blob key and the serving URL. This worked last night before upgrading > to 1.7.1, but now I get an error on: > > > article.pictures.append(get_serving_url(blob_info.key())) > > > > AttributeError: 'Entity' object has no attribute '_to_pb' > > Without fail on the development server, this line now generates that > error. Was there a change to the API and I should be doing something > differently? If so, what? > > Thanks, > Richard > > -- > You received this message because you are subscribed to the Google Groups > "Google App Engine" group. > To view this discussion on the web visit > https://groups.google.com/d/msg/google-appengine/-/Bg4zC34iDOcJ. > To post to this group, send email to google-appengine@googlegroups.com. > To unsubscribe from this group, send email to > google-appengine+unsubscr...@googlegroups.com. > For more options, visit this group at > http://groups.google.com/group/google-appengine?hl=en. > -- Takashi Matsuo | Developers Advocate | tmat...@google.com -- You received this message because you are subscribed to the Google Groups "Google App Engine" group. To post to this group, send email to google-appengine@googlegroups.com. To unsubscribe from this group, send email to google-appengine+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/google-appengine?hl=en.
Re: [google-appengine] Change to blobstore/get_serving_url?
Here is my stack of the same problem. File "C:\work\twist.2\server\backend\lib\images\image_helper.py", line 18, in get_serving_url return images.get_serving_url(image_blob_key) File "C:\Program Files (x86)\Google\google_appengine\google\appengine\api\imag es\__init__.py", line 1793, in get_serving_url return rpc.get_result() File "C:\Program Files (x86)\Google\google_appengine\google\appengine\api\apip roxy_stub_map.py", line 604, in get_result return self.__get_result_hook(self) File "C:\Program Files (x86)\Google\google_appengine\google\appengine\api\imag es\__init__.py", line 1889, in get_serving_url_hook rpc.check_success() File "C:\Program Files (x86)\Google\google_appengine\google\appengine\api\apip roxy_stub_map.py", line 570, in check_success self.__rpc.CheckSuccess() File "C:\Program Files (x86)\Google\google_appengine\google\appengine\api\apip roxy_rpc.py", line 156, in _WaitImpl self.request, self.response) File "C:\Program Files (x86)\Google\google_appengine\google\appengine\api\apip roxy_stub.py", line 160, in MakeSyncCall method(request, response) File "C:\Program Files (x86)\Google\google_appengine\google\appengine\api\imag es\images_stub.py", line 296, in _Dynamic_GetUrlBase datastore.Put(entity_info) File "C:\Program Files (x86)\Google\google_appengine\google\appengine\api\data store.py", line 579, in Put return PutAsync(entities, **kwargs).get_result() File "C:\Program Files (x86)\Google\google_appengine\google\appengine\api\data store.py", line 556, in PutAsync return _GetConnection().async_put(config, entities, local_extra_hook) File "C:\Program Files (x86)\Google\google_appengine\google\appengine\datastor e\datastore_rpc.py", line 1534, in async_put pbs = [self.__adapter.entity_to_pb(entity) for entity in entities] File "C:\work\twist.2\server\backend\lib\external\ndb\model.py", line 561, in entity_to_pb pb = ent._to_pb() AttributeError: 'Entity' object has no attribute '_to_pb' i have ran into the same type of problem before. the problem is the sdk tries to cache the datastore_rpc connection. see _GetConnection in datastore.py def _GetConnection(): """Retrieve a datastore connection local to the thread.""" connection = None if os.getenv(_ENV_KEY): try: connection = _thread_local.connection except AttributeError: pass if connection is None: connection = datastore_rpc.Connection(adapter=_adapter) _SetConnection(connection) return connection an incorrect datastore connection is being used for that call from this connection cache. you can hack around it by adding this before the get_serving_url call. import os from google.appengine.api import datastore os.environ[datastore._ENV_KEY] = '' os.putenv(datastore._ENV_KEY, '') datastore._thread_local.connection = None On Tuesday, August 21, 2012 6:59:25 PM UTC-7, Takashi Matsuo (Google) wrote: > > > Can you show me the whole stacktrace? > What is your app-id? > > > On Wed, Aug 22, 2012 at 7:14 AM, Richard Arrano > > > wrote: > >> Hello, >> I have a function that takes a user image upload and saves both the blob >> key and a serving URL. After upgrading to 1.7.1, I now get an error trying >> to save the updated entity to the datastore. The property pictures is an >> ndb.StringProperty(repeated=True, indexed=False) and the property >> picture_keys is an ndb.BlobKeyProperty(repeated=True) where the former will >> hold the image serving URLs for the blob keys in the latter. In a >> transaction, I read the uploaded file and generate a serving URL and save >> the blob key and the serving URL. This worked last night before upgrading >> to 1.7.1, but now I get an error on: >> >> >> article.pictures.append(get_serving_url(blob_info.key())) >> >> >> >> AttributeError: 'Entity' object has no attribute '_to_pb' >> >> Without fail on the development server, this line now generates that >> error. Was there a change to the API and I should be doing something >> differently? If so, what? >> >> Thanks, >> Richard >> >> -- >> You received this message because you are subscribed to the Google Groups >> "Google App Engine" group. >> To view this discussion on the web visit >> https://groups.google.com/d/msg/google-appengine/-/Bg4zC34iDOcJ. >> To post to this group, send email to >> google-a...@googlegroups.com >> . >> To unsubscribe from this group, send email to >> google-appengi...@googlegroups.com . >> For more options, visit this group at >> http://groups.google.com/group/google-appengine?hl=en. >> > > > > -- > Takashi Matsuo | Developers Advocate | tma...@google.com > > -- You received this message because you are subscribed to the Google Groups "Google App Engine" group. To view this discussion on the web visit https://groups.google.com/d/msg/google-appengine/-/SmPDclCtdnYJ. To post to this group, send email to google-app
Re: [google-appengine] Change to blobstore/get_serving_url?
Frank, Thanks for the tip and for debugging that issue. I was completely lost. However, when I try your workaround, despite that my IDE can see that os has a function called putenv, for some reason App Engine does not. I get this error trying it that way: os.putenv(datastore._ENV_KEY, "") AttributeError: 'module' object has no attribute 'putenv' Any idea on how to mitigate this? I have imported os but this is extremely strange. I'm on 2.7.3 and am able to use putenv in my own interpreter. Thanks, Richard On Tuesday, August 21, 2012 10:25:30 PM UTC-7, Frank VanZile wrote: > Here is my stack of the same problem. > > File "C:\work\twist.2\server\backend\lib\images\image_helper.py", line > 18, in > get_serving_url > return images.get_serving_url(image_blob_key) > File "C:\Program Files > (x86)\Google\google_appengine\google\appengine\api\imag > es\__init__.py", line 1793, in get_serving_url > return rpc.get_result() > File "C:\Program Files > (x86)\Google\google_appengine\google\appengine\api\apip > roxy_stub_map.py", line 604, in get_result > return self.__get_result_hook(self) > File "C:\Program Files > (x86)\Google\google_appengine\google\appengine\api\imag > es\__init__.py", line 1889, in get_serving_url_hook > rpc.check_success() > File "C:\Program Files > (x86)\Google\google_appengine\google\appengine\api\apip > roxy_stub_map.py", line 570, in check_success > self.__rpc.CheckSuccess() > File "C:\Program Files > (x86)\Google\google_appengine\google\appengine\api\apip > roxy_rpc.py", line 156, in _WaitImpl > self.request, self.response) > File "C:\Program Files > (x86)\Google\google_appengine\google\appengine\api\apip > roxy_stub.py", line 160, in MakeSyncCall > method(request, response) > File "C:\Program Files > (x86)\Google\google_appengine\google\appengine\api\imag > es\images_stub.py", line 296, in _Dynamic_GetUrlBase > datastore.Put(entity_info) > File "C:\Program Files > (x86)\Google\google_appengine\google\appengine\api\data > store.py", line 579, in Put > return PutAsync(entities, **kwargs).get_result() > File "C:\Program Files > (x86)\Google\google_appengine\google\appengine\api\data > store.py", line 556, in PutAsync > return _GetConnection().async_put(config, entities, local_extra_hook) > File "C:\Program Files > (x86)\Google\google_appengine\google\appengine\datastor > e\datastore_rpc.py", line 1534, in async_put > pbs = [self.__adapter.entity_to_pb(entity) for entity in entities] > File "C:\work\twist.2\server\backend\lib\external\ndb\model.py", line > 561, in > entity_to_pb > pb = ent._to_pb() > AttributeError: 'Entity' object has no attribute '_to_pb' > > > i have ran into the same type of problem before. the problem is the sdk > tries to cache the datastore_rpc connection. see _GetConnection in > datastore.py > > def _GetConnection(): > """Retrieve a datastore connection local to the thread.""" > > connection = None > if os.getenv(_ENV_KEY): > try: > connection = _thread_local.connection > except AttributeError: > pass > if connection is None: > connection = datastore_rpc.Connection(adapter=_adapter) > _SetConnection(connection) > return connection > > an incorrect datastore connection is being used for that call from this > connection cache. > > you can hack around it by adding this before the get_serving_url call. > > import os > from google.appengine.api import datastore > os.environ[datastore._ENV_KEY] = '' > os.putenv(datastore._ENV_KEY, '') > datastore._thread_local.connection = None > > > > On Tuesday, August 21, 2012 6:59:25 PM UTC-7, Takashi Matsuo (Google) > wrote: >> >> >> Can you show me the whole stacktrace? >> What is your app-id? >> >> >> On Wed, Aug 22, 2012 at 7:14 AM, Richard Arrano wrote: >> >>> Hello, >>> I have a function that takes a user image upload and saves both the blob >>> key and a serving URL. After upgrading to 1.7.1, I now get an error trying >>> to save the updated entity to the datastore. The property pictures is an >>> ndb.StringProperty(repeated=True, indexed=False) and the property >>> picture_keys is an ndb.BlobKeyProperty(repeated=True) where the former will >>> hold the image serving URLs for the blob keys in the latter. In a >>> transaction, I read the uploaded file and generate a serving URL and save >>> the blob key and the serving URL. This worked last night before upgrading >>> to 1.7.1, but now I get an error on: >>> >>> >>> article.pictures.append(get_serving_url(blob_info.key())) >>> >>> >>> >>> AttributeError: 'Entity' object has no attribute '_to_pb' >>> >>> Without fail on the development server, this line now generates that >>> error. Was there a change to the API and I should be doing something >>> differently? If so, what? >>> >>> Thanks, >>> Richard >>> >>> -- >>> You received this message because you are
Re: [google-appengine] Change to blobstore/get_serving_url?
from http://docs.python.org/library/os.html putenv should exist. just comment out the putenv and try it. the hack to get _GetConnection not return an existing connection so it will create the correct connection needed for the get_serving_url call. On Tuesday, August 21, 2012 11:20:50 PM UTC-7, Richard Arrano wrote: > > Frank, > Thanks for the tip and for debugging that issue. I was completely lost. > However, when I try your workaround, despite that my IDE can see that os > has a function called putenv, for some reason App Engine does not. I get > this error trying it that way: > > > os.putenv(datastore._ENV_KEY, "") > AttributeError: 'module' object has no attribute 'putenv' > > > > Any idea on how to mitigate this? I have imported os but this is extremely > strange. I'm on 2.7.3 and am able to use putenv in my own interpreter. > > > > Thanks, > > Richard > > > On Tuesday, August 21, 2012 10:25:30 PM UTC-7, Frank VanZile wrote: > >> Here is my stack of the same problem. >> >> File "C:\work\twist.2\server\backend\lib\images\image_helper.py", line >> 18, in >> get_serving_url >> return images.get_serving_url(image_blob_key) >> File "C:\Program Files >> (x86)\Google\google_appengine\google\appengine\api\imag >> es\__init__.py", line 1793, in get_serving_url >> return rpc.get_result() >> File "C:\Program Files >> (x86)\Google\google_appengine\google\appengine\api\apip >> roxy_stub_map.py", line 604, in get_result >> return self.__get_result_hook(self) >> File "C:\Program Files >> (x86)\Google\google_appengine\google\appengine\api\imag >> es\__init__.py", line 1889, in get_serving_url_hook >> rpc.check_success() >> File "C:\Program Files >> (x86)\Google\google_appengine\google\appengine\api\apip >> roxy_stub_map.py", line 570, in check_success >> self.__rpc.CheckSuccess() >> File "C:\Program Files >> (x86)\Google\google_appengine\google\appengine\api\apip >> roxy_rpc.py", line 156, in _WaitImpl >> self.request, self.response) >> File "C:\Program Files >> (x86)\Google\google_appengine\google\appengine\api\apip >> roxy_stub.py", line 160, in MakeSyncCall >> method(request, response) >> File "C:\Program Files >> (x86)\Google\google_appengine\google\appengine\api\imag >> es\images_stub.py", line 296, in _Dynamic_GetUrlBase >> datastore.Put(entity_info) >> File "C:\Program Files >> (x86)\Google\google_appengine\google\appengine\api\data >> store.py", line 579, in Put >> return PutAsync(entities, **kwargs).get_result() >> File "C:\Program Files >> (x86)\Google\google_appengine\google\appengine\api\data >> store.py", line 556, in PutAsync >> return _GetConnection().async_put(config, entities, local_extra_hook) >> File "C:\Program Files >> (x86)\Google\google_appengine\google\appengine\datastor >> e\datastore_rpc.py", line 1534, in async_put >> pbs = [self.__adapter.entity_to_pb(entity) for entity in entities] >> File "C:\work\twist.2\server\backend\lib\external\ndb\model.py", line >> 561, in >> entity_to_pb >> pb = ent._to_pb() >> AttributeError: 'Entity' object has no attribute '_to_pb' >> >> >> i have ran into the same type of problem before. the problem is the sdk >> tries to cache the datastore_rpc connection. see _GetConnection in >> datastore.py >> >> def _GetConnection(): >> """Retrieve a datastore connection local to the thread.""" >> >> connection = None >> if os.getenv(_ENV_KEY): >> try: >> connection = _thread_local.connection >> except AttributeError: >> pass >> if connection is None: >> connection = datastore_rpc.Connection(adapter=_adapter) >> _SetConnection(connection) >> return connection >> >> an incorrect datastore connection is being used for that call from this >> connection cache. >> >> you can hack around it by adding this before the get_serving_url call. >> >> import os >> from google.appengine.api import datastore >> os.environ[datastore._ENV_KEY] = '' >> os.putenv(datastore._ENV_KEY, '') >> datastore._thread_local.connection = None >> >> >> >> On Tuesday, August 21, 2012 6:59:25 PM UTC-7, Takashi Matsuo (Google) >> wrote: >>> >>> >>> Can you show me the whole stacktrace? >>> What is your app-id? >>> >>> >>> On Wed, Aug 22, 2012 at 7:14 AM, Richard Arrano wrote: >>> Hello, I have a function that takes a user image upload and saves both the blob key and a serving URL. After upgrading to 1.7.1, I now get an error trying to save the updated entity to the datastore. The property pictures is an ndb.StringProperty(repeated=True, indexed=False) and the property picture_keys is an ndb.BlobKeyProperty(repeated=True) where the former will hold the image serving URLs for the blob keys in the latter. In a transaction, I read the uploaded file and generate a serving URL and save the blob key and the serving URL. This worked last night before up