[Catalyst] Setting file handle as the response body generates warnings.

neil.lunn neil at mylunn.id.au
Tue Nov 26 07:24:29 GMT 2013


On 26/11/2013 12:54 PM, John Napiorkowski wrote:
> We should probably document what it means by $c->response->body can =

> accept a file handle.  Like plack specifies the interface it must deal =

> with.  Anyone up to that?

Something along these lines maybe?

Catalyst can accept a file handle type of object as the response body in =

the sense that the handle reasonably has a "read" method that will =

return content. In such a case and where no content length has been =

already set in the response headers catalyst will make a reasonable =

attempt to determine the size of the file. Depending on the =

implementation of your file handle object setting the content length may =

fail. If it is at all possible for you to determine the content length =

of your file handle, it is recomended that you set the content length in =

the response headers yourself, which will be respected and sent by =

catalyst in the response.
>
> This FH in body thing is something I've been thinking about a lot =

> lately, in regards to when Catalyst is running under an event loop for =

> example, should Catalyst stream the Filehandle a non blocking manner. =

>  But it would be great to document this.  Also, I am thinking setting =

> the default size when its missing could really belong to middleware. =

>  Plack has some default middleware that does this:
>
> https://metacpan.org/source/MIYAGAWA/Plack-1.0030/lib/Plack/Middleware/Co=
ntentLength.pm

Which interestingly does not take a too different approach to what the =

Catalyst code is attempting. Also noting that in a case such as Bill =

presented it too would fail, which is only to be expected.

Noting such IO magic modules like IO::Uncompress::* and IO::Scalar etc =

and speaking of cat skinning, another approach could be subclassing =

these modues and overloading the file test operators to do something =

sane when used, and thus return a "correct" response when the -s test is =

used. Or try and convince said authors to have these classes do this =

natively.

>
> the means it works looks like this
>
> https://metacpan.org/source/MIYAGAWA/Plack-1.0030/lib/Plack/Util.pm#L68
>
> There's a few things in Catalyst.pm that could profitable just use =

> Plack::Middleware counterparts.
>
> just a thought.
>
> johnnap
>
>
> On Thursday, November 21, 2013 9:20 AM, neil.lunn <neil at mylunn.id.au> =

> wrote:
> On 22/11/2013 12:33 AM, Bill Moseley wrote:
>>
>>
>>
>> On Wed, Nov 20, 2013 at 11:32 PM, neil.lunn <neil at mylunn.id.au =

>> <mailto:neil at mylunn.id.au>> wrote:
>>
>>
>>     This approach may work for you is the compressed data is actually
>>     in a scalar and not too large. And not too small. YMMV.
>>
>>     my $z =3D read_file "product.json.gz";
>>
>>     my $io =3D IO::Scalar->new( \$z );
>>     $io->seek( -4, 2 );
>>     $io->read( my $buf, 4);
>>
>>     my $uncompressed_size =3D unpack( 'V', $buf );
>>
>>
>>
>> This indeed does work in my tests. Thanks for all the help, Neil.   I =

>> really appreciate the time you spent on this.
>>
> No prob. Part of my thing on list reponses is that there is a seed for =

> others to learn from what was discussed.
> I do wonder if there is a sane way to test for an in memory file =

> handle and give a more appropriate warning, but that is for further =

> discussion.
>
>
>>
>>
>> -- =

>> Bill Moseley
>> moseley at hank.org <mailto:moseley at hank.org>
>>
>>
>> _______________________________________________ List: =

>> Catalyst at lists.scsys.co.uk <mailto:Catalyst at lists.scsys.co.uk> =

>> Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst =

>> Searchable archive: =

>> http://www.mail-archive.com/catalyst@lists.scsys.co.uk/ Dev site: =

>> http://dev.catalyst.perl.org/
>>
>
>
>
> ------------------------------------------------------------------------
> <http://www.avast.com/> 	=

> This email is free from viruses and malware because avast! Antivirus =

> <http://www.avast.com/> protection is active.
>
>
>
> _______________________________________________
> List: Catalyst at lists.scsys.co.uk <mailto:Catalyst at lists.scsys.co.uk>
> Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst
> Searchable archive: =

> http://www.mail-archive.com/catalyst@lists.scsys.co.uk/
> Dev site: http://dev.catalyst.perl.org/
>
>
>
>
> _______________________________________________
> List: Catalyst at lists.scsys.co.uk
> Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst
> Searchable archive: http://www.mail-archive.com/catalyst@lists.scsys.co.u=
k/
> Dev site: http://dev.catalyst.perl.org/



---
This email is free from viruses and malware because avast! Antivirus protec=
tion is active.
http://www.avast.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.scsys.co.uk/pipermail/catalyst/attachments/20131126/09aeb=
0af/attachment.htm


More information about the Catalyst mailing list