From ef6e10597f602eb875b658fc74fc85db48359587 Mon Sep 17 00:00:00 2001 From: Leif Johansson Date: Tue, 8 Nov 2011 19:30:42 +0100 Subject: removed tastypie --- coip/apps/opensocial/__init__.py | 7 -- coip/apps/opensocial/common.py | 53 --------------- coip/apps/opensocial/people.py | 134 ------------------------------------- coip/apps/opensocial/serializer.py | 104 ---------------------------- 4 files changed, 298 deletions(-) delete mode 100644 coip/apps/opensocial/common.py delete mode 100644 coip/apps/opensocial/people.py delete mode 100644 coip/apps/opensocial/serializer.py (limited to 'coip/apps') diff --git a/coip/apps/opensocial/__init__.py b/coip/apps/opensocial/__init__.py index adf3408..e69de29 100644 --- a/coip/apps/opensocial/__init__.py +++ b/coip/apps/opensocial/__init__.py @@ -1,7 +0,0 @@ -from tastypie.api import Api -from coip.apps.opensocial.people import PersonResource, MembershipResource, GroupResource - -opensocial_v1 = Api(api_name = "1.0") -opensocial_v1.register(PersonResource()) -opensocial_v1.register(MembershipResource()) -opensocial_v1.register(GroupResource()) diff --git a/coip/apps/opensocial/common.py b/coip/apps/opensocial/common.py deleted file mode 100644 index 131cfeb..0000000 --- a/coip/apps/opensocial/common.py +++ /dev/null @@ -1,53 +0,0 @@ -''' -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 deleted file mode 100644 index a52fb9d..0000000 --- a/coip/apps/opensocial/people.py +++ /dev/null @@ -1,134 +0,0 @@ -''' -Created on Jun 19, 2011 - -@author: leifj -''' -from django.contrib.auth.models import User -from coip.apps.opensocial.serializer import OpenSocialSerializer -from django.conf.urls.defaults import url -from coip.apps.membership.models import Membership -from tastypie.fields import ToOneField -from tastypie.utils.urls import trailing_slash -from django.core.exceptions import ObjectDoesNotExist, MultipleObjectsReturned -from tastypie.http import HttpGone, HttpMultipleChoices -from coip.apps.name.models import Name -from tastypie.constants import ALL_WITH_RELATIONS -from django.shortcuts import get_object_or_404 -import logging -from pprint import pformat -from coip.apps.opensocial.common import OpenSocialResource -from tastypie.authorization import DjangoAuthorization - -class GroupResource(OpenSocialResource): - - class Meta: - queryset = Name.objects.all() - serializer = OpenSocialSerializer() - resource_name = 'groups' - fields = ['short','description','id'] - #authentication = OAuthAuthentication() - #authorization = DjangoAuthorization() - - def override_urls(self): - return [ - url(r"^(?P%s)/(?P[\@\w\d_.-:]+)/(?P[\d]+)%s?" % (self._meta.resource_name,trailing_slash()), - self.wrap_view('list_memberships'), name="api_list_memberships"), - url(r"^(?P%s)/(?P[\@\w\d_.-:]+)%s" % (self._meta.resource_name,trailing_slash()), - self.wrap_view('list_memberships'), name="api_list_memberships"), - url(r"^(?P%s)%s" % (self._meta.resource_name,trailing_slash()), - self.wrap_view('list_memberships'), name="api_list_memberships"), - ] - - def list_memberships(self, request, **kwargs): - logging.debug(pformat(kwargs)) - try: - user = self.cached_obj_get(request=request, username=kwargs['username']) - logging.debug(pformat(user)) - except ObjectDoesNotExist: - return HttpGone() - except MultipleObjectsReturned: - return HttpMultipleChoices("More than one resource is found at this URI.") - - group_resource = GroupResource() - if kwargs.has_key('name_id'): - name_id = kwargs.pop('name_id') - return group_resource.get_list(request=request, pk=name_id) - else: - - return - - - def dispatch(self, request_type, request, **kwargs): - if kwargs.has_key('username') and kwargs['username'] == '@me': - kwargs['username'] = request.user.username - return super(GroupResource, self).dispatch(request_type, request, **kwargs) - -class MembershipResource(OpenSocialResource): - - user = ToOneField("coip.apps.opensocial.people.PersonResource",'user',full=True) - name = ToOneField("coip.apps.opensocial.people.GroupResource",'name',full=False) - - class Meta: - queryset = Membership.objects.all() - serializer = OpenSocialSerializer() - #authentication = OAuthAuthentication() - #authorization = DjangoAuthorization() - resource_name = 'membership' - fields = ['user','name'] - filtering = { - 'name': ALL_WITH_RELATIONS - } - - def dehydrate(self,bundle): - bundle = super(MembershipResource,self).dehydrate(bundle) - del bundle.data['resource_uri'] - logging.debug(pformat(bundle)) - return bundle - -class PersonResource(OpenSocialResource): - - #memberships = ToManyField(MembershipResource,'memberships',full=True) - - class Meta: - queryset = User.objects.all() - #authentication = OAuthAuthentication() - #authorization = DjangoAuthorization() - fields = ['username'] - resource_name = 'people' - serializer = OpenSocialSerializer() - - def override_urls(self): - return [ - url(r"^(?P%s)/(?P[\@\w\d_.-:]+)/(?P[\d]+)%s?" % (self._meta.resource_name,trailing_slash()), - self.wrap_view('list_memberships'), name="api_list_memberships"), - url(r"^(?P%s)/(?P[\@\w\d_.-:]+)(?:/\@self)?%s" % (self._meta.resource_name,trailing_slash()), - self.wrap_view('dispatch_detail'), name="api_dispatch_detail"), - ] - - def list_memberships(self, request, **kwargs): - logging.debug(pformat(kwargs)) - try: - user = self.cached_obj_get(request=request, username=kwargs['username']) - logging.debug(pformat(user)) - except ObjectDoesNotExist: - return HttpGone() - except MultipleObjectsReturned: - return HttpMultipleChoices("More than one resource is found at this URI.") - - people_resource = PersonResource() - name_id = kwargs.pop('name_id') - name = get_object_or_404(Name,id=name_id) - return people_resource.get_list(request=request, memberships__name=name) - - def dispatch(self, request_type, request, **kwargs): - if kwargs.has_key('username') and kwargs['username'] == '@me': - kwargs['username'] = request.user.username - return super(PersonResource, self).dispatch(request_type, request, **kwargs) - - def dehydrate(self,bundle): - bundle = super(PersonResource,self).dehydrate(bundle) - bundle.data['id'] = bundle.data['username'] - bundle.data['displayName'] = bundle.obj.get_profile().display_name - del bundle.data['resource_uri'] - del bundle.data['username'] - return bundle \ No newline at end of file diff --git a/coip/apps/opensocial/serializer.py b/coip/apps/opensocial/serializer.py deleted file mode 100644 index df0dcc3..0000000 --- a/coip/apps/opensocial/serializer.py +++ /dev/null @@ -1,104 +0,0 @@ -''' -Created on Jun 19, 2011 - -@author: leifj -''' -from tastypie.serializers import Serializer, get_type_string -from tastypie.bundle import Bundle -from django.utils import simplejson -from django.utils.encoding import force_unicode -import string -import logging -from pprint import pformat -from django.core.exceptions import ImproperlyConfigured -from django.core.serializers import json - -try: - import lxml - from lxml.etree import parse as parse_xml - from lxml.etree import Element, tostring -except ImportError: - lxml = None - -class OpenSocialSerializer(Serializer): - - def __init__(self, formats=None, content_types=None, datetime_formatting=None): - super(OpenSocialSerializer,self).__init__(formats,content_types,datetime_formatting) - - def name_data(self,data): - name = 'unknown' - - if hasattr(data,"resource_name"): - name = data.resource_name() - - if isinstance(data,Bundle): - name = self.name_data(data.obj) - elif hasattr(data,"__class__"): - name = string.lower(data.__class__.__name__) - - return name - - def to_json(self, data, options=None): - """ - Given some Python data, produces JSON output. - """ - options = options or {} - data = self.to_simple(data, options) - return simplejson.dumps(data['response'], cls=json.DjangoJSONEncoder, sort_keys=True) - - def to_xml(self, data, options=None): - """ - Given some Python data, produces XML output. - """ - options = options or {} - - if lxml is None: - raise ImproperlyConfigured("Usage of the XML aspects requires lxml.") - - etree = self.to_etree(data, options) - etree.set("xmlns","http://ns.opensocial.org/2008/opensocial") - - return tostring(etree, xml_declaration=True, encoding='utf-8') - - def to_etree(self, data, options=None, name=None, depth=0, parent=None): - """ - Given some data, converts that data to an ``etree.Element`` suitable - for use in the XML output. - """ - - if parent is not None: - logging.debug("+++++++++++ %d %s %s" % (depth,name,tostring(parent))) - else: - logging.debug("+++++++++++ %d %s " % (depth,name)) - logging.debug(pformat(data)) - - if parent is None: - parent = Element(name or self.name_data(data)) - - if isinstance(data, (list, tuple)): - for item in data: - element = Element(name or 'item') - self.to_etree(item, options, depth=depth+1,parent=element) - parent.append(element) - elif isinstance(data, dict): - if len(data) == 1 and depth == 0: - for (key,value) in data.iteritems(): - parent = self.to_etree(value, options, name=key, depth=depth+1,parent=None) - else: - for (key,value) in data.iteritems(): - parent.append(self.to_etree(value, options, name=key, depth=depth+1,parent=parent)) - elif isinstance(data, Bundle): - element = Element(self.name_data(data)) - for field_name, field_object in data.data.items(): - self.to_etree(field_object, options, name=field_name, depth=depth+1, parent=element) - parent.append(element) - else: - element = Element(name or 'value') - simple_data = self.to_simple(data, options) - data_type = get_type_string(simple_data) - #if data_type != 'string': - # element.set('type', get_type_string(simple_data)) - if data_type != 'null': - element.text = force_unicode(simple_data) - parent.append(element) - return parent \ No newline at end of file -- cgit v1.1