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 <[email protected]>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 [email protected]. >>>> To unsubscribe from this group, send email to >>>> [email protected]. >>>> For more options, visit this group at >>>> http://groups.google.com/group/google-appengine?hl=en. >>>> >>> >>> >>> >>> -- >>> Takashi Matsuo | Developers Advocate | [email protected] >>> >>> -- 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/-/8BNUEIqqHx0J. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/google-appengine?hl=en.
