Returning only response.body worked!!
Thank you tons Alessandro.
El lunes, 17 de marzo de 2014 12:37:43 UTC+1, Alessandro Molina escribió:
>
> Curious, there is something wrong happening in Pylons/Paste.
>
> I suppose what you reported is the body of your controller, have you tried
> changing it to return the response body instead of the response object
> itself?
>
> Like:
>
> from tg import response
>
> class RootController(TGController):
> @expose()
> def mymethod(self):
> response.content_type = 'text/csv'
> response.headers['Content-Disposition'] =
> 'attachment;filename=%s.csv' % file_name
>
> listWriter = csv.writer(open(title+'.csv', 'wb'),
> delimiter=',', quotechar='|',
> quoting=csv.QUOTE_MINIMAL)
>
> listWriter.writerow(['foo', 'bar'])
>
> content = ''
> with open (title+'.csv', "r") as myfile:
> content=myfile.read().replace('\n', '')
>
> return content
>
> PS: instead of writing on a file to read it back, you probably want to use
> StringIO.getvalue()
>
>
> On Mon, Mar 17, 2014 at 12:32 PM, Ricardo Molina
> <[email protected]<javascript:>
> > wrote:
>
>> Sorry, I forgot.
>>
>> This is the traceback:
>>
>> Exception happened during processing of request from ('127.0.0.1', 53855)
>> Traceback (most recent call last):
>> File
>> "/home/ricardo/env/tg222/local/lib/python2.7/site-packages/Paste-1.7.5.1-py2.7.egg/paste/httpserver.py",
>>
>> line 1068, in process_request_in_thread
>> self.finish_request(request, client_address)
>> File "/usr/lib/python2.7/SocketServer.py", line 334, in finish_request
>> self.RequestHandlerClass(request, client_address, self)
>> File "/usr/lib/python2.7/SocketServer.py", line 649, in __init__
>> self.handle()
>> File
>> "/home/ricardo/env/tg222/local/lib/python2.7/site-packages/Paste-1.7.5.1-py2.7.egg/paste/httpserver.py",
>>
>> line 442, in handle
>> BaseHTTPRequestHandler.handle(self)
>> File "/usr/lib/python2.7/BaseHTTPServer.py", line 340, in handle
>> self.handle_one_request()
>> File
>> "/home/ricardo/env/tg222/local/lib/python2.7/site-packages/Paste-1.7.5.1-py2.7.egg/paste/httpserver.py",
>>
>> line 437, in handle_one_request
>> self.wsgi_execute()
>> File
>> "/home/ricardo/env/tg222/local/lib/python2.7/site-packages/Paste-1.7.5.1-py2.7.egg/paste/httpserver.py",
>>
>> line 287, in wsgi_execute
>> self.wsgi_start_response)
>> File
>> "/home/ricardo/env/tg222/local/lib/python2.7/site-packages/Paste-1.7.5.1-py2.7.egg/paste/cascade.py",
>>
>> line 130, in __call__
>> return self.apps[-1](environ, start_response)
>> File
>> "/home/ricardo/env/tg222/local/lib/python2.7/site-packages/Paste-1.7.5.1-py2.7.egg/paste/registry.py",
>>
>> line 403, in __call__
>> reg.cleanup()
>> File
>> "/home/ricardo/env/tg222/local/lib/python2.7/site-packages/Paste-1.7.5.1-py2.7.egg/paste/registry.py",
>>
>> line 349, in cleanup
>> stacked._pop_object(obj)
>> File
>> "/home/ricardo/env/tg222/local/lib/python2.7/site-packages/Paste-1.7.5.1-py2.7.egg/paste/registry.py",
>>
>> line 273, in _pop_object_restoration
>> self._pop_object_orig(obj)
>> File
>> "/home/ricardo/env/tg222/local/lib/python2.7/site-packages/Paste-1.7.5.1-py2.7.egg/paste/registry.py",
>>
>> line 230, in _pop_object
>> if obj and popped is not obj:
>> File
>> "/home/ricardo/env/tg222/local/lib/python2.7/site-packages/Paste-1.7.5.1-py2.7.egg/paste/registry.py",
>>
>> line 175, in __nonzero__
>> return bool(self._current_obj())
>> File
>> "/home/ricardo/env/tg222/local/lib/python2.7/site-packages/Paste-1.7.5.1-py2.7.egg/paste/registry.py",
>>
>> line 259, in _current_obj_restoration
>> return self._current_obj_orig()
>> File
>> "/home/ricardo/env/tg222/local/lib/python2.7/site-packages/Paste-1.7.5.1-py2.7.egg/paste/registry.py",
>>
>> line 197, in _current_obj
>> 'thread' % self.____name__)
>> TypeError: No object (name: response) has been registered for this thread
>>
>>
>> El lunes, 17 de marzo de 2014 12:27:50 UTC+1, Alessandro Molina escribió:
>>>
>>> Where are you getting the error? Please always provide the traceback
>>> when reporting exceptions :D
>>>
>>>
>>> On Mon, Mar 17, 2014 at 12:16 PM, Ricardo Molina <ricardo.mo...@gmail.
>>> com> wrote:
>>>
>>>> I am working with TurboGears 2.2.2. and need to to serve a CSV file so
>>>> that the user can download it.
>>>>
>>>> This is the code that I have so far:
>>>>
>>>>
>>>> response.content_type = 'text/csv'
>>>> response.headers['Content-Disposition'] =
>>>> 'attachment;filename=%s.csv' % file_name
>>>>
>>>> listWriter = csv.writer(open(title+'.csv', 'wb'),
>>>> delimiter=',', quotechar='|',
>>>> quoting=csv.QUOTE_MINIMAL)
>>>>
>>>> listWriter.writerow(['foo', 'bar'])
>>>>
>>>> with open (title+'.csv', "r") as myfile:
>>>> response.body=myfile.read().replace('\n', '')
>>>>
>>>> return response
>>>>
>>>>
>>>> The CSV is created but I can't serve it to the user for download. I am
>>>> always getting this error: "TypeError: No object (name: response) has been
>>>> registered for this thread"
>>>>
>>>> Any help, please?
>>>>
>>>> --
>>>> You received this message because you are subscribed to the Google
>>>> Groups "TurboGears" group.
>>>> To unsubscribe from this group and stop receiving emails from it, send
>>>> an email to [email protected].
>>>> To post to this group, send email to [email protected].
>>>>
>>>> Visit this group at http://groups.google.com/group/turbogears.
>>>> For more options, visit https://groups.google.com/d/optout.
>>>>
>>>
>>> --
>> You received this message because you are subscribed to the Google Groups
>> "TurboGears" group.
>> To unsubscribe from this group and stop receiving emails from it, send an
>> email to [email protected] <javascript:>.
>> To post to this group, send email to [email protected]<javascript:>
>> .
>> Visit this group at http://groups.google.com/group/turbogears.
>> For more options, visit https://groups.google.com/d/optout.
>>
>
>
--
You received this message because you are subscribed to the Google Groups
"TurboGears" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/turbogears.
For more options, visit https://groups.google.com/d/optout.