diff options
author | Leif Johansson <leifj@sunet.se> | 2011-09-21 11:14:03 +0200 |
---|---|---|
committer | Leif Johansson <leifj@sunet.se> | 2011-09-21 11:14:03 +0200 |
commit | 1d2a3f2403911e0b1ff99ffce808997a24661d15 (patch) | |
tree | 2640220191ce830cebdf3ac49b9ba1711a9bc795 /coip/apps/opensocial | |
parent | e7e435a633cb88af042090c3890763860b3ea9a6 (diff) |
discovery - xrds and system service
Diffstat (limited to 'coip/apps/opensocial')
-rw-r--r-- | coip/apps/opensocial/common.py | 53 | ||||
-rw-r--r-- | coip/apps/opensocial/people.py | 38 |
2 files changed, 54 insertions, 37 deletions
diff --git a/coip/apps/opensocial/common.py b/coip/apps/opensocial/common.py new file mode 100644 index 0000000..131cfeb --- /dev/null +++ b/coip/apps/opensocial/common.py @@ -0,0 +1,53 @@ +''' +Created on Sep 21, 2011 + +@author: leifj +''' +from tastypie.resources import ModelResource +from tastypie.bundle import Bundle +from coip.multiresponse import json_response +from django.core.serializers import json +from django.http import HttpResponseBadRequest + +_rekey = { + 'objects': 'entry' +} + +def system(request): + if request.method == 'POST' and request.META['CONTENT_TYPE'] == 'application/json': + rpc_request = json.simplejson.load(request) + if rpc_request['method'] == 'system.listMethods': + return json_response(['people.get','groups.get','system.listMethods']) + else: + return HttpResponseBadRequest() + +class OpenSocialResource(ModelResource): + + def _restructure(self,request,data,depth): + if isinstance(data, (list,tuple)): + for v in data: + self._restructure(request,v,depth+1) + elif isinstance(data,dict): + for (key,value) in data.iteritems(): + nkey = key + if _rekey.has_key(key): + nkey = _rekey[key] + + data[nkey] = self._restructure(request,data.pop(key),depth+1) + + if data.has_key('meta') and depth == 1: + meta = data.pop('meta') + if request.GET.has_key('count'): + data['totalResults'] = meta['total_count'] + data['itemsPerPage'] = meta['limit'] + data['startIndex'] = meta['offset'] + elif isinstance(data,Bundle): + pass + + return data + + def alter_list_data_to_serialize(self,request,data): + return self._restructure(request,{'response':data},0) + + def alter_detail_data_to_serialize(self,request,data): + return self._restructure(request,{'response': data},0)
\ No newline at end of file diff --git a/coip/apps/opensocial/people.py b/coip/apps/opensocial/people.py index 9f0a925..bf814e2 100644 --- a/coip/apps/opensocial/people.py +++ b/coip/apps/opensocial/people.py @@ -3,7 +3,6 @@ Created on Jun 19, 2011 @author: leifj ''' -from tastypie.resources import ModelResource from django.contrib.auth.models import User from coip.apps.opensocial.serializer import OpenSocialSerializer from django.conf.urls.defaults import url @@ -17,42 +16,7 @@ from tastypie.constants import ALL_WITH_RELATIONS from django.shortcuts import get_object_or_404 import logging from pprint import pformat -from tastypie.bundle import Bundle - -_rekey = { - 'objects': 'entry' -} - -class OpenSocialResource(ModelResource): - - def _restructure(self,request,data,depth): - if isinstance(data, (list,tuple)): - for v in data: - self._restructure(request,v,depth+1) - elif isinstance(data,dict): - for (key,value) in data.iteritems(): - nkey = key - if _rekey.has_key(key): - nkey = _rekey[key] - - data[nkey] = self._restructure(request,data.pop(key),depth+1) - - if data.has_key('meta') and depth == 1: - meta = data.pop('meta') - if request.GET.has_key('count'): - data['totalResults'] = meta['total_count'] - data['itemsPerPage'] = meta['limit'] - data['startIndex'] = meta['offset'] - elif isinstance(data,Bundle): - pass - - return data - - def alter_list_data_to_serialize(self,request,data): - return self._restructure(request,{'response':data},0) - - def alter_detail_data_to_serialize(self,request,data): - return self._restructure(request,{'response': data},0) +from coip.apps.opensocial.common import OpenSocialResource class GroupResource(OpenSocialResource): |