On Fri, Apr 28, 2017 at 03:38:36PM -0700, [email protected] 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 [email protected].
To post to this group, send email to [email protected].
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