Cool.
TG is going fast... too fast for us :)
>
> Answering myself: there's already a bug-report (#686) which is marked
> fixed in [1026]
>
> Arnar
>
> On 5/15/06, Arnar Birgisson <[EMAIL PROTECTED]> wrote:
>> Thanks Sylvain, I verified this by looking at CP's source.
>>
>> So the solution would be to make the TG controller return 304 to the
>> browser? Im not familiar with TG's internals, but I guess
>> controllers._execute_func is not the appropriate place for that.
>>
>> Meanwhile, I guess a workaround would be to return fileGenarator
>> directly instead of going through serveFile (which is mainly about
>> setting headers and dealing with ranges).
>>
>> I'll file a TG bug in Trac.
>>
>> Arnar
>>
>> On 5/15/06, Sylvain Hellegouarch <[EMAIL PROTECTED]> wrote:
>> >
>> > AFAIK,
>> >
>> > The only place where CherryPy returns a [] in that context is when the
>> > static file has not been modified and CherryPy decides to return a 304
>> Not
>> > Modified.
>> >
>> > The problem comes from the TG controller which asserts on the returned
>> > type I think.
>> >
>> > - Sylvain
>> >
>> > >
>> > > Hi there,
>> > >
>> > > I'm not sure if this is TurboGears specific...
>> > >
>> > > My problem seems to be that every other request.
>> > > cherrypy.lib.cptools.serveFile returns an empty list "[]" instead of
>> a
>> > > generator. This produces the following backtrace:
>> > >
>> > > Page handler: <bound method Root.default of
>> > > <softproof.controllers.Root object at 0xb72840ec>>
>> > > Traceback (most recent call last):
>> > > File
>> > > "/usr/lib/python2.4/site-packages/CherryPy-2.2.1-py2.4.egg/cherrypy/_cphttptools.py",
>> > > line 105, in _run
>> > > self.main()
>> > > File
>> > > "/usr/lib/python2.4/site-packages/CherryPy-2.2.1-py2.4.egg/cherrypy/_cphttptools.py",
>> > > line 254, in main
>> > > body = page_handler(*virtual_path, **self.params)
>> > > File "<string>", line 3, in default
>> > > File
>> > > "/usr/lib/python2.4/site-packages/TurboGears-0.9a6-py2.4.egg/turbogears/controllers.py",
>> > > line 273, in expose
>> > > output = database.run_with_transaction(
>> > > File
>> > > "/usr/lib/python2.4/site-packages/TurboGears-0.9a6-py2.4.egg/turbogears/database.py",
>> > > line 221, in run_with_transaction
>> > > retval = func(*args, **kw)
>> > > File "<string>", line 5, in _expose
>> > > File
>> > > "/usr/lib/python2.4/site-packages/TurboGears-0.9a6-py2.4.egg/turbogears/controllers.py",
>> > > line 290, in <lambda>
>> > > mapping, fragment, *args, **kw)))
>> > > File
>> > > "/usr/lib/python2.4/site-packages/TurboGears-0.9a6-py2.4.egg/turbogears/controllers.py",
>> > > line 314, in _execute_func
>> > > output = errorhandling.try_call(func, *args, **kw)
>> > > File
>> > > "/usr/lib/python2.4/site-packages/TurboGears-0.9a6-py2.4.egg/turbogears/errorhandling.py",
>> > > line 71, in try_call
>> > > return func(self, *args, **kw)
>> > > File
>> > > "/home/arnarb/workdir/softproof/webinterface/softproof/softproof/controllers.py",
>> > > line 255, in default
>> > > return meth( **kwargs )
>> > > File "<string>", line 3, in thumbs
>> > > File
>> > > "/usr/lib/python2.4/site-packages/TurboGears-0.9a6-py2.4.egg/turbogears/controllers.py",
>> > > line 269, in expose
>> > > output = func._expose(func, accept, func._allow_json,
>> > > File "<string>", line 5, in _expose
>> > > File
>> > > "/usr/lib/python2.4/site-packages/TurboGears-0.9a6-py2.4.egg/turbogears/controllers.py",
>> > > line 290, in <lambda>
>> > > mapping, fragment, *args, **kw)))
>> > > File
>> > > "/usr/lib/python2.4/site-packages/TurboGears-0.9a6-py2.4.egg/turbogears/controllers.py",
>> > > line 315, in _execute_func
>> > > assert isinstance(output, basestring) or isinstance(output,
>> dict) \
>> > > AssertionError: Method JobsByKey.thumbs() returned unexpected
>> output.
>> > > Output should be of type basestring, dict or generator.
>> > >
>> > >
>> > > The relevant code is:
>> > >
>> > > from cherrypy.lib.cptools import serveFile
>> > >
>> > > class JobBrowserBase(object):
>> > >
>> > > def _serveThumb(self, job, page):
>> > > datadir = turbogears.config.get('softproof.datadir', None)
>> > > thumbpath = os.path.join(datadir, job[:5] + '000', job[:6] +
>> > > '00', job, '.thumbs', page)
>> > > if not os.path.exists(thumbpath):
>> > > raise cherrypy.NotFound()
>> > > return serveFile(thumbpath, 'image/jpeg')
>> > >
>> > > class JobsByKey(controllers.RootController, JobBrowserBase):
>> > >
>> > > @expose()
>> > > @identity.require(identity.not_anonymous())
>> > > def thumbs(self, key, page):
>> > > job, expires_d = decodekey(key)
>> > > if expires_d is not None and expires_d <
>> datetime.datetime.now():
>> > > raise Exception("expired key") # TODO real error
>> > > return self._serveThumb(job, page)
>> > >
>> > > # x = self._serveThumb(job, page)
>> > > # log.debug(repr(x))
>> > > # return x
>> > >
>> > >
>> > > The strange thing that this seems to happen _exactly_ every other
>> > > request. Hitting reload again produces the jpeg-file.
>> > >
>> > > These are my versions:
>> > >
>> > > TurboGears 0.9a6
>> > > CherryPy 2.2.1
>> > >
>> > >
>> > > Any ideas?
>> > >
>> > > Arnar
>> > >
>> > > >
>> > >
>> >
>> >
>> > > >
>> >
>>
>
> >
>
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"TurboGears" 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/turbogears
-~----------~----~----~----~------~----~------~--~---