On Fri, Apr 28, 2017 at 03:38:36PM -0700, avill...@ucsc.edu wrote:
> Hi everybody, 
> 
> I've successfully gotten a web app that takes user data, uses that to make 
> a query, and the outputs a CSV file. However, what I'd really like is to 
> output an HDF5 file. I googled around and there doesn't seem to be any 
> documentation on outputting an HD5F file from a Django web app. I tried 
> adapting the Django example of outputting a PDF (
> https://docs.djangoproject.com/en/1.10/howto/outputting-pdf/) like this,
> 
> 
> I'm making a website using the Django framework. I've successfully gotten a 
> web app that takes user data, uses that to make a query, and the outputs a 
> CSV file. However, what I'd really like is to output an HDF5 file. I 
> googled around and there doesn't seem to be any documentation on outputting 
> an HD5F file from a Django web app. I tried adapting the Django example of 
> outputting a PDF (
> https://docs.djangoproject.com/en/1.10/howto/outputting-pdf/) like this,
> 
> response = HttpResponse(content_type='application/hdf5')
> response['Content-Disposition'] = 'attachment; filename="test.hdf5"'
> 
> h = h5py.File(response)
> h.create_dataset('Name', data=test[0].name)
> 
> 
> but I get the following error, 
> 
> 'HttpResponse' object has no attribute 'encode'
> 
> 
> So I guess I'm misunderstanding how to use content_type in Django's 
> HttpResponse. Does anybody have any experience with outputting HDF5 files 
> form a Django web app or could help clarify how I might adapt the 
> HttpResponse to work with HDF5?

Hi,

I've never personally used h5py, but at least from the docs [1] it
looks like it only supports writing output to real files in the local
filesystem, not into any file-like object. From a cursory look, the
documentation seems to imply that all file operations are performed by
low-level C code that doesn't know a thing about Python, which makes
it hard to support file-like Python objects.

According to the docs, the “core” file driver with backing_store=False
might do the trick, but I don't see how you could then read the byte
stream of the in-memory file afterwards. Barring that, you'll need to
create a temporary file (for example with the tempfile module [2]),
write the HDF5 file there, read it into the response, and finally
delete the temporary file.

Good luck,

Michal

[1]: http://docs.h5py.org/en/latest/high/file.html#File
[2]: https://docs.python.org/3/library/tempfile.html

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to django-users+unsubscr...@googlegroups.com.
To post to this group, send email to django-users@googlegroups.com.
Visit this group at https://groups.google.com/group/django-users.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-users/20170502082822.GB23772%40koniiiik.org.
For more options, visit https://groups.google.com/d/optout.

Attachment: signature.asc
Description: Digital signature

Reply via email to