On Tue, Sep 11, 2012 at 4:00 PM, Richard Arrano <[email protected]> wrote:
> What I'm asking more specifically is what does App Engine do, if anything,
> to os.putenv? Because using the App Engine console, I can do things like:
>
> os.environ["x"] = ndb.Model()
>
> and access it with os.environ["x"] without a problem. However, when I pull
> up the interpreter outside of Python and attempt to put anything other than
> a string into os.environ, it will balk:
>
> import os
>>>> import os
>>>> os.environ["abc"] = {}
> Traceback (most recent call last):
>   File "<stdin>", line 1, in <module>
>
>   File "C:\Python27\lib\os.py", line 420, in __setitem__
>     putenv(key, item)
> TypeError: must be string, not dict
>>>>
>
> So it seems like App Engine does something to the putenv call where it
> serializes model instances into strings first, and if that's the case must
> also do a similar operation to os.getenv to deserialize them. What is App
> Engine doing, if anything to the getenv/putenv calls?

Modifying os.environ in App Engine doesn't actually result in
getenv/putenv calls. You can see the class used here:
http://googleappengine.googlecode.com/svn/trunk/python/google/appengine/runtime/request_environment.py

Please file a bug if the incompatibility between regular Python and
App Engine os.environ is causing you problems:
http://code.google.com/p/googleappengine/issues/list

Cheers,
Brian

>
> Thanks,
> Richard
>
> On Tuesday, September 11, 2012 6:09:16 AM UTC-7, Guido van Rossum wrote:
>>
>> You'll probably get more help from StackOverflow.com. You'll need to
>> provide more info, nobody can help you debug this with just that traceback
>> information unless they're psychic.
>>
>> On Sunday, September 9, 2012 10:06:33 AM UTC-7, Richard Arrano wrote:
>>>
>>> Hello,
>>> I've been using webtest to unit test my application and I've encountered
>>> a strange issue. I wrap many of my get/post handlers in decorators and in
>>> some of those decorators, I put ndb.Model instances in os.environ for later
>>> use in the subsequent handler. This works on my local dev server and in
>>> production. However, when I run nosetests it always gives me an error:
>>>
>>> os.environ["user"] = user
>>> File "C:\Python27\lib\os.py", line 420, in __setitem__
>>>     putenv(key, item)
>>> TypeError: must be string, not User
>>>
>>> Any ideas on how to mitigate this so my tests won't error out at this
>>> point?
>>>
>>> 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/-/er6JJQK-EJoJ.
>
> 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.

-- 
You received this message because you are subscribed to the Google Groups 
"Google App Engine" group.
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.

Reply via email to