I'm working on a REST API for which I implement common functionality using
decorators that I can add to the request methods, and part of that common
functionality is setting headers. It's a work in progress but this is the
general idea:

def serializecontent(method):

    @wraps(method)

    def wrapper(self, *args, **keys):



        # Retrieve the data from the wrapped method

        content = method(self, *args, **keys)



        if not content is None:

            # Serialize the data as requested

            serializeddata = self.serialize(content)

            # Set the content headers

            # This may not be the best place to do this, particularly the
> content length.

            self.setcontentlengthheader(serializeddata)

            self.setcontenttypeheader()

            return serializeddata

        else:

            return None


>     return wrapper


class UserCollection(Collection):
>


    @handleexceptions
>     @requestmethod
>     @setetag()
>     @serializecontent
>     @setlastmodified(determinelastmodified=_lastmodified)
>     @conditionalresponse(determinelastmodified=_lastmodified)
>     def GET(self):
>         return Collection.GET(self)



     # ...


Is that more or less hacky? :P It needs a lot of tidying up as it is at the
moment, and I'm probably sidestepping a lot of great functionality that
web.py provides, but the thing I was trying to avoid like yourself was
recreating the same standard functionality in each request method.

Regards,
Kevin

On Wed, Oct 24, 2012 at 9:48 PM, Cameron <[email protected]> wrote:

> I'm curious to know what solution everyone has come up with for setting
> the Content-Length headers for larger web applications. I'd rather not set
> it for every single app / subapp response so I came up with this but it
> seems pretty hacky. Thoughts?
>
> def headersProcessor(h):
>     """    Set the content length and and content type of each request.
>     h : the handler for the requested url
>     return the response from the handler    """
>     res = h()
>     web.header('Content-type', 'text/html; charset=utf-8')
>     web.header('Content-Length', len(res))
>     return res
>
> app.add_processor(headersProcessor)
>
>  --
> You received this message because you are subscribed to the Google Groups
> "web.py" group.
> To view this discussion on the web visit
> https://groups.google.com/d/msg/webpy/-/brb4RSGGqZMJ.
> To post to this group, send email to [email protected].
> To unsubscribe from this group, send email to
> [email protected].
> For more options, visit this group at
> http://groups.google.com/group/webpy?hl=en.
>

-- 
You received this message because you are subscribed to the Google Groups 
"web.py" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/webpy?hl=en.

Reply via email to