That's clearly a Routes bug, at least from my standpoint so I've filed
a bug report. Thanks for help!

On May 19, 12:45 am, "Kumar McMillan" <[EMAIL PROTECTED]>
wrote:
> Hi.
>
> I took a look at the code and it doesn't appear to be a nose problem.
> It's either a bug in Routes or somehow the Routes config is not
> getting configured properly during your test run.  I can't see
> anything in environment.py or tests/__init__.py that would indicate
> your pylons app is out of the ordinary.  The subdomain code triggers a
> different function which is why you only see the error when turning on
> subdomains.  However, you can see that it is a configuration problem
> (or a bug) by doing this directly in your test:
>
> class TestLibraryController(TestController):
>
>     def test_get_leafs(self):
>         from routes import request_config
>         config = request_config()
>         config.environ
>
> For me, that triggers the error directly:
>
> Traceback (most recent call last):
>   File 
> "/Users/kumar/Downloads/helloworld/helloworld/tests/functional/test_library.py",
> line 10, in test_get_leafs
>     config.environ
>   File 
> "/Users/kumar/Downloads/helloworld/env/lib/python2.5/site-packages/Routes-1.7.1-py2.5.egg/routes/__init__.py",
> line 14, in __getattr__
>     return getattr(self.__shared_state, name)
> AttributeError: 'thread._local' object has no attribute 'environ'
>
> I'd suggest filing a bug with Routes after double checking that your
> app is configuring the Routes config as it should.
>
> K
>
> On Thu, May 15, 2008 at 3:19 AM, Pavel Skvazh <[EMAIL PROTECTED]> wrote:
>
> > Thanks for your reply!
>
> > I've tried the method you described and it doesn't seem to work
> > unfortunatly.
> > Just stressing it out.
> > The second i remove
> > map.sub_domains = True
> > and conditions=dict(sub_domain=['my']) from routing.py everything
> > starts working.
>
> > And the failure
> > looks like
>
> > Traceback (most recent call last):
> >  File "D:\Pylons\rusbiz\trunk\rusbiz\tests\functional
> > \test_catalog.py", line 10, in setUp
> >    self.login('storos', 'explore')
> >  File "D:\Pylons\rusbiz\trunk\rusbiz\tests\functional
> > \test_catalog.py", line 16, in login
> >    return url_for(controller='users', action='login')
> >  File "D:\Python25\lib\site-packages\routes-1.8-py2.5.egg\routes
> > \util.py", line 205, in url_for
> >    newargs = _screenargs(kargs)
> >  File "D:\Python25\lib\site-packages\routes-1.8-py2.5.egg\routes
> > \util.py", line 55, in _screenargs
> >    memory_kargs = _subdomain_check(config, memory_kargs)
> >  File "D:\Python25\lib\site-packages\routes-1.8-py2.5.egg\routes
> > \util.py", line 66, in _subdomain_check
> >    fullhost = config.environ.get('HTTP_HOST') or \
> >  File "D:\Python25\lib\site-packages\routes-1.8-py2.5.egg\routes
> > \__init__.py", line 14, in __getattr__
> >    return getattr(self.__shared_state, name)
> > AttributeError: 'thread._local' object has no attribute 'environ'
>
> > it occurs when i try to call url_for(controller='users',
> > action='login', sub_domain='my')
>
> > I can send you the sample project that displays this error
>
> > On May 13, 9:26 pm, "Kumar McMillan" <[EMAIL PROTECTED]> wrote:
> >> It's hard to understand what might be going on here but my only guess
> >> is that your app-setup code to populate the thread local config object
> >> is not getting run at the right time.  This is tricky to get right in
> >> nose because often times parts of your app want to access config
> >> *before* it can be imported.  What nose does is import just about
> >> everything in your package before it runs the tests.  If your test
> >> setup is done like the pylons docs suggest, that is, at the module
> >> level of test/__init__.py -- not within setup() -- then try this and
> >> see if it helps:
>
> >> nosetests --where=yourapp/tests
>
> >> that will change dir to "yourapp/tests" (adjust the path as necessary)
> >> and will only import from the tests directory.  However you will have
> >> to ensure that each test module says from yourapp import tests at the
> >> top so the setup code gets run.  Double check that.
>
> >> If that still doesn't work you'd have to revert back to a version of
> >> your app where tests run OK then compare the differences.  You might
> >> want to run nosetests --debug=nose.importer,nose.selector to help
> >> compare the differences in test execution.
>
> >> On Wed, May 7, 2008 at 8:49 AM, Pavel Skvazh <[EMAIL PROTECTED]> wrote:
>
> >> >  Has anyone experienced problems with running nosetests on contoller,
> >> >  that is routed to the sub-domain?
>
> >> >  Here's what I've got
>
> >> >  controller/test.py
> >> >  class TestController(BaseController):
> >> >         def get(self):
> >> >                 return True
>
> >> >  routing.py
> >> >  Out of the box
> >> >     map.connect(':controller/:action/:id')
> >> >     map.connect(':action/:id', controller='main')
> >> >     map.connect('*url', controller='template', action='view')
>
> >> >  class TestController(TestController):
> >> >     def test_get(self):
> >> >         response = self.app.get(url_for(controller='test',
> >> >  action='get'))
> >> >         r = response.body
> >> >         assert_true(r)
>
> >> >  This works just fine.
> >> >  What do i change
> >> >     map.connect(':controller/:action/:id',
> >> >  conditions=dict(sub_domain=['my']))
> >> >     map.connect(':action/:id', controller='main',
> >> >  conditions=dict(sub_domain=['my']))
> >> >     map.connect('*url', controller='template', action='view')
>
> >> >  I change in routing
> >> >     map.sub_domains = True
> >> >     map.sub_domains_ignore = ['www']
>
> >> >     map.connect(':controller/:action/:id',
> >> >  conditions=dict(sub_domain=['my']))
> >> >     map.connect(':action/:id', controller='main',
> >> >  conditions=dict(sub_domain=['my']))
> >> >     map.connect('*url', controller='template', action='view')
>
> >> >  And then no matter what i do in test
>
> >> > class TestController(TestController):
> >> >     def test_get(self):
> >> >         response = self.app.get(url_for(controller='test',
> >> >  action='get', sub_domain='my'))
>
> >> >         r = response.body
> >> >         assert_true(r)
>
> >> >  Here's what i get
> >> >  Traceback (most recent call last):
> >> >   File "\tests\functional\test.py", line 10
> >> >  , in setUp
> >> >     self.login('storos', 'explore')
> >> >   File "\tests\functional\test.py", line 16
> >> >  , in login
> >> >     response = self.app.post(url_for(controller='test', action='get',
> >> >  sub_dom
> >> >  ain='my'),
> >> >   File "D:\Python25\lib\site-packages\routes-1.8-py2.5.egg\routes
> >> >  \util.py", line
> >> >   205, in url_for
> >> >     newargs = _screenargs(kargs)
> >> >   File "D:\Python25\lib\site-packages\routes-1.8-py2.5.egg\routes
> >> >  \util.py", line
> >> >   55, in _screenargs
> >> >     memory_kargs = _subdomain_check(config, memory_kargs)
> >> >   File "D:\Python25\lib\site-packages\routes-1.8-py2.5.egg\routes
> >> >  \util.py", line
> >> >   66, in _subdomain_check
> >> >     fullhost = config.environ.get('HTTP_HOST') or \
> >> >   File "D:\Python25\lib\site-packages\routes-1.8-py2.5.egg\routes
> >> >  \__init__.py",
> >> >  line 14, in __getattr__
> >> >     return getattr(self.__shared_state, name)
> >> >  AttributeError: 'thread._local' object has no attribute 'environ'
>
> >> >  I cann't really figure what's going on here.
> >> >  return h.url_for(controller='tests', action='get', sub_domain='my')
> >> >  returns a perfectly legal url, so i cann't really see why test cann't
> >> >  see it as well
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"pylons-discuss" 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/pylons-discuss?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to