> The guys from the quality control tested this code with the firefox, and
changing the content_type won't work.(e.g. Chrome can handle that)
I kicked out the Selenium/Firefox tests....

The network inspector in firefox shows it receiving the correct content
type. I assume this is just an issue with whatever AJAX library you are
using that isn't properly exposing the headers.

On Thu, Nov 16, 2017 at 1:27 AM, <[email protected]> wrote:

> Hi Michael,
>
> yes you are right. The code works as expected.
> The guys from the quality control tested this code with the firefox, and
> changing the content_type won't work.(e.g. Chrome can handle that)
> I kicked out the Selenium/Firefox tests....
>
> But finally this is a REST-API...so curl and chrome should be enough.
>
> Regards,
> Sascha
>
> @All: Thx
>
>
>
> Am Mittwoch, 15. November 2017 20:52:33 UTC+1 schrieb Michael Merickel:
>
>> > The issue I think here is that he is “raising” the HTTPNotFound()
>> instead of just returning it. At some point this HTTPNotFound that you’ve
>> created needs to be sent back as a response.
>>
>> Ok first, Pyramid already has a HTTPException handler which will catch
>> and return the exception as a response so this @exception_view_config is
>> not necessary.
>>
>> Second, everything actually works completely fine and whatever Sascha is
>> doing in his app is breaking things outside of his pasted example. You can
>> see below this example works as intended:
>>
>> import json
>> from pyramid.httpexceptions import HTTPNotFound
>> from pyramid.view import view_config
>>
>> @view_config(route_name='problem')
>> def problem_view(request):
>>     exc = HTTPNotFound()
>>     exc.text = json.dumps({'message': 'foobar'})
>>     exc.content_type = 'application/problem+json'
>>     raise exc
>>
>> if __name__ == '__main__':
>>     from pyramid.config import Configurator
>>     from waitress import serve
>>
>>     config = Configurator()
>>     config.add_route('problem', '/problem')
>>     config.scan(__name__)
>>     app = config.make_wsgi_app()
>>
>>     serve(app)
>>
>> ~❯ curl -D- http://localhost:8080/problem
>> HTTP/1.1 404 Not Found
>> Content-Length: 21
>> Content-Type: application/problem+json
>> Date: Wed, 15 Nov 2017 19:51:20 GMT
>> Server: waitress
>>
>> {"message": "foobar"}%
>>
>> - Michael
>>
>>
>> On Wed, Nov 15, 2017 at 12:43 PM, Bert JW Regeer <[email protected]>
>> wrote:
>>
>>>
>>>
>>> On Nov 15, 2017, at 08:05, Tres Seaver <[email protected]> wrote:
>>>
>>> On 11/14/2017 09:25 AM, [email protected]
>>>
>>> wrote:
>>>
>>> I have a pyramid application. How can I change the content_type to
>>> problem+json (as defined in: https://tools.ietf.org/html/rfc7807#page-9)
>>>
>>>
>>> Interesting -- thanks for pointing that out!  I'd never come across that
>>> RFC before.
>>>
>>> My code looks like this:
>>> from pyramid.httpexceptions import HTTPNotFound
>>> def error_handler(self, message):
>>>        response = HTTPNotFound()
>>>        response.body = dumps({'message': message})
>>>        response.content_type = 'application/json'
>>>        raise response
>>>
>>> Changing the content_type to application/problem+json doesn't work.
>>>
>>>
>>> 'HTTPExecption.prepare'[1] is overriding that content type based on the
>>> 'Accept:' header detection.  Making that method aware of possible
>>> extension
>>> types seems like a reasonable choice:  the fastest way to get that in
>>> place
>>> would be a pull request with tests.
>>>
>>>
>>> https://github.com/Pylons/pyramid/blob/cc6a6ed60260b0391aa38
>>> f372b26311d58edf0d6/pyramid/httpexceptions.py#L249
>>>
>>> This should be checking if the response already has a body, in which
>>> case prepare won’t do any work…
>>>
>>> Since the response.body is already set, that check should just
>>> short-circuit prepare and not do anything.
>>>
>>> The issue I think here is that he is “raising” the HTTPNotFound()
>>> instead of just returning it. At some point this HTTPNotFound that you’ve
>>> created needs to be sent back as a response.
>>>
>>> @exception_view_config(HTTPNotFound)
>>> def ret_error(exc, request):
>>>     return exc
>>>
>>> For example will return the HTTPNotFound that was raised elsewhere in
>>> your code. Body/content_type will stay in tact.
>>>
>>> If you don’t register an exception view for HTTPNotFound your raise will
>>> get caught by the exception view tween, and it will try to find a view for
>>> it, and upon failure it will raise a HTTPNotFound.
>>>
>>>
>>> In the meanwhile, ISTM that you'll either need to monkey-patch
>>> 'HTTPResponse.prepare' or else stop using exception types which derive
>>> from
>>> 'HTTPException'.  E.g.:
>>>
>>>    from pyramid.response import Response
>>>
>>>    class ProblemResponse(Response, Exception):
>>>        pass
>>>
>>>    def error_handler(self, message):
>>>        raise ProblemResponse(
>>>            body=dumps({'message': message},
>>>            status='404 Not Found',
>>>            content_type = 'application/problem+json',
>>>        )
>>>
>>>
>>> [1]https://github.com/Pylons/pyramid/blob/cc6a6ed60260b0391a
>>> a38f372b26311d58edf0d6/pyramid/httpexceptions.py#L248-L316
>>>
>>>
>>> Tres.
>>> --
>>> ===================================================================
>>> Tres Seaver          +1 540-429-0999          [email protected]
>>> Palladion Software   "Excellence by Design"    http://palladion.com
>>>
>>> --
>>> You received this message because you are subscribed to the Google
>>> Groups "pylons-discuss" 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].
>>> To view this discussion on the web visit https://groups.google.com/d/ms
>>> gid/pylons-discuss/ouhl59%242cf%241%40blaine.gmane.org.
>>> For more options, visit https://groups.google.com/d/optout.
>>>
>>>
>>> --
>>> You received this message because you are subscribed to the Google
>>> Groups "pylons-discuss" 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].
>>> To view this discussion on the web visit https://groups.google.com/d/ms
>>> gid/pylons-discuss/9D026DB3-6B57-4EC3-B09E-8A19FA7E7E10%400x58.com
>>> <https://groups.google.com/d/msgid/pylons-discuss/9D026DB3-6B57-4EC3-B09E-8A19FA7E7E10%400x58.com?utm_medium=email&utm_source=footer>
>>> .
>>>
>>> For more options, visit https://groups.google.com/d/optout.
>>>
>>
>> --
> You received this message because you are subscribed to the Google Groups
> "pylons-discuss" 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].
> To view this discussion on the web visit https://groups.google.com/d/
> msgid/pylons-discuss/d755b129-1c4d-4f55-aba4-a08b6bf5d54f%
> 40googlegroups.com
> <https://groups.google.com/d/msgid/pylons-discuss/d755b129-1c4d-4f55-aba4-a08b6bf5d54f%40googlegroups.com?utm_medium=email&utm_source=footer>
> .
>
> For more options, visit https://groups.google.com/d/optout.
>

-- 
You received this message because you are subscribed to the Google Groups 
"pylons-discuss" 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].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/pylons-discuss/CAKdhhwGhzUZvuuMkBaq1q6p4W%3Dngo%3DQrHWxfou3XWPiDodenZA%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to