Friday, July 17, 2009

wapi, PaginatedSerializeResponse

использовать это чудо просто, в методе возвращаем что-то типа

return PaginatedSerializeResponse(books.object_list, page=page,
num_pages=num_pages, cname="books")


где books.object_list -- что-то у чего есть __iter__, page -- номер страницы, num_pages -- кол-во страниц.





# -*- coding: utf-8 -*-
from wapi.responses import SerializableResponse
from wapi.formatters import get_formatter
from wapi.serializers import get_object_serialization

def serialize_paginated(format, objs, method, out=None, **kwargs):
fmt = get_formatter(format)(out=out)
fmt.start()

page = kwargs.get('page', 1)
num_pages = kwargs.get('num_pages', 1)
cname = kwargs.get('cname', 'objects')

if objs is None or len(objs) == 0:
s_objects = []
else:
s_objects = [get_object_serialization(obj, method).\
apply(obj, **kwargs)[1] for obj in objs]

presponse = {
'page': page,
'num_pages': num_pages,
cname: s_objects,
}

fmt.format(('paginatedobjects', presponse))
fmt.end()

return fmt.get()


class PaginatedSerializeResponse(SerializableResponse):
def transform(self, cls):
return cls(self.objs, self.method, serialize=serialize_paginated,
*self.args, **self.kwargs)

No comments:

Post a Comment

Labels